From 9158d035af3ab866c62b7825ad332b74191d5ef2 Mon Sep 17 00:00:00 2001 From: Doesnty Date: Wed, 2 Aug 2017 14:18:39 -0500 Subject: Improve battle_4 --- data/battle_scripts_1.s | 6 +- include/battle.h | 5 +- src/battle_4.c | 620 ++++++++++++++++-------------------------------- 3 files changed, 212 insertions(+), 419 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 0945d75c8..e046794b3 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -3485,7 +3485,7 @@ BattleScript_PerishSongTimerGoesDown:: @ 81D921D waitmessage 64 end2 -gUnknown_081D9224:: @ 81D9224 +BattleScript_AllStatsUp:: @ 81D9224 jumpifstat USER, 3, 1, 12, BattleScript_1D9251 jumpifstat USER, 3, 2, 12, BattleScript_1D9251 jumpifstat USER, 3, 3, 12, BattleScript_1D9251 @@ -3659,7 +3659,7 @@ BattleScript_1D93EC: @ 81D93EC waitmessage 64 jump BattleScript_EndTurn -gUnknown_081D93FA:: @ 81D93FA +BattleScript_AtkDefDown:: @ 81D93FA setbyte 0x20160dc, 0 playstatchangeanimation USER, 6, 13 playstatchangeanimation USER, 2, 9 @@ -3731,7 +3731,7 @@ BattleScript_OneHitKOMsg:: @ 81D94A9 waitmessage 64 return -gUnknown_081D94B0:: @ 81D94B0 +BattleScript_SAtkDown2:: @ 81D94B0 setbyte 0x20160dc, 0 playstatchangeanimation USER, 16, 11 setbyte 0x201601e, 164 diff --git a/include/battle.h b/include/battle.h index 4b2542017..495432259 100644 --- a/include/battle.h +++ b/include/battle.h @@ -220,12 +220,11 @@ struct BattleStruct /* 0x2000000 */ /*0x16001*/ u8 turnEffectsBank; /*0x16002*/ u8 animTurn; /*0x16003*/ u8 scriptingActive; - /*0x16004*/ u8 wrappedMove1[4]; - /*0x16008*/ u8 wrappedMove2[4]; + /*0x16004*/ u8 wrappedMove[8]; /*0x1600C*/ u8 cmd49StateTracker; /*0x1600D*/ u8 unk1600D; /*0x1600E*/ u8 turncountersTracker; - /*0x1600F*/ u8 cmd23StateTracker; + /*0x1600F*/ u8 atk23StateTracker; /*0x16010*/ u8 moveTarget[4]; /*0x16014*/ u8 unk16014; /*0x16015*/ u8 unk16015; diff --git a/src/battle_4.c b/src/battle_4.c index 31d6c76dc..b5f774e6b 100644 --- a/src/battle_4.c +++ b/src/battle_4.c @@ -93,6 +93,7 @@ extern u16 gUnknown_02024C2C[4]; //last used moves 2, used by sketch extern u16 gUnknown_030041B0; extern u16 gUnknown_02024C4C[4]; //last used moves by banks, another one extern u8 gCurrentMoveTurn; +extern u16 gTrappingMoves[]; //extern functions u8 AtkCanceller_UnableToUseMove(void); @@ -199,6 +200,9 @@ extern u8 BattleScript_TrainerBallBlock[]; extern u8 BattleScript_WallyBallThrow[]; extern u8 BattleScript_SuccessBallThrow[]; extern u8 BattleScript_ShakeBallThrow[]; +extern u8 BattleScript_AllStatsUp[]; +extern u8 BattleScript_AtkDefDown[]; +extern u8 BattleScript_SAtkDown2[]; extern u8 gUnknown_081D919F[]; //spikes1 extern u8 gUnknown_081D9171[]; //spikes2 @@ -417,6 +421,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 void atk89_statbuffchange(void); static void atk8A_normalisebuffs(void); static void atk8B_setbide(void); @@ -871,19 +876,19 @@ static const u32 gStatusFlagsForMoveEffects[] = 0x00000000 }; -extern const u8 BattleScript_1D963E[]; -extern const u8 BattleScript_1D965A[]; -extern const u8 BattleScript_1D9669[]; -extern const u8 BattleScript_1D9678[]; -extern const u8 BattleScript_1D9687[]; -extern const u8 BattleScript_1D969D[]; -extern const u8 BattleScript_1D96BA[]; -extern const u8 BattleScript_1D9696[]; -extern const u8 BattleScript_1D96B1[]; -extern const u8 BattleScript_1D96AA[]; -extern const u8 BattleScript_1D96C8[]; +extern u8 BattleScript_1D963E[]; +extern u8 BattleScript_1D965A[]; +extern u8 BattleScript_1D9669[]; +extern u8 BattleScript_1D9678[]; +extern u8 BattleScript_1D9687[]; +extern u8 BattleScript_1D969D[]; +extern u8 BattleScript_1D96BA[]; +extern u8 BattleScript_1D9696[]; +extern u8 BattleScript_1D96B1[]; +extern u8 BattleScript_1D96AA[]; +extern u8 BattleScript_1D96C8[]; -const u8* const gMoveEffectBS_Ptrs[] = +u8* const gMoveEffectBS_Ptrs[] = { BattleScript_1D963E, BattleScript_1D963E, @@ -956,7 +961,7 @@ static const u16 sUnknown_081FACFE[] = //banned moves to copy 0xFFFF }; -static const u8 sUnknown_081FAD26[] = +static const u8 sUnknown_081FAD26[] = //reversal+flail HP thresholds to power { 1, 200, 4, 150, @@ -1629,7 +1634,6 @@ static void ModulateDmgByType2(u8 multiplier, u16 move, u8* flags) //a literal c } } -#ifdef NONMATCHING u8 TypeCalc(u16 move, u8 bank_atk, u8 bank_def) { int i = 0; @@ -1671,7 +1675,7 @@ u8 TypeCalc(u16 move, u8 bank_atk, u8 bank_def) ModulateDmgByType2(gTypeEffectiveness[i + 2], move, &flags); //check type2 if (gTypeEffectiveness[i + 1] == gBattleMons[bank_def].type2 && - gBattleMons[bank_def].type1 != gBattleMons[bank_def].type2) + gBattleMons[gBankTarget /* what the christ */].type1 != gBattleMons[bank_def].type2) ModulateDmgByType2(gTypeEffectiveness[i + 2], move, &flags); } i += 3; @@ -1687,254 +1691,6 @@ u8 TypeCalc(u16 move, u8 bank_atk, u8 bank_def) } return flags; } -#else -__attribute__((naked)) -u8 TypeCalc(u16 move, u8 bank_atk, u8 bank_def) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x14\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - mov r10, r0\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - str r1, [sp, 0x4]\n\ - lsls r2, 24\n\ - lsrs r2, 24\n\ - mov r9, r2\n\ - movs r7, 0\n\ - mov r0, sp\n\ - strb r7, [r0]\n\ - mov r0, r10\n\ - cmp r0, 0xA5\n\ - bne _0801D2AE\n\ - movs r0, 0\n\ - b _0801D43A\n\ - _0801D2AE:\n\ - ldr r1, _0801D31C @ =gBattleMoves\n\ - mov r3, r10\n\ - lsls r2, r3, 1\n\ - adds r0, r2, r3\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldrb r0, [r0, 0x2]\n\ - str r0, [sp, 0x8]\n\ - ldr r1, _0801D320 @ =gBattleMons\n\ - movs r0, 0x58\n\ - ldr r3, [sp, 0x4]\n\ - muls r0, r3\n\ - adds r3, r0, r1\n\ - adds r0, r3, 0\n\ - adds r0, 0x21\n\ - ldrb r0, [r0]\n\ - str r2, [sp, 0xC]\n\ - adds r5, r1, 0\n\ - ldr r1, [sp, 0x8]\n\ - cmp r0, r1\n\ - beq _0801D2E2\n\ - adds r0, r3, 0\n\ - adds r0, 0x22\n\ - ldrb r0, [r0]\n\ - cmp r0, r1\n\ - bne _0801D2F4\n\ - _0801D2E2:\n\ - ldr r4, _0801D324 @ =gBattleMoveDamage\n\ - ldr r1, [r4]\n\ - lsls r0, r1, 4\n\ - subs r0, r1\n\ - str r0, [r4]\n\ - movs r1, 0xA\n\ - bl __divsi3\n\ - str r0, [r4]\n\ - _0801D2F4:\n\ - movs r0, 0x58\n\ - mov r2, r9\n\ - muls r2, r0\n\ - adds r0, r2, 0\n\ - adds r0, r5\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x1A\n\ - bne _0801D328\n\ - ldr r3, [sp, 0x8]\n\ - cmp r3, 0x4\n\ - bne _0801D328\n\ - movs r1, 0x9\n\ - mov r0, sp\n\ - ldrb r0, [r0]\n\ - orrs r0, r1\n\ - mov r1, sp\n\ - strb r0, [r1]\n\ - b _0801D3DC\n\ - .align 2, 0\n\ - _0801D31C: .4byte gBattleMoves\n\ - _0801D320: .4byte gBattleMons\n\ - _0801D324: .4byte gBattleMoveDamage\n\ - _0801D328:\n\ - ldr r1, _0801D344 @ =gTypeEffectiveness\n\ - adds r0, r7, r1\n\ - ldrb r0, [r0]\n\ - adds r2, r1, 0\n\ - cmp r0, 0xFF\n\ - beq _0801D3DC\n\ - cmp r0, 0xFE\n\ - bne _0801D34C\n\ - movs r0, 0x58\n\ - mov r1, r9\n\ - muls r1, r0\n\ - adds r0, r1, 0\n\ - b _0801D3CA\n\ - .align 2, 0\n\ - _0801D344: .4byte gTypeEffectiveness\n\ - _0801D348:\n\ - adds r7, 0x3\n\ - b _0801D3B6\n\ - _0801D34C:\n\ - ldr r6, _0801D44C @ =gTypeEffectiveness\n\ - adds r0, r7, r6\n\ - ldrb r0, [r0]\n\ - ldr r2, [sp, 0x8]\n\ - cmp r0, r2\n\ - bne _0801D3B0\n\ - adds r1, r7, 0x1\n\ - adds r1, r6\n\ - ldr r3, _0801D450 @ =gBattleMons\n\ - mov r8, r3\n\ - movs r3, 0x58\n\ - mov r0, r9\n\ - muls r0, r3\n\ - mov r2, r8\n\ - adds r5, r0, r2\n\ - adds r0, r5, 0\n\ - adds r0, 0x21\n\ - ldrb r4, [r1]\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - bne _0801D388\n\ - adds r0, r7, 0x2\n\ - adds r0, r6\n\ - ldrb r0, [r0]\n\ - mov r1, r10\n\ - mov r2, sp\n\ - str r3, [sp, 0x10]\n\ - bl ModulateDmgByType2\n\ - ldr r3, [sp, 0x10]\n\ - _0801D388:\n\ - adds r0, r5, 0\n\ - adds r0, 0x22\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - bne _0801D3B0\n\ - ldr r0, _0801D454 @ =gBankTarget\n\ - ldrb r0, [r0]\n\ - muls r0, r3\n\ - add r0, r8\n\ - adds r0, 0x21\n\ - ldrb r0, [r0]\n\ - cmp r0, r4\n\ - beq _0801D3B0\n\ - adds r0, r7, 0x2\n\ - adds r0, r6\n\ - ldrb r0, [r0]\n\ - mov r1, r10\n\ - mov r2, sp\n\ - bl ModulateDmgByType2\n\ - _0801D3B0:\n\ - adds r7, 0x3\n\ - ldr r5, _0801D450 @ =gBattleMons\n\ - ldr r2, _0801D44C @ =gTypeEffectiveness\n\ - _0801D3B6:\n\ - adds r0, r7, r2\n\ - ldrb r0, [r0]\n\ - cmp r0, 0xFF\n\ - beq _0801D3DC\n\ - cmp r0, 0xFE\n\ - bne _0801D34C\n\ - movs r0, 0x58\n\ - mov r3, r9\n\ - muls r3, r0\n\ - adds r0, r3, 0\n\ - _0801D3CA:\n\ - adds r1, r5, 0\n\ - adds r1, 0x50\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - movs r1, 0x80\n\ - lsls r1, 22\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0801D348\n\ - _0801D3DC:\n\ - movs r0, 0x58\n\ - mov r1, r9\n\ - muls r1, r0\n\ - adds r0, r1, 0\n\ - adds r0, r5\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x19\n\ - bne _0801D436\n\ - mov r0, sp\n\ - ldrb r1, [r0]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0801D436\n\ - ldr r0, [sp, 0x4]\n\ - mov r1, r10\n\ - bl AttacksThisTurn\n\ - lsls r0, 24\n\ - lsrs r1, r0, 24\n\ - cmp r1, 0x2\n\ - bne _0801D436\n\ - mov r0, sp\n\ - ldrb r3, [r0]\n\ - adds r0, r1, 0\n\ - ands r0, r3\n\ - cmp r0, 0\n\ - beq _0801D41E\n\ - movs r0, 0x6\n\ - ands r0, r3\n\ - cmp r0, 0x6\n\ - bne _0801D436\n\ - _0801D41E:\n\ - ldr r0, _0801D458 @ =gBattleMoves\n\ - ldr r1, [sp, 0xC]\n\ - add r1, r10\n\ - lsls r1, 2\n\ - adds r1, r0\n\ - ldrb r0, [r1, 0x1]\n\ - cmp r0, 0\n\ - beq _0801D436\n\ - mov r0, sp\n\ - movs r1, 0x1\n\ - orrs r1, r3\n\ - strb r1, [r0]\n\ - _0801D436:\n\ - mov r0, sp\n\ - ldrb r0, [r0]\n\ - _0801D43A:\n\ - add sp, 0x14\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\ - _0801D44C: .4byte gTypeEffectiveness\n\ - _0801D450: .4byte gBattleMons\n\ - _0801D454: .4byte gBankTarget\n\ - _0801D458: .4byte gBattleMoves\n\ - .syntax divided\n"); -} -#endif // NONMATCHING u8 AI_TypeCalc(u16 move, u16 species, u8 ability) { @@ -2519,7 +2275,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) #define EffectAffectsUser 0x40 register u8 certain asm("r5") = certainArg; register bool32 StatusChanged asm("r10") = 0; - register int AffectsUser asm("r6") = 0; //0x40 otherwise + register int AffectsUser asm("r6") = 0; //0x40 otherwise bool32 NoSunCanFreeze = 1; if (gBattleCommunication[MOVE_EFFECT_BYTE] & EffectAffectsUser) @@ -2535,16 +2291,16 @@ void SetMoveEffect(bool8 primary, u8 certainArg) BATTLE_STRUCT->scriptingActive = gBankAttacker; } - if (gBattleMons[gEffectBank].ability_id == ABILITY_SHIELD_DUST && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) && + if (gBattleMons[gEffectBank].ability == ABILITY_SHIELD_DUST && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) && !primary && gBattleCommunication[MOVE_EFFECT_BYTE] <= 9) {gBattlescriptCurrInstr++; return;} - if (gSideAffecting[get_bank_identity(gEffectBank) & 1] & SIDE_STATUS_SAFEGUARD && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) && + if (gSideAffecting[GetBankIdentity(gEffectBank) & 1] & SIDE_STATUS_SAFEGUARD && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) && !primary && gBattleCommunication[MOVE_EFFECT_BYTE] <= 7) {gBattlescriptCurrInstr++; return;} //make sure at least ONE HP except payday and thief - if (gBattleMons[gEffectBank].current_hp == 0 && gBattleCommunication[MOVE_EFFECT_BYTE] != 0xB && gBattleCommunication[MOVE_EFFECT_BYTE] != 0x1F) + if (gBattleMons[gEffectBank].hp == 0 && gBattleCommunication[MOVE_EFFECT_BYTE] != 0xB && gBattleCommunication[MOVE_EFFECT_BYTE] != 0x1F) {gBattlescriptCurrInstr++; return;} if (gBattleMons[gEffectBank].status2 & STATUS2_SUBSTITUTE && AffectsUser != EffectAffectsUser) @@ -2556,81 +2312,82 @@ void SetMoveEffect(bool8 primary, u8 certainArg) { case STATUS_SLEEP: //check active uproar - if (gBattleMons[gEffectBank].ability_id != ABILITY_SOUNDPROOF) + if (gBattleMons[gEffectBank].ability != ABILITY_SOUNDPROOF) { for (gActiveBank = 0; gActiveBank < gNoOfAllBanks && !(gBattleMons[gActiveBank].status2 & STATUS2_UPROAR); gActiveBank++) {} } else gActiveBank = gNoOfAllBanks; - if (gBattleMons[gEffectBank].status) {break;} + if (gBattleMons[gEffectBank].status1) {break;} if (gActiveBank != gNoOfAllBanks) {break;} //nice way of checking uproar... - if (gBattleMons[gEffectBank].ability_id == ABILITY_VITAL_SPIRIT) {break;} - if (gBattleMons[gEffectBank].ability_id == ABILITY_INSOMNIA) {break;} + if (gBattleMons[gEffectBank].ability == ABILITY_VITAL_SPIRIT) {break;} + if (gBattleMons[gEffectBank].ability == ABILITY_INSOMNIA) {break;} - b_cancel_multi_turn_move_maybe(gEffectBank); + CancelMultiTurnMoves(gEffectBank); StatusChanged = 1; break; case STATUS_POISON: - if (gBattleMons[gEffectBank].ability_id == ABILITY_IMMUNITY && (primary == 1 || certain == 0x80)) + if (gBattleMons[gEffectBank].ability == ABILITY_IMMUNITY && (primary == 1 || certain == 0x80)) { gLastUsedAbility = ABILITY_IMMUNITY; - RecordAbility(gEffectBank, ABILITY_IMMUNITY); + RecordAbilityBattle(gEffectBank, ABILITY_IMMUNITY); b_movescr_stack_push(gBattlescriptCurrInstr + 1); //_0801E664: - gBattlescriptCurrInstr = BS_PSN_PREVENTION; + gBattlescriptCurrInstr = BattleScript_PSNPrevention; if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) { - gBattleCommunication.multistring_chooser = 1; + gBattleCommunication[MULTISTRING_CHOOSER] = 1; gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD); return; } else - {gBattleCommunication.multistring_chooser = 0; return;} + {gBattleCommunication[MULTISTRING_CHOOSER] = 0; return;} } if ((gBattleMons[gEffectBank].type1 == TYPE_POISON || gBattleMons[gEffectBank].type2 == TYPE_POISON || gBattleMons[gEffectBank].type1 == TYPE_STEEL || gBattleMons[gEffectBank].type2 == TYPE_STEEL) && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) && (primary == 1 || certain == 0x80)) { b_movescr_stack_push(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BS_PSN_PREVENTION; - gBattleCommunication.multistring_chooser = 2; + gBattlescriptCurrInstr = BattleScript_PSNPrevention; + gBattleCommunication[MULTISTRING_CHOOSER] = 2; return; } if (gBattleMons[gEffectBank].type1 == TYPE_POISON) {break;} if (gBattleMons[gEffectBank].type2 == TYPE_POISON) {break;} if (gBattleMons[gEffectBank].type1 == TYPE_STEEL) {break;} if (gBattleMons[gEffectBank].type2 == TYPE_STEEL) {break;} - if (gBattleMons[gEffectBank].status) {break;} - if (gBattleMons[gEffectBank].ability_id == ABILITY_IMMUNITY) {break;} + if (gBattleMons[gEffectBank].status1) {break;} + if (gBattleMons[gEffectBank].ability == ABILITY_IMMUNITY) {break;} + StatusChanged = 1; break; case STATUS_BURN: - if (gBattleMons[gEffectBank].ability_id == ABILITY_WATER_VEIL && (primary == 1 || certain == 0x80)) + if (gBattleMons[gEffectBank].ability == ABILITY_WATER_VEIL && (primary == 1 || certain == 0x80)) { gLastUsedAbility = ABILITY_WATER_VEIL; - RecordAbility(gEffectBank, ABILITY_WATER_VEIL); + RecordAbilityBattle(gEffectBank, ABILITY_WATER_VEIL); b_movescr_stack_push(gBattlescriptCurrInstr + 1); //_0801E664: - gBattlescriptCurrInstr = BS_BRN_PREVENTION; + gBattlescriptCurrInstr = BattleScript_BRNPrevention; if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) { - gBattleCommunication.multistring_chooser = 1; + gBattleCommunication[MULTISTRING_CHOOSER] = 1; gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD); return; } else - {gBattleCommunication.multistring_chooser = 0; return;} + {gBattleCommunication[MULTISTRING_CHOOSER] = 0; return;} } if ((gBattleMons[gEffectBank].type1 == TYPE_FIRE || gBattleMons[gEffectBank].type2 == TYPE_FIRE) && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) && (primary == 1 || certain == 0x80)) { b_movescr_stack_push(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BS_BRN_PREVENTION; - gBattleCommunication.multistring_chooser = 2; + gBattlescriptCurrInstr = BattleScript_BRNPrevention; + gBattleCommunication[MULTISTRING_CHOOSER] = 2; return; } if (gBattleMons[gEffectBank].type1 == TYPE_FIRE) {break;} if (gBattleMons[gEffectBank].type2 == TYPE_FIRE) {break;} - if (gBattleMons[gEffectBank].ability_id == ABILITY_WATER_VEIL) {break;} + if (gBattleMons[gEffectBank].ability == ABILITY_WATER_VEIL) {break;} if (gBattleMons[gEffectBank].status1 == 0) {break;} StatusChanged = 1; break; @@ -2638,70 +2395,70 @@ void SetMoveEffect(bool8 primary, u8 certainArg) if (WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_SUN_ANY) {NoSunCanFreeze = 0;} if (gBattleMons[gEffectBank].type1 == TYPE_ICE) {break;} if (gBattleMons[gEffectBank].type2 == TYPE_ICE) {break;} - if (gBattleMons[gEffectBank].status) {break;} + if (gBattleMons[gEffectBank].status1) {break;} if (NoSunCanFreeze == 0) {break;} - if (gBattleMons[gEffectBank].ability_id == ABILITY_MAGMA_ARMOR) {break;} + if (gBattleMons[gEffectBank].ability == ABILITY_MAGMA_ARMOR) {break;} - b_cancel_multi_turn_move_maybe(gEffectBank); + CancelMultiTurnMoves(gEffectBank); StatusChanged = 1; break; case STATUS_PARALYSIS: - if (gBattleMons[gEffectBank].ability_id == ABILITY_LIMBER) + if (gBattleMons[gEffectBank].ability == ABILITY_LIMBER) { if ((primary == 1 || certain == 0x80)) { gLastUsedAbility = ABILITY_LIMBER; - RecordAbility(gEffectBank, ABILITY_LIMBER); + RecordAbilityBattle(gEffectBank, ABILITY_LIMBER); b_movescr_stack_push(gBattlescriptCurrInstr + 1); //_0801E664: - gBattlescriptCurrInstr = BS_PRLZ_PREVENTION; + gBattlescriptCurrInstr = BattleScript_PRLZPrevention; if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) { - gBattleCommunication.multistring_chooser = 1; + gBattleCommunication[MULTISTRING_CHOOSER] = 1; gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD); return; } else - {gBattleCommunication.multistring_chooser = 0; return;} + {gBattleCommunication[MULTISTRING_CHOOSER] = 0; return;} } else {break;} } - if (gBattleMons[gEffectBank].status) {break;} + if (gBattleMons[gEffectBank].status1) {break;} StatusChanged = 1; break; case STATUS_TOXIC_POISON: - if (gBattleMons[gEffectBank].ability_id == ABILITY_IMMUNITY && (primary == 1 || certain == 0x80)) + if (gBattleMons[gEffectBank].ability == ABILITY_IMMUNITY && (primary == 1 || certain == 0x80)) { gLastUsedAbility = ABILITY_IMMUNITY; - RecordAbility(gEffectBank, ABILITY_IMMUNITY); + RecordAbilityBattle(gEffectBank, ABILITY_IMMUNITY); b_movescr_stack_push(gBattlescriptCurrInstr + 1); //_0801E664: - gBattlescriptCurrInstr = BS_PSN_PREVENTION; + gBattlescriptCurrInstr = BattleScript_PSNPrevention; if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) { - gBattleCommunication.multistring_chooser = 1; + gBattleCommunication[MULTISTRING_CHOOSER] = 1; gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD); return; } else - {gBattleCommunication.multistring_chooser = 0; return;} + {gBattleCommunication[MULTISTRING_CHOOSER] = 0; return;} } if ((gBattleMons[gEffectBank].type1 == TYPE_POISON || gBattleMons[gEffectBank].type2 == TYPE_POISON || gBattleMons[gEffectBank].type1 == TYPE_STEEL || gBattleMons[gEffectBank].type2 == TYPE_STEEL) && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) && (primary == 1 || certain == 0x80)) { b_movescr_stack_push(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BS_PSN_PREVENTION; - gBattleCommunication.multistring_chooser = 2; + gBattlescriptCurrInstr = BattleScript_PSNPrevention; + gBattleCommunication[MULTISTRING_CHOOSER] = 2; return; } - if (gBattleMons[gEffectBank].status) {break;} + if (gBattleMons[gEffectBank].status1) {break;} if (gBattleMons[gEffectBank].type1 != TYPE_POISON && gBattleMons[gEffectBank].type2 != TYPE_POISON && gBattleMons[gEffectBank].type1 != TYPE_STEEL && gBattleMons[gEffectBank].type2 != TYPE_STEEL) { - if (gBattleMons[gEffectBank].ability_id == ABILITY_IMMUNITY) {break;} - gBattleMons[gEffectBank].status1 |= ~(STATUS_POISON); //TODO: fix OR to AND + if (gBattleMons[gEffectBank].ability == ABILITY_IMMUNITY) {break;} + gBattleMons[gEffectBank].status1 &= ~(0x9); //This gets (correctly) optimized out... StatusChanged = 1; break; } @@ -2716,20 +2473,20 @@ void SetMoveEffect(bool8 primary, u8 certainArg) gBattleMons[gEffectBank].status1 |= ((Random() & 3) + 2); else gBattleMons[gEffectBank].status1 |= gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]; - gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; + gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; gActiveBank = gEffectBank; - bb2_setattributes_in_battle(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gEffectBank].status); - mark_buffer_bank_for_execution(gActiveBank); + EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gEffectBank].status1); + MarkBufferBankForExecution(gActiveBank); if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) { - gBattleCommunication.multistring_chooser = 1; + gBattleCommunication[MULTISTRING_CHOOSER] = 1; gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD); } else - gBattleCommunication.multistring_chooser = 0; + 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]; + BATTLE_STRUCT->synchroniseEffect = gBattleCommunication[MOVE_EFFECT_BYTE]; gHitMarker |= HITMARKER_SYNCHRONISE_EFFECT; } return; @@ -2747,22 +2504,22 @@ void SetMoveEffect(bool8 primary, u8 certainArg) switch (gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]) { case 7: //confusion - if (gBattleMons[gEffectBank].ability_id == ABILITY_OWN_TEMPO) + if (gBattleMons[gEffectBank].ability == ABILITY_OWN_TEMPO) {gBattlescriptCurrInstr++; return;} if (gBattleMons[gEffectBank].status2 & STATUS2_CONFUSION) {gBattlescriptCurrInstr++; return;} gBattleMons[gEffectBank].status2 |= (((Random()) % 0x4)) + 2; b_movescr_stack_push(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; + gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; break; case 8: //flinch - if (gBattleMons[gEffectBank].ability_id == ABILITY_INNER_FOCUS) + if (gBattleMons[gEffectBank].ability == ABILITY_INNER_FOCUS) { if (primary == 1 || certain == 0x80) { gLastUsedAbility = ABILITY_INNER_FOCUS; - RecordAbility(gEffectBank, ABILITY_INNER_FOCUS); - gBattlescriptCurrInstr = BS_FLINCH_PREVENTION; + RecordAbilityBattle(gEffectBank, ABILITY_INNER_FOCUS); + gBattlescriptCurrInstr = BattleScript_FlinchPrevention; return; } else @@ -2782,21 +2539,21 @@ void SetMoveEffect(bool8 primary, u8 certainArg) gLockedMove[gEffectBank] = gCurrentMove; gBattleMons[gEffectBank].status2 |= ((Random() & 3) + 2) << 4; b_movescr_stack_push(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; + gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; break; case 11: //pay day - if (!(get_bank_identity(gEffectBank) & 1)) + if (!(GetBankIdentity(gBankAttacker) & 1)) { u16 PayDay = gPaydayMoney; - gPaydayMoney += (gBattleMons[gEffectBank].level * 5); + gPaydayMoney += (gBattleMons[gBankAttacker].level * 5); if (PayDay > gPaydayMoney) gPaydayMoney = 0xFFFF; } b_movescr_stack_push(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; + gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; break; case 9: //tri attack - if (gBattleMons[gEffectBank].status) + if (gBattleMons[gEffectBank].status1) {gBattlescriptCurrInstr++; return;} gBattleCommunication[MOVE_EFFECT_BYTE] = Random() % 3 + 3; SetMoveEffect(0, 0); @@ -2804,73 +2561,73 @@ void SetMoveEffect(bool8 primary, u8 certainArg) case 12: //charging move gBattleMons[gEffectBank].status2 |= STATUS2_MULTIPLETURNS; gLockedMove[gEffectBank] = gCurrentMove; - gProtectStructs[gEffectBank].flag1_chargingturn = 1; + gProtectStructs[gEffectBank].chargingTurn = 1; gBattlescriptCurrInstr++; break; case 13: //wrap if (gBattleMons[gEffectBank].status2 & STATUS2_WRAPPED) {gBattlescriptCurrInstr++; return;} gBattleMons[gEffectBank].status2 |= ((Random() & 3) + 2) << 0xD; - BATTLE_STRUCT->WrappedMove1[gEffectBank] = gCurrentMove; - BATTLE_STRUCT->WrappedMove2[gEffectBank] = gCurrentMove >> 8; - BATTLE_STRUCT->WrappedBy[gEffectBank] = gBankAttacker; + BATTLE_STRUCT->wrappedMove[gEffectBank*2] = (u8)gCurrentMove; + (1 + BATTLE_STRUCT->wrappedMove)[gEffectBank*2] = gCurrentMove >> 8; //don't ask. + BATTLE_STRUCT->wrappedBy[gEffectBank] = gBankAttacker; b_movescr_stack_push(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; - gBattleCommunication.multistring_chooser = 0; - while (gBattleCommunication.multistring_chooser <= 4 - && gCurrentMove != gTrappingMoves[gBattleCommunication.multistring_chooser]) - gBattleCommunication.multistring_chooser++; + gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + while (gBattleCommunication[MULTISTRING_CHOOSER] <= 4 + && gCurrentMove != gTrappingMoves[gBattleCommunication[MULTISTRING_CHOOSER]]) + gBattleCommunication[MULTISTRING_CHOOSER]++; break; - case 14: //recoil + case 14: //25% recoil gBattleMoveDamage = (gHP_dealt) / 4; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; b_movescr_stack_push(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; + gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; break; case 15 ... 21: //stat + 1 - if (ChangeStats(0x10, gBattleCommunication[MOVE_EFFECT_BYTE] + 0xF2, certain, 0)) {gBattlescriptCurrInstr++;} + 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; b_movescr_stack_push(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BS_STAT_UP; + gBattlescriptCurrInstr = BattleScript_StatUp; } break; case 22 ... 28: //stat - 1 - if (ChangeStats(~(0x6f), gBattleCommunication[MOVE_EFFECT_BYTE] + 0xEB, certain, 0)) {gBattlescriptCurrInstr++;} //TODO: negation doesnt work correctly + 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; b_movescr_stack_push(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BS_STAT_DOWN; + gBattlescriptCurrInstr = BattleScript_StatDown; } break; case 39 ... 45: //stat + 2 - if (ChangeStats(0x20, gBattleCommunication[MOVE_EFFECT_BYTE] + 0xDA, certain, 0)) {gBattlescriptCurrInstr++;} + if (ChangeStatBuffs(0x20, gBattleCommunication[MOVE_EFFECT_BYTE] + 0xDA, certain, 0)) {gBattlescriptCurrInstr++;} else { BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; BATTLE_STRUCT->animArg2 = 0; b_movescr_stack_push(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BS_STAT_UP; + gBattlescriptCurrInstr = BattleScript_StatUp; } break; case 46 ... 52: //stat - 2 - if (ChangeStats(~(0x5f), gBattleCommunication[MOVE_EFFECT_BYTE] + 0xD3, certain, 0)) {gBattlescriptCurrInstr++;} + if (ChangeStatBuffs(~(0x5f), gBattleCommunication[MOVE_EFFECT_BYTE] + 0xD3, certain, 0)) {gBattlescriptCurrInstr++;} else { BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; BATTLE_STRUCT->animArg2 = 0; b_movescr_stack_push(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BS_STAT_DOWN; + gBattlescriptCurrInstr = BattleScript_StatDown; } break; case 29: //recharge gBattleMons[gEffectBank].status2 |= STATUS2_RECHARGE; - gDisableStructs[gEffectBank].recharge_counter = 2; + gDisableStructs[gEffectBank].rechargeCounter = 2; gLockedMove[gEffectBank] = gCurrentMove; gBattlescriptCurrInstr++; break; @@ -2880,83 +2637,85 @@ void SetMoveEffect(bool8 primary, u8 certainArg) break; case 31: //item steal { - u8 side = battle_side_get_owner(gBankAttacker); - if (battle_side_get_owner(gBankAttacker) == 1 && !(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK)) && gTrainerBattleOpponent != 0x400) + u8 side = GetBankSide(gBankAttacker); + if (GetBankSide(gBankAttacker) == 1 && !(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK)) && gTrainerBattleOpponent != 0x400) {gBattlescriptCurrInstr++; return;} - if (!(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK)) && gTrainerBattleOpponent != 0x400 && (gWishFutureKnock.KnockedOff[side] & gBitTable[gBattlePartyID[gBankAttacker]])) + if (!(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK)) && gTrainerBattleOpponent != 0x400 && (gWishFutureKnock.knockedOffPokes[side] & gBitTable[gBattlePartyID[gBankAttacker]])) {gBattlescriptCurrInstr++; return;} - if (gBattleMons[gBankTarget].held_item && gBattleMons[gBankTarget].ability_id == ABILITY_STICKY_HOLD) + if (gBattleMons[gBankTarget].item && gBattleMons[gBankTarget].ability == ABILITY_STICKY_HOLD) { b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = BS_NO_ITEMSTEAL; - gLastUsedAbility = gBattleMons[gBankTarget].ability_id; - RecordAbility(gBankTarget, gLastUsedAbility); + gBattlescriptCurrInstr = BattleScript_NoItemSteal; + gLastUsedAbility = gBattleMons[gBankTarget].ability; + RecordAbilityBattle(gBankTarget, gLastUsedAbility); return; } - if (gBattleMons[gBankAttacker].held_item) + if (gBattleMons[gBankAttacker].item) {gBattlescriptCurrInstr++; return;} - if (gBattleMons[gBankTarget].held_item == ITEM_ENIGMA_BERRY) + if (gBattleMons[gBankTarget].item == ITEM_ENIGMA_BERRY) {gBattlescriptCurrInstr++; return;} - if (gBattleMons[gBankTarget].held_item == 0) + if (gBattleMons[gBankTarget].item == 0) {gBattlescriptCurrInstr++; return;} - CHANGED_HELDITEMS[gBankAttacker] = gLastUsedItem = gBattleMons[gBankTarget].held_item; - gBattleMons[gBankTarget].held_item = 0; + gLastUsedItem = gBattleMons[gBankTarget].item; + unk_2000000[gBankAttacker * 2 + 0x160cc] = gLastUsedItem; + gBattleMons[gBankTarget].item = 0; gActiveBank = gBankAttacker; - bb2_setattributes_in_battle(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gLastUsedItem); - mark_buffer_bank_for_execution(gBankAttacker); + EmitSetAttributes(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gLastUsedItem); + MarkBufferBankForExecution(gBankAttacker); gActiveBank = gBankTarget; - bb2_setattributes_in_battle(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gBankTarget].held_item); - mark_buffer_bank_for_execution(gBankTarget); + EmitSetAttributes(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gBankTarget].item); + MarkBufferBankForExecution(gBankTarget); b_movescr_stack_push(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BS_ITEMSTEAL; + gBattlescriptCurrInstr = BattleScript_ItemSteal; - STORE_CHOICEMOVE(gBankTarget, 0); + ewram[gBankTarget * 2 + 0x160e8] = 0; + //STORE_CHOICEMOVE(gBankTarget, 0); } break; case 32: //escape prevention gBattleMons[gBankTarget].status2 |= STATUS2_RECHARGE; - gDisableStructs[gBankTarget].BankPreventingEscape = gBankAttacker; + gDisableStructs[gBankTarget].bankPreventingEscape = gBankAttacker; gBattlescriptCurrInstr++; break; case 33: //nightmare gBattleMons[gBankTarget].status2 |= STATUS2_NIGHTMARE; gBattlescriptCurrInstr++; break; - case 34: + case 34: //ancientpower b_movescr_stack_push(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = gUnknown_081D9224; + gBattlescriptCurrInstr = BattleScript_AllStatsUp; return; case 35: //break free rapidspin b_movescr_stack_push(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BS_RAPIDSPINAWAY; + gBattlescriptCurrInstr = BattleScript_RapidSpinAway; return; case 36: //paralysis removal if (gBattleMons[gBankTarget].status1 & STATUS_PARALYSIS) { gBattleMons[gBankTarget].status1 &= ~(STATUS_PARALYSIS); gActiveBank = gBankTarget; - bb2_setattributes_in_battle(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gBankTarget].status); - mark_buffer_bank_for_execution(gActiveBank); + EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gBankTarget].status1); + MarkBufferBankForExecution(gActiveBank); b_movescr_stack_push(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BS_PARALYSISHEALED; + gBattlescriptCurrInstr = BattleScript_TargetPRLZHeal; } else {gBattlescriptCurrInstr++; return;} break; - case 37: // + case 37: //superpower b_movescr_stack_push(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = gUnknown_081D93FA; + gBattlescriptCurrInstr = BattleScript_AtkDefDown; return; - case 38: //recoil plus paralysis + case 38: //33% recoil gBattleMoveDamage = gHP_dealt / 3; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; b_movescr_stack_push(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; + gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; break; case 53: //thrash if (!(gBattleMons[gEffectBank].status2 & STATUS2_LOCK_CONFUSE)) @@ -2969,32 +2728,33 @@ void SetMoveEffect(bool8 primary, u8 certainArg) {gBattlescriptCurrInstr++; return;} break; case 54: //knock off - if (gBattleMons[gEffectBank].ability_id == ABILITY_STICKY_HOLD) + if (gBattleMons[gEffectBank].ability == ABILITY_STICKY_HOLD) { - if (gBattleMons[gEffectBank].held_item == 0) + if (gBattleMons[gEffectBank].item == 0) {gBattlescriptCurrInstr++; return;} gLastUsedAbility = ABILITY_STICKY_HOLD; - gBattlescriptCurrInstr = BS_STICKYHOLD_ACTIVATES; - RecordAbility(gEffectBank, ABILITY_STICKY_HOLD); + gBattlescriptCurrInstr = BattleScript_NoItemSteal; + RecordAbilityBattle(gEffectBank, ABILITY_STICKY_HOLD); return; } - if (gBattleMons[gEffectBank].held_item == 0) + if (gBattleMons[gEffectBank].item == 0) {gBattlescriptCurrInstr++; return;} else { - u8 side = battle_side_get_owner(gEffectBank); - gLastUsedItem = gBattleMons[gEffectBank].held_item; - gBattleMons[gEffectBank].held_item = 0; - gWishFutureKnock.KnockedOff[side] |= gBitTable[gBattlePartyID[gEffectBank]]; + u8 side = GetBankSide(gEffectBank); + gLastUsedItem = gBattleMons[gEffectBank].item; + gBattleMons[gEffectBank].item = 0; + gWishFutureKnock.knockedOffPokes[side] |= gBitTable[gBattlePartyID[gEffectBank]]; b_movescr_stack_push(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BS_KNOCKEDOFF; + gBattlescriptCurrInstr = BattleScript_KnockedOff; - STORE_CHOICEMOVE(gEffectBank, 0); + ewram[gEffectBank * 2 + 0x160e8] = 0; + //STORE_CHOICEMOVE(gEffectBank, 0); } break; - case 59: //overheat I guess, dont remember + case 59: //overheat b_movescr_stack_push(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = gUnknown_081D94B0; + gBattlescriptCurrInstr = BattleScript_SAtkDown2; return; } } @@ -4897,11 +4657,11 @@ _0801F3BC:\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ bl b_movescr_stack_push\n\ - ldr r0, _0801F3D0 @ =gUnknown_081D9224\n\ + ldr r0, _0801F3D0 @ =BattleScript_AllStatsUp\n\ b _0801F5F8\n\ .align 2, 0\n\ _0801F3CC: .4byte gBattlescriptCurrInstr\n\ -_0801F3D0: .4byte gUnknown_081D9224\n\ +_0801F3D0: .4byte BattleScript_AllStatsUp\n\ _0801F3D4:\n\ ldr r4, _0801F3E4 @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ @@ -4961,11 +4721,11 @@ _0801F44C:\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ bl b_movescr_stack_push\n\ - ldr r0, _0801F460 @ =gUnknown_081D93FA\n\ + ldr r0, _0801F460 @ =BattleScript_AtkDefDown\n\ b _0801F5F8\n\ .align 2, 0\n\ _0801F45C: .4byte gBattlescriptCurrInstr\n\ -_0801F460: .4byte gUnknown_081D93FA\n\ +_0801F460: .4byte BattleScript_AtkDefDown\n\ _0801F464:\n\ ldr r4, _0801F494 @ =gBattleMoveDamage\n\ ldr r0, _0801F498 @ =gHP_dealt\n\ @@ -5150,7 +4910,7 @@ _0801F5EC:\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ bl b_movescr_stack_push\n\ - ldr r0, _0801F610 @ =gUnknown_081D94B0\n\ + ldr r0, _0801F610 @ =BattleScript_SAtkDown2\n\ _0801F5F8:\n\ str r0, [r4]\n\ _0801F5FA:\n\ @@ -5164,11 +4924,12 @@ _0801F5FA:\n\ bx r0\n\ .align 2, 0\n\ _0801F60C: .4byte gBattlescriptCurrInstr\n\ -_0801F610: .4byte gUnknown_081D94B0\n\ +_0801F610: .4byte BattleScript_SAtkDown2\n\ .syntax divided\n"); } #endif // NONMATCHING + static void atk15_seteffectwithchancetarget(void) { u32 PercentChance; @@ -5841,13 +5602,14 @@ static void atk23_getexp(void) else { BATTLE_STRUCT->atk23StateTracker++; - unk_2000000[0x16113] |= gBitTable[gBattlePartyID[gBank1]]; + ((u8*)ewram)[0x16113] |= gBitTable[gBattlePartyID[gBank1]]; } break; case 1: //calculate experience points to redistribute { - int via_sent_in = 0, i; + int via_sent_in = 0; u16 calculatedExp; + int i; for (i = 0; i < 6; i++) { u16 item; @@ -5903,15 +5665,14 @@ static void atk23_getexp(void) BATTLE_STRUCT->sentInPokes >>= 1; tracker = &BATTLE_STRUCT->atk23StateTracker; zero = 0; - goto LABEL; + *tracker = 5; //increment looper + gBattleMoveDamage = zero; //used for exp } else if (GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL) == 100) { - BATTLE_STRUCT->sentInPokes >>= 1; tracker = &BATTLE_STRUCT->atk23StateTracker; zero = 0; - LABEL: *tracker = 5; //increment looper gBattleMoveDamage = zero; //used for exp } @@ -5927,7 +5688,7 @@ static void atk23_getexp(void) if (GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP)) { - s16 stringID; + s16 stringID; if (BATTLE_STRUCT->sentInPokes & 1) gBattleMoveDamage = *exp; else @@ -5946,7 +5707,9 @@ static void atk23_getexp(void) stringID = 0x14A; } else - stringID = 0x149; + { + stringID = 0x149; + } //get exp getter bank if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) @@ -5971,12 +5734,13 @@ static void atk23_getexp(void) gBattleTextBuff1[3] = BATTLE_STRUCT->expGetterID; gBattleTextBuff1[4] = 0xFF; - //buffer 'gained' or 'gained a boosted' - gBattleTextBuff2[0] = 0xFD; - gBattleTextBuff2[1] = 0; - gBattleTextBuff2[2] = sBYTE0_32(stringID); - gBattleTextBuff2[3] = sBYTE1_32(stringID); - gBattleTextBuff2[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; @@ -6003,12 +5767,12 @@ static void atk23_getexp(void) gBattleBufferB[BATTLE_STRUCT->expGetterBank][0] = 0; if (GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP) && GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL) != 100) { - BATTLE_STRUCT->beforeLvlUp[0] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MAX_HP); //doesnt match - BATTLE_STRUCT->beforeLvlUp[1] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_ATK); - BATTLE_STRUCT->beforeLvlUp[2] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_DEF); - BATTLE_STRUCT->beforeLvlUp[3] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPD); - BATTLE_STRUCT->beforeLvlUp[4] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPATK); - BATTLE_STRUCT->beforeLvlUp[5] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPDEF); + ((u16*)ewram + 0xB8C0)[0] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MAX_HP); //doesnt match + ((u16*)ewram + 0xB8C0)[1] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_ATK); + ((u16*)ewram + 0xB8C0)[2] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_DEF); + ((u16*)ewram + 0xB8C0)[3] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPD); + ((u16*)ewram + 0xB8C0)[4] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPATK); + ((u16*)ewram + 0xB8C0)[5] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPDEF); gActiveBank = BATTLE_STRUCT->expGetterBank; EmitExpBarUpdate(0, BATTLE_STRUCT->expGetterID, gBattleMoveDamage); @@ -8031,9 +7795,39 @@ _080214AE:\n\ #ifdef NONMATCHING static void atk46_playanimation2(void) { - + u8 arg1; + u8* arg2; + u16* arg3; + u32 something; + + arg1 = BSScriptRead8(gBattlescriptCurrInstr + 1); + gActiveBank = GetBattleBank(arg1); + arg2 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 2); + arg3 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 6); + + if (*arg2 == 1 || *arg2 == 0x11 || *arg2 == 2) + { + EmitBattleAnimation(0, *arg2, *arg3); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 10; + return; + } + if ((gHitMarker & 0x80)) + { + something = (u32)(gBattlescriptCurrInstr + 10); + } + else + { + u8 yeah = *arg2 - 10; + if (yeah < 4 || (gStatuses3[gActiveBank] & 0x000400C0) == 0) + { + EmitBattleAnimation(0, *arg2, *arg3); + MarkBufferBankForExecution(gActiveBank); + } + something = (u32)(gBattlescriptCurrInstr + 10); + } + gBattlescriptCurrInstr = (u8*)something; } - #else __attribute__((naked)) static void atk46_playanimation2(void) -- cgit v1.2.3 From 04110a7040ae2a93505812fbb215bc52fdaf0e95 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 13 Aug 2017 17:55:25 -0500 Subject: decompile nullsub_91 - sub_802C2EC --- asm/battle_5.s | 873 --------------------------------------------------------- data/data2b.s | 65 ----- ld_script.txt | 2 + src/battle_5.c | 433 ++++++++++++++++++++++++++++ 4 files changed, 435 insertions(+), 938 deletions(-) create mode 100644 src/battle_5.c diff --git a/asm/battle_5.s b/asm/battle_5.s index b72266193..fbbd9f04c 100644 --- a/asm/battle_5.s +++ b/asm/battle_5.s @@ -5,879 +5,6 @@ .syntax unified .text - - thumb_func_start nullsub_91 -nullsub_91: @ 802BF70 - bx lr - thumb_func_end nullsub_91 - - thumb_func_start SetBankFuncToPlayerBufferRunCommand -SetBankFuncToPlayerBufferRunCommand: @ 802BF74 - ldr r1, _0802BF8C @ =gBattleBankFunc - ldr r0, _0802BF90 @ =gActiveBank - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r1, _0802BF94 @ =PlayerBufferRunCommand - str r1, [r0] - ldr r1, _0802BF98 @ =gDoingBattleAnim - movs r0, 0 - strb r0, [r1] - bx lr - .align 2, 0 -_0802BF8C: .4byte gBattleBankFunc -_0802BF90: .4byte gActiveBank -_0802BF94: .4byte PlayerBufferRunCommand -_0802BF98: .4byte gDoingBattleAnim - thumb_func_end SetBankFuncToPlayerBufferRunCommand - - thumb_func_start PlayerBufferExecCompleted -PlayerBufferExecCompleted: @ 802BF9C - push {r4,lr} - sub sp, 0x4 - ldr r1, _0802BFDC @ =gBattleBankFunc - ldr r4, _0802BFE0 @ =gActiveBank - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, _0802BFE4 @ =PlayerBufferRunCommand - str r1, [r0] - ldr r0, _0802BFE8 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0802BFF0 - bl GetMultiplayerId - mov r1, sp - strb r0, [r1] - movs r0, 0x2 - movs r1, 0x4 - mov r2, sp - bl dp01_prepare_buffer_wireless_probably - ldr r1, _0802BFEC @ =gBattleBufferA - ldrb r0, [r4] - lsls r0, 9 - adds r0, r1 - movs r1, 0x38 - strb r1, [r0] - b _0802C002 - .align 2, 0 -_0802BFDC: .4byte gBattleBankFunc -_0802BFE0: .4byte gActiveBank -_0802BFE4: .4byte PlayerBufferRunCommand -_0802BFE8: .4byte gBattleTypeFlags -_0802BFEC: .4byte gBattleBufferA -_0802BFF0: - ldr r2, _0802C00C @ =gBattleExecBuffer - ldr r1, _0802C010 @ =gBitTable - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - ldr r0, [r2] - bics r0, r1 - str r0, [r2] -_0802C002: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0802C00C: .4byte gBattleExecBuffer -_0802C010: .4byte gBitTable - thumb_func_end PlayerBufferExecCompleted - - thumb_func_start PlayerBufferRunCommand -PlayerBufferRunCommand: @ 802C014 - push {lr} - ldr r2, _0802C048 @ =gBattleExecBuffer - ldr r1, _0802C04C @ =gBitTable - ldr r0, _0802C050 @ =gActiveBank - ldrb r3, [r0] - lsls r0, r3, 2 - adds r0, r1 - ldr r1, [r2] - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - beq _0802C060 - ldr r0, _0802C054 @ =gBattleBufferA - lsls r1, r3, 9 - adds r1, r0 - ldrb r0, [r1] - cmp r0, 0x38 - bhi _0802C05C - ldr r0, _0802C058 @ =gPlayerBufferCommands - ldrb r1, [r1] - lsls r1, 2 - adds r1, r0 - ldr r0, [r1] - bl _call_via_r0 - b _0802C060 - .align 2, 0 -_0802C048: .4byte gBattleExecBuffer -_0802C04C: .4byte gBitTable -_0802C050: .4byte gActiveBank -_0802C054: .4byte gBattleBufferA -_0802C058: .4byte gPlayerBufferCommands -_0802C05C: - bl PlayerBufferExecCompleted -_0802C060: - pop {r0} - bx r0 - thumb_func_end PlayerBufferRunCommand - - thumb_func_start bx_0802E404 -bx_0802E404: @ 802C064 - push {lr} - ldr r2, _0802C08C @ =gSprites - ldr r1, _0802C090 @ =gObjectBankIDs - ldr r0, _0802C094 @ =gActiveBank - ldrb r0, [r0] - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0x24 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _0802C086 - bl PlayerBufferExecCompleted -_0802C086: - pop {r0} - bx r0 - .align 2, 0 -_0802C08C: .4byte gSprites -_0802C090: .4byte gObjectBankIDs -_0802C094: .4byte gActiveBank - thumb_func_end bx_0802E404 - - thumb_func_start sub_802C098 -sub_802C098: @ 802C098 - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r7, _0802C0FC @ =gBattleBufferA - ldr r4, _0802C100 @ =gActiveBank - ldrb r0, [r4] - lsls r2, r0, 9 - adds r1, r7, 0x2 - adds r1, r2, r1 - ldrb r5, [r1] - adds r1, r7, 0x3 - adds r2, r1 - ldrb r1, [r2] - lsls r1, 8 - orrs r5, r1 - movs r1, 0x1 - movs r2, 0x7 - movs r3, 0x1 - bl dp11b_obj_instanciate - ldrb r0, [r4] - movs r1, 0 - movs r2, 0x7 - movs r3, 0x1 - bl dp11b_obj_instanciate - ldr r0, _0802C104 @ =gMain - ldrh r1, [r0, 0x2E] - movs r2, 0x1 - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - beq _0802C13E - movs r0, 0x5 - bl PlaySE - bl DestroyMenuCursor - ldr r1, _0802C108 @ =gActionSelectionCursor - ldrb r0, [r4] - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x1 - beq _0802C11C - cmp r0, 0x1 - bgt _0802C10C - cmp r0, 0 - beq _0802C116 - b _0802C138 - .align 2, 0 -_0802C0FC: .4byte gBattleBufferA -_0802C100: .4byte gActiveBank -_0802C104: .4byte gMain -_0802C108: .4byte gActionSelectionCursor -_0802C10C: - cmp r0, 0x2 - beq _0802C122 - cmp r0, 0x3 - beq _0802C12E - b _0802C138 -_0802C116: - movs r0, 0x1 - movs r1, 0 - b _0802C126 -_0802C11C: - movs r0, 0x1 - movs r1, 0x1 - b _0802C126 -_0802C122: - movs r0, 0x1 - movs r1, 0x2 -_0802C126: - movs r2, 0 - bl dp01_build_cmdbuf_x21_a_bb - b _0802C138 -_0802C12E: - movs r0, 0x1 - movs r1, 0x3 - movs r2, 0 - bl dp01_build_cmdbuf_x21_a_bb -_0802C138: - bl PlayerBufferExecCompleted - b _0802C2AC -_0802C13E: - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _0802C178 - ldr r5, _0802C174 @ =gActionSelectionCursor - ldrb r0, [r4] - adds r0, r5 - ldrb r1, [r0] - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - bne _0802C158 - b _0802C2AC -_0802C158: - movs r0, 0x5 - bl PlaySE - ldrb r0, [r4] - adds r0, r5 - ldrb r0, [r0] - bl nullsub_8 - ldrb r1, [r4] - adds r1, r5 - ldrb r0, [r1] - movs r2, 0x1 - b _0802C200 - .align 2, 0 -_0802C174: .4byte gActionSelectionCursor -_0802C178: - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0802C1B0 - ldr r5, _0802C1AC @ =gActionSelectionCursor - ldrb r0, [r4] - adds r0, r5 - ldrb r1, [r0] - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - beq _0802C192 - b _0802C2AC -_0802C192: - movs r0, 0x5 - bl PlaySE - ldrb r0, [r4] - adds r0, r5 - ldrb r0, [r0] - bl nullsub_8 - ldrb r1, [r4] - adds r1, r5 - ldrb r0, [r1] - movs r2, 0x1 - b _0802C200 - .align 2, 0 -_0802C1AC: .4byte gActionSelectionCursor -_0802C1B0: - movs r0, 0x40 - mov r8, r0 - ands r0, r1 - cmp r0, 0 - beq _0802C1D0 - ldr r5, _0802C1CC @ =gActionSelectionCursor - ldrb r0, [r4] - adds r0, r5 - ldrb r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0802C2AC - b _0802C1E8 - .align 2, 0 -_0802C1CC: .4byte gActionSelectionCursor -_0802C1D0: - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0802C218 - ldr r5, _0802C214 @ =gActionSelectionCursor - ldrb r0, [r4] - adds r0, r5 - ldrb r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _0802C2AC -_0802C1E8: - movs r0, 0x5 - bl PlaySE - ldrb r0, [r4] - adds r0, r5 - ldrb r0, [r0] - bl nullsub_8 - ldrb r1, [r4] - adds r1, r5 - ldrb r0, [r1] - movs r2, 0x2 -_0802C200: - eors r0, r2 - strb r0, [r1] - ldrb r0, [r4] - adds r0, r5 - ldrb r0, [r0] - movs r1, 0 - bl sub_802E3E4 - b _0802C2AC - .align 2, 0 -_0802C214: .4byte gActionSelectionCursor -_0802C218: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0802C2A0 - ldr r6, _0802C294 @ =gBattleTypeFlags - ldrh r1, [r6] - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - beq _0802C2AC - ldrb r0, [r4] - bl GetBankIdentity - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bne _0802C2AC - movs r0, 0 - bl GetBankByPlayerAI - ldr r1, _0802C298 @ =gAbsentBankFlags - ldrb r1, [r1] - ldr r2, _0802C29C @ =gBitTable - lsls r0, 24 - lsrs r0, 22 - adds r0, r2 - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - bne _0802C2AC - ldrh r1, [r6] - mov r0, r8 - ands r0, r1 - cmp r0, 0 - bne _0802C2AC - ldrb r0, [r4] - lsls r0, 9 - adds r1, r7, 0x1 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x1 - bne _0802C278 - cmp r5, 0xC - bhi _0802C2AC - adds r0, r5, 0 - movs r1, 0x1 - bl AddBagItem -_0802C278: - movs r0, 0x5 - bl PlaySE - movs r0, 0x1 - movs r1, 0xC - movs r2, 0 - bl dp01_build_cmdbuf_x21_a_bb - bl PlayerBufferExecCompleted - bl DestroyMenuCursor - b _0802C2AC - .align 2, 0 -_0802C294: .4byte gBattleTypeFlags -_0802C298: .4byte gAbsentBankFlags -_0802C29C: .4byte gBitTable -_0802C2A0: - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _0802C2AC - bl sub_804454C -_0802C2AC: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_802C098 - - thumb_func_start unref_sub_802C2B8 -unref_sub_802C2B8: @ 802C2B8 - push {r4,lr} - ldr r4, _0802C2E0 @ =gActiveBank - ldrb r0, [r4] - movs r1, 0x1 - bl dp11b_obj_free - ldrb r0, [r4] - movs r1, 0 - bl dp11b_obj_free - ldr r1, _0802C2E4 @ =gBattleBankFunc - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, _0802C2E8 @ =sub_802C2EC - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0802C2E0: .4byte gActiveBank -_0802C2E4: .4byte gBattleBankFunc -_0802C2E8: .4byte sub_802C2EC - thumb_func_end unref_sub_802C2B8 - - thumb_func_start sub_802C2EC -sub_802C2EC: @ 802C2EC - push {r4,r5,lr} - sub sp, 0x4 - ldr r1, _0802C384 @ =gUnknown_081FAE7C - mov r0, sp - movs r2, 0x4 - bl memcpy - ldr r0, _0802C388 @ =gUnknown_03004344 - ldrb r0, [r0] - movs r1, 0x1 - movs r2, 0xF - movs r3, 0x1 - bl dp11b_obj_instanciate - movs r4, 0 - ldr r0, _0802C38C @ =gNoOfAllBanks - ldrb r0, [r0] - cmp r0, 0 - beq _0802C32E -_0802C312: - ldr r0, _0802C388 @ =gUnknown_03004344 - ldrb r0, [r0] - cmp r4, r0 - beq _0802C324 - lsls r0, r4, 24 - lsrs r0, 24 - movs r1, 0x1 - bl dp11b_obj_free -_0802C324: - adds r4, 0x1 - ldr r0, _0802C38C @ =gNoOfAllBanks - ldrb r0, [r0] - cmp r4, r0 - blt _0802C312 -_0802C32E: - ldr r0, _0802C390 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0802C3A8 - bl DestroyMenuCursor - movs r0, 0x5 - bl PlaySE - ldr r2, _0802C394 @ =gSprites - ldr r1, _0802C398 @ =gObjectBankIDs - ldr r4, _0802C388 @ =gUnknown_03004344 - ldrb r0, [r4] - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r1, _0802C39C @ =sub_8010574 - str r1, [r0] - ldr r1, _0802C3A0 @ =gMoveSelectionCursor - ldr r0, _0802C3A4 @ =gActiveBank - ldrb r0, [r0] - adds r0, r1 - ldrb r2, [r0] - ldrb r0, [r4] - lsls r0, 8 - orrs r2, r0 - movs r0, 0x1 - movs r1, 0xA - bl dp01_build_cmdbuf_x21_a_bb - ldrb r0, [r4] - movs r1, 0x1 - bl dp11b_obj_free - bl PlayerBufferExecCompleted - b _0802C658 - .align 2, 0 -_0802C384: .4byte gUnknown_081FAE7C -_0802C388: .4byte gUnknown_03004344 -_0802C38C: .4byte gNoOfAllBanks -_0802C390: .4byte gMain -_0802C394: .4byte gSprites -_0802C398: .4byte gObjectBankIDs -_0802C39C: .4byte sub_8010574 -_0802C3A0: .4byte gMoveSelectionCursor -_0802C3A4: .4byte gActiveBank -_0802C3A8: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0802C41C - movs r0, 0x5 - bl PlaySE - ldr r2, _0802C400 @ =gSprites - ldr r1, _0802C404 @ =gObjectBankIDs - ldr r5, _0802C408 @ =gUnknown_03004344 - ldrb r0, [r5] - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r1, _0802C40C @ =sub_8010574 - str r1, [r0] - ldr r1, _0802C410 @ =gBattleBankFunc - ldr r4, _0802C414 @ =gActiveBank - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, _0802C418 @ =sub_802C68C - str r1, [r0] - ldrb r0, [r4] - movs r1, 0x1 - movs r2, 0x7 - movs r3, 0x1 - bl dp11b_obj_instanciate - ldrb r0, [r4] - movs r1, 0 - movs r2, 0x7 - movs r3, 0x1 - bl dp11b_obj_instanciate - ldrb r0, [r5] - movs r1, 0x1 - bl dp11b_obj_free - b _0802C658 - .align 2, 0 -_0802C400: .4byte gSprites -_0802C404: .4byte gObjectBankIDs -_0802C408: .4byte gUnknown_03004344 -_0802C40C: .4byte sub_8010574 -_0802C410: .4byte gBattleBankFunc -_0802C414: .4byte gActiveBank -_0802C418: .4byte sub_802C68C -_0802C41C: - movs r0, 0x60 - ands r0, r1 - cmp r0, 0 - bne _0802C426 - b _0802C540 -_0802C426: - movs r0, 0x5 - bl PlaySE - ldr r2, _0802C458 @ =gSprites - ldr r1, _0802C45C @ =gObjectBankIDs - ldr r3, _0802C460 @ =gUnknown_03004344 - ldrb r0, [r3] - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r1, _0802C464 @ =sub_8010574 - str r1, [r0] - adds r5, r3, 0 -_0802C448: - ldrb r0, [r5] - bl GetBankIdentity - lsls r0, 24 - lsrs r1, r0, 24 - movs r4, 0 - mov r0, sp - b _0802C472 - .align 2, 0 -_0802C458: .4byte gSprites -_0802C45C: .4byte gObjectBankIDs -_0802C460: .4byte gUnknown_03004344 -_0802C464: .4byte sub_8010574 -_0802C468: - adds r4, 0x1 - cmp r4, 0x3 - bgt _0802C478 - mov r2, sp - adds r0, r2, r4 -_0802C472: - ldrb r0, [r0] - cmp r1, r0 - bne _0802C468 -_0802C478: - subs r4, 0x1 - cmp r4, 0 - bge _0802C480 - movs r4, 0x3 -_0802C480: - mov r1, sp - adds r0, r1, r4 - ldrb r0, [r0] - bl GetBankByPlayerAI - strb r0, [r5] - ldr r1, _0802C4B4 @ =gNoOfAllBanks - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r1] - cmp r0, r1 - beq _0802C478 - movs r4, 0 - ldrb r0, [r5] - bl GetBankIdentity - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0802C4FE - cmp r0, 0x1 - bgt _0802C4B8 - cmp r0, 0 - beq _0802C4C2 - b _0802C500 - .align 2, 0 -_0802C4B4: .4byte gNoOfAllBanks -_0802C4B8: - cmp r0, 0x2 - beq _0802C4C2 - cmp r0, 0x3 - beq _0802C4FE - b _0802C500 -_0802C4C2: - ldr r2, _0802C520 @ =gActiveBank - ldrb r0, [r2] - ldrb r1, [r5] - cmp r0, r1 - bne _0802C4FE - ldr r1, _0802C524 @ =gBattlePartyID - ldrb r2, [r2] - lsls r0, r2, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0802C528 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802C52C @ =gMoveSelectionCursor - adds r2, r1 - ldrb r1, [r2] - adds r1, 0xD - bl GetMonData - ldr r2, _0802C530 @ =gBattleMoves - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldrb r1, [r1, 0x6] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0802C500 -_0802C4FE: - adds r4, 0x1 -_0802C500: - ldr r0, _0802C534 @ =gAbsentBankFlags - ldrb r1, [r0] - ldr r2, _0802C538 @ =gBitTable - ldrb r0, [r5] - lsls r0, 2 - adds r0, r2 - ldr r0, [r0] - ands r1, r0 - ldr r0, _0802C53C @ =gUnknown_03004344 - cmp r1, 0 - beq _0802C518 - movs r4, 0 -_0802C518: - cmp r4, 0 - beq _0802C448 - b _0802C640 - .align 2, 0 -_0802C520: .4byte gActiveBank -_0802C524: .4byte gBattlePartyID -_0802C528: .4byte gPlayerParty -_0802C52C: .4byte gMoveSelectionCursor -_0802C530: .4byte gBattleMoves -_0802C534: .4byte gAbsentBankFlags -_0802C538: .4byte gBitTable -_0802C53C: .4byte gUnknown_03004344 -_0802C540: - movs r0, 0x90 - ands r0, r1 - cmp r0, 0 - bne _0802C54A - b _0802C658 -_0802C54A: - movs r0, 0x5 - bl PlaySE - ldr r2, _0802C57C @ =gSprites - ldr r1, _0802C580 @ =gObjectBankIDs - ldr r3, _0802C584 @ =gUnknown_03004344 - ldrb r0, [r3] - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r1, _0802C588 @ =sub_8010574 - str r1, [r0] - adds r5, r3, 0 -_0802C56C: - ldrb r0, [r5] - bl GetBankIdentity - lsls r0, 24 - lsrs r1, r0, 24 - movs r4, 0 - mov r0, sp - b _0802C596 - .align 2, 0 -_0802C57C: .4byte gSprites -_0802C580: .4byte gObjectBankIDs -_0802C584: .4byte gUnknown_03004344 -_0802C588: .4byte sub_8010574 -_0802C58C: - adds r4, 0x1 - cmp r4, 0x3 - bgt _0802C59C - mov r2, sp - adds r0, r2, r4 -_0802C596: - ldrb r0, [r0] - cmp r1, r0 - bne _0802C58C -_0802C59C: - adds r4, 0x1 - cmp r4, 0x3 - ble _0802C5A4 - movs r4, 0 -_0802C5A4: - mov r1, sp - adds r0, r1, r4 - ldrb r0, [r0] - bl GetBankByPlayerAI - strb r0, [r5] - ldr r1, _0802C5D8 @ =gNoOfAllBanks - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r1] - cmp r0, r1 - beq _0802C59C - movs r4, 0 - ldrb r0, [r5] - bl GetBankIdentity - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0802C622 - cmp r0, 0x1 - bgt _0802C5DC - cmp r0, 0 - beq _0802C5E6 - b _0802C624 - .align 2, 0 -_0802C5D8: .4byte gNoOfAllBanks -_0802C5DC: - cmp r0, 0x2 - beq _0802C5E6 - cmp r0, 0x3 - beq _0802C622 - b _0802C624 -_0802C5E6: - ldr r2, _0802C660 @ =gActiveBank - ldrb r0, [r2] - ldrb r1, [r5] - cmp r0, r1 - bne _0802C622 - ldr r1, _0802C664 @ =gBattlePartyID - ldrb r2, [r2] - lsls r0, r2, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0802C668 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802C66C @ =gMoveSelectionCursor - adds r2, r1 - ldrb r1, [r2] - adds r1, 0xD - bl GetMonData - ldr r2, _0802C670 @ =gBattleMoves - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldrb r1, [r1, 0x6] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0802C624 -_0802C622: - adds r4, 0x1 -_0802C624: - ldr r0, _0802C674 @ =gAbsentBankFlags - ldrb r1, [r0] - ldr r2, _0802C678 @ =gBitTable - ldrb r0, [r5] - lsls r0, 2 - adds r0, r2 - ldr r0, [r0] - ands r1, r0 - ldr r0, _0802C67C @ =gUnknown_03004344 - cmp r1, 0 - beq _0802C63C - movs r4, 0 -_0802C63C: - cmp r4, 0 - beq _0802C56C -_0802C640: - ldr r2, _0802C680 @ =gSprites - ldr r1, _0802C684 @ =gObjectBankIDs - ldrb r0, [r0] - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r1, _0802C688 @ =sub_8010520 - str r1, [r0] -_0802C658: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0802C660: .4byte gActiveBank -_0802C664: .4byte gBattlePartyID -_0802C668: .4byte gPlayerParty -_0802C66C: .4byte gMoveSelectionCursor -_0802C670: .4byte gBattleMoves -_0802C674: .4byte gAbsentBankFlags -_0802C678: .4byte gBitTable -_0802C67C: .4byte gUnknown_03004344 -_0802C680: .4byte gSprites -_0802C684: .4byte gObjectBankIDs -_0802C688: .4byte sub_8010520 - thumb_func_end sub_802C2EC thumb_func_start sub_802C68C sub_802C68C: @ 802C68C diff --git a/data/data2b.s b/data/data2b.s index 5fb3fa982..4c6996c8f 100644 --- a/data/data2b.s +++ b/data/data2b.s @@ -3,71 +3,6 @@ .section .rodata - .string "ターン$" @ "turn" - - .align 2 -gPlayerBufferCommands:: @ 81FAD98 - .4byte PlayerHandleGetAttributes - .4byte sub_802ECF0 - .4byte PlayerHandleSetAttributes - .4byte sub_802F7CC - .4byte PlayerHandleLoadPokeSprite - .4byte PlayerHandleSendOutPoke - .4byte PlayerHandleReturnPokeToBall - .4byte PlayerHandleTrainerThrow - .4byte PlayerHandleTrainerSlide - .4byte PlayerHandleTrainerSlideBack - .4byte sub_802FE7C - .4byte sub_802FF60 - .4byte sub_802FF80 - .4byte PlayerHandleBallThrow - .4byte PlayerHandlePuase - .4byte PlayerHandleMoveAnimation - .4byte PlayerHandlePrintString - .4byte PlayerHandlePrintStringPlayerOnly - .4byte sub_803037C - .4byte nullsub_42 - .4byte sub_8030468 - .4byte PlayerHandleOpenBag - .4byte sub_8030594 - .4byte sub_8030674 - .4byte PlayerHandleHealthBarUpdate - .4byte PlayerHandleExpBarUpdate - .4byte PlayerHandleStatusIconUpdate - .4byte PlayerHandleStatusAnimation - .4byte PlayerHandleStatusXor - .4byte sub_803097C - .4byte PlayerHandleDMATransfer - .4byte sub_8030A3C - .4byte sub_8030A6C - .4byte sub_8030A78 - .4byte sub_8030A8C - .4byte sub_8030AA0 - .4byte sub_8030AB4 - .4byte sub_8030AC8 - .4byte sub_8030AE4 - .4byte sub_8030B1C - .4byte sub_8030B34 - .4byte PlayerHandleHitAnimation - .4byte sub_8030BCC - .4byte PlayerHandleEffectivenessSound - .4byte sub_8030C1C - .4byte PlayerHandleFaintingCry - .4byte PlayerHandleIntroSlide - .4byte PlayerHandleTrainerBallThrow - .4byte sub_8030FAC - .4byte sub_80310A4 - .4byte sub_80310F0 - .4byte PlayerHandleSpriteInvisibility - .4byte PlayerHandleBattleAnimation - .4byte PlayerHandleLinkStandbyMsg - .4byte PlayerHandleResetActionMoveSelection - .4byte sub_80312A0 - .4byte nullsub_43 - -gUnknown_081FAE7C:: @ 81FAE7C - .byte 0, 2, 3, 1 - gUnknown_081FAE80:: @ 81FAE80 .string "{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW WHITE LIGHT_BLUE WHITE2}$" diff --git a/ld_script.txt b/ld_script.txt index a0054668e..254b94230 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -55,6 +55,7 @@ SECTIONS { asm/battle_2.o(.text); src/battle_3.o(.text); src/battle_4.o(.text); + src/battle_5.o(.text); asm/battle_5.o(.text); src/battle_6.o(.text); src/battle_7.o(.text); @@ -331,6 +332,7 @@ SECTIONS { data/main_menu.o(.rodata); data/data2a.o(.rodata); src/battle_4.o(.rodata); + src/battle_5.o(.rodata); data/data2b.o(.rodata); src/battle_3.o(.rodata); src/pokemon_data.o(.rodata); diff --git a/src/battle_5.c b/src/battle_5.c new file mode 100644 index 000000000..485a67bd4 --- /dev/null +++ b/src/battle_5.c @@ -0,0 +1,433 @@ +#include "global.h" +#include "battle.h" +#include "battle_interface.h" +#include "item.h" +#include "link.h" +#include "main.h" +#include "menu_cursor.h" +#include "pokemon.h" +#include "rom3.h" +#include "songs.h" +#include "sound.h" +#include "util.h" + +extern u8 gActiveBank; +extern void (*gBattleBankFunc[])(void); +extern bool8 gDoingBattleAnim; +extern u16 gBattleTypeFlags; +extern u32 gBattleExecBuffer; +extern u8 gBattleBufferA[][0x200]; +extern u8 gObjectBankIDs[]; +extern u8 gActionSelectionCursor[]; +extern u8 gMoveSelectionCursor[]; +extern u8 gAbsentBankFlags; +extern u8 gUnknown_03004344; +extern u8 gNoOfAllBanks; +extern u16 gBattlePartyID[]; +extern const struct BattleMove gBattleMoves[]; + +extern void dp11b_obj_instanciate(u8, u8, s8, s8); +extern u8 GetBankIdentity(u8); +extern u8 GetBankByPlayerAI(u8); +extern void dp11b_obj_free(u8, u8); +extern void sub_8010520(struct Sprite *); +extern void sub_8010574(struct Sprite *); + +void PlayerHandleGetAttributes(void); +void sub_802ECF0(void); +void PlayerHandleSetAttributes(void); +void sub_802F7CC(void); +void PlayerHandleLoadPokeSprite(void); +void PlayerHandleSendOutPoke(void); +void PlayerHandleReturnPokeToBall(void); +void PlayerHandleTrainerThrow(void); +void PlayerHandleTrainerSlide(void); +void PlayerHandleTrainerSlideBack(void); +void sub_802FE7C(void); +void sub_802FF60(void); +void sub_802FF80(void); +void PlayerHandleBallThrow(void); +void PlayerHandlePuase(void); +void PlayerHandleMoveAnimation(void); +void PlayerHandlePrintString(void); +void PlayerHandlePrintStringPlayerOnly(void); +void sub_803037C(void); +void nullsub_42(void); +void sub_8030468(void); +void PlayerHandleOpenBag(void); +void sub_8030594(void); +void sub_8030674(void); +void PlayerHandleHealthBarUpdate(void); +void PlayerHandleExpBarUpdate(void); +void PlayerHandleStatusIconUpdate(void); +void PlayerHandleStatusAnimation(void); +void PlayerHandleStatusXor(void); +void sub_803097C(void); +void PlayerHandleDMATransfer(void); +void sub_8030A3C(void); +void sub_8030A6C(void); +void sub_8030A78(void); +void sub_8030A8C(void); +void sub_8030AA0(void); +void sub_8030AB4(void); +void sub_8030AC8(void); +void sub_8030AE4(void); +void sub_8030B1C(void); +void sub_8030B34(void); +void PlayerHandleHitAnimation(void); +void sub_8030BCC(void); +void PlayerHandleEffectivenessSound(void); +void sub_8030C1C(void); +void PlayerHandleFaintingCry(void); +void PlayerHandleIntroSlide(void); +void PlayerHandleTrainerBallThrow(void); +void sub_8030FAC(void); +void sub_80310A4(void); +void sub_80310F0(void); +void PlayerHandleSpriteInvisibility(void); +void PlayerHandleBattleAnimation(void); +void PlayerHandleLinkStandbyMsg(void); +void PlayerHandleResetActionMoveSelection(void); +void sub_80312A0(void); +void nullsub_43(void); + +const u8 gString_TurnJP[] = _("ターン"); + +void (*const gPlayerBufferCommands[])(void) = +{ + PlayerHandleGetAttributes, + sub_802ECF0, + PlayerHandleSetAttributes, + sub_802F7CC, + PlayerHandleLoadPokeSprite, + PlayerHandleSendOutPoke, + PlayerHandleReturnPokeToBall, + PlayerHandleTrainerThrow, + PlayerHandleTrainerSlide, + PlayerHandleTrainerSlideBack, + sub_802FE7C, + sub_802FF60, + sub_802FF80, + PlayerHandleBallThrow, + PlayerHandlePuase, + PlayerHandleMoveAnimation, + PlayerHandlePrintString, + PlayerHandlePrintStringPlayerOnly, + sub_803037C, + nullsub_42, + sub_8030468, + PlayerHandleOpenBag, + sub_8030594, + sub_8030674, + PlayerHandleHealthBarUpdate, + PlayerHandleExpBarUpdate, + PlayerHandleStatusIconUpdate, + PlayerHandleStatusAnimation, + PlayerHandleStatusXor, + sub_803097C, + PlayerHandleDMATransfer, + sub_8030A3C, + sub_8030A6C, + sub_8030A78, + sub_8030A8C, + sub_8030AA0, + sub_8030AB4, + sub_8030AC8, + sub_8030AE4, + sub_8030B1C, + sub_8030B34, + PlayerHandleHitAnimation, + sub_8030BCC, + PlayerHandleEffectivenessSound, + sub_8030C1C, + PlayerHandleFaintingCry, + PlayerHandleIntroSlide, + PlayerHandleTrainerBallThrow, + sub_8030FAC, + sub_80310A4, + sub_80310F0, + PlayerHandleSpriteInvisibility, + PlayerHandleBattleAnimation, + PlayerHandleLinkStandbyMsg, + PlayerHandleResetActionMoveSelection, + sub_80312A0, + nullsub_43, +}; + +void PlayerBufferRunCommand(void); +void sub_802C2EC(void); +void sub_802C68C(void); + +void nullsub_91(void) +{ +} + +void SetBankFuncToPlayerBufferRunCommand(void) +{ + gBattleBankFunc[gActiveBank] = PlayerBufferRunCommand; + gDoingBattleAnim = FALSE; +} + +void PlayerBufferExecCompleted(void) +{ + gBattleBankFunc[gActiveBank] = PlayerBufferRunCommand; + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + u8 playerId = GetMultiplayerId(); + + dp01_prepare_buffer_wireless_probably(2, 4, &playerId); + gBattleBufferA[gActiveBank][0] = 0x38; + } + else + { + gBattleExecBuffer &= ~gBitTable[gActiveBank]; + } +} + +void PlayerBufferRunCommand(void) +{ + if (gBattleExecBuffer & gBitTable[gActiveBank]) + { + if (gBattleBufferA[gActiveBank][0] < 0x39) + gPlayerBufferCommands[gBattleBufferA[gActiveBank][0]](); + else + PlayerBufferExecCompleted(); + } +} + +void bx_0802E404(void) +{ + if (gSprites[gObjectBankIDs[gActiveBank]].pos2.x == 0) + PlayerBufferExecCompleted(); +} + +void sub_802C098(void) +{ + u16 r5 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); + + dp11b_obj_instanciate(gActiveBank, 1, 7, 1); + dp11b_obj_instanciate(gActiveBank, 0, 7, 1); + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + DestroyMenuCursor(); + + // Useless switch statement. + switch (gActionSelectionCursor[gActiveBank]) + { + case 0: + dp01_build_cmdbuf_x21_a_bb(1, 0, 0); + break; + case 1: + dp01_build_cmdbuf_x21_a_bb(1, 1, 0); + break; + case 2: + dp01_build_cmdbuf_x21_a_bb(1, 2, 0); + break; + case 3: + dp01_build_cmdbuf_x21_a_bb(1, 3, 0); + break; + } + PlayerBufferExecCompleted(); + } + else if (gMain.newKeys & 0x20) + { + if (gActionSelectionCursor[gActiveBank] & 1) + { + PlaySE(SE_SELECT); + nullsub_8(gActionSelectionCursor[gActiveBank]); + gActionSelectionCursor[gActiveBank] ^= 1; + sub_802E3E4(gActionSelectionCursor[gActiveBank], 0); + } + } + else if (gMain.newKeys & 0x10) + { + if (!(gActionSelectionCursor[gActiveBank] & 1)) + { + PlaySE(SE_SELECT); + nullsub_8(gActionSelectionCursor[gActiveBank]); + gActionSelectionCursor[gActiveBank] ^= 1; + sub_802E3E4(gActionSelectionCursor[gActiveBank], 0); + } + } + else if (gMain.newKeys & 0x40) + { + if (gActionSelectionCursor[gActiveBank] & 2) + { + PlaySE(SE_SELECT); + nullsub_8(gActionSelectionCursor[gActiveBank]); + gActionSelectionCursor[gActiveBank] ^= 2; + sub_802E3E4(gActionSelectionCursor[gActiveBank], 0); + } + } + else if (gMain.newKeys & 0x80) + { + if (!(gActionSelectionCursor[gActiveBank] & 2)) + { + PlaySE(SE_SELECT); + nullsub_8(gActionSelectionCursor[gActiveBank]); + gActionSelectionCursor[gActiveBank] ^= 2; + sub_802E3E4(gActionSelectionCursor[gActiveBank], 0); + } + } + else if (gMain.newKeys & B_BUTTON) + { + if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + && GetBankIdentity(gActiveBank) == 2 + && !(gAbsentBankFlags & gBitTable[GetBankByPlayerAI(0)]) + && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) + { + if (gBattleBufferA[gActiveBank][1] == 1) + { + if (r5 > 12) + return; + AddBagItem(r5, 1); + } + PlaySE(SE_SELECT); + dp01_build_cmdbuf_x21_a_bb(1, 12, 0); + PlayerBufferExecCompleted(); + DestroyMenuCursor(); + } + } + else if (gMain.newKeys & 8) + { + sub_804454C(); + } +} + +void unref_sub_802C2B8(void) +{ + dp11b_obj_free(gActiveBank, 1); + dp11b_obj_free(gActiveBank, 0); + gBattleBankFunc[gActiveBank] = sub_802C2EC; +} + +// TODO: fix this function +void sub_802C2EC(void) +{ + u8 arr[4] = {0, 2, 3, 1}; + s32 i; + + dp11b_obj_instanciate(gUnknown_03004344, 1, 15, 1); + i = 0; + if (gNoOfAllBanks != 0) + { + do + { + if (i != gUnknown_03004344) + dp11b_obj_free(i, 1); + i++; + } while (i < gNoOfAllBanks); + } + if (gMain.newKeys & A_BUTTON) + { + DestroyMenuCursor(); + PlaySE(SE_SELECT); + gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010574; + dp01_build_cmdbuf_x21_a_bb(1, 10, gMoveSelectionCursor[gActiveBank] | (gUnknown_03004344 << 8)); + dp11b_obj_free(gUnknown_03004344, 1); + PlayerBufferExecCompleted(); + } + //_0802C3A8 + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010574; + gBattleBankFunc[gActiveBank] = sub_802C68C; + dp11b_obj_instanciate(gActiveBank, 1, 7, 1); + dp11b_obj_instanciate(gActiveBank, 0, 7, 1); + dp11b_obj_free(gUnknown_03004344, 1); + } + else if (gMain.newKeys & 0x60) + { + PlaySE(SE_SELECT); + gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010574; + do + { + u8 var = GetBankIdentity(gUnknown_03004344); + + for (i = 0; i < 4; i++) + { + if (var == arr[i]) + break; + } + do + { + i--; + if (i < 0) + i = 3; + gUnknown_03004344 = GetBankByPlayerAI(arr[i]); + } while(gUnknown_03004344 == gNoOfAllBanks); + i = 0; + switch (GetBankIdentity(gUnknown_03004344)) + { + case 0: + case 2: + if (gActiveBank == gUnknown_03004344) + { + u32 moveId; + + asm("":::"memory"); + moveId = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBank]); + if (!(gBattleMoves[moveId].target & 2)) + break; + } + i++; + break; + case 1: + case 3: + i++; + } + //_0802C500 + if (gAbsentBankFlags & gBitTable[gUnknown_03004344]) + i = 0; + } while (i == 0); + gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010520; + } + //_0802C540 + else if (gMain.newKeys & 0x90) + { + PlaySE(SE_SELECT); + gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010574; + do + { + u8 var = GetBankIdentity(gUnknown_03004344); + + for (i = 0; i < 4; i++) + { + if (var == arr[i]) + break; + } + do + { + i++; + if (i > 3) + i = 0; + gUnknown_03004344 = GetBankByPlayerAI(arr[i]); + } while (gUnknown_03004344 == gNoOfAllBanks); + i = 0; + switch (GetBankIdentity(gUnknown_03004344)) + { + case 0: + case 2: + if (gActiveBank == gUnknown_03004344) + { + u32 moveId; + + asm("":::"memory"); + moveId = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBank]); + if (!(gBattleMoves[moveId].target & 2)) + break; + } + i++; + break; + case 1: + case 3: + i++; + } + if (gAbsentBankFlags & gBitTable[gUnknown_03004344]) + i = 0; + } while (i == 0); + gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010520; + } +} -- cgit v1.2.3 From 067a71db77f6df5d53764c0c8d00cb914886fdeb Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 14 Aug 2017 12:54:01 +0200 Subject: start cute sketch --- asm/cute_sketch.s | 439 -------------------------------------------- common_syms/cute_sketch.txt | 0 ld_script.txt | 1 + src/cute_sketch.c | 164 +++++++++++++++++ 4 files changed, 165 insertions(+), 439 deletions(-) create mode 100644 common_syms/cute_sketch.txt create mode 100644 src/cute_sketch.c diff --git a/asm/cute_sketch.s b/asm/cute_sketch.s index afacc19f6..14c28327d 100644 --- a/asm/cute_sketch.s +++ b/asm/cute_sketch.s @@ -6,445 +6,6 @@ .text - thumb_func_start sub_80FC7A0 -sub_80FC7A0: @ 80FC7A0 - push {lr} - ldr r2, _080FC7E8 @ =gUnknown_03005DEC - ldr r1, [r0, 0x4] - str r1, [r2] - ldr r2, _080FC7EC @ =gUnknown_03005E00 - ldrb r1, [r0, 0x1F] - strb r1, [r2] - ldr r2, _080FC7F0 @ =gUnknown_03005DE8 - ldrb r1, [r0, 0x19] - strb r1, [r2] - ldr r2, _080FC7F4 @ =gUnknown_03005DFC - ldrb r1, [r0, 0x1A] - strb r1, [r2] - ldr r2, _080FC7F8 @ =gUnknown_03005DF8 - ldrb r1, [r0, 0x1B] - strb r1, [r2] - ldr r2, _080FC7FC @ =gUnknown_03005DF0 - ldrb r1, [r0, 0x1C] - strb r1, [r2] - ldr r2, _080FC800 @ =gUnknown_03005E04 - ldrb r1, [r0, 0x1D] - strb r1, [r2] - ldr r2, _080FC804 @ =gUnknown_03005DF4 - ldrb r1, [r0, 0x1E] - strb r1, [r2] - ldrb r0, [r0] - subs r0, 0x2 - cmp r0, 0x22 - bls _080FC7DC - b _080FC928 -_080FC7DC: - lsls r0, 2 - ldr r1, _080FC808 @ =_080FC80C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080FC7E8: .4byte gUnknown_03005DEC -_080FC7EC: .4byte gUnknown_03005E00 -_080FC7F0: .4byte gUnknown_03005DE8 -_080FC7F4: .4byte gUnknown_03005DFC -_080FC7F8: .4byte gUnknown_03005DF8 -_080FC7FC: .4byte gUnknown_03005DF0 -_080FC800: .4byte gUnknown_03005E04 -_080FC804: .4byte gUnknown_03005DF4 -_080FC808: .4byte _080FC80C - .align 2, 0 -_080FC80C: - .4byte _080FC898 - .4byte _080FC928 - .4byte _080FC928 - .4byte _080FC928 - .4byte _080FC8F8 - .4byte _080FC928 - .4byte _080FC89E - .4byte _080FC8A4 - .4byte _080FC8B8 - .4byte _080FC8CA - .4byte _080FC928 - .4byte _080FC8E0 - .4byte _080FC928 - .4byte _080FC928 - .4byte _080FC928 - .4byte _080FC928 - .4byte _080FC928 - .4byte _080FC928 - .4byte _080FC928 - .4byte _080FC928 - .4byte _080FC928 - .4byte _080FC928 - .4byte _080FC928 - .4byte _080FC928 - .4byte _080FC928 - .4byte _080FC928 - .4byte _080FC928 - .4byte _080FC928 - .4byte _080FC8E6 - .4byte _080FC8C4 - .4byte _080FC8EC - .4byte _080FC8F2 - .4byte _080FC928 - .4byte _080FC928 - .4byte _080FC904 -_080FC898: - bl sub_80FCAA4 - b _080FC928 -_080FC89E: - bl sub_80FCB5C - b _080FC928 -_080FC8A4: - bl sub_80FCD54 - ldr r0, _080FC8B4 @ =gUnknown_03005E00 - ldrb r0, [r0] - bl sub_80FCC18 - b _080FC928 - .align 2, 0 -_080FC8B4: .4byte gUnknown_03005E00 -_080FC8B8: - bl sub_80FCD54 - bl sub_80FCEA4 - bl sub_80FCCBC -_080FC8C4: - bl sub_80FCEA4 - b _080FC928 -_080FC8CA: - bl sub_80FCD54 - bl sub_80FD06C - bl sub_80FD06C - bl sub_80FD114 - bl sub_80FCCBC - b _080FC928 -_080FC8E0: - bl sub_80FCF3C - b _080FC928 -_080FC8E6: - bl sub_80FCD54 - b _080FC928 -_080FC8EC: - bl sub_80FD06C - b _080FC928 -_080FC8F2: - bl sub_80FD114 - b _080FC928 -_080FC8F8: - bl sub_80FCAC4 - movs r0, 0x3 - bl sub_80FC92C - b _080FC928 -_080FC904: - bl sub_80FCD54 - bl sub_80FD06C - bl sub_80FD114 - bl sub_80FCCBC - bl sub_80FCB5C - bl sub_80FCB5C - movs r0, 0x2 - bl sub_80FC92C - movs r0, 0x4 - bl sub_80FC9E4 -_080FC928: - pop {r0} - bx r0 - thumb_func_end sub_80FC7A0 - - thumb_func_start sub_80FC92C -sub_80FC92C: @ 80FC92C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - lsrs r7, r0, 24 - movs r2, 0 - ldr r0, _080FC9CC @ =gUnknown_03005DF0 - mov r8, r0 - ldrb r0, [r0] - cmp r2, r0 - bcs _080FC9BE - ldr r1, _080FC9D0 @ =gUnknown_03005DF8 - mov r12, r1 - ldr r3, _080FC9D4 @ =gUnknown_03005E04 - mov r10, r3 - ldr r0, _080FC9D8 @ =gUnknown_03005DE8 - mov r9, r0 -_080FC952: - ldr r1, _080FC9DC @ =gUnknown_03005DFC - ldrb r0, [r1] - adds r0, r2 - mov r3, r10 - ldrb r1, [r3] - muls r0, r1 - lsls r0, 1 - ldr r3, _080FC9E0 @ =gUnknown_03005DEC - ldr r1, [r3] - adds r1, r0 - mov r3, r9 - ldrb r0, [r3] - lsls r0, 1 - adds r3, r1, r0 - movs r4, 0 - adds r5, r2, 0x1 - mov r0, r12 - ldrb r0, [r0] - cmp r4, r0 - bcs _080FC9B2 - movs r6, 0x80 - lsls r6, 8 -_080FC97E: - ldrh r1, [r3] - adds r0, r6, 0 - ands r0, r1 - cmp r0, 0 - bne _080FC9A2 - movs r0, 0x1F - ands r0, r1 - adds r0, r7 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x1F - bls _080FC998 - movs r2, 0x1F -_080FC998: - lsls r0, r2, 10 - lsls r1, r2, 5 - orrs r0, r1 - orrs r0, r2 - strh r0, [r3] -_080FC9A2: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - adds r3, 0x2 - mov r1, r12 - ldrb r1, [r1] - cmp r4, r1 - bcc _080FC97E -_080FC9B2: - lsls r0, r5, 24 - lsrs r2, r0, 24 - mov r3, r8 - ldrb r3, [r3] - cmp r2, r3 - bcc _080FC952 -_080FC9BE: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080FC9CC: .4byte gUnknown_03005DF0 -_080FC9D0: .4byte gUnknown_03005DF8 -_080FC9D4: .4byte gUnknown_03005E04 -_080FC9D8: .4byte gUnknown_03005DE8 -_080FC9DC: .4byte gUnknown_03005DFC -_080FC9E0: .4byte gUnknown_03005DEC - thumb_func_end sub_80FC92C - - thumb_func_start sub_80FC9E4 -sub_80FC9E4: @ 80FC9E4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - movs r2, 0 - ldr r0, _080FCA8C @ =gUnknown_03005DF0 - ldrb r0, [r0] - cmp r2, r0 - bcs _080FCA7C - ldr r1, _080FCA90 @ =gUnknown_03005DF8 - mov r10, r1 -_080FCA02: - ldr r3, _080FCA94 @ =gUnknown_03005DFC - ldrb r0, [r3] - adds r0, r2 - ldr r3, _080FCA98 @ =gUnknown_03005E04 - ldrb r1, [r3] - muls r0, r1 - lsls r0, 1 - ldr r3, _080FCA9C @ =gUnknown_03005DEC - ldr r1, [r3] - adds r1, r0 - ldr r3, _080FCAA0 @ =gUnknown_03005DE8 - ldrb r0, [r3] - lsls r0, 1 - adds r3, r1, r0 - movs r5, 0 - adds r7, r2, 0x1 - mov r0, r10 - ldrb r0, [r0] - cmp r5, r0 - bcs _080FCA70 - movs r1, 0x80 - lsls r1, 8 - mov r9, r1 - movs r0, 0x1F - mov r12, r0 - mov r1, r8 - subs r6, r0, r1 -_080FCA38: - ldrh r1, [r3] - mov r0, r9 - ands r0, r1 - cmp r0, 0 - bne _080FCA60 - movs r4, 0x1F - mov r2, r12 - ands r2, r1 - cmp r2, r6 - ble _080FCA56 - mov r1, r8 - lsrs r0, r1, 1 - subs r0, r4, r0 - lsls r0, 24 - lsrs r2, r0, 24 -_080FCA56: - lsls r0, r2, 10 - lsls r1, r2, 5 - orrs r0, r1 - orrs r0, r2 - strh r0, [r3] -_080FCA60: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r3, 0x2 - mov r0, r10 - ldrb r0, [r0] - cmp r5, r0 - bcc _080FCA38 -_080FCA70: - lsls r0, r7, 24 - lsrs r2, r0, 24 - ldr r1, _080FCA8C @ =gUnknown_03005DF0 - ldrb r1, [r1] - cmp r2, r1 - bcc _080FCA02 -_080FCA7C: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080FCA8C: .4byte gUnknown_03005DF0 -_080FCA90: .4byte gUnknown_03005DF8 -_080FCA94: .4byte gUnknown_03005DFC -_080FCA98: .4byte gUnknown_03005E04 -_080FCA9C: .4byte gUnknown_03005DEC -_080FCAA0: .4byte gUnknown_03005DE8 - thumb_func_end sub_80FC9E4 - - thumb_func_start sub_80FCAA4 -sub_80FCAA4: @ 80FCAA4 - push {r4,r5,lr} - movs r4, 0 - ldr r5, _080FCAC0 @ =0x00000c7f -_080FCAAA: - lsls r0, r4, 16 - lsrs r0, 16 - bl sub_80FD1C8 - adds r4, 0x1 - cmp r4, r5 - bls _080FCAAA - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080FCAC0: .4byte 0x00000c7f - thumb_func_end sub_80FCAA4 - - thumb_func_start sub_80FCAC4 -sub_80FCAC4: @ 80FCAC4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - movs r2, 0 - ldr r0, _080FCB44 @ =gUnknown_03005DF0 - ldrb r0, [r0] - cmp r2, r0 - bcs _080FCB36 - ldr r0, _080FCB48 @ =gUnknown_03005DEC - mov r8, r0 - ldr r3, _080FCB4C @ =gUnknown_03005DF8 -_080FCADC: - ldr r0, _080FCB50 @ =gUnknown_03005DFC - ldrb r1, [r0] - adds r1, r2 - ldr r0, _080FCB54 @ =gUnknown_03005E04 - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - mov r4, r8 - ldr r1, [r4] - adds r1, r0 - ldr r0, _080FCB58 @ =gUnknown_03005DE8 - ldrb r0, [r0] - lsls r0, 1 - adds r4, r1, r0 - movs r5, 0 - adds r6, r2, 0x1 - ldrb r0, [r3] - cmp r5, r0 - bcs _080FCB2A - movs r0, 0x80 - lsls r0, 8 - adds r7, r0, 0 -_080FCB08: - ldrh r0, [r4] - ands r0, r7 - cmp r0, 0 - bne _080FCB1C - adds r0, r4, 0 - str r3, [sp] - bl sub_80FD39C - strh r0, [r4] - ldr r3, [sp] -_080FCB1C: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r4, 0x2 - ldrb r0, [r3] - cmp r5, r0 - bcc _080FCB08 -_080FCB2A: - lsls r0, r6, 24 - lsrs r2, r0, 24 - ldr r0, _080FCB44 @ =gUnknown_03005DF0 - ldrb r0, [r0] - cmp r2, r0 - bcc _080FCADC -_080FCB36: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080FCB44: .4byte gUnknown_03005DF0 -_080FCB48: .4byte gUnknown_03005DEC -_080FCB4C: .4byte gUnknown_03005DF8 -_080FCB50: .4byte gUnknown_03005DFC -_080FCB54: .4byte gUnknown_03005E04 -_080FCB58: .4byte gUnknown_03005DE8 - thumb_func_end sub_80FCAC4 thumb_func_start sub_80FCB5C sub_80FCB5C: @ 80FCB5C diff --git a/common_syms/cute_sketch.txt b/common_syms/cute_sketch.txt new file mode 100644 index 000000000..e69de29bb diff --git a/ld_script.txt b/ld_script.txt index babcf5861..0868888eb 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -198,6 +198,7 @@ SECTIONS { src/dewford_trend.o(.text); src/heal_location.o(.text); src/region_map.o(.text); + src/cute_sketch.o(.text); asm/cute_sketch.o(.text); src/decoration.o(.text); asm/slot_machine.o(.text); diff --git a/src/cute_sketch.c b/src/cute_sketch.c new file mode 100644 index 000000000..5317bc334 --- /dev/null +++ b/src/cute_sketch.c @@ -0,0 +1,164 @@ +#include "global.h" +#include "cute_sketch.h" +#include "contest_painting.h" + +extern u16 (*gUnknown_03005DEC)[][32]; +extern u8 gUnknown_03005E00; +extern u8 gUnknown_03005DFC; +extern u8 gUnknown_03005DF8; +extern u8 gUnknown_03005DF0; +extern u8 gUnknown_03005E04; +extern u8 gUnknown_03005DF4; + +extern u8 gUnknown_03005DE8; + +// this file's functions +void sub_80FCAA4(void); +void sub_80FCB5C(void); +void sub_80FCD54(void); +void sub_80FCEA4(void); +void sub_80FCCBC(void); +void sub_80FD06C(void); +void sub_80FD114(void); +void sub_80FCF3C(void); +void sub_80FCAC4(void); +void sub_80FCC18(u8); +void sub_80FC92C(u8); +void sub_80FC9E4(u8); +void sub_80FD1C8(u16); +u16 sub_80FD39C(u16*); +u16 sub_80FD68C(u16*, u16*, u16*); + +void sub_80FC7A0(struct Unk03005E20* info) +{ + gUnknown_03005DEC = info->var_4; + gUnknown_03005E00 = info->var_1F; + gUnknown_03005DE8 = info->var_19; + gUnknown_03005DFC = info->var_1A; + gUnknown_03005DF8 = info->var_1B; + gUnknown_03005DF0 = info->var_1C; + gUnknown_03005E04 = info->var_1D; + gUnknown_03005DF4 = info->var_1E; + switch (info->var_0) + { + case 2: + sub_80FCAA4(); + break; + case 8: + sub_80FCB5C(); + break; + case 9: + sub_80FCD54(); + sub_80FCC18(gUnknown_03005E00); + break; + case 10: + sub_80FCD54(); + sub_80FCEA4(); + sub_80FCCBC(); + case 31: + sub_80FCEA4(); + break; + case 11: + sub_80FCD54(); + sub_80FD06C(); + sub_80FD06C(); + sub_80FD114(); + sub_80FCCBC(); + break; + case 13: + sub_80FCF3C(); + break; + case 30: + sub_80FCD54(); + break; + case 32: + sub_80FD06C(); + break; + case 33: + sub_80FD114(); + break; + case 6: + sub_80FCAC4(); + sub_80FC92C(3); + break; + case 36: + sub_80FCD54(); + sub_80FD06C(); + sub_80FD114(); + sub_80FCCBC(); + sub_80FCB5C(); + sub_80FCB5C(); + sub_80FC92C(2); + sub_80FC9E4(4); + break; + } +} + +#define RGB2(r, g, b) (((b) << 10) | ((g) << 5) | (r)) + +void sub_80FC92C(u8 a0) // it changes palette someway somehow... .__. +{ + u8 i, j; + for (i = 0; i < gUnknown_03005DF0; i++) + { + u16* var2 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04]; + u16* pal = &var2[gUnknown_03005DE8]; + for (j = 0; j < gUnknown_03005DF8; j++, pal++) + { + if (!(0x8000 & *pal)) + { + u8 val = (31 & *pal); + val += a0; + if (val > 31) + val = 31; + + *pal = RGB2(val, val, val); + } + } + } +} + +void sub_80FC9E4(u8 a0) +{ + u8 i, j; + for (i = 0; i < gUnknown_03005DF0; i++) + { + u16* var2 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04]; + u16* pal = &var2[gUnknown_03005DE8]; + for (j = 0; j < gUnknown_03005DF8; j++, pal++) + { + if (!(0x8000 & *pal)) + { + u8 val = (31 & *pal); + if (val > 31 - a0) + val = 31 - (a0 >> 1); + + *pal = RGB2(val, val, val); + } + } + } +} + +void sub_80FCAA4(void) +{ + u32 i; + for (i = 0; i < 3200; i++) + sub_80FD1C8(i); +} + +void sub_80FCAC4(void) +{ + u8 i, j; + for (i = 0; i < gUnknown_03005DF0; i++) + { + u16* var2 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04]; + u16* pal = &var2[gUnknown_03005DE8]; + for (j = 0; j < gUnknown_03005DF8; j++, pal++) + { + if (!(0x8000 & *pal)) + { + *pal = sub_80FD39C(pal); + } + } + } +} -- cgit v1.2.3 From b57c52c1b311c1902b921a9bcb216ebd9b714ad8 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Mon, 14 Aug 2017 10:20:58 -0500 Subject: decompile sub_802C68C --- asm/battle_5.s | 465 --------------------------------------------------------- src/battle_5.c | 158 ++++++++++++++++++++ 2 files changed, 158 insertions(+), 465 deletions(-) diff --git a/asm/battle_5.s b/asm/battle_5.s index fbbd9f04c..70f4a8fb8 100644 --- a/asm/battle_5.s +++ b/asm/battle_5.s @@ -6,471 +6,6 @@ .text - thumb_func_start sub_802C68C -sub_802C68C: @ 802C68C - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - movs r0, 0 - mov r8, r0 - ldr r7, _0802C6E4 @ =gActiveBank - ldrb r2, [r7] - lsls r0, r2, 9 - ldr r1, _0802C6E8 @ =gUnknown_02023A64 - adds r6, r0, r1 - ldr r0, _0802C6EC @ =gMain - ldrh r1, [r0, 0x2E] - movs r5, 0x1 - adds r4, r5, 0 - ands r4, r1 - cmp r4, 0 - bne _0802C6B2 - b _0802C864 -_0802C6B2: - movs r0, 0x5 - bl PlaySE - ldr r1, _0802C6F0 @ =gMoveSelectionCursor - ldrb r0, [r7] - adds r0, r1 - ldrb r0, [r0] - lsls r0, 1 - adds r1, r6, r0 - ldrh r0, [r1] - cmp r0, 0xAE - bne _0802C6F4 - ldrb r0, [r6, 0x12] - movs r4, 0 - cmp r0, 0x7 - beq _0802C702 - ldrb r1, [r6, 0x13] - movs r0, 0x7 - eors r1, r0 - negs r0, r1 - orrs r0, r1 - asrs r4, r0, 31 - movs r0, 0x10 - ands r4, r0 - b _0802C702 - .align 2, 0 -_0802C6E4: .4byte gActiveBank -_0802C6E8: .4byte gUnknown_02023A64 -_0802C6EC: .4byte gMain -_0802C6F0: .4byte gMoveSelectionCursor -_0802C6F4: - ldr r2, _0802C714 @ =gBattleMoves - ldrh r1, [r1] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r4, [r0, 0x6] -_0802C702: - movs r0, 0x10 - ands r0, r4 - cmp r0, 0 - beq _0802C720 - ldr r0, _0802C718 @ =gUnknown_03004344 - ldr r1, _0802C71C @ =gActiveBank - ldrb r1, [r1] - strb r1, [r0] - b _0802C73A - .align 2, 0 -_0802C714: .4byte gBattleMoves -_0802C718: .4byte gUnknown_03004344 -_0802C71C: .4byte gActiveBank -_0802C720: - ldr r0, _0802C764 @ =gActiveBank - ldrb r0, [r0] - bl GetBankIdentity - adds r1, r0, 0 - movs r2, 0x1 - movs r0, 0x1 - ands r0, r1 - eors r0, r2 - bl GetBankByPlayerAI - ldr r1, _0802C768 @ =gUnknown_03004344 - strb r0, [r1] -_0802C73A: - ldr r3, _0802C76C @ =gBattleBufferA - ldr r5, _0802C764 @ =gActiveBank - ldrb r2, [r5] - lsls r1, r2, 9 - adds r0, r3, 0x1 - adds r0, r1, r0 - ldrb r0, [r0] - cmp r0, 0 - bne _0802C770 - movs r0, 0x2 - ands r0, r4 - cmp r0, 0 - beq _0802C7B2 - adds r0, r3, 0x2 - adds r0, r1, r0 - ldrb r0, [r0] - cmp r0, 0 - bne _0802C7B2 - movs r2, 0x1 - add r8, r2 - b _0802C7B2 - .align 2, 0 -_0802C764: .4byte gActiveBank -_0802C768: .4byte gUnknown_03004344 -_0802C76C: .4byte gBattleBufferA -_0802C770: - movs r0, 0x7D - ands r0, r4 - cmp r0, 0 - bne _0802C77C - movs r0, 0x1 - add r8, r0 -_0802C77C: - ldr r0, _0802C7D0 @ =gMoveSelectionCursor - adds r0, r2, r0 - adds r1, r6, 0 - adds r1, 0x8 - ldrb r0, [r0] - adds r1, r0 - ldrb r0, [r1] - cmp r0, 0 - beq _0802C7B8 - movs r0, 0x12 - ands r0, r4 - cmp r0, 0 - bne _0802C7B2 - movs r0, 0 - bl CountAliveMons - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _0802C7B2 - ldrb r0, [r5] - bl sub_803C434 - ldr r1, _0802C7D4 @ =gUnknown_03004344 - strb r0, [r1] - movs r2, 0 - mov r8, r2 -_0802C7B2: - mov r0, r8 - cmp r0, 0 - bne _0802C7DC -_0802C7B8: - bl DestroyMenuCursor - ldr r1, _0802C7D0 @ =gMoveSelectionCursor - ldr r0, _0802C7D8 @ =gActiveBank - ldrb r0, [r0] - adds r0, r1 - ldrb r2, [r0] - ldr r0, _0802C7D4 @ =gUnknown_03004344 - ldrb r0, [r0] - lsls r0, 8 - orrs r2, r0 - b _0802C888 - .align 2, 0 -_0802C7D0: .4byte gMoveSelectionCursor -_0802C7D4: .4byte gUnknown_03004344 -_0802C7D8: .4byte gActiveBank -_0802C7DC: - ldr r1, _0802C7F8 @ =gBattleBankFunc - ldr r2, _0802C7FC @ =gActiveBank - ldrb r0, [r2] - lsls r0, 2 - adds r0, r1 - ldr r1, _0802C800 @ =sub_802C2EC - str r1, [r0] - movs r0, 0x12 - ands r4, r0 - cmp r4, 0 - beq _0802C808 - ldr r1, _0802C804 @ =gUnknown_03004344 - ldrb r0, [r2] - b _0802C838 - .align 2, 0 -_0802C7F8: .4byte gBattleBankFunc -_0802C7FC: .4byte gActiveBank -_0802C800: .4byte sub_802C2EC -_0802C804: .4byte gUnknown_03004344 -_0802C808: - movs r0, 0x1 - bl GetBankByPlayerAI - ldr r1, _0802C828 @ =gAbsentBankFlags - ldrb r1, [r1] - ldr r2, _0802C82C @ =gBitTable - lsls r0, 24 - lsrs r0, 22 - adds r0, r2 - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - beq _0802C830 - movs r0, 0x3 - b _0802C832 - .align 2, 0 -_0802C828: .4byte gAbsentBankFlags -_0802C82C: .4byte gBitTable -_0802C830: - movs r0, 0x1 -_0802C832: - bl GetBankByPlayerAI - ldr r1, _0802C854 @ =gUnknown_03004344 -_0802C838: - strb r0, [r1] - ldr r2, _0802C858 @ =gSprites - ldr r1, _0802C85C @ =gObjectBankIDs - ldr r0, _0802C854 @ =gUnknown_03004344 - ldrb r0, [r0] - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r1, _0802C860 @ =sub_8010520 - b _0802CA36 - .align 2, 0 -_0802C854: .4byte gUnknown_03004344 -_0802C858: .4byte gSprites -_0802C85C: .4byte gObjectBankIDs -_0802C860: .4byte sub_8010520 -_0802C864: - movs r6, 0x2 - adds r0, r6, 0 - ands r0, r1 - cmp r0, 0 - beq _0802C8A4 - bl DestroyMenuCursor - movs r0, 0x5 - bl PlaySE - ldr r0, _0802C898 @ =gUnknown_030042A4 - strh r4, [r0] - ldr r1, _0802C89C @ =gUnknown_030042A0 - movs r2, 0xA0 - lsls r2, 1 - adds r0, r2, 0 - strh r0, [r1] - ldr r2, _0802C8A0 @ =0x0000ffff -_0802C888: - movs r0, 0x1 - movs r1, 0xA - bl dp01_build_cmdbuf_x21_a_bb - bl PlayerBufferExecCompleted - b _0802CA38 - .align 2, 0 -_0802C898: .4byte gUnknown_030042A4 -_0802C89C: .4byte gUnknown_030042A0 -_0802C8A0: .4byte 0x0000ffff -_0802C8A4: - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _0802C8D4 - ldr r4, _0802C8D0 @ =gMoveSelectionCursor - adds r2, r4 - ldrb r1, [r2] - adds r0, r5, 0 - ands r0, r1 - cmp r0, 0 - bne _0802C8BC - b _0802CA38 -_0802C8BC: - ldrb r0, [r2] - bl nullsub_7 - ldrb r1, [r7] - adds r1, r4 - ldrb r0, [r1] - movs r2, 0x1 - eors r0, r2 - b _0802C976 - .align 2, 0 -_0802C8D0: .4byte gMoveSelectionCursor -_0802C8D4: - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0802C914 - ldr r4, _0802C90C @ =gMoveSelectionCursor - adds r3, r2, r4 - ldrb r2, [r3] - movs r6, 0x1 - adds r0, r5, 0 - ands r0, r2 - cmp r0, 0 - beq _0802C8EE - b _0802CA38 -_0802C8EE: - ldr r1, _0802C910 @ =gUnknown_03004348 - adds r0, r6, 0 - eors r0, r2 - ldrb r1, [r1] - cmp r0, r1 - bcc _0802C8FC - b _0802CA38 -_0802C8FC: - ldrb r0, [r3] - bl nullsub_7 - ldrb r1, [r7] - adds r1, r4 - ldrb r0, [r1] - eors r0, r6 - b _0802C976 - .align 2, 0 -_0802C90C: .4byte gMoveSelectionCursor -_0802C910: .4byte gUnknown_03004348 -_0802C914: - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0802C944 - ldr r4, _0802C940 @ =gMoveSelectionCursor - adds r2, r4 - ldrb r1, [r2] - adds r0, r6, 0 - ands r0, r1 - cmp r0, 0 - bne _0802C92C - b _0802CA38 -_0802C92C: - ldrb r0, [r2] - bl nullsub_7 - ldrb r1, [r7] - adds r1, r4 - ldrb r0, [r1] - movs r2, 0x2 - eors r0, r2 - b _0802C976 - .align 2, 0 -_0802C940: .4byte gMoveSelectionCursor -_0802C944: - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0802C99C - ldr r4, _0802C994 @ =gMoveSelectionCursor - adds r3, r2, r4 - ldrb r2, [r3] - movs r5, 0x2 - adds r0, r6, 0 - ands r0, r2 - cmp r0, 0 - bne _0802CA38 - ldr r1, _0802C998 @ =gUnknown_03004348 - adds r0, r5, 0 - eors r0, r2 - ldrb r1, [r1] - cmp r0, r1 - bcs _0802CA38 - ldrb r0, [r3] - bl nullsub_7 - ldrb r1, [r7] - adds r1, r4 - ldrb r0, [r1] - eors r0, r5 -_0802C976: - strb r0, [r1] - movs r0, 0x5 - bl PlaySE - ldrb r0, [r7] - adds r0, r4 - ldrb r0, [r0] - movs r1, 0 - bl sub_802E3B4 - bl sub_802E220 - bl sub_802E2D4 - b _0802CA38 - .align 2, 0 -_0802C994: .4byte gMoveSelectionCursor -_0802C998: .4byte gUnknown_03004348 -_0802C99C: - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _0802CA38 - ldr r0, _0802C9D8 @ =gUnknown_03004348 - ldrb r0, [r0] - cmp r0, 0x1 - bls _0802CA38 - ldr r0, _0802C9DC @ =gBattleTypeFlags - ldrh r1, [r0] - adds r0, r6, 0 - ands r0, r1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0 - bne _0802CA38 - ldr r4, _0802C9E0 @ =gMoveSelectionCursor - adds r0, r2, r4 - ldrb r0, [r0] - ldr r1, _0802C9E4 @ =gUnknown_081FAE80 - bl sub_802E12C - ldrb r0, [r7] - adds r0, r4 - ldrb r0, [r0] - cmp r0, 0 - beq _0802C9EC - ldr r0, _0802C9E8 @ =gUnknown_03004344 - strb r5, [r0] - b _0802C9F4 - .align 2, 0 -_0802C9D8: .4byte gUnknown_03004348 -_0802C9DC: .4byte gBattleTypeFlags -_0802C9E0: .4byte gMoveSelectionCursor -_0802C9E4: .4byte gUnknown_081FAE80 -_0802C9E8: .4byte gUnknown_03004344 -_0802C9EC: - ldr r1, _0802CA44 @ =gUnknown_03004344 - adds r0, 0x1 - strb r0, [r1] - adds r0, r1, 0 -_0802C9F4: - ldrb r0, [r0] - movs r1, 0x1B - bl sub_802E3B4 - ldr r4, _0802CA48 @ =gUnknown_03004210 - ldr r1, _0802CA4C @ =0x00001016 - movs r0, 0x1C - str r0, [sp] - movs r0, 0x3A - str r0, [sp, 0x4] - adds r0, r4, 0 - movs r2, 0x17 - movs r3, 0x37 - bl FillWindowRect - ldr r1, _0802CA50 @ =gUnknown_08400D89 - movs r2, 0xA4 - lsls r2, 2 - movs r0, 0x37 - str r0, [sp] - adds r0, r4, 0 - movs r3, 0x17 - bl InitWindow - adds r0, r4, 0 - bl sub_8002F44 - ldr r1, _0802CA54 @ =gBattleBankFunc - ldr r0, _0802CA58 @ =gActiveBank - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r1, _0802CA5C @ =sub_802CA60 -_0802CA36: - str r1, [r0] -_0802CA38: - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802CA44: .4byte gUnknown_03004344 -_0802CA48: .4byte gUnknown_03004210 -_0802CA4C: .4byte 0x00001016 -_0802CA50: .4byte gUnknown_08400D89 -_0802CA54: .4byte gBattleBankFunc -_0802CA58: .4byte gActiveBank -_0802CA5C: .4byte sub_802CA60 - thumb_func_end sub_802C68C - thumb_func_start sub_802CA60 sub_802CA60: @ 802CA60 push {r4-r7,lr} diff --git a/src/battle_5.c b/src/battle_5.c index 485a67bd4..71939ba0d 100644 --- a/src/battle_5.c +++ b/src/battle_5.c @@ -9,6 +9,7 @@ #include "rom3.h" #include "songs.h" #include "sound.h" +#include "text.h" #include "util.h" extern u8 gActiveBank; @@ -25,6 +26,11 @@ extern u8 gUnknown_03004344; extern u8 gNoOfAllBanks; extern u16 gBattlePartyID[]; extern const struct BattleMove gBattleMoves[]; +extern u16 gUnknown_030042A0; +extern u16 gUnknown_030042A4; +extern struct Window gUnknown_03004210; +extern const u8 gUnknown_08400D89[]; +extern u8 gUnknown_03004348; extern void dp11b_obj_instanciate(u8, u8, s8, s8); extern u8 GetBankIdentity(u8); @@ -32,6 +38,11 @@ extern u8 GetBankByPlayerAI(u8); extern void dp11b_obj_free(u8, u8); extern void sub_8010520(struct Sprite *); extern void sub_8010574(struct Sprite *); +extern void nullsub_7(u8); +extern void sub_802E3B4(); +extern void sub_802E220(); +extern void sub_802E2D4(); +extern void sub_802E12C(); void PlayerHandleGetAttributes(void); void sub_802ECF0(void); @@ -154,9 +165,12 @@ void (*const gPlayerBufferCommands[])(void) = nullsub_43, }; +extern const u8 gUnknown_081FAE80[]; + void PlayerBufferRunCommand(void); void sub_802C2EC(void); void sub_802C68C(void); +void sub_802CA60(void); void nullsub_91(void) { @@ -431,3 +445,147 @@ void sub_802C2EC(void) gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010520; } } + +struct UnknownStruct1 +{ + u16 unk0[4]; + u8 unk8[4]; + u8 fillerC[0x12-0xC]; + u8 unk12; + u8 unk13; +}; + +void sub_802C68C(void) +{ + u32 r8 = 0; + struct UnknownStruct1 *r6 = (struct UnknownStruct1 *)(gBattleBufferA[gActiveBank] + 4); + + if (gMain.newKeys & A_BUTTON) + { + u32 r4; + + PlaySE(SE_SELECT); + + if (r6->unk0[gMoveSelectionCursor[gActiveBank]] == 0xAE) + r4 = (r6->unk12 != 7 && (r6->unk13 ^ 7)) ? 0x10 : 0; + else + r4 = gBattleMoves[r6->unk0[gMoveSelectionCursor[gActiveBank]]].target; + + if (r4 & 0x10) + gUnknown_03004344 = gActiveBank; + else + gUnknown_03004344 = GetBankByPlayerAI((GetBankIdentity(gActiveBank) & 1) ^ 1); + + if (gBattleBufferA[gActiveBank][1] == 0) + { + if ((r4 & 2) && gBattleBufferA[gActiveBank][2] == 0) + r8++; + } + else + { + if (!(r4 & 0x7D)) + r8++; + if (r6->unk8[gMoveSelectionCursor[gActiveBank]] == 0) + { + r8 = 0; + } + else if (!(r4 & 0x12) && CountAliveMons(0) <= 1) + { + gUnknown_03004344 = sub_803C434(gActiveBank); + r8 = 0; + } + } + if (r8 == 0) + { + DestroyMenuCursor(); + dp01_build_cmdbuf_x21_a_bb(1, 10, gMoveSelectionCursor[gActiveBank] | (gUnknown_03004344 << 8)); + PlayerBufferExecCompleted(); + } + else + { + gBattleBankFunc[gActiveBank] = sub_802C2EC; + if (r4 & 0x12) + gUnknown_03004344 = gActiveBank; + else if (gAbsentBankFlags & gBitTable[GetBankByPlayerAI(1)]) + gUnknown_03004344 = GetBankByPlayerAI(3); + else + gUnknown_03004344 = GetBankByPlayerAI(1); + gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010520; + } + } + else if (gMain.newKeys & B_BUTTON) + { + DestroyMenuCursor(); + PlaySE(SE_SELECT); + gUnknown_030042A4 = 0; + gUnknown_030042A0 = 320; + dp01_build_cmdbuf_x21_a_bb(1, 10, 0xFFFF); + PlayerBufferExecCompleted(); + } + else if (gMain.newKeys & DPAD_LEFT) + { + if (gMoveSelectionCursor[gActiveBank] & 1) + { + nullsub_7(gMoveSelectionCursor[gActiveBank]); + gMoveSelectionCursor[gActiveBank] ^= 1; + PlaySE(SE_SELECT); + sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); + sub_802E220(); + sub_802E2D4(); + } + } + else if (gMain.newKeys & DPAD_RIGHT) + { + if (!(gMoveSelectionCursor[gActiveBank] & 1) + && (gMoveSelectionCursor[gActiveBank] ^ 1) < gUnknown_03004348) + { + nullsub_7(gMoveSelectionCursor[gActiveBank]); + gMoveSelectionCursor[gActiveBank] ^= 1; + PlaySE(SE_SELECT); + sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); + sub_802E220(); + sub_802E2D4(); + } + } + else if (gMain.newKeys & DPAD_UP) + { + if (gMoveSelectionCursor[gActiveBank] & 2) + { + nullsub_7(gMoveSelectionCursor[gActiveBank]); + gMoveSelectionCursor[gActiveBank] ^= 2; + PlaySE(SE_SELECT); + sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); + sub_802E220(); + sub_802E2D4(); + } + } + else if (gMain.newKeys & DPAD_DOWN) + { + if (!(gMoveSelectionCursor[gActiveBank] & 2) + && (gMoveSelectionCursor[gActiveBank] ^ 2) < gUnknown_03004348) + { + nullsub_7(gMoveSelectionCursor[gActiveBank]); + gMoveSelectionCursor[gActiveBank] ^= 2; + PlaySE(SE_SELECT); + sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); + sub_802E220(); + sub_802E2D4(); + } + } + else if (gMain.newKeys & SELECT_BUTTON) + { + if (gUnknown_03004348 > 1 && !(gBattleTypeFlags & BATTLE_TYPE_LINK)) + { + sub_802E12C(gMoveSelectionCursor[gActiveBank], gUnknown_081FAE80); + if (gMoveSelectionCursor[gActiveBank] != 0) + gUnknown_03004344 = 0; + else + gUnknown_03004344 = gMoveSelectionCursor[gActiveBank] + 1; + sub_802E3B4(gUnknown_03004344, 27); + FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); + InitWindow(&gUnknown_03004210, gUnknown_08400D89, 0x290, 0x17, 0x37); + sub_8002F44(&gUnknown_03004210); + gBattleBankFunc[gActiveBank] = sub_802CA60; + } + } +} -- cgit v1.2.3 From 1e2dc716025614209e58c672afd73d4c86d7c2c7 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 14 Aug 2017 22:11:32 +0200 Subject: pokeblock feed is on the way --- asm/pokeblock_feed.s | 1699 ------------------------------------------------- include/pokeblock.h | 21 +- ld_script.txt | 1 + src/mori_debug_menu.c | 2 +- src/pokeblock.c | 44 +- src/pokeblock_feed.c | 577 +++++++++++++++++ src/use_pokeblock.c | 18 +- src/wild_encounter.c | 2 +- sym_common.txt | 12 +- sym_ewram.txt | 2 +- 10 files changed, 635 insertions(+), 1743 deletions(-) create mode 100644 src/pokeblock_feed.c diff --git a/asm/pokeblock_feed.s b/asm/pokeblock_feed.s index 7df634399..182d28081 100644 --- a/asm/pokeblock_feed.s +++ b/asm/pokeblock_feed.s @@ -6,1707 +6,8 @@ .text - thumb_func_start sub_8147890 -sub_8147890: @ 8147890 - push {lr} - bl AnimateSprites - bl BuildOamBuffer - bl RunTasks - bl UpdatePaletteFade - pop {r0} - bx r0 - thumb_func_end sub_8147890 - - thumb_func_start sub_81478A8 -sub_81478A8: @ 81478A8 - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end sub_81478A8 - - thumb_func_start sub_81478BC -sub_81478BC: @ 81478BC - push {r4,lr} - sub sp, 0x4 - ldr r0, _081478D8 @ =gMain - ldr r1, _081478DC @ =0x0000043c - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0xD - bls _081478CE - b _08147AD0 -_081478CE: - lsls r0, 2 - ldr r1, _081478E0 @ =_081478E4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_081478D8: .4byte gMain -_081478DC: .4byte 0x0000043c -_081478E0: .4byte _081478E4 - .align 2, 0 -_081478E4: - .4byte _0814791C - .4byte _08147938 - .4byte _0814794C - .4byte _08147960 - .4byte _08147966 - .4byte _08147980 - .4byte _0814798C - .4byte _081479B8 - .4byte _081479DC - .4byte _081479F4 - .4byte _08147A20 - .4byte _08147A3C - .4byte _08147A5C - .4byte _08147A8C -_0814791C: - bl sub_80F9438 - bl sub_80F9368 - bl sub_8147B04 - ldr r1, _08147930 @ =gMain - ldr r2, _08147934 @ =0x0000043c - adds r1, r2 - b _08147A4A - .align 2, 0 -_08147930: .4byte gMain -_08147934: .4byte 0x0000043c -_08147938: - bl ResetPaletteFade - ldr r2, _08147948 @ =gPaletteFade - ldrb r0, [r2, 0x8] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2, 0x8] - b _08147A44 - .align 2, 0 -_08147948: .4byte gPaletteFade -_0814794C: - bl ResetSpriteData - ldr r1, _08147958 @ =gMain - ldr r2, _0814795C @ =0x0000043c - adds r1, r2 - b _08147A4A - .align 2, 0 -_08147958: .4byte gMain -_0814795C: .4byte 0x0000043c -_08147960: - bl FreeAllSpritePalettes - b _08147A44 -_08147966: - ldr r0, _08147974 @ =gWindowConfig_81E6E50 - bl SetUpWindowConfig - ldr r1, _08147978 @ =gMain - ldr r2, _0814797C @ =0x0000043c - adds r1, r2 - b _08147A4A - .align 2, 0 -_08147974: .4byte gWindowConfig_81E6E50 -_08147978: .4byte gMain -_0814797C: .4byte 0x0000043c -_08147980: - ldr r0, _08147988 @ =gWindowConfig_81E6E50 - bl MultistepInitMenuWindowBegin - b _08147A44 - .align 2, 0 -_08147988: .4byte gWindowConfig_81E6E50 -_0814798C: - bl MultistepInitMenuWindowContinue - cmp r0, 0 - bne _08147996 - b _08147AD0 -_08147996: - ldr r0, _081479A8 @ =0x02000000 - ldr r1, _081479AC @ =0x0001ffff - adds r0, r1 - movs r1, 0 - strb r1, [r0] - ldr r1, _081479B0 @ =gMain - ldr r2, _081479B4 @ =0x0000043c - adds r1, r2 - b _08147A4A - .align 2, 0 -_081479A8: .4byte 0x02000000 -_081479AC: .4byte 0x0001ffff -_081479B0: .4byte gMain -_081479B4: .4byte 0x0000043c -_081479B8: - ldr r0, _081479D4 @ =gUnknown_02039310 - ldrb r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _081479D8 @ =gPlayerParty - adds r0, r1 - bl sub_8147B20 - lsls r0, 24 - cmp r0, 0 - bne _081479D0 - b _08147AD0 -_081479D0: - b _08147A44 - .align 2, 0 -_081479D4: .4byte gUnknown_02039310 -_081479D8: .4byte gPlayerParty -_081479DC: - bl sub_81480B4 - ldr r1, _081479EC @ =0x02000000 - ldr r2, _081479F0 @ =0x0001fffd - adds r1, r2 - strb r0, [r1] - b _08147A44 - .align 2, 0 -_081479EC: .4byte 0x02000000 -_081479F0: .4byte 0x0001fffd -_081479F4: - ldr r0, _08147A10 @ =gUnknown_02039310 - ldrb r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08147A14 @ =gPlayerParty - adds r0, r1 - bl sub_8147F84 - ldr r1, _08147A18 @ =0x02000000 - ldr r2, _08147A1C @ =0x0001fffe - adds r1, r2 - strb r0, [r1] - b _08147A44 - .align 2, 0 -_08147A10: .4byte gUnknown_02039310 -_08147A14: .4byte gPlayerParty -_08147A18: .4byte 0x02000000 -_08147A1C: .4byte 0x0001fffe -_08147A20: - movs r0, 0 - movs r1, 0xE - movs r2, 0x1D - movs r3, 0x13 - bl MenuDrawTextWindow - ldr r1, _08147A34 @ =gMain - ldr r2, _08147A38 @ =0x0000043c - adds r1, r2 - b _08147A4A - .align 2, 0 -_08147A34: .4byte gMain -_08147A38: .4byte 0x0000043c -_08147A3C: - bl sub_8055870 - cmp r0, 0x1 - beq _08147AD0 -_08147A44: - ldr r1, _08147A54 @ =gMain - ldr r0, _08147A58 @ =0x0000043c - adds r1, r0 -_08147A4A: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _08147AD0 - .align 2, 0 -_08147A54: .4byte gMain -_08147A58: .4byte 0x0000043c -_08147A5C: - ldr r3, _08147AB0 @ =0x04000208 - ldrh r2, [r3] - movs r0, 0 - strh r0, [r3] - ldr r4, _08147AB4 @ =0x04000200 - ldrh r0, [r4] - movs r1, 0x1 - orrs r0, r1 - strh r0, [r4] - strh r2, [r3] - ldr r2, _08147AB8 @ =REG_DISPSTAT - ldrh r0, [r2] - movs r1, 0x8 - orrs r0, r1 - strh r0, [r2] - ldr r0, _08147ABC @ =sub_81478A8 - bl SetVBlankCallback - ldr r1, _08147AC0 @ =gMain - ldr r2, _08147AC4 @ =0x0000043c - adds r1, r2 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_08147A8C: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - ldr r2, _08147AC8 @ =gPaletteFade - ldrb r1, [r2, 0x8] - movs r0, 0x7F - ands r0, r1 - strb r0, [r2, 0x8] - ldr r0, _08147ACC @ =sub_8147890 - bl SetMainCallback2 - movs r0, 0x1 - b _08147AD2 - .align 2, 0 -_08147AB0: .4byte 0x04000208 -_08147AB4: .4byte 0x04000200 -_08147AB8: .4byte REG_DISPSTAT -_08147ABC: .4byte sub_81478A8 -_08147AC0: .4byte gMain -_08147AC4: .4byte 0x0000043c -_08147AC8: .4byte gPaletteFade -_08147ACC: .4byte sub_8147890 -_08147AD0: - movs r0, 0 -_08147AD2: - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81478BC - - thumb_func_start sub_8147ADC -sub_8147ADC: @ 8147ADC - push {lr} -_08147ADE: - bl sub_81478BC - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08147AF2 - movs r0, 0x1 - bl sub_8147DDC - b _08147AFE -_08147AF2: - bl sub_80F9344 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08147ADE -_08147AFE: - pop {r0} - bx r0 - thumb_func_end sub_8147ADC - - thumb_func_start sub_8147B04 -sub_8147B04: @ 8147B04 - ldr r1, _08147B18 @ =REG_BG1CNT - ldr r2, _08147B1C @ =0x00001d02 - adds r0, r2, 0 - strh r0, [r1] - subs r1, 0xA - movs r2, 0x9A - lsls r2, 5 - adds r0, r2, 0 - strh r0, [r1] - bx lr - .align 2, 0 -_08147B18: .4byte REG_BG1CNT -_08147B1C: .4byte 0x00001d02 - thumb_func_end sub_8147B04 - - thumb_func_start sub_8147B20 -sub_8147B20: @ 8147B20 - push {r4-r6,lr} - sub sp, 0xC - adds r4, r0, 0 - ldr r0, _08147B40 @ =0x02000000 - ldr r1, _08147B44 @ =0x0001ffff - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x8 - bls _08147B34 - b _08147C84 -_08147B34: - lsls r0, 2 - ldr r1, _08147B48 @ =_08147B4C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08147B40: .4byte 0x02000000 -_08147B44: .4byte 0x0001ffff -_08147B48: .4byte _08147B4C - .align 2, 0 -_08147B4C: - .4byte _08147B70 - .4byte _08147BB8 - .4byte _08147BF0 - .4byte _08147BFC - .4byte _08147C08 - .4byte _08147C14 - .4byte _08147C2C - .4byte _08147C38 - .4byte _08147C60 -_08147B70: - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - lsls r0, 16 - lsrs r5, r0, 16 - adds r0, r4, 0 - movs r1, 0 - bl GetMonData - adds r6, r0, 0 - lsls r0, r5, 3 - ldr r1, _08147BAC @ =gMonFrontPicTable - adds r0, r1 - ldr r1, _08147BB0 @ =gMonFrontPicCoords - lsls r2, r5, 2 - adds r2, r1 - ldrb r1, [r2] - ldrb r2, [r2, 0x1] - movs r3, 0x80 - lsls r3, 18 - ldr r4, _08147BB4 @ =gUnknown_081FAF4C - ldr r4, [r4, 0x4] - str r4, [sp] - str r5, [sp, 0x4] - str r6, [sp, 0x8] - bl HandleLoadSpecialPokePic - b _08147C40 - .align 2, 0 -_08147BAC: .4byte gMonFrontPicTable -_08147BB0: .4byte gMonFrontPicCoords -_08147BB4: .4byte gUnknown_081FAF4C -_08147BB8: - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - lsls r0, 16 - lsrs r5, r0, 16 - adds r0, r4, 0 - movs r1, 0 - bl GetMonData - adds r6, r0, 0 - adds r0, r4, 0 - movs r1, 0x1 - bl GetMonData - adds r1, r0, 0 - adds r0, r5, 0 - adds r2, r6, 0 - bl sub_80409C8 - adds r4, r0, 0 - bl LoadCompressedObjectPalette - ldrh r0, [r4, 0x4] - movs r1, 0x1 - bl GetMonSpriteTemplate_803C56C - b _08147C40 -_08147BF0: - ldr r0, _08147BF8 @ =gUnknown_083F7F74 - bl LoadCompressedObjectPic - b _08147C40 - .align 2, 0 -_08147BF8: .4byte gUnknown_083F7F74 -_08147BFC: - ldr r0, _08147C04 @ =gUnknown_083F7F7C - bl LoadCompressedObjectPalette - b _08147C40 - .align 2, 0 -_08147C04: .4byte gUnknown_083F7F7C -_08147C08: - ldr r0, _08147C10 @ =gUnknown_084121DC - bl LoadCompressedObjectPic - b _08147C40 - .align 2, 0 -_08147C10: .4byte gUnknown_084121DC -_08147C14: - ldr r0, _08147C24 @ =gScriptItemId - ldrb r0, [r0] - bl sub_8147C90 - ldr r0, _08147C28 @ =gUnknown_02039350 - bl LoadCompressedObjectPalette - b _08147C40 - .align 2, 0 -_08147C24: .4byte gScriptItemId -_08147C28: .4byte gUnknown_02039350 -_08147C2C: - ldr r0, _08147C34 @ =gBattleTerrainTiles_Building - movs r1, 0xC0 - lsls r1, 19 - b _08147C3C - .align 2, 0 -_08147C34: .4byte gBattleTerrainTiles_Building -_08147C38: - ldr r0, _08147C50 @ =gUnknown_08E782FC - ldr r1, _08147C54 @ =0x0600e800 -_08147C3C: - bl LZDecompressVram -_08147C40: - ldr r1, _08147C58 @ =0x02000000 - ldr r0, _08147C5C @ =0x0001ffff - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _08147C84 - .align 2, 0 -_08147C50: .4byte gUnknown_08E782FC -_08147C54: .4byte 0x0600e800 -_08147C58: .4byte 0x02000000 -_08147C5C: .4byte 0x0001ffff -_08147C60: - ldr r0, _08147C78 @ =gBattleTerrainPalette_BattleTower - movs r1, 0x20 - movs r2, 0x60 - bl LoadCompressedPalette - ldr r0, _08147C7C @ =0x02000000 - ldr r1, _08147C80 @ =0x0001ffff - adds r0, r1 - movs r1, 0 - strb r1, [r0] - movs r0, 0x1 - b _08147C86 - .align 2, 0 -_08147C78: .4byte gBattleTerrainPalette_BattleTower -_08147C7C: .4byte 0x02000000 -_08147C80: .4byte 0x0001ffff -_08147C84: - movs r0, 0 -_08147C86: - add sp, 0xC - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8147B20 - - thumb_func_start sub_8147C90 -sub_8147C90: @ 8147C90 - push {lr} - lsls r0, 24 - lsrs r0, 21 - ldr r1, _08147CB8 @ =gSaveBlock1 + 0x7F8 - adds r0, r1 - movs r1, 0 - bl sub_810CA9C - lsls r0, 24 - ldr r2, _08147CBC @ =gUnknown_02039350 - ldr r1, _08147CC0 @ =gUnknown_084120A4 - lsrs r0, 22 - subs r0, 0x4 - adds r0, r1 - ldr r0, [r0] - str r0, [r2] - ldr r0, _08147CC4 @ =0x000039e2 - strh r0, [r2, 0x4] - pop {r0} - bx r0 - .align 2, 0 -_08147CB8: .4byte gSaveBlock1 + 0x7F8 -_08147CBC: .4byte gUnknown_02039350 -_08147CC0: .4byte gUnknown_084120A4 -_08147CC4: .4byte 0x000039e2 - thumb_func_end sub_8147C90 - - thumb_func_start sub_8147CC8 -sub_8147CC8: @ 8147CC8 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _08147D00 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08147CDC - b _08147DCE -_08147CDC: - ldr r0, _08147D04 @ =gTasks - lsls r2, r4, 2 - adds r1, r2, r4 - lsls r1, 3 - adds r1, r0 - movs r0, 0x8 - ldrsh r3, [r1, r0] - ldr r0, _08147D08 @ =0x0000010d - adds r5, r2, 0 - cmp r3, r0 - beq _08147D50 - cmp r3, r0 - bgt _08147D0C - cmp r3, 0 - beq _08147D20 - cmp r3, 0xFF - beq _08147D38 - b _08147D8C - .align 2, 0 -_08147D00: .4byte gPaletteFade -_08147D04: .4byte gTasks -_08147D08: .4byte 0x0000010d -_08147D0C: - ldr r0, _08147D1C @ =0x00000119 - cmp r3, r0 - beq _08147D68 - adds r0, 0x10 - cmp r3, r0 - beq _08147D80 - b _08147D8C - .align 2, 0 -_08147D1C: .4byte 0x00000119 -_08147D20: - ldr r0, _08147D30 @ =gUnknown_03005F3C - strb r3, [r0] - ldr r0, _08147D34 @ =gUnknown_03005F94 - strh r3, [r0] - bl sub_81481DC - b _08147D8C - .align 2, 0 -_08147D30: .4byte gUnknown_03005F3C -_08147D34: .4byte gUnknown_03005F94 -_08147D38: - ldr r0, _08147D48 @ =0x02000000 - ldr r2, _08147D4C @ =0x0001fffd - adds r0, r2 - ldrb r0, [r0] - ldrb r1, [r1, 0xA] - bl sub_8148108 - b _08147D8C - .align 2, 0 -_08147D48: .4byte 0x02000000 -_08147D4C: .4byte 0x0001fffd -_08147D50: - bl sub_814817C - ldr r1, _08147D60 @ =0x02000000 - ldr r2, _08147D64 @ =0x0001fffc - adds r1, r2 - strb r0, [r1] - b _08147D8C - .align 2, 0 -_08147D60: .4byte 0x02000000 -_08147D64: .4byte 0x0001fffc -_08147D68: - ldr r0, _08147D78 @ =0x02000000 - ldr r1, _08147D7C @ =0x0001fffe - adds r0, r1 - ldrb r0, [r0] - bl sub_8148044 - b _08147D8C - .align 2, 0 -_08147D78: .4byte 0x02000000 -_08147D7C: .4byte 0x0001fffe -_08147D80: - ldr r0, _08147D88 @ =sub_8147E40 - str r0, [r1] - b _08147DCE - .align 2, 0 -_08147D88: .4byte sub_8147E40 -_08147D8C: - ldr r0, _08147DA0 @ =gUnknown_03005F94 - ldr r1, _08147DA4 @ =gUnknown_03005F34 - ldrh r2, [r0] - ldrh r0, [r1] - cmp r2, r0 - bcs _08147DA8 - bl sub_814825C - b _08147DB8 - .align 2, 0 -_08147DA0: .4byte gUnknown_03005F94 -_08147DA4: .4byte gUnknown_03005F34 -_08147DA8: - cmp r2, r0 - bne _08147DB8 - ldr r0, _08147DD4 @ =gTasks - adds r1, r5, r4 - lsls r1, 3 - adds r1, r0 - movs r0, 0xFE - strh r0, [r1, 0x8] -_08147DB8: - ldr r1, _08147DD8 @ =gUnknown_03005F94 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - ldr r0, _08147DD4 @ =gTasks - adds r1, r5, r4 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] -_08147DCE: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08147DD4: .4byte gTasks -_08147DD8: .4byte gUnknown_03005F94 - thumb_func_end sub_8147CC8 - - thumb_func_start sub_8147DDC -sub_8147DDC: @ 8147DDC - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _08147E08 @ =sub_8147CC8 - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08147E0C @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r0, 0 - strh r0, [r1, 0x8] - strh r4, [r1, 0xA] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08147E08: .4byte sub_8147CC8 -_08147E0C: .4byte gTasks - thumb_func_end sub_8147DDC - - thumb_func_start sub_8147E10 -sub_8147E10: @ 8147E10 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl MenuUpdateWindowText - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08147E30 - ldr r0, _08147E38 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _08147E3C @ =sub_8147F4C - str r0, [r1] -_08147E30: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08147E38: .4byte gTasks -_08147E3C: .4byte sub_8147F4C - thumb_func_end sub_8147E10 - - thumb_func_start sub_8147E40 -sub_8147E40: @ 8147E40 - push {r4-r7,lr} - lsls r0, 24 - lsrs r7, r0, 24 - ldr r0, _08147E94 @ =gUnknown_02039310 - ldrb r1, [r0] - movs r0, 0x64 - adds r5, r1, 0 - muls r5, r0 - ldr r0, _08147E98 @ =gPlayerParty - adds r5, r0 - ldr r0, _08147E9C @ =gScriptItemId - ldrh r4, [r0] - lsls r4, 3 - ldr r0, _08147EA0 @ =gSaveBlock1 + 0x7F8 - adds r4, r0 - adds r0, r5, 0 - bl GetNature - lsls r0, 24 - lsrs r0, 24 - adds r1, r4, 0 - bl sub_810CAE4 - ldr r6, _08147EA4 @ =gUnknown_02039312 - strh r0, [r6] - ldr r1, _08147EA8 @ =gStringVar1 - adds r0, r5, 0 - bl GetMonNickname - ldr r1, _08147EAC @ =gStringVar2 - adds r0, r4, 0 - bl sub_810CB44 - movs r1, 0 - ldrsh r0, [r6, r1] - cmp r0, 0 - bne _08147EB8 - ldr r0, _08147EB0 @ =gStringVar4 - ldr r1, _08147EB4 @ =gContestStatsText_NormallyAte - bl StringExpandPlaceholders - b _08147ED8 - .align 2, 0 -_08147E94: .4byte gUnknown_02039310 -_08147E98: .4byte gPlayerParty -_08147E9C: .4byte gScriptItemId -_08147EA0: .4byte gSaveBlock1 + 0x7F8 -_08147EA4: .4byte gUnknown_02039312 -_08147EA8: .4byte gStringVar1 -_08147EAC: .4byte gStringVar2 -_08147EB0: .4byte gStringVar4 -_08147EB4: .4byte gContestStatsText_NormallyAte -_08147EB8: - cmp r0, 0 - ble _08147ED0 - ldr r0, _08147EC8 @ =gStringVar4 - ldr r1, _08147ECC @ =gContestStatsText_HappilyAte - bl StringExpandPlaceholders - b _08147ED8 - .align 2, 0 -_08147EC8: .4byte gStringVar4 -_08147ECC: .4byte gContestStatsText_HappilyAte -_08147ED0: - ldr r0, _08147EF8 @ =gStringVar4 - ldr r1, _08147EFC @ =gContestStatsText_DisdainfullyAte - bl StringExpandPlaceholders -_08147ED8: - ldr r0, _08147EF8 @ =gStringVar4 - movs r1, 0x1 - movs r2, 0xF - bl MenuPrintMessage - ldr r1, _08147F00 @ =gTasks - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - adds r0, r1 - ldr r1, _08147F04 @ =sub_8147E10 - str r1, [r0] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08147EF8: .4byte gStringVar4 -_08147EFC: .4byte gContestStatsText_DisdainfullyAte -_08147F00: .4byte gTasks -_08147F04: .4byte sub_8147E10 - thumb_func_end sub_8147E40 - - thumb_func_start sub_8147F08 -sub_8147F08: @ 8147F08 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _08147F3C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08147F34 - ldr r0, _08147F40 @ =gMPlay_BGM - ldr r1, _08147F44 @ =0x0000ffff - movs r2, 0x80 - lsls r2, 1 - bl m4aMPlayVolumeControl - ldr r0, _08147F48 @ =gMain - ldr r0, [r0, 0x8] - bl SetMainCallback2 - adds r0, r4, 0 - bl DestroyTask -_08147F34: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08147F3C: .4byte gPaletteFade -_08147F40: .4byte gMPlay_BGM -_08147F44: .4byte 0x0000ffff -_08147F48: .4byte gMain - thumb_func_end sub_8147F08 - - thumb_func_start sub_8147F4C -sub_8147F4C: @ 8147F4C - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r1, _08147F7C @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _08147F80 @ =sub_8147F08 - str r1, [r0] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08147F7C: .4byte gTasks -_08147F80: .4byte sub_8147F08 - thumb_func_end sub_8147F4C - - thumb_func_start sub_8147F84 -sub_8147F84: @ 8147F84 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r5, r0, 0 - movs r1, 0x41 - bl GetMonData - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - ldr r0, _08148024 @ =gUnknown_02024E8C - movs r1, 0x30 - movs r2, 0x50 - movs r3, 0x2 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r0, _08148028 @ =gUnknown_03005F24 - strh r4, [r0] - ldr r0, _0814802C @ =gUnknown_03005F2C - mov r1, r8 - strb r1, [r0] - adds r0, r5, 0 - bl GetNature - ldr r1, _08148030 @ =gUnknown_03005F30 - strb r0, [r1] - ldr r7, _08148034 @ =gSprites - mov r1, r8 - lsls r0, r1, 4 - add r0, r8 - lsls r5, r0, 2 - adds r6, r5, r7 - strh r4, [r6, 0x32] - adds r0, r7, 0 - adds r0, 0x1C - adds r0, r5, r0 - ldr r1, _08148038 @ =SpriteCallbackDummy - str r1, [r0] - ldr r0, _0814803C @ =gUnknown_03005F28 - mov r9, r0 - movs r0, 0x1 - mov r1, r9 - strb r0, [r1] - adds r0, r4, 0 - bl sub_8040A3C - lsls r0, 24 - cmp r0, 0 - bne _08148016 - adds r0, r7, 0 - adds r0, 0x10 - adds r0, r5, r0 - ldr r1, _08148040 @ =gSpriteAffineAnimTable_84120EC - str r1, [r0] - ldrb r3, [r6, 0x1] - movs r0, 0x3 - orrs r3, r0 - strb r3, [r6, 0x1] - lsrs r1, r3, 6 - ldrb r2, [r6, 0x3] - lsrs r2, 6 - lsls r3, 30 - lsrs r3, 30 - adds r0, r6, 0 - bl CalcCenterToCornerVec - movs r0, 0 - mov r1, r9 - strb r0, [r1] -_08148016: - mov r0, r8 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08148024: .4byte gUnknown_02024E8C -_08148028: .4byte gUnknown_03005F24 -_0814802C: .4byte gUnknown_03005F2C -_08148030: .4byte gUnknown_03005F30 -_08148034: .4byte gSprites -_08148038: .4byte SpriteCallbackDummy -_0814803C: .4byte gUnknown_03005F28 -_08148040: .4byte gSpriteAffineAnimTable_84120EC - thumb_func_end sub_8147F84 - - thumb_func_start sub_8148044 -sub_8148044: @ 8148044 - lsls r0, 24 - lsrs r0, 24 - ldr r3, _0814806C @ =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r2, r1, r3 - movs r0, 0x30 - strh r0, [r2, 0x20] - movs r0, 0x50 - strh r0, [r2, 0x22] - ldr r0, _08148070 @ =0x0000fff8 - strh r0, [r2, 0x2E] - movs r0, 0x1 - strh r0, [r2, 0x30] - adds r3, 0x1C - adds r1, r3 - ldr r0, _08148074 @ =sub_8148078 - str r0, [r1] - bx lr - .align 2, 0 -_0814806C: .4byte gSprites -_08148070: .4byte 0x0000fff8 -_08148074: .4byte sub_8148078 - thumb_func_end sub_8148044 - - thumb_func_start sub_8148078 -sub_8148078: @ 8148078 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x20] - adds r0, 0x4 - strh r0, [r4, 0x20] - ldrh r0, [r4, 0x2E] - ldrh r2, [r4, 0x22] - adds r1, r0, r2 - strh r1, [r4, 0x22] - ldrh r1, [r4, 0x30] - adds r0, r1 - strh r0, [r4, 0x2E] - lsls r0, 16 - cmp r0, 0 - bne _0814809E - ldrh r0, [r4, 0x32] - movs r1, 0 - bl PlayCry1 -_0814809E: - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0x9 - bne _081480AA - ldr r0, _081480B0 @ =SpriteCallbackDummy - str r0, [r4, 0x1C] -_081480AA: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081480B0: .4byte SpriteCallbackDummy - thumb_func_end sub_8148078 - - thumb_func_start sub_81480B4 -sub_81480B4: @ 81480B4 - push {r4,r5,lr} - movs r0, 0xBC - movs r1, 0x64 - movs r2, 0x2 - bl sub_810BA50 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r5, _081480FC @ =gSprites - lsls r3, r4, 4 - adds r3, r4 - lsls r3, 2 - adds r0, r3, r5 - ldrb r2, [r0, 0x1] - movs r1, 0x4 - negs r1, r1 - ands r1, r2 - movs r2, 0x1 - orrs r1, r2 - strb r1, [r0, 0x1] - adds r1, r5, 0 - adds r1, 0x10 - adds r1, r3, r1 - ldr r2, _08148100 @ =gSpriteAffineAnimTable_84121A0 - str r2, [r1] - adds r5, 0x1C - adds r3, r5 - ldr r1, _08148104 @ =SpriteCallbackDummy - str r1, [r3] - bl InitSpriteAffineAnim - adds r0, r4, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_081480FC: .4byte gSprites -_08148100: .4byte gSpriteAffineAnimTable_84121A0 -_08148104: .4byte SpriteCallbackDummy - thumb_func_end sub_81480B4 - - thumb_func_start sub_8148108 -sub_8148108: @ 8148108 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r5, r1, 0 - lsls r0, 24 - lsrs r7, r0, 24 - lsls r5, 24 - lsrs r5, 24 - ldr r0, _08148148 @ =gSprites - mov r8, r0 - lsls r0, r7, 4 - adds r0, r7 - lsls r6, r0, 2 - mov r0, r8 - adds r4, r6, r0 - ldrb r0, [r4, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix - ldrb r0, [r4, 0x1] - movs r1, 0x3 - orrs r0, r1 - strb r0, [r4, 0x1] - cmp r5, 0 - bne _08148150 - mov r0, r8 - adds r0, 0x10 - adds r0, r6, r0 - ldr r1, _0814814C @ =gSpriteAffineAnimTable_84121A4 - b _08148158 - .align 2, 0 -_08148148: .4byte gSprites -_0814814C: .4byte gSpriteAffineAnimTable_84121A4 -_08148150: - mov r0, r8 - adds r0, 0x10 - adds r0, r6, r0 - ldr r1, _08148174 @ =gSpriteAffineAnimTable_84121A8 -_08148158: - str r1, [r0] - lsls r0, r7, 4 - adds r0, r7 - lsls r0, 2 - ldr r1, _08148178 @ =gSprites - adds r0, r1 - bl InitSpriteAffineAnim - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08148174: .4byte gSpriteAffineAnimTable_84121A8 -_08148178: .4byte gSprites - thumb_func_end sub_8148108 - - thumb_func_start sub_814817C -sub_814817C: @ 814817C - push {lr} - ldr r0, _081481A4 @ =gSpriteTemplate_84121E4 - movs r1, 0xAE - movs r2, 0x54 - movs r3, 0x1 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r2, _081481A8 @ =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldr r2, _081481AC @ =0x0000fff4 - strh r2, [r1, 0x2E] - movs r2, 0x1 - strh r2, [r1, 0x30] - pop {r1} - bx r1 - .align 2, 0 -_081481A4: .4byte gSpriteTemplate_84121E4 -_081481A8: .4byte gSprites -_081481AC: .4byte 0x0000fff4 - thumb_func_end sub_814817C - - thumb_func_start sub_81481B0 -sub_81481B0: @ 81481B0 - push {lr} - adds r2, r0, 0 - ldrh r0, [r2, 0x20] - subs r0, 0x4 - strh r0, [r2, 0x20] - ldrh r0, [r2, 0x2E] - ldrh r3, [r2, 0x22] - adds r1, r0, r3 - strh r1, [r2, 0x22] - ldrh r1, [r2, 0x30] - adds r0, r1 - strh r0, [r2, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xA - bne _081481D6 - adds r0, r2, 0 - bl DestroySprite -_081481D6: - pop {r0} - bx r0 - thumb_func_end sub_81481B0 - - thumb_func_start sub_81481DC -sub_81481DC: @ 81481DC - push {r4-r7,lr} - ldr r6, _0814824C @ =gUnknown_03005F34 - movs r0, 0x1 - strh r0, [r6] - ldr r1, _08148250 @ =gNatureToMonPokeblockAnim - ldr r0, _08148254 @ =gUnknown_03005F30 - ldrb r0, [r0] - lsls r0, 1 - adds r0, r1 - ldrb r3, [r0] - movs r4, 0 - ldr r2, _08148258 @ =gMonPokeblockAnims - lsls r1, r3, 2 - adds r1, r3 - lsls r1, 2 - adds r7, r2, 0 - adds r7, 0x8 - adds r0, r1, r7 - ldrh r0, [r0] - adds r0, 0x1 - strh r0, [r6] - adds r5, r2, 0 - adds r5, 0x12 - adds r1, r5 - movs r2, 0 - ldrsh r0, [r1, r2] - cmp r0, 0x1 - beq _08148244 - adds r2, r6, 0 - adds r6, r5, 0 - adds r5, r7, 0 -_0814821A: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r4, 0x7 - bhi _08148244 - lsls r1, r3, 2 - adds r1, r3 - lsls r1, 2 - adds r0, r1, r5 - ldrh r0, [r0] - ldrh r7, [r2] - adds r0, r7 - strh r0, [r2] - adds r1, r6 - movs r7, 0 - ldrsh r0, [r1, r7] - cmp r0, 0x1 - bne _0814821A -_08148244: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0814824C: .4byte gUnknown_03005F34 -_08148250: .4byte gNatureToMonPokeblockAnim -_08148254: .4byte gUnknown_03005F30 -_08148258: .4byte gMonPokeblockAnims - thumb_func_end sub_81481DC - - thumb_func_start sub_814825C -sub_814825C: @ 814825C - push {lr} - ldr r0, _08148274 @ =gUnknown_03005F3C - ldrb r0, [r0] - cmp r0, 0x5A - bls _08148268 - b _08148532 -_08148268: - lsls r0, 2 - ldr r1, _08148278 @ =_0814827C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08148274: .4byte gUnknown_03005F3C -_08148278: .4byte _0814827C - .align 2, 0 -_0814827C: - .4byte _081483E8 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _0814843C - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _0814847A - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _081484CC - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148524 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 -_081483E8: - ldr r2, _0814841C @ =gUnknown_03005F40 - ldr r1, _08148420 @ =gNatureToMonPokeblockAnim - ldr r0, _08148424 @ =gUnknown_03005F30 - ldrb r0, [r0] - lsls r0, 1 - adds r0, r1 - ldrb r0, [r0] - strb r0, [r2] - ldr r2, _08148428 @ =gUnknown_03005F20 - ldr r0, _0814842C @ =gUnknown_03005F2C - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _08148430 @ =gSprites - adds r1, r0 - str r1, [r2] - ldr r0, _08148434 @ =gUnknown_03005F50 - movs r2, 0x44 - bl memcpy - ldr r1, _08148438 @ =gUnknown_03005F3C - movs r0, 0xA - strb r0, [r1] - b _08148532 - .align 2, 0 -_0814841C: .4byte gUnknown_03005F40 -_08148420: .4byte gNatureToMonPokeblockAnim -_08148424: .4byte gUnknown_03005F30 -_08148428: .4byte gUnknown_03005F20 -_0814842C: .4byte gUnknown_03005F2C -_08148430: .4byte gSprites -_08148434: .4byte gUnknown_03005F50 -_08148438: .4byte gUnknown_03005F3C -_0814843C: - bl sub_8148540 - ldr r1, _081484A4 @ =gNatureToMonPokeblockAnim - ldr r0, _081484A8 @ =gUnknown_03005F30 - ldrb r0, [r0] - lsls r0, 1 - adds r1, 0x1 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _08148474 - ldr r3, _081484AC @ =gUnknown_03005F20 - ldr r2, [r3] - ldrb r0, [r2, 0x1] - movs r1, 0x3 - orrs r0, r1 - strb r0, [r2, 0x1] - ldr r2, [r3] - ldrb r1, [r2, 0x3] - movs r0, 0x3F - negs r0, r0 - ands r0, r1 - strb r0, [r2, 0x3] - ldr r0, [r3] - ldr r1, _081484B0 @ =gSpriteAffineAnimTable_8412050 - str r1, [r0, 0x10] - bl InitSpriteAffineAnim -_08148474: - ldr r1, _081484B4 @ =gUnknown_03005F3C - movs r0, 0x32 - strb r0, [r1] -_0814847A: - ldr r1, _081484A4 @ =gNatureToMonPokeblockAnim - ldr r0, _081484A8 @ =gUnknown_03005F30 - ldrb r0, [r0] - lsls r0, 1 - adds r1, 0x1 - adds r2, r0, r1 - ldrb r1, [r2] - cmp r1, 0 - beq _081484EE - ldr r0, _081484B8 @ =gUnknown_03005F28 - ldrb r0, [r0] - cmp r0, 0 - bne _081484BC - ldr r0, _081484AC @ =gUnknown_03005F20 - ldr r0, [r0] - adds r1, 0xA - lsls r1, 24 - lsrs r1, 24 - bl StartSpriteAffineAnim - b _081484EE - .align 2, 0 -_081484A4: .4byte gNatureToMonPokeblockAnim -_081484A8: .4byte gUnknown_03005F30 -_081484AC: .4byte gUnknown_03005F20 -_081484B0: .4byte gSpriteAffineAnimTable_8412050 -_081484B4: .4byte gUnknown_03005F3C -_081484B8: .4byte gUnknown_03005F28 -_081484BC: - ldr r0, _081484C8 @ =gUnknown_03005F20 - ldr r0, [r0] - ldrb r1, [r2] - bl StartSpriteAffineAnim - b _081484EE - .align 2, 0 -_081484C8: .4byte gUnknown_03005F20 -_081484CC: - bl sub_81485CC - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08148532 - ldr r0, _081484F8 @ =gUnknown_03005FA0 - movs r1, 0x12 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _08148504 - ldr r1, _081484FC @ =gUnknown_03005F40 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - bl sub_8148540 -_081484EE: - ldr r1, _08148500 @ =gUnknown_03005F3C - movs r0, 0x3C - strb r0, [r1] - b _08148532 - .align 2, 0 -_081484F8: .4byte gUnknown_03005FA0 -_081484FC: .4byte gUnknown_03005F40 -_08148500: .4byte gUnknown_03005F3C -_08148504: - ldr r0, _0814851C @ =gUnknown_03005F20 - ldr r0, [r0] - ldrb r0, [r0, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix - ldr r1, _08148520 @ =gUnknown_03005F3C - movs r0, 0x46 - strb r0, [r1] - b _08148532 - .align 2, 0 -_0814851C: .4byte gUnknown_03005F20 -_08148520: .4byte gUnknown_03005F3C -_08148524: - bl sub_8148618 - ldr r0, _08148538 @ =gUnknown_03005F40 - movs r1, 0 - strb r1, [r0] - ldr r0, _0814853C @ =gUnknown_03005F3C - strb r1, [r0] -_08148532: - pop {r0} - bx r0 - .align 2, 0 -_08148538: .4byte gUnknown_03005F40 -_0814853C: .4byte gUnknown_03005F3C - thumb_func_end sub_814825C - - thumb_func_start sub_8148540 -sub_8148540: @ 8148540 - push {r4-r7,lr} - movs r4, 0 - ldr r5, _081485B4 @ =gUnknown_03005FA0 - mov r12, r5 - ldr r7, _081485B8 @ =gMonPokeblockAnims - ldr r6, _081485BC @ =gUnknown_03005F40 -_0814854C: - lsls r2, r4, 1 - mov r0, r12 - adds r3, r2, r0 - ldrb r1, [r6] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r2, r0 - adds r2, r7 - ldrh r0, [r2] - strh r0, [r3] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x9 - bls _0814854C - movs r1, 0x8 - ldrsh r0, [r5, r1] - cmp r0, 0 - beq _081485C4 - movs r2, 0 - ldrsh r0, [r5, r2] - movs r2, 0x4 - ldrsh r1, [r5, r2] - bl Sin - strh r0, [r5, 0x14] - movs r1, 0 - ldrsh r0, [r5, r1] - movs r2, 0x6 - ldrsh r1, [r5, r2] - bl Cos - strh r0, [r5, 0x16] - ldrh r0, [r5, 0x8] - strh r0, [r5, 0x18] - ldr r0, _081485C0 @ =gUnknown_03005F20 - ldr r1, [r0] - ldrh r0, [r1, 0x24] - strh r0, [r5, 0x1A] - ldrh r0, [r1, 0x26] - strh r0, [r5, 0x1C] - bl sub_8148710 - ldrh r0, [r5, 0x18] - strh r0, [r5, 0x8] - bl sub_814862C - ldrh r0, [r5, 0x18] - strh r0, [r5, 0x8] - movs r0, 0 - b _081485C6 - .align 2, 0 -_081485B4: .4byte gUnknown_03005FA0 -_081485B8: .4byte gMonPokeblockAnims -_081485BC: .4byte gUnknown_03005F40 -_081485C0: .4byte gUnknown_03005F20 -_081485C4: - movs r0, 0x1 -_081485C6: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8148540 - - thumb_func_start sub_81485CC -sub_81485CC: @ 81485CC - push {r4,lr} - ldr r3, _08148604 @ =gUnknown_03005FA0 - ldrh r0, [r3, 0x18] - ldrh r1, [r3, 0x8] - subs r0, r1 - lsls r0, 16 - ldr r1, _08148608 @ =gUnknown_03005F20 - ldr r4, [r1] - lsrs r0, 15 - ldr r1, _0814860C @ =0x0201d000 - adds r2, r0, r1 - ldrh r2, [r2] - strh r2, [r4, 0x24] - movs r2, 0x80 - lsls r2, 3 - adds r1, r2 - adds r0, r1 - ldrh r0, [r0] - strh r0, [r4, 0x26] - ldrh r0, [r3, 0x8] - subs r0, 0x1 - strh r0, [r3, 0x8] - lsls r0, 16 - cmp r0, 0 - beq _08148610 - movs r0, 0 - b _08148612 - .align 2, 0 -_08148604: .4byte gUnknown_03005FA0 -_08148608: .4byte gUnknown_03005F20 -_0814860C: .4byte 0x0201d000 -_08148610: - movs r0, 0x1 -_08148612: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81485CC - thumb_func_start sub_8148618 -sub_8148618: @ 8148618 - push {lr} - ldr r0, _08148628 @ =gUnknown_03005F20 - ldr r0, [r0] - bl FreeSpriteOamMatrix - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_08148628: .4byte gUnknown_03005F20 - thumb_func_end sub_8148618 - thumb_func_start sub_814862C -sub_814862C: @ 814862C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - ldr r1, _08148700 @ =gUnknown_03005FA0 - ldrh r0, [r1, 0x10] - mov r8, r0 - ldrh r0, [r1, 0x18] - mov r2, r8 - subs r0, r2 - lsls r0, 16 - lsrs r7, r0, 16 - ldrh r0, [r1, 0xC] - ldrh r3, [r1, 0x1A] - adds r0, r3 - lsls r0, 16 - lsrs r0, 16 - str r0, [sp] - ldrh r0, [r1, 0xE] - ldrh r1, [r1, 0x1C] - adds r0, r1 - lsls r0, 16 - lsrs r0, 16 - mov r9, r0 - movs r6, 0 - subs r0, r7, 0x1 - ldr r4, _08148704 @ =0x0201cffe - mov r10, r4 - cmp r6, r0 - bge _081486D4 - ldr r1, [sp] - lsls r0, r1, 16 - asrs r0, 16 - str r0, [sp, 0x4] -_08148674: - mov r2, r8 - adds r5, r2, r6 - lsls r5, 1 - ldr r4, _08148708 @ =0x0201d000 - adds r3, r5, r4 - ldrh r2, [r3] - ldr r0, [sp, 0x4] - subs r1, r2, r0 - ldr r4, _0814870C @ =0x0201d400 - adds r5, r4 - ldrh r0, [r5] - mov r12, r0 - mov r4, r9 - lsls r0, r4, 16 - asrs r0, 16 - mov r4, r12 - subs r0, r4, r0 - lsls r4, r0, 16 - lsrs r4, 16 - lsls r1, 16 - asrs r1, 16 - adds r6, 0x1 - adds r0, r1, 0 - muls r0, r6 - adds r1, r7, 0 - str r2, [sp, 0x8] - str r3, [sp, 0xC] - bl __divsi3 - ldr r2, [sp, 0x8] - subs r2, r0 - ldr r3, [sp, 0xC] - strh r2, [r3] - lsls r4, 16 - asrs r4, 16 - adds r0, r4, 0 - muls r0, r6 - adds r1, r7, 0 - bl __divsi3 - ldrh r1, [r5] - subs r1, r0 - strh r1, [r5] - lsls r6, 16 - lsrs r6, 16 - subs r0, r7, 0x1 - cmp r6, r0 - blt _08148674 -_081486D4: - mov r1, r8 - adds r0, r1, r7 - lsls r0, 1 - mov r2, r10 - adds r1, r0, r2 - mov r3, sp - ldrh r3, [r3] - strh r3, [r1] - movs r1, 0x80 - lsls r1, 3 - add r1, r10 - adds r0, r1 - mov r4, r9 - strh r4, [r0] - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08148700: .4byte gUnknown_03005FA0 -_08148704: .4byte 0x0201cffe -_08148708: .4byte 0x0201d000 -_0814870C: .4byte 0x0201d400 - thumb_func_end sub_814862C thumb_func_start sub_8148710 sub_8148710: @ 8148710 diff --git a/include/pokeblock.h b/include/pokeblock.h index f78ed40c3..c04278c30 100644 --- a/include/pokeblock.h +++ b/include/pokeblock.h @@ -1,7 +1,8 @@ #ifndef GUARD_POKEBLOCK_H #define GUARD_POKEBLOCK_H -enum { +enum +{ PBLOCK_CLR_BLACK, PBLOCK_CLR_RED, PBLOCK_CLR_BLUE, @@ -10,15 +11,27 @@ enum { PBLOCK_CLR_YELLOW }; +enum +{ + PBLOCK_COLOR, + PBLOCK_SPICY, + PBLOCK_DRY, + PBLOCK_SWEET, + PBLOCK_BITTER, + PBLOCK_SOUR, + PBLOCK_FEEL, +}; + void sub_810B96C(void); u8 sub_810BA50(s16, s16, u8); u8 sub_810C9B0(struct Pokeblock *); -s16 sub_810CA9C(const struct Pokeblock *, u8); +s16 GetPokeblockData(const struct Pokeblock *, u8); u8 sub_810C9E8(struct Pokeblock *); void sub_810BA7C(u8); void ClearPokeblocks(void); -bool8 sub_810CA6C(u8); -s16 sub_810CAE4(u8, const struct Pokeblock *); +bool8 PokeblockClearIfExists(u8); +s16 PokeblockGetGain(u8, const struct Pokeblock *); u8 sub_810CB68(u8, u8*); +void PokeblockCopyName(struct Pokeblock *pokeblock, u8 *dest); #endif // GUARD_POKEBLOCK_H diff --git a/ld_script.txt b/ld_script.txt index babcf5861..31f9ea495 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -263,6 +263,7 @@ SECTIONS { src/mystery_event_menu.o(.text); src/save_failed_screen.o(.text); src/braille_puzzles.o(.text); + src/pokeblock_feed.o(.text); asm/pokeblock_feed.o(.text); src/clear_save_data_menu.o(.text); src/intro_credits_graphics.o(.text); diff --git a/src/mori_debug_menu.c b/src/mori_debug_menu.c index 273191192..4eadaa78b 100644 --- a/src/mori_debug_menu.c +++ b/src/mori_debug_menu.c @@ -134,7 +134,7 @@ s8 MoriDebugMenu_PokeblockCase(void) s32 loopCounter; for (loopCounter = 0; loopCounter <= 39; loopCounter++) - sub_810CA6C(loopCounter); + PokeblockClearIfExists(loopCounter); CloseMenu(); return 1; diff --git a/src/pokeblock.c b/src/pokeblock.c index 775280f6e..2fb544fea 100644 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -582,7 +582,7 @@ static void sub_810BDAC(bool8 flag) v0 = ((i % 3) << 6) + 0x1a1 + (i / 3) * 6; if (gUnknown_02039248.unk0 + gUnknown_02039248.unk1 != gUnknown_02039248.unk2) { - if (sub_810CA9C(&gSaveBlock1.pokeblocks[gUnknown_02039248.unk0 + gUnknown_02039248.unk1], i + 1) > 0) + if (GetPokeblockData(&gSaveBlock1.pokeblocks[gUnknown_02039248.unk0 + gUnknown_02039248.unk1], i + 1) > 0) { gBGTilemapBuffers[2][v0] = (i << 12) + 23; gBGTilemapBuffers[2][v0 + 32] = (i << 12) + 24; @@ -894,7 +894,7 @@ static void sub_810C5EC(u8 taskId) static void sub_810C610(u8 taskId) { MenuZeroFillWindowRect(7, 6, 13, 11); - sub_810CA6C((gUnknown_02039248.unk0 + gUnknown_02039248.unk1)); + PokeblockClearIfExists((gUnknown_02039248.unk0 + gUnknown_02039248.unk1)); StringExpandPlaceholders(gStringVar4, gContestStatsText_WasThrownAway); DisplayItemMessageOnField(taskId, gStringVar4, sub_810C704, 0); sub_810BC98(); @@ -942,9 +942,9 @@ static void sub_810C748(u8 taskId) static void sub_810C788(u8 taskId) { - s16 v0 = sub_810CAE4(GetNature(&gEnemyParty[0]), &gSaveBlock1.pokeblocks[gScriptItemId]); + s16 v0 = PokeblockGetGain(GetNature(&gEnemyParty[0]), &gSaveBlock1.pokeblocks[gScriptItemId]); StringCopy(gBattleTextBuff1, gPokeblockNames[gSaveBlock1.pokeblocks[gScriptItemId].color]); - sub_810CA6C(gScriptItemId); + PokeblockClearIfExists(gScriptItemId); gScriptItemId = gSaveBlock1.pokeblocks[gScriptItemId].color << 8; if (v0 == 0) { @@ -967,7 +967,7 @@ static void sub_810C854(u8 taskId) SafariZoneActivatePokeblockFeeder(gScriptItemId); StringCopy(gStringVar1, gPokeblockNames[gSaveBlock1.pokeblocks[gScriptItemId].color]); gScriptResult = gScriptItemId; - sub_810CA6C(gScriptItemId); + PokeblockClearIfExists(gScriptItemId); BeginNormalPaletteFade(-1, 0, 0, 16, 0); gTasks[taskId].func = sub_810C2C8; } @@ -1024,10 +1024,10 @@ u8 sub_810C9B0(struct Pokeblock *pokeblock) { u8 contestStat; u8 maxRating; - u8 rating = sub_810CA9C(pokeblock, 1); + u8 rating = GetPokeblockData(pokeblock, 1); for (contestStat=1; contestStat<5; contestStat++) { - maxRating = sub_810CA9C(pokeblock, contestStat + 1); + maxRating = GetPokeblockData(pokeblock, contestStat + 1); if (rating < maxRating) { rating = maxRating; @@ -1038,7 +1038,7 @@ u8 sub_810C9B0(struct Pokeblock *pokeblock) u8 sub_810C9E8(struct Pokeblock *pokeblock) { - u8 feel = sub_810CA9C(pokeblock, 6); + u8 feel = GetPokeblockData(pokeblock, 6); if (feel > 99) feel = 99; return feel; @@ -1068,7 +1068,7 @@ bool8 sub_810CA34(struct Pokeblock *pokeblock) return TRUE; } -bool8 sub_810CA6C(u8 pokeblockIdx) +bool8 PokeblockClearIfExists(u8 pokeblockIdx) { if (gSaveBlock1.pokeblocks[pokeblockIdx].color == 0) { @@ -1078,33 +1078,33 @@ bool8 sub_810CA6C(u8 pokeblockIdx) return TRUE; } -s16 sub_810CA9C(const struct Pokeblock *pokeblock, u8 field) +s16 GetPokeblockData(const struct Pokeblock *pokeblock, u8 field) { - if (field == 0) + if (field == PBLOCK_COLOR) return pokeblock->color; - if (field == 1) + if (field == PBLOCK_SPICY) return pokeblock->spicy; - if (field == 2) + if (field == PBLOCK_DRY) return pokeblock->dry; - if (field == 3) + if (field == PBLOCK_SWEET) return pokeblock->sweet; - if (field == 4) + if (field == PBLOCK_BITTER) return pokeblock->bitter; - if (field == 5) + if (field == PBLOCK_SOUR) return pokeblock->sour; - if (field == 6) + if (field == PBLOCK_FEEL) return pokeblock->feel; return 0; } -s16 sub_810CAE4(u8 nature, const struct Pokeblock *pokeblock) +s16 PokeblockGetGain(u8 nature, const struct Pokeblock *pokeblock) { u8 flavor; s16 curGain; s16 totalGain = 0; for (flavor=0; flavor<5; flavor++) { - curGain = sub_810CA9C(pokeblock, flavor + 1); + curGain = GetPokeblockData(pokeblock, flavor + 1); if (curGain > 0) { totalGain += curGain * gPokeblockFlavorCompatibilityTable[5 * nature + flavor]; @@ -1113,9 +1113,9 @@ s16 sub_810CAE4(u8 nature, const struct Pokeblock *pokeblock) return totalGain; } -void sub_810CB44(struct Pokeblock *pokeblock, u8 *dest) +void PokeblockCopyName(struct Pokeblock *pokeblock, u8 *dest) { - u8 color = sub_810CA9C(pokeblock, 0); + u8 color = GetPokeblockData(pokeblock, PBLOCK_COLOR); StringCopy(dest, gPokeblockNames[color]); } @@ -1124,7 +1124,7 @@ bool8 sub_810CB68(u8 nature, u8 *dest) u8 flavor; for (flavor=0; flavor<5; flavor++) { - if (sub_810CAE4(nature, &gUnknown_083F7F9C[flavor]) > 0) + if (PokeblockGetGain(nature, &gUnknown_083F7F9C[flavor]) > 0) { StringCopy(dest, gPokeblockNames[flavor + 1]); return TRUE; diff --git a/src/pokeblock_feed.c b/src/pokeblock_feed.c new file mode 100644 index 000000000..f99eca690 --- /dev/null +++ b/src/pokeblock_feed.c @@ -0,0 +1,577 @@ +#include "global.h" +#include "task.h" +#include "palette.h" +#include "main.h" +#include "menu_helpers.h" +#include "text.h" +#include "text_window.h" +#include "menu.h" +#include "rom4.h" +#include "decompress.h" +#include "data2.h" +#include "sprite.h" +#include "item_use.h" +#include "pokeblock.h" +#include "party_menu.h" +#include "strings.h" +#include "string_util.h" +#include "m4a.h" +#include "field_effect.h" +#include "sound.h" +#include "trig.h" + +extern u8 ewram[]; +extern struct MusicPlayerInfo gMPlay_BGM; +extern u8 gPokeblockMonID; +extern s16 gPokeblockGain; +extern struct CompressedSpritePalette sPokeblockFeedSpritePal; + +void sub_8147F4C(u8 taskID); +bool8 sub_8040A3C(u16 species); + +// IWRAM common + +extern const struct CompressedSpriteSheet gUnknown_083F7F74; +extern const struct CompressedSpriteSheet gUnknown_084121DC; +extern const struct CompressedSpritePalette gUnknown_083F7F7C; +extern const u8 gBattleTerrainTiles_Building[]; +extern const u8 gUnknown_08E782FC[]; +extern const u8 gBattleTerrainPalette_BattleTower[]; +extern const u8* const gUnknown_084120A4[]; +extern const union AffineAnimCmd* const gSpriteAffineAnimTable_84120EC[]; +extern const union AffineAnimCmd* const gSpriteAffineAnimTable_84121A0[]; +extern const union AffineAnimCmd* const gSpriteAffineAnimTable_84121A4[]; +extern const union AffineAnimCmd* const gSpriteAffineAnimTable_84121A8[]; +extern const union AffineAnimCmd* const gSpriteAffineAnimTable_8412050[]; +extern const struct SpriteTemplate gSpriteTemplate_84121E4; +extern const u8 gNatureToMonPokeblockAnim[][2]; +extern const s16 gMonPokeblockAnims[][10]; + +// this file's functions +void sub_8147B04(void); +void sub_81481DC(void); +void sub_814825C(void); +u8 sub_81480B4(void); +u8 sub_814817C(void); +u8 sub_8147F84(struct Pokemon* mon); +bool8 sub_8147B20(struct Pokemon* mon); +void sub_8147DDC(u8); +void sub_8148044(u8); +void sub_8148078(struct Sprite* sprite); +void Task_PrintAtePokeblockText(u8 taskID); +void SetPokeblockFeedSpritePal(u8); +void sub_8148108(u8, bool8); +bool8 sub_8148540(void); +bool8 sub_81485CC(void); +static bool8 FreePokeSpriteMatrix(void); +void sub_8148710(void); +void sub_814862C(void); + +void sub_8147890(void) +{ + AnimateSprites(); + BuildOamBuffer(); + RunTasks(); + UpdatePaletteFade(); +} + +void sub_81478A8(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +bool8 sub_81478BC(void) +{ + switch (gMain.state) + { + case 0: + sub_80F9438(); + sub_80F9368(); + sub_8147B04(); + gMain.state++; + break; + case 1: + ResetPaletteFade(); + gPaletteFade.bufferTransferDisabled = 1; + gMain.state++; + break; + case 2: + ResetSpriteData(); + gMain.state++; + break; + case 3: + FreeAllSpritePalettes(); + gMain.state++; + break; + case 4: + SetUpWindowConfig(&gWindowConfig_81E6E50); + gMain.state++; + break; + case 5: + MultistepInitMenuWindowBegin(&gWindowConfig_81E6E50); + gMain.state++; + break; + case 6: + if (MultistepInitMenuWindowContinue()) + { + ewram[0x1FFFF] = 0; + gMain.state++; + } + break; + case 7: + if (sub_8147B20(&gPlayerParty[gPokeblockMonID])) + { + gMain.state++; + } + break; + case 8: + ewram[0x1FFFD] = sub_81480B4(); + gMain.state++; + break; + case 9: + ewram[0x1FFFE] = sub_8147F84(&gPlayerParty[gPokeblockMonID]); + gMain.state++; + break; + case 10: + MenuDrawTextWindow(0, 14, 29, 19); + gMain.state++; + break; + case 11: + if (sub_8055870() != 1) + { + gMain.state++; + } + break; + case 12: + { + u16 savedIME = REG_IME; + REG_IME = 0; + REG_IE |= 1; + REG_IME = savedIME; + REG_DISPSTAT |= 8; + SetVBlankCallback(sub_81478A8); + gMain.state++; + } + case 13: + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); + gPaletteFade.bufferTransferDisabled = 0; + SetMainCallback2(sub_8147890); + return 1; + } + return 0; +} + +void sub_8147ADC(void) +{ + while (1) + { + if (sub_81478BC() == 1) + { + sub_8147DDC(1); + break; + } + if (sub_80F9344() == 1) + break; + } +} + +void sub_8147B04(void) +{ + REG_BG1CNT = 0x1D02l; + REG_DISPCNT = 0x1340; +} + +bool8 sub_8147B20(struct Pokemon* mon) +{ + u16 species; + u32 PiD, TiD; + switch (ewram[0x1FFFF]) + { + case 0: + species = GetMonData(mon, MON_DATA_SPECIES2); + PiD = GetMonData(mon, MON_DATA_PERSONALITY); + HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, 0x2000000, gUnknown_081FAF4C[1], species, PiD); + ewram[0x1FFFF]++; + break; + case 1: + { + const struct CompressedSpritePalette* palette; + + species = GetMonData(mon, MON_DATA_SPECIES2); + PiD = GetMonData(mon, MON_DATA_PERSONALITY); + TiD = GetMonData(mon, MON_DATA_OT_ID); + palette = sub_80409C8(species, TiD, PiD); + LoadCompressedObjectPalette(palette); + GetMonSpriteTemplate_803C56C(palette->tag, 1); + ewram[0x1FFFF]++; + } + break; + case 2: + LoadCompressedObjectPic(&gUnknown_083F7F74); + ewram[0x1FFFF]++; + break; + case 3: + LoadCompressedObjectPalette(&gUnknown_083F7F7C); + ewram[0x1FFFF]++; + break; + case 4: + LoadCompressedObjectPic(&gUnknown_084121DC); + ewram[0x1FFFF]++; + break; + case 5: + SetPokeblockFeedSpritePal(gScriptItemId); + LoadCompressedObjectPalette(&sPokeblockFeedSpritePal); + ewram[0x1FFFF]++; + break; + case 6: + LZDecompressVram(gBattleTerrainTiles_Building, (void*)(VRAM)); + ewram[0x1FFFF]++; + break; + case 7: + LZDecompressVram(gUnknown_08E782FC, (void*)(VRAM + 0xE800)); + ewram[0x1FFFF]++; + break; + case 8: + LoadCompressedPalette(gBattleTerrainPalette_BattleTower, 0x20, 0x60); + ewram[0x1FFFF] = 0; + return 1; + } + return 0; +} + +void SetPokeblockFeedSpritePal(u8 pkbID) +{ + u8 color = GetPokeblockData(&gSaveBlock1.pokeblocks[pkbID], PBLOCK_COLOR); + sPokeblockFeedSpritePal.data = gUnknown_084120A4[color - 1]; + sPokeblockFeedSpritePal.tag = 0x39E2; +} + +extern u16 gUnknown_03005F94; +extern u16 gUnknown_03005F34; +extern u8 gUnknown_03005F3C; + +void sub_8147CC8(u8 taskID) +{ + if (!gPaletteFade.active) + { + switch (gTasks[taskID].data[0]) + { + case 0: + gUnknown_03005F3C = 0; + gUnknown_03005F94 = 0; + sub_81481DC(); + break; + case 255: + sub_8148108(ewram[0x1FFFD], gTasks[taskID].data[1]); + break; + case 269: + ewram[0x1FFFC] = sub_814817C(); + break; + case 281: + sub_8148044(ewram[0x1FFFE]); + break; + case 297: + gTasks[taskID].func = Task_PrintAtePokeblockText; + return; + } + if (gUnknown_03005F94 < gUnknown_03005F34) + sub_814825C(); + else if (gUnknown_03005F94 == gUnknown_03005F34) + gTasks[taskID].data[0] = 254; + + gUnknown_03005F94++; + gTasks[taskID].data[0]++; + } +} + +void sub_8147DDC(u8 a0) +{ + u8 taskID = CreateTask(sub_8147CC8, 0); + gTasks[taskID].data[0] = 0; + gTasks[taskID].data[1] = a0; +} + +void sub_8147E10(u8 taskID) +{ + if (MenuUpdateWindowText() == 1) + gTasks[taskID].func = sub_8147F4C; +} + +void Task_PrintAtePokeblockText(u8 taskID) +{ + struct Pokemon* mon = &gPlayerParty[gPokeblockMonID]; + struct Pokeblock* pokeblock = &gSaveBlock1.pokeblocks[gScriptItemId]; + + gPokeblockGain = PokeblockGetGain(GetNature(mon), pokeblock); + GetMonNickname(mon, gStringVar1); + PokeblockCopyName(pokeblock, gStringVar2); + + if (gPokeblockGain == 0) + StringExpandPlaceholders(gStringVar4, gContestStatsText_NormallyAte); + else if (gPokeblockGain > 0) + StringExpandPlaceholders(gStringVar4, gContestStatsText_HappilyAte); + else + StringExpandPlaceholders(gStringVar4, gContestStatsText_DisdainfullyAte); + + MenuPrintMessage(gStringVar4, 1, 15); + gTasks[taskID].func = sub_8147E10; +} + +void sub_8147F08(u8 taskID) +{ + if (!gPaletteFade.active) + { + m4aMPlayVolumeControl(&gMPlay_BGM, -1, 256); + SetMainCallback2(gMain.savedCallback); + DestroyTask(taskID); + } +} + +void sub_8147F4C(u8 taskID) +{ + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + gTasks[taskID].func = sub_8147F08; +} + +extern u16 gPokeblockFeedMonSpecies; +extern u8 gPokeblockFeedMonSpriteID; +extern u8 gPokeblockFeedMonNature; +extern bool8 gPokeblockMonNotFlipped; + +u8 sub_8147F84(struct Pokemon* mon) +{ + u16 species = GetMonData(mon, MON_DATA_SPECIES2); + u8 spriteID = CreateSprite(&gUnknown_02024E8C, 48, 80, 2); + + gPokeblockFeedMonSpecies = species; + gPokeblockFeedMonSpriteID = spriteID; + gPokeblockFeedMonNature = GetNature(mon); + gSprites[spriteID].data2 = species; + gSprites[spriteID].callback = SpriteCallbackDummy; + gPokeblockMonNotFlipped = 1; + if (!sub_8040A3C(species)) + { + gSprites[spriteID].affineAnims = gSpriteAffineAnimTable_84120EC; + gSprites[spriteID].oam.affineMode = 3; + CalcCenterToCornerVec(&gSprites[spriteID], gSprites[spriteID].oam.shape, gSprites[spriteID].oam.size, gSprites[spriteID].oam.affineMode); + gPokeblockMonNotFlipped = 0; + } + return spriteID; +} + +void sub_8148044(u8 spriteID) +{ + gSprites[spriteID].pos1.x = 48; + gSprites[spriteID].pos1.y = 80; + gSprites[spriteID].data0 = -8; + gSprites[spriteID].data1 = 1; + gSprites[spriteID].callback = sub_8148078; +} + +void sub_8148078(struct Sprite* sprite) +{ + sprite->pos1.x += 4; + sprite->pos1.y += sprite->data0; + sprite->data0 += sprite->data1; + if (sprite->data0 == 0) + PlayCry1(sprite->data2, 0); + if (sprite->data0 == 9) + sprite->callback = SpriteCallbackDummy; +} + +u8 sub_81480B4(void) +{ + u8 spriteID = sub_810BA50(188, 100, 2); + gSprites[spriteID].oam.affineMode = 1; + gSprites[spriteID].affineAnims = gSpriteAffineAnimTable_84121A0; + gSprites[spriteID].callback = SpriteCallbackDummy; + InitSpriteAffineAnim(&gSprites[spriteID]); + return spriteID; +} + +void sub_8148108(u8 spriteID, bool8 a1) +{ + FreeOamMatrix(gSprites[spriteID].oam.matrixNum); + gSprites[spriteID].oam.affineMode = 3; + if (!a1) + gSprites[spriteID].affineAnims = gSpriteAffineAnimTable_84121A4; + else + gSprites[spriteID].affineAnims = gSpriteAffineAnimTable_84121A8; + InitSpriteAffineAnim(&gSprites[spriteID]); +} + +u8 sub_814817C(void) +{ + u8 spriteID = CreateSprite(&gSpriteTemplate_84121E4, 174, 84, 1); + gSprites[spriteID].data0 = -12; + gSprites[spriteID].data1 = 1; + return spriteID; +} + +void sub_81481B0(struct Sprite* sprite) +{ + sprite->pos1.x -= 4; + sprite->pos1.y += sprite->data0; + sprite->data0 += sprite->data1; + if (sprite->data0 == 10) + DestroySprite(sprite); +} + +void sub_81481DC(void) +{ + u8 animID, i; + + gUnknown_03005F34 = 1; + animID = gNatureToMonPokeblockAnim[gPokeblockFeedMonNature][0]; + for (i = 0; i < 8; i++, animID++) + { + gUnknown_03005F34 += gMonPokeblockAnims[animID][4]; + if (gMonPokeblockAnims[animID][9] == 1) + break; + } +} + +extern struct Sprite gPokeblockFeedPokeSpriteCopy; +extern struct Sprite* gPokeblockFeedPokeSprite; +extern u8 gUnknown_03005F40; +extern s16 gUnknown_03005FA0[]; + +void sub_814825C(void) +{ + switch (gUnknown_03005F3C) + { + case 0: + gUnknown_03005F40 = gNatureToMonPokeblockAnim[gPokeblockFeedMonNature][0]; + gPokeblockFeedPokeSprite = &gSprites[gPokeblockFeedMonSpriteID]; + gPokeblockFeedPokeSpriteCopy = *gPokeblockFeedPokeSprite; + gUnknown_03005F3C = 10; + break; + case 1 ... 9: + break; + case 10: + sub_8148540(); + if (gNatureToMonPokeblockAnim[gPokeblockFeedMonNature][1] != 0) + { + gPokeblockFeedPokeSprite->oam.affineMode = 3; + gPokeblockFeedPokeSprite->oam.matrixNum = 0; + gPokeblockFeedPokeSprite->affineAnims = gSpriteAffineAnimTable_8412050; + InitSpriteAffineAnim(gPokeblockFeedPokeSprite); + } + gUnknown_03005F3C = 50; + case 50: + if (gNatureToMonPokeblockAnim[gPokeblockFeedMonNature][1] != 0) + { + if (gPokeblockMonNotFlipped == 0) + StartSpriteAffineAnim(gPokeblockFeedPokeSprite, gNatureToMonPokeblockAnim[gPokeblockFeedMonNature][1] + 10); + else + StartSpriteAffineAnim(gPokeblockFeedPokeSprite, gNatureToMonPokeblockAnim[gPokeblockFeedMonNature][1]); + } + gUnknown_03005F3C = 60; + break; + case 60: + if (sub_81485CC() == 1) + { + if (gUnknown_03005FA0[9] == 0) + { + gUnknown_03005F40++; + sub_8148540(); + gUnknown_03005F3C = 60; + } + else + { + FreeOamMatrix(gPokeblockFeedPokeSprite->oam.matrixNum); + gUnknown_03005F3C = 70; + } + } + break; + case 70: + FreePokeSpriteMatrix(); + gUnknown_03005F40 = 0; + gUnknown_03005F3C = 0; + break; + case 71 ... 90: + break; + } +} + +bool8 sub_8148540(void) +{ + u8 i; + for (i = 0; i < 10; i++) + gUnknown_03005FA0[i] = gMonPokeblockAnims[gUnknown_03005F40][i]; + if (gUnknown_03005FA0[4] == 0) + return 1; + else + { + gUnknown_03005FA0[10] = Sin(gUnknown_03005FA0[0], gUnknown_03005FA0[2]); + gUnknown_03005FA0[11] = Cos(gUnknown_03005FA0[0], gUnknown_03005FA0[3]); + gUnknown_03005FA0[12] = gUnknown_03005FA0[4]; + gUnknown_03005FA0[13] = gPokeblockFeedPokeSprite->pos2.x; + gUnknown_03005FA0[14] = gPokeblockFeedPokeSprite->pos2.y; + sub_8148710(); + gUnknown_03005FA0[4] = gUnknown_03005FA0[12]; + sub_814862C(); + gUnknown_03005FA0[4] = gUnknown_03005FA0[12]; + return 0; + } +} + +bool8 sub_81485CC(void) +{ + u16 var = gUnknown_03005FA0[12] - gUnknown_03005FA0[4]; + + gPokeblockFeedPokeSprite->pos2.x = (u16)(*((u16*)(&ewram[0x1D000]) + var)); + gPokeblockFeedPokeSprite->pos2.y = (u16)(*((u16*)(&ewram[0x1D400]) + var)); + + if (--gUnknown_03005FA0[4] == 0) + return 1; + else + return 0; +} + +static bool8 FreePokeSpriteMatrix(void) +{ + FreeSpriteOamMatrix(gPokeblockFeedPokeSprite); + return 0; +} + +void sub_814862C(void) +{ + u16 i; + u16 r8 = gUnknown_03005FA0[8]; + u16 r7 = gUnknown_03005FA0[12] - r8; + s16 var3 = gUnknown_03005FA0[13] + gUnknown_03005FA0[6]; + s16 r9 = gUnknown_03005FA0[14] + gUnknown_03005FA0[7]; + + for (i = 0; i < r7 - 1; i++) + { + s16* r3 = (((u16*)(&ewram[0x1D000]) + (r8 + i))); + s16 r1 = *r3 - (var3); + + s16* r5 = (((u16*)(&ewram[0x1D400]) + (r8 + i))); + s16 r4 = *r5 - r9; + + *r3 -= r1 * (i + 1) / r7; + *r5 -= r4 * (i + 1) / r7; + } + + *((u16*)(&ewram[0x1CFFE]) + (r8 + r7)) = var3; + *((u16*)(&ewram[0x1D3FE]) + (r8 + r7)) = r9; +} + +/* +void sub_8148710(void) +{ + bool8 var_24 = 0; + s16 r8 = gUnknown_03005FA0[13] - gUnknown_03005FA0[10]; + s16 r7 = gUnknown_03005FA0[14] - gUnknown_03005FA0[11]; + s16 r5; + if (gUnknown_03005FA0[10] < 0) + r5 = -(gUnknown_03005FA0[10]) - gUnknown_03005FA0[3]; + else + r5 = (gUnknown_03005FA0[10]) - gUnknown_03005FA0[3]; + if (gUnknown_03005FA0) +} +*/ diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 3aa2f1fa5..19d2e4399 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -105,8 +105,8 @@ asm(".text\n" static EWRAM_DATA struct UnkPokenavStruct_Sub1 *gUnknown_02039304 = NULL; static EWRAM_DATA MainCallback gUnknown_02039308 = NULL; static EWRAM_DATA struct Pokeblock *gUnknown_0203930C = NULL; -EWRAM_DATA u8 gUnknown_02039310 = 0; -EWRAM_DATA s16 gUnknown_02039312 = 0; +EWRAM_DATA u8 gPokeblockMonID = 0; +EWRAM_DATA s16 gPokeblockGain = 0; extern u16 gKeyRepeatStartDelay; extern u16 gScriptItemId; // FIXME: remove after merge of #349 Pokeblock @@ -155,8 +155,8 @@ void sub_8136174(void) { gUnknown_02039304->pokeblock = gUnknown_0203930C; gUnknown_02039304->callback = gUnknown_02039308; - gUnknown_02039310 = sub_81370E4(gUnknown_02039310); - gUnknown_02039304->unk56 = gUnknown_02039310 < 4 ? 0 : 1; + gPokeblockMonID = sub_81370E4(gPokeblockMonID); + gUnknown_02039304->unk56 = gPokeblockMonID < 4 ? 0 : 1; gUnknown_083DFEC4->unkD162[0] = 2; launch_c3_walk_stairs_and_run_once(sub_8136294); SetMainCallback2(sub_81361E4); @@ -469,7 +469,7 @@ void sub_8136808(void) switch (gUnknown_02039304->unk50) { case 0: - gUnknown_02039310 = sub_81370A4(gUnknown_083DFEC4->unk87DC); + gPokeblockMonID = sub_81370A4(gUnknown_083DFEC4->unk87DC); gUnknown_02039308 = gUnknown_02039304->callback; gUnknown_0203930C = gUnknown_02039304->pokeblock; BeginNormalPaletteFade(-1, 0, 0, 16, 0); @@ -490,7 +490,7 @@ void sub_81368A4(void) switch (gUnknown_02039304->unk50) { case 0: - if (gUnknown_083DFEC4->unk87DC != gUnknown_02039310) + if (gUnknown_083DFEC4->unk87DC != gPokeblockMonID) { sub_80F5060(gUnknown_02039304->unk56); gUnknown_02039304->unk50++; @@ -578,7 +578,7 @@ void sub_81369CC(void) case 5: if (gMain.newKeys & (A_BUTTON | B_BUTTON) && !sub_8136D00()) { - sub_810CA6C((u8)gScriptItemId); + PokeblockClearIfExists((u8)gScriptItemId); launch_c3_walk_stairs_and_run_once(sub_8136B44); } break; @@ -864,9 +864,9 @@ void sub_8136F74(struct Pokeblock *pokeblock, struct Pokemon *pokemon) gUnknown_02039304->unk66[2] = pokeblock->bitter; gUnknown_02039304->unk66[3] = pokeblock->sweet; gUnknown_02039304->unk66[4] = pokeblock->dry; - if (gUnknown_02039312 > 0) + if (gPokeblockGain > 0) direction = 1; - else if (gUnknown_02039312 < 0) + else if (gPokeblockGain < 0) direction = -1; else return; diff --git a/src/wild_encounter.c b/src/wild_encounter.c index 96f47c067..7001c2eaa 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -3161,7 +3161,7 @@ static u8 PickWildMonNature(void) } for (i = 0; i < 25; i++) { - if (sub_810CAE4(natures[i], safariPokeblock) > 0) + if (PokeblockGetGain(natures[i], safariPokeblock) > 0) return natures[i]; } } diff --git a/sym_common.txt b/sym_common.txt index fc729a587..f4a5bfb48 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -295,19 +295,19 @@ gUnknown_03005F14: @ 3005F14 @ pokeblock_feed -gUnknown_03005F20: @ 3005F20 +gPokeblockFeedPokeSprite: @ 3005F20 .space 0x4 -gUnknown_03005F24: @ 3005F24 +gPokeblockFeedMonSpecies: @ 3005F24 .space 0x4 -gUnknown_03005F28: @ 3005F28 +gPokeblockMonNotFlipped: @ 3005F28 .space 0x4 -gUnknown_03005F2C: @ 3005F2C +gPokeblockFeedMonSpriteID: @ 3005F2C .space 0x4 -gUnknown_03005F30: @ 3005F30 +gPokeblockFeedMonNature: @ 3005F30 .space 0x4 gUnknown_03005F34: @ 3005F34 @@ -319,7 +319,7 @@ gUnknown_03005F3C: @ 3005F3C gUnknown_03005F40: @ 3005F40 .space 0x10 -gUnknown_03005F50: @ 3005F50 +gPokeblockFeedPokeSpriteCopy: @ 3005F50 .space 0x44 gUnknown_03005F94: @ 3005F94 diff --git a/sym_ewram.txt b/sym_ewram.txt index 0e8b25e28..d43a6d52d 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -678,7 +678,7 @@ gUnknown_0203931C: @ 203931C @ pokeblock_feed .align 2 -gUnknown_02039350: @ 2039350 +sPokeblockFeedSpritePal: @ 2039350 .space 0x8 @ intro_credits_graphics -- cgit v1.2.3 From be40e2196a84f0e6c3a5fb47829f52a88bd55937 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 14 Aug 2017 23:39:08 +0200 Subject: all data moved from asm to c --- common_syms/pokeblock_feed.txt | 12 + data/mon_pokeblock_anims.inc | 133 ---------- data/pokeblock_feed.s | 225 ---------------- ld_script.txt | 2 +- src/pokeblock_feed.c | 566 +++++++++++++++++++++++++++++++++++------ sym_common.txt | 35 +-- sym_ewram.txt | 7 +- 7 files changed, 504 insertions(+), 476 deletions(-) create mode 100644 common_syms/pokeblock_feed.txt delete mode 100644 data/mon_pokeblock_anims.inc delete mode 100644 data/pokeblock_feed.s diff --git a/common_syms/pokeblock_feed.txt b/common_syms/pokeblock_feed.txt new file mode 100644 index 000000000..b4c1e0982 --- /dev/null +++ b/common_syms/pokeblock_feed.txt @@ -0,0 +1,12 @@ +gPokeblockFeedPokeSprite +gPokeblockFeedMonSpecies +gPokeblockMonNotFlipped +gPokeblockFeedMonSpriteID +gPokeblockFeedMonNature +gUnknown_03005F34 +gPokeblockFeedUnused0 +gUnknown_03005F3C +gUnknown_03005F40 +gPokeblockFeedPokeSpriteCopy +gUnknown_03005F94 +gUnknown_03005FA0 \ No newline at end of file diff --git a/data/mon_pokeblock_anims.inc b/data/mon_pokeblock_anims.inc deleted file mode 100644 index d8df29c1d..000000000 --- a/data/mon_pokeblock_anims.inc +++ /dev/null @@ -1,133 +0,0 @@ -gNatureToMonPokeblockAnim:: @ 8411A10 - .byte 0, 0 @ HARDY - .byte 3, 0 @ LONELY - .byte 4, 1 @ BRAVE - .byte 5, 0 @ ADAMANT - .byte 10, 0 @ NAUGHTY - .byte 13, 0 @ BOLD - .byte 15, 0 @ DOCILE - .byte 16, 2 @ RELAXED - .byte 18, 0 @ IMPISH - .byte 19, 0 @ LAX - .byte 20, 0 @ TIMID - .byte 25, 0 @ HASTY - .byte 27, 3 @ SERIOUS - .byte 28, 0 @ JOLLY - .byte 29, 0 @ NAIVE - .byte 33, 4 @ MODEST - .byte 36, 0 @ MILD - .byte 37, 0 @ QUIET - .byte 39, 0 @ BASHFUL - .byte 42, 0 @ RASH - .byte 45, 0 @ CALM - .byte 46, 5 @ GENTLE - .byte 47, 6 @ SASSY - .byte 48, 0 @ CAREFUL - .byte 53, 0 @ QUIRKY - - .align 1 -gMonPokeblockAnims:: @ 8411A42 - @ HARDY - .2byte 0, 4, 0, 8, 24, 0, 0, 0, 12, 0 - .2byte 0, 4, 0, 16, 24, 0, 0, 0, 12, 0 - .2byte 0, 4, 0, 32, 32, 0, 0, 0, 16, 1 - - @ LONELY - .2byte 0, 3, 6, 0, 48, 0, 0, 0, 24, 1 - - @ BRAVE - .2byte 64, 16, -24, 0, 32, 0, 0, 0, 0, 1 - - @ ADAMANT - .2byte 0, 4, 8, 0, 16, 0, -8, 0, 0, 0 - .2byte 0, 0, 0, 0, 16, 0, 0, 0, 0, 0 - .2byte 0, 4, 8, 0, 16, 0, -8, 0, 0, 0 - .2byte 0, 0, 0, 0, 16, 0, 0, 0, 0, 0 - .2byte 0, 4, -16, 0, 4, 0, 16, 0, 0, 1 - - @ NAUGHTY - .2byte 0, 3, 6, 0, 12, 0, 0, 0, 6, 0 - .2byte 0, 3, -6, 0, 12, 0, 0, 0, 6, 0 - .2byte 0, 16, 16, 0, 45, 1, 0, 0, 0, 1 - - @ BOLD - .2byte 0, 16, 0, 24, 32, 0, 0, 0, 16, 0 - .2byte 0, 16, 0, 23, 32, 0, 0, 0, 16, 1 - - @ DOCILE - .2byte 0, 0, 0, 0, 80, 0, 0, 0, 0, 1 - - @ RELAXED - .2byte 0, 2, 8, 0, 32, 0, 0, 0, 0, 0 - .2byte 0, 2, -8, 0, 32, 0, 0, 0, 0, 1 - - @ IMPISH - .2byte 0, 32, 2, 1, 48, 1, 0, 0, 24, 1 - - @ LAX - .2byte 0, 2, 16, 16, 128, 0, 0, 0, 0, 1 - - @ TIMID - .2byte 0, 2, -8, 0, 48, 0, -24, 0, 0, 0 - .2byte 0, 0, 0, 0, 8, 0, 0, 0, 0, 0 - .2byte 64, 32, 2, 0, 36, 0, 0, 0, 0, 0 - .2byte 0, 0, 0, 0, 8, 0, 0, 0, 0, 0 - .2byte 0, 2, 8, 0, 48, 0, 24, 0, 0, 1 - - @ HASTY - .2byte 64, 24, 16, 0, 32, 0, 0, 0, 0, 0 - .2byte 0, 28, 2, 1, 32, 1, 0, 0, 16, 1 - - @ SERIOUS - .2byte 0, 0, 0, 0, 32, 0, 0, 0, 0, 1 - - @ JOLLY - .2byte 64, 16, -16, 2, 48, 0, 0, 0, 32, 1 - - @ NAIVE - .2byte 0, 12, -8, 4, 24, 0, 8, 0, 12, 0 - .2byte 0, 12, 8, 8, 24, 0, -16, 0, 12, 0 - .2byte 0, 12, -8, 16, 24, 0, 16, 0, 12, 0 - .2byte 0, 12, 8, 28, 24, 0, -8, 0, 12, 1 - - @ MODEST - .2byte 0, 0, 0, 0, 8, 0, 0, 0, 0, 0 - .2byte 64, 16, -4, 0, 32, 0, 0, 0, 0, 0 - .2byte 0, 0, 0, 0, 8, 0, 0, 0, 0, 1 - - @ MILD - .2byte 128, 4, 0, 8, 64, 0, 0, 0, 0, 1 - - @ QUIET - .2byte 0, 2, 16, 0, 48, 0, 0, 0, 0, 0 - .2byte 128, 2, 16, 0, 48, 0, 0, 0, 0, 1 - - @ BASHFUL - .2byte 0, 2, -4, 0, 48, 0, -48, 0, 0, 0 - .2byte 0, 0, 0, 0, 80, 0, 0, 0, 0, 0 - .2byte 0, 2, 8, 0, 24, 0, 48, 0, 0, 1 - - @ RASH - .2byte 64, 4, 64, 58, 52, 0, -88, 0, 0, 0 - .2byte 0, 0, 0, 0, 80, 0, 0, 0, 0, 0 - .2byte 0, 24, 80, 0, 32, 0, 88, 0, 0, 1 - - @ CALM - .2byte 0, 2, 16, 4, 64, 0, 0, 0, 0, 1 - - @ GENTLE - .2byte 0, 0, 0, 0, 32, 0, 0, 0, 0, 1 - - @ SASSY - .2byte 0, 0, 0, 0, 42, 0, 0, 0, 0, 1 - - @ CAREFUL - .2byte 0, 4, 0, 8, 24, 0, 0, 0, 12, 0 - .2byte 0, 0, 0, 0, 12, 0, 0, 0, 0, 0 - .2byte 0, 4, 0, 12, 24, 0, 0, 0, 12, 0 - .2byte 0, 0, 0, 0, 12, 0, 0, 0, 0, 0 - .2byte 0, 4, 0, 4, 24, 0, 0, 0, 12, 1 - - @ QUIRKY - .2byte 0, 4, 16, 12, 64, 0, 0, 0, 0, 0 - .2byte 0, -4, 16, 12, 64, 0, 0, 0, 0, 1 diff --git a/data/pokeblock_feed.s b/data/pokeblock_feed.s deleted file mode 100644 index ae5b17d12..000000000 --- a/data/pokeblock_feed.s +++ /dev/null @@ -1,225 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - -@ 8411A10 - .include "data/mon_pokeblock_anims.inc" - - .align 2 -gSpriteAffineAnim_8411E90:: @ 8411E90 - obj_rot_scal_anim_frame 0xFF00, 0x100, 0, 0 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnim_8411EA0:: @ 8411EA0 - obj_rot_scal_anim_frame 0x0, 0x0, 12, 1 - obj_rot_scal_anim_frame 0x0, 0x0, 0, 30 - obj_rot_scal_anim_frame 0x0, 0x0, -12, 1 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnim_8411EC0:: @ 8411EC0 - obj_rot_scal_anim_frame 0xFF00, 0x100, 0, 0 - obj_rot_scal_anim_frame 0x0, 0x0, 12, 1 - obj_rot_scal_anim_frame 0x0, 0x0, 0, 28 - obj_rot_scal_anim_frame 0x0, 0x0, -4, 3 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnim_8411EE8:: @ 8411EE8 - obj_rot_scal_anim_frame 0x0, 0x0, 1, 16 - obj_rot_scal_anim_frame 0x0, 0x0, -1, 32 - obj_rot_scal_anim_frame 0x0, 0x0, 1, 16 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnim_8411F08:: @ 8411F08 - obj_rot_scal_anim_frame 0xFF00, 0x100, 0, 0 - obj_rot_scal_anim_frame 0x0, 0x0, 1, 16 - obj_rot_scal_anim_frame 0x0, 0x0, -1, 32 - obj_rot_scal_anim_frame 0x0, 0x0, 1, 16 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnim_8411F30:: @ 8411F30 - obj_rot_scal_anim_frame 0x0, 0x0, -1, 8 - obj_rot_scal_anim_frame 0x0, 0x0, 0, 16 - obj_rot_scal_anim_frame 0x0, 0x0, 1, 8 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnim_8411F50:: @ 8411F50 - obj_rot_scal_anim_frame 0xFF00, 0x100, 0, 0 - obj_rot_scal_anim_frame 0x0, 0x0, -1, 8 - obj_rot_scal_anim_frame 0x0, 0x0, 0, 16 - obj_rot_scal_anim_frame 0x0, 0x0, 1, 8 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnim_8411F78:: @ 8411F78 - obj_rot_scal_anim_frame 0x0, 0x0, -1, 8 - obj_rot_scal_anim_frame 0x0, 0x0, 0, 32 - obj_rot_scal_anim_frame 0x0, 0x0, 1, 8 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnim_8411F98:: @ 8411F98 - obj_rot_scal_anim_frame 0xFF00, 0x100, 0, 0 - obj_rot_scal_anim_frame 0x0, 0x0, -1, 8 - obj_rot_scal_anim_frame 0x0, 0x0, 0, 32 - obj_rot_scal_anim_frame 0x0, 0x0, 1, 8 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnim_8411FC0:: @ 8411FC0 - obj_rot_scal_anim_frame 0x0, 0x0, -1, 4 - obj_rot_scal_anim_frame 0x0, 0x0, 0, 24 - obj_rot_scal_anim_frame 0x0, 0x0, 1, 4 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnim_8411FE0:: @ 8411FE0 - obj_rot_scal_anim_frame 0xFF00, 0x100, 0, 0 - obj_rot_scal_anim_frame 0x0, 0x0, -1, 4 - obj_rot_scal_anim_frame 0x0, 0x0, 0, 24 - obj_rot_scal_anim_frame 0x0, 0x0, 1, 4 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnim_8412008:: @ 8412008 - obj_rot_scal_anim_frame 0x0, 0x0, 1, 24 - obj_rot_scal_anim_frame 0x0, 0x0, 0, 16 - obj_rot_scal_anim_frame 0x0, 0x0, -12, 2 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnim_8412028:: @ 8412028 - obj_rot_scal_anim_frame 0xFF00, 0x100, 0, 0 - obj_rot_scal_anim_frame 0x0, 0x0, 1, 24 - obj_rot_scal_anim_frame 0x0, 0x0, 0, 16 - obj_rot_scal_anim_frame 0x0, 0x0, -12, 2 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnimTable_8412050:: @ 8412050 - .4byte gSpriteAffineAnim_8411E90 - .4byte gSpriteAffineAnim_8411EA0 - .4byte gSpriteAffineAnim_8411EE8 - .4byte gSpriteAffineAnim_8411F30 - .4byte gSpriteAffineAnim_8411F78 - .4byte gSpriteAffineAnim_8411FC0 - .4byte gSpriteAffineAnim_8412008 - .4byte gSpriteAffineAnim_8411E90 - .4byte gSpriteAffineAnim_8411E90 - .4byte gSpriteAffineAnim_8411E90 - .4byte gSpriteAffineAnim_8411E90 - .4byte gSpriteAffineAnim_8411EC0 - .4byte gSpriteAffineAnim_8411F08 - .4byte gSpriteAffineAnim_8411F50 - .4byte gSpriteAffineAnim_8411F98 - .4byte gSpriteAffineAnim_8411FE0 - .4byte gSpriteAffineAnim_8412028 - .4byte gSpriteAffineAnim_8411E90 - .4byte gSpriteAffineAnim_8411E90 - .4byte gSpriteAffineAnim_8411E90 - .4byte gSpriteAffineAnim_8411E90 - - .align 2 -gUnknown_084120A4:: @ 84120A4 - .4byte gPokeblockRed_Pal - .4byte gPokeblockBlue_Pal - .4byte gPokeblockPink_Pal - .4byte gPokeblockGreen_Pal - .4byte gPokeblockYellow_Pal - .4byte gPokeblockPurple_Pal - .4byte gPokeblockIndigo_Pal - .4byte gPokeblockBrown_Pal - .4byte gPokeblockLiteBlue_Pal - .4byte gPokeblockOlive_Pal - .4byte gPokeblockGray_Pal - .4byte gPokeblockBlack_Pal - .4byte gPokeblockWhite_Pal - .4byte gPokeblockGold_Pal - - .align 2 -gSpriteAffineAnim_84120DC:: @ 84120DC - obj_rot_scal_anim_frame 0xFF00, 0x100, 0, 0 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnimTable_84120EC:: @ 84120EC - .4byte gSpriteAffineAnim_84120DC - - .align 2 -gSpriteAffineAnim_84120F0:: @ 84120F0 - obj_rot_scal_anim_frame 0xFF00, 0x100, 0, 0 - obj_rot_scal_anim_frame 0x0, 0x0, -8, 1 - obj_rot_scal_anim_frame 0x0, 0x0, -8, 1 - obj_rot_scal_anim_frame 0x0, 0x0, -8, 1 - obj_rot_scal_anim_frame 0x0, 0x0, -8, 1 - obj_rot_scal_anim_frame 0x0, 0x0, 0, 8 - obj_rot_scal_anim_frame 0x0, 0x0, 16, 1 - obj_rot_scal_anim_frame 0x0, 0x0, 16, 1 - obj_rot_scal_anim_frame 0x0, 0x0, 16, 1 - obj_rot_scal_anim_frame 0xFF00, 0x100, 0, 0 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnim_8412148:: @ 8412148 - obj_rot_scal_anim_frame 0xFF00, 0x100, 0, 0 - obj_rot_scal_anim_frame 0x0, 0x0, 8, 1 - obj_rot_scal_anim_frame 0x0, 0x0, 8, 1 - obj_rot_scal_anim_frame 0x0, 0x0, 8, 1 - obj_rot_scal_anim_frame 0x0, 0x0, 8, 1 - obj_rot_scal_anim_frame 0x0, 0x0, 0, 8 - obj_rot_scal_anim_frame 0x0, 0x0, -16, 1 - obj_rot_scal_anim_frame 0x0, 0x0, -16, 1 - obj_rot_scal_anim_frame 0x0, 0x0, -16, 1 - obj_rot_scal_anim_frame 0xFF00, 0x100, 0, 0 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnimTable_84121A0:: @ 84121A0 - .4byte gSpriteAffineAnim_84120DC - - .align 2 -gSpriteAffineAnimTable_84121A4:: @ 84121A4 - .4byte gSpriteAffineAnim_84120F0 - - .align 2 -gSpriteAffineAnimTable_84121A8:: @ 84121A8 - .4byte gSpriteAffineAnim_8412148 - - .align 2 -gOamData_84121AC:: @ 84121AC - .2byte 0x0300 - .2byte 0x0000 - .2byte 0x0400 - - .align 2 -gSpriteAnim_84121B4:: @ 84121B4 - obj_image_anim_frame 0, 0 - obj_image_anim_end - - .align 2 -gSpriteAnimTable_84121BC:: @ 84121BC - .4byte gSpriteAnim_84121B4 - - .align 2 -gSpriteAffineAnim_84121C0:: @ 84121C0 - obj_rot_scal_anim_frame 0x100, 0x100, 0, 0 - obj_rot_scal_anim_frame 0xFFF8, 0xFFF8, 0, 1 - obj_rot_scal_anim_jump 1 - - .align 2 -gSpriteAffineAnimTable_84121D8:: @ 84121D8 - .4byte gSpriteAffineAnim_84121C0 - - .align 2 -gUnknown_084121DC:: @ 84121DC - obj_tiles gPokeblock_Gfx, 0x20, 14818 - - .align 2 -gSpriteTemplate_84121E4:: @ 84121E4 - spr_template 14818, 14818, gOamData_84121AC, gSpriteAnimTable_84121BC, NULL, gSpriteAffineAnimTable_84121D8, sub_81481B0 diff --git a/ld_script.txt b/ld_script.txt index 31f9ea495..8c34b4d6f 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -472,7 +472,7 @@ SECTIONS { src/strings.o(.rodata); src/berry_tag_screen.o(.rodata); src/save_failed_screen.o(.rodata); - data/pokeblock_feed.o(.rodata); + src/pokeblock_feed.o(.rodata); data/intro_credits_graphics.o(.rodata); data/evolution_graphics.o(.rodata); data/bard_music.o(.rodata); diff --git a/src/pokeblock_feed.c b/src/pokeblock_feed.c index f99eca690..18808e8af 100644 --- a/src/pokeblock_feed.c +++ b/src/pokeblock_feed.c @@ -24,50 +24,476 @@ extern u8 ewram[]; extern struct MusicPlayerInfo gMPlay_BGM; extern u8 gPokeblockMonID; extern s16 gPokeblockGain; -extern struct CompressedSpritePalette sPokeblockFeedSpritePal; + +extern const u8 gPokeblockRed_Pal[]; +extern const u8 gPokeblockBlue_Pal[]; +extern const u8 gPokeblockPink_Pal[]; +extern const u8 gPokeblockGreen_Pal[]; +extern const u8 gPokeblockYellow_Pal[]; +extern const u8 gPokeblockPurple_Pal[]; +extern const u8 gPokeblockIndigo_Pal[]; +extern const u8 gPokeblockBrown_Pal[]; +extern const u8 gPokeblockLiteBlue_Pal[]; +extern const u8 gPokeblockOlive_Pal[]; +extern const u8 gPokeblockGray_Pal[]; +extern const u8 gPokeblockBlack_Pal[]; +extern const u8 gPokeblockWhite_Pal[]; +extern const u8 gPokeblockGold_Pal[]; + +extern const u8 gPokeblock_Gfx[]; void sub_8147F4C(u8 taskID); bool8 sub_8040A3C(u16 species); +// this file's functions +static void sub_8147B04(void); +static void sub_81481DC(void); +static void sub_814825C(void); +static u8 sub_81480B4(void); +static u8 sub_814817C(void); +static u8 sub_8147F84(struct Pokemon* mon); +static bool8 sub_8147B20(struct Pokemon* mon); +static void sub_8147DDC(u8); +static void sub_8148044(u8); +static void sub_8148078(struct Sprite* sprite); +static void Task_PrintAtePokeblockText(u8 taskID); +static void SetPokeblockFeedSpritePal(u8); +static void sub_8148108(u8, bool8); +static bool8 sub_8148540(void); +static bool8 sub_81485CC(void); +static bool8 FreePokeSpriteMatrix(void); +void sub_8148710(void); +static void sub_81481B0(struct Sprite* sprite); +static void sub_814862C(void); + +// EWRAM +EWRAM_DATA static struct CompressedSpritePalette sPokeblockFeedSpritePal = {0}; + // IWRAM common +struct Sprite* gPokeblockFeedPokeSprite; +u16 gPokeblockFeedMonSpecies; +bool8 gPokeblockMonNotFlipped; +u8 gPokeblockFeedMonSpriteID; +u8 gPokeblockFeedMonNature; +u16 gUnknown_03005F34; +u8 gPokeblockFeedUnused0; +u8 gUnknown_03005F3C; +u8 gUnknown_03005F40; +struct Sprite gPokeblockFeedPokeSpriteCopy; +u16 gUnknown_03005F94; +s16 gUnknown_03005FA0[24]; + +// rodata + +static const u8 sNatureToMonPokeblockAnim[][2] = +{ + { 0, 0 }, // HARDY + { 3, 0 }, // LONELY + { 4, 1 }, // BRAVE + { 5, 0 }, // ADAMANT + { 10, 0 }, // NAUGHTY + { 13, 0 }, // BOLD + { 15, 0 }, // DOCILE + { 16, 2 }, // RELAXED + { 18, 0 }, // IMPISH + { 19, 0 }, // LAX + { 20, 0 }, // TIMID + { 25, 0 }, // HASTY + { 27, 3 }, // SERIOUS + { 28, 0 }, // JOLLY + { 29, 0 }, // NAIVE + { 33, 4 }, // MODEST + { 36, 0 }, // MILD + { 37, 0 }, // QUIET + { 39, 0 }, // BASHFUL + { 42, 0 }, // RASH + { 45, 0 }, // CALM + { 46, 5 }, // GENTLE + { 47, 6 }, // SASSY + { 48, 0 }, // CAREFUL + { 53, 0 }, // QUIRKY +}; + +static const s16 sMonPokeblockAnims[][10] = +{ + // HARDY + { 0, 4, 0, 8, 24, 0, 0, 0, 12, 0}, + { 0, 4, 0, 16, 24, 0, 0, 0, 12, 0}, + { 0, 4, 0, 32, 32, 0, 0, 0, 16, 1}, + + // LONELY + { 0, 3, 6, 0, 48, 0, 0, 0, 24, 1}, + + // BRAVE + { 64, 16, -24, 0, 32, 0, 0, 0, 0, 1}, + + // ADAMANT + { 0, 4, 8, 0, 16, 0, -8, 0, 0, 0}, + { 0, 0, 0, 0, 16, 0, 0, 0, 0, 0}, + { 0, 4, 8, 0, 16, 0, -8, 0, 0, 0}, + { 0, 0, 0, 0, 16, 0, 0, 0, 0, 0}, + { 0, 4, -16, 0, 4, 0, 16, 0, 0, 1}, + + // NAUGHTY + { 0, 3, 6, 0, 12, 0, 0, 0, 6, 0}, + { 0, 3, -6, 0, 12, 0, 0, 0, 6, 0}, + { 0, 16, 16, 0, 45, 1, 0, 0, 0, 1}, + + // BOLD + { 0, 16, 0, 24, 32, 0, 0, 0, 16, 0}, + { 0, 16, 0, 23, 32, 0, 0, 0, 16, 1}, + + // DOCILE + { 0, 0, 0, 0, 80, 0, 0, 0, 0, 1}, + + // RELAXED + { 0, 2, 8, 0, 32, 0, 0, 0, 0, 0}, + { 0, 2, -8, 0, 32, 0, 0, 0, 0, 1}, + + // IMPISH + { 0, 32, 2, 1, 48, 1, 0, 0, 24, 1}, + + // LAX + { 0, 2, 16, 16, 128, 0, 0, 0, 0, 1}, + + // TIMID + { 0, 2, -8, 0, 48, 0, -24, 0, 0, 0}, + { 0, 0, 0, 0, 8, 0, 0, 0, 0, 0}, + { 64, 32, 2, 0, 36, 0, 0, 0, 0, 0}, + { 0, 0, 0, 0, 8, 0, 0, 0, 0, 0}, + { 0, 2, 8, 0, 48, 0, 24, 0, 0, 1}, + + // HASTY + { 64, 24, 16, 0, 32, 0, 0, 0, 0, 0}, + { 0, 28, 2, 1, 32, 1, 0, 0, 16, 1}, + + // SERIOUS + { 0, 0, 0, 0, 32, 0, 0, 0, 0, 1}, + + // JOLLY + { 64, 16, -16, 2, 48, 0, 0, 0, 32, 1}, + + // NAIVE + { 0, 12, -8, 4, 24, 0, 8, 0, 12, 0}, + { 0, 12, 8, 8, 24, 0, -16, 0, 12, 0}, + { 0, 12, -8, 16, 24, 0, 16, 0, 12, 0}, + { 0, 12, 8, 28, 24, 0, -8, 0, 12, 1}, + + // MODEST + { 0, 0, 0, 0, 8, 0, 0, 0, 0, 0}, + { 64, 16, -4, 0, 32, 0, 0, 0, 0, 0}, + { 0, 0, 0, 0, 8, 0, 0, 0, 0, 1}, + + // MILD + { 128, 4, 0, 8, 64, 0, 0, 0, 0, 1}, + + // QUIET + { 0, 2, 16, 0, 48, 0, 0, 0, 0, 0}, + { 128, 2, 16, 0, 48, 0, 0, 0, 0, 1}, + + // BASHFUL + { 0, 2, -4, 0, 48, 0, -48, 0, 0, 0}, + { 0, 0, 0, 0, 80, 0, 0, 0, 0, 0}, + { 0, 2, 8, 0, 24, 0, 48, 0, 0, 1}, + + // RASH + { 64, 4, 64, 58, 52, 0, -88, 0, 0, 0}, + { 0, 0, 0, 0, 80, 0, 0, 0, 0, 0}, + { 0, 24, 80, 0, 32, 0, 88, 0, 0, 1}, + + // CALM + { 0, 2, 16, 4, 64, 0, 0, 0, 0, 1}, + + // GENTLE + { 0, 0, 0, 0, 32, 0, 0, 0, 0, 1}, + + // SASSY + { 0, 0, 0, 0, 42, 0, 0, 0, 0, 1}, + + // CAREFUL + { 0, 4, 0, 8, 24, 0, 0, 0, 12, 0}, + { 0, 0, 0, 0, 12, 0, 0, 0, 0, 0}, + { 0, 4, 0, 12, 24, 0, 0, 0, 12, 0}, + { 0, 0, 0, 0, 12, 0, 0, 0, 0, 0}, + { 0, 4, 0, 4, 24, 0, 0, 0, 12, 1}, + + // QUIRKY + { 0, 4, 16, 12, 64, 0, 0, 0, 0, 0}, + { 0, -4, 16, 12, 64, 0, 0, 0, 0, 1}, +}; + +static const union AffineAnimCmd gSpriteAffineAnim_8411E90[] = +{ + AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd gSpriteAffineAnim_8411EA0[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 12, 1), + AFFINEANIMCMD_FRAME(0, 0, 0, 30), + AFFINEANIMCMD_FRAME(0, 0, -12, 1), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd gSpriteAffineAnim_8411EC0[] = +{ + AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, 12, 1), + AFFINEANIMCMD_FRAME(0, 0, 0, 28), + AFFINEANIMCMD_FRAME(0, 0, -4, 3), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd gSpriteAffineAnim_8411EE8[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 16), + AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 32), + AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 16), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd gSpriteAffineAnim_8411F08[] = +{ + AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 16), + AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 32), + AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 16), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd gSpriteAffineAnim_8411F30[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 8), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 16), + AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 8), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd gSpriteAffineAnim_8411F50[] = +{ + AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 8), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 16), + AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 8), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd gSpriteAffineAnim_8411F78[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 8), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 32), + AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 8), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd gSpriteAffineAnim_8411F98[] = +{ + AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 8), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 32), + AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 8), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd gSpriteAffineAnim_8411FC0[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 4), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 24), + AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 4), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd gSpriteAffineAnim_8411FE0[] = +{ + AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 4), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 24), + AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 4), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd gSpriteAffineAnim_8412008[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 24), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 16), + AFFINEANIMCMD_FRAME(0x0, 0x0, -12, 2), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd gSpriteAffineAnim_8412028[] = +{ + AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 24), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 16), + AFFINEANIMCMD_FRAME(0x0, 0x0, -12, 2), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd *const gSpriteAffineAnimTable_8412050[] = +{ + gSpriteAffineAnim_8411E90, + gSpriteAffineAnim_8411EA0, + gSpriteAffineAnim_8411EE8, + gSpriteAffineAnim_8411F30, + gSpriteAffineAnim_8411F78, + gSpriteAffineAnim_8411FC0, + gSpriteAffineAnim_8412008, + gSpriteAffineAnim_8411E90, + gSpriteAffineAnim_8411E90, + gSpriteAffineAnim_8411E90, + gSpriteAffineAnim_8411E90, + gSpriteAffineAnim_8411EC0, + gSpriteAffineAnim_8411F08, + gSpriteAffineAnim_8411F50, + gSpriteAffineAnim_8411F98, + gSpriteAffineAnim_8411FE0, + gSpriteAffineAnim_8412028, + gSpriteAffineAnim_8411E90, + gSpriteAffineAnim_8411E90, + gSpriteAffineAnim_8411E90, + gSpriteAffineAnim_8411E90, +}; + +static const u8* const sPokeblocksPals[] = +{ + gPokeblockRed_Pal, + gPokeblockBlue_Pal, + gPokeblockPink_Pal, + gPokeblockGreen_Pal, + gPokeblockYellow_Pal, + gPokeblockPurple_Pal, + gPokeblockIndigo_Pal, + gPokeblockBrown_Pal, + gPokeblockLiteBlue_Pal, + gPokeblockOlive_Pal, + gPokeblockGray_Pal, + gPokeblockBlack_Pal, + gPokeblockWhite_Pal, + gPokeblockGold_Pal +}; + +static const union AffineAnimCmd gSpriteAffineAnim_84120DC[] = +{ + AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd *const gSpriteAffineAnimTable_84120EC[] = +{ + gSpriteAffineAnim_84120DC +}; + +static const union AffineAnimCmd gSpriteAffineAnim_84120F0[] = +{ + AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 1), + AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 1), + AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 1), + AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 1), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_FRAME(0x0, 0x0, 16, 1), + AFFINEANIMCMD_FRAME(0x0, 0x0, 16, 1), + AFFINEANIMCMD_FRAME(0x0, 0x0, 16, 1), + AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd gSpriteAffineAnim_8412148[] = +{ + AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 1), + AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 1), + AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 1), + AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 1), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_FRAME(0x0, 0x0, -16, 1), + AFFINEANIMCMD_FRAME(0x0, 0x0, -16, 1), + AFFINEANIMCMD_FRAME(0x0, 0x0, -16, 1), + AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd *const gSpriteAffineAnimTable_84121A0[] = +{ + gSpriteAffineAnim_84120DC +}; + +static const union AffineAnimCmd *const gSpriteAffineAnimTable_84121A4[] = +{ + gSpriteAffineAnim_84120F0 +}; + +static const union AffineAnimCmd *const gSpriteAffineAnimTable_84121A8[] = +{ + gSpriteAffineAnim_8412148 +}; + +static const struct OamData gOamData_84121AC = +{ + .y = 0, + .affineMode = 3, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd gSpriteAnim_84121B4[] = +{ + ANIMCMD_FRAME(0, 0), + ANIMCMD_END +}; + +static const union AnimCmd *const gSpriteAnimTable_84121BC[] = +{ + gSpriteAnim_84121B4, +}; + +static const union AffineAnimCmd gSpriteAffineAnim_84121C0[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 1), + AFFINEANIMCMD_JUMP(1) +}; + +static const union AffineAnimCmd *const gSpriteAffineAnimTable_84121D8[] = +{ + gSpriteAffineAnim_84121C0 +}; + +static const struct CompressedSpriteSheet gUnknown_084121DC = +{ + gPokeblock_Gfx, 0x20, 14818 +}; + +static const struct SpriteTemplate gSpriteTemplate_84121E4 = +{ + .tileTag = 14818, + .paletteTag = 14818, + .oam = &gOamData_84121AC, + .anims = gSpriteAnimTable_84121BC, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_84121D8, + .callback = sub_81481B0 +}; extern const struct CompressedSpriteSheet gUnknown_083F7F74; -extern const struct CompressedSpriteSheet gUnknown_084121DC; extern const struct CompressedSpritePalette gUnknown_083F7F7C; extern const u8 gBattleTerrainTiles_Building[]; extern const u8 gUnknown_08E782FC[]; extern const u8 gBattleTerrainPalette_BattleTower[]; -extern const u8* const gUnknown_084120A4[]; -extern const union AffineAnimCmd* const gSpriteAffineAnimTable_84120EC[]; -extern const union AffineAnimCmd* const gSpriteAffineAnimTable_84121A0[]; -extern const union AffineAnimCmd* const gSpriteAffineAnimTable_84121A4[]; -extern const union AffineAnimCmd* const gSpriteAffineAnimTable_84121A8[]; -extern const union AffineAnimCmd* const gSpriteAffineAnimTable_8412050[]; -extern const struct SpriteTemplate gSpriteTemplate_84121E4; -extern const u8 gNatureToMonPokeblockAnim[][2]; -extern const s16 gMonPokeblockAnims[][10]; -// this file's functions -void sub_8147B04(void); -void sub_81481DC(void); -void sub_814825C(void); -u8 sub_81480B4(void); -u8 sub_814817C(void); -u8 sub_8147F84(struct Pokemon* mon); -bool8 sub_8147B20(struct Pokemon* mon); -void sub_8147DDC(u8); -void sub_8148044(u8); -void sub_8148078(struct Sprite* sprite); -void Task_PrintAtePokeblockText(u8 taskID); -void SetPokeblockFeedSpritePal(u8); -void sub_8148108(u8, bool8); -bool8 sub_8148540(void); -bool8 sub_81485CC(void); -static bool8 FreePokeSpriteMatrix(void); -void sub_8148710(void); -void sub_814862C(void); +// code -void sub_8147890(void) +static void sub_8147890(void) { AnimateSprites(); BuildOamBuffer(); @@ -75,14 +501,14 @@ void sub_8147890(void) UpdatePaletteFade(); } -void sub_81478A8(void) +static void sub_81478A8(void) { LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); } -bool8 sub_81478BC(void) +static bool8 sub_81478BC(void) { switch (gMain.state) { @@ -177,13 +603,13 @@ void sub_8147ADC(void) } } -void sub_8147B04(void) +static void sub_8147B04(void) { REG_BG1CNT = 0x1D02l; REG_DISPCNT = 0x1340; } -bool8 sub_8147B20(struct Pokemon* mon) +static bool8 sub_8147B20(struct Pokemon* mon) { u16 species; u32 PiD, TiD; @@ -241,18 +667,14 @@ bool8 sub_8147B20(struct Pokemon* mon) return 0; } -void SetPokeblockFeedSpritePal(u8 pkbID) +static void SetPokeblockFeedSpritePal(u8 pkbID) { u8 color = GetPokeblockData(&gSaveBlock1.pokeblocks[pkbID], PBLOCK_COLOR); - sPokeblockFeedSpritePal.data = gUnknown_084120A4[color - 1]; + sPokeblockFeedSpritePal.data = sPokeblocksPals[color - 1]; sPokeblockFeedSpritePal.tag = 0x39E2; } -extern u16 gUnknown_03005F94; -extern u16 gUnknown_03005F34; -extern u8 gUnknown_03005F3C; - -void sub_8147CC8(u8 taskID) +static void sub_8147CC8(u8 taskID) { if (!gPaletteFade.active) { @@ -286,20 +708,20 @@ void sub_8147CC8(u8 taskID) } } -void sub_8147DDC(u8 a0) +static void sub_8147DDC(u8 a0) { u8 taskID = CreateTask(sub_8147CC8, 0); gTasks[taskID].data[0] = 0; gTasks[taskID].data[1] = a0; } -void sub_8147E10(u8 taskID) +static void sub_8147E10(u8 taskID) { if (MenuUpdateWindowText() == 1) gTasks[taskID].func = sub_8147F4C; } -void Task_PrintAtePokeblockText(u8 taskID) +static void Task_PrintAtePokeblockText(u8 taskID) { struct Pokemon* mon = &gPlayerParty[gPokeblockMonID]; struct Pokeblock* pokeblock = &gSaveBlock1.pokeblocks[gScriptItemId]; @@ -319,7 +741,7 @@ void Task_PrintAtePokeblockText(u8 taskID) gTasks[taskID].func = sub_8147E10; } -void sub_8147F08(u8 taskID) +static void sub_8147F08(u8 taskID) { if (!gPaletteFade.active) { @@ -335,12 +757,7 @@ void sub_8147F4C(u8 taskID) gTasks[taskID].func = sub_8147F08; } -extern u16 gPokeblockFeedMonSpecies; -extern u8 gPokeblockFeedMonSpriteID; -extern u8 gPokeblockFeedMonNature; -extern bool8 gPokeblockMonNotFlipped; - -u8 sub_8147F84(struct Pokemon* mon) +static u8 sub_8147F84(struct Pokemon* mon) { u16 species = GetMonData(mon, MON_DATA_SPECIES2); u8 spriteID = CreateSprite(&gUnknown_02024E8C, 48, 80, 2); @@ -361,7 +778,7 @@ u8 sub_8147F84(struct Pokemon* mon) return spriteID; } -void sub_8148044(u8 spriteID) +static void sub_8148044(u8 spriteID) { gSprites[spriteID].pos1.x = 48; gSprites[spriteID].pos1.y = 80; @@ -370,7 +787,7 @@ void sub_8148044(u8 spriteID) gSprites[spriteID].callback = sub_8148078; } -void sub_8148078(struct Sprite* sprite) +static void sub_8148078(struct Sprite* sprite) { sprite->pos1.x += 4; sprite->pos1.y += sprite->data0; @@ -381,7 +798,7 @@ void sub_8148078(struct Sprite* sprite) sprite->callback = SpriteCallbackDummy; } -u8 sub_81480B4(void) +static u8 sub_81480B4(void) { u8 spriteID = sub_810BA50(188, 100, 2); gSprites[spriteID].oam.affineMode = 1; @@ -391,7 +808,7 @@ u8 sub_81480B4(void) return spriteID; } -void sub_8148108(u8 spriteID, bool8 a1) +static void sub_8148108(u8 spriteID, bool8 a1) { FreeOamMatrix(gSprites[spriteID].oam.matrixNum); gSprites[spriteID].oam.affineMode = 3; @@ -402,7 +819,7 @@ void sub_8148108(u8 spriteID, bool8 a1) InitSpriteAffineAnim(&gSprites[spriteID]); } -u8 sub_814817C(void) +static u8 sub_814817C(void) { u8 spriteID = CreateSprite(&gSpriteTemplate_84121E4, 174, 84, 1); gSprites[spriteID].data0 = -12; @@ -410,7 +827,7 @@ u8 sub_814817C(void) return spriteID; } -void sub_81481B0(struct Sprite* sprite) +static void sub_81481B0(struct Sprite* sprite) { sprite->pos1.x -= 4; sprite->pos1.y += sprite->data0; @@ -419,31 +836,26 @@ void sub_81481B0(struct Sprite* sprite) DestroySprite(sprite); } -void sub_81481DC(void) +static void sub_81481DC(void) { u8 animID, i; gUnknown_03005F34 = 1; - animID = gNatureToMonPokeblockAnim[gPokeblockFeedMonNature][0]; + animID = sNatureToMonPokeblockAnim[gPokeblockFeedMonNature][0]; for (i = 0; i < 8; i++, animID++) { - gUnknown_03005F34 += gMonPokeblockAnims[animID][4]; - if (gMonPokeblockAnims[animID][9] == 1) + gUnknown_03005F34 += sMonPokeblockAnims[animID][4]; + if (sMonPokeblockAnims[animID][9] == 1) break; } } -extern struct Sprite gPokeblockFeedPokeSpriteCopy; -extern struct Sprite* gPokeblockFeedPokeSprite; -extern u8 gUnknown_03005F40; -extern s16 gUnknown_03005FA0[]; - -void sub_814825C(void) +static void sub_814825C(void) { switch (gUnknown_03005F3C) { case 0: - gUnknown_03005F40 = gNatureToMonPokeblockAnim[gPokeblockFeedMonNature][0]; + gUnknown_03005F40 = sNatureToMonPokeblockAnim[gPokeblockFeedMonNature][0]; gPokeblockFeedPokeSprite = &gSprites[gPokeblockFeedMonSpriteID]; gPokeblockFeedPokeSpriteCopy = *gPokeblockFeedPokeSprite; gUnknown_03005F3C = 10; @@ -452,7 +864,7 @@ void sub_814825C(void) break; case 10: sub_8148540(); - if (gNatureToMonPokeblockAnim[gPokeblockFeedMonNature][1] != 0) + if (sNatureToMonPokeblockAnim[gPokeblockFeedMonNature][1] != 0) { gPokeblockFeedPokeSprite->oam.affineMode = 3; gPokeblockFeedPokeSprite->oam.matrixNum = 0; @@ -461,12 +873,12 @@ void sub_814825C(void) } gUnknown_03005F3C = 50; case 50: - if (gNatureToMonPokeblockAnim[gPokeblockFeedMonNature][1] != 0) + if (sNatureToMonPokeblockAnim[gPokeblockFeedMonNature][1] != 0) { if (gPokeblockMonNotFlipped == 0) - StartSpriteAffineAnim(gPokeblockFeedPokeSprite, gNatureToMonPokeblockAnim[gPokeblockFeedMonNature][1] + 10); + StartSpriteAffineAnim(gPokeblockFeedPokeSprite, sNatureToMonPokeblockAnim[gPokeblockFeedMonNature][1] + 10); else - StartSpriteAffineAnim(gPokeblockFeedPokeSprite, gNatureToMonPokeblockAnim[gPokeblockFeedMonNature][1]); + StartSpriteAffineAnim(gPokeblockFeedPokeSprite, sNatureToMonPokeblockAnim[gPokeblockFeedMonNature][1]); } gUnknown_03005F3C = 60; break; @@ -496,11 +908,11 @@ void sub_814825C(void) } } -bool8 sub_8148540(void) +static bool8 sub_8148540(void) { u8 i; for (i = 0; i < 10; i++) - gUnknown_03005FA0[i] = gMonPokeblockAnims[gUnknown_03005F40][i]; + gUnknown_03005FA0[i] = sMonPokeblockAnims[gUnknown_03005F40][i]; if (gUnknown_03005FA0[4] == 0) return 1; else @@ -518,7 +930,7 @@ bool8 sub_8148540(void) } } -bool8 sub_81485CC(void) +static bool8 sub_81485CC(void) { u16 var = gUnknown_03005FA0[12] - gUnknown_03005FA0[4]; @@ -537,7 +949,7 @@ static bool8 FreePokeSpriteMatrix(void) return 0; } -void sub_814862C(void) +static void sub_814862C(void) { u16 i; u16 r8 = gUnknown_03005FA0[8]; diff --git a/sym_common.txt b/sym_common.txt index f4a5bfb48..3278fefcf 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -293,40 +293,7 @@ gUnknown_03005F10: @ 3005F10 gUnknown_03005F14: @ 3005F14 .space 0xC -@ pokeblock_feed - -gPokeblockFeedPokeSprite: @ 3005F20 - .space 0x4 - -gPokeblockFeedMonSpecies: @ 3005F24 - .space 0x4 - -gPokeblockMonNotFlipped: @ 3005F28 - .space 0x4 - -gPokeblockFeedMonSpriteID: @ 3005F2C - .space 0x4 - -gPokeblockFeedMonNature: @ 3005F30 - .space 0x4 - -gUnknown_03005F34: @ 3005F34 - .space 0x8 - -gUnknown_03005F3C: @ 3005F3C - .space 0x4 - -gUnknown_03005F40: @ 3005F40 - .space 0x10 - -gPokeblockFeedPokeSpriteCopy: @ 3005F50 - .space 0x44 - -gUnknown_03005F94: @ 3005F94 - .space 0xC - -gUnknown_03005FA0: @ 3005FA0 - .space 0x30 + .include "pokeblock_feed.o" .include "m4a_2.o" .include "agb_flash.o" diff --git a/sym_ewram.txt b/sym_ewram.txt index d43a6d52d..c5aa4a906 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -674,12 +674,7 @@ gUnknown_0203931C: @ 203931C .include "src/berry_tag_screen.o" .include "src/mystery_event_menu.o" .include "src/save_failed_screen.o" - -@ pokeblock_feed - - .align 2 -sPokeblockFeedSpritePal: @ 2039350 - .space 0x8 + .include "src/pokeblock_feed.o" @ intro_credits_graphics -- cgit v1.2.3 From dc72c86f3cd6e5f89eb3305891c451664e747296 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 15 Aug 2017 00:18:36 +0200 Subject: give better names to functions --- src/pokeblock_feed.c | 182 +++++++++++++++++++++++++-------------------------- 1 file changed, 90 insertions(+), 92 deletions(-) diff --git a/src/pokeblock_feed.c b/src/pokeblock_feed.c index 18808e8af..300464474 100644 --- a/src/pokeblock_feed.c +++ b/src/pokeblock_feed.c @@ -39,10 +39,13 @@ extern const u8 gPokeblockGray_Pal[]; extern const u8 gPokeblockBlack_Pal[]; extern const u8 gPokeblockWhite_Pal[]; extern const u8 gPokeblockGold_Pal[]; - extern const u8 gPokeblock_Gfx[]; +extern const u8 gBattleTerrainTiles_Building[]; +extern const u8 gUnknown_08E782FC[]; +extern const u8 gBattleTerrainPalette_BattleTower[]; +extern const struct CompressedSpriteSheet gUnknown_083F7F74; +extern const struct CompressedSpritePalette gUnknown_083F7F7C; -void sub_8147F4C(u8 taskID); bool8 sub_8040A3C(u16 species); // this file's functions @@ -51,12 +54,13 @@ static void sub_81481DC(void); static void sub_814825C(void); static u8 sub_81480B4(void); static u8 sub_814817C(void); -static u8 sub_8147F84(struct Pokemon* mon); +static u8 PokeblockFeed_CreatePokeSprite(struct Pokemon* mon); static bool8 sub_8147B20(struct Pokemon* mon); -static void sub_8147DDC(u8); +static void LaunchPokeblockFeedTask(u8); static void sub_8148044(u8); static void sub_8148078(struct Sprite* sprite); static void Task_PrintAtePokeblockText(u8 taskID); +static void Task_PaletteFadeToReturn(u8 taskID); static void SetPokeblockFeedSpritePal(u8); static void sub_8148108(u8, bool8); static bool8 sub_8148540(void); @@ -222,13 +226,13 @@ static const s16 sMonPokeblockAnims[][10] = { 0, -4, 16, 12, 64, 0, 0, 0, 0, 1}, }; -static const union AffineAnimCmd gSpriteAffineAnim_8411E90[] = +static const union AffineAnimCmd sSpriteAffineAnim_8411E90[] = { AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), AFFINEANIMCMD_END }; -static const union AffineAnimCmd gSpriteAffineAnim_8411EA0[] = +static const union AffineAnimCmd sSpriteAffineAnim_8411EA0[] = { AFFINEANIMCMD_FRAME(0, 0, 12, 1), AFFINEANIMCMD_FRAME(0, 0, 0, 30), @@ -236,7 +240,7 @@ static const union AffineAnimCmd gSpriteAffineAnim_8411EA0[] = AFFINEANIMCMD_END }; -static const union AffineAnimCmd gSpriteAffineAnim_8411EC0[] = +static const union AffineAnimCmd sSpriteAffineAnim_8411EC0[] = { AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), AFFINEANIMCMD_FRAME(0, 0, 12, 1), @@ -245,7 +249,7 @@ static const union AffineAnimCmd gSpriteAffineAnim_8411EC0[] = AFFINEANIMCMD_END }; -static const union AffineAnimCmd gSpriteAffineAnim_8411EE8[] = +static const union AffineAnimCmd sSpriteAffineAnim_8411EE8[] = { AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 16), AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 32), @@ -253,7 +257,7 @@ static const union AffineAnimCmd gSpriteAffineAnim_8411EE8[] = AFFINEANIMCMD_END }; -static const union AffineAnimCmd gSpriteAffineAnim_8411F08[] = +static const union AffineAnimCmd sSpriteAffineAnim_8411F08[] = { AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 16), @@ -262,7 +266,7 @@ static const union AffineAnimCmd gSpriteAffineAnim_8411F08[] = AFFINEANIMCMD_END }; -static const union AffineAnimCmd gSpriteAffineAnim_8411F30[] = +static const union AffineAnimCmd sSpriteAffineAnim_8411F30[] = { AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 8), AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 16), @@ -270,7 +274,7 @@ static const union AffineAnimCmd gSpriteAffineAnim_8411F30[] = AFFINEANIMCMD_END }; -static const union AffineAnimCmd gSpriteAffineAnim_8411F50[] = +static const union AffineAnimCmd sSpriteAffineAnim_8411F50[] = { AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 8), @@ -279,7 +283,7 @@ static const union AffineAnimCmd gSpriteAffineAnim_8411F50[] = AFFINEANIMCMD_END }; -static const union AffineAnimCmd gSpriteAffineAnim_8411F78[] = +static const union AffineAnimCmd sSpriteAffineAnim_8411F78[] = { AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 8), AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 32), @@ -287,7 +291,7 @@ static const union AffineAnimCmd gSpriteAffineAnim_8411F78[] = AFFINEANIMCMD_END }; -static const union AffineAnimCmd gSpriteAffineAnim_8411F98[] = +static const union AffineAnimCmd sSpriteAffineAnim_8411F98[] = { AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 8), @@ -296,7 +300,7 @@ static const union AffineAnimCmd gSpriteAffineAnim_8411F98[] = AFFINEANIMCMD_END }; -static const union AffineAnimCmd gSpriteAffineAnim_8411FC0[] = +static const union AffineAnimCmd sSpriteAffineAnim_8411FC0[] = { AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 4), AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 24), @@ -304,7 +308,7 @@ static const union AffineAnimCmd gSpriteAffineAnim_8411FC0[] = AFFINEANIMCMD_END }; -static const union AffineAnimCmd gSpriteAffineAnim_8411FE0[] = +static const union AffineAnimCmd sSpriteAffineAnim_8411FE0[] = { AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 4), @@ -313,7 +317,7 @@ static const union AffineAnimCmd gSpriteAffineAnim_8411FE0[] = AFFINEANIMCMD_END }; -static const union AffineAnimCmd gSpriteAffineAnim_8412008[] = +static const union AffineAnimCmd sSpriteAffineAnim_8412008[] = { AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 24), AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 16), @@ -321,7 +325,7 @@ static const union AffineAnimCmd gSpriteAffineAnim_8412008[] = AFFINEANIMCMD_END }; -static const union AffineAnimCmd gSpriteAffineAnim_8412028[] = +static const union AffineAnimCmd sSpriteAffineAnim_8412028[] = { AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 24), @@ -330,29 +334,29 @@ static const union AffineAnimCmd gSpriteAffineAnim_8412028[] = AFFINEANIMCMD_END }; -static const union AffineAnimCmd *const gSpriteAffineAnimTable_8412050[] = -{ - gSpriteAffineAnim_8411E90, - gSpriteAffineAnim_8411EA0, - gSpriteAffineAnim_8411EE8, - gSpriteAffineAnim_8411F30, - gSpriteAffineAnim_8411F78, - gSpriteAffineAnim_8411FC0, - gSpriteAffineAnim_8412008, - gSpriteAffineAnim_8411E90, - gSpriteAffineAnim_8411E90, - gSpriteAffineAnim_8411E90, - gSpriteAffineAnim_8411E90, - gSpriteAffineAnim_8411EC0, - gSpriteAffineAnim_8411F08, - gSpriteAffineAnim_8411F50, - gSpriteAffineAnim_8411F98, - gSpriteAffineAnim_8411FE0, - gSpriteAffineAnim_8412028, - gSpriteAffineAnim_8411E90, - gSpriteAffineAnim_8411E90, - gSpriteAffineAnim_8411E90, - gSpriteAffineAnim_8411E90, +static const union AffineAnimCmd *const sSpriteAffineAnimTable_8412050[] = +{ + sSpriteAffineAnim_8411E90, + sSpriteAffineAnim_8411EA0, + sSpriteAffineAnim_8411EE8, + sSpriteAffineAnim_8411F30, + sSpriteAffineAnim_8411F78, + sSpriteAffineAnim_8411FC0, + sSpriteAffineAnim_8412008, + sSpriteAffineAnim_8411E90, + sSpriteAffineAnim_8411E90, + sSpriteAffineAnim_8411E90, + sSpriteAffineAnim_8411E90, + sSpriteAffineAnim_8411EC0, + sSpriteAffineAnim_8411F08, + sSpriteAffineAnim_8411F50, + sSpriteAffineAnim_8411F98, + sSpriteAffineAnim_8411FE0, + sSpriteAffineAnim_8412028, + sSpriteAffineAnim_8411E90, + sSpriteAffineAnim_8411E90, + sSpriteAffineAnim_8411E90, + sSpriteAffineAnim_8411E90, }; static const u8* const sPokeblocksPals[] = @@ -373,18 +377,18 @@ static const u8* const sPokeblocksPals[] = gPokeblockGold_Pal }; -static const union AffineAnimCmd gSpriteAffineAnim_84120DC[] = +static const union AffineAnimCmd sSpriteAffineAnim_84120DC[] = { AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), AFFINEANIMCMD_END }; -static const union AffineAnimCmd *const gSpriteAffineAnimTable_84120EC[] = +static const union AffineAnimCmd *const sSpriteAffineAnimTable_84120EC[] = { - gSpriteAffineAnim_84120DC + sSpriteAffineAnim_84120DC }; -static const union AffineAnimCmd gSpriteAffineAnim_84120F0[] = +static const union AffineAnimCmd sSpriteAffineAnim_84120F0[] = { AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 1), @@ -399,7 +403,7 @@ static const union AffineAnimCmd gSpriteAffineAnim_84120F0[] = AFFINEANIMCMD_END }; -static const union AffineAnimCmd gSpriteAffineAnim_8412148[] = +static const union AffineAnimCmd sSpriteAffineAnim_8412148[] = { AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 1), @@ -414,22 +418,22 @@ static const union AffineAnimCmd gSpriteAffineAnim_8412148[] = AFFINEANIMCMD_END }; -static const union AffineAnimCmd *const gSpriteAffineAnimTable_84121A0[] = +static const union AffineAnimCmd *const sSpriteAffineAnimTable_84121A0[] = { - gSpriteAffineAnim_84120DC + sSpriteAffineAnim_84120DC }; -static const union AffineAnimCmd *const gSpriteAffineAnimTable_84121A4[] = +static const union AffineAnimCmd *const sSpriteAffineAnimTable_84121A4[] = { - gSpriteAffineAnim_84120F0 + sSpriteAffineAnim_84120F0 }; -static const union AffineAnimCmd *const gSpriteAffineAnimTable_84121A8[] = +static const union AffineAnimCmd *const sSpriteAffineAnimTable_84121A8[] = { - gSpriteAffineAnim_8412148 + sSpriteAffineAnim_8412148 }; -static const struct OamData gOamData_84121AC = +static const struct OamData sOamData_84121AC = { .y = 0, .affineMode = 3, @@ -446,54 +450,48 @@ static const struct OamData gOamData_84121AC = .affineParam = 0, }; -static const union AnimCmd gSpriteAnim_84121B4[] = +static const union AnimCmd sSpriteAnim_84121B4[] = { ANIMCMD_FRAME(0, 0), ANIMCMD_END }; -static const union AnimCmd *const gSpriteAnimTable_84121BC[] = +static const union AnimCmd *const sSpriteAnimTable_84121BC[] = { - gSpriteAnim_84121B4, + sSpriteAnim_84121B4, }; -static const union AffineAnimCmd gSpriteAffineAnim_84121C0[] = +static const union AffineAnimCmd sSpriteAffineAnim_84121C0[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 1), AFFINEANIMCMD_JUMP(1) }; -static const union AffineAnimCmd *const gSpriteAffineAnimTable_84121D8[] = +static const union AffineAnimCmd *const sSpriteAffineAnimTable_84121D8[] = { - gSpriteAffineAnim_84121C0 + sSpriteAffineAnim_84121C0 }; -static const struct CompressedSpriteSheet gUnknown_084121DC = +static const struct CompressedSpriteSheet sUnknown_084121DC = { gPokeblock_Gfx, 0x20, 14818 }; -static const struct SpriteTemplate gSpriteTemplate_84121E4 = +static const struct SpriteTemplate sSpriteTemplate_84121E4 = { .tileTag = 14818, .paletteTag = 14818, - .oam = &gOamData_84121AC, - .anims = gSpriteAnimTable_84121BC, + .oam = &sOamData_84121AC, + .anims = sSpriteAnimTable_84121BC, .images = NULL, - .affineAnims = gSpriteAffineAnimTable_84121D8, + .affineAnims = sSpriteAffineAnimTable_84121D8, .callback = sub_81481B0 }; -extern const struct CompressedSpriteSheet gUnknown_083F7F74; -extern const struct CompressedSpritePalette gUnknown_083F7F7C; -extern const u8 gBattleTerrainTiles_Building[]; -extern const u8 gUnknown_08E782FC[]; -extern const u8 gBattleTerrainPalette_BattleTower[]; - // code -static void sub_8147890(void) +static void CB2_PokeblockFeed(void) { AnimateSprites(); BuildOamBuffer(); @@ -501,14 +499,14 @@ static void sub_8147890(void) UpdatePaletteFade(); } -static void sub_81478A8(void) +static void VBlankCB_PokeblockFeed(void) { LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); } -static bool8 sub_81478BC(void) +static bool8 TransitionToPokeblockFeedScene(void) { switch (gMain.state) { @@ -557,7 +555,7 @@ static bool8 sub_81478BC(void) gMain.state++; break; case 9: - ewram[0x1FFFE] = sub_8147F84(&gPlayerParty[gPokeblockMonID]); + ewram[0x1FFFE] = PokeblockFeed_CreatePokeSprite(&gPlayerParty[gPokeblockMonID]); gMain.state++; break; case 10: @@ -577,13 +575,13 @@ static bool8 sub_81478BC(void) REG_IE |= 1; REG_IME = savedIME; REG_DISPSTAT |= 8; - SetVBlankCallback(sub_81478A8); + SetVBlankCallback(VBlankCB_PokeblockFeed); gMain.state++; } case 13: BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); gPaletteFade.bufferTransferDisabled = 0; - SetMainCallback2(sub_8147890); + SetMainCallback2(CB2_PokeblockFeed); return 1; } return 0; @@ -593,9 +591,9 @@ void sub_8147ADC(void) { while (1) { - if (sub_81478BC() == 1) + if (TransitionToPokeblockFeedScene() == 1) { - sub_8147DDC(1); + LaunchPokeblockFeedTask(1); break; } if (sub_80F9344() == 1) @@ -643,7 +641,7 @@ static bool8 sub_8147B20(struct Pokemon* mon) ewram[0x1FFFF]++; break; case 4: - LoadCompressedObjectPic(&gUnknown_084121DC); + LoadCompressedObjectPic(&sUnknown_084121DC); ewram[0x1FFFF]++; break; case 5: @@ -708,17 +706,17 @@ static void sub_8147CC8(u8 taskID) } } -static void sub_8147DDC(u8 a0) +static void LaunchPokeblockFeedTask(u8 a0) { u8 taskID = CreateTask(sub_8147CC8, 0); gTasks[taskID].data[0] = 0; gTasks[taskID].data[1] = a0; } -static void sub_8147E10(u8 taskID) +static void Task_WaitForAtePokeblockText(u8 taskID) { if (MenuUpdateWindowText() == 1) - gTasks[taskID].func = sub_8147F4C; + gTasks[taskID].func = Task_PaletteFadeToReturn; } static void Task_PrintAtePokeblockText(u8 taskID) @@ -738,10 +736,10 @@ static void Task_PrintAtePokeblockText(u8 taskID) StringExpandPlaceholders(gStringVar4, gContestStatsText_DisdainfullyAte); MenuPrintMessage(gStringVar4, 1, 15); - gTasks[taskID].func = sub_8147E10; + gTasks[taskID].func = Task_WaitForAtePokeblockText; } -static void sub_8147F08(u8 taskID) +static void Task_ReturnAfterPaletteFade(u8 taskID) { if (!gPaletteFade.active) { @@ -751,13 +749,13 @@ static void sub_8147F08(u8 taskID) } } -void sub_8147F4C(u8 taskID) +static void Task_PaletteFadeToReturn(u8 taskID) { BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); - gTasks[taskID].func = sub_8147F08; + gTasks[taskID].func = Task_ReturnAfterPaletteFade; } -static u8 sub_8147F84(struct Pokemon* mon) +static u8 PokeblockFeed_CreatePokeSprite(struct Pokemon* mon) { u16 species = GetMonData(mon, MON_DATA_SPECIES2); u8 spriteID = CreateSprite(&gUnknown_02024E8C, 48, 80, 2); @@ -770,7 +768,7 @@ static u8 sub_8147F84(struct Pokemon* mon) gPokeblockMonNotFlipped = 1; if (!sub_8040A3C(species)) { - gSprites[spriteID].affineAnims = gSpriteAffineAnimTable_84120EC; + gSprites[spriteID].affineAnims = sSpriteAffineAnimTable_84120EC; gSprites[spriteID].oam.affineMode = 3; CalcCenterToCornerVec(&gSprites[spriteID], gSprites[spriteID].oam.shape, gSprites[spriteID].oam.size, gSprites[spriteID].oam.affineMode); gPokeblockMonNotFlipped = 0; @@ -802,7 +800,7 @@ static u8 sub_81480B4(void) { u8 spriteID = sub_810BA50(188, 100, 2); gSprites[spriteID].oam.affineMode = 1; - gSprites[spriteID].affineAnims = gSpriteAffineAnimTable_84121A0; + gSprites[spriteID].affineAnims = sSpriteAffineAnimTable_84121A0; gSprites[spriteID].callback = SpriteCallbackDummy; InitSpriteAffineAnim(&gSprites[spriteID]); return spriteID; @@ -813,15 +811,15 @@ static void sub_8148108(u8 spriteID, bool8 a1) FreeOamMatrix(gSprites[spriteID].oam.matrixNum); gSprites[spriteID].oam.affineMode = 3; if (!a1) - gSprites[spriteID].affineAnims = gSpriteAffineAnimTable_84121A4; + gSprites[spriteID].affineAnims = sSpriteAffineAnimTable_84121A4; else - gSprites[spriteID].affineAnims = gSpriteAffineAnimTable_84121A8; + gSprites[spriteID].affineAnims = sSpriteAffineAnimTable_84121A8; InitSpriteAffineAnim(&gSprites[spriteID]); } static u8 sub_814817C(void) { - u8 spriteID = CreateSprite(&gSpriteTemplate_84121E4, 174, 84, 1); + u8 spriteID = CreateSprite(&sSpriteTemplate_84121E4, 174, 84, 1); gSprites[spriteID].data0 = -12; gSprites[spriteID].data1 = 1; return spriteID; @@ -868,7 +866,7 @@ static void sub_814825C(void) { gPokeblockFeedPokeSprite->oam.affineMode = 3; gPokeblockFeedPokeSprite->oam.matrixNum = 0; - gPokeblockFeedPokeSprite->affineAnims = gSpriteAffineAnimTable_8412050; + gPokeblockFeedPokeSprite->affineAnims = sSpriteAffineAnimTable_8412050; InitSpriteAffineAnim(gPokeblockFeedPokeSprite); } gUnknown_03005F3C = 50; -- cgit v1.2.3 From 2730d1c42254c7098d135ff2ff9e62944cff5b6b Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Mon, 14 Aug 2017 19:59:15 -0500 Subject: decompile sub_802CA60 --- asm/battle_5.s | 837 --------------------------------------------------------- src/battle_5.c | 190 ++++++++++++- 2 files changed, 184 insertions(+), 843 deletions(-) diff --git a/asm/battle_5.s b/asm/battle_5.s index 70f4a8fb8..0f25638df 100644 --- a/asm/battle_5.s +++ b/asm/battle_5.s @@ -6,843 +6,6 @@ .text - thumb_func_start sub_802CA60 -sub_802CA60: @ 802CA60 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x2C - ldr r0, _0802CDEC @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x5 - ands r0, r1 - cmp r0, 0 - bne _0802CA7A - b _0802CE78 -_0802CA7A: - movs r0, 0x5 - bl PlaySE - ldr r0, _0802CDF0 @ =gMoveSelectionCursor - mov r10, r0 - ldr r1, _0802CDF4 @ =gActiveBank - mov r8, r1 - ldrb r1, [r1] - adds r2, r1, r0 - ldr r5, _0802CDF8 @ =gUnknown_03004344 - ldrb r0, [r2] - ldrb r3, [r5] - cmp r0, r3 - bne _0802CA98 - b _0802CE14 -_0802CA98: - lsls r1, 9 - ldr r0, _0802CDFC @ =gUnknown_02023A64 - adds r1, r0 - mov r9, r1 - ldrb r1, [r2] - lsls r1, 1 - add r1, r9 - ldrh r6, [r1] - ldrb r0, [r5] - lsls r0, 1 - add r0, r9 - ldrh r0, [r0] - strh r0, [r1] - ldrb r0, [r5] - lsls r0, 1 - add r0, r9 - strh r6, [r0] - mov r1, r8 - ldrb r0, [r1] - add r0, r10 - ldrb r1, [r0] - mov r7, r9 - adds r7, 0x8 - adds r1, r7, r1 - ldrb r6, [r1] - ldrb r0, [r5] - adds r0, r7, r0 - ldrb r0, [r0] - strb r0, [r1] - ldrb r0, [r5] - adds r0, r7, r0 - strb r6, [r0] - mov r2, r8 - ldrb r0, [r2] - add r0, r10 - ldrb r1, [r0] - mov r2, r9 - adds r2, 0xC - adds r1, r2, r1 - ldrb r6, [r1] - ldrb r0, [r5] - adds r0, r2, r0 - ldrb r0, [r0] - strb r0, [r1] - ldrb r0, [r5] - adds r2, r0 - strb r6, [r2] - mov r3, r8 - ldrb r1, [r3] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - ldr r2, _0802CE00 @ =gDisableStructs - adds r6, r0, r2 - ldrb r4, [r6, 0x18] - lsls r3, r4, 24 - lsrs r2, r3, 28 - ldr r0, _0802CE04 @ =gBitTable - mov r12, r0 - add r1, r10 - ldrb r0, [r1] - lsls r0, 2 - add r0, r12 - ldr r0, [r0] - ands r2, r0 - cmp r2, 0 - beq _0802CB52 - lsrs r1, r3, 28 - bics r1, r0 - lsls r1, 4 - movs r2, 0xF - adds r0, r2, 0 - ands r0, r4 - orrs r0, r1 - strb r0, [r6, 0x18] - mov r1, r8 - ldrb r0, [r1] - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - ldr r3, _0802CE00 @ =gDisableStructs - adds r1, r3 - ldrb r4, [r1, 0x18] - lsrs r3, r4, 4 - ldrb r0, [r5] - lsls r0, 2 - add r0, r12 - ldr r0, [r0] - orrs r0, r3 - lsls r0, 4 - ands r2, r4 - orrs r2, r0 - strb r2, [r1, 0x18] -_0802CB52: - bl sub_802E1B0 - movs r6, 0 - mov r12, r7 - mov r5, sp - adds r5, 0x20 - str r5, [sp, 0x28] - ldr r2, _0802CE08 @ =gBattleMons - mov r0, r8 - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r2 - adds r4, r0, 0 - adds r4, 0x3B - mov r7, r8 - mov r10, r2 - movs r5, 0x3 -_0802CB76: - mov r3, sp - adds r3, r6 - adds r3, 0x8 - ldrb r1, [r4] - lsls r2, r6, 1 - adds r0, r5, 0 - lsls r0, r2 - ands r1, r0 - asrs r1, r2 - strb r1, [r3] - adds r6, 0x1 - cmp r6, 0x3 - ble _0802CB76 - ldr r1, _0802CDF0 @ =gMoveSelectionCursor - ldrb r0, [r7] - adds r0, r1 - ldrb r0, [r0] - add r0, sp - adds r0, 0x8 - ldrb r0, [r0] - ldr r2, [sp, 0x28] - strb r0, [r2] - ldrb r0, [r7] - adds r0, r1 - ldrb r0, [r0] - mov r2, sp - adds r2, r0 - adds r2, 0x8 - ldr r1, _0802CDF8 @ =gUnknown_03004344 - ldrb r0, [r1] - add r0, sp - adds r0, 0x8 - ldrb r0, [r0] - movs r3, 0 - strb r0, [r2] - ldrb r0, [r1] - mov r1, sp - adds r1, r0 - adds r1, 0x8 - ldr r5, [sp, 0x28] - ldrb r0, [r5] - strb r0, [r1] - strb r3, [r5] - movs r6, 0 - ldr r2, [sp, 0x28] -_0802CBD0: - mov r0, sp - adds r0, r6 - adds r0, 0x8 - ldrb r1, [r0] - lsls r0, r6, 1 - lsls r1, r0 - ldrb r0, [r2] - orrs r0, r1 - strb r0, [r2] - adds r6, 0x1 - cmp r6, 0x3 - ble _0802CBD0 - ldrb r1, [r7] - movs r0, 0x58 - muls r0, r1 - add r0, r10 - adds r0, 0x3B - ldr r2, [sp, 0x28] - ldrb r1, [r2] - strb r1, [r0] - movs r6, 0 - adds r4, r7, 0 - movs r3, 0x58 - movs r5, 0x24 - add r5, r10 - mov r8, r5 - mov r2, r9 - mov r7, r10 - adds r7, 0xC - mov r5, r12 -_0802CC0C: - lsls r1, r6, 1 - ldrb r0, [r4] - muls r0, r3 - adds r1, r0 - adds r1, r7 - ldrh r0, [r2] - strh r0, [r1] - ldrb r0, [r4] - adds r1, r0, 0 - muls r1, r3 - adds r1, r6, r1 - add r1, r8 - adds r0, r5, r6 - ldrb r0, [r0] - strb r0, [r1] - adds r2, 0x2 - adds r6, 0x1 - cmp r6, 0x3 - ble _0802CC0C - ldr r2, _0802CDF4 @ =gActiveBank - ldrb r1, [r2] - movs r0, 0x58 - muls r0, r1 - mov r1, r10 - adds r1, 0x50 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 14 - ands r0, r1 - cmp r0, 0 - beq _0802CC4E - b _0802CE1C -_0802CC4E: - movs r6, 0 - mov r0, sp - adds r0, 0xC - str r0, [sp, 0x24] - add r1, sp, 0x14 - mov r10, r1 - ldr r3, _0802CE0C @ =gBattlePartyID - mov r9, r3 - mov r8, r2 - movs r7, 0x64 - ldr r5, _0802CE10 @ =gPlayerParty - adds r4, r0, 0 -_0802CC66: - mov r1, r8 - ldrb r0, [r1] - lsls r0, 1 - add r0, r9 - ldrh r0, [r0] - muls r0, r7 - adds r0, r5 - adds r1, r6, 0 - adds r1, 0xD - bl GetMonData - strh r0, [r4] - mov r2, r8 - ldrb r0, [r2] - lsls r0, 1 - add r0, r9 - ldrh r0, [r0] - muls r0, r7 - adds r0, r5 - adds r1, r6, 0 - adds r1, 0x11 - bl GetMonData - mov r3, r10 - adds r1, r3, r6 - strb r0, [r1] - adds r4, 0x2 - adds r6, 0x1 - cmp r6, 0x3 - ble _0802CC66 - ldr r1, _0802CE0C @ =gBattlePartyID - ldr r0, _0802CDF4 @ =gActiveBank - ldrb r0, [r0] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0802CE10 @ =gPlayerParty - adds r0, r1 - movs r1, 0x15 - bl GetMonData - ldr r5, [sp, 0x28] - strb r0, [r5] - movs r6, 0 - movs r5, 0x3 - ldr r4, [sp, 0x28] -_0802CCC6: - mov r3, sp - adds r3, r6 - adds r3, 0x8 - lsls r2, r6, 1 - adds r1, r5, 0 - lsls r1, r2 - ldrb r0, [r4] - ands r0, r1 - asrs r0, r2 - strb r0, [r3] - adds r6, 0x1 - cmp r6, 0x3 - ble _0802CCC6 - ldr r4, _0802CDF0 @ =gMoveSelectionCursor - ldr r3, _0802CDF4 @ =gActiveBank - ldrb r0, [r3] - adds r0, r4 - ldrb r1, [r0] - lsls r1, 1 - ldr r0, [sp, 0x24] - adds r1, r0, r1 - ldrh r6, [r1] - ldr r2, _0802CDF8 @ =gUnknown_03004344 - ldrb r0, [r2] - lsls r0, 1 - ldr r5, [sp, 0x24] - adds r0, r5, r0 - ldrh r0, [r0] - movs r5, 0 - strh r0, [r1] - ldrb r0, [r2] - lsls r0, 1 - ldr r1, [sp, 0x24] - adds r0, r1, r0 - strh r6, [r0] - ldrb r0, [r3] - adds r0, r4 - ldrb r1, [r0] - add r1, r10 - ldrb r6, [r1] - ldrb r0, [r2] - add r0, r10 - ldrb r0, [r0] - strb r0, [r1] - ldrb r0, [r2] - add r0, r10 - strb r6, [r0] - ldrb r0, [r3] - adds r0, r4 - ldrb r0, [r0] - add r0, sp - adds r0, 0x8 - ldrb r0, [r0] - ldr r1, [sp, 0x28] - strb r0, [r1] - ldrb r0, [r3] - adds r0, r4 - ldrb r0, [r0] - mov r1, sp - adds r1, r0 - adds r1, 0x8 - ldrb r0, [r2] - add r0, sp - adds r0, 0x8 - ldrb r0, [r0] - strb r0, [r1] - ldrb r0, [r2] - mov r1, sp - adds r1, r0 - adds r1, 0x8 - ldr r2, [sp, 0x28] - ldrb r0, [r2] - strb r0, [r1] - strb r5, [r2] - movs r6, 0 - ldr r2, [sp, 0x28] -_0802CD5E: - mov r0, sp - adds r0, r6 - adds r0, 0x8 - ldrb r1, [r0] - lsls r0, r6, 1 - lsls r1, r0 - ldrb r0, [r2] - orrs r0, r1 - strb r0, [r2] - adds r6, 0x1 - cmp r6, 0x3 - ble _0802CD5E - movs r6, 0 - ldr r3, _0802CE0C @ =gBattlePartyID - mov r10, r3 - ldr r5, _0802CDF4 @ =gActiveBank - mov r9, r5 - movs r0, 0x64 - mov r8, r0 - ldr r7, _0802CE10 @ =gPlayerParty - ldr r5, [sp, 0x24] - adds r5, 0x8 - ldr r4, [sp, 0x24] -_0802CD8C: - mov r1, r9 - ldrb r0, [r1] - lsls r0, 1 - add r0, r10 - ldrh r0, [r0] - mov r2, r8 - muls r2, r0 - adds r0, r2, 0 - adds r0, r7 - adds r1, r6, 0 - adds r1, 0xD - adds r2, r4, 0 - bl SetMonData - mov r3, r9 - ldrb r0, [r3] - lsls r0, 1 - add r0, r10 - ldrh r0, [r0] - mov r1, r8 - muls r1, r0 - adds r0, r1, 0 - adds r0, r7 - adds r1, r6, 0 - adds r1, 0x11 - adds r2, r5, 0 - bl SetMonData - adds r5, 0x1 - adds r4, 0x2 - adds r6, 0x1 - cmp r6, 0x3 - ble _0802CD8C - ldr r1, _0802CE0C @ =gBattlePartyID - ldr r0, _0802CDF4 @ =gActiveBank - ldrb r0, [r0] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0802CE10 @ =gPlayerParty - adds r0, r1 - movs r1, 0x15 - ldr r2, [sp, 0x28] - bl SetMonData - b _0802CE1C - .align 2, 0 -_0802CDEC: .4byte gMain -_0802CDF0: .4byte gMoveSelectionCursor -_0802CDF4: .4byte gActiveBank -_0802CDF8: .4byte gUnknown_03004344 -_0802CDFC: .4byte gUnknown_02023A64 -_0802CE00: .4byte gDisableStructs -_0802CE04: .4byte gBitTable -_0802CE08: .4byte gBattleMons -_0802CE0C: .4byte gBattlePartyID -_0802CE10: .4byte gPlayerParty -_0802CE14: - ldrb r0, [r5] - ldr r1, _0802CF20 @ =gUnknown_08400D49 - bl sub_802E12C -_0802CE1C: - ldr r1, _0802CF24 @ =gBattleBankFunc - ldr r2, _0802CF28 @ =gActiveBank - ldrb r0, [r2] - lsls r0, 2 - adds r0, r1 - ldr r1, _0802CF2C @ =sub_802C68C - str r1, [r0] - ldr r3, _0802CF30 @ =gMoveSelectionCursor - ldrb r0, [r2] - adds r0, r3 - ldr r1, _0802CF34 @ =gUnknown_03004344 - ldrb r1, [r1] - strb r1, [r0] - ldrb r0, [r2] - adds r0, r3 - ldrb r0, [r0] - movs r1, 0 - bl sub_802E3B4 - ldr r4, _0802CF38 @ =gUnknown_03004210 - ldr r1, _0802CF3C @ =0x00001016 - movs r0, 0x1C - str r0, [sp] - movs r0, 0x3A - str r0, [sp, 0x4] - adds r0, r4, 0 - movs r2, 0x17 - movs r3, 0x37 - bl FillWindowRect - ldr r1, _0802CF40 @ =gUnknown_08400D38 - movs r2, 0xA4 - lsls r2, 2 - movs r0, 0x37 - str r0, [sp] - adds r0, r4, 0 - movs r3, 0x17 - bl InitWindow - adds r0, r4, 0 - bl sub_8002F44 - bl sub_802E220 - bl sub_802E2D4 -_0802CE78: - ldr r6, _0802CF44 @ =gMain - ldrh r1, [r6, 0x2E] - movs r0, 0x6 - ands r0, r1 - cmp r0, 0 - beq _0802CEF0 - movs r0, 0x5 - bl PlaySE - ldr r0, _0802CF34 @ =gUnknown_03004344 - ldrb r0, [r0] - bl nullsub_7 - ldr r5, _0802CF30 @ =gMoveSelectionCursor - ldr r4, _0802CF28 @ =gActiveBank - ldrb r0, [r4] - adds r0, r5 - ldrb r0, [r0] - movs r1, 0 - bl sub_802E3B4 - ldrb r0, [r4] - adds r0, r5 - ldrb r0, [r0] - ldr r1, _0802CF20 @ =gUnknown_08400D49 - bl sub_802E12C - ldr r1, _0802CF24 @ =gBattleBankFunc - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, _0802CF2C @ =sub_802C68C - str r1, [r0] - ldr r4, _0802CF38 @ =gUnknown_03004210 - ldr r1, _0802CF3C @ =0x00001016 - movs r0, 0x1C - str r0, [sp] - movs r0, 0x3A - str r0, [sp, 0x4] - adds r0, r4, 0 - movs r2, 0x17 - movs r3, 0x37 - bl FillWindowRect - ldr r1, _0802CF40 @ =gUnknown_08400D38 - movs r2, 0xA4 - lsls r2, 2 - movs r0, 0x37 - str r0, [sp] - adds r0, r4, 0 - movs r3, 0x17 - bl InitWindow - adds r0, r4, 0 - bl sub_8002F44 - bl sub_802E220 - bl sub_802E2D4 -_0802CEF0: - ldrh r1, [r6, 0x2E] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _0802CF8C - ldr r3, _0802CF34 @ =gUnknown_03004344 - ldrb r2, [r3] - movs r0, 0x1 - ands r0, r2 - cmp r0, 0 - beq _0802CF8C - ldr r0, _0802CF30 @ =gMoveSelectionCursor - ldr r1, _0802CF28 @ =gActiveBank - ldrb r1, [r1] - adds r1, r0 - ldrb r5, [r1] - cmp r2, r5 - bne _0802CF48 - ldrb r0, [r1] - movs r1, 0x1D - bl sub_802E3B4 - b _0802CF4E - .align 2, 0 -_0802CF20: .4byte gUnknown_08400D49 -_0802CF24: .4byte gBattleBankFunc -_0802CF28: .4byte gActiveBank -_0802CF2C: .4byte sub_802C68C -_0802CF30: .4byte gMoveSelectionCursor -_0802CF34: .4byte gUnknown_03004344 -_0802CF38: .4byte gUnknown_03004210 -_0802CF3C: .4byte 0x00001016 -_0802CF40: .4byte gUnknown_08400D38 -_0802CF44: .4byte gMain -_0802CF48: - ldrb r0, [r3] - bl nullsub_7 -_0802CF4E: - ldr r4, _0802CF78 @ =gUnknown_03004344 - ldrb r0, [r4] - movs r1, 0x1 - eors r0, r1 - strb r0, [r4] - movs r0, 0x5 - bl PlaySE - ldr r1, _0802CF7C @ =gMoveSelectionCursor - ldr r0, _0802CF80 @ =gActiveBank - ldrb r0, [r0] - adds r0, r1 - ldrb r1, [r4] - ldrb r0, [r0] - cmp r1, r0 - bne _0802CF84 - adds r0, r1, 0 - movs r1, 0 - bl sub_802E3B4 - b _0802CF8C - .align 2, 0 -_0802CF78: .4byte gUnknown_03004344 -_0802CF7C: .4byte gMoveSelectionCursor -_0802CF80: .4byte gActiveBank -_0802CF84: - ldrb r0, [r4] - movs r1, 0x1B - bl sub_802E3B4 -_0802CF8C: - ldr r0, _0802CFC8 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0802D020 - ldr r3, _0802CFCC @ =gUnknown_03004344 - ldrb r2, [r3] - movs r0, 0x1 - ands r0, r2 - cmp r0, 0 - bne _0802D020 - ldr r1, _0802CFD0 @ =gUnknown_03004348 - movs r0, 0x1 - eors r0, r2 - ldrb r1, [r1] - cmp r0, r1 - bcs _0802D020 - ldr r0, _0802CFD4 @ =gMoveSelectionCursor - ldr r1, _0802CFD8 @ =gActiveBank - ldrb r1, [r1] - adds r1, r0 - ldrb r0, [r1] - cmp r2, r0 - bne _0802CFDC - ldrb r0, [r1] - movs r1, 0x1D - bl sub_802E3B4 - b _0802CFE2 - .align 2, 0 -_0802CFC8: .4byte gMain -_0802CFCC: .4byte gUnknown_03004344 -_0802CFD0: .4byte gUnknown_03004348 -_0802CFD4: .4byte gMoveSelectionCursor -_0802CFD8: .4byte gActiveBank -_0802CFDC: - ldrb r0, [r3] - bl nullsub_7 -_0802CFE2: - ldr r4, _0802D00C @ =gUnknown_03004344 - ldrb r0, [r4] - movs r1, 0x1 - eors r0, r1 - strb r0, [r4] - movs r0, 0x5 - bl PlaySE - ldr r1, _0802D010 @ =gMoveSelectionCursor - ldr r0, _0802D014 @ =gActiveBank - ldrb r0, [r0] - adds r0, r1 - ldrb r1, [r4] - ldrb r0, [r0] - cmp r1, r0 - bne _0802D018 - adds r0, r1, 0 - movs r1, 0 - bl sub_802E3B4 - b _0802D020 - .align 2, 0 -_0802D00C: .4byte gUnknown_03004344 -_0802D010: .4byte gMoveSelectionCursor -_0802D014: .4byte gActiveBank -_0802D018: - ldrb r0, [r4] - movs r1, 0x1B - bl sub_802E3B4 -_0802D020: - ldr r0, _0802D050 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0802D0A4 - ldr r3, _0802D054 @ =gUnknown_03004344 - ldrb r2, [r3] - movs r0, 0x2 - ands r0, r2 - cmp r0, 0 - beq _0802D0A4 - ldr r0, _0802D058 @ =gMoveSelectionCursor - ldr r1, _0802D05C @ =gActiveBank - ldrb r1, [r1] - adds r1, r0 - ldrb r5, [r1] - cmp r2, r5 - bne _0802D060 - ldrb r0, [r1] - movs r1, 0x1D - bl sub_802E3B4 - b _0802D066 - .align 2, 0 -_0802D050: .4byte gMain -_0802D054: .4byte gUnknown_03004344 -_0802D058: .4byte gMoveSelectionCursor -_0802D05C: .4byte gActiveBank -_0802D060: - ldrb r0, [r3] - bl nullsub_7 -_0802D066: - ldr r4, _0802D090 @ =gUnknown_03004344 - ldrb r0, [r4] - movs r1, 0x2 - eors r0, r1 - strb r0, [r4] - movs r0, 0x5 - bl PlaySE - ldr r1, _0802D094 @ =gMoveSelectionCursor - ldr r0, _0802D098 @ =gActiveBank - ldrb r0, [r0] - adds r0, r1 - ldrb r1, [r4] - ldrb r0, [r0] - cmp r1, r0 - bne _0802D09C - adds r0, r1, 0 - movs r1, 0 - bl sub_802E3B4 - b _0802D0A4 - .align 2, 0 -_0802D090: .4byte gUnknown_03004344 -_0802D094: .4byte gMoveSelectionCursor -_0802D098: .4byte gActiveBank -_0802D09C: - ldrb r0, [r4] - movs r1, 0x1B - bl sub_802E3B4 -_0802D0A4: - ldr r0, _0802D0E0 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0802D138 - ldr r3, _0802D0E4 @ =gUnknown_03004344 - ldrb r2, [r3] - movs r0, 0x2 - ands r0, r2 - cmp r0, 0 - bne _0802D138 - ldr r1, _0802D0E8 @ =gUnknown_03004348 - movs r0, 0x2 - eors r0, r2 - ldrb r1, [r1] - cmp r0, r1 - bcs _0802D138 - ldr r0, _0802D0EC @ =gMoveSelectionCursor - ldr r1, _0802D0F0 @ =gActiveBank - ldrb r1, [r1] - adds r1, r0 - ldrb r0, [r1] - cmp r2, r0 - bne _0802D0F4 - ldrb r0, [r1] - movs r1, 0x1D - bl sub_802E3B4 - b _0802D0FA - .align 2, 0 -_0802D0E0: .4byte gMain -_0802D0E4: .4byte gUnknown_03004344 -_0802D0E8: .4byte gUnknown_03004348 -_0802D0EC: .4byte gMoveSelectionCursor -_0802D0F0: .4byte gActiveBank -_0802D0F4: - ldrb r0, [r3] - bl nullsub_7 -_0802D0FA: - ldr r4, _0802D124 @ =gUnknown_03004344 - ldrb r0, [r4] - movs r1, 0x2 - eors r0, r1 - strb r0, [r4] - movs r0, 0x5 - bl PlaySE - ldr r1, _0802D128 @ =gMoveSelectionCursor - ldr r0, _0802D12C @ =gActiveBank - ldrb r0, [r0] - adds r0, r1 - ldrb r1, [r4] - ldrb r0, [r0] - cmp r1, r0 - bne _0802D130 - adds r0, r1, 0 - movs r1, 0 - bl sub_802E3B4 - b _0802D138 - .align 2, 0 -_0802D124: .4byte gUnknown_03004344 -_0802D128: .4byte gMoveSelectionCursor -_0802D12C: .4byte gActiveBank -_0802D130: - ldrb r0, [r4] - movs r1, 0x1B - bl sub_802E3B4 -_0802D138: - add sp, 0x2C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_802CA60 - thumb_func_start sub_802D148 sub_802D148: @ 802D148 push {lr} diff --git a/src/battle_5.c b/src/battle_5.c index 71939ba0d..2ab1a2189 100644 --- a/src/battle_5.c +++ b/src/battle_5.c @@ -31,6 +31,7 @@ extern u16 gUnknown_030042A4; extern struct Window gUnknown_03004210; extern const u8 gUnknown_08400D89[]; extern u8 gUnknown_03004348; +extern struct BattlePokemon gBattleMons[]; extern void dp11b_obj_instanciate(u8, u8, s8, s8); extern u8 GetBankIdentity(u8); @@ -43,6 +44,7 @@ extern void sub_802E3B4(); extern void sub_802E220(); extern void sub_802E2D4(); extern void sub_802E12C(); +extern void sub_802E1B0(void); void PlayerHandleGetAttributes(void); void sub_802ECF0(void); @@ -448,11 +450,12 @@ void sub_802C2EC(void) struct UnknownStruct1 { - u16 unk0[4]; - u8 unk8[4]; - u8 fillerC[0x12-0xC]; + u16 moves[4]; + u8 pp[4]; + u8 unkC[0x12-0xC]; u8 unk12; u8 unk13; + u8 filler14[0x20-0x14]; }; void sub_802C68C(void) @@ -466,10 +469,10 @@ void sub_802C68C(void) PlaySE(SE_SELECT); - if (r6->unk0[gMoveSelectionCursor[gActiveBank]] == 0xAE) + if (r6->moves[gMoveSelectionCursor[gActiveBank]] == 0xAE) r4 = (r6->unk12 != 7 && (r6->unk13 ^ 7)) ? 0x10 : 0; else - r4 = gBattleMoves[r6->unk0[gMoveSelectionCursor[gActiveBank]]].target; + r4 = gBattleMoves[r6->moves[gMoveSelectionCursor[gActiveBank]]].target; if (r4 & 0x10) gUnknown_03004344 = gActiveBank; @@ -485,7 +488,7 @@ void sub_802C68C(void) { if (!(r4 & 0x7D)) r8++; - if (r6->unk8[gMoveSelectionCursor[gActiveBank]] == 0) + if (r6->pp[gMoveSelectionCursor[gActiveBank]] == 0) { r8 = 0; } @@ -589,3 +592,178 @@ void sub_802C68C(void) } } } + +extern const u8 gUnknown_08400D49[]; +extern const u8 gUnknown_08400D38[]; + +void sub_802CA60(void) +{ + u8 perMovePPBonuses[4]; + struct + { + u16 moves[4]; + u8 pp[4]; + u8 filler18[8]; // what is this? + } sp0; + //struct UnknownStruct1 sp0; + u8 totalPPBonuses; + + if (gMain.newKeys & (A_BUTTON | SELECT_BUTTON)) + { + PlaySE(SE_SELECT); + if (gMoveSelectionCursor[gActiveBank] != gUnknown_03004344) + { + struct UnknownStruct1 *r9 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4]; + s32 i; + + i = r9->moves[gMoveSelectionCursor[gActiveBank]]; + r9->moves[gMoveSelectionCursor[gActiveBank]] = r9->moves[gUnknown_03004344]; + r9->moves[gUnknown_03004344] = i; + + i = r9->pp[gMoveSelectionCursor[gActiveBank]]; + r9->pp[gMoveSelectionCursor[gActiveBank]] = r9->pp[gUnknown_03004344]; + r9->pp[gUnknown_03004344] = i; + + i = r9->unkC[gMoveSelectionCursor[gActiveBank]]; + r9->unkC[gMoveSelectionCursor[gActiveBank]] = r9->unkC[gUnknown_03004344]; + r9->unkC[gUnknown_03004344] = i; + + if (gDisableStructs[gActiveBank].unk18_b & gBitTable[gMoveSelectionCursor[gActiveBank]]) + { + gDisableStructs[gActiveBank].unk18_b &= ~gBitTable[gMoveSelectionCursor[gActiveBank]]; + gDisableStructs[gActiveBank].unk18_b |= gBitTable[gUnknown_03004344]; + } + + sub_802E1B0(); + + for (i = 0; i < 4; i++) + perMovePPBonuses[i] = (gBattleMons[gActiveBank].ppBonuses & (3 << (i * 2))) >> (i * 2); + totalPPBonuses = perMovePPBonuses[gMoveSelectionCursor[gActiveBank]]; + perMovePPBonuses[gMoveSelectionCursor[gActiveBank]] = perMovePPBonuses[gUnknown_03004344]; + perMovePPBonuses[gUnknown_03004344] = totalPPBonuses; + + totalPPBonuses = 0; + for (i = 0; i < 4; i++) + totalPPBonuses |= perMovePPBonuses[i] << (i * 2); + gBattleMons[gActiveBank].ppBonuses = totalPPBonuses; + + for (i = 0; i < 4; i++) + { + gBattleMons[gActiveBank].moves[i] = r9->moves[i]; + gBattleMons[gActiveBank].pp[i] = r9->pp[i]; + } + if (!(gBattleMons[gActiveBank].status2 & 0x200000)) + { + for (i = 0; i < 4; i++) + { + sp0.moves[i] = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + i); + sp0.pp[i] = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP1 + i); + } + + totalPPBonuses = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP_BONUSES); + for (i = 0; i < 4; i++) + perMovePPBonuses[i] = (totalPPBonuses & (3 << (i * 2))) >> (i * 2); + + i = sp0.moves[gMoveSelectionCursor[gActiveBank]]; + sp0.moves[gMoveSelectionCursor[gActiveBank]] = sp0.moves[gUnknown_03004344]; + sp0.moves[gUnknown_03004344] = i; + + i = sp0.pp[gMoveSelectionCursor[gActiveBank]]; + sp0.pp[gMoveSelectionCursor[gActiveBank]] = sp0.pp[gUnknown_03004344]; + sp0.pp[gUnknown_03004344] = i; + + totalPPBonuses = perMovePPBonuses[gMoveSelectionCursor[gActiveBank]]; + perMovePPBonuses[gMoveSelectionCursor[gActiveBank]] = perMovePPBonuses[gUnknown_03004344]; + perMovePPBonuses[gUnknown_03004344] = totalPPBonuses; + + totalPPBonuses = 0; + for (i = 0; i < 4; i++) + totalPPBonuses |= perMovePPBonuses[i] << (i * 2); + + for (i = 0; i < 4; i++) + { + SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + i, (u8 *)&sp0.moves[i]); + SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP1 + i, &sp0.pp[i]); + } + SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP_BONUSES, &totalPPBonuses); + } + } + else + { + sub_802E12C(gUnknown_03004344, gUnknown_08400D49); + } + gBattleBankFunc[gActiveBank] = sub_802C68C; + gMoveSelectionCursor[gActiveBank] = gUnknown_03004344; + sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); + FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); + InitWindow(&gUnknown_03004210, gUnknown_08400D38, 0x290, 0x17, 0x37); + sub_8002F44(&gUnknown_03004210); + sub_802E220(); + sub_802E2D4(); + } + if (gMain.newKeys & (B_BUTTON | SELECT_BUTTON)) + { + PlaySE(SE_SELECT); + nullsub_7(gUnknown_03004344); + sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); + sub_802E12C(gMoveSelectionCursor[gActiveBank], gUnknown_08400D49); + gBattleBankFunc[gActiveBank] = sub_802C68C; + FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); + InitWindow(&gUnknown_03004210, gUnknown_08400D38, 0x290, 0x17, 0x37); + sub_8002F44(&gUnknown_03004210); + sub_802E220(); + sub_802E2D4(); + } + if ((gMain.newKeys & DPAD_LEFT) && (gUnknown_03004344 & 1)) + { + if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) + sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D); + else + nullsub_7(gUnknown_03004344); + gUnknown_03004344 ^= 1; + PlaySE(SE_SELECT); + if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) + sub_802E3B4(gUnknown_03004344, 0); + else + sub_802E3B4(gUnknown_03004344, 0x1B); + } + if ((gMain.newKeys & DPAD_RIGHT) && !(gUnknown_03004344 & 1) && (gUnknown_03004344 ^ 1) < gUnknown_03004348) + { + if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) + sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D); + else + nullsub_7(gUnknown_03004344); + gUnknown_03004344 ^= 1; + PlaySE(SE_SELECT); + if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) + sub_802E3B4(gUnknown_03004344, 0); + else + sub_802E3B4(gUnknown_03004344, 0x1B); + } + if ((gMain.newKeys & DPAD_UP) && (gUnknown_03004344 & 2)) + { + if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) + sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D); + else + nullsub_7(gUnknown_03004344); + gUnknown_03004344 ^= 2; + PlaySE(SE_SELECT); + if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) + sub_802E3B4(gUnknown_03004344, 0); + else + sub_802E3B4(gUnknown_03004344, 0x1B); + } + if ((gMain.newKeys & DPAD_DOWN) && !(gUnknown_03004344 & 2) && (gUnknown_03004344 ^ 2) < gUnknown_03004348) + { + if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) + sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D); + else + nullsub_7(gUnknown_03004344); + gUnknown_03004344 ^= 2; + PlaySE(SE_SELECT); + if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) + sub_802E3B4(gUnknown_03004344, 0); + else + sub_802E3B4(gUnknown_03004344, 0x1B); + } +} -- cgit v1.2.3 From 403e49189bf3f79327629d2c2245d19ece047c94 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 15 Aug 2017 10:20:19 +0200 Subject: pokeblock feed is done --- asm/pokeblock_feed.s | 137 --------------------------------------------------- ld_script.txt | 1 - src/pokeblock_feed.c | 77 +++++++++++++++++++---------- 3 files changed, 51 insertions(+), 164 deletions(-) delete mode 100644 asm/pokeblock_feed.s diff --git a/asm/pokeblock_feed.s b/asm/pokeblock_feed.s deleted file mode 100644 index 182d28081..000000000 --- a/asm/pokeblock_feed.s +++ /dev/null @@ -1,137 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - - - - thumb_func_start sub_8148710 -sub_8148710: @ 8148710 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - movs r0, 0 - str r0, [sp] - ldr r1, _081487A4 @ =gUnknown_03005FA0 - ldrh r2, [r1, 0x1A] - ldrh r0, [r1, 0x14] - subs r2, r0 - ldrh r3, [r1, 0x1C] - ldrh r0, [r1, 0x16] - subs r3, r0 - adds r6, r1, 0 - ldr r1, _081487A8 @ =0x0201d000 - mov r9, r1 - lsls r2, 16 - asrs r2, 16 - mov r8, r2 - movs r2, 0x80 - lsls r2, 3 - add r2, r9 - mov r10, r2 - lsls r3, 16 - asrs r7, r3, 16 -_08148746: - movs r1, 0xA - ldrsh r0, [r6, r1] - cmp r0, 0 - bge _08148750 - negs r0, r0 -_08148750: - lsls r0, 16 - lsrs r0, 16 - ldrh r2, [r6, 0x6] - adds r0, r2 - lsls r5, r0, 16 - strh r0, [r6, 0x6] - ldrh r2, [r6, 0x4] - movs r1, 0x4 - ldrsh r0, [r6, r1] - cmp r0, 0 - bge _0814876A - movs r0, 0x1 - str r0, [sp] -_0814876A: - ldrh r0, [r6, 0x18] - ldrh r1, [r6, 0x8] - subs r0, r1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r1, 0 - beq _081487F0 - ldr r1, [sp] - cmp r1, 0 - bne _081487AC - movs r1, 0 - ldrsh r0, [r6, r1] - lsrs r5, 24 - adds r1, r2, r5 - lsls r1, 16 - asrs r1, 16 - bl Sin - lsls r4, 1 - mov r2, r9 - adds r1, r4, r2 - add r0, r8 - strh r0, [r1] - movs r1, 0 - ldrsh r0, [r6, r1] - ldrh r1, [r6, 0x6] - adds r1, r5 - b _081487CE - .align 2, 0 -_081487A4: .4byte gUnknown_03005FA0 -_081487A8: .4byte 0x0201d000 -_081487AC: - movs r1, 0 - ldrsh r0, [r6, r1] - lsrs r5, 24 - subs r1, r2, r5 - lsls r1, 16 - asrs r1, 16 - bl Sin - lsls r4, 1 - mov r2, r9 - adds r1, r4, r2 - add r0, r8 - strh r0, [r1] - movs r1, 0 - ldrsh r0, [r6, r1] - ldrh r1, [r6, 0x6] - subs r1, r5 -_081487CE: - lsls r1, 16 - asrs r1, 16 - bl Cos - add r4, r10 - adds r0, r7, r0 - strh r0, [r4] - ldrh r0, [r6, 0x2] - ldrh r2, [r6] - adds r0, r2 - movs r1, 0xFF - ands r0, r1 - strh r0, [r6] - ldrh r0, [r6, 0x8] - subs r0, 0x1 - strh r0, [r6, 0x8] - b _08148746 -_081487F0: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8148710 - - .align 2, 0 @ Don't pad with nop. diff --git a/ld_script.txt b/ld_script.txt index 8c34b4d6f..d21ad72a5 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -264,7 +264,6 @@ SECTIONS { src/save_failed_screen.o(.text); src/braille_puzzles.o(.text); src/pokeblock_feed.o(.text); - asm/pokeblock_feed.o(.text); src/clear_save_data_menu.o(.text); src/intro_credits_graphics.o(.text); asm/evolution_graphics.o(.text); diff --git a/src/pokeblock_feed.c b/src/pokeblock_feed.c index 300464474..9cef681b0 100644 --- a/src/pokeblock_feed.c +++ b/src/pokeblock_feed.c @@ -53,7 +53,7 @@ static void sub_8147B04(void); static void sub_81481DC(void); static void sub_814825C(void); static u8 sub_81480B4(void); -static u8 sub_814817C(void); +static u8 CreatePokeblockSprite(void); static u8 PokeblockFeed_CreatePokeSprite(struct Pokemon* mon); static bool8 sub_8147B20(struct Pokemon* mon); static void LaunchPokeblockFeedTask(u8); @@ -67,7 +67,7 @@ static bool8 sub_8148540(void); static bool8 sub_81485CC(void); static bool8 FreePokeSpriteMatrix(void); void sub_8148710(void); -static void sub_81481B0(struct Sprite* sprite); +static void SpriteCB_ThrownPokeblock(struct Sprite* sprite); static void sub_814862C(void); // EWRAM @@ -433,7 +433,7 @@ static const union AffineAnimCmd *const sSpriteAffineAnimTable_84121A8[] = sSpriteAffineAnim_8412148 }; -static const struct OamData sOamData_84121AC = +static const struct OamData sThrownPokeblockOamData = { .y = 0, .affineMode = 3, @@ -450,15 +450,15 @@ static const struct OamData sOamData_84121AC = .affineParam = 0, }; -static const union AnimCmd sSpriteAnim_84121B4[] = +static const union AnimCmd sThrownPokeblockSpriteAnim[] = { ANIMCMD_FRAME(0, 0), ANIMCMD_END }; -static const union AnimCmd *const sSpriteAnimTable_84121BC[] = +static const union AnimCmd *const sThrownPokeblockAnimTable[] = { - sSpriteAnim_84121B4, + sThrownPokeblockSpriteAnim, }; static const union AffineAnimCmd sSpriteAffineAnim_84121C0[] = @@ -468,7 +468,7 @@ static const union AffineAnimCmd sSpriteAffineAnim_84121C0[] = AFFINEANIMCMD_JUMP(1) }; -static const union AffineAnimCmd *const sSpriteAffineAnimTable_84121D8[] = +static const union AffineAnimCmd *const sThrownPokeblockAffineAnimTable[] = { sSpriteAffineAnim_84121C0 }; @@ -478,15 +478,15 @@ static const struct CompressedSpriteSheet sUnknown_084121DC = gPokeblock_Gfx, 0x20, 14818 }; -static const struct SpriteTemplate sSpriteTemplate_84121E4 = +static const struct SpriteTemplate sThrownPokeblockSpriteTemplate = { .tileTag = 14818, .paletteTag = 14818, - .oam = &sOamData_84121AC, - .anims = sSpriteAnimTable_84121BC, + .oam = &sThrownPokeblockOamData, + .anims = sThrownPokeblockAnimTable, .images = NULL, - .affineAnims = sSpriteAffineAnimTable_84121D8, - .callback = sub_81481B0 + .affineAnims = sThrownPokeblockAffineAnimTable, + .callback = SpriteCB_ThrownPokeblock }; // code @@ -687,7 +687,7 @@ static void sub_8147CC8(u8 taskID) sub_8148108(ewram[0x1FFFD], gTasks[taskID].data[1]); break; case 269: - ewram[0x1FFFC] = sub_814817C(); + ewram[0x1FFFC] = CreatePokeblockSprite(); break; case 281: sub_8148044(ewram[0x1FFFE]); @@ -817,15 +817,15 @@ static void sub_8148108(u8 spriteID, bool8 a1) InitSpriteAffineAnim(&gSprites[spriteID]); } -static u8 sub_814817C(void) +static u8 CreatePokeblockSprite(void) { - u8 spriteID = CreateSprite(&sSpriteTemplate_84121E4, 174, 84, 1); + u8 spriteID = CreateSprite(&sThrownPokeblockSpriteTemplate, 174, 84, 1); gSprites[spriteID].data0 = -12; gSprites[spriteID].data1 = 1; return spriteID; } -static void sub_81481B0(struct Sprite* sprite) +static void SpriteCB_ThrownPokeblock(struct Sprite* sprite) { sprite->pos1.x -= 4; sprite->pos1.y += sprite->data0; @@ -932,8 +932,8 @@ static bool8 sub_81485CC(void) { u16 var = gUnknown_03005FA0[12] - gUnknown_03005FA0[4]; - gPokeblockFeedPokeSprite->pos2.x = (u16)(*((u16*)(&ewram[0x1D000]) + var)); - gPokeblockFeedPokeSprite->pos2.y = (u16)(*((u16*)(&ewram[0x1D400]) + var)); + gPokeblockFeedPokeSprite->pos2.x = (*((u16*)(&ewram[0x1D000]) + var)); + gPokeblockFeedPokeSprite->pos2.y = (*((u16*)(&ewram[0x1D400]) + var)); if (--gUnknown_03005FA0[4] == 0) return 1; @@ -971,17 +971,42 @@ static void sub_814862C(void) *((u16*)(&ewram[0x1D3FE]) + (r8 + r7)) = r9; } -/* void sub_8148710(void) { bool8 var_24 = 0; s16 r8 = gUnknown_03005FA0[13] - gUnknown_03005FA0[10]; s16 r7 = gUnknown_03005FA0[14] - gUnknown_03005FA0[11]; - s16 r5; - if (gUnknown_03005FA0[10] < 0) - r5 = -(gUnknown_03005FA0[10]) - gUnknown_03005FA0[3]; - else - r5 = (gUnknown_03005FA0[10]) - gUnknown_03005FA0[3]; - if (gUnknown_03005FA0) + while (1) + { + u16 r5; + u16 r4; + u16 var; + + var = abs(gUnknown_03005FA0[5]); + r5 = var + gUnknown_03005FA0[3]; + gUnknown_03005FA0[3] = r5; + + if (gUnknown_03005FA0[2] < 0) + var_24 = 1; + + r4 = gUnknown_03005FA0[12] - gUnknown_03005FA0[4]; + + if (gUnknown_03005FA0[4] == 0) + break; + + if (var_24 == 0) + { + *((u16*)(&ewram[0x1D000]) + r4) = Sin(gUnknown_03005FA0[0], gUnknown_03005FA0[2] + r5 / 256) + r8; + *((u16*)(&ewram[0x1D400]) + r4) = Cos(gUnknown_03005FA0[0], gUnknown_03005FA0[3] + r5 / 256) + r7; + } + else + { + *((u16*)(&ewram[0x1D000]) + r4) = Sin(gUnknown_03005FA0[0], gUnknown_03005FA0[2] - r5 / 256) + r8; + *((u16*)(&ewram[0x1D400]) + r4) = Cos(gUnknown_03005FA0[0], gUnknown_03005FA0[3] - r5 / 256) + r7; + } + + gUnknown_03005FA0[0] += gUnknown_03005FA0[1]; + gUnknown_03005FA0[0] &= 0xFF; + gUnknown_03005FA0[4]--; + } } -*/ -- cgit v1.2.3 From 49aebd08cc11b02c3f6ab5ad48eb9c520528ac8a Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 15 Aug 2017 12:17:14 +0200 Subject: cleaning up other pokeblock files --- include/pokeblock.h | 2 + include/pokeblock_feed.h | 10 -- include/use_pokeblock.h | 10 -- src/pokeblock.c | 1 - src/pokeblock_feed.c | 2 +- src/use_pokeblock.c | 238 ++++++++++++++++++----------------------------- 6 files changed, 92 insertions(+), 171 deletions(-) delete mode 100644 include/pokeblock_feed.h delete mode 100644 include/use_pokeblock.h diff --git a/include/pokeblock.h b/include/pokeblock.h index c04278c30..0a6057760 100644 --- a/include/pokeblock.h +++ b/include/pokeblock.h @@ -33,5 +33,7 @@ bool8 PokeblockClearIfExists(u8); s16 PokeblockGetGain(u8, const struct Pokeblock *); u8 sub_810CB68(u8, u8*); void PokeblockCopyName(struct Pokeblock *pokeblock, u8 *dest); +void CB2_PreparePokeblockFeedScene(void); +void sub_8136130(struct Pokeblock *, MainCallback); #endif // GUARD_POKEBLOCK_H diff --git a/include/pokeblock_feed.h b/include/pokeblock_feed.h deleted file mode 100644 index 65d0d1dc9..000000000 --- a/include/pokeblock_feed.h +++ /dev/null @@ -1,10 +0,0 @@ -// -// Created by Scott Norton on 6/28/17. -// - -#ifndef POKERUBY_POKEBLOCK_FEED_H -#define POKERUBY_POKEBLOCK_FEED_H - -void sub_8147ADC(void); - -#endif //POKERUBY_POKEBLOCK_FEED_H diff --git a/include/use_pokeblock.h b/include/use_pokeblock.h deleted file mode 100644 index f34857cf1..000000000 --- a/include/use_pokeblock.h +++ /dev/null @@ -1,10 +0,0 @@ -// -// Created by Scott Norton on 5/31/17. -// - -#ifndef POKERUBY_USE_POKEBLOCK_H -#define POKERUBY_USE_POKEBLOCK_H - -void sub_8136130(struct Pokeblock *, MainCallback); - -#endif //POKERUBY_USE_POKEBLOCK_H diff --git a/src/pokeblock.c b/src/pokeblock.c index 2fb544fea..029bb066f 100644 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -25,7 +25,6 @@ #include "sound.h" #include "songs.h" #include "safari_zone.h" -#include "use_pokeblock.h" #include "event_data.h" #include "pokeblock.h" diff --git a/src/pokeblock_feed.c b/src/pokeblock_feed.c index 9cef681b0..69917bf5d 100644 --- a/src/pokeblock_feed.c +++ b/src/pokeblock_feed.c @@ -587,7 +587,7 @@ static bool8 TransitionToPokeblockFeedScene(void) return 0; } -void sub_8147ADC(void) +void CB2_PreparePokeblockFeedScene(void) { while (1) { diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 19d2e4399..371c25c97 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -1,5 +1,6 @@ // // Created by Scott Norton on 5/31/17. +// Modified by Dizzy Egg on 8/15/17. // #include "global.h" @@ -16,8 +17,6 @@ #include "sound.h" #include "songs.h" #include "pokeblock.h" -#include "pokeblock_feed.h" -#include "use_pokeblock.h" #define GFX_TAG_CONDITIONUPDOWN 0 @@ -29,7 +28,7 @@ const u16 ConditionUpDownPalette[] = INCBIN_U16("graphics/misc/condition_up_down const u32 ConditionUpDownTiles[] = INCBIN_U32("graphics/misc/condition_up_down.4bpp"); #endif -const u32 gUnknown_08406118[] = { +static const u32 gUnknown_08406118[] = { MON_DATA_COOL, MON_DATA_TOUGH, MON_DATA_SMART, @@ -37,11 +36,11 @@ const u32 gUnknown_08406118[] = { MON_DATA_BEAUTY }; -const u8 gUnknown_0840612C[] = { +static const u8 gUnknown_0840612C[] = { 0, 4, 3, 2, 1 }; -const u8 *const gUnknown_08406134[] = { +static const u8 *const sContextStatNames[] = { OtherText_Coolness, OtherText_Toughness, OtherText_Smartness, @@ -49,18 +48,18 @@ const u8 *const gUnknown_08406134[] = { OtherText_Beauty }; -const struct SpriteSheet gSpriteSheet_ConditionUpDown = { +static const struct SpriteSheet gSpriteSheet_ConditionUpDown = { (u8 *)ConditionUpDownTiles, sizeof ConditionUpDownTiles, GFX_TAG_CONDITIONUPDOWN }; -const struct SpritePalette gSpritePalette_ConditionUpDown = { +static const struct SpritePalette gSpritePalette_ConditionUpDown = { ConditionUpDownPalette, GFX_TAG_CONDITIONUPDOWN }; -const s16 gUnknown_08406158[][2] = { +static const s16 gUnknown_08406158[][2] = { {0x9c, 0x1e}, {0x75, 0x35}, {0x75, 0x70}, @@ -68,28 +67,28 @@ const s16 gUnknown_08406158[][2] = { {0xc5, 0x35} }; -const struct OamData gOamData_840616C = { +static const struct OamData gOamData_840616C = { .shape = 1, .size = 2, .priority = 1 }; -const union AnimCmd gSpriteAnim_8406174[] = { +static const union AnimCmd gSpriteAnim_8406174[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_END }; -const union AnimCmd gSpriteAnim_840617C[] = { +static const union AnimCmd gSpriteAnim_840617C[] = { ANIMCMD_FRAME(8, 5), ANIMCMD_END }; -const union AnimCmd *const gSpriteAnimTable_8406184[] = { +static const union AnimCmd *const gSpriteAnimTable_8406184[] = { gSpriteAnim_8406174, gSpriteAnim_840617C }; -const struct SpriteTemplate gSpriteTemplate_840618C = { +static const struct SpriteTemplate gSpriteTemplate_840618C = { GFX_TAG_CONDITIONUPDOWN, GFX_TAG_CONDITIONUPDOWN, &gOamData_840616C, @@ -99,9 +98,6 @@ const struct SpriteTemplate gSpriteTemplate_840618C = { SpriteCallbackDummy }; -asm(".text\n" - ".include \"constants/gba_constants.inc\""); - static EWRAM_DATA struct UnkPokenavStruct_Sub1 *gUnknown_02039304 = NULL; static EWRAM_DATA MainCallback gUnknown_02039308 = NULL; static EWRAM_DATA struct Pokeblock *gUnknown_0203930C = NULL; @@ -111,35 +107,35 @@ EWRAM_DATA s16 gPokeblockGain = 0; extern u16 gKeyRepeatStartDelay; extern u16 gScriptItemId; // FIXME: remove after merge of #349 Pokeblock -void launch_c3_walk_stairs_and_run_once(void (*const)(void)); -void sub_81361E4(void); -void sub_813622C(void); -void sub_8136244(void); -void sub_8136264(void); -void sub_8136294(void); -void sub_81365A0(void); -void sub_81365C8(void); -void sub_8136638(void); -void sub_81368A4(void); +static void launch_c3_walk_stairs_and_run_once(void (*const)(void)); +static void sub_81361E4(void); +static void sub_813622C(void); +static void sub_8136244(void); +static void sub_8136264(void); +static void sub_8136294(void); +static void sub_81365A0(void); +static void sub_81365C8(void); +static void sub_8136638(void); +static void sub_81368A4(void); void sub_8089668(void); -void sub_8136B44(void); -u8 sub_81370E4(u8); -void sub_8136BB8(void); -s8 sub_8136C40(void); -bool8 sub_8137058(void); -void sub_8136D60(void); -void sub_8136808(void); -void sub_8136D8C(void); -u8 sub_81370A4(u8); -void sub_81369CC(void); -void sub_8136EF0(void); -void sub_8137138(void); -void sub_8136C6C(void); -bool8 sub_8136D00(void); -void sub_8136DC0(u8 *, u8, s16); -void sub_8136DA0(const u8 *); -void sub_8136F74(struct Pokeblock *, struct Pokemon *); -void sub_81371DC(struct Sprite *); +static void sub_8136B44(void); +static u8 sub_81370E4(u8); +static void sub_8136BB8(void); +static s8 sub_8136C40(void); +static bool8 sub_8137058(void); +static void sub_8136D60(void); +static void sub_8136808(void); +static void sub_8136D8C(void); +static u8 sub_81370A4(u8); +static void sub_81369CC(void); +static void sub_8136EF0(void); +static void sub_8137138(void); +static void sub_8136C6C(void); +static bool8 sub_8136D00(void); +static void Pokeblock_BufferEnhancedStatText(u8 *, u8, s16); +static void Pokeblock_MenuWindowTextPrint(const u8 *); +static void sub_8136F74(struct Pokeblock *, struct Pokemon *); +static void sub_81371DC(struct Sprite *); void sub_8136130(struct Pokeblock *pokeblock, MainCallback callback) { @@ -151,7 +147,7 @@ void sub_8136130(struct Pokeblock *pokeblock, MainCallback callback) SetMainCallback2(sub_8136244); } -void sub_8136174(void) +static void sub_8136174(void) { gUnknown_02039304->pokeblock = gUnknown_0203930C; gUnknown_02039304->callback = gUnknown_02039308; @@ -162,7 +158,7 @@ void sub_8136174(void) SetMainCallback2(sub_81361E4); } -void sub_81361E4(void) +static void sub_81361E4(void) { gUnknown_02039304->unk0(); AnimateSprites(); @@ -176,7 +172,7 @@ void sub_81361E4(void) } } -void sub_813622C(void) +static void sub_813622C(void) { sub_81368A4(); AnimateSprites(); @@ -184,7 +180,7 @@ void sub_813622C(void) UpdatePaletteFade(); } -void sub_8136244(void) +static void sub_8136244(void) { gUnknown_02039304->unk0(); AnimateSprites(); @@ -192,7 +188,7 @@ void sub_8136244(void) UpdatePaletteFade(); } -void sub_8136264(void) +static void sub_8136264(void) { LoadOam(); ProcessSpriteCopyRequests(); @@ -201,13 +197,13 @@ void sub_8136264(void) sub_8089668(); } -void launch_c3_walk_stairs_and_run_once(void (*const func)(void)) +static void launch_c3_walk_stairs_and_run_once(void (*const func)(void)) { gUnknown_02039304->unk0 = func; gUnknown_02039304->unk50 = 0; } -void sub_8136294(void) +static void sub_8136294(void) { bool32 c1LinkRelatedActive; switch (gUnknown_02039304->unk50) @@ -346,7 +342,7 @@ void sub_8136294(void) } } -void sub_81365A0(void) +static void sub_81365A0(void) { while (!gUnknown_02039304->unk55) { @@ -354,7 +350,7 @@ void sub_81365A0(void) } } -void sub_81365C8(void) +static void sub_81365C8(void) { switch (gUnknown_02039304->unk50) { @@ -374,7 +370,7 @@ void sub_81365C8(void) } } -void sub_8136638(void) +static void sub_8136638(void) { switch (gUnknown_02039304->unk50) { @@ -464,7 +460,7 @@ void sub_8136638(void) } } -void sub_8136808(void) +static void sub_8136808(void) { switch (gUnknown_02039304->unk50) { @@ -479,13 +475,13 @@ void sub_8136808(void) if (!gPaletteFade.active) { gMain.savedCallback = sub_8136174; - SetMainCallback2(sub_8147ADC); + SetMainCallback2(CB2_PreparePokeblockFeedScene); } break; } } -void sub_81368A4(void) +static void sub_81368A4(void) { switch (gUnknown_02039304->unk50) { @@ -538,7 +534,7 @@ void sub_81368A4(void) } } -void sub_81369CC(void) +static void sub_81369CC(void) { switch (gUnknown_02039304->unk50) { @@ -585,7 +581,7 @@ void sub_81369CC(void) } } -void sub_8136B44(void) +static void sub_8136B44(void) { switch (gUnknown_02039304->unk50) { @@ -609,7 +605,7 @@ void sub_8136B44(void) } } -void sub_8136BB8(void) +static void sub_8136BB8(void) { GetMonData(&gPlayerParty[sub_81370A4(gUnknown_083DFEC4->unk87DC)], MON_DATA_NICKNAME, gUnknown_02039304->stringBuffer); StringGetEnd10(gUnknown_02039304->stringBuffer); @@ -621,7 +617,7 @@ void sub_8136BB8(void) MoveMenuCursor(0); } -s8 sub_8136C40(void) +static s8 sub_8136C40(void) { s8 retval = ProcessMenuInputNoWrap(); if ((u8)(retval + 1) < 3) @@ -632,124 +628,68 @@ s8 sub_8136C40(void) return retval; } -void sub_8136C6C(void) +static void sub_8136C6C(void) { BasicInitMenuWindow(&gWindowConfig_81E709C); MenuDrawTextWindow(0, 16, 29, 19); for (gUnknown_02039304->unk53 = 0; gUnknown_02039304->unk53 < 5 && gUnknown_02039304->unk61[gUnknown_02039304->unk53] == 0; gUnknown_02039304->unk53++); if (gUnknown_02039304->unk53 < 5) { - sub_8136DC0(gUnknown_02039304->stringBuffer, gUnknown_02039304->unk53, gUnknown_02039304->unk61[gUnknown_02039304->unk53]); + Pokeblock_BufferEnhancedStatText(gUnknown_02039304->stringBuffer, gUnknown_02039304->unk53, gUnknown_02039304->unk61[gUnknown_02039304->unk53]); } else { - sub_8136DC0(gUnknown_02039304->stringBuffer, gUnknown_02039304->unk53, 0); + Pokeblock_BufferEnhancedStatText(gUnknown_02039304->stringBuffer, gUnknown_02039304->unk53, 0); } - sub_8136DA0(gUnknown_02039304->stringBuffer); + Pokeblock_MenuWindowTextPrint(gUnknown_02039304->stringBuffer); } -#ifdef NONMATCHING -bool8 sub_8136D00(void) +static bool8 sub_8136D00(void) { while (1) { - if (++gUnknown_02039304->unk53 >= 5) + gUnknown_02039304->unk53++; + if (gUnknown_02039304->unk53 < 5) { - break; + if (gUnknown_02039304->unk61[gUnknown_02039304->unk53] != 0) + break; } - if (gUnknown_02039304->unk61[gUnknown_02039304->unk53] != 0) + else { - sub_8136DC0(gUnknown_02039304->stringBuffer, gUnknown_02039304->unk53, gUnknown_02039304->unk61[gUnknown_02039304->unk53]); - sub_8136DA0(gUnknown_02039304->stringBuffer); - return TRUE; + gUnknown_02039304->unk53 = 5; + return FALSE; } } - gUnknown_02039304->unk53 = 5; - return FALSE; + Pokeblock_BufferEnhancedStatText(gUnknown_02039304->stringBuffer, gUnknown_02039304->unk53, gUnknown_02039304->unk61[gUnknown_02039304->unk53]); + Pokeblock_MenuWindowTextPrint(gUnknown_02039304->stringBuffer); + return TRUE; } -#else -__attribute__((naked)) -bool8 sub_8136D00(void) -{ - asm_unified("\tpush {r4,r5,lr}\n" - "\tldr r4, _08136D30 @ =gUnknown_02039304\n" - "\tadds r3, r4, 0\n" - "\tmovs r5, 0x5\n" - "_08136D08:\n" - "\tldr r0, [r3]\n" - "\tadds r0, 0x53\n" - "\tldrb r1, [r0]\n" - "\tadds r1, 0x1\n" - "\tstrb r1, [r0]\n" - "\tldr r2, [r3]\n" - "\tadds r1, r2, 0\n" - "\tadds r1, 0x53\n" - "\tldrb r0, [r1]\n" - "\tcmp r0, 0x4\n" - "\tbhi _08136D34\n" - "\tadds r0, r2, 0\n" - "\tadds r0, 0x61\n" - "\tldrb r1, [r1]\n" - "\tadds r0, r1\n" - "\tldrb r0, [r0]\n" - "\tcmp r0, 0\n" - "\tbne _08136D3A\n" - "\tb _08136D08\n" - "\t.align 2, 0\n" - "_08136D30: .4byte gUnknown_02039304\n" - "_08136D34:\n" - "\tstrb r5, [r1]\n" - "\tmovs r0, 0\n" - "\tb _08136D5A\n" - "_08136D3A:\n" - "\tldr r2, [r4]\n" - "\tadds r0, r2, 0\n" - "\tadds r0, 0x10\n" - "\tadds r1, r2, 0\n" - "\tadds r1, 0x53\n" - "\tldrb r1, [r1]\n" - "\tadds r2, 0x61\n" - "\tadds r2, r1\n" - "\tldrb r2, [r2]\n" - "\tbl sub_8136DC0\n" - "\tldr r0, [r4]\n" - "\tadds r0, 0x10\n" - "\tbl sub_8136DA0\n" - "\tmovs r0, 0x1\n" - "_08136D5A:\n" - "\tpop {r4,r5}\n" - "\tpop {r1}\n" - "\tbx r1"); -} -#endif -void sub_8136D60(void) +static void sub_8136D60(void) { BasicInitMenuWindow(&gWindowConfig_81E709C); MenuDrawTextWindow(0, 16, 29, 19); MenuPrint(gOtherText_WontEat, 1, 17); } -void sub_8136D8C(void) +static void sub_8136D8C(void) { MenuZeroFillScreen(); BasicInitMenuWindow(&gWindowConfig_81E7080); } -void sub_8136DA0(const u8 *message) +static void Pokeblock_MenuWindowTextPrint(const u8 *message) { MenuDrawTextWindow(0, 16, 29, 19); MenuPrint(message, 1, 17); } #ifdef NONMATCHING -void sub_8136DC0(u8 *dest, u8 a1, s16 a2) +static void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 statID, s16 a2) { - u16 v0 = a2; if (a2 != 0) { - if ((v0 = max(a2, 0)) == 0); - StringCopy(dest, gUnknown_08406134[a1]); + StringCopy(dest, sContextStatNames[statID]); StringAppend(dest, gOtherText_WasEnhanced); } else @@ -759,7 +699,7 @@ void sub_8136DC0(u8 *dest, u8 a1, s16 a2) } #else __attribute__((naked)) -void sub_8136DC0(u8 *dest, u8 a1, s16 a2) +static void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 a1, s16 a2) { asm_unified("\tpush {r4,lr}\n" "\tadds r4, r0, 0\n" @@ -775,7 +715,7 @@ void sub_8136DC0(u8 *dest, u8 a1, s16 a2) "\tmovs r0, 0\n" "_08136DD8:\n" "\tlsls r0, 16\n" - "\tldr r1, _08136DF4 @ =gUnknown_08406134\n" + "\tldr r1, _08136DF4 @ =sContextStatNames\n" "\tlsls r0, r3, 2\n" "\tadds r0, r1\n" "\tldr r1, [r0]\n" @@ -786,7 +726,7 @@ void sub_8136DC0(u8 *dest, u8 a1, s16 a2) "\tbl StringAppend\n" "\tb _08136E04\n" "\t.align 2, 0\n" - "_08136DF4: .4byte gUnknown_08406134\n" + "_08136DF4: .4byte sContextStatNames\n" "_08136DF8: .4byte gOtherText_WasEnhanced\n" "_08136DFC:\n" "\tldr r1, _08136E0C @ =gOtherText_NothingChanged\n" @@ -801,7 +741,7 @@ void sub_8136DC0(u8 *dest, u8 a1, s16 a2) } #endif -void sub_8136E10(struct Pokemon *pokemon, u8 *data) +static void sub_8136E10(struct Pokemon *pokemon, u8 *data) { u16 i; for (i=0; i<5; i++) @@ -810,7 +750,7 @@ void sub_8136E10(struct Pokemon *pokemon, u8 *data) } } -void sub_8136E40(struct Pokeblock *pokeblock, struct Pokemon *pokemon) +static void sub_8136E40(struct Pokeblock *pokeblock, struct Pokemon *pokemon) { u16 i; s16 cstat; @@ -838,7 +778,7 @@ void sub_8136E40(struct Pokeblock *pokeblock, struct Pokemon *pokemon) } } -void sub_8136EF0(void) +static void sub_8136EF0(void) { u16 i; struct Pokemon *pokemon = gPlayerParty; @@ -852,7 +792,7 @@ void sub_8136EF0(void) } } -void sub_8136F74(struct Pokeblock *pokeblock, struct Pokemon *pokemon) +static void sub_8136F74(struct Pokeblock *pokeblock, struct Pokemon *pokemon) { s8 direction; s8 i; @@ -884,7 +824,7 @@ void sub_8136F74(struct Pokeblock *pokeblock, struct Pokemon *pokemon) } } -bool8 sub_8137058(void) +static bool8 sub_8137058(void) { struct Pokemon *pokemon = gPlayerParty; pokemon += gUnknown_083DFEC4->unk893c[gUnknown_083DFEC4->unk87DC].partyIdx; @@ -893,7 +833,7 @@ bool8 sub_8137058(void) return FALSE; } -u8 sub_81370A4(u8 a0) +static u8 sub_81370A4(u8 a0) { u8 i; for (i=0; idata0 <= 5) sprite->pos2.y -= 2; -- cgit v1.2.3 From 296534003f07e6f240b11bb60fec87df42e864f4 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 15 Aug 2017 12:40:10 +0200 Subject: more cleaning, make it compile --- include/pokeblock.h | 3 +++ src/use_pokeblock.c | 14 +++++++------- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/include/pokeblock.h b/include/pokeblock.h index 0a6057760..6720653a0 100644 --- a/include/pokeblock.h +++ b/include/pokeblock.h @@ -34,6 +34,9 @@ s16 PokeblockGetGain(u8, const struct Pokeblock *); u8 sub_810CB68(u8, u8*); void PokeblockCopyName(struct Pokeblock *pokeblock, u8 *dest); void CB2_PreparePokeblockFeedScene(void); + +#include "main.h" + void sub_8136130(struct Pokeblock *, MainCallback); #endif // GUARD_POKEBLOCK_H diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 371c25c97..0c8f59959 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -28,7 +28,7 @@ const u16 ConditionUpDownPalette[] = INCBIN_U16("graphics/misc/condition_up_down const u32 ConditionUpDownTiles[] = INCBIN_U32("graphics/misc/condition_up_down.4bpp"); #endif -static const u32 gUnknown_08406118[] = { +static const u32 sContestStatsMonData[] = { MON_DATA_COOL, MON_DATA_TOUGH, MON_DATA_SMART, @@ -741,12 +741,12 @@ static void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 a1, s16 a2) } #endif -static void sub_8136E10(struct Pokemon *pokemon, u8 *data) +static void Pokeblock_GetMonContestStats(struct Pokemon *pokemon, u8 *data) { u16 i; for (i=0; i<5; i++) { - data[i] = GetMonData(pokemon, gUnknown_08406118[i]); + data[i] = GetMonData(pokemon, sContestStatsMonData[i]); } } @@ -760,14 +760,14 @@ static void sub_8136E40(struct Pokeblock *pokeblock, struct Pokemon *pokemon) sub_8136F74(pokeblock, pokemon); for (i=0; i<5; i++) { - data = GetMonData(pokemon, gUnknown_08406118[i]); + data = GetMonData(pokemon, sContestStatsMonData[i]); cstat = data + gUnknown_02039304->unk66[i]; if (cstat < 0) cstat = 0; if (cstat > 255) cstat = 255; data = cstat; - SetMonData(pokemon, gUnknown_08406118[i], &data); + SetMonData(pokemon, sContestStatsMonData[i], &data); } cstat = (u8)GetMonData(pokemon, MON_DATA_SHEEN); cstat = cstat + pokeblock->feel; @@ -783,9 +783,9 @@ static void sub_8136EF0(void) u16 i; struct Pokemon *pokemon = gPlayerParty; pokemon += gUnknown_083DFEC4->unk893c[gUnknown_083DFEC4->unk87DC].partyIdx; - sub_8136E10(pokemon, gUnknown_02039304->unk57); + Pokeblock_GetMonContestStats(pokemon, gUnknown_02039304->unk57); sub_8136E40(gUnknown_02039304->pokeblock, pokemon); - sub_8136E10(pokemon, gUnknown_02039304->unk5c); + Pokeblock_GetMonContestStats(pokemon, gUnknown_02039304->unk5c); for (i=0; i<5; i++) { gUnknown_02039304->unk61[i] = gUnknown_02039304->unk5c[i] - gUnknown_02039304->unk57[i]; -- cgit v1.2.3 From d26c990f055595c92d2a40f566e87d9708de8a51 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Tue, 15 Aug 2017 19:42:54 -0500 Subject: decompile sub_802D148 - sub_802DA9C --- asm/battle_5.s | 1235 ------------------------------------------------------- include/songs.h | 2 +- src/battle_5.c | 682 ++++++++++++++++++++++-------- 3 files changed, 514 insertions(+), 1405 deletions(-) diff --git a/asm/battle_5.s b/asm/battle_5.s index 0f25638df..3332c8c51 100644 --- a/asm/battle_5.s +++ b/asm/battle_5.s @@ -6,1241 +6,6 @@ .text - thumb_func_start sub_802D148 -sub_802D148: @ 802D148 - push {lr} - ldr r0, _0802D178 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _0802D174 - movs r0, 0x5A - bl m4aSongNumStop - ldr r3, _0802D17C @ =gMain - ldr r0, _0802D180 @ =0x0000043d - adds r2, r3, r0 - ldrb r1, [r2] - movs r0, 0x3 - negs r0, r0 - ands r0, r1 - strb r0, [r2] - ldr r0, _0802D184 @ =gPreBattleCallback1 - ldr r0, [r0] - str r0, [r3] - ldr r0, _0802D188 @ =c2_8011A1C - bl SetMainCallback2 -_0802D174: - pop {r0} - bx r0 - .align 2, 0 -_0802D178: .4byte gReceivedRemoteLinkPlayers -_0802D17C: .4byte gMain -_0802D180: .4byte 0x0000043d -_0802D184: .4byte gPreBattleCallback1 -_0802D188: .4byte c2_8011A1C - thumb_func_end sub_802D148 - - thumb_func_start sub_802D18C -sub_802D18C: @ 802D18C - push {lr} - ldr r0, _0802D1BC @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0802D1F2 - ldr r0, _0802D1C0 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0802D1D0 - bl sub_800832C - ldr r1, _0802D1C4 @ =gBattleBankFunc - ldr r0, _0802D1C8 @ =gActiveBank - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r1, _0802D1CC @ =sub_802D148 - str r1, [r0] - b _0802D1F2 - .align 2, 0 -_0802D1BC: .4byte gPaletteFade -_0802D1C0: .4byte gBattleTypeFlags -_0802D1C4: .4byte gBattleBankFunc -_0802D1C8: .4byte gActiveBank -_0802D1CC: .4byte sub_802D148 -_0802D1D0: - movs r0, 0x5A - bl m4aSongNumStop - ldr r2, _0802D1F8 @ =gMain - ldr r0, _0802D1FC @ =0x0000043d - adds r3, r2, r0 - ldrb r1, [r3] - movs r0, 0x3 - negs r0, r0 - ands r0, r1 - strb r0, [r3] - ldr r0, _0802D200 @ =gPreBattleCallback1 - ldr r0, [r0] - str r0, [r2] - ldr r0, [r2, 0x8] - bl SetMainCallback2 -_0802D1F2: - pop {r0} - bx r0 - .align 2, 0 -_0802D1F8: .4byte gMain -_0802D1FC: .4byte 0x0000043d -_0802D200: .4byte gPreBattleCallback1 - thumb_func_end sub_802D18C - - thumb_func_start sub_802D204 -sub_802D204: @ 802D204 - push {lr} - ldr r2, _0802D22C @ =gSprites - ldr r1, _0802D230 @ =gObjectBankIDs - ldr r0, _0802D234 @ =gActiveBank - ldrb r0, [r0] - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r1, [r0] - ldr r0, _0802D238 @ =SpriteCallbackDummy - cmp r1, r0 - bne _0802D228 - bl PlayerBufferExecCompleted -_0802D228: - pop {r0} - bx r0 - .align 2, 0 -_0802D22C: .4byte gSprites -_0802D230: .4byte gObjectBankIDs -_0802D234: .4byte gActiveBank -_0802D238: .4byte SpriteCallbackDummy - thumb_func_end sub_802D204 - - thumb_func_start sub_802D23C -sub_802D23C: @ 802D23C - push {lr} - ldr r2, _0802D264 @ =gSprites - ldr r1, _0802D268 @ =gObjectBankIDs - ldr r0, _0802D26C @ =gActiveBank - ldrb r0, [r0] - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r1, [r0] - ldr r0, _0802D270 @ =SpriteCallbackDummy - cmp r1, r0 - bne _0802D260 - bl PlayerBufferExecCompleted -_0802D260: - pop {r0} - bx r0 - .align 2, 0 -_0802D264: .4byte gSprites -_0802D268: .4byte gObjectBankIDs -_0802D26C: .4byte gActiveBank -_0802D270: .4byte SpriteCallbackDummy - thumb_func_end sub_802D23C - - thumb_func_start sub_802D274 -sub_802D274: @ 802D274 - push {r4-r6,lr} - ldr r6, _0802D2CC @ =gSprites - ldr r5, _0802D2D0 @ =gObjectBankIDs - ldr r4, _0802D2D4 @ =gActiveBank - ldrb r0, [r4] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r6, 0 - adds r1, 0x1C - adds r0, r1 - ldr r1, [r0] - ldr r0, _0802D2D8 @ =SpriteCallbackDummy - cmp r1, r0 - bne _0802D2C6 - ldr r0, _0802D2DC @ =gSaveBlock2 - ldrb r0, [r0, 0x8] - bl nullsub_10 - ldrb r0, [r4] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - bl FreeSpriteOamMatrix - ldrb r0, [r4] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - bl DestroySprite - bl PlayerBufferExecCompleted -_0802D2C6: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0802D2CC: .4byte gSprites -_0802D2D0: .4byte gObjectBankIDs -_0802D2D4: .4byte gActiveBank -_0802D2D8: .4byte SpriteCallbackDummy -_0802D2DC: .4byte gSaveBlock2 - thumb_func_end sub_802D274 - - thumb_func_start sub_802D2E0 -sub_802D2E0: @ 802D2E0 - push {lr} - ldr r3, _0802D314 @ =gActiveBank - ldrb r0, [r3] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - ldr r2, _0802D318 @ =0x02017810 - adds r1, r2 - ldrb r0, [r1, 0x9] - subs r0, 0x1 - strb r0, [r1, 0x9] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - bne _0802D310 - ldrb r0, [r3] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - movs r0, 0 - strb r0, [r1, 0x9] - bl PlayerBufferExecCompleted -_0802D310: - pop {r0} - bx r0 - .align 2, 0 -_0802D314: .4byte gActiveBank -_0802D318: .4byte 0x02017810 - thumb_func_end sub_802D2E0 - - thumb_func_start sub_802D31C -sub_802D31C: @ 802D31C - push {r4-r7,lr} - movs r6, 0 - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - beq _0802D340 - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - beq _0802D374 - ldr r0, _0802D360 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0802D374 -_0802D340: - ldr r2, _0802D364 @ =gSprites - ldr r1, _0802D368 @ =gHealthboxIDs - ldr r0, _0802D36C @ =gActiveBank - ldrb r0, [r0] - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r1, [r0] - ldr r0, _0802D370 @ =SpriteCallbackDummy - cmp r1, r0 - bne _0802D3AA - b _0802D3A8 - .align 2, 0 -_0802D360: .4byte gBattleTypeFlags -_0802D364: .4byte gSprites -_0802D368: .4byte gHealthboxIDs -_0802D36C: .4byte gActiveBank -_0802D370: .4byte SpriteCallbackDummy -_0802D374: - ldr r2, _0802D45C @ =gSprites - ldr r5, _0802D460 @ =gHealthboxIDs - ldr r0, _0802D464 @ =gActiveBank - ldrb r3, [r0] - adds r0, r3, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r4, [r0] - ldr r0, _0802D468 @ =SpriteCallbackDummy - cmp r4, r0 - bne _0802D3AA - movs r0, 0x2 - eors r3, r0 - adds r0, r3, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldr r0, [r0] - cmp r0, r4 - bne _0802D3AA -_0802D3A8: - movs r6, 0x1 -_0802D3AA: - bl IsCryPlayingOrClearCrySongs - lsls r0, 24 - cmp r0, 0 - beq _0802D3B6 - movs r6, 0 -_0802D3B6: - cmp r6, 0 - bne _0802D3BC - b _0802D4DA -_0802D3BC: - ldr r7, _0802D464 @ =gActiveBank - ldrb r2, [r7] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - ldr r5, _0802D46C @ =0x02017810 - adds r4, r0, r5 - ldrb r1, [r4, 0x1] - movs r3, 0x1 - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - bne _0802D3D8 - b _0802D4DA -_0802D3D8: - movs r6, 0x2 - adds r1, r6, 0 - eors r1, r2 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrb r1, [r0, 0x1] - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _0802D4DA - ldrb r1, [r4] - movs r3, 0x7F - adds r0, r3, 0 - ands r0, r1 - strb r0, [r4] - ldrb r0, [r7] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - ldrb r2, [r1, 0x1] - movs r4, 0x2 - negs r4, r4 - adds r0, r4, 0 - ands r0, r2 - strb r0, [r1, 0x1] - ldrb r0, [r7] - adds r1, r6, 0 - eors r1, r0 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrb r1, [r0] - ands r3, r1 - strb r3, [r0] - ldrb r0, [r7] - adds r1, r6, 0 - eors r1, r0 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrb r1, [r0, 0x1] - ands r4, r1 - strb r4, [r0, 0x1] - ldr r4, _0802D470 @ =0x000027f9 - adds r0, r4, 0 - bl FreeSpriteTilesByTag - adds r0, r4, 0 - bl FreeSpritePaletteByTag - ldr r0, _0802D474 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0802D47C - ldr r0, _0802D478 @ =gMPlay_BGM - bl m4aMPlayContinue - b _0802D488 - .align 2, 0 -_0802D45C: .4byte gSprites -_0802D460: .4byte gHealthboxIDs -_0802D464: .4byte gActiveBank -_0802D468: .4byte SpriteCallbackDummy -_0802D46C: .4byte 0x02017810 -_0802D470: .4byte 0x000027f9 -_0802D474: .4byte gBattleTypeFlags -_0802D478: .4byte gMPlay_BGM -_0802D47C: - ldr r0, _0802D4E0 @ =gMPlay_BGM - ldr r1, _0802D4E4 @ =0x0000ffff - movs r2, 0x80 - lsls r2, 1 - bl m4aMPlayVolumeControl -_0802D488: - ldr r7, _0802D4E8 @ =gBattlePartyID - ldr r4, _0802D4EC @ =gActiveBank - ldrb r1, [r4] - lsls r0, r1, 1 - adds r0, r7 - ldrh r0, [r0] - movs r6, 0x64 - muls r0, r6 - ldr r5, _0802D4F0 @ =gPlayerParty - adds r0, r5 - bl sub_80324F8 - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - beq _0802D4BE - ldrb r0, [r4] - movs r1, 0x2 - eors r1, r0 - lsls r0, r1, 1 - adds r0, r7 - ldrh r0, [r0] - muls r0, r6 - adds r0, r5 - bl sub_80324F8 -_0802D4BE: - ldrb r1, [r4] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - ldr r1, _0802D4F4 @ =0x02017810 - adds r0, r1 - movs r1, 0x3 - strb r1, [r0, 0x9] - ldr r1, _0802D4F8 @ =gBattleBankFunc - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, _0802D4FC @ =sub_802D2E0 - str r1, [r0] -_0802D4DA: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802D4E0: .4byte gMPlay_BGM -_0802D4E4: .4byte 0x0000ffff -_0802D4E8: .4byte gBattlePartyID -_0802D4EC: .4byte gActiveBank -_0802D4F0: .4byte gPlayerParty -_0802D4F4: .4byte 0x02017810 -_0802D4F8: .4byte gBattleBankFunc -_0802D4FC: .4byte sub_802D2E0 - thumb_func_end sub_802D31C - - thumb_func_start sub_802D500 -sub_802D500: @ 802D500 - push {r4-r7,lr} - ldr r5, _0802D654 @ =gActiveBank - ldrb r2, [r5] - lsls r3, r2, 1 - adds r0, r3, r2 - lsls r0, 2 - ldr r4, _0802D658 @ =0x02017810 - adds r0, r4 - ldrb r1, [r0] - movs r7, 0x88 - adds r0, r7, 0 - ands r0, r1 - cmp r0, 0 - bne _0802D530 - ldr r0, _0802D65C @ =gBattlePartyID - adds r0, r3, r0 - ldrh r1, [r0] - movs r0, 0x64 - muls r1, r0 - ldr r0, _0802D660 @ =gPlayerParty - adds r1, r0 - adds r0, r2, 0 - bl sub_8141828 -_0802D530: - ldrb r0, [r5] - movs r6, 0x2 - adds r2, r6, 0 - eors r2, r0 - lsls r3, r2, 1 - adds r0, r3, r2 - lsls r0, 2 - adds r0, r4 - ldrb r1, [r0] - adds r0, r7, 0 - ands r0, r1 - cmp r0, 0 - bne _0802D55E - ldr r0, _0802D65C @ =gBattlePartyID - adds r0, r3, r0 - ldrh r1, [r0] - movs r0, 0x64 - muls r1, r0 - ldr r0, _0802D660 @ =gPlayerParty - adds r1, r0 - adds r0, r2, 0 - bl sub_8141828 -_0802D55E: - ldrb r2, [r5] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - adds r0, r4 - ldrb r1, [r0] - movs r3, 0x8 - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - bne _0802D64C - adds r1, r6, 0 - eors r1, r2 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r1, [r0] - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - bne _0802D64C - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - beq _0802D5EE - ldr r0, _0802D664 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - bne _0802D5EE - ldr r1, _0802D668 @ =gUnknown_0300434C - ldrb r0, [r5] - eors r0, r6 - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0802D66C @ =gSprites - adds r0, r1 - bl DestroySprite - ldr r4, _0802D670 @ =gHealthboxIDs - ldrb r0, [r5] - adds r1, r6, 0 - eors r1, r0 - adds r0, r1, r4 - ldrb r0, [r0] - ldr r2, _0802D65C @ =gBattlePartyID - lsls r1, 1 - adds r1, r2 - ldrh r2, [r1] - movs r1, 0x64 - muls r1, r2 - ldr r2, _0802D660 @ =gPlayerParty - adds r1, r2 - movs r2, 0 - bl sub_8045A5C - ldrb r0, [r5] - eors r0, r6 - bl sub_804777C - ldrb r0, [r5] - eors r0, r6 - adds r0, r4 - ldrb r0, [r0] - bl sub_8043DFC -_0802D5EE: - ldr r1, _0802D668 @ =gUnknown_0300434C - ldr r4, _0802D654 @ =gActiveBank - ldrb r0, [r4] - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0802D66C @ =gSprites - adds r0, r1 - bl DestroySprite - ldr r5, _0802D670 @ =gHealthboxIDs - ldrb r1, [r4] - adds r0, r1, r5 - ldrb r0, [r0] - ldr r2, _0802D65C @ =gBattlePartyID - lsls r1, 1 - adds r1, r2 - ldrh r2, [r1] - movs r1, 0x64 - muls r1, r2 - ldr r2, _0802D660 @ =gPlayerParty - adds r1, r2 - movs r2, 0 - bl sub_8045A5C - ldrb r0, [r4] - bl sub_804777C - ldrb r0, [r4] - adds r0, r5 - ldrb r0, [r0] - bl sub_8043DFC - ldr r2, _0802D674 @ =0x02017840 - ldrb r1, [r2, 0x9] - movs r0, 0x2 - negs r0, r0 - ands r0, r1 - strb r0, [r2, 0x9] - ldr r1, _0802D678 @ =gBattleBankFunc - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, _0802D67C @ =sub_802D31C - str r1, [r0] -_0802D64C: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802D654: .4byte gActiveBank -_0802D658: .4byte 0x02017810 -_0802D65C: .4byte gBattlePartyID -_0802D660: .4byte gPlayerParty -_0802D664: .4byte gBattleTypeFlags -_0802D668: .4byte gUnknown_0300434C -_0802D66C: .4byte gSprites -_0802D670: .4byte gHealthboxIDs -_0802D674: .4byte 0x02017840 -_0802D678: .4byte gBattleBankFunc -_0802D67C: .4byte sub_802D31C - thumb_func_end sub_802D500 - - thumb_func_start sub_802D680 -sub_802D680: @ 802D680 - push {r4-r6,lr} - ldr r2, _0802D710 @ =gSprites - ldr r0, _0802D714 @ =gHealthboxIDs - ldr r6, _0802D718 @ =gActiveBank - ldrb r3, [r6] - adds r0, r3, r0 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r1, [r0] - ldr r0, _0802D71C @ =SpriteCallbackDummy - cmp r1, r0 - bne _0802D708 - lsls r0, r3, 1 - adds r0, r3 - lsls r0, 2 - ldr r5, _0802D720 @ =0x02017810 - adds r2, r0, r5 - ldrb r1, [r2, 0x1] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0802D708 - ldrb r1, [r2] - movs r0, 0x7F - ands r0, r1 - strb r0, [r2] - ldrb r0, [r6] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - ldrb r2, [r1, 0x1] - movs r0, 0x2 - negs r0, r0 - ands r0, r2 - strb r0, [r1, 0x1] - ldr r4, _0802D724 @ =0x000027f9 - adds r0, r4, 0 - bl FreeSpriteTilesByTag - adds r0, r4, 0 - bl FreeSpritePaletteByTag - ldrb r2, [r6] - lsls r0, r2, 2 - adds r1, r5, 0 - subs r1, 0x10 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _0802D6FC - adds r0, r2, 0 - adds r1, r2, 0 - movs r3, 0x6 - bl move_anim_start_t4 -_0802D6FC: - ldr r0, _0802D728 @ =gBattleBankFunc - ldrb r1, [r6] - lsls r1, 2 - adds r1, r0 - ldr r0, _0802D72C @ =sub_802D730 - str r0, [r1] -_0802D708: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0802D710: .4byte gSprites -_0802D714: .4byte gHealthboxIDs -_0802D718: .4byte gActiveBank -_0802D71C: .4byte SpriteCallbackDummy -_0802D720: .4byte 0x02017810 -_0802D724: .4byte 0x000027f9 -_0802D728: .4byte gBattleBankFunc -_0802D72C: .4byte sub_802D730 - thumb_func_end sub_802D680 - - thumb_func_start sub_802D730 -sub_802D730: @ 802D730 - push {r4,lr} - ldr r4, _0802D780 @ =gActiveBank - ldrb r1, [r4] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - ldr r1, _0802D784 @ =0x02017810 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - bne _0802D77A - bl IsCryPlayingOrClearCrySongs - lsls r0, 24 - cmp r0, 0 - bne _0802D77A - ldr r0, _0802D788 @ =gMPlay_BGM - ldr r1, _0802D78C @ =0x0000ffff - movs r2, 0x80 - lsls r2, 1 - bl m4aMPlayVolumeControl - ldr r2, _0802D790 @ =gBattlePartyID - ldrb r1, [r4] - lsls r0, r1, 1 - adds r0, r2 - ldrh r2, [r0] - movs r0, 0x64 - muls r0, r2 - ldr r2, _0802D794 @ =gPlayerParty - adds r0, r2 - bl sub_80324F8 - bl PlayerBufferExecCompleted -_0802D77A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0802D780: .4byte gActiveBank -_0802D784: .4byte 0x02017810 -_0802D788: .4byte gMPlay_BGM -_0802D78C: .4byte 0x0000ffff -_0802D790: .4byte gBattlePartyID -_0802D794: .4byte gPlayerParty - thumb_func_end sub_802D730 - - thumb_func_start sub_802D798 -sub_802D798: @ 802D798 - push {r4-r6,lr} - ldr r5, _0802D844 @ =gActiveBank - ldrb r2, [r5] - lsls r3, r2, 1 - adds r0, r3, r2 - lsls r0, 2 - ldr r6, _0802D848 @ =0x02017810 - adds r0, r6 - ldrb r1, [r0] - movs r0, 0x88 - ands r0, r1 - cmp r0, 0 - bne _0802D7C6 - ldr r0, _0802D84C @ =gBattlePartyID - adds r0, r3, r0 - ldrh r1, [r0] - movs r0, 0x64 - muls r1, r0 - ldr r0, _0802D850 @ =gPlayerParty - adds r1, r0 - adds r0, r2, 0 - bl sub_8141828 -_0802D7C6: - ldr r4, _0802D854 @ =gSprites - ldr r0, _0802D858 @ =gUnknown_0300434C - ldrb r2, [r5] - adds r0, r2, r0 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r3, r0, 2 - adds r0, r4, 0 - adds r0, 0x1C - adds r0, r3, r0 - ldr r1, [r0] - ldr r0, _0802D85C @ =SpriteCallbackDummy - cmp r1, r0 - bne _0802D83C - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - adds r0, r6 - ldrb r1, [r0] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - bne _0802D83C - adds r0, r3, r4 - bl DestroySprite - ldr r4, _0802D860 @ =gHealthboxIDs - ldrb r1, [r5] - adds r0, r1, r4 - ldrb r0, [r0] - ldr r2, _0802D84C @ =gBattlePartyID - lsls r1, 1 - adds r1, r2 - ldrh r2, [r1] - movs r1, 0x64 - muls r1, r2 - ldr r2, _0802D850 @ =gPlayerParty - adds r1, r2 - movs r2, 0 - bl sub_8045A5C - ldrb r0, [r5] - bl sub_804777C - ldrb r0, [r5] - adds r0, r4 - ldrb r0, [r0] - bl sub_8043DFC - ldrb r0, [r5] - bl sub_8031F88 - ldr r1, _0802D864 @ =gBattleBankFunc - ldrb r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r1, _0802D868 @ =sub_802D680 - str r1, [r0] -_0802D83C: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0802D844: .4byte gActiveBank -_0802D848: .4byte 0x02017810 -_0802D84C: .4byte gBattlePartyID -_0802D850: .4byte gPlayerParty -_0802D854: .4byte gSprites -_0802D858: .4byte gUnknown_0300434C -_0802D85C: .4byte SpriteCallbackDummy -_0802D860: .4byte gHealthboxIDs -_0802D864: .4byte gBattleBankFunc -_0802D868: .4byte sub_802D680 - thumb_func_end sub_802D798 - - thumb_func_start c3_0802FDF4 -c3_0802FDF4: @ 802D86C - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl IsCryPlayingOrClearCrySongs - lsls r0, 24 - cmp r0, 0 - bne _0802D88E - ldr r0, _0802D894 @ =gMPlay_BGM - ldr r1, _0802D898 @ =0x0000ffff - movs r2, 0x80 - lsls r2, 1 - bl m4aMPlayVolumeControl - adds r0, r4, 0 - bl DestroyTask -_0802D88E: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0802D894: .4byte gMPlay_BGM -_0802D898: .4byte 0x0000ffff - thumb_func_end c3_0802FDF4 - - thumb_func_start bx_t1_healthbar_update -bx_t1_healthbar_update: @ 802D89C - push {r4-r6,lr} - ldr r5, _0802D8DC @ =gActiveBank - ldrb r0, [r5] - ldr r6, _0802D8E0 @ =gHealthboxIDs - adds r1, r0, r6 - ldrb r1, [r1] - movs r2, 0 - movs r3, 0 - bl sub_8045C78 - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - ldrb r0, [r5] - adds r0, r6 - ldrb r0, [r0] - bl sub_8043DFC - lsls r4, 16 - asrs r1, r4, 16 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _0802D8E4 - ldrb r0, [r5] - adds r0, r6 - ldrb r0, [r0] - movs r2, 0 - bl sub_80440EC - b _0802D8FE - .align 2, 0 -_0802D8DC: .4byte gActiveBank -_0802D8E0: .4byte gHealthboxIDs -_0802D8E4: - ldr r2, _0802D904 @ =gBattlePartyID - ldrb r1, [r5] - lsls r0, r1, 1 - adds r0, r2 - ldrh r2, [r0] - movs r0, 0x64 - muls r0, r2 - ldr r2, _0802D908 @ =gPlayerParty - adds r0, r2 - bl sub_80324F8 - bl PlayerBufferExecCompleted -_0802D8FE: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0802D904: .4byte gBattlePartyID -_0802D908: .4byte gPlayerParty - thumb_func_end bx_t1_healthbar_update - - thumb_func_start sub_802D90C -sub_802D90C: @ 802D90C - push {lr} - ldr r0, _0802D920 @ =gUnknown_03004210 - ldrh r0, [r0, 0x16] - cmp r0, 0 - bne _0802D91A - bl PlayerBufferExecCompleted -_0802D91A: - pop {r0} - bx r0 - .align 2, 0 -_0802D920: .4byte gUnknown_03004210 - thumb_func_end sub_802D90C - - thumb_func_start sub_802D924 -sub_802D924: @ 802D924 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - ldr r1, _0802DA24 @ =gTasks - lsls r0, 2 - add r0, r9 - lsls r0, 3 - adds r0, r1 - mov r8, r0 - ldrb r0, [r0, 0x8] - mov r10, r0 - mov r1, r8 - ldrb r7, [r1, 0xC] - str r7, [sp, 0x8] - ldrh r2, [r1, 0xA] - str r2, [sp, 0xC] - bl IsDoubleBattle - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0802D96A - ldr r1, _0802DA28 @ =gBattlePartyID - lsls r0, r7, 1 - adds r0, r1 - ldrh r0, [r0] - cmp r10, r0 - bne _0802D96A - b _0802DA80 -_0802D96A: - movs r0, 0x64 - mov r1, r10 - muls r1, r0 - ldr r0, _0802DA2C @ =gPlayerParty - adds r6, r1, r0 - adds r0, r6, 0 - movs r1, 0xB - bl GetMonData - adds r5, r0, 0 - lsls r5, 16 - lsrs r5, 16 - adds r0, r6, 0 - movs r1, 0x38 - bl GetMonData - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r6, 0 - movs r1, 0x19 - bl GetMonData - str r0, [sp, 0x4] - ldr r3, _0802DA30 @ =gExperienceTables - adds r4, 0x1 - lsls r4, 2 - ldr r2, _0802DA34 @ =gBaseStats - lsls r1, r5, 3 - subs r1, r5 - lsls r1, 2 - adds r1, r2 - ldrb r2, [r1, 0x13] - movs r1, 0xCA - lsls r1, 1 - muls r1, r2 - adds r4, r1 - adds r4, r3 - ldr r2, [r4] - str r2, [sp] - ldr r3, [sp, 0xC] - lsls r1, r3, 16 - asrs r1, 16 - adds r0, r1 - cmp r0, r2 - bcc _0802DA58 - adds r0, r6, 0 - movs r1, 0x19 - mov r2, sp - bl SetMonData - adds r0, r6, 0 - bl CalculateMonStats - ldr r2, [sp] - add r0, sp, 0x4 - ldrh r0, [r0] - subs r2, r0 - ldr r0, [sp, 0xC] - subs r2, r0, r2 - ldr r4, _0802DA38 @ =gActiveBank - ldrb r5, [r4] - strb r7, [r4] - lsls r2, 16 - lsrs r2, 16 - movs r0, 0x1 - movs r1, 0xB - bl dp01_build_cmdbuf_x21_a_bb - strb r5, [r4] - bl IsDoubleBattle - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0802DA40 - ldr r2, _0802DA28 @ =gBattlePartyID - lsls r0, r7, 1 - adds r0, r2 - mov r1, r10 - ldrh r0, [r0] - cmp r1, r0 - beq _0802DA1E - movs r0, 0x2 - eors r7, r0 - lsls r0, r7, 1 - adds r0, r2 - ldrh r0, [r0] - cmp r1, r0 - bne _0802DA40 -_0802DA1E: - ldr r0, _0802DA3C @ =sub_802DCB0 - b _0802DA82 - .align 2, 0 -_0802DA24: .4byte gTasks -_0802DA28: .4byte gBattlePartyID -_0802DA2C: .4byte gPlayerParty -_0802DA30: .4byte gExperienceTables -_0802DA34: .4byte gBaseStats -_0802DA38: .4byte gActiveBank -_0802DA3C: .4byte sub_802DCB0 -_0802DA40: - ldr r0, _0802DA50 @ =gTasks - mov r2, r9 - lsls r1, r2, 2 - add r1, r9 - lsls r1, 3 - adds r1, r0 - ldr r0, _0802DA54 @ =sub_802DDC4 - b _0802DA84 - .align 2, 0 -_0802DA50: .4byte gTasks -_0802DA54: .4byte sub_802DDC4 -_0802DA58: - str r0, [sp, 0x4] - add r2, sp, 0x4 - adds r0, r6, 0 - movs r1, 0x19 - bl SetMonData - ldr r1, _0802DA78 @ =gBattleBankFunc - ldr r3, [sp, 0x8] - lsls r0, r3, 2 - adds r0, r1 - ldr r1, _0802DA7C @ =sub_802D90C - str r1, [r0] - mov r0, r9 - bl DestroyTask - b _0802DA86 - .align 2, 0 -_0802DA78: .4byte gBattleBankFunc -_0802DA7C: .4byte sub_802D90C -_0802DA80: - ldr r0, _0802DA98 @ =sub_802DA9C -_0802DA82: - mov r1, r8 -_0802DA84: - str r0, [r1] -_0802DA86: - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802DA98: .4byte sub_802DA9C - thumb_func_end sub_802D924 - - thumb_func_start sub_802DA9C -sub_802DA9C: @ 802DA9C - push {r4-r6,lr} - mov r6, r10 - mov r5, r9 - mov r4, r8 - push {r4-r6} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0802DB54 @ =gTasks - lsls r2, r0, 2 - mov r8, r2 - add r8, r0 - mov r0, r8 - lsls r0, 3 - mov r8, r0 - add r8, r1 - mov r2, r8 - ldrb r1, [r2, 0x8] - movs r0, 0xA - ldrsh r2, [r2, r0] - mov r9, r2 - mov r2, r8 - ldrb r2, [r2, 0xC] - mov r10, r2 - movs r0, 0x64 - adds r6, r1, 0 - muls r6, r0 - ldr r0, _0802DB58 @ =gPlayerParty - adds r6, r0 - adds r0, r6, 0 - movs r1, 0x38 - bl GetMonData - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r6, 0 - movs r1, 0xB - bl GetMonData - adds r5, r0, 0 - lsls r5, 16 - lsrs r5, 16 - adds r0, r6, 0 - movs r1, 0x19 - bl GetMonData - adds r3, r0, 0 - ldr r6, _0802DB5C @ =gExperienceTables - lsls r1, r4, 2 - ldr r2, _0802DB60 @ =gBaseStats - lsls r0, r5, 3 - subs r0, r5 - lsls r0, 2 - adds r0, r2 - ldrb r2, [r0, 0x13] - movs r0, 0xCA - lsls r0, 1 - muls r0, r2 - adds r1, r0 - adds r1, r6 - ldr r1, [r1] - subs r3, r1 - adds r4, 0x1 - lsls r4, 2 - adds r4, r0 - adds r4, r6 - ldr r2, [r4] - subs r2, r1 - ldr r0, _0802DB64 @ =gHealthboxIDs - add r0, r10 - ldrb r1, [r0] - mov r0, r9 - negs r0, r0 - str r0, [sp] - mov r0, r10 - bl sub_8043D84 - movs r0, 0x21 - bl PlaySE - ldr r0, _0802DB68 @ =sub_802DB6C - mov r1, r8 - str r0, [r1] - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0802DB54: .4byte gTasks -_0802DB58: .4byte gPlayerParty -_0802DB5C: .4byte gExperienceTables -_0802DB60: .4byte gBaseStats -_0802DB64: .4byte gHealthboxIDs -_0802DB68: .4byte sub_802DB6C - thumb_func_end sub_802DA9C - thumb_func_start sub_802DB6C sub_802DB6C: @ 802DB6C push {r4-r7,lr} diff --git a/include/songs.h b/include/songs.h index 8cf7ee5e9..c4f693726 100644 --- a/include/songs.h +++ b/include/songs.h @@ -36,7 +36,7 @@ enum /*0x1E*/ SE_N, /*0x1F*/ SE_SEIKAI, /*0x20*/ SE_HAZURE, - SE_EXP, + /*0x21*/ SE_EXP, SE_JITE_PYOKO, SE_MU_PACHI, SE_TK_KASYA, diff --git a/src/battle_5.c b/src/battle_5.c index 2ab1a2189..25c8ddc42 100644 --- a/src/battle_5.c +++ b/src/battle_5.c @@ -3,12 +3,15 @@ #include "battle_interface.h" #include "item.h" #include "link.h" +#include "m4a.h" #include "main.h" #include "menu_cursor.h" +#include "palette.h" #include "pokemon.h" #include "rom3.h" #include "songs.h" #include "sound.h" +#include "task.h" #include "text.h" #include "util.h" @@ -32,6 +35,10 @@ extern struct Window gUnknown_03004210; extern const u8 gUnknown_08400D89[]; extern u8 gUnknown_03004348; extern struct BattlePokemon gBattleMons[]; +extern MainCallback gPreBattleCallback1; +extern u8 gHealthboxIDs[]; +extern struct MusicPlayerInfo gMPlay_BGM; +extern u8 gUnknown_0300434C[]; extern void dp11b_obj_instanciate(u8, u8, s8, s8); extern u8 GetBankIdentity(u8); @@ -45,6 +52,9 @@ extern void sub_802E220(); extern void sub_802E2D4(); extern void sub_802E12C(); extern void sub_802E1B0(void); +extern bool8 IsDoubleBattle(); +extern void sub_804777C(); +extern void sub_8141828(); void PlayerHandleGetAttributes(void); void sub_802ECF0(void); @@ -173,6 +183,11 @@ void PlayerBufferRunCommand(void); void sub_802C2EC(void); void sub_802C68C(void); void sub_802CA60(void); +void sub_802D730(void); +void sub_802DA9C(u8); +void sub_802DB6C(u8); +void sub_802DCB0(u8); +void sub_802DDC4(u8); void nullsub_91(void) { @@ -455,7 +470,7 @@ struct UnknownStruct1 u8 unkC[0x12-0xC]; u8 unk12; u8 unk13; - u8 filler14[0x20-0x14]; + u8 filler14[0x20-0x14]; }; void sub_802C68C(void) @@ -598,172 +613,501 @@ extern const u8 gUnknown_08400D38[]; void sub_802CA60(void) { - u8 perMovePPBonuses[4]; - struct - { - u16 moves[4]; - u8 pp[4]; - u8 filler18[8]; // what is this? - } sp0; - //struct UnknownStruct1 sp0; - u8 totalPPBonuses; - - if (gMain.newKeys & (A_BUTTON | SELECT_BUTTON)) - { - PlaySE(SE_SELECT); - if (gMoveSelectionCursor[gActiveBank] != gUnknown_03004344) - { - struct UnknownStruct1 *r9 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4]; - s32 i; - - i = r9->moves[gMoveSelectionCursor[gActiveBank]]; - r9->moves[gMoveSelectionCursor[gActiveBank]] = r9->moves[gUnknown_03004344]; - r9->moves[gUnknown_03004344] = i; - - i = r9->pp[gMoveSelectionCursor[gActiveBank]]; - r9->pp[gMoveSelectionCursor[gActiveBank]] = r9->pp[gUnknown_03004344]; - r9->pp[gUnknown_03004344] = i; - - i = r9->unkC[gMoveSelectionCursor[gActiveBank]]; - r9->unkC[gMoveSelectionCursor[gActiveBank]] = r9->unkC[gUnknown_03004344]; - r9->unkC[gUnknown_03004344] = i; - - if (gDisableStructs[gActiveBank].unk18_b & gBitTable[gMoveSelectionCursor[gActiveBank]]) - { - gDisableStructs[gActiveBank].unk18_b &= ~gBitTable[gMoveSelectionCursor[gActiveBank]]; - gDisableStructs[gActiveBank].unk18_b |= gBitTable[gUnknown_03004344]; - } - - sub_802E1B0(); - - for (i = 0; i < 4; i++) - perMovePPBonuses[i] = (gBattleMons[gActiveBank].ppBonuses & (3 << (i * 2))) >> (i * 2); - totalPPBonuses = perMovePPBonuses[gMoveSelectionCursor[gActiveBank]]; - perMovePPBonuses[gMoveSelectionCursor[gActiveBank]] = perMovePPBonuses[gUnknown_03004344]; - perMovePPBonuses[gUnknown_03004344] = totalPPBonuses; - - totalPPBonuses = 0; - for (i = 0; i < 4; i++) - totalPPBonuses |= perMovePPBonuses[i] << (i * 2); - gBattleMons[gActiveBank].ppBonuses = totalPPBonuses; - - for (i = 0; i < 4; i++) - { - gBattleMons[gActiveBank].moves[i] = r9->moves[i]; - gBattleMons[gActiveBank].pp[i] = r9->pp[i]; - } - if (!(gBattleMons[gActiveBank].status2 & 0x200000)) - { - for (i = 0; i < 4; i++) - { - sp0.moves[i] = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + i); - sp0.pp[i] = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP1 + i); - } - - totalPPBonuses = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP_BONUSES); - for (i = 0; i < 4; i++) - perMovePPBonuses[i] = (totalPPBonuses & (3 << (i * 2))) >> (i * 2); - - i = sp0.moves[gMoveSelectionCursor[gActiveBank]]; - sp0.moves[gMoveSelectionCursor[gActiveBank]] = sp0.moves[gUnknown_03004344]; - sp0.moves[gUnknown_03004344] = i; - - i = sp0.pp[gMoveSelectionCursor[gActiveBank]]; - sp0.pp[gMoveSelectionCursor[gActiveBank]] = sp0.pp[gUnknown_03004344]; - sp0.pp[gUnknown_03004344] = i; - - totalPPBonuses = perMovePPBonuses[gMoveSelectionCursor[gActiveBank]]; - perMovePPBonuses[gMoveSelectionCursor[gActiveBank]] = perMovePPBonuses[gUnknown_03004344]; - perMovePPBonuses[gUnknown_03004344] = totalPPBonuses; - - totalPPBonuses = 0; - for (i = 0; i < 4; i++) - totalPPBonuses |= perMovePPBonuses[i] << (i * 2); - - for (i = 0; i < 4; i++) - { - SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + i, (u8 *)&sp0.moves[i]); - SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP1 + i, &sp0.pp[i]); - } - SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP_BONUSES, &totalPPBonuses); - } - } - else - { - sub_802E12C(gUnknown_03004344, gUnknown_08400D49); - } - gBattleBankFunc[gActiveBank] = sub_802C68C; - gMoveSelectionCursor[gActiveBank] = gUnknown_03004344; - sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); - FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); - InitWindow(&gUnknown_03004210, gUnknown_08400D38, 0x290, 0x17, 0x37); - sub_8002F44(&gUnknown_03004210); - sub_802E220(); - sub_802E2D4(); - } - if (gMain.newKeys & (B_BUTTON | SELECT_BUTTON)) - { - PlaySE(SE_SELECT); - nullsub_7(gUnknown_03004344); - sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); - sub_802E12C(gMoveSelectionCursor[gActiveBank], gUnknown_08400D49); - gBattleBankFunc[gActiveBank] = sub_802C68C; - FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); - InitWindow(&gUnknown_03004210, gUnknown_08400D38, 0x290, 0x17, 0x37); - sub_8002F44(&gUnknown_03004210); - sub_802E220(); - sub_802E2D4(); - } - if ((gMain.newKeys & DPAD_LEFT) && (gUnknown_03004344 & 1)) - { - if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) - sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D); - else - nullsub_7(gUnknown_03004344); - gUnknown_03004344 ^= 1; - PlaySE(SE_SELECT); - if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) - sub_802E3B4(gUnknown_03004344, 0); - else - sub_802E3B4(gUnknown_03004344, 0x1B); - } - if ((gMain.newKeys & DPAD_RIGHT) && !(gUnknown_03004344 & 1) && (gUnknown_03004344 ^ 1) < gUnknown_03004348) - { - if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) - sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D); - else - nullsub_7(gUnknown_03004344); - gUnknown_03004344 ^= 1; - PlaySE(SE_SELECT); - if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) - sub_802E3B4(gUnknown_03004344, 0); - else - sub_802E3B4(gUnknown_03004344, 0x1B); - } - if ((gMain.newKeys & DPAD_UP) && (gUnknown_03004344 & 2)) - { - if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) - sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D); - else - nullsub_7(gUnknown_03004344); - gUnknown_03004344 ^= 2; - PlaySE(SE_SELECT); - if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) - sub_802E3B4(gUnknown_03004344, 0); - else - sub_802E3B4(gUnknown_03004344, 0x1B); - } - if ((gMain.newKeys & DPAD_DOWN) && !(gUnknown_03004344 & 2) && (gUnknown_03004344 ^ 2) < gUnknown_03004348) - { - if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) - sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D); - else - nullsub_7(gUnknown_03004344); - gUnknown_03004344 ^= 2; - PlaySE(SE_SELECT); - if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) - sub_802E3B4(gUnknown_03004344, 0); - else - sub_802E3B4(gUnknown_03004344, 0x1B); - } + u8 perMovePPBonuses[4]; + struct + { + u16 moves[4]; + u8 pp[4]; + u8 filler18[8]; // what is this? + } sp0; + //struct UnknownStruct1 sp0; + u8 totalPPBonuses; + + if (gMain.newKeys & (A_BUTTON | SELECT_BUTTON)) + { + PlaySE(SE_SELECT); + if (gMoveSelectionCursor[gActiveBank] != gUnknown_03004344) + { + struct UnknownStruct1 *r9 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4]; + s32 i; + + i = r9->moves[gMoveSelectionCursor[gActiveBank]]; + r9->moves[gMoveSelectionCursor[gActiveBank]] = r9->moves[gUnknown_03004344]; + r9->moves[gUnknown_03004344] = i; + + i = r9->pp[gMoveSelectionCursor[gActiveBank]]; + r9->pp[gMoveSelectionCursor[gActiveBank]] = r9->pp[gUnknown_03004344]; + r9->pp[gUnknown_03004344] = i; + + i = r9->unkC[gMoveSelectionCursor[gActiveBank]]; + r9->unkC[gMoveSelectionCursor[gActiveBank]] = r9->unkC[gUnknown_03004344]; + r9->unkC[gUnknown_03004344] = i; + + if (gDisableStructs[gActiveBank].unk18_b & gBitTable[gMoveSelectionCursor[gActiveBank]]) + { + gDisableStructs[gActiveBank].unk18_b &= ~gBitTable[gMoveSelectionCursor[gActiveBank]]; + gDisableStructs[gActiveBank].unk18_b |= gBitTable[gUnknown_03004344]; + } + + sub_802E1B0(); + + for (i = 0; i < 4; i++) + perMovePPBonuses[i] = (gBattleMons[gActiveBank].ppBonuses & (3 << (i * 2))) >> (i * 2); + totalPPBonuses = perMovePPBonuses[gMoveSelectionCursor[gActiveBank]]; + perMovePPBonuses[gMoveSelectionCursor[gActiveBank]] = perMovePPBonuses[gUnknown_03004344]; + perMovePPBonuses[gUnknown_03004344] = totalPPBonuses; + + totalPPBonuses = 0; + for (i = 0; i < 4; i++) + totalPPBonuses |= perMovePPBonuses[i] << (i * 2); + gBattleMons[gActiveBank].ppBonuses = totalPPBonuses; + + for (i = 0; i < 4; i++) + { + gBattleMons[gActiveBank].moves[i] = r9->moves[i]; + gBattleMons[gActiveBank].pp[i] = r9->pp[i]; + } + if (!(gBattleMons[gActiveBank].status2 & 0x200000)) + { + for (i = 0; i < 4; i++) + { + sp0.moves[i] = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + i); + sp0.pp[i] = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP1 + i); + } + + totalPPBonuses = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP_BONUSES); + for (i = 0; i < 4; i++) + perMovePPBonuses[i] = (totalPPBonuses & (3 << (i * 2))) >> (i * 2); + + i = sp0.moves[gMoveSelectionCursor[gActiveBank]]; + sp0.moves[gMoveSelectionCursor[gActiveBank]] = sp0.moves[gUnknown_03004344]; + sp0.moves[gUnknown_03004344] = i; + + i = sp0.pp[gMoveSelectionCursor[gActiveBank]]; + sp0.pp[gMoveSelectionCursor[gActiveBank]] = sp0.pp[gUnknown_03004344]; + sp0.pp[gUnknown_03004344] = i; + + totalPPBonuses = perMovePPBonuses[gMoveSelectionCursor[gActiveBank]]; + perMovePPBonuses[gMoveSelectionCursor[gActiveBank]] = perMovePPBonuses[gUnknown_03004344]; + perMovePPBonuses[gUnknown_03004344] = totalPPBonuses; + + totalPPBonuses = 0; + for (i = 0; i < 4; i++) + totalPPBonuses |= perMovePPBonuses[i] << (i * 2); + + for (i = 0; i < 4; i++) + { + SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + i, (u8 *)&sp0.moves[i]); + SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP1 + i, &sp0.pp[i]); + } + SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP_BONUSES, &totalPPBonuses); + } + } + else + { + sub_802E12C(gUnknown_03004344, gUnknown_08400D49); + } + gBattleBankFunc[gActiveBank] = sub_802C68C; + gMoveSelectionCursor[gActiveBank] = gUnknown_03004344; + sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); + FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); + InitWindow(&gUnknown_03004210, gUnknown_08400D38, 0x290, 0x17, 0x37); + sub_8002F44(&gUnknown_03004210); + sub_802E220(); + sub_802E2D4(); + } + if (gMain.newKeys & (B_BUTTON | SELECT_BUTTON)) + { + PlaySE(SE_SELECT); + nullsub_7(gUnknown_03004344); + sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); + sub_802E12C(gMoveSelectionCursor[gActiveBank], gUnknown_08400D49); + gBattleBankFunc[gActiveBank] = sub_802C68C; + FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); + InitWindow(&gUnknown_03004210, gUnknown_08400D38, 0x290, 0x17, 0x37); + sub_8002F44(&gUnknown_03004210); + sub_802E220(); + sub_802E2D4(); + } + if ((gMain.newKeys & DPAD_LEFT) && (gUnknown_03004344 & 1)) + { + if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) + sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D); + else + nullsub_7(gUnknown_03004344); + gUnknown_03004344 ^= 1; + PlaySE(SE_SELECT); + if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) + sub_802E3B4(gUnknown_03004344, 0); + else + sub_802E3B4(gUnknown_03004344, 0x1B); + } + if ((gMain.newKeys & DPAD_RIGHT) && !(gUnknown_03004344 & 1) && (gUnknown_03004344 ^ 1) < gUnknown_03004348) + { + if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) + sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D); + else + nullsub_7(gUnknown_03004344); + gUnknown_03004344 ^= 1; + PlaySE(SE_SELECT); + if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) + sub_802E3B4(gUnknown_03004344, 0); + else + sub_802E3B4(gUnknown_03004344, 0x1B); + } + if ((gMain.newKeys & DPAD_UP) && (gUnknown_03004344 & 2)) + { + if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) + sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D); + else + nullsub_7(gUnknown_03004344); + gUnknown_03004344 ^= 2; + PlaySE(SE_SELECT); + if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) + sub_802E3B4(gUnknown_03004344, 0); + else + sub_802E3B4(gUnknown_03004344, 0x1B); + } + if ((gMain.newKeys & DPAD_DOWN) && !(gUnknown_03004344 & 2) && (gUnknown_03004344 ^ 2) < gUnknown_03004348) + { + if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) + sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D); + else + nullsub_7(gUnknown_03004344); + gUnknown_03004344 ^= 2; + PlaySE(SE_SELECT); + if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) + sub_802E3B4(gUnknown_03004344, 0); + else + sub_802E3B4(gUnknown_03004344, 0x1B); + } +} + +void sub_802D148(void) +{ + if (gReceivedRemoteLinkPlayers == 0) + { + m4aSongNumStop(SE_HINSI); + gMain.inBattle = FALSE; + gMain.callback1 = gPreBattleCallback1; + SetMainCallback2(c2_8011A1C); + } +} + +void sub_802D18C(void) +{ + if (!gPaletteFade.active) + { + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + sub_800832C(); + gBattleBankFunc[gActiveBank] = sub_802D148; + } + else + { + m4aSongNumStop(SE_HINSI); + gMain.inBattle = FALSE; + gMain.callback1 = gPreBattleCallback1; + SetMainCallback2(gMain.savedCallback); + } + } +} + +void sub_802D204(void) +{ + if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy) + PlayerBufferExecCompleted(); +} + +// duplicate of sub_802D204 +void sub_802D23C(void) +{ + if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy) + PlayerBufferExecCompleted(); +} + +void sub_802D274(void) +{ + if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy) + { + nullsub_10(gSaveBlock2.playerGender); + FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); + DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); + PlayerBufferExecCompleted(); + } +} + +void sub_802D2E0(void) +{ + if (--ewram17810[gActiveBank].unk9 == 0xFF) + { + ewram17810[gActiveBank].unk9 = 0; + PlayerBufferExecCompleted(); + } +} + +void sub_802D31C(void) +{ + bool8 r6 = FALSE; + + if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI))) + { + if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy) + r6 = TRUE; + } + else + { + if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy + && gSprites[gHealthboxIDs[gActiveBank ^ 2]].callback == SpriteCallbackDummy) + r6 = TRUE; + } + if (IsCryPlayingOrClearCrySongs()) + r6 = FALSE; + + if (r6 && ewram17810[gActiveBank].unk1_0 && ewram17810[gActiveBank ^ 2].unk1_0) + { + ewram17810[gActiveBank].unk0_7 = 0; + ewram17810[gActiveBank].unk1_0 = 0; + ewram17810[gActiveBank ^ 2].unk0_7 = 0; + ewram17810[gActiveBank ^ 2].unk1_0 = 0; + FreeSpriteTilesByTag(0x27F9); + FreeSpritePaletteByTag(0x27F9); + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + m4aMPlayContinue(&gMPlay_BGM); + else + m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 256); + sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + if (IsDoubleBattle()) + sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank ^ 2]], gActiveBank ^ 2); + ewram17810[gActiveBank].unk9 = 3; + gBattleBankFunc[gActiveBank] = sub_802D2E0; + } +} + +void sub_802D500(void) +{ + if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7) + sub_8141828(gActiveBank, &gPlayerParty[gBattlePartyID[gActiveBank]]); + if (!ewram17810[gActiveBank ^ 2].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_7) + sub_8141828(gActiveBank ^ 2, &gPlayerParty[gBattlePartyID[gActiveBank ^ 2]]); + if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_3) + { + if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) + { + DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank ^ 2]]); + sub_8045A5C( + gHealthboxIDs[gActiveBank ^ 2], + &gPlayerParty[gBattlePartyID[gActiveBank ^ 2]], + 0); + sub_804777C(gActiveBank ^ 2); + sub_8043DFC(gHealthboxIDs[gActiveBank ^ 2]); + } + DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]); + sub_8045A5C( + gHealthboxIDs[gActiveBank], + &gPlayerParty[gBattlePartyID[gActiveBank]], + 0); + sub_804777C(gActiveBank); + sub_8043DFC(gHealthboxIDs[gActiveBank]); + ewram17840.unk9_0 = 0; + gBattleBankFunc[gActiveBank] = sub_802D31C; + } +} + +void sub_802D680(void) +{ + if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy + && ewram17810[gActiveBank].unk1_0) + { + ewram17810[gActiveBank].unk0_7 = 0; + ewram17810[gActiveBank].unk1_0 = 0; + FreeSpriteTilesByTag(0x27F9); + FreeSpritePaletteByTag(0x27F9); + if (ewram17800[gActiveBank].unk0_2) + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); + gBattleBankFunc[gActiveBank] = sub_802D730; + } +} + +void sub_802D730(void) +{ + if (!ewram17810[gActiveBank].unk0_6 && !IsCryPlayingOrClearCrySongs()) + { + m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100); + sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + PlayerBufferExecCompleted(); + } +} + +void sub_802D798(void) +{ + if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7) + sub_8141828(gActiveBank, &gPlayerParty[gBattlePartyID[gActiveBank]]); + if (gSprites[gUnknown_0300434C[gActiveBank]].callback == SpriteCallbackDummy + && !ewram17810[gActiveBank].unk0_3) + { + DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]); + sub_8045A5C(gHealthboxIDs[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], 0); + sub_804777C(gActiveBank); + sub_8043DFC(gHealthboxIDs[gActiveBank]); + sub_8031F88(gActiveBank); + gBattleBankFunc[gActiveBank] = sub_802D680; + } +} + +void c3_0802FDF4(u8 taskId) +{ + if (!IsCryPlayingOrClearCrySongs()) + { + m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100); + DestroyTask(taskId); + } +} + +void bx_t1_healthbar_update(void) +{ + s16 r4 = sub_8045C78(gActiveBank, gHealthboxIDs[gActiveBank], 0, 0); + + sub_8043DFC(gHealthboxIDs[gActiveBank]); + if (r4 != -1) + { + sub_80440EC(gHealthboxIDs[gActiveBank], r4, 0); + } + else + { + sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + PlayerBufferExecCompleted(); + } +} + +void sub_802D90C(void) +{ + if (gUnknown_03004210.state == 0) + PlayerBufferExecCompleted(); +} + +// Rare Candy usage, maybe? +void sub_802D924(u8 taskId) +{ + u32 pkmnIndex = (u8)gTasks[taskId].data[0]; + u8 bank = gTasks[taskId].data[2]; + s16 gainedExp = gTasks[taskId].data[1]; + + if (IsDoubleBattle() == TRUE || pkmnIndex != gBattlePartyID[bank]) + { + struct Pokemon *pkmn = &gPlayerParty[pkmnIndex]; + u16 species = GetMonData(pkmn, MON_DATA_SPECIES); + u8 level = GetMonData(pkmn, MON_DATA_LEVEL); + u32 currExp = GetMonData(pkmn, MON_DATA_EXP); + u32 nextLvlExp = gExperienceTables[gBaseStats[species].growthRate][level + 1]; + + if (currExp + gainedExp >= nextLvlExp) + { + u8 savedActiveBank; + + SetMonData(pkmn, MON_DATA_EXP, (u8 *)&nextLvlExp); + CalculateMonStats(pkmn); + gainedExp -= nextLvlExp - currExp; + savedActiveBank = gActiveBank; + gActiveBank = bank; + dp01_build_cmdbuf_x21_a_bb(1, 11, gainedExp); + gActiveBank = savedActiveBank; + + if (IsDoubleBattle() == TRUE + && ((u16)pkmnIndex == gBattlePartyID[bank] || (u16)pkmnIndex == gBattlePartyID[bank ^ 2])) + gTasks[taskId].func = sub_802DCB0; + else + gTasks[taskId].func = sub_802DDC4; + } + else + { + currExp += gainedExp; + SetMonData(pkmn, MON_DATA_EXP, (u8 *)&currExp); + gBattleBankFunc[bank] = sub_802D90C; + DestroyTask(taskId); + } + } + else + { + gTasks[taskId].func = sub_802DA9C; + } +} + +void sub_802DA9C(u8 taskId) +{ + u8 pkmnIndex = gTasks[taskId].data[0]; + s32 r9 = gTasks[taskId].data[1]; + u8 bank = gTasks[taskId].data[2]; + struct Pokemon *pkmn = &gPlayerParty[pkmnIndex]; + u8 level = GetMonData(pkmn, MON_DATA_LEVEL); + u16 species = GetMonData(pkmn, MON_DATA_SPECIES); + u32 exp = GetMonData(pkmn, MON_DATA_EXP); + u32 currLvlExp = gExperienceTables[gBaseStats[species].growthRate][level]; + u32 expToNextLvl; + + exp -= currLvlExp; + expToNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLvlExp; + sub_8043D84(bank, gHealthboxIDs[bank], expToNextLvl, exp, -r9); + PlaySE(SE_EXP); + gTasks[taskId].func = sub_802DB6C; +} + +/* +void sub_802DB6C(u8 taskId) +{ + if (gTasks[taskId].data[10] < 13) + { + gTasks[taskId].data[10]++; + } + else + { + u8 r9 = gTasks[taskId].data[0]; + s32 r10 = gTasks[taskId].data[1]; //s16? + u8 r7 = gTasks[taskId].data[2]; + s16 r4; + + r4 = sub_8045C78(r7, gHealthboxIDs[r7], 1, 0); + sub_8043DFC(gHealthboxIDs[r7]); + if (r4 == -1) + { + struct Pokemon *pkmn; + u8 r4; + u32 sp4; + u16 r0; + u32 sp0; + + m4aSongNumStop(SE_EXP); + pkmn = &gPlayerParty[r9]; + r4 = GetMonData(pkmn, MON_DATA_LEVEL); + sp4 = GetMonData(pkmn, MON_DATA_EXP); + r0 = GetMonData(pkmn, MON_DATA_SPECIES); + sp0 = gExperienceTables[gBaseStats[r0].growthRate][r4 + 1]; + if (sp4 + r10 >= sp0) + { + u8 r5; + u32 asdf; + + SetMonData(pkmn, MON_DATA_EXP, (u8 *)&sp0); + CalculateMonStats(pkmn); + //r10 -= sp0 - sp4; + asdf = sp0 - sp4; + //asdf = r10 - (sp0 - sp4); + r10 -= asdf; + r5 = gActiveBank; + gActiveBank = r7; + dp01_build_cmdbuf_x21_a_bb(1, 11, r10); + gActiveBank = r5; + gTasks[taskId].func = sub_802DCB0; + } + else + { + //u32 asdf = sp4 + r10; + sp4 += r10; + SetMonData(pkmn, MON_DATA_EXP, (u8 *)&sp4); + gBattleBankFunc[r7] = sub_802D90C; + DestroyTask(taskId); + } + } + } } +*/ -- cgit v1.2.3 From 2f736ac868f0db520052915c64323423f15143ec Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Wed, 16 Aug 2017 19:42:14 -0500 Subject: decompile sub_802DCB0 - sub_802E1B0 --- asm/battle_5.s | 828 --------------------------------------------------------- src/battle_5.c | 349 +++++++++++++++++++++++- 2 files changed, 345 insertions(+), 832 deletions(-) diff --git a/asm/battle_5.s b/asm/battle_5.s index 3332c8c51..0aec7ea78 100644 --- a/asm/battle_5.s +++ b/asm/battle_5.s @@ -6,834 +6,6 @@ .text - thumb_func_start sub_802DB6C -sub_802DB6C: @ 802DB6C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r1, _0802DB98 @ =gTasks - lsls r0, 2 - add r0, r8 - lsls r0, 3 - adds r6, r0, r1 - ldrh r1, [r6, 0x1C] - movs r2, 0x1C - ldrsh r0, [r6, r2] - cmp r0, 0xC - bgt _0802DB9C - adds r0, r1, 0x1 - strh r0, [r6, 0x1C] - b _0802DC98 - .align 2, 0 -_0802DB98: .4byte gTasks -_0802DB9C: - ldrb r0, [r6, 0x8] - mov r9, r0 - ldrh r2, [r6, 0xA] - mov r10, r2 - ldrb r7, [r6, 0xC] - ldr r5, _0802DC64 @ =gHealthboxIDs - adds r5, r7, r5 - ldrb r1, [r5] - adds r0, r7, 0 - movs r2, 0x1 - movs r3, 0 - bl sub_8045C78 - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - ldrb r0, [r5] - bl sub_8043DFC - lsls r4, 16 - asrs r4, 16 - movs r0, 0x1 - negs r0, r0 - cmp r4, r0 - bne _0802DC98 - movs r0, 0x21 - bl m4aSongNumStop - movs r0, 0x64 - mov r1, r9 - muls r1, r0 - ldr r0, _0802DC68 @ =gPlayerParty - adds r5, r1, r0 - adds r0, r5, 0 - movs r1, 0x38 - bl GetMonData - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r5, 0 - movs r1, 0x19 - bl GetMonData - str r0, [sp, 0x4] - adds r0, r5, 0 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - ldr r3, _0802DC6C @ =gExperienceTables - adds r4, 0x1 - lsls r4, 2 - ldr r2, _0802DC70 @ =gBaseStats - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - adds r1, r2 - ldrb r1, [r1, 0x13] - movs r0, 0xCA - lsls r0, 1 - muls r0, r1 - adds r4, r0 - adds r4, r3 - ldr r1, [r4] - str r1, [sp] - mov r2, r10 - lsls r0, r2, 16 - asrs r4, r0, 16 - ldr r0, [sp, 0x4] - adds r0, r4 - cmp r0, r1 - blt _0802DC7C - adds r0, r5, 0 - movs r1, 0x19 - mov r2, sp - bl SetMonData - adds r0, r5, 0 - bl CalculateMonStats - ldr r2, [sp] - add r0, sp, 0x4 - ldrh r0, [r0] - subs r2, r0 - subs r2, r4, r2 - ldr r4, _0802DC74 @ =gActiveBank - ldrb r5, [r4] - strb r7, [r4] - lsls r2, 16 - lsrs r2, 16 - movs r0, 0x1 - movs r1, 0xB - bl dp01_build_cmdbuf_x21_a_bb - strb r5, [r4] - ldr r0, _0802DC78 @ =sub_802DCB0 - str r0, [r6] - b _0802DC98 - .align 2, 0 -_0802DC64: .4byte gHealthboxIDs -_0802DC68: .4byte gPlayerParty -_0802DC6C: .4byte gExperienceTables -_0802DC70: .4byte gBaseStats -_0802DC74: .4byte gActiveBank -_0802DC78: .4byte sub_802DCB0 -_0802DC7C: - str r0, [sp, 0x4] - add r2, sp, 0x4 - adds r0, r5, 0 - movs r1, 0x19 - bl SetMonData - ldr r1, _0802DCA8 @ =gBattleBankFunc - lsls r0, r7, 2 - adds r0, r1 - ldr r1, _0802DCAC @ =sub_802D90C - str r1, [r0] - mov r0, r8 - bl DestroyTask -_0802DC98: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802DCA8: .4byte gBattleBankFunc -_0802DCAC: .4byte sub_802D90C - thumb_func_end sub_802DB6C - - thumb_func_start sub_802DCB0 -sub_802DCB0: @ 802DCB0 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _0802DD04 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - ldrb r4, [r0, 0xC] - ldrb r6, [r0, 0x8] - bl IsDoubleBattle - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0802DCE4 - ldr r1, _0802DD08 @ =gBattlePartyID - movs r0, 0x2 - adds r2, r4, 0 - eors r2, r0 - lsls r0, r2, 1 - adds r0, r1 - ldrh r0, [r0] - cmp r6, r0 - bne _0802DCE4 - adds r4, r2, 0 -_0802DCE4: - adds r0, r4, 0 - adds r1, r4, 0 - adds r2, r4, 0 - movs r3, 0 - bl move_anim_start_t4 - ldr r0, _0802DD04 @ =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r0 - ldr r0, _0802DD0C @ =sub_802DD10 - str r0, [r1] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0802DD04: .4byte gTasks -_0802DD08: .4byte gBattlePartyID -_0802DD0C: .4byte sub_802DD10 - thumb_func_end sub_802DCB0 - - thumb_func_start sub_802DD10 -sub_802DD10: @ 802DD10 - push {r4-r7,lr} - lsls r0, 24 - lsrs r6, r0, 24 - ldr r1, _0802DD78 @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r2, r0, r1 - ldrb r5, [r2, 0xC] - lsls r0, r5, 1 - adds r0, r5 - lsls r0, 2 - ldr r1, _0802DD7C @ =0x02017810 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - bne _0802DDAE - ldrb r4, [r2, 0x8] - movs r0, 0x64 - adds r1, r4, 0 - muls r1, r0 - ldr r0, _0802DD80 @ =gPlayerParty - adds r7, r1, r0 - adds r0, r7, 0 - movs r1, 0x38 - bl GetMonData - bl IsDoubleBattle - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0802DD8C - ldr r1, _0802DD84 @ =gBattlePartyID - movs r0, 0x2 - adds r2, r5, 0 - eors r2, r0 - lsls r0, r2, 1 - adds r0, r1 - ldrh r0, [r0] - cmp r4, r0 - bne _0802DD8C - ldr r0, _0802DD88 @ =gHealthboxIDs - adds r0, r2, r0 - ldrb r0, [r0] - adds r1, r7, 0 - movs r2, 0 - bl sub_8045A5C - b _0802DDA0 - .align 2, 0 -_0802DD78: .4byte gTasks -_0802DD7C: .4byte 0x02017810 -_0802DD80: .4byte gPlayerParty -_0802DD84: .4byte gBattlePartyID -_0802DD88: .4byte gHealthboxIDs -_0802DD8C: - ldr r0, _0802DDB4 @ =gHealthboxIDs - adds r0, r5, r0 - ldrb r0, [r0] - movs r1, 0x64 - muls r1, r4 - ldr r2, _0802DDB8 @ =gPlayerParty - adds r1, r2 - movs r2, 0 - bl sub_8045A5C -_0802DDA0: - ldr r0, _0802DDBC @ =gTasks - lsls r1, r6, 2 - adds r1, r6 - lsls r1, 3 - adds r1, r0 - ldr r0, _0802DDC0 @ =sub_802DDC4 - str r0, [r1] -_0802DDAE: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802DDB4: .4byte gHealthboxIDs -_0802DDB8: .4byte gPlayerParty -_0802DDBC: .4byte gTasks -_0802DDC0: .4byte sub_802DDC4 - thumb_func_end sub_802DD10 - - thumb_func_start sub_802DDC4 -sub_802DDC4: @ 802DDC4 - push {r4,r5,lr} - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - ldr r0, _0802DE00 @ =gTasks - lsls r4, r5, 2 - adds r4, r5 - lsls r4, 3 - adds r4, r0 - ldrb r1, [r4, 0x8] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0802DE04 @ =gPlayerParty - adds r0, r1 - movs r1, 0x38 - bl GetMonData - ldrb r0, [r4, 0xC] - ldr r1, _0802DE08 @ =gBattleBankFunc - lsls r0, 2 - adds r0, r1 - ldr r1, _0802DE0C @ =sub_802D90C - str r1, [r0] - adds r0, r5, 0 - bl DestroyTask - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0802DE00: .4byte gTasks -_0802DE04: .4byte gPlayerParty -_0802DE08: .4byte gBattleBankFunc -_0802DE0C: .4byte sub_802D90C - thumb_func_end sub_802DDC4 - - thumb_func_start sub_802DE10 -sub_802DE10: @ 802DE10 - push {r4-r6,lr} - ldr r6, _0802DE94 @ =gSprites - ldr r5, _0802DE98 @ =gObjectBankIDs - ldr r4, _0802DE9C @ =gActiveBank - ldrb r2, [r4] - adds r0, r2, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - movs r3, 0x22 - ldrsh r1, [r0, r3] - movs r3, 0x26 - ldrsh r0, [r0, r3] - adds r1, r0 - cmp r1, 0xA0 - ble _0802DE8C - ldr r1, _0802DEA0 @ =gBattlePartyID - lsls r0, r2, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0802DEA4 @ =gPlayerParty - adds r0, r1 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - bl nullsub_9 - ldrb r0, [r4] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - ldrb r0, [r0, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix - ldrb r0, [r4] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - bl DestroySprite - ldr r1, _0802DEA8 @ =gHealthboxIDs - ldrb r0, [r4] - adds r0, r1 - ldrb r0, [r0] - bl sub_8043DB0 - bl PlayerBufferExecCompleted -_0802DE8C: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0802DE94: .4byte gSprites -_0802DE98: .4byte gObjectBankIDs -_0802DE9C: .4byte gActiveBank -_0802DEA0: .4byte gBattlePartyID -_0802DEA4: .4byte gPlayerParty -_0802DEA8: .4byte gHealthboxIDs - thumb_func_end sub_802DE10 - - thumb_func_start sub_802DEAC -sub_802DEAC: @ 802DEAC - push {r4-r6,lr} - ldr r6, _0802DF04 @ =gActiveBank - ldrb r2, [r6] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - ldr r1, _0802DF08 @ =0x02017810 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - bne _0802DEFC - ldr r5, _0802DF0C @ =gObjectBankIDs - adds r0, r2, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, _0802DF10 @ =gSprites - adds r0, r4 - bl FreeSpriteOamMatrix - ldrb r0, [r6] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite - ldr r1, _0802DF14 @ =gHealthboxIDs - ldrb r0, [r6] - adds r0, r1 - ldrb r0, [r0] - bl sub_8043DB0 - bl PlayerBufferExecCompleted -_0802DEFC: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0802DF04: .4byte gActiveBank -_0802DF08: .4byte 0x02017810 -_0802DF0C: .4byte gObjectBankIDs -_0802DF10: .4byte gSprites -_0802DF14: .4byte gHealthboxIDs - thumb_func_end sub_802DEAC - - thumb_func_start sub_802DF18 -sub_802DF18: @ 802DF18 - push {lr} - ldr r0, _0802DF2C @ =gUnknown_03004210 - ldrh r0, [r0, 0x16] - cmp r0, 0 - bne _0802DF26 - bl PlayerBufferExecCompleted -_0802DF26: - pop {r0} - bx r0 - .align 2, 0 -_0802DF2C: .4byte gUnknown_03004210 - thumb_func_end sub_802DF18 - - thumb_func_start sub_802DF30 -sub_802DF30: @ 802DF30 - push {r4,lr} - ldr r0, _0802DF70 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0802DF6A - ldr r1, _0802DF74 @ =gBattleBankFunc - ldr r2, _0802DF78 @ =gActiveBank - ldrb r0, [r2] - lsls r0, 2 - adds r0, r1 - ldr r1, _0802DF7C @ =sub_802DF88 - str r1, [r0] - ldr r3, _0802DF80 @ =gTasks - ldr r1, _0802DF84 @ =gUnknown_0300434C - ldrb r0, [r2] - adds r0, r1 - ldrb r0, [r0] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r3 - ldrb r4, [r1, 0x8] - bl DestroyTask - adds r0, r4, 0 - bl sub_8094E20 -_0802DF6A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0802DF70: .4byte gPaletteFade -_0802DF74: .4byte gBattleBankFunc -_0802DF78: .4byte gActiveBank -_0802DF7C: .4byte sub_802DF88 -_0802DF80: .4byte gTasks -_0802DF84: .4byte gUnknown_0300434C - thumb_func_end sub_802DF30 - - thumb_func_start sub_802DF88 -sub_802DF88: @ 802DF88 - push {lr} - ldr r0, _0802DFB8 @ =gMain - ldr r1, [r0, 0x4] - ldr r0, _0802DFBC @ =sub_800F808 - cmp r1, r0 - bne _0802DFF8 - ldr r0, _0802DFC0 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0802DFF8 - ldr r0, _0802DFC4 @ =gUnknown_0202E8F4 - ldrb r0, [r0] - cmp r0, 0x1 - bne _0802DFD0 - ldr r0, _0802DFC8 @ =gUnknown_0202E8F5 - ldrb r1, [r0] - ldr r2, _0802DFCC @ =gUnknown_02038470 - movs r0, 0x1 - bl dp01_build_cmdbuf_x22_a_three_bytes - b _0802DFDA - .align 2, 0 -_0802DFB8: .4byte gMain -_0802DFBC: .4byte sub_800F808 -_0802DFC0: .4byte gPaletteFade -_0802DFC4: .4byte gUnknown_0202E8F4 -_0802DFC8: .4byte gUnknown_0202E8F5 -_0802DFCC: .4byte gUnknown_02038470 -_0802DFD0: - movs r0, 0x1 - movs r1, 0x6 - movs r2, 0 - bl dp01_build_cmdbuf_x22_a_three_bytes -_0802DFDA: - ldr r1, _0802DFFC @ =gBattleBufferA - ldr r0, _0802E000 @ =gActiveBank - ldrb r0, [r0] - lsls r0, 9 - adds r1, 0x1 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0xF - ands r0, r1 - cmp r0, 0x1 - bne _0802DFF4 - bl b_link_standby_message -_0802DFF4: - bl PlayerBufferExecCompleted -_0802DFF8: - pop {r0} - bx r0 - .align 2, 0 -_0802DFFC: .4byte gBattleBufferA -_0802E000: .4byte gActiveBank - thumb_func_end sub_802DF88 - - thumb_func_start sub_802E004 -sub_802E004: @ 802E004 - push {lr} - ldr r0, _0802E02C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0802E028 - ldr r1, _0802E030 @ =gBattleBankFunc - ldr r0, _0802E034 @ =gActiveBank - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r1, _0802E038 @ =sub_802E03C - str r1, [r0] - bl nullsub_14 - bl sub_80A6DCC -_0802E028: - pop {r0} - bx r0 - .align 2, 0 -_0802E02C: .4byte gPaletteFade -_0802E030: .4byte gBattleBankFunc -_0802E034: .4byte gActiveBank -_0802E038: .4byte sub_802E03C - thumb_func_end sub_802E004 - - thumb_func_start sub_802E03C -sub_802E03C: @ 802E03C - push {lr} - ldr r0, _0802E068 @ =gMain - ldr r1, [r0, 0x4] - ldr r0, _0802E06C @ =sub_800F808 - cmp r1, r0 - bne _0802E062 - ldr r0, _0802E070 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0802E062 - ldr r0, _0802E074 @ =gScriptItemId - ldrh r1, [r0] - movs r0, 0x1 - bl dp01_build_cmdbuf_x23_aa_0 - bl PlayerBufferExecCompleted -_0802E062: - pop {r0} - bx r0 - .align 2, 0 -_0802E068: .4byte gMain -_0802E06C: .4byte sub_800F808 -_0802E070: .4byte gPaletteFade -_0802E074: .4byte gScriptItemId - thumb_func_end sub_802E03C - - thumb_func_start bx_wait_t1 -bx_wait_t1: @ 802E078 - push {lr} - ldr r0, _0802E0A4 @ =gDoingBattleAnim - ldrb r0, [r0] - cmp r0, 0 - beq _0802E09A - ldr r0, _0802E0A8 @ =gActiveBank - ldrb r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - ldr r1, _0802E0AC @ =0x02017810 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - bne _0802E09E -_0802E09A: - bl PlayerBufferExecCompleted -_0802E09E: - pop {r0} - bx r0 - .align 2, 0 -_0802E0A4: .4byte gDoingBattleAnim -_0802E0A8: .4byte gActiveBank -_0802E0AC: .4byte 0x02017810 - thumb_func_end bx_wait_t1 - - thumb_func_start bx_blink_t1 -bx_blink_t1: @ 802E0B0 - push {r4,lr} - ldr r1, _0802E0EC @ =gObjectBankIDs - ldr r0, _0802E0F0 @ =gActiveBank - ldrb r0, [r0] - adds r0, r1 - ldrb r1, [r0] - ldr r2, _0802E0F4 @ =gSprites - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r4, r0, r2 - movs r1, 0x30 - ldrsh r0, [r4, r1] - cmp r0, 0x20 - bne _0802E0FC - movs r3, 0 - movs r0, 0 - strh r0, [r4, 0x30] - adds r2, r4, 0 - adds r2, 0x3E - ldrb r1, [r2] - subs r0, 0x5 - ands r0, r1 - strb r0, [r2] - ldr r0, _0802E0F8 @ =gDoingBattleAnim - strb r3, [r0] - bl PlayerBufferExecCompleted - b _0802E126 - .align 2, 0 -_0802E0EC: .4byte gObjectBankIDs -_0802E0F0: .4byte gActiveBank -_0802E0F4: .4byte gSprites -_0802E0F8: .4byte gDoingBattleAnim -_0802E0FC: - ldrh r0, [r4, 0x30] - movs r1, 0x3 - ands r0, r1 - cmp r0, 0 - bne _0802E120 - adds r3, r4, 0 - adds r3, 0x3E - ldrb r2, [r3] - lsls r0, r2, 29 - lsrs r0, 31 - movs r1, 0x1 - eors r1, r0 - lsls r1, 2 - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] -_0802E120: - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] -_0802E126: - pop {r4} - pop {r0} - bx r0 - thumb_func_end bx_blink_t1 - - thumb_func_start sub_802E12C -sub_802E12C: @ 802E12C - push {r4-r6,lr} - sub sp, 0x4 - adds r6, r0, 0 - ldr r0, _0802E180 @ =gActiveBank - ldrb r4, [r0] - lsls r4, 9 - ldr r0, _0802E184 @ =gUnknown_02023A64 - adds r4, r0 - ldr r5, _0802E188 @ =gDisplayedStringBattle - adds r0, r5, 0 - bl StringCopy - lsls r0, r6, 1 - adds r4, r0 - ldrh r1, [r4] - movs r0, 0xD - muls r1, r0 - ldr r0, _0802E18C @ =gMoveNames - adds r1, r0 - adds r0, r5, 0 - bl StringAppend - ldr r4, _0802E190 @ =gUnknown_03004210 - adds r1, r5, 0 - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 18 - movs r2, 0xC0 - lsls r2, 18 - adds r0, r2 - lsrs r2, r0, 16 - movs r0, 0x1 - ands r0, r6 - movs r3, 0x1 - cmp r0, 0 - beq _0802E176 - movs r3, 0xB -_0802E176: - cmp r6, 0x1 - bgt _0802E194 - movs r0, 0x37 - b _0802E196 - .align 2, 0 -_0802E180: .4byte gActiveBank -_0802E184: .4byte gUnknown_02023A64 -_0802E188: .4byte gDisplayedStringBattle -_0802E18C: .4byte gMoveNames -_0802E190: .4byte gUnknown_03004210 -_0802E194: - movs r0, 0x39 -_0802E196: - str r0, [sp] - adds r0, r4, 0 - bl InitWindow - ldr r0, _0802E1AC @ =gUnknown_03004210 - bl sub_8002F44 - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0802E1AC: .4byte gUnknown_03004210 - thumb_func_end sub_802E12C - - thumb_func_start sub_802E1B0 -sub_802E1B0: @ 802E1B0 - push {r4-r6,lr} - sub sp, 0x8 - ldr r0, _0802E208 @ =gActiveBank - ldrb r4, [r0] - lsls r4, 9 - ldr r0, _0802E20C @ =gUnknown_02023A64 - adds r4, r0 - ldr r5, _0802E210 @ =gUnknown_03004348 - movs r0, 0 - strb r0, [r5] - ldr r0, _0802E214 @ =gUnknown_03004210 - ldr r1, _0802E218 @ =0x00001016 - movs r2, 0x14 - str r2, [sp] - movs r2, 0x3A - str r2, [sp, 0x4] - movs r2, 0x1 - movs r3, 0x37 - bl FillWindowRect - movs r6, 0 -_0802E1DA: - lsls r0, r6, 24 - lsrs r0, 24 - bl nullsub_7 - adds r0, r6, 0 - ldr r1, _0802E21C @ =gUnknown_08400D49 - bl sub_802E12C - ldrh r0, [r4] - cmp r0, 0 - beq _0802E1F6 - ldrb r0, [r5] - adds r0, 0x1 - strb r0, [r5] -_0802E1F6: - adds r4, 0x2 - adds r6, 0x1 - cmp r6, 0x3 - ble _0802E1DA - add sp, 0x8 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0802E208: .4byte gActiveBank -_0802E20C: .4byte gUnknown_02023A64 -_0802E210: .4byte gUnknown_03004348 -_0802E214: .4byte gUnknown_03004210 -_0802E218: .4byte 0x00001016 -_0802E21C: .4byte gUnknown_08400D49 - thumb_func_end sub_802E1B0 - thumb_func_start sub_802E220 sub_802E220: @ 802E220 push {r4-r6,lr} diff --git a/src/battle_5.c b/src/battle_5.c index 25c8ddc42..f7dff5e70 100644 --- a/src/battle_5.c +++ b/src/battle_5.c @@ -1,4 +1,5 @@ #include "global.h" +#include "data2.h" #include "battle.h" #include "battle_interface.h" #include "item.h" @@ -11,6 +12,7 @@ #include "rom3.h" #include "songs.h" #include "sound.h" +#include "string_util.h" #include "task.h" #include "text.h" #include "util.h" @@ -28,7 +30,7 @@ extern u8 gAbsentBankFlags; extern u8 gUnknown_03004344; extern u8 gNoOfAllBanks; extern u16 gBattlePartyID[]; -extern const struct BattleMove gBattleMoves[]; +//extern const struct BattleMove gBattleMoves[]; extern u16 gUnknown_030042A0; extern u16 gUnknown_030042A4; extern struct Window gUnknown_03004210; @@ -39,6 +41,11 @@ extern MainCallback gPreBattleCallback1; extern u8 gHealthboxIDs[]; extern struct MusicPlayerInfo gMPlay_BGM; extern u8 gUnknown_0300434C[]; +extern u8 gUnknown_0202E8F4; +extern u8 gUnknown_0202E8F5; +extern u8 gUnknown_02038470[]; +extern u16 gScriptItemId; +extern u8 gDisplayedStringBattle[]; extern void dp11b_obj_instanciate(u8, u8, s8, s8); extern u8 GetBankIdentity(u8); @@ -50,11 +57,15 @@ extern void nullsub_7(u8); extern void sub_802E3B4(); extern void sub_802E220(); extern void sub_802E2D4(); -extern void sub_802E12C(); +extern void sub_802E12C(s32, const u8 *); extern void sub_802E1B0(void); extern bool8 IsDoubleBattle(); extern void sub_804777C(); extern void sub_8141828(); +extern void sub_8094E20(u8); +extern void b_link_standby_message(void); +extern void nullsub_14(void); +extern void sub_80A6DCC(void); void PlayerHandleGetAttributes(void); void sub_802ECF0(void); @@ -187,7 +198,10 @@ void sub_802D730(void); void sub_802DA9C(u8); void sub_802DB6C(u8); void sub_802DCB0(u8); +void sub_802DD10(u8); void sub_802DDC4(u8); +void sub_802DF88(void); +void sub_802E03C(void); void nullsub_91(void) { @@ -1052,7 +1066,7 @@ void sub_802DA9C(u8 taskId) gTasks[taskId].func = sub_802DB6C; } -/* +#ifdef NONMATCHING void sub_802DB6C(u8 taskId) { if (gTasks[taskId].data[10] < 13) @@ -1110,4 +1124,331 @@ void sub_802DB6C(u8 taskId) } } } -*/ +#else +__attribute__((naked)) +void sub_802DB6C(u8 taskId) +{ + asm_unified("push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x8\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r8, r0\n\ + ldr r1, _0802DB98 @ =gTasks\n\ + lsls r0, 2\n\ + add r0, r8\n\ + lsls r0, 3\n\ + adds r6, r0, r1\n\ + ldrh r1, [r6, 0x1C]\n\ + movs r2, 0x1C\n\ + ldrsh r0, [r6, r2]\n\ + cmp r0, 0xC\n\ + bgt _0802DB9C\n\ + adds r0, r1, 0x1\n\ + strh r0, [r6, 0x1C]\n\ + b _0802DC98\n\ + .align 2, 0\n\ +_0802DB98: .4byte gTasks\n\ +_0802DB9C:\n\ + ldrb r0, [r6, 0x8]\n\ + mov r9, r0\n\ + ldrh r2, [r6, 0xA]\n\ + mov r10, r2\n\ + ldrb r7, [r6, 0xC]\n\ + ldr r5, _0802DC64 @ =gHealthboxIDs\n\ + adds r5, r7, r5\n\ + ldrb r1, [r5]\n\ + adds r0, r7, 0\n\ + movs r2, 0x1\n\ + movs r3, 0\n\ + bl sub_8045C78\n\ + adds r4, r0, 0\n\ + lsls r4, 16\n\ + lsrs r4, 16\n\ + ldrb r0, [r5]\n\ + bl sub_8043DFC\n\ + lsls r4, 16\n\ + asrs r4, 16\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + cmp r4, r0\n\ + bne _0802DC98\n\ + movs r0, 0x21\n\ + bl m4aSongNumStop\n\ + movs r0, 0x64\n\ + mov r1, r9\n\ + muls r1, r0\n\ + ldr r0, _0802DC68 @ =gPlayerParty\n\ + adds r5, r1, r0\n\ + adds r0, r5, 0\n\ + movs r1, 0x38\n\ + bl GetMonData\n\ + adds r4, r0, 0\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + adds r0, r5, 0\n\ + movs r1, 0x19\n\ + bl GetMonData\n\ + str r0, [sp, 0x4]\n\ + adds r0, r5, 0\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + ldr r3, _0802DC6C @ =gExperienceTables\n\ + adds r4, 0x1\n\ + lsls r4, 2\n\ + ldr r2, _0802DC70 @ =gBaseStats\n\ + lsls r1, r0, 3\n\ + subs r1, r0\n\ + lsls r1, 2\n\ + adds r1, r2\n\ + ldrb r1, [r1, 0x13]\n\ + movs r0, 0xCA\n\ + lsls r0, 1\n\ + muls r0, r1\n\ + adds r4, r0\n\ + adds r4, r3\n\ + ldr r1, [r4]\n\ + str r1, [sp]\n\ + mov r2, r10\n\ + lsls r0, r2, 16\n\ + asrs r4, r0, 16\n\ + ldr r0, [sp, 0x4]\n\ + adds r0, r4\n\ + cmp r0, r1\n\ + blt _0802DC7C\n\ + adds r0, r5, 0\n\ + movs r1, 0x19\n\ + mov r2, sp\n\ + bl SetMonData\n\ + adds r0, r5, 0\n\ + bl CalculateMonStats\n\ + ldr r2, [sp]\n\ + add r0, sp, 0x4\n\ + ldrh r0, [r0]\n\ + subs r2, r0\n\ + subs r2, r4, r2\n\ + ldr r4, _0802DC74 @ =gActiveBank\n\ + ldrb r5, [r4]\n\ + strb r7, [r4]\n\ + lsls r2, 16\n\ + lsrs r2, 16\n\ + movs r0, 0x1\n\ + movs r1, 0xB\n\ + bl dp01_build_cmdbuf_x21_a_bb\n\ + strb r5, [r4]\n\ + ldr r0, _0802DC78 @ =sub_802DCB0\n\ + str r0, [r6]\n\ + b _0802DC98\n\ + .align 2, 0\n\ +_0802DC64: .4byte gHealthboxIDs\n\ +_0802DC68: .4byte gPlayerParty\n\ +_0802DC6C: .4byte gExperienceTables\n\ +_0802DC70: .4byte gBaseStats\n\ +_0802DC74: .4byte gActiveBank\n\ +_0802DC78: .4byte sub_802DCB0\n\ +_0802DC7C:\n\ + str r0, [sp, 0x4]\n\ + add r2, sp, 0x4\n\ + adds r0, r5, 0\n\ + movs r1, 0x19\n\ + bl SetMonData\n\ + ldr r1, _0802DCA8 @ =gBattleBankFunc\n\ + lsls r0, r7, 2\n\ + adds r0, r1\n\ + ldr r1, _0802DCAC @ =sub_802D90C\n\ + str r1, [r0]\n\ + mov r0, r8\n\ + bl DestroyTask\n\ +_0802DC98:\n\ + add sp, 0x8\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\ +_0802DCA8: .4byte gBattleBankFunc\n\ +_0802DCAC: .4byte sub_802D90C\n"); +} +#endif + +void sub_802DCB0(u8 taskId) +{ + u8 bank = gTasks[taskId].data[2]; + u8 pkmnIndex = gTasks[taskId].data[0]; + + if (IsDoubleBattle() == TRUE && pkmnIndex == gBattlePartyID[bank ^ 2]) + bank ^= 2; + move_anim_start_t4(bank, bank, bank, 0); + gTasks[taskId].func = sub_802DD10; +} + +void sub_802DD10(u8 taskId) +{ + u8 bank = gTasks[taskId].data[2]; + + if (!ewram17810[bank].unk0_6) + { + u8 pkmnIndex = gTasks[taskId].data[0]; + + GetMonData(&gPlayerParty[pkmnIndex], MON_DATA_LEVEL); // Unused return value + if (IsDoubleBattle() == TRUE && pkmnIndex == gBattlePartyID[bank ^ 2]) + sub_8045A5C(gHealthboxIDs[bank ^ 2], &gPlayerParty[pkmnIndex], 0); + else + sub_8045A5C(gHealthboxIDs[bank], &gPlayerParty[pkmnIndex], 0); + gTasks[taskId].func = sub_802DDC4; + } +} + +void sub_802DDC4(u8 taskId) +{ + u8 pkmnIndex; + u8 bank; + + pkmnIndex = gTasks[taskId].data[0]; + GetMonData(&gPlayerParty[pkmnIndex], MON_DATA_LEVEL); // Unused return value + bank = gTasks[taskId].data[2]; + gBattleBankFunc[bank] = sub_802D90C; + DestroyTask(taskId); +} + +void sub_802DE10(void) +{ + if (gSprites[gObjectBankIDs[gActiveBank]].pos1.y + gSprites[gObjectBankIDs[gActiveBank]].pos2.y > DISPLAY_HEIGHT) + { + u16 species = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES); + + nullsub_9(species); + FreeOamMatrix(gSprites[gObjectBankIDs[gActiveBank]].oam.matrixNum); + DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); + sub_8043DB0(gHealthboxIDs[gActiveBank]); + PlayerBufferExecCompleted(); + } +} + +void sub_802DEAC(void) +{ + if (!ewram17810[gActiveBank].unk0_6) + { + FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); + DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); + sub_8043DB0(gHealthboxIDs[gActiveBank]); + PlayerBufferExecCompleted(); + } +} + +// Duplicate of sub_802D90C +void sub_802DF18(void) +{ + if (gUnknown_03004210.state == 0) + PlayerBufferExecCompleted(); +} + +void sub_802DF30(void) +{ + if (!gPaletteFade.active) + { + u8 r4; + + gBattleBankFunc[gActiveBank] = sub_802DF88; + r4 = gTasks[gUnknown_0300434C[gActiveBank]].data[0]; + DestroyTask(gUnknown_0300434C[gActiveBank]); + sub_8094E20(r4); + } +} + +void sub_802DF88(void) +{ + if (gMain.callback2 == sub_800F808 && !gPaletteFade.active) + { + if (gUnknown_0202E8F4 == 1) + dp01_build_cmdbuf_x22_a_three_bytes(1, gUnknown_0202E8F5, gUnknown_02038470); + else + dp01_build_cmdbuf_x22_a_three_bytes(1, 6, NULL); + if ((gBattleBufferA[gActiveBank][1] & 0xF) == 1) + b_link_standby_message(); + PlayerBufferExecCompleted(); + } +} + +void sub_802E004(void) +{ + if (!gPaletteFade.active) + { + gBattleBankFunc[gActiveBank] = sub_802E03C; + nullsub_14(); + sub_80A6DCC(); + } +} + +void sub_802E03C(void) +{ + if (gMain.callback2 == sub_800F808 && !gPaletteFade.active) + { + dp01_build_cmdbuf_x23_aa_0(1, gScriptItemId); + PlayerBufferExecCompleted(); + } +} + +void bx_wait_t1(void) +{ + if (!gDoingBattleAnim || !ewram17810[gActiveBank].unk0_6) + PlayerBufferExecCompleted(); +} + +void bx_blink_t1(void) +{ + u8 spriteId = gObjectBankIDs[gActiveBank]; + + if (gSprites[spriteId].data1 == 32) + { + gSprites[spriteId].data1 = 0; + gSprites[spriteId].invisible = FALSE; + gDoingBattleAnim = 0; + PlayerBufferExecCompleted(); + } + else + { + if (((u16)gSprites[spriteId].data1 % 4) == 0) + gSprites[spriteId].invisible ^= 1; + gSprites[spriteId].data1++; + } +} + +void sub_802E12C(s32 a, const u8 *b) +{ + struct UnknownStruct1 *r4 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4]; + + StringCopy(gDisplayedStringBattle, b); + StringAppend(gDisplayedStringBattle, gMoveNames[r4->moves[a]]); + InitWindow( + &gUnknown_03004210, + gDisplayedStringBattle, + 0x300 + a * 20, + (a & 1) ? 11 : 1, + (a < 2) ? 0x37 : 0x39); + sub_8002F44(&gUnknown_03004210); +} + +void sub_802E1B0(void) +{ + struct UnknownStruct1 *r4 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4]; + s32 i; + + gUnknown_03004348 = 0; + FillWindowRect(&gUnknown_03004210, 0x1016, 1, 0x37, 0x14, 0x3A); + for (i = 0; i < 4; i++) + { + nullsub_7(i); + sub_802E12C(i, gUnknown_08400D49); + if (r4->moves[i] != 0) + gUnknown_03004348++; + } +} -- cgit v1.2.3 From e9ec2a1a561d3041b8df2cb512a0e03ff5bca74b Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 17 Aug 2017 21:05:59 +0200 Subject: start decompiling battle transition --- asm/battle_tower.s | 2 +- asm/battle_transition.s | 923 ++++---------------------------------------- data/battle_transition.s | 122 +++--- include/battle_transition.h | 4 +- include/rom4.h | 2 +- ld_script.txt | 1 + src/battle_setup.c | 4 +- src/battle_transition.c | 302 +++++++++++++++ 8 files changed, 451 insertions(+), 909 deletions(-) create mode 100644 src/battle_transition.c diff --git a/asm/battle_tower.s b/asm/battle_tower.s index 15cb95854..3f019e1ea 100644 --- a/asm/battle_tower.s +++ b/asm/battle_tower.s @@ -2082,7 +2082,7 @@ sub_8135534: @ 8135534 push {r4,lr} lsls r0, 24 lsrs r4, r0, 24 - bl sub_811AAE8 + bl IsBattleTransitionDone lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 diff --git a/asm/battle_transition.s b/asm/battle_transition.s index a4b4d1666..207b4013f 100644 --- a/asm/battle_transition.s +++ b/asm/battle_transition.s @@ -6,774 +6,11 @@ .text - thumb_func_start sub_811AABC -sub_811AABC: @ 811AABC - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0811AAD0 @ =gMain - ldr r1, _0811AAD4 @ =sub_8054398 - str r1, [r2, 0x4] - bl sub_811AB20 - pop {r0} - bx r0 - .align 2, 0 -_0811AAD0: .4byte gMain -_0811AAD4: .4byte sub_8054398 - thumb_func_end sub_811AABC - - thumb_func_start sub_811AAD8 -sub_811AAD8: @ 811AAD8 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl sub_811AB20 - pop {r0} - bx r0 - thumb_func_end sub_811AAD8 - - thumb_func_start sub_811AAE8 -sub_811AAE8: @ 811AAE8 - push {lr} - ldr r0, _0811AB0C @ =sub_811AB50 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r2, r0, 24 - ldr r1, _0811AB10 @ =gTasks - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r0, r1 - movs r1, 0x26 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _0811AB14 - movs r0, 0 - b _0811AB1C - .align 2, 0 -_0811AB0C: .4byte sub_811AB50 -_0811AB10: .4byte gTasks -_0811AB14: - adds r0, r2, 0 - bl DestroyTask - movs r0, 0x1 -_0811AB1C: - pop {r1} - bx r1 - thumb_func_end sub_811AAE8 - - thumb_func_start sub_811AB20 -sub_811AB20: @ 811AB20 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _0811AB48 @ =sub_811AB50 - movs r1, 0x2 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0811AB4C @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - strh r4, [r1, 0xA] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0811AB48: .4byte sub_811AB50 -_0811AB4C: .4byte gTasks - thumb_func_end sub_811AB20 - - thumb_func_start sub_811AB50 -sub_811AB50: @ 811AB50 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _0811AB80 @ =gUnknown_083FD794 - ldr r2, _0811AB84 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_0811AB62: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _0811AB62 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0811AB80: .4byte gUnknown_083FD794 -_0811AB84: .4byte gTasks - thumb_func_end sub_811AB50 - - thumb_func_start sub_811AB88 -sub_811AB88: @ 811AB88 - push {r4,lr} - adds r4, r0, 0 - bl sub_807DE10 - ldr r0, _0811ABB4 @ =gPlttBufferFaded - ldr r1, _0811ABB8 @ =gPlttBufferUnfaded - ldr r2, _0811ABBC @ =0x04000100 - bl CpuSet - ldr r1, _0811ABC0 @ =gUnknown_083FD70C - movs r2, 0xA - ldrsh r0, [r4, r2] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - cmp r0, 0 - bne _0811ABC4 - movs r0, 0x2 - strh r0, [r4, 0x8] - movs r0, 0x1 - b _0811ABD2 - .align 2, 0 -_0811ABB4: .4byte gPlttBufferFaded -_0811ABB8: .4byte gPlttBufferUnfaded -_0811ABBC: .4byte 0x04000100 -_0811ABC0: .4byte gUnknown_083FD70C -_0811ABC4: - movs r1, 0x4 - bl CreateTask - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0 -_0811ABD2: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_811AB88 - - thumb_func_start sub_811ABD8 -sub_811ABD8: @ 811ABD8 - push {r4,lr} - adds r4, r0, 0 - ldr r1, _0811ABF8 @ =gUnknown_083FD70C - movs r2, 0xA - ldrsh r0, [r4, r2] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - beq _0811ABFC - movs r0, 0 - b _0811AC04 - .align 2, 0 -_0811ABF8: .4byte gUnknown_083FD70C -_0811ABFC: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0x1 -_0811AC04: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_811ABD8 - - thumb_func_start sub_811AC0C -sub_811AC0C: @ 811AC0C - push {r4,lr} - adds r4, r0, 0 - ldr r1, _0811AC30 @ =gBattleTransitionFuncs - movs r2, 0xA - ldrsh r0, [r4, r2] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0 - bl CreateTask - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0811AC30: .4byte gBattleTransitionFuncs - thumb_func_end sub_811AC0C - - thumb_func_start sub_811AC34 -sub_811AC34: @ 811AC34 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0 - strh r0, [r4, 0x26] - ldr r1, _0811AC60 @ =gBattleTransitionFuncs - movs r2, 0xA - ldrsh r0, [r4, r2] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - bne _0811AC58 - movs r0, 0x1 - strh r0, [r4, 0x26] -_0811AC58: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0811AC60: .4byte gBattleTransitionFuncs - thumb_func_end sub_811AC34 - - thumb_func_start sub_811AC64 -sub_811AC64: @ 811AC64 - push {r4,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - adds r4, r0, 0 - ldr r1, _0811AC98 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r1, r0, r1 - ldrh r2, [r1, 0x8] - movs r3, 0x8 - ldrsh r0, [r1, r3] - cmp r0, 0 - bne _0811AC9C - adds r0, r2, 0x1 - strh r0, [r1, 0x8] - movs r0, 0x2 - str r0, [sp] - movs r0, 0 - movs r1, 0 - movs r2, 0x3 - movs r3, 0x2 - bl sub_811D4C8 - b _0811ACAC - .align 2, 0 -_0811AC98: .4byte gTasks -_0811AC9C: - bl sub_811D52C - lsls r0, 24 - cmp r0, 0 - beq _0811ACAC - adds r0, r4, 0 - bl DestroyTask -_0811ACAC: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_811AC64 - - thumb_func_start sub_811ACB4 -sub_811ACB4: @ 811ACB4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _0811ACE4 @ =gUnknown_083FD7A4 - ldr r2, _0811ACE8 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_0811ACC6: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _0811ACC6 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0811ACE4: .4byte gUnknown_083FD7A4 -_0811ACE8: .4byte gTasks - thumb_func_end sub_811ACB4 - - thumb_func_start sub_811ACEC -sub_811ACEC: @ 811ACEC - ldr r2, _0811AD18 @ =REG_MOSAIC - movs r1, 0 - strh r1, [r2] - subs r2, 0x42 - ldrh r1, [r2] - movs r3, 0x40 - orrs r1, r3 - strh r1, [r2] - adds r2, 0x2 - ldrh r1, [r2] - orrs r1, r3 - strh r1, [r2] - adds r2, 0x2 - ldrh r1, [r2] - orrs r1, r3 - strh r1, [r2] - ldrh r1, [r0, 0x8] - adds r1, 0x1 - strh r1, [r0, 0x8] - movs r0, 0x1 - bx lr - .align 2, 0 -_0811AD18: .4byte REG_MOSAIC - thumb_func_end sub_811ACEC - - thumb_func_start sub_811AD1C -sub_811AD1C: @ 811AD1C - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - ldrh r0, [r4, 0xA] - movs r1, 0xA - ldrsh r2, [r4, r1] - cmp r2, 0 - beq _0811AD32 - subs r0, 0x1 - strh r0, [r4, 0xA] - b _0811AD70 -_0811AD32: - movs r0, 0x4 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xA - bne _0811AD54 - movs r1, 0x1 - negs r1, r1 - str r2, [sp] - adds r0, r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade -_0811AD54: - ldr r2, _0811AD7C @ =REG_MOSAIC - ldrh r0, [r4, 0xC] - movs r1, 0xF - ands r1, r0 - lsls r0, r1, 4 - adds r0, r1 - strh r0, [r2] - movs r1, 0xC - ldrsh r0, [r4, r1] - cmp r0, 0xE - ble _0811AD70 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_0811AD70: - movs r0, 0 - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0811AD7C: .4byte REG_MOSAIC - thumb_func_end sub_811AD1C - - thumb_func_start sub_811AD80 -sub_811AD80: @ 811AD80 - push {lr} - ldr r0, _0811ADA4 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0811AD9C - ldr r0, _0811ADA8 @ =sub_811ACB4 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_0811AD9C: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_0811ADA4: .4byte gPaletteFade -_0811ADA8: .4byte sub_811ACB4 - thumb_func_end sub_811AD80 - - thumb_func_start sub_811ADAC -sub_811ADAC: @ 811ADAC - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _0811ADDC @ =gUnknown_083FD7B0 - ldr r2, _0811ADE0 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_0811ADBE: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _0811ADBE - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0811ADDC: .4byte gUnknown_083FD7B0 -_0811ADE0: .4byte gTasks - thumb_func_end sub_811ADAC - - thumb_func_start sub_811ADE4 -sub_811ADE4: @ 811ADE4 - push {r4,r5,lr} - sub sp, 0x8 - adds r5, r0, 0 - bl sub_811D658 - bl dp12_8087EA4 - movs r0, 0x1 - negs r0, r0 - movs r4, 0 - str r4, [sp] - movs r1, 0x4 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _0811AE54 @ =gUnknown_03005560 - ldr r1, _0811AE58 @ =0x0200c000 - movs r2, 0x14 - ldrsh r1, [r1, r2] - str r4, [sp] - movs r2, 0xA0 - str r2, [sp, 0x4] - movs r2, 0 - movs r3, 0x2 - bl sub_811D6E8 - ldr r0, _0811AE5C @ =sub_811AEE0 - bl SetVBlankCallback - ldr r0, _0811AE60 @ =sub_811AF18 - bl SetHBlankCallback - ldr r3, _0811AE64 @ =0x04000208 - ldrh r2, [r3] - strh r4, [r3] - ldr r4, _0811AE68 @ =0x04000200 - ldrh r0, [r4] - movs r1, 0x3 - orrs r0, r1 - strh r0, [r4] - strh r2, [r3] - ldr r2, _0811AE6C @ =REG_DISPSTAT - ldrh r0, [r2] - movs r1, 0x18 - orrs r0, r1 - strh r0, [r2] - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - movs r0, 0 - add sp, 0x8 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0811AE54: .4byte gUnknown_03005560 -_0811AE58: .4byte 0x0200c000 -_0811AE5C: .4byte sub_811AEE0 -_0811AE60: .4byte sub_811AF18 -_0811AE64: .4byte 0x04000208 -_0811AE68: .4byte 0x04000200 -_0811AE6C: .4byte REG_DISPSTAT - thumb_func_end sub_811ADE4 - - thumb_func_start sub_811AE70 -sub_811AE70: @ 811AE70 - push {r4,r5,lr} - sub sp, 0x8 - ldr r4, _0811AED0 @ =0x0200c000 - ldrb r1, [r4] - movs r1, 0 - strb r1, [r4] - ldrh r1, [r0, 0xA] - adds r1, 0x4 - strh r1, [r0, 0xA] - ldrh r1, [r0, 0xC] - adds r1, 0x8 - strh r1, [r0, 0xC] - ldr r3, _0811AED4 @ =gUnknown_03004DE0 - movs r2, 0x14 - ldrsh r1, [r4, r2] - movs r5, 0xA - ldrsh r2, [r0, r5] - movs r5, 0xC - ldrsh r0, [r0, r5] - str r0, [sp] - movs r0, 0xA0 - str r0, [sp, 0x4] - adds r0, r3, 0 - movs r3, 0x2 - bl sub_811D6E8 - ldr r0, _0811AED8 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0811AEBE - ldr r0, _0811AEDC @ =sub_811ADAC - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_0811AEBE: - ldrb r0, [r4] - adds r0, 0x1 - ldrb r1, [r4] - strb r0, [r4] - movs r0, 0 - add sp, 0x8 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0811AED0: .4byte 0x0200c000 -_0811AED4: .4byte gUnknown_03004DE0 -_0811AED8: .4byte gPaletteFade -_0811AEDC: .4byte sub_811ADAC - thumb_func_end sub_811AE70 - - thumb_func_start sub_811AEE0 -sub_811AEE0: @ 811AEE0 - push {lr} - bl sub_811D67C - ldr r0, _0811AF08 @ =0x0200c000 - ldrb r0, [r0] - cmp r0, 0 - beq _0811AF02 - ldr r1, _0811AF0C @ =0x040000d4 - ldr r0, _0811AF10 @ =gUnknown_03004DE0 - str r0, [r1] - movs r2, 0xF0 - lsls r2, 3 - adds r0, r2 - str r0, [r1, 0x4] - ldr r0, _0811AF14 @ =0x800000a0 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] -_0811AF02: - pop {r0} - bx r0 - .align 2, 0 -_0811AF08: .4byte 0x0200c000 -_0811AF0C: .4byte 0x040000d4 -_0811AF10: .4byte gUnknown_03004DE0 -_0811AF14: .4byte 0x800000a0 - thumb_func_end sub_811AEE0 - - thumb_func_start sub_811AF18 -sub_811AF18: @ 811AF18 - ldr r1, _0811AF38 @ =gUnknown_03004DE0 - ldr r0, _0811AF3C @ =REG_VCOUNT - ldrh r0, [r0] - lsls r0, 1 - movs r2, 0xF0 - lsls r2, 3 - adds r1, r2 - adds r0, r1 - ldrh r1, [r0] - ldr r0, _0811AF40 @ =REG_BG1HOFS - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - bx lr - .align 2, 0 -_0811AF38: .4byte gUnknown_03004DE0 -_0811AF3C: .4byte REG_VCOUNT -_0811AF40: .4byte REG_BG1HOFS - thumb_func_end sub_811AF18 - - thumb_func_start sub_811AF44 -sub_811AF44: @ 811AF44 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _0811AF74 @ =gUnknown_083FD7B8 - ldr r2, _0811AF78 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_0811AF56: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _0811AF56 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0811AF74: .4byte gUnknown_083FD7B8 -_0811AF78: .4byte gTasks - thumb_func_end sub_811AF44 - - thumb_func_start sub_811AF7C -sub_811AF7C: @ 811AF7C - push {r4,r5,lr} - sub sp, 0x4 - adds r5, r0, 0 - bl sub_811D658 - bl dp12_8087EA4 - movs r0, 0x1 - negs r0, r0 - movs r4, 0 - str r4, [sp] - movs r1, 0x4 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r1, _0811AFE4 @ =0x0200c000 - ldr r0, _0811AFE8 @ =gUnknown_03005560 - movs r2, 0x16 - ldrsh r1, [r1, r2] - movs r2, 0xA0 - lsls r2, 1 - bl memset - ldr r0, _0811AFEC @ =sub_811B08C - bl SetVBlankCallback - ldr r0, _0811AFF0 @ =sub_811B0C4 - bl SetHBlankCallback - ldr r3, _0811AFF4 @ =0x04000208 - ldrh r2, [r3] - strh r4, [r3] - ldr r4, _0811AFF8 @ =0x04000200 - ldrh r0, [r4] - movs r1, 0x3 - orrs r0, r1 - strh r0, [r4] - strh r2, [r3] - ldr r2, _0811AFFC @ =REG_DISPSTAT - ldrh r0, [r2] - movs r1, 0x18 - orrs r0, r1 - strh r0, [r2] - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - movs r0, 0 - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0811AFE4: .4byte 0x0200c000 -_0811AFE8: .4byte gUnknown_03005560 -_0811AFEC: .4byte sub_811B08C -_0811AFF0: .4byte sub_811B0C4 -_0811AFF4: .4byte 0x04000208 -_0811AFF8: .4byte 0x04000200 -_0811AFFC: .4byte REG_DISPSTAT - thumb_func_end sub_811AF7C - - thumb_func_start sub_811B000 -sub_811B000: @ 811B000 - push {r4-r7,lr} - ldr r2, _0811B07C @ =0x0200c000 - ldrb r1, [r2] - movs r1, 0 - strb r1, [r2] - ldrh r4, [r0, 0xA] - ldrh r2, [r0, 0xC] - lsls r3, r2, 16 - asrs r3, 24 - movs r5, 0x84 - lsls r5, 5 - adds r1, r4, r5 - strh r1, [r0, 0xA] - movs r1, 0xC0 - lsls r1, 1 - adds r2, r1 - strh r2, [r0, 0xC] - movs r5, 0 - lsls r7, r3, 16 -_0811B026: - lsrs r0, r4, 8 - asrs r1, r7, 16 - bl Sin - ldr r2, _0811B080 @ =gUnknown_03004DE0 - lsls r1, r5, 1 - adds r1, r2 - ldr r6, _0811B07C @ =0x0200c000 - ldrh r2, [r6, 0x16] - adds r0, r2 - strh r0, [r1] - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - movs r1, 0x84 - lsls r1, 5 - adds r0, r4, r1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r5, 0x9F - bls _0811B026 - ldr r0, _0811B084 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0811B06A - ldr r0, _0811B088 @ =sub_811AF44 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_0811B06A: - ldrb r0, [r6] - adds r0, 0x1 - ldrb r1, [r6] - strb r0, [r6] - movs r0, 0 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0811B07C: .4byte 0x0200c000 -_0811B080: .4byte gUnknown_03004DE0 -_0811B084: .4byte gPaletteFade -_0811B088: .4byte sub_811AF44 - thumb_func_end sub_811B000 - thumb_func_start sub_811B08C -sub_811B08C: @ 811B08C + thumb_func_start VBlankCB_Phase2_Transition2 +VBlankCB_Phase2_Transition2: @ 811B08C push {lr} - bl sub_811D67C + bl VBlankCB_BattleTransition ldr r0, _0811B0B4 @ =0x0200c000 ldrb r0, [r0] cmp r0, 0 @@ -796,10 +33,10 @@ _0811B0B4: .4byte 0x0200c000 _0811B0B8: .4byte 0x040000d4 _0811B0BC: .4byte gUnknown_03004DE0 _0811B0C0: .4byte 0x800000a0 - thumb_func_end sub_811B08C + thumb_func_end VBlankCB_Phase2_Transition2 - thumb_func_start sub_811B0C4 -sub_811B0C4: @ 811B0C4 + thumb_func_start HBlankCB_Phase2_Transition2 +HBlankCB_Phase2_Transition2: @ 811B0C4 ldr r1, _0811B0E4 @ =gUnknown_03004DE0 ldr r0, _0811B0E8 @ =REG_VCOUNT ldrh r0, [r0] @@ -820,10 +57,10 @@ sub_811B0C4: @ 811B0C4 _0811B0E4: .4byte gUnknown_03004DE0 _0811B0E8: .4byte REG_VCOUNT _0811B0EC: .4byte REG_BG1VOFS - thumb_func_end sub_811B0C4 + thumb_func_end HBlankCB_Phase2_Transition2 - thumb_func_start sub_811B0F0 -sub_811B0F0: @ 811B0F0 + thumb_func_start Phase2Task_Transition3 +Phase2Task_Transition3: @ 811B0F0 push {r4,r5,lr} lsls r0, 24 lsrs r0, 24 @@ -850,7 +87,7 @@ _0811B102: .align 2, 0 _0811B120: .4byte gUnknown_083FD7C0 _0811B124: .4byte gTasks - thumb_func_end sub_811B0F0 + thumb_func_end Phase2Task_Transition3 thumb_func_start sub_811B128 sub_811B128: @ 811B128 @@ -1264,7 +501,7 @@ _0811B426: strh r0, [r1, 0xA] ldrh r0, [r1, 0xA] bl sub_811D6D4 - ldr r0, _0811B4A0 @ =sub_811B0F0 + ldr r0, _0811B4A0 @ =Phase2Task_Transition3 bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -1296,7 +533,7 @@ _0811B490: .4byte gUnknown_03004DE0 _0811B494: .4byte 0x040000b0 _0811B498: .4byte 0x0000c5ff _0811B49C: .4byte 0x00007fff -_0811B4A0: .4byte sub_811B0F0 +_0811B4A0: .4byte Phase2Task_Transition3 _0811B4A4: .4byte sub_811B54C thumb_func_end sub_811B3EC @@ -1313,7 +550,7 @@ sub_811B4A8: @ 811B4A8 ands r0, r2 strh r0, [r1, 0xA] ldrh r0, [r1, 0xA] - bl sub_811D67C + bl VBlankCB_BattleTransition ldr r2, _0811B50C @ =0x0200c000 ldrb r0, [r2] cmp r0, 0 @@ -1399,8 +636,8 @@ _0811B570: .4byte REG_WIN0H _0811B574: .4byte 0xa2400001 thumb_func_end sub_811B54C - thumb_func_start sub_811B578 -sub_811B578: @ 811B578 + thumb_func_start Phase2Task_Transition4 +Phase2Task_Transition4: @ 811B578 push {r4,r5,lr} lsls r0, 24 lsrs r0, 24 @@ -1427,7 +664,7 @@ _0811B58A: .align 2, 0 _0811B5A8: .4byte gUnknown_083FD7D8 _0811B5AC: .4byte gTasks - thumb_func_end sub_811B578 + thumb_func_end Phase2Task_Transition4 thumb_func_start sub_811B5B0 sub_811B5B0: @ 811B5B0 @@ -1543,7 +780,7 @@ sub_811B688: @ 811B688 cmp r0, 0 bne _0811B6A8 bl sub_811D6D4 - ldr r0, _0811B6B0 @ =sub_811B578 + ldr r0, _0811B6B0 @ =Phase2Task_Transition4 bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -1553,7 +790,7 @@ _0811B6A8: pop {r1} bx r1 .align 2, 0 -_0811B6B0: .4byte sub_811B578 +_0811B6B0: .4byte Phase2Task_Transition4 thumb_func_end sub_811B688 thumb_func_start FldEff_Pokeball @@ -1711,8 +948,8 @@ _0811B7E0: .4byte REG_BG0CNT _0811B7E4: .4byte 0x0000f001 thumb_func_end sub_811B720 - thumb_func_start sub_811B7E8 -sub_811B7E8: @ 811B7E8 + thumb_func_start Phase2Task_Transition5 +Phase2Task_Transition5: @ 811B7E8 push {r4,r5,lr} lsls r0, 24 lsrs r0, 24 @@ -1739,7 +976,7 @@ _0811B7FA: .align 2, 0 _0811B818: .4byte gUnknown_083FD7F8 _0811B81C: .4byte gTasks - thumb_func_end sub_811B7E8 + thumb_func_end Phase2Task_Transition5 thumb_func_start sub_811B820 sub_811B820: @ 811B820 @@ -2257,7 +1494,7 @@ sub_811BBEC: @ 811BBEC strh r0, [r1, 0xA] ldrh r0, [r1, 0xA] bl sub_811D6D4 - ldr r0, _0811BC28 @ =sub_811B7E8 + ldr r0, _0811BC28 @ =Phase2Task_Transition5 bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -2269,7 +1506,7 @@ sub_811BBEC: @ 811BBEC _0811BC1C: .4byte 0x040000b0 _0811BC20: .4byte 0x0000c5ff _0811BC24: .4byte 0x00007fff -_0811BC28: .4byte sub_811B7E8 +_0811BC28: .4byte Phase2Task_Transition5 thumb_func_end sub_811BBEC thumb_func_start sub_811BC2C @@ -2285,7 +1522,7 @@ sub_811BC2C: @ 811BC2C ands r0, r1 strh r0, [r4, 0xA] ldrh r0, [r4, 0xA] - bl sub_811D67C + bl VBlankCB_BattleTransition ldr r2, _0811BCA0 @ =0x0200c000 ldrb r0, [r2] cmp r0, 0 @@ -2338,8 +1575,8 @@ _0811BCB4: .4byte REG_WIN0H _0811BCB8: .4byte 0xa2400001 thumb_func_end sub_811BC2C - thumb_func_start sub_811BCBC -sub_811BCBC: @ 811BCBC + thumb_func_start Phase2Task_Transition6 +Phase2Task_Transition6: @ 811BCBC push {r4,r5,lr} lsls r0, 24 lsrs r0, 24 @@ -2366,7 +1603,7 @@ _0811BCCE: .align 2, 0 _0811BCEC: .4byte gUnknown_083FD814 _0811BCF0: .4byte gTasks - thumb_func_end sub_811BCBC + thumb_func_end Phase2Task_Transition6 thumb_func_start sub_811BCF4 sub_811BCF4: @ 811BCF4 @@ -2500,7 +1737,7 @@ _0811BDEC: ands r0, r1 cmp r0, 0 bne _0811BE0E - ldr r0, _0811BE38 @ =sub_811BCBC + ldr r0, _0811BE38 @ =Phase2Task_Transition6 bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -2523,13 +1760,13 @@ _0811BE28: .4byte 0x0200c000 _0811BE2C: .4byte 0x1fff0000 _0811BE30: .4byte gUnknown_03004DE0 _0811BE34: .4byte gPaletteFade -_0811BE38: .4byte sub_811BCBC +_0811BE38: .4byte Phase2Task_Transition6 thumb_func_end sub_811BD60 thumb_func_start sub_811BE3C sub_811BE3C: @ 811BE3C push {lr} - bl sub_811D67C + bl VBlankCB_BattleTransition ldr r0, _0811BE64 @ =0x0200c000 ldrb r0, [r0] cmp r0, 0 @@ -2578,8 +1815,8 @@ _0811BE98: .4byte REG_VCOUNT _0811BE9C: .4byte REG_BG1VOFS thumb_func_end sub_811BE74 - thumb_func_start sub_811BEA0 -sub_811BEA0: @ 811BEA0 + thumb_func_start Phase2Task_Transition7 +Phase2Task_Transition7: @ 811BEA0 push {r4,r5,lr} lsls r0, 24 lsrs r0, 24 @@ -2606,7 +1843,7 @@ _0811BEB2: .align 2, 0 _0811BED0: .4byte gUnknown_083FD81C _0811BED4: .4byte gTasks - thumb_func_end sub_811BEA0 + thumb_func_end Phase2Task_Transition7 thumb_func_start sub_811BED8 sub_811BED8: @ 811BED8 @@ -2746,7 +1983,7 @@ sub_811BFC4: @ 811BFC4 strh r0, [r1, 0xA] ldrh r0, [r1, 0xA] bl sub_811D6D4 - ldr r0, _0811C000 @ =sub_811BEA0 + ldr r0, _0811C000 @ =Phase2Task_Transition7 bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -2758,7 +1995,7 @@ sub_811BFC4: @ 811BFC4 _0811BFF4: .4byte 0x040000b0 _0811BFF8: .4byte 0x0000c5ff _0811BFFC: .4byte 0x00007fff -_0811C000: .4byte sub_811BEA0 +_0811C000: .4byte Phase2Task_Transition7 thumb_func_end sub_811BFC4 thumb_func_start sub_811C004 @@ -2774,7 +2011,7 @@ sub_811C004: @ 811C004 ands r0, r1 strh r0, [r4, 0xA] ldrh r0, [r4, 0xA] - bl sub_811D67C + bl VBlankCB_BattleTransition ldr r2, _0811C06C @ =0x0200c000 ldrb r0, [r2] cmp r0, 0 @@ -2823,8 +2060,8 @@ _0811C084: .4byte REG_WIN0H _0811C088: .4byte 0xa2400001 thumb_func_end sub_811C004 - thumb_func_start sub_811C08C -sub_811C08C: @ 811C08C + thumb_func_start Phase2Task_Transition12 +Phase2Task_Transition12: @ 811C08C push {lr} lsls r0, 24 lsrs r0, 24 @@ -2840,10 +2077,10 @@ sub_811C08C: @ 811C08C bx r0 .align 2, 0 _0811C0A8: .4byte gTasks - thumb_func_end sub_811C08C + thumb_func_end Phase2Task_Transition12 - thumb_func_start sub_811C0AC -sub_811C0AC: @ 811C0AC + thumb_func_start Phase2Task_Transition13 +Phase2Task_Transition13: @ 811C0AC push {lr} lsls r0, 24 lsrs r0, 24 @@ -2859,10 +2096,10 @@ sub_811C0AC: @ 811C0AC bx r0 .align 2, 0 _0811C0C8: .4byte gTasks - thumb_func_end sub_811C0AC + thumb_func_end Phase2Task_Transition13 - thumb_func_start sub_811C0CC -sub_811C0CC: @ 811C0CC + thumb_func_start Phase2Task_Transition14 +Phase2Task_Transition14: @ 811C0CC push {lr} lsls r0, 24 lsrs r0, 24 @@ -2878,10 +2115,10 @@ sub_811C0CC: @ 811C0CC bx r0 .align 2, 0 _0811C0E8: .4byte gTasks - thumb_func_end sub_811C0CC + thumb_func_end Phase2Task_Transition14 - thumb_func_start sub_811C0EC -sub_811C0EC: @ 811C0EC + thumb_func_start Phase2Task_Transition15 +Phase2Task_Transition15: @ 811C0EC push {lr} lsls r0, 24 lsrs r0, 24 @@ -2897,10 +2134,10 @@ sub_811C0EC: @ 811C0EC bx r0 .align 2, 0 _0811C108: .4byte gTasks - thumb_func_end sub_811C0EC + thumb_func_end Phase2Task_Transition15 - thumb_func_start sub_811C10C -sub_811C10C: @ 811C10C + thumb_func_start Phase2Task_Transition16 +Phase2Task_Transition16: @ 811C10C push {lr} lsls r0, 24 lsrs r0, 24 @@ -2916,7 +2153,7 @@ sub_811C10C: @ 811C10C bx r0 .align 2, 0 _0811C128: .4byte gTasks - thumb_func_end sub_811C10C + thumb_func_end Phase2Task_Transition16 thumb_func_start sub_811C12C sub_811C12C: @ 811C12C @@ -3614,7 +2851,7 @@ sub_811C670: @ 811C670 ands r0, r1 strh r0, [r4, 0xA] ldrh r0, [r4, 0xA] - bl sub_811D67C + bl VBlankCB_BattleTransition ldr r2, _0811C6E0 @ =0x0200c000 ldrb r0, [r2] cmp r0, 0 @@ -3679,7 +2916,7 @@ sub_811C700: @ 811C700 ands r0, r1 strh r0, [r4, 0xA] ldrh r0, [r4, 0xA] - bl sub_811D67C + bl VBlankCB_BattleTransition ldr r2, _0811C75C @ =0x0200c000 ldrb r0, [r2] cmp r0, 0 @@ -4114,8 +3351,8 @@ sub_811CA44: @ 811CA44 _0811CA58: .4byte gSprites thumb_func_end sub_811CA44 - thumb_func_start sub_811CA5C -sub_811CA5C: @ 811CA5C + thumb_func_start Phase2Task_Transition8 +Phase2Task_Transition8: @ 811CA5C push {r4,r5,lr} lsls r0, 24 lsrs r0, 24 @@ -4142,7 +3379,7 @@ _0811CA6E: .align 2, 0 _0811CA8C: .4byte gUnknown_083FD8A4 _0811CA90: .4byte gTasks - thumb_func_end sub_811CA5C + thumb_func_end Phase2Task_Transition8 thumb_func_start sub_811CA94 sub_811CA94: @ 811CA94 @@ -4331,7 +3568,7 @@ sub_811CBE8: @ 811CBE8 strh r0, [r1, 0xA] ldrh r0, [r1, 0xA] bl sub_811D6D4 - ldr r0, _0811CC24 @ =sub_811CA5C + ldr r0, _0811CC24 @ =Phase2Task_Transition8 bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -4343,7 +3580,7 @@ sub_811CBE8: @ 811CBE8 _0811CC18: .4byte 0x040000b0 _0811CC1C: .4byte 0x0000c5ff _0811CC20: .4byte 0x00007fff -_0811CC24: .4byte sub_811CA5C +_0811CC24: .4byte Phase2Task_Transition8 thumb_func_end sub_811CBE8 thumb_func_start sub_811CC28 @@ -4359,7 +3596,7 @@ sub_811CC28: @ 811CC28 ands r0, r1 strh r0, [r4, 0xA] ldrh r0, [r4, 0xA] - bl sub_811D67C + bl VBlankCB_BattleTransition ldr r2, _0811CC90 @ =REG_WININ ldr r1, _0811CC94 @ =0x0200c000 ldrh r0, [r1, 0x2] @@ -4432,8 +3669,8 @@ _0811CCD4: .4byte REG_VCOUNT _0811CCD8: .4byte REG_BG1HOFS thumb_func_end sub_811CCB0 - thumb_func_start sub_811CCDC -sub_811CCDC: @ 811CCDC + thumb_func_start Phase2Task_Transition9 +Phase2Task_Transition9: @ 811CCDC push {r4,r5,lr} lsls r0, 24 lsrs r0, 24 @@ -4460,7 +3697,7 @@ _0811CCEE: .align 2, 0 _0811CD0C: .4byte gUnknown_083FD8B0 _0811CD10: .4byte gTasks - thumb_func_end sub_811CCDC + thumb_func_end Phase2Task_Transition9 thumb_func_start sub_811CD14 sub_811CD14: @ 811CD14 @@ -4673,7 +3910,7 @@ sub_811CEB0: @ 811CEB0 cmp r0, 0x10 bls _0811CED4 bl sub_811D6D4 - ldr r0, _0811CEE0 @ =sub_811CCDC + ldr r0, _0811CEE0 @ =Phase2Task_Transition9 bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -4684,7 +3921,7 @@ _0811CED4: bx r1 .align 2, 0 _0811CEDC: .4byte 0x0200c000 -_0811CEE0: .4byte sub_811CCDC +_0811CEE0: .4byte Phase2Task_Transition9 thumb_func_end sub_811CEB0 thumb_func_start sub_811CEE4 @@ -4700,7 +3937,7 @@ sub_811CEE4: @ 811CEE4 ands r0, r1 strh r0, [r4, 0xA] ldrh r0, [r4, 0xA] - bl sub_811D67C + bl VBlankCB_BattleTransition ldr r2, _0811CF54 @ =REG_BLDCNT ldr r1, _0811CF58 @ =0x0200c000 ldrh r0, [r1, 0xE] @@ -4755,7 +3992,7 @@ _0811CF70: .4byte 0xa2400001 thumb_func_start sub_811CF74 sub_811CF74: @ 811CF74 push {lr} - bl sub_811D67C + bl VBlankCB_BattleTransition ldr r1, _0811CFA4 @ =REG_BLDY ldr r2, _0811CFA8 @ =0x0200c000 ldrh r0, [r2, 0x12] @@ -4928,8 +4165,8 @@ _0811D0B0: .4byte gUnknown_03004DE0 _0811D0B4: .4byte 0x0200c000 thumb_func_end sub_811CFD0 - thumb_func_start sub_811D0B8 -sub_811D0B8: @ 811D0B8 + thumb_func_start Phase2Task_Transition10 +Phase2Task_Transition10: @ 811D0B8 push {r4,r5,lr} lsls r0, 24 lsrs r0, 24 @@ -4956,7 +4193,7 @@ _0811D0CA: .align 2, 0 _0811D0E8: .4byte gUnknown_083FD8D4 _0811D0EC: .4byte gTasks - thumb_func_end sub_811D0B8 + thumb_func_end Phase2Task_Transition10 thumb_func_start sub_811D0F0 sub_811D0F0: @ 811D0F0 @@ -5053,7 +4290,7 @@ sub_811D19C: @ 811D19C cmp r1, 0 bne _0811D1BC bl sub_811D6D4 - ldr r0, _0811D1C4 @ =sub_811D0B8 + ldr r0, _0811D1C4 @ =Phase2Task_Transition10 bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -5063,11 +4300,11 @@ _0811D1BC: pop {r1} bx r1 .align 2, 0 -_0811D1C4: .4byte sub_811D0B8 +_0811D1C4: .4byte Phase2Task_Transition10 thumb_func_end sub_811D19C - thumb_func_start sub_811D1C8 -sub_811D1C8: @ 811D1C8 + thumb_func_start Phase2Task_Transition11 +Phase2Task_Transition11: @ 811D1C8 push {r4,r5,lr} lsls r0, 24 lsrs r0, 24 @@ -5094,7 +4331,7 @@ _0811D1DA: .align 2, 0 _0811D1F8: .4byte gUnknown_083FD8E0 _0811D1FC: .4byte gTasks - thumb_func_end sub_811D1C8 + thumb_func_end Phase2Task_Transition11 thumb_func_start sub_811D200 sub_811D200: @ 811D200 @@ -5342,7 +4579,7 @@ sub_811D3B0: @ 811D3B0 strh r0, [r1, 0xA] ldrh r0, [r1, 0xA] bl sub_811D6D4 - ldr r0, _0811D3F8 @ =sub_811D1C8 + ldr r0, _0811D3F8 @ =Phase2Task_Transition11 bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -5353,7 +4590,7 @@ sub_811D3B0: @ 811D3B0 _0811D3EC: .4byte 0x040000b0 _0811D3F0: .4byte 0x0000c5ff _0811D3F4: .4byte 0x00007fff -_0811D3F8: .4byte sub_811D1C8 +_0811D3F8: .4byte Phase2Task_Transition11 _0811D3FC: ldrh r0, [r2, 0x8] adds r0, 0x1 @@ -5407,7 +4644,7 @@ sub_811D438: @ 811D438 ands r0, r1 strh r0, [r4, 0xA] ldrh r0, [r4, 0xA] - bl sub_811D67C + bl VBlankCB_BattleTransition ldr r2, _0811D4AC @ =0x0200c000 ldrb r0, [r2] cmp r0, 0 @@ -5695,15 +4932,15 @@ _0811D674: .4byte gUnknown_083FD708 _0811D678: .4byte 0x0200c014 thumb_func_end sub_811D658 - thumb_func_start sub_811D67C -sub_811D67C: @ 811D67C + thumb_func_start VBlankCB_BattleTransition +VBlankCB_BattleTransition: @ 811D67C push {lr} bl LoadOam bl ProcessSpriteCopyRequests bl TransferPlttBuffer pop {r0} bx r0 - thumb_func_end sub_811D67C + thumb_func_end VBlankCB_BattleTransition thumb_func_start sub_811D690 sub_811D690: @ 811D690 diff --git a/data/battle_transition.s b/data/battle_transition.s index 0d463ddef..11d3bfe37 100644 --- a/data/battle_transition.s +++ b/data/battle_transition.s @@ -36,67 +36,67 @@ gUnknown_083FD708:: @ 83FD708 .4byte 0x0200c000 .align 2 -gUnknown_083FD70C:: @ 83FD70C - .4byte sub_811AC64 - .4byte sub_811AC64 - .4byte sub_811AC64 - .4byte sub_811AC64 - .4byte sub_811AC64 - .4byte sub_811AC64 - .4byte sub_811AC64 - .4byte sub_811AC64 - .4byte sub_811AC64 - .4byte sub_811AC64 - .4byte sub_811AC64 - .4byte sub_811AC64 - .4byte sub_811AC64 - .4byte sub_811AC64 - .4byte sub_811AC64 - .4byte sub_811AC64 - .4byte sub_811AC64 - - .align 2 -gBattleTransitionFuncs:: @ 83FD750 - .4byte sub_811ACB4 - .4byte sub_811ADAC - .4byte sub_811AF44 - .4byte sub_811B0F0 - .4byte sub_811B578 - .4byte sub_811B7E8 - .4byte sub_811BCBC - .4byte sub_811BEA0 - .4byte sub_811CA5C - .4byte sub_811CCDC - .4byte sub_811D0B8 - .4byte sub_811D1C8 - .4byte sub_811C08C - .4byte sub_811C0AC - .4byte sub_811C0CC - .4byte sub_811C0EC - .4byte sub_811C10C - - .align 2 -gUnknown_083FD794:: @ 83FD794 - .4byte sub_811AB88 - .4byte sub_811ABD8 - .4byte sub_811AC0C - .4byte sub_811AC34 - - .align 2 -gUnknown_083FD7A4:: @ 83FD7A4 - .4byte sub_811ACEC - .4byte sub_811AD1C - .4byte sub_811AD80 - - .align 2 -gUnknown_083FD7B0:: @ 83FD7B0 - .4byte sub_811ADE4 - .4byte sub_811AE70 - - .align 2 -gUnknown_083FD7B8:: @ 83FD7B8 - .4byte sub_811AF7C - .4byte sub_811B000 +sPhase1_Tasks:: @ 83FD70C + .4byte Phase1Task_TransitionAll + .4byte Phase1Task_TransitionAll + .4byte Phase1Task_TransitionAll + .4byte Phase1Task_TransitionAll + .4byte Phase1Task_TransitionAll + .4byte Phase1Task_TransitionAll + .4byte Phase1Task_TransitionAll + .4byte Phase1Task_TransitionAll + .4byte Phase1Task_TransitionAll + .4byte Phase1Task_TransitionAll + .4byte Phase1Task_TransitionAll + .4byte Phase1Task_TransitionAll + .4byte Phase1Task_TransitionAll + .4byte Phase1Task_TransitionAll + .4byte Phase1Task_TransitionAll + .4byte Phase1Task_TransitionAll + .4byte Phase1Task_TransitionAll + + .align 2 +sPhase2_Tasks:: @ 83FD750 + .4byte Phase2Task_Transition0 + .4byte Phase2Task_Transition1 + .4byte Phase2Task_Transition2 + .4byte Phase2Task_Transition3 + .4byte Phase2Task_Transition4 + .4byte Phase2Task_Transition5 + .4byte Phase2Task_Transition6 + .4byte Phase2Task_Transition7 + .4byte Phase2Task_Transition8 + .4byte Phase2Task_Transition9 + .4byte Phase2Task_Transition10 + .4byte Phase2Task_Transition11 + .4byte Phase2Task_Transition12 + .4byte Phase2Task_Transition13 + .4byte Phase2Task_Transition14 + .4byte Phase2Task_Transition15 + .4byte Phase2Task_Transition16 + + .align 2 +sMainTransitionPhases:: @ 83FD794 + .4byte Transition_Phase1 + .4byte Transition_WaitForPhase1 + .4byte Transition_Phase2 + .4byte Transition_WaitForPhase2 + + .align 2 +sPhase2_Transition0_Funcs:: @ 83FD7A4 + .4byte Phase2_Transition0_Func1 + .4byte Phase2_Transition0_Func2 + .4byte Phase2_Transition0_Func3 + + .align 2 +sPhase2_Transition1_Funcs:: @ 83FD7B0 + .4byte Phase2_Transition1_Func1 + .4byte Phase2_Transition1_Func2 + + .align 2 +sPhase2_Transition2_Funcs:: @ 83FD7B8 + .4byte Phase2_Transition2_Func1 + .4byte Phase2_Transition2_Func2 .align 2 gUnknown_083FD7C0:: @ 83FD7C0 diff --git a/include/battle_transition.h b/include/battle_transition.h index b01378505..bc78bd06e 100644 --- a/include/battle_transition.h +++ b/include/battle_transition.h @@ -3,6 +3,8 @@ void sub_811AABC(u8); void sub_811AAD8(u8); -u8 sub_811AAE8(void); +bool8 IsBattleTransitionDone(void); + +#define B_TRANSITION_WILD 8 #endif // GUARD_BATTLE_TRANSITION_H diff --git a/include/rom4.h b/include/rom4.h index 8d5b1bfa2..daccad7e9 100644 --- a/include/rom4.h +++ b/include/rom4.h @@ -120,7 +120,7 @@ bool32 is_c1_link_related_active(void); // c1_overworld_normal // c1_overworld // c2_overworld_basic -// sub_8054398 +void sub_8054398(void); void c2_overworld(void); // set_callback1 // sub_80543DC diff --git a/ld_script.txt b/ld_script.txt index babcf5861..ed18398b2 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -227,6 +227,7 @@ SECTIONS { src/coins.o(.text); src/landmark.o(.text); src/fldeff_strength.o(.text); + src/battle_transition.o(.text); asm/battle_transition.o(.text); src/battle_811DA74.o(.text); asm/battle_message.o(.text); diff --git a/src/battle_setup.c b/src/battle_setup.c index 04674e739..31c127416 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -438,7 +438,7 @@ void task01_battle_start(u8 taskId) } break; case 1: - if (sub_811AAE8() == TRUE) + if (IsBattleTransitionDone() == TRUE) { SetMainCallback2(sub_800E7C4); prev_quest_postbuffer_cursor_backup_reset(); @@ -827,7 +827,7 @@ void CB2_StartFirstBattle(void) UpdatePaletteFade(); RunTasks(); - if (sub_811AAE8() == TRUE) + if (IsBattleTransitionDone() == TRUE) { gBattleTypeFlags = BATTLE_TYPE_FIRST_BATTLE; gMain.savedCallback = HandleFirstBattleEnd; diff --git a/src/battle_transition.c b/src/battle_transition.c new file mode 100644 index 000000000..35d3baf0c --- /dev/null +++ b/src/battle_transition.c @@ -0,0 +1,302 @@ +#include "global.h" +#include "main.h" +#include "rom4.h" +#include "task.h" +#include "palette.h" +#include "trig.h" + +void sub_807DE10(void); +void dp12_8087EA4(void); + +typedef bool8 (*TransitionState)(struct Task* task); + +extern const TransitionState sMainTransitionPhases[]; +extern const TransitionState sPhase2_Transition0_Funcs[]; +extern const TransitionState sPhase2_Transition1_Funcs[]; +extern const TransitionState sPhase2_Transition2_Funcs[]; + +extern const TaskFunc sPhase1_Tasks[]; +extern const TaskFunc sPhase2_Tasks[]; + +extern u8 ewram[]; +extern s16 gUnknown_03005560[]; + +extern u16 gUnknown_03004DE0[][0x3C0]; + +struct TransitionData +{ + vs8 field_0; // now that's interesting + s8 field_1; + s16 field_2; + s16 field_4; + s16 field_6; + s16 field_8; + s16 field_A; + s16 field_C; + s16 field_E; + s16 field_10; + s16 field_12; + s16 field_14; + s16 field_16; + s16 field_18; +}; + +#define TRANSITION_STRUCT (*(struct TransitionData *) (&ewram[0xC000])) + +// this file's functions +static void LaunchBattleTransitionTask(u8 transitionID); +static void Task_BattleTransitionMain(u8 taskID); +void sub_811D4C8(s16 a0, s16 a1, s16 a2, s16 a3, s16 a4); +bool8 sub_811D52C(void); +void sub_811D658(void); +static void VBlankCB_Phase2_Transition1(void); +static void HBlankCB_Phase2_Transition1(void); +void VBlankCB_Phase2_Transition2(void); +void HBlankCB_Phase2_Transition2(void); +void VBlankCB_BattleTransition(void); +void sub_811D6E8(s16* a0, s16 a1, s16 a2, s16 a3, s16 a4, s16 a5); + +void sub_811AABC(u8 transitionID) +{ + gMain.callback2 = sub_8054398; + LaunchBattleTransitionTask(transitionID); +} + +void sub_811AAD8(u8 transitionID) +{ + LaunchBattleTransitionTask(transitionID); +} + +#define tState data[0] +#define tTransitionID data[1] +#define tTransitionDone data[15] + +bool8 IsBattleTransitionDone(void) +{ + u8 taskID = FindTaskIdByFunc(Task_BattleTransitionMain); + if (gTasks[taskID].tTransitionDone) + { + DestroyTask(taskID); + return 1; + } + else + return 0; +} + +static void LaunchBattleTransitionTask(u8 transitionID) +{ + u8 taskID = CreateTask(Task_BattleTransitionMain, 2); + gTasks[taskID].tTransitionID = transitionID; +} + +static void Task_BattleTransitionMain(u8 taskID) +{ + while (sMainTransitionPhases[gTasks[taskID].tState](&gTasks[taskID])); +} + +bool8 Transition_Phase1(struct Task* task) +{ + sub_807DE10(); + CpuSet(gPlttBufferFaded, gPlttBufferUnfaded, 0x4000100); + if (sPhase1_Tasks[task->tTransitionID] != NULL) + { + CreateTask(sPhase1_Tasks[task->tTransitionID], 4); + task->tState++; + return 0; + } + else + { + task->tState = 2; + return 1; + } +} + +bool8 Transition_WaitForPhase1(struct Task* task) +{ + if (FindTaskIdByFunc(sPhase1_Tasks[task->tTransitionID]) == 0xFF) + { + task->tState++; + return 1; + } + else + return 0; +} + +bool8 Transition_Phase2(struct Task* task) +{ + CreateTask(sPhase2_Tasks[task->tTransitionID], 0); + task->tState++; + return 0; +} + +bool8 Transition_WaitForPhase2(struct Task* task) +{ + task->tTransitionDone = 0; + if (FindTaskIdByFunc(sPhase2_Tasks[task->tTransitionID]) == 0xFF) + task->tTransitionDone = 1; + return 0; +} + +void Phase1Task_TransitionAll(u8 taskID) +{ + if (gTasks[taskID].tState == 0) + { + gTasks[taskID].tState++; + sub_811D4C8(0, 0, 3, 2, 2); + } + else if (sub_811D52C()) + DestroyTask(taskID); +} + +void Phase2Task_Transition0(u8 taskID) +{ + while (sPhase2_Transition0_Funcs[gTasks[taskID].tState](&gTasks[taskID])); +} + +bool8 Phase2_Transition0_Func1(struct Task* task) +{ + REG_MOSAIC = 0; + REG_BG1CNT |= 0x40; + REG_BG2CNT |= 0x40; + REG_BG3CNT |= 0x40; + task->tState++; + return 1; +} + +bool8 Phase2_Transition0_Func2(struct Task* task) +{ + if (task->data[1] != 0) + task->data[1]--; + else + { + task->data[1] = 4; + if (++task->data[2] == 10) + BeginNormalPaletteFade(-1, -1, 0, 0x10, 0); + REG_MOSAIC = (task->data[2] & 15) * 17; + if (task->data[2] > 14) + task->tState++; + } + return 0; +} + +bool8 Phase2_Transition0_Func3(struct Task* task) +{ + if (!gPaletteFade.active) + { + u8 taskID = FindTaskIdByFunc(Phase2Task_Transition0); + DestroyTask(taskID); + } + return 0; +} + +void Phase2Task_Transition1(u8 taskID) +{ + while (sPhase2_Transition1_Funcs[gTasks[taskID].tState](&gTasks[taskID])); +} + +bool8 Phase2_Transition1_Func1(struct Task* task) +{ + u16 savedIME; + + sub_811D658(); + dp12_8087EA4(); + BeginNormalPaletteFade(-1, 4, 0, 0x10, 0); + sub_811D6E8(gUnknown_03005560, TRANSITION_STRUCT.field_14, 0, 2, 0, 160); + + SetVBlankCallback(VBlankCB_Phase2_Transition1); + SetHBlankCallback(HBlankCB_Phase2_Transition1); + + savedIME = REG_IME; + REG_IME = 0; + REG_IE |= 3; + REG_IME = savedIME; + REG_DISPSTAT |= 0x18; + + task->tState++; + return 0; +} + +bool8 Phase2_Transition1_Func2(struct Task* task) +{ + TRANSITION_STRUCT.field_0 = 0; + task->data[1] += 4; + task->data[2] += 8; + + sub_811D6E8(gUnknown_03004DE0[0], TRANSITION_STRUCT.field_14, task->data[1], 2, task->data[2], 160); + + if (!gPaletteFade.active) + { + u8 taskID = FindTaskIdByFunc(Phase2Task_Transition1); + DestroyTask(taskID); + } + + TRANSITION_STRUCT.field_0++; + return 0; +} + +static void VBlankCB_Phase2_Transition1(void) +{ + VBlankCB_BattleTransition(); + if (TRANSITION_STRUCT.field_0) + DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320); +} + +static void HBlankCB_Phase2_Transition1(void) +{ + u16 var = gUnknown_03004DE0[1][REG_VCOUNT]; + REG_BG1HOFS = var; + REG_BG2HOFS = var; + REG_BG3HOFS = var; +} + +void Phase2Task_Transition2(u8 taskID) +{ + while (sPhase2_Transition2_Funcs[gTasks[taskID].tState](&gTasks[taskID])); +} + +bool8 Phase2_Transition2_Func1(struct Task* task) +{ + u16 savedIME; + + sub_811D658(); + dp12_8087EA4(); + + BeginNormalPaletteFade(-1, 4, 0, 0x10, 0); + memset(gUnknown_03005560, TRANSITION_STRUCT.field_16, 0x140); + + SetVBlankCallback(VBlankCB_Phase2_Transition2); + SetHBlankCallback(HBlankCB_Phase2_Transition2); + + savedIME = REG_IME; + REG_IME = 0; + REG_IE |= 3; + REG_IME = savedIME; + REG_DISPSTAT |= 0x18; + + task->tState++; + return 0; +} + +bool8 Phase2_Transition2_Func2(struct Task* task) +{ + u8 i; + u16 r3, r4; + + TRANSITION_STRUCT.field_0 = 0; + r4 = task->data[1]; + r3 = task->data[2] >> 8; + task->data[1] += 4224; + task->data[2] += 384; + + for (i = 0; i < 160; i++, r4 += 4224) + { + u16 var = r4 / 256; + gUnknown_03004DE0[0][i] = Sin(var, r3) + TRANSITION_STRUCT.field_16; + } + + if (!gPaletteFade.active) + DestroyTask(FindTaskIdByFunc(Phase2Task_Transition2)); + + TRANSITION_STRUCT.field_0++; + return 0; +} -- cgit v1.2.3 From 6ce3827987f48f4ba13f67d38382decd8206d00d Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Fri, 18 Aug 2017 18:25:44 +0200 Subject: cam fixed a function yay --- src/battle_transition.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/battle_transition.c b/src/battle_transition.c index 35d3baf0c..47adccf21 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -41,7 +41,7 @@ struct TransitionData s16 field_18; }; -#define TRANSITION_STRUCT (*(struct TransitionData *) (&ewram[0xC000])) +#define TRANSITION_STRUCT (*(struct TransitionData *) (ewram + 0xC000)) // this file's functions static void LaunchBattleTransitionTask(u8 transitionID); @@ -291,7 +291,7 @@ bool8 Phase2_Transition2_Func2(struct Task* task) for (i = 0; i < 160; i++, r4 += 4224) { u16 var = r4 / 256; - gUnknown_03004DE0[0][i] = Sin(var, r3) + TRANSITION_STRUCT.field_16; + gUnknown_03004DE0[0][i] = TRANSITION_STRUCT.field_16 + Sin(var, r3); } if (!gPaletteFade.active) -- cgit v1.2.3 From f25425cf7de8da73f371ab587275f45e774070a0 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Fri, 18 Aug 2017 19:42:44 +0200 Subject: started transition3 phase2 --- asm/battle_transition.s | 266 +++-------------------------------------------- data/battle_transition.s | 14 +-- src/battle_transition.c | 90 +++++++++++++++- 3 files changed, 110 insertions(+), 260 deletions(-) diff --git a/asm/battle_transition.s b/asm/battle_transition.s index 207b4013f..1fc26d5e7 100644 --- a/asm/battle_transition.s +++ b/asm/battle_transition.s @@ -7,245 +7,9 @@ .text - thumb_func_start VBlankCB_Phase2_Transition2 -VBlankCB_Phase2_Transition2: @ 811B08C - push {lr} - bl VBlankCB_BattleTransition - ldr r0, _0811B0B4 @ =0x0200c000 - ldrb r0, [r0] - cmp r0, 0 - beq _0811B0AE - ldr r1, _0811B0B8 @ =0x040000d4 - ldr r0, _0811B0BC @ =gUnknown_03004DE0 - str r0, [r1] - movs r2, 0xF0 - lsls r2, 3 - adds r0, r2 - str r0, [r1, 0x4] - ldr r0, _0811B0C0 @ =0x800000a0 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] -_0811B0AE: - pop {r0} - bx r0 - .align 2, 0 -_0811B0B4: .4byte 0x0200c000 -_0811B0B8: .4byte 0x040000d4 -_0811B0BC: .4byte gUnknown_03004DE0 -_0811B0C0: .4byte 0x800000a0 - thumb_func_end VBlankCB_Phase2_Transition2 - - thumb_func_start HBlankCB_Phase2_Transition2 -HBlankCB_Phase2_Transition2: @ 811B0C4 - ldr r1, _0811B0E4 @ =gUnknown_03004DE0 - ldr r0, _0811B0E8 @ =REG_VCOUNT - ldrh r0, [r0] - lsls r0, 1 - movs r2, 0xF0 - lsls r2, 3 - adds r1, r2 - adds r0, r1 - ldrh r1, [r0] - ldr r0, _0811B0EC @ =REG_BG1VOFS - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - bx lr - .align 2, 0 -_0811B0E4: .4byte gUnknown_03004DE0 -_0811B0E8: .4byte REG_VCOUNT -_0811B0EC: .4byte REG_BG1VOFS - thumb_func_end HBlankCB_Phase2_Transition2 - - thumb_func_start Phase2Task_Transition3 -Phase2Task_Transition3: @ 811B0F0 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _0811B120 @ =gUnknown_083FD7C0 - ldr r2, _0811B124 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_0811B102: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _0811B102 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0811B120: .4byte gUnknown_083FD7C0 -_0811B124: .4byte gTasks - thumb_func_end Phase2Task_Transition3 - - thumb_func_start sub_811B128 -sub_811B128: @ 811B128 - push {r4-r6,lr} - sub sp, 0xC - adds r4, r0, 0 - bl sub_811D658 - bl dp12_8087EA4 - movs r2, 0 - movs r3, 0x10 - strh r3, [r4, 0xA] - strh r2, [r4, 0xC] - strh r2, [r4, 0x10] - movs r0, 0x80 - lsls r0, 7 - strh r0, [r4, 0x12] - ldr r1, _0811B1BC @ =0x0200c000 - movs r0, 0x3F - strh r0, [r1, 0x2] - strh r2, [r1, 0x4] - movs r0, 0xF0 - strh r0, [r1, 0x6] - movs r0, 0xA0 - strh r0, [r1, 0x8] - ldr r0, _0811B1C0 @ =0x00003f41 - strh r0, [r1, 0xE] - lsls r3, 8 - strh r3, [r1, 0x10] - movs r1, 0 - add r5, sp, 0x4 - add r6, sp, 0x8 - ldr r3, _0811B1C4 @ =gUnknown_03005560 - movs r2, 0xF0 -_0811B168: - lsls r0, r1, 1 - adds r0, r3 - strh r2, [r0] - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0x9F - bls _0811B168 - ldr r0, _0811B1C8 @ =sub_811B520 - bl SetVBlankCallback - adds r0, r5, 0 - adds r1, r6, 0 - bl sub_811D6A8 - mov r1, sp - movs r0, 0 - strh r0, [r1] - ldr r1, [sp, 0x4] - ldr r2, _0811B1CC @ =0x01000400 - mov r0, sp - bl CpuSet - ldr r0, _0811B1D0 @ =gUnknown_083FBB88 - ldr r1, [sp, 0x8] - movs r2, 0xB0 - lsls r2, 2 - bl CpuSet - ldr r0, _0811B1D4 @ =gFieldEffectObjectPalette10 - movs r1, 0xF0 - movs r2, 0x20 - bl LoadPalette - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0 - add sp, 0xC - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0811B1BC: .4byte 0x0200c000 -_0811B1C0: .4byte 0x00003f41 -_0811B1C4: .4byte gUnknown_03005560 -_0811B1C8: .4byte sub_811B520 -_0811B1CC: .4byte 0x01000400 -_0811B1D0: .4byte gUnknown_083FBB88 -_0811B1D4: .4byte gFieldEffectObjectPalette10 - thumb_func_end sub_811B128 - - thumb_func_start sub_811B1D8 -sub_811B1D8: @ 811B1D8 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x10 - adds r7, r0, 0 - ldr r5, _0811B260 @ =gUnknown_083FDB44 - add r1, sp, 0xC - add r0, sp, 0x8 - bl sub_811D6A8 - movs r1, 0 - ldr r0, [sp, 0x8] - mov r9, r0 - ldr r6, _0811B264 @ =gUnknown_03004DE0 - mov r8, r6 - movs r0, 0xF0 - lsls r0, 8 - mov r12, r0 -_0811B1FE: - movs r0, 0 - lsls r3, r1, 16 - asrs r4, r3, 11 -_0811B204: - lsls r2, r0, 16 - asrs r2, 16 - adds r1, r4, r2 - lsls r1, 1 - add r1, r9 - ldrh r0, [r5] - mov r6, r12 - orrs r0, r6 - strh r0, [r1] - adds r2, 0x1 - lsls r2, 16 - adds r5, 0x2 - lsrs r0, r2, 16 - asrs r2, 16 - cmp r2, 0x1D - ble _0811B204 - movs r1, 0x80 - lsls r1, 9 - adds r0, r3, r1 - lsrs r1, r0, 16 - asrs r0, 16 - cmp r0, 0x13 - ble _0811B1FE - movs r6, 0x10 - ldrsh r2, [r7, r6] - movs r1, 0x12 - ldrsh r0, [r7, r1] - str r0, [sp] - movs r0, 0xA0 - str r0, [sp, 0x4] - mov r0, r8 - movs r1, 0 - movs r3, 0x84 - bl sub_811D6E8 - ldrh r0, [r7, 0x8] - adds r0, 0x1 - strh r0, [r7, 0x8] - movs r0, 0x1 - add sp, 0x10 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0811B260: .4byte gUnknown_083FDB44 -_0811B264: .4byte gUnknown_03004DE0 - thumb_func_end sub_811B1D8 - thumb_func_start sub_811B268 -sub_811B268: @ 811B268 + thumb_func_start Phase2_Transition3_Func3 +Phase2_Transition3_Func3: @ 811B268 push {r4,lr} sub sp, 0x8 adds r2, r0, 0 @@ -316,10 +80,10 @@ _0811B2AE: _0811B2E8: .4byte 0x0200c000 _0811B2EC: .4byte 0xffffff00 _0811B2F0: .4byte gUnknown_03004DE0 - thumb_func_end sub_811B268 + thumb_func_end Phase2_Transition3_Func3 - thumb_func_start sub_811B2F4 -sub_811B2F4: @ 811B2F4 + thumb_func_start Phase2_Transition3_Func4 +Phase2_Transition3_Func4: @ 811B2F4 push {r4,r5,lr} sub sp, 0x8 adds r3, r0, 0 @@ -389,10 +153,10 @@ _0811B338: _0811B374: .4byte 0x0200c000 _0811B378: .4byte 0xffffff00 _0811B37C: .4byte gUnknown_03004DE0 - thumb_func_end sub_811B2F4 + thumb_func_end Phase2_Transition3_Func4 - thumb_func_start sub_811B380 -sub_811B380: @ 811B380 + thumb_func_start Phase2_Transition3_Func5 +Phase2_Transition3_Func5: @ 811B380 push {r4-r7,lr} sub sp, 0x8 adds r4, r0, 0 @@ -445,10 +209,10 @@ _0811B3CE: _0811B3E0: .4byte 0x0200c000 _0811B3E4: .4byte 0xffffff00 _0811B3E8: .4byte gUnknown_03004DE0 - thumb_func_end sub_811B380 + thumb_func_end Phase2_Transition3_Func5 - thumb_func_start sub_811B3EC -sub_811B3EC: @ 811B3EC + thumb_func_start Phase2_Transition3_Func6 +Phase2_Transition3_Func6: @ 811B3EC push {r4,lr} adds r4, r0, 0 ldr r0, _0811B488 @ =0x0200c000 @@ -535,7 +299,7 @@ _0811B498: .4byte 0x0000c5ff _0811B49C: .4byte 0x00007fff _0811B4A0: .4byte Phase2Task_Transition3 _0811B4A4: .4byte sub_811B54C - thumb_func_end sub_811B3EC + thumb_func_end Phase2_Transition3_Func6 thumb_func_start sub_811B4A8 sub_811B4A8: @ 811B4A8 @@ -594,8 +358,8 @@ _0811B518: .4byte 0x800000a0 _0811B51C: .4byte REG_WININ thumb_func_end sub_811B4A8 - thumb_func_start sub_811B520 -sub_811B520: @ 811B520 + thumb_func_start VBlankCB_Phase2_Transition3 +VBlankCB_Phase2_Transition3: @ 811B520 push {lr} bl sub_811B4A8 ldr r1, _0811B53C @ =0x040000b0 @@ -613,7 +377,7 @@ _0811B53C: .4byte 0x040000b0 _0811B540: .4byte gUnknown_03005560 _0811B544: .4byte REG_BG0HOFS _0811B548: .4byte 0xa2400001 - thumb_func_end sub_811B520 + thumb_func_end VBlankCB_Phase2_Transition3 thumb_func_start sub_811B54C sub_811B54C: @ 811B54C diff --git a/data/battle_transition.s b/data/battle_transition.s index 11d3bfe37..975de2997 100644 --- a/data/battle_transition.s +++ b/data/battle_transition.s @@ -99,13 +99,13 @@ sPhase2_Transition2_Funcs:: @ 83FD7B8 .4byte Phase2_Transition2_Func2 .align 2 -gUnknown_083FD7C0:: @ 83FD7C0 - .4byte sub_811B128 - .4byte sub_811B1D8 - .4byte sub_811B268 - .4byte sub_811B2F4 - .4byte sub_811B380 - .4byte sub_811B3EC +sPhase2_Transition3_Funcs:: @ 83FD7C0 + .4byte Phase2_Transition3_Func1 + .4byte Phase2_Transition3_Func2 + .4byte Phase2_Transition3_Func3 + .4byte Phase2_Transition3_Func4 + .4byte Phase2_Transition3_Func5 + .4byte Phase2_Transition3_Func6 .align 2 gUnknown_083FD7D8:: @ 83FD7D8 diff --git a/src/battle_transition.c b/src/battle_transition.c index 47adccf21..ed6bdf387 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -14,6 +14,7 @@ extern const TransitionState sMainTransitionPhases[]; extern const TransitionState sPhase2_Transition0_Funcs[]; extern const TransitionState sPhase2_Transition1_Funcs[]; extern const TransitionState sPhase2_Transition2_Funcs[]; +extern const TransitionState sPhase2_Transition3_Funcs[]; extern const TaskFunc sPhase1_Tasks[]; extern const TaskFunc sPhase2_Tasks[]; @@ -49,12 +50,16 @@ static void Task_BattleTransitionMain(u8 taskID); void sub_811D4C8(s16 a0, s16 a1, s16 a2, s16 a3, s16 a4); bool8 sub_811D52C(void); void sub_811D658(void); + static void VBlankCB_Phase2_Transition1(void); static void HBlankCB_Phase2_Transition1(void); -void VBlankCB_Phase2_Transition2(void); -void HBlankCB_Phase2_Transition2(void); +static void VBlankCB_Phase2_Transition2(void); +static void HBlankCB_Phase2_Transition2(void); +void VBlankCB_Phase2_Transition3(void); + void VBlankCB_BattleTransition(void); void sub_811D6E8(s16* a0, s16 a1, s16 a2, s16 a3, s16 a4, s16 a5); +void sub_811D6A8(u16** a0, u16** a1); void sub_811AABC(u8 transitionID) { @@ -300,3 +305,84 @@ bool8 Phase2_Transition2_Func2(struct Task* task) TRANSITION_STRUCT.field_0++; return 0; } + +static void VBlankCB_Phase2_Transition2(void) +{ + VBlankCB_BattleTransition(); + if (TRANSITION_STRUCT.field_0) + DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320); +} + +static void HBlankCB_Phase2_Transition2(void) +{ + u16 var = gUnknown_03004DE0[1][REG_VCOUNT]; + REG_BG1VOFS = var; + REG_BG2VOFS = var; + REG_BG3VOFS = var; +} + +void Phase2Task_Transition3(u8 taskID) +{ + while (sPhase2_Transition3_Funcs[gTasks[taskID].tState](&gTasks[taskID])); +} + +extern const u8 gUnknown_083FBB88[]; +extern const u16 gFieldEffectObjectPalette10[]; + +bool8 Phase2_Transition3_Func1(struct Task* task) +{ + u16 i; + u16 *dst1, *dst2; + + sub_811D658(); + dp12_8087EA4(); + + task->data[1] = 16; + task->data[2] = 0; + task->data[4] = 0; + task->data[5] = 0x4000; + TRANSITION_STRUCT.field_2 = 63; + TRANSITION_STRUCT.field_4 = 0; + TRANSITION_STRUCT.field_6 = 240; + TRANSITION_STRUCT.field_8 = 160; + TRANSITION_STRUCT.field_E = 0x3F41; + TRANSITION_STRUCT.field_10 = task->data[1] * 256; // 16 * 256 = 0x1000 + + for (i = 0; i < 160; i++) + { + gUnknown_03005560[i] = 240; + } + + SetVBlankCallback(VBlankCB_Phase2_Transition3); + + sub_811D6A8(&dst1, & dst2); + CpuFill16(0, dst1, 0x800); + CpuSet(gUnknown_083FBB88, dst2, 0x2C0); + LoadPalette(gFieldEffectObjectPalette10, 240, 32); + + task->tState++; + return 0; +} + +extern const u16 gUnknown_083FDB44[]; + +bool8 Phase2_Transition3_Func2(struct Task* task) +{ + s16 i, j; + u16 *dst1, *dst2; + const u16* var; + + var = gUnknown_083FDB44; + sub_811D6A8(&dst1, &dst2); + for (i = 0; i < 20; i++) + { + for (j = 0; j < 30; j++, var++) + { + dst1[i * 32 + j] = *var | 0xF000; + } + } + sub_811D6E8(gUnknown_03004DE0[0], 0, task->data[4], 132, task->data[5], 160); + + task->tState++; + return 1; +} -- cgit v1.2.3 From 3e7bdf4f5fd54676c6f965325ec5b67d3d8b3eef Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Fri, 18 Aug 2017 17:08:36 -0500 Subject: finish decompiling battle_5 --- asm/battle_5.s | 353 --------------------------------------------------------- data/data2b.s | 19 ---- ld_script.txt | 1 - src/battle_5.c | 185 +++++++++++++++++++++++++----- 4 files changed, 155 insertions(+), 403 deletions(-) delete mode 100644 asm/battle_5.s diff --git a/asm/battle_5.s b/asm/battle_5.s deleted file mode 100644 index 0aec7ea78..000000000 --- a/asm/battle_5.s +++ /dev/null @@ -1,353 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_802E220 -sub_802E220: @ 802E220 - push {r4-r6,lr} - sub sp, 0x4 - ldr r4, _0802E2B8 @ =gBattleBufferA - ldr r6, _0802E2BC @ =gActiveBank - ldrb r0, [r6] - lsls r1, r0, 9 - adds r0, r4, 0x2 - adds r0, r1, r0 - ldrb r0, [r0] - cmp r0, 0x1 - beq _0802E2B0 - adds r4, 0x4 - adds r4, r1, r4 - ldr r2, _0802E2C0 @ =gDisplayedStringBattle - ldr r1, _0802E2C4 @ =gUnknown_08400D49 - adds r0, r2, 0 - bl StringCopy - adds r2, r0, 0 - movs r1, 0xFC - strb r1, [r2] - movs r0, 0x11 - strb r0, [r2, 0x1] - movs r0, 0x2 - strb r0, [r2, 0x2] - adds r2, 0x3 - strb r1, [r2] - movs r0, 0x14 - strb r0, [r2, 0x1] - movs r0, 0x6 - strb r0, [r2, 0x2] - adds r2, 0x3 - ldr r5, _0802E2C8 @ =gMoveSelectionCursor - ldrb r1, [r6] - adds r1, r5 - adds r0, r4, 0 - adds r0, 0x8 - ldrb r1, [r1] - adds r0, r1 - ldrb r1, [r0] - adds r0, r2, 0 - movs r2, 0x1 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - adds r2, r0, 0 - movs r0, 0xBA - strb r0, [r2] - adds r2, 0x1 - ldrb r0, [r6] - adds r0, r5 - adds r4, 0xC - ldrb r0, [r0] - adds r4, r0 - ldrb r1, [r4] - adds r0, r2, 0 - movs r2, 0x1 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - ldr r4, _0802E2CC @ =gUnknown_03004210 - ldr r1, _0802E2C0 @ =gDisplayedStringBattle - ldr r2, _0802E2D0 @ =0x000002a2 - movs r0, 0x37 - str r0, [sp] - adds r0, r4, 0 - movs r3, 0x19 - bl InitWindow - adds r0, r4, 0 - bl sub_8002F44 -_0802E2B0: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0802E2B8: .4byte gBattleBufferA -_0802E2BC: .4byte gActiveBank -_0802E2C0: .4byte gDisplayedStringBattle -_0802E2C4: .4byte gUnknown_08400D49 -_0802E2C8: .4byte gMoveSelectionCursor -_0802E2CC: .4byte gUnknown_03004210 -_0802E2D0: .4byte 0x000002a2 - thumb_func_end sub_802E220 - - thumb_func_start sub_802E2D4 -sub_802E2D4: @ 802E2D4 - push {r4,r5,lr} - sub sp, 0x8 - ldr r4, _0802E314 @ =gBattleBufferA - ldr r5, _0802E318 @ =gActiveBank - ldrb r0, [r5] - lsls r1, r0, 9 - adds r0, r4, 0x2 - adds r0, r1, r0 - ldrb r0, [r0] - cmp r0, 0x1 - bne _0802E328 - ldr r4, _0802E31C @ =gUnknown_03004210 - ldr r1, _0802E320 @ =0x00001016 - movs r0, 0x1C - str r0, [sp] - movs r0, 0x3A - str r0, [sp, 0x4] - adds r0, r4, 0 - movs r2, 0x17 - movs r3, 0x37 - bl FillWindowRect - ldr r1, _0802E324 @ =gUnknown_08400D52 - movs r2, 0xA4 - lsls r2, 2 - movs r0, 0x37 - str r0, [sp] - adds r0, r4, 0 - movs r3, 0x13 - bl InitWindow - b _0802E388 - .align 2, 0 -_0802E314: .4byte gBattleBufferA -_0802E318: .4byte gActiveBank -_0802E31C: .4byte gUnknown_03004210 -_0802E320: .4byte 0x00001016 -_0802E324: .4byte gUnknown_08400D52 -_0802E328: - adds r4, 0x4 - adds r4, r1, r4 - ldr r3, _0802E398 @ =gDisplayedStringBattle - ldr r1, _0802E39C @ =gUnknown_08400D49 - adds r0, r3, 0 - bl StringCopy - adds r3, r0, 0 - ldr r2, _0802E3A0 @ =gBattleMoves - ldr r1, _0802E3A4 @ =gMoveSelectionCursor - ldrb r0, [r5] - adds r0, r1 - ldrb r0, [r0] - lsls r0, 1 - adds r4, r0 - ldrh r1, [r4] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x2] - lsls r1, r0, 3 - subs r1, r0 - ldr r0, _0802E3A8 @ =gTypeNames - adds r1, r0 - adds r0, r3, 0 - bl StringCopy - ldr r4, _0802E3AC @ =gUnknown_03004210 - ldr r1, _0802E3B0 @ =0x00001016 - movs r0, 0x1C - str r0, [sp] - movs r0, 0x3A - str r0, [sp, 0x4] - adds r0, r4, 0 - movs r2, 0x17 - movs r3, 0x39 - bl FillWindowRect - ldr r1, _0802E398 @ =gDisplayedStringBattle - movs r2, 0xB0 - lsls r2, 2 - movs r0, 0x39 - str r0, [sp] - adds r0, r4, 0 - movs r3, 0x17 - bl InitWindow -_0802E388: - ldr r0, _0802E3AC @ =gUnknown_03004210 - bl sub_8002F44 - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0802E398: .4byte gDisplayedStringBattle -_0802E39C: .4byte gUnknown_08400D49 -_0802E3A0: .4byte gBattleMoves -_0802E3A4: .4byte gMoveSelectionCursor -_0802E3A8: .4byte gTypeNames -_0802E3AC: .4byte gUnknown_03004210 -_0802E3B0: .4byte 0x00001016 - thumb_func_end sub_802E2D4 - - thumb_func_start sub_802E3B4 -sub_802E3B4: @ 802E3B4 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x48 - bl sub_814A958 - ldr r1, _0802E3DC @ =gUnknown_081FAE89 - lsls r4, 1 - adds r0, r4, r1 - ldrb r0, [r0] - adds r1, 0x1 - adds r4, r1 - ldrb r1, [r4] - bl sub_814A880 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0802E3DC: .4byte gUnknown_081FAE89 - thumb_func_end sub_802E3B4 - - thumb_func_start nullsub_7 -nullsub_7: @ 802E3E0 - bx lr - thumb_func_end nullsub_7 - - thumb_func_start sub_802E3E4 -sub_802E3E4: @ 802E3E4 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x2A - bl sub_814A958 - ldr r1, _0802E40C @ =gUnknown_081FAE91 - lsls r4, 1 - adds r0, r4, r1 - ldrb r0, [r0] - adds r1, 0x1 - adds r4, r1 - ldrb r1, [r4] - bl sub_814A880 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0802E40C: .4byte gUnknown_081FAE91 - thumb_func_end sub_802E3E4 - - thumb_func_start nullsub_8 -nullsub_8: @ 802E410 - bx lr - thumb_func_end nullsub_8 - - thumb_func_start sub_802E414 -sub_802E414: @ 802E414 - push {lr} - ldr r0, _0802E420 @ =ReshowBattleScreenAfterMenu - bl SetMainCallback2 - pop {r0} - bx r0 - .align 2, 0 -_0802E420: .4byte ReshowBattleScreenAfterMenu - thumb_func_end sub_802E414 - - thumb_func_start sub_802E424 -sub_802E424: @ 802E424 - push {lr} - ldr r0, _0802E430 @ =ReshowBattleScreenAfterMenu - bl SetMainCallback2 - pop {r0} - bx r0 - .align 2, 0 -_0802E430: .4byte ReshowBattleScreenAfterMenu - thumb_func_end sub_802E424 - - thumb_func_start sub_802E434 -sub_802E434: @ 802E434 - push {lr} - ldr r0, _0802E458 @ =gActiveBank - ldrb r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - ldr r1, _0802E45C @ =0x02017810 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _0802E452 - bl PlayerBufferExecCompleted -_0802E452: - pop {r0} - bx r0 - .align 2, 0 -_0802E458: .4byte gActiveBank -_0802E45C: .4byte 0x02017810 - thumb_func_end sub_802E434 - - thumb_func_start sub_802E460 -sub_802E460: @ 802E460 - push {lr} - ldr r0, _0802E484 @ =gActiveBank - ldrb r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - ldr r1, _0802E488 @ =0x02017810 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - bne _0802E47E - bl PlayerBufferExecCompleted -_0802E47E: - pop {r0} - bx r0 - .align 2, 0 -_0802E484: .4byte gActiveBank -_0802E488: .4byte 0x02017810 - thumb_func_end sub_802E460 - - thumb_func_start b_link_standby_message -b_link_standby_message: @ 802E48C - push {lr} - sub sp, 0x4 - ldr r0, _0802E4BC @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0802E4B6 - ldr r0, _0802E4C0 @ =gUnknown_030042A4 - movs r1, 0 - strh r1, [r0] - ldr r0, _0802E4C4 @ =gUnknown_030042A0 - strh r1, [r0] - ldr r0, _0802E4C8 @ =gUnknown_03004210 - ldr r1, _0802E4CC @ =gUnknown_08400CE0 - movs r2, 0xF - str r2, [sp] - movs r2, 0x90 - movs r3, 0x2 - bl sub_8002EB0 -_0802E4B6: - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_0802E4BC: .4byte gBattleTypeFlags -_0802E4C0: .4byte gUnknown_030042A4 -_0802E4C4: .4byte gUnknown_030042A0 -_0802E4C8: .4byte gUnknown_03004210 -_0802E4CC: .4byte gUnknown_08400CE0 - thumb_func_end b_link_standby_message - - .align 2, 0 @ Don't pad with nop. diff --git a/data/data2b.s b/data/data2b.s index 4c6996c8f..0387b6699 100644 --- a/data/data2b.s +++ b/data/data2b.s @@ -3,25 +3,6 @@ .section .rodata -gUnknown_081FAE80:: @ 81FAE80 - .string "{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW WHITE LIGHT_BLUE WHITE2}$" - -gUnknown_081FAE89:: @ 81FAE89 - .byte 8, 120 - .byte 88, 120 - .byte 8, 136 - .byte 88, 136 - -gUnknown_081FAE91:: @ 81FAE91 - .byte 144, 120 - .byte 190, 120 - .byte 144, 136 - .byte 190, 136 - .byte 72, 72 - .byte 32, 90 - .byte 80, 80 - .byte 80, 88 - .align 2 gUnknown_081FAEA4:: @ 81FAEA4 obj_tiles gSmokescreenImpactTiles, 0x180, 55019 diff --git a/ld_script.txt b/ld_script.txt index 254b94230..5218e313e 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -56,7 +56,6 @@ SECTIONS { src/battle_3.o(.text); src/battle_4.o(.text); src/battle_5.o(.text); - asm/battle_5.o(.text); src/battle_6.o(.text); src/battle_7.o(.text); src/battle_8.o(.text); diff --git a/src/battle_5.c b/src/battle_5.c index f7dff5e70..c54caae92 100644 --- a/src/battle_5.c +++ b/src/battle_5.c @@ -3,10 +3,12 @@ #include "battle.h" #include "battle_interface.h" #include "item.h" +#include "items.h" #include "link.h" #include "m4a.h" #include "main.h" #include "menu_cursor.h" +#include "moves.h" #include "palette.h" #include "pokemon.h" #include "rom3.h" @@ -46,6 +48,7 @@ extern u8 gUnknown_0202E8F5; extern u8 gUnknown_02038470[]; extern u16 gScriptItemId; extern u8 gDisplayedStringBattle[]; +extern const u8 gUnknown_08400CE0[]; extern void dp11b_obj_instanciate(u8, u8, s8, s8); extern u8 GetBankIdentity(u8); @@ -53,19 +56,13 @@ extern u8 GetBankByPlayerAI(u8); extern void dp11b_obj_free(u8, u8); extern void sub_8010520(struct Sprite *); extern void sub_8010574(struct Sprite *); -extern void nullsub_7(u8); -extern void sub_802E3B4(); -extern void sub_802E220(); -extern void sub_802E2D4(); -extern void sub_802E12C(s32, const u8 *); -extern void sub_802E1B0(void); extern bool8 IsDoubleBattle(); extern void sub_804777C(); extern void sub_8141828(); extern void sub_8094E20(u8); -extern void b_link_standby_message(void); extern void nullsub_14(void); extern void sub_80A6DCC(void); +extern void ReshowBattleScreenAfterMenu(void); void PlayerHandleGetAttributes(void); void sub_802ECF0(void); @@ -188,8 +185,6 @@ void (*const gPlayerBufferCommands[])(void) = nullsub_43, }; -extern const u8 gUnknown_081FAE80[]; - void PlayerBufferRunCommand(void); void sub_802C2EC(void); void sub_802C68C(void); @@ -202,6 +197,13 @@ void sub_802DD10(u8); void sub_802DDC4(u8); void sub_802DF88(void); void sub_802E03C(void); +void sub_802E12C(s32, const u8 *); +void sub_802E1B0(void); +void sub_802E220(void); +void sub_802E2D4(void); +void sub_802E3B4(u8, int); +void nullsub_7(u8); +void b_link_standby_message(void); void nullsub_91(void) { @@ -248,7 +250,7 @@ void bx_0802E404(void) void sub_802C098(void) { - u16 r5 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); + u16 itemId = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); dp11b_obj_instanciate(gActiveBank, 1, 7, 1); dp11b_obj_instanciate(gActiveBank, 0, 7, 1); @@ -275,7 +277,7 @@ void sub_802C098(void) } PlayerBufferExecCompleted(); } - else if (gMain.newKeys & 0x20) + else if (gMain.newKeys & DPAD_LEFT) { if (gActionSelectionCursor[gActiveBank] & 1) { @@ -285,7 +287,7 @@ void sub_802C098(void) sub_802E3E4(gActionSelectionCursor[gActiveBank], 0); } } - else if (gMain.newKeys & 0x10) + else if (gMain.newKeys & DPAD_RIGHT) { if (!(gActionSelectionCursor[gActiveBank] & 1)) { @@ -295,7 +297,7 @@ void sub_802C098(void) sub_802E3E4(gActionSelectionCursor[gActiveBank], 0); } } - else if (gMain.newKeys & 0x40) + else if (gMain.newKeys & DPAD_UP) { if (gActionSelectionCursor[gActiveBank] & 2) { @@ -305,7 +307,7 @@ void sub_802C098(void) sub_802E3E4(gActionSelectionCursor[gActiveBank], 0); } } - else if (gMain.newKeys & 0x80) + else if (gMain.newKeys & DPAD_DOWN) { if (!(gActionSelectionCursor[gActiveBank] & 2)) { @@ -324,9 +326,11 @@ void sub_802C098(void) { if (gBattleBufferA[gActiveBank][1] == 1) { - if (r5 > 12) + // Add item to bag if it is a ball + if (itemId <= ITEM_PREMIER_BALL) + AddBagItem(itemId, 1); + else return; - AddBagItem(r5, 1); } PlaySE(SE_SELECT); dp01_build_cmdbuf_x21_a_bb(1, 12, 0); @@ -334,7 +338,7 @@ void sub_802C098(void) DestroyMenuCursor(); } } - else if (gMain.newKeys & 8) + else if (gMain.newKeys & START_BUTTON) { sub_804454C(); } @@ -487,6 +491,8 @@ struct UnknownStruct1 u8 filler14[0x20-0x14]; }; +const u8 gUnknown_081FAE80[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW WHITE LIGHT_BLUE WHITE2}"); + void sub_802C68C(void) { u32 r8 = 0; @@ -498,8 +504,8 @@ void sub_802C68C(void) PlaySE(SE_SELECT); - if (r6->moves[gMoveSelectionCursor[gActiveBank]] == 0xAE) - r4 = (r6->unk12 != 7 && (r6->unk13 ^ 7)) ? 0x10 : 0; + if (r6->moves[gMoveSelectionCursor[gActiveBank]] == MOVE_CURSE) + r4 = (r6->unk12 != TYPE_GHOST && (r6->unk13 ^ 7)) ? 0x10 : 0; else r4 = gBattleMoves[r6->moves[gMoveSelectionCursor[gActiveBank]]].target; @@ -1079,7 +1085,7 @@ void sub_802DB6C(u8 taskId) s32 r10 = gTasks[taskId].data[1]; //s16? u8 r7 = gTasks[taskId].data[2]; s16 r4; - + r4 = sub_8045C78(r7, gHealthboxIDs[r7], 1, 0); sub_8043DFC(gHealthboxIDs[r7]); if (r4 == -1) @@ -1089,7 +1095,7 @@ void sub_802DB6C(u8 taskId) u32 sp4; u16 r0; u32 sp0; - + m4aSongNumStop(SE_EXP); pkmn = &gPlayerParty[r9]; r4 = GetMonData(pkmn, MON_DATA_LEVEL); @@ -1100,7 +1106,7 @@ void sub_802DB6C(u8 taskId) { u8 r5; u32 asdf; - + SetMonData(pkmn, MON_DATA_EXP, (u8 *)&sp0); CalculateMonStats(pkmn); //r10 -= sp0 - sp4; @@ -1283,7 +1289,7 @@ void sub_802DCB0(u8 taskId) { u8 bank = gTasks[taskId].data[2]; u8 pkmnIndex = gTasks[taskId].data[0]; - + if (IsDoubleBattle() == TRUE && pkmnIndex == gBattlePartyID[bank ^ 2]) bank ^= 2; move_anim_start_t4(bank, bank, bank, 0); @@ -1293,11 +1299,11 @@ void sub_802DCB0(u8 taskId) void sub_802DD10(u8 taskId) { u8 bank = gTasks[taskId].data[2]; - + if (!ewram17810[bank].unk0_6) { u8 pkmnIndex = gTasks[taskId].data[0]; - + GetMonData(&gPlayerParty[pkmnIndex], MON_DATA_LEVEL); // Unused return value if (IsDoubleBattle() == TRUE && pkmnIndex == gBattlePartyID[bank ^ 2]) sub_8045A5C(gHealthboxIDs[bank ^ 2], &gPlayerParty[pkmnIndex], 0); @@ -1312,7 +1318,7 @@ void sub_802DDC4(u8 taskId) u8 pkmnIndex; u8 bank; - pkmnIndex = gTasks[taskId].data[0]; + pkmnIndex = gTasks[taskId].data[0]; GetMonData(&gPlayerParty[pkmnIndex], MON_DATA_LEVEL); // Unused return value bank = gTasks[taskId].data[2]; gBattleBankFunc[bank] = sub_802D90C; @@ -1324,7 +1330,7 @@ void sub_802DE10(void) if (gSprites[gObjectBankIDs[gActiveBank]].pos1.y + gSprites[gObjectBankIDs[gActiveBank]].pos2.y > DISPLAY_HEIGHT) { u16 species = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES); - + nullsub_9(species); FreeOamMatrix(gSprites[gObjectBankIDs[gActiveBank]].oam.matrixNum); DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); @@ -1356,7 +1362,7 @@ void sub_802DF30(void) if (!gPaletteFade.active) { u8 r4; - + gBattleBankFunc[gActiveBank] = sub_802DF88; r4 = gTasks[gUnknown_0300434C[gActiveBank]].data[0]; DestroyTask(gUnknown_0300434C[gActiveBank]); @@ -1425,7 +1431,7 @@ void bx_blink_t1(void) void sub_802E12C(s32 a, const u8 *b) { struct UnknownStruct1 *r4 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4]; - + StringCopy(gDisplayedStringBattle, b); StringAppend(gDisplayedStringBattle, gMoveNames[r4->moves[a]]); InitWindow( @@ -1441,7 +1447,7 @@ void sub_802E1B0(void) { struct UnknownStruct1 *r4 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4]; s32 i; - + gUnknown_03004348 = 0; FillWindowRect(&gUnknown_03004210, 0x1016, 1, 0x37, 0x14, 0x3A); for (i = 0; i < 4; i++) @@ -1452,3 +1458,122 @@ void sub_802E1B0(void) gUnknown_03004348++; } } + +void sub_802E220(void) +{ + if (gBattleBufferA[gActiveBank][2] != 1) + { + struct UnknownStruct1 *r4 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4]; + u8 *str = gDisplayedStringBattle; + + str = StringCopy(str, gUnknown_08400D49); + str[0] = EXT_CTRL_CODE_BEGIN; + str[1] = 0x11; + str[2] = 2; + str += 3; + str[0] = EXT_CTRL_CODE_BEGIN; + str[1] = 0x14; + str[2] = 6; + str += 3; + str = ConvertIntToDecimalStringN(str, r4->pp[gMoveSelectionCursor[gActiveBank]], 1, 2); + *str++ = CHAR_SLASH; + ConvertIntToDecimalStringN(str, r4->unkC[gMoveSelectionCursor[gActiveBank]], 1, 2); + InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 0x2A2, 0x19, 0x37); + sub_8002F44(&gUnknown_03004210); + } +} + +extern const u8 gUnknown_08400D52[]; +extern const u8 gTypeNames[][7]; + +void sub_802E2D4(void) +{ + if (gBattleBufferA[gActiveBank][2] == 1) + { + FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); + InitWindow(&gUnknown_03004210, gUnknown_08400D52, 0x290, 0x13, 0x37); + } + else + { + struct UnknownStruct1 *r4 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4]; + u8 *str = gDisplayedStringBattle; + + str = StringCopy(str, gUnknown_08400D49); + StringCopy(str, gTypeNames[gBattleMoves[r4->moves[gMoveSelectionCursor[gActiveBank]]].type]); + FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x39, 0x1C, 0x3A); + InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 0x2C0, 0x17, 0x39); + } + sub_8002F44(&gUnknown_03004210); +} + +const u8 gUnknown_081FAE89[][2] = +{ + { 8, 120}, + {88, 120}, + { 8, 136}, + {88, 136}, +}; + +const u8 gUnknown_081FAE91[][2] = +{ + {144, 120}, + {190, 120}, + {144, 136}, + {190, 136}, + { 72, 72}, + { 32, 90}, + { 80, 80}, + { 80, 88}, +}; + +void sub_802E3B4(u8 a, int unused) +{ + sub_814A958(0x48); + sub_814A880(gUnknown_081FAE89[a][0], gUnknown_081FAE89[a][1]); +} + +void nullsub_7(u8 a) +{ +} + +void sub_802E3E4(u8 a, int unused) +{ + sub_814A958(0x2A); + sub_814A880(gUnknown_081FAE91[a][0], gUnknown_081FAE91[a][1]); +} + +void nullsub_8(u8 a) +{ +} + +void sub_802E414(void) +{ + SetMainCallback2(ReshowBattleScreenAfterMenu); +} + +void sub_802E424(void) +{ + SetMainCallback2(ReshowBattleScreenAfterMenu); +} + +void sub_802E434(void) +{ + if (!ewram17810[gActiveBank].unk0_4) + PlayerBufferExecCompleted(); +} + +void sub_802E460(void) +{ + if (!ewram17810[gActiveBank].unk0_5) + PlayerBufferExecCompleted(); +} + +void b_link_standby_message(void) +{ + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + gUnknown_030042A4 = 0; + gUnknown_030042A0 = 0; + sub_8002EB0(&gUnknown_03004210, gUnknown_08400CE0, 0x90, 2, 15); + } +} -- cgit v1.2.3 From c66988abb03682f4fe8c79227452501c16110cfe Mon Sep 17 00:00:00 2001 From: Doesnty Date: Fri, 18 Aug 2017 19:25:16 -0500 Subject: match atk19_faint_pokemon (camthesaxman) --- src/battle_4.c | 521 ++++++++++++--------------------------------------------- 1 file changed, 104 insertions(+), 417 deletions(-) diff --git a/src/battle_4.c b/src/battle_4.c index b5f774e6b..1b8f43fcd 100644 --- a/src/battle_4.c +++ b/src/battle_4.c @@ -215,6 +215,11 @@ extern u8 BattleScript_CastformChange[]; extern u8 gUnknown_081D9834[]; extern u8 gUnknown_081D90FC[]; //bs random switchout extern u8 gUnknown_081D95DB[]; //bs payday money give +extern u8 gUnknown_081D8C58[]; +extern u8 gUnknown_081D8C65[]; +extern u8 gUnknown_081D9156[]; +extern u8 gUnknown_081D9468[]; + //useful macros //read via orr @@ -4978,425 +4983,107 @@ static void atk18_status_effect_clear(void) BATTLE_STRUCT->unk16112 = 0; } -//Fuck this, Maybe later -__attribute__((naked)) static void atk19_faint_pokemon(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\ - sub sp, 0x4\n\ - ldr r0, _0801F81C @ =gBattlescriptCurrInstr\n\ - ldr r2, [r0]\n\ - ldrb r1, [r2, 0x2]\n\ - adds r6, r0, 0\n\ - cmp r1, 0\n\ - beq _0801F834\n\ - ldrb r0, [r2, 0x1]\n\ - bl GetBattleBank\n\ - ldr r5, _0801F820 @ =gActiveBank\n\ - strb r0, [r5]\n\ - ldr r2, _0801F824 @ =gHitMarker\n\ - ldr r1, _0801F828 @ =gBitTable\n\ - ldrb r0, [r5]\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldr r1, [r0]\n\ - lsls r1, 28\n\ - ldr r0, [r2]\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0801F7E6\n\ - b _0801FB1C\n\ -_0801F7E6:\n\ - ldr r1, [r6]\n\ - ldrb r4, [r1, 0x3]\n\ - ldrb r0, [r1, 0x4]\n\ - lsls r0, 8\n\ - orrs r4, r0\n\ - ldrb r0, [r1, 0x5]\n\ - lsls r0, 16\n\ - orrs r4, r0\n\ - ldrb r0, [r1, 0x6]\n\ - lsls r0, 24\n\ - orrs r4, r0\n\ - bl b_movescr_stack_pop_cursor\n\ - str r4, [r6]\n\ - ldrb r0, [r5]\n\ - bl GetBankSide\n\ - ldr r1, _0801F82C @ =gSideAffecting\n\ - lsls r0, 24\n\ - lsrs r0, 23\n\ - adds r0, r1\n\ - ldrh r2, [r0]\n\ - ldr r1, _0801F830 @ =0x0000fdff\n\ - ands r1, r2\n\ - strh r1, [r0]\n\ - b _0801FB22\n\ - .align 2, 0\n\ -_0801F81C: .4byte gBattlescriptCurrInstr\n\ -_0801F820: .4byte gActiveBank\n\ -_0801F824: .4byte gHitMarker\n\ -_0801F828: .4byte gBitTable\n\ -_0801F82C: .4byte gSideAffecting\n\ -_0801F830: .4byte 0x0000fdff\n\ -_0801F834:\n\ - ldrb r0, [r2, 0x1]\n\ - cmp r0, 0x1\n\ - bne _0801F85C\n\ - ldr r1, _0801F84C @ =gActiveBank\n\ - ldr r0, _0801F850 @ =gBankAttacker\n\ - ldrb r0, [r0]\n\ - strb r0, [r1]\n\ - ldr r0, _0801F854 @ =gBankTarget\n\ - ldrb r7, [r0]\n\ - ldr r4, _0801F858 @ =gUnknown_081D8C58\n\ - b _0801F86A\n\ - .align 2, 0\n\ -_0801F84C: .4byte gActiveBank\n\ -_0801F850: .4byte gBankAttacker\n\ -_0801F854: .4byte gBankTarget\n\ -_0801F858: .4byte gUnknown_081D8C58\n\ -_0801F85C:\n\ - ldr r1, _0801F954 @ =gActiveBank\n\ - ldr r0, _0801F958 @ =gBankTarget\n\ - ldrb r0, [r0]\n\ - strb r0, [r1]\n\ - ldr r0, _0801F95C @ =gBankAttacker\n\ - ldrb r7, [r0]\n\ - ldr r4, _0801F960 @ =gUnknown_081D8C65\n\ -_0801F86A:\n\ - ldr r0, _0801F964 @ =gAbsentBankFlags\n\ - ldrb r1, [r0]\n\ - ldr r0, _0801F968 @ =gBitTable\n\ - mov r12, r0\n\ - ldr r2, _0801F954 @ =gActiveBank\n\ - mov r8, r2\n\ - ldrb r2, [r2]\n\ - lsls r0, r2, 2\n\ - add r0, r12\n\ - ldr r0, [r0]\n\ - ands r1, r0\n\ - cmp r1, 0\n\ - beq _0801F886\n\ - b _0801FB1C\n\ -_0801F886:\n\ - ldr r3, _0801F96C @ =gBattleMons\n\ - mov r10, r3\n\ - movs r5, 0x58\n\ - mov r9, r5\n\ - mov r0, r9\n\ - muls r0, r2\n\ - add r0, r10\n\ - ldrh r3, [r0, 0x28]\n\ - cmp r3, 0\n\ - beq _0801F89C\n\ - b _0801FB1C\n\ -_0801F89C:\n\ - ldr r2, _0801F970 @ =0x02000000\n\ - lsls r1, r7, 1\n\ - ldr r5, _0801F974 @ =0x000160ac\n\ - adds r0, r1, r5\n\ - adds r0, r2\n\ - strb r3, [r0]\n\ - ldr r0, _0801F978 @ =0x000160ad\n\ - adds r1, r0\n\ - adds r1, r2\n\ - strb r3, [r1]\n\ - lsls r1, r7, 2\n\ - adds r5, 0x54\n\ - adds r0, r1, r5\n\ - adds r0, r2\n\ - strb r3, [r0]\n\ - adds r5, 0x1\n\ - adds r0, r1, r5\n\ - adds r0, r2\n\ - strb r3, [r0]\n\ - adds r5, 0x1\n\ - adds r0, r1, r5\n\ - adds r0, r2\n\ - strb r3, [r0]\n\ - ldr r0, _0801F97C @ =0x00016103\n\ - adds r1, r0\n\ - adds r1, r2\n\ - strb r3, [r1]\n\ - ldr r5, _0801F980 @ =gHitMarker\n\ - mov r1, r8\n\ - ldrb r0, [r1]\n\ - lsls r0, 2\n\ - add r0, r12\n\ - ldr r1, [r0]\n\ - lsls r1, 28\n\ - ldr r0, [r5]\n\ - orrs r0, r1\n\ - str r0, [r5]\n\ - ldr r0, [r6]\n\ - adds r0, 0x7\n\ - bl b_movescr_stack_push\n\ - str r4, [r6]\n\ - mov r2, r8\n\ - ldrb r0, [r2]\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _0801F9B0\n\ - ldr r0, [r5]\n\ - movs r1, 0x80\n\ - lsls r1, 15\n\ - orrs r0, r1\n\ - str r0, [r5]\n\ - ldr r1, _0801F984 @ =gBattleResults\n\ - ldrb r0, [r1]\n\ - cmp r0, 0xFE\n\ - bhi _0801F914\n\ - adds r0, 0x1\n\ - strb r0, [r1]\n\ -_0801F914:\n\ - mov r0, r9\n\ - muls r0, r7\n\ - add r0, r10\n\ - adds r3, r0, 0\n\ - adds r3, 0x2A\n\ - mov r4, r8\n\ - ldrb r2, [r4]\n\ - mov r0, r9\n\ - muls r0, r2\n\ - add r0, r10\n\ - adds r1, r0, 0\n\ - adds r1, 0x2A\n\ - ldrb r0, [r3]\n\ - ldrb r5, [r1]\n\ - cmp r0, r5\n\ - bls _0801F9CC\n\ - ldrb r1, [r1]\n\ - subs r0, r1\n\ - cmp r0, 0x1D\n\ - ble _0801F990\n\ - ldr r1, _0801F988 @ =gBattlePartyID\n\ - lsls r0, r2, 1\n\ - adds r0, r1\n\ - ldrh r1, [r0]\n\ - movs r0, 0x64\n\ - muls r0, r1\n\ - ldr r1, _0801F98C @ =gPlayerParty\n\ - adds r0, r1\n\ - movs r1, 0x8\n\ - bl AdjustFriendship\n\ - b _0801F9CC\n\ - .align 2, 0\n\ -_0801F954: .4byte gActiveBank\n\ -_0801F958: .4byte gBankTarget\n\ -_0801F95C: .4byte gBankAttacker\n\ -_0801F960: .4byte gUnknown_081D8C65\n\ -_0801F964: .4byte gAbsentBankFlags\n\ -_0801F968: .4byte gBitTable\n\ -_0801F96C: .4byte gBattleMons\n\ -_0801F970: .4byte 0x02000000\n\ -_0801F974: .4byte 0x000160ac\n\ -_0801F978: .4byte 0x000160ad\n\ -_0801F97C: .4byte 0x00016103\n\ -_0801F980: .4byte gHitMarker\n\ -_0801F984: .4byte gBattleResults\n\ -_0801F988: .4byte gBattlePartyID\n\ -_0801F98C: .4byte gPlayerParty\n\ -_0801F990:\n\ - ldr r1, _0801F9A8 @ =gBattlePartyID\n\ - lsls r0, r2, 1\n\ - adds r0, r1\n\ - ldrh r1, [r0]\n\ - movs r0, 0x64\n\ - muls r0, r1\n\ - ldr r1, _0801F9AC @ =gPlayerParty\n\ - adds r0, r1\n\ - movs r1, 0x6\n\ - bl AdjustFriendship\n\ - b _0801F9CC\n\ - .align 2, 0\n\ -_0801F9A8: .4byte gBattlePartyID\n\ -_0801F9AC: .4byte gPlayerParty\n\ -_0801F9B0:\n\ - ldr r1, _0801FAE0 @ =gBattleResults\n\ - ldrb r0, [r1, 0x1]\n\ - cmp r0, 0xFE\n\ - bhi _0801F9BC\n\ - adds r0, 0x1\n\ - strb r0, [r1, 0x1]\n\ -_0801F9BC:\n\ - ldr r2, _0801FAE4 @ =gActiveBank\n\ - ldrb r0, [r2]\n\ - mov r3, r9\n\ - muls r3, r0\n\ - adds r0, r3, 0\n\ - add r0, r10\n\ - ldrh r0, [r0]\n\ - strh r0, [r1, 0x20]\n\ -_0801F9CC:\n\ - ldr r0, _0801FAE8 @ =gHitMarker\n\ - ldr r0, [r0]\n\ - movs r1, 0x40\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0801FA02\n\ - ldr r6, _0801FAEC @ =gBattleMons\n\ - ldr r0, _0801FAF0 @ =gBankAttacker\n\ - ldrb r0, [r0]\n\ - movs r5, 0x58\n\ - muls r0, r5\n\ - adds r0, r6\n\ - ldrh r0, [r0, 0x28]\n\ - cmp r0, 0\n\ - beq _0801FA02\n\ - ldr r4, _0801FAF4 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r4]\n\ - bl b_movescr_stack_push\n\ - ldr r1, _0801FAF8 @ =gBattleMoveDamage\n\ - adds r0, r7, 0\n\ - muls r0, r5\n\ - adds r0, r6\n\ - ldrh r0, [r0, 0x28]\n\ - str r0, [r1]\n\ - ldr r0, _0801FAFC @ =gUnknown_081D9156\n\ - str r0, [r4]\n\ -_0801FA02:\n\ - ldr r1, _0801FB00 @ =gStatuses3\n\ - ldr r6, _0801FB04 @ =gBankTarget\n\ - ldrb r0, [r6]\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - movs r1, 0x80\n\ - lsls r1, 7\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0801FA1A\n\ - b _0801FB22\n\ -_0801FA1A:\n\ - ldr r0, _0801FAE8 @ =gHitMarker\n\ - ldr r5, [r0]\n\ - movs r0, 0x80\n\ - lsls r0, 17\n\ - ands r5, r0\n\ - cmp r5, 0\n\ - bne _0801FB22\n\ - ldr r4, _0801FAF0 @ =gBankAttacker\n\ - mov r8, r4\n\ - ldrb r0, [r4]\n\ - bl GetBankSide\n\ - adds r4, r0, 0\n\ - ldrb r0, [r6]\n\ - bl GetBankSide\n\ - lsls r4, 24\n\ - lsls r0, 24\n\ - cmp r4, r0\n\ - beq _0801FB22\n\ - ldr r0, _0801FAEC @ =gBattleMons\n\ - mov r9, r0\n\ - mov r1, r8\n\ - ldrb r2, [r1]\n\ - movs r7, 0x58\n\ - adds r3, r2, 0\n\ - muls r3, r7\n\ - adds r0, r3, r0\n\ - ldrh r0, [r0, 0x28]\n\ - cmp r0, 0\n\ - beq _0801FB22\n\ - ldr r0, _0801FB08 @ =gCurrentMove\n\ - ldrh r0, [r0]\n\ - cmp r0, 0xA5\n\ - beq _0801FB22\n\ - ldr r1, _0801FB0C @ =0x02000000\n\ - ldr r4, _0801FB10 @ =0x0001608c\n\ - adds r0, r2, r4\n\ - adds r0, r1\n\ - ldrb r4, [r0]\n\ - adds r0, r4, r3\n\ - mov r6, r9\n\ - adds r6, 0x24\n\ - adds r0, r6\n\ - strb r5, [r0]\n\ - ldr r5, _0801FAF4 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r5]\n\ - bl b_movescr_stack_push\n\ - ldr r0, _0801FB14 @ =gUnknown_081D9468\n\ - str r0, [r5]\n\ - ldr r5, _0801FAE4 @ =gActiveBank\n\ - mov r1, r8\n\ - ldrb r0, [r1]\n\ - strb r0, [r5]\n\ - adds r1, r4, 0\n\ - adds r1, 0x9\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - ldrb r0, [r5]\n\ - muls r0, r7\n\ - adds r0, r6\n\ - adds r0, r4\n\ - str r0, [sp]\n\ - movs r0, 0\n\ - movs r2, 0\n\ - movs r3, 0x1\n\ - bl EmitSetAttributes\n\ - ldrb r0, [r5]\n\ - bl MarkBufferBankForExecution\n\ - ldr r1, _0801FB18 @ =gBattleTextBuff1\n\ - movs r0, 0xFD\n\ - strb r0, [r1]\n\ - movs r0, 0x2\n\ - strb r0, [r1, 0x1]\n\ - lsls r4, 1\n\ - mov r2, r8\n\ - ldrb r0, [r2]\n\ - muls r0, r7\n\ - adds r0, r4, r0\n\ - mov r2, r9\n\ - adds r2, 0xC\n\ - adds r0, r2\n\ - ldrh r0, [r0]\n\ - strb r0, [r1, 0x2]\n\ - mov r3, r8\n\ - ldrb r0, [r3]\n\ - muls r0, r7\n\ - adds r4, r0\n\ - adds r4, r2\n\ - ldrh r0, [r4]\n\ - lsrs r0, 8\n\ - strb r0, [r1, 0x3]\n\ - movs r0, 0xFF\n\ - strb r0, [r1, 0x4]\n\ - b _0801FB22\n\ - .align 2, 0\n\ -_0801FAE0: .4byte gBattleResults\n\ -_0801FAE4: .4byte gActiveBank\n\ -_0801FAE8: .4byte gHitMarker\n\ -_0801FAEC: .4byte gBattleMons\n\ -_0801FAF0: .4byte gBankAttacker\n\ -_0801FAF4: .4byte gBattlescriptCurrInstr\n\ -_0801FAF8: .4byte gBattleMoveDamage\n\ -_0801FAFC: .4byte gUnknown_081D9156\n\ -_0801FB00: .4byte gStatuses3\n\ -_0801FB04: .4byte gBankTarget\n\ -_0801FB08: .4byte gCurrentMove\n\ -_0801FB0C: .4byte 0x02000000\n\ -_0801FB10: .4byte 0x0001608c\n\ -_0801FB14: .4byte gUnknown_081D9468\n\ -_0801FB18: .4byte gBattleTextBuff1\n\ -_0801FB1C:\n\ - ldr r0, [r6]\n\ - adds r0, 0x7\n\ - str r0, [r6]\n\ -_0801FB22:\n\ - add sp, 0x4\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\ - .syntax divided\n"); + u8 *r4; + + if (gBattlescriptCurrInstr[2] != 0) + { + gActiveBank = GetBattleBank(gBattlescriptCurrInstr[1]); + if (gHitMarker & HITMARKER_FAINTED(gActiveBank)) + { + r4 = BSScriptReadPtr(gBattlescriptCurrInstr + 3); + + b_movescr_stack_pop_cursor(); + gBattlescriptCurrInstr = r4; + gSideAffecting[GetBankSide(gActiveBank)] &= ~SIDE_STATUS_SPIKES_DAMAGED; + } + else + { + gBattlescriptCurrInstr += 7; + } + } + else + { + u8 bank; + + if (gBattlescriptCurrInstr[1] == 1) + { + gActiveBank = gBankAttacker; + bank = gBankTarget; + r4 = gUnknown_081D8C58; + } + else + { + gActiveBank = gBankTarget; + bank = gBankAttacker; + r4 = gUnknown_081D8C65; + } + if (!(gAbsentBankFlags & gBitTable[gActiveBank]) + && gBattleMons[gActiveBank].hp == 0) + { + ewram[0x160AC + bank * 2 + 0] = 0; + ewram[0x160AC + bank * 2 + 1] = 0; + ewram[0x16100 + bank * 4 + 0] = 0; + ewram[0x16100 + bank * 4 + 1] = 0; + ewram[0x16100 + bank * 4 + 2] = 0; + ewram[0x16100 + bank * 4 + 3] = 0; + + gHitMarker |= HITMARKER_FAINTED(gActiveBank); + b_movescr_stack_push(gBattlescriptCurrInstr + 7); + gBattlescriptCurrInstr = r4; + if (GetBankSide(gActiveBank) == 0) + { + gHitMarker |= HITMARKER_x400000; + if (gBattleResults.playerFaintCounter < 0xFF) + gBattleResults.playerFaintCounter++; + if (gBattleMons[bank].level > gBattleMons[gActiveBank].level) + { + if (gBattleMons[bank].level - gBattleMons[gActiveBank].level > 0x1D) + AdjustFriendship(&gPlayerParty[gBattlePartyID[gActiveBank]], 8); + else + AdjustFriendship(&gPlayerParty[gBattlePartyID[gActiveBank]], 6); + } + } + else + { + if (gBattleResults.opponentFaintCounter < 0xFF) + gBattleResults.opponentFaintCounter++; + gBattleResults.lastOpponentSpecies = gBattleMons[gActiveBank].species; + } + if ((gHitMarker & HITMARKER_DESTINYBOND) && gBattleMons[gBankAttacker].hp != 0) + { + b_movescr_stack_push(gBattlescriptCurrInstr); + gBattleMoveDamage = gBattleMons[bank].hp; + gBattlescriptCurrInstr = gUnknown_081D9156; + } + if ((gStatuses3[gBankTarget] & STATUS3_GRUDGE) + && !(gHitMarker & HITMARKER_GRUDGE) + && GetBankSide(gBankAttacker) != GetBankSide(gBankTarget) + && gBattleMons[gBankAttacker].hp != 0 + && gCurrentMove != MOVE_STRUGGLE) + { + u8 moveIndex = ewram[0x1608C + gBankAttacker]; + + gBattleMons[gBankAttacker].pp[moveIndex] = 0; + b_movescr_stack_push(gBattlescriptCurrInstr); + gBattlescriptCurrInstr = gUnknown_081D9468; + gActiveBank = gBankAttacker; + EmitSetAttributes(0, moveIndex + 9, 0, 1, &gBattleMons[gActiveBank].pp[moveIndex]); + MarkBufferBankForExecution(gActiveBank); + + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 2; + gBattleTextBuff1[2] = gBattleMons[gBankAttacker].moves[moveIndex]; + gBattleTextBuff1[3] = gBattleMons[gBankAttacker].moves[moveIndex] >> 8; + gBattleTextBuff1[4] = EOS; + } + } + else + { + gBattlescriptCurrInstr += 7; + } + } } static void atk1A_faint_animation(void) -- cgit v1.2.3 From 2175733e0f2fbbb678ae25afd204fdecfa30080b Mon Sep 17 00:00:00 2001 From: Doesnty Date: Fri, 18 Aug 2017 19:29:21 -0500 Subject: Also put some abominable lines back to how they were --- src/battle_4.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/battle_4.c b/src/battle_4.c index 1b8f43fcd..cf77fe81c 100644 --- a/src/battle_4.c +++ b/src/battle_4.c @@ -5454,12 +5454,13 @@ static void atk23_getexp(void) gBattleBufferB[BATTLE_STRUCT->expGetterBank][0] = 0; if (GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP) && GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL) != 100) { - ((u16*)ewram + 0xB8C0)[0] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MAX_HP); //doesnt match - ((u16*)ewram + 0xB8C0)[1] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_ATK); - ((u16*)ewram + 0xB8C0)[2] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_DEF); - ((u16*)ewram + 0xB8C0)[3] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPD); - ((u16*)ewram + 0xB8C0)[4] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPATK); - ((u16*)ewram + 0xB8C0)[5] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPDEF); + // 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_SPD); + 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); -- cgit v1.2.3 From ba11084ec89d5480eeba516d78bb6980d8e12ee4 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 19 Aug 2017 17:46:21 +0200 Subject: crazy vram shaenigans --- asm/battle_transition.s | 1000 +--------------------------------------------- data/battle_transition.s | 24 +- src/battle_transition.c | 439 +++++++++++++++++++- 3 files changed, 464 insertions(+), 999 deletions(-) diff --git a/asm/battle_transition.s b/asm/battle_transition.s index 1fc26d5e7..0a1a71d7d 100644 --- a/asm/battle_transition.s +++ b/asm/battle_transition.s @@ -8,978 +8,8 @@ - thumb_func_start Phase2_Transition3_Func3 -Phase2_Transition3_Func3: @ 811B268 - push {r4,lr} - sub sp, 0x8 - adds r2, r0, 0 - ldr r1, _0811B2E8 @ =0x0200c000 - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - ldrh r3, [r2, 0xE] - movs r4, 0xE - ldrsh r0, [r2, r4] - adds r4, r1, 0 - cmp r0, 0 - beq _0811B28C - subs r0, r3, 0x1 - strh r0, [r2, 0xE] - lsls r0, 16 - cmp r0, 0 - bne _0811B296 -_0811B28C: - ldrh r0, [r2, 0xC] - adds r0, 0x1 - strh r0, [r2, 0xC] - movs r0, 0x2 - strh r0, [r2, 0xE] -_0811B296: - ldrh r0, [r2, 0xA] - lsls r0, 8 - ldrh r1, [r2, 0xC] - orrs r0, r1 - strh r0, [r4, 0x10] - lsls r1, 16 - asrs r1, 16 - cmp r1, 0xF - ble _0811B2AE - ldrh r0, [r2, 0x8] - adds r0, 0x1 - strh r0, [r2, 0x8] -_0811B2AE: - ldrh r0, [r2, 0x10] - adds r0, 0x8 - strh r0, [r2, 0x10] - ldr r0, _0811B2EC @ =0xffffff00 - adds r1, r0, 0 - ldrh r3, [r2, 0x12] - adds r1, r3 - strh r1, [r2, 0x12] - ldr r0, _0811B2F0 @ =gUnknown_03004DE0 - movs r3, 0x10 - ldrsh r2, [r2, r3] - lsls r1, 16 - asrs r1, 24 - str r1, [sp] - movs r1, 0xA0 - str r1, [sp, 0x4] - movs r1, 0 - movs r3, 0x84 - bl sub_811D6E8 - ldrb r0, [r4] - adds r0, 0x1 - ldrb r1, [r4] - strb r0, [r4] - movs r0, 0 - add sp, 0x8 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0811B2E8: .4byte 0x0200c000 -_0811B2EC: .4byte 0xffffff00 -_0811B2F0: .4byte gUnknown_03004DE0 - thumb_func_end Phase2_Transition3_Func3 - - thumb_func_start Phase2_Transition3_Func4 -Phase2_Transition3_Func4: @ 811B2F4 - push {r4,r5,lr} - sub sp, 0x8 - adds r3, r0, 0 - ldr r1, _0811B374 @ =0x0200c000 - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - ldrh r2, [r3, 0xE] - movs r4, 0xE - ldrsh r0, [r3, r4] - adds r4, r1, 0 - cmp r0, 0 - beq _0811B318 - subs r0, r2, 0x1 - strh r0, [r3, 0xE] - lsls r0, 16 - cmp r0, 0 - bne _0811B322 -_0811B318: - ldrh r0, [r3, 0xA] - subs r0, 0x1 - strh r0, [r3, 0xA] - movs r0, 0x2 - strh r0, [r3, 0xE] -_0811B322: - ldrh r0, [r3, 0xA] - lsls r1, r0, 8 - ldrh r2, [r3, 0xC] - orrs r1, r2 - strh r1, [r4, 0x10] - lsls r0, 16 - cmp r0, 0 - bne _0811B338 - ldrh r0, [r3, 0x8] - adds r0, 0x1 - strh r0, [r3, 0x8] -_0811B338: - ldrh r0, [r3, 0x10] - adds r0, 0x8 - strh r0, [r3, 0x10] - ldr r5, _0811B378 @ =0xffffff00 - adds r1, r5, 0 - ldrh r0, [r3, 0x12] - adds r1, r0 - strh r1, [r3, 0x12] - ldr r0, _0811B37C @ =gUnknown_03004DE0 - movs r5, 0x10 - ldrsh r2, [r3, r5] - lsls r1, 16 - asrs r1, 24 - str r1, [sp] - movs r1, 0xA0 - str r1, [sp, 0x4] - movs r1, 0 - movs r3, 0x84 - bl sub_811D6E8 - ldrb r0, [r4] - adds r0, 0x1 - ldrb r1, [r4] - strb r0, [r4] - movs r0, 0 - add sp, 0x8 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0811B374: .4byte 0x0200c000 -_0811B378: .4byte 0xffffff00 -_0811B37C: .4byte gUnknown_03004DE0 - thumb_func_end Phase2_Transition3_Func4 - - thumb_func_start Phase2_Transition3_Func5 -Phase2_Transition3_Func5: @ 811B380 - push {r4-r7,lr} - sub sp, 0x8 - adds r4, r0, 0 - ldr r5, _0811B3E0 @ =0x0200c000 - ldrb r0, [r5] - movs r7, 0 - strb r7, [r5] - ldrh r0, [r4, 0x10] - adds r0, 0x8 - strh r0, [r4, 0x10] - ldr r0, _0811B3E4 @ =0xffffff00 - adds r1, r0, 0 - ldrh r3, [r4, 0x12] - adds r1, r3 - strh r1, [r4, 0x12] - ldr r0, _0811B3E8 @ =gUnknown_03004DE0 - movs r3, 0x10 - ldrsh r2, [r4, r3] - lsls r1, 16 - asrs r1, 24 - str r1, [sp] - movs r6, 0xA0 - str r6, [sp, 0x4] - movs r1, 0 - movs r3, 0x84 - bl sub_811D6E8 - movs r1, 0x12 - ldrsh r0, [r4, r1] - cmp r0, 0 - bgt _0811B3CE - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - strh r6, [r4, 0xA] - movs r0, 0x80 - lsls r0, 1 - strh r0, [r4, 0xC] - strh r7, [r4, 0xE] -_0811B3CE: - ldrb r0, [r5] - adds r0, 0x1 - ldrb r1, [r5] - strb r0, [r5] - movs r0, 0 - add sp, 0x8 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0811B3E0: .4byte 0x0200c000 -_0811B3E4: .4byte 0xffffff00 -_0811B3E8: .4byte gUnknown_03004DE0 - thumb_func_end Phase2_Transition3_Func5 - - thumb_func_start Phase2_Transition3_Func6 -Phase2_Transition3_Func6: @ 811B3EC - push {r4,lr} - adds r4, r0, 0 - ldr r0, _0811B488 @ =0x0200c000 - ldrb r1, [r0] - movs r3, 0 - strb r3, [r0] - ldrh r2, [r4, 0xC] - movs r0, 0xC - ldrsh r1, [r4, r0] - ldr r0, _0811B48C @ =0x000003ff - cmp r1, r0 - bgt _0811B40A - adds r0, r2, 0 - adds r0, 0x80 - strh r0, [r4, 0xC] -_0811B40A: - ldrh r1, [r4, 0xA] - movs r2, 0xA - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _0811B426 - ldrh r0, [r4, 0xC] - lsls r0, 16 - asrs r0, 24 - subs r0, r1, r0 - strh r0, [r4, 0xA] - lsls r0, 16 - cmp r0, 0 - bge _0811B426 - strh r3, [r4, 0xA] -_0811B426: - ldr r0, _0811B490 @ =gUnknown_03004DE0 - movs r1, 0xA - ldrsh r3, [r4, r1] - movs r1, 0x78 - movs r2, 0x50 - bl sub_811D764 - movs r2, 0xA - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _0811B462 - ldr r1, _0811B494 @ =0x040000b0 - ldrh r2, [r1, 0xA] - ldr r0, _0811B498 @ =0x0000c5ff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r2, [r1, 0xA] - ldr r0, _0811B49C @ =0x00007fff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r0, [r1, 0xA] - bl sub_811D6D4 - ldr r0, _0811B4A0 @ =Phase2Task_Transition3 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_0811B462: - ldrh r1, [r4, 0xE] - movs r2, 0xE - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _0811B476 - adds r0, r1, 0x1 - strh r0, [r4, 0xE] - ldr r0, _0811B4A4 @ =sub_811B54C - bl SetVBlankCallback -_0811B476: - ldr r0, _0811B488 @ =0x0200c000 - ldrb r1, [r0] - adds r1, 0x1 - ldrb r2, [r0] - strb r1, [r0] - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0811B488: .4byte 0x0200c000 -_0811B48C: .4byte 0x000003ff -_0811B490: .4byte gUnknown_03004DE0 -_0811B494: .4byte 0x040000b0 -_0811B498: .4byte 0x0000c5ff -_0811B49C: .4byte 0x00007fff -_0811B4A0: .4byte Phase2Task_Transition3 -_0811B4A4: .4byte sub_811B54C - thumb_func_end Phase2_Transition3_Func6 - - thumb_func_start sub_811B4A8 -sub_811B4A8: @ 811B4A8 - push {lr} - ldr r1, _0811B500 @ =0x040000b0 - ldrh r2, [r1, 0xA] - ldr r0, _0811B504 @ =0x0000c5ff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r2, [r1, 0xA] - ldr r0, _0811B508 @ =0x00007fff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r0, [r1, 0xA] - bl VBlankCB_BattleTransition - ldr r2, _0811B50C @ =0x0200c000 - ldrb r0, [r2] - cmp r0, 0 - beq _0811B4DE - ldr r1, _0811B510 @ =0x040000d4 - ldr r0, _0811B514 @ =gUnknown_03004DE0 - str r0, [r1] - movs r3, 0xF0 - lsls r3, 3 - adds r0, r3 - str r0, [r1, 0x4] - ldr r0, _0811B518 @ =0x800000a0 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] -_0811B4DE: - ldr r1, _0811B51C @ =REG_WININ - ldrh r0, [r2, 0x2] - strh r0, [r1] - adds r1, 0x2 - ldrh r0, [r2, 0x4] - strh r0, [r1] - subs r1, 0x6 - ldrh r0, [r2, 0x8] - strh r0, [r1] - adds r1, 0xC - ldrh r0, [r2, 0xE] - strh r0, [r1] - adds r1, 0x2 - ldrh r0, [r2, 0x10] - strh r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_0811B500: .4byte 0x040000b0 -_0811B504: .4byte 0x0000c5ff -_0811B508: .4byte 0x00007fff -_0811B50C: .4byte 0x0200c000 -_0811B510: .4byte 0x040000d4 -_0811B514: .4byte gUnknown_03004DE0 -_0811B518: .4byte 0x800000a0 -_0811B51C: .4byte REG_WININ - thumb_func_end sub_811B4A8 - - thumb_func_start VBlankCB_Phase2_Transition3 -VBlankCB_Phase2_Transition3: @ 811B520 - push {lr} - bl sub_811B4A8 - ldr r1, _0811B53C @ =0x040000b0 - ldr r0, _0811B540 @ =gUnknown_03005560 - str r0, [r1] - ldr r0, _0811B544 @ =REG_BG0HOFS - str r0, [r1, 0x4] - ldr r0, _0811B548 @ =0xa2400001 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - pop {r0} - bx r0 - .align 2, 0 -_0811B53C: .4byte 0x040000b0 -_0811B540: .4byte gUnknown_03005560 -_0811B544: .4byte REG_BG0HOFS -_0811B548: .4byte 0xa2400001 - thumb_func_end VBlankCB_Phase2_Transition3 - - thumb_func_start sub_811B54C -sub_811B54C: @ 811B54C - push {lr} - bl sub_811B4A8 - ldr r1, _0811B568 @ =0x040000b0 - ldr r0, _0811B56C @ =gUnknown_03005560 - str r0, [r1] - ldr r0, _0811B570 @ =REG_WIN0H - str r0, [r1, 0x4] - ldr r0, _0811B574 @ =0xa2400001 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - pop {r0} - bx r0 - .align 2, 0 -_0811B568: .4byte 0x040000b0 -_0811B56C: .4byte gUnknown_03005560 -_0811B570: .4byte REG_WIN0H -_0811B574: .4byte 0xa2400001 - thumb_func_end sub_811B54C - - thumb_func_start Phase2Task_Transition4 -Phase2Task_Transition4: @ 811B578 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _0811B5A8 @ =gUnknown_083FD7D8 - ldr r2, _0811B5AC @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_0811B58A: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _0811B58A - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0811B5A8: .4byte gUnknown_083FD7D8 -_0811B5AC: .4byte gTasks - thumb_func_end Phase2Task_Transition4 - - thumb_func_start sub_811B5B0 -sub_811B5B0: @ 811B5B0 - push {r4,lr} - sub sp, 0xC - adds r4, r0, 0 - add r0, sp, 0x4 - add r1, sp, 0x8 - bl sub_811D6A8 - ldr r0, _0811B5F0 @ =gUnknown_083FC108 - ldr r1, [sp, 0x8] - movs r2, 0x20 - bl CpuSet - movs r0, 0 - str r0, [sp] - ldr r1, [sp, 0x4] - ldr r2, _0811B5F4 @ =0x05000200 - mov r0, sp - bl CpuSet - ldr r0, _0811B5F8 @ =gFieldEffectObjectPalette10 - movs r1, 0xF0 - movs r2, 0x20 - bl LoadPalette - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0 - add sp, 0xC - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0811B5F0: .4byte gUnknown_083FC108 -_0811B5F4: .4byte 0x05000200 -_0811B5F8: .4byte gFieldEffectObjectPalette10 - thumb_func_end sub_811B5B0 - - thumb_func_start sub_811B5FC -sub_811B5FC: @ 811B5FC - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x10 - adds r7, r0, 0 - ldr r1, _0811B67C @ =gUnknown_083FD7E4 - mov r0, sp - movs r2, 0x4 - bl memcpy - add r4, sp, 0x4 - ldr r1, _0811B680 @ =gUnknown_083FD7E8 - adds r0, r4, 0 - movs r2, 0xA - bl memcpy - bl Random - movs r5, 0x1 - ands r5, r0 - movs r1, 0 - mov r8, r4 - ldr r6, _0811B684 @ =gUnknown_0202FF84 -_0811B62A: - lsls r5, 16 - asrs r5, 16 - lsls r0, r5, 1 - add r0, sp - movs r2, 0 - ldrsh r0, [r0, r2] - str r0, [r6] - lsls r4, r1, 16 - asrs r4, 16 - lsls r0, r4, 5 - adds r0, 0x10 - str r0, [r6, 0x4] - str r5, [r6, 0x8] - lsls r0, r4, 1 - add r0, r8 - movs r1, 0 - ldrsh r0, [r0, r1] - str r0, [r6, 0xC] - movs r0, 0x2D - bl FieldEffectStart - adds r4, 0x1 - lsls r4, 16 - movs r0, 0x1 - eors r5, r0 - lsls r5, 16 - lsrs r5, 16 - lsrs r1, r4, 16 - asrs r4, 16 - cmp r4, 0x4 - ble _0811B62A - ldrh r0, [r7, 0x8] - adds r0, 0x1 - strh r0, [r7, 0x8] - movs r0, 0 - add sp, 0x10 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0811B67C: .4byte gUnknown_083FD7E4 -_0811B680: .4byte gUnknown_083FD7E8 -_0811B684: .4byte gUnknown_0202FF84 - thumb_func_end sub_811B5FC - - thumb_func_start sub_811B688 -sub_811B688: @ 811B688 - push {lr} - movs r0, 0x2D - bl FieldEffectActiveListContains - lsls r0, 24 - cmp r0, 0 - bne _0811B6A8 - bl sub_811D6D4 - ldr r0, _0811B6B0 @ =Phase2Task_Transition4 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_0811B6A8: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_0811B6B0: .4byte Phase2Task_Transition4 - thumb_func_end sub_811B688 - - thumb_func_start FldEff_Pokeball -FldEff_Pokeball: @ 811B6B4 - push {r4,r5,lr} - ldr r0, _0811B710 @ =gSpriteTemplate_83FD98C - ldr r5, _0811B714 @ =gUnknown_0202FF84 - movs r2, 0 - ldrsh r1, [r5, r2] - movs r3, 0x4 - ldrsh r2, [r5, r3] - movs r3, 0 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0811B718 @ =gSprites - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - adds r4, r1 - ldrb r1, [r4, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - strb r0, [r4, 0x5] - ldrb r1, [r4, 0x1] - movs r0, 0x4 - negs r0, r0 - ands r0, r1 - movs r1, 0x1 - orrs r0, r1 - strb r0, [r4, 0x1] - ldr r0, [r5, 0x8] - strh r0, [r4, 0x2E] - ldr r0, [r5, 0xC] - strh r0, [r4, 0x30] - ldr r0, _0811B71C @ =0x0000ffff - strh r0, [r4, 0x32] - adds r0, r4, 0 - bl InitSpriteAffineAnim - ldrb r1, [r5, 0x8] - adds r0, r4, 0 - bl StartSpriteAffineAnim - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0811B710: .4byte gSpriteTemplate_83FD98C -_0811B714: .4byte gUnknown_0202FF84 -_0811B718: .4byte gSprites -_0811B71C: .4byte 0x0000ffff - thumb_func_end FldEff_Pokeball - - thumb_func_start sub_811B720 -sub_811B720: @ 811B720 - push {r4-r6,lr} - sub sp, 0x4 - adds r4, r0, 0 - ldr r1, _0811B740 @ =gUnknown_083FD7F2 - mov r0, sp - movs r2, 0x4 - bl memcpy - ldrh r1, [r4, 0x30] - movs r2, 0x30 - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _0811B744 - subs r0, r1, 0x1 - strh r0, [r4, 0x30] - b _0811B7D6 - .align 2, 0 -_0811B740: .4byte gUnknown_083FD7F2 -_0811B744: - ldrh r0, [r4, 0x20] - lsls r1, r0, 16 - lsrs r0, r1, 16 - cmp r0, 0xF0 - bhi _0811B7B2 - asrs r0, r1, 19 - lsls r0, 16 - ldrh r1, [r4, 0x22] - lsls r1, 16 - asrs r1, 19 - lsls r1, 16 - lsrs r1, 16 - lsrs r2, r0, 16 - asrs r5, r0, 16 - movs r3, 0x32 - ldrsh r0, [r4, r3] - cmp r5, r0 - beq _0811B7B2 - strh r2, [r4, 0x32] - ldr r0, _0811B7E0 @ =REG_BG0CNT - ldrh r2, [r0] - lsrs r2, 8 - movs r0, 0x1F - ands r2, r0 - lsls r2, 11 - movs r0, 0xC0 - lsls r0, 19 - adds r2, r0 - lsls r1, 16 - asrs r1, 16 - subs r0, r1, 0x2 - lsls r0, 5 - adds r0, r5 - lsls r0, 1 - adds r0, r2 - ldr r6, _0811B7E4 @ =0x0000f001 - adds r3, r6, 0 - strh r3, [r0] - subs r0, r1, 0x1 - lsls r0, 5 - adds r0, r5 - lsls r0, 1 - adds r0, r2 - strh r3, [r0] - lsls r0, r1, 5 - adds r0, r5 - lsls r0, 1 - adds r0, r2 - strh r3, [r0] - adds r1, 0x1 - lsls r1, 5 - adds r1, r5 - lsls r1, 1 - adds r1, r2 - strh r3, [r1] -_0811B7B2: - movs r1, 0x2E - ldrsh r0, [r4, r1] - lsls r0, 1 - add r0, sp - ldrh r0, [r0] - ldrh r2, [r4, 0x20] - adds r0, r2 - strh r0, [r4, 0x20] - adds r0, 0xF - lsls r0, 16 - movs r1, 0x87 - lsls r1, 17 - cmp r0, r1 - bls _0811B7D6 - adds r0, r4, 0 - movs r1, 0x2D - bl FieldEffectStop -_0811B7D6: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0811B7E0: .4byte REG_BG0CNT -_0811B7E4: .4byte 0x0000f001 - thumb_func_end sub_811B720 - - thumb_func_start Phase2Task_Transition5 -Phase2Task_Transition5: @ 811B7E8 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _0811B818 @ =gUnknown_083FD7F8 - ldr r2, _0811B81C @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_0811B7FA: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _0811B7FA - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0811B818: .4byte gUnknown_083FD7F8 -_0811B81C: .4byte gTasks - thumb_func_end Phase2Task_Transition5 - - thumb_func_start sub_811B820 -sub_811B820: @ 811B820 - push {r4,lr} - adds r4, r0, 0 - bl sub_811D658 - bl dp12_8087EA4 - ldr r1, _0811B870 @ =0x0200c000 - movs r0, 0 - strh r0, [r1, 0x2] - movs r0, 0x3F - strh r0, [r1, 0x4] - ldr r0, _0811B874 @ =0x0000f0f1 - strh r0, [r1, 0x6] - movs r0, 0xA0 - strh r0, [r1, 0x8] - movs r1, 0 - ldr r3, _0811B878 @ =gUnknown_03005560 - ldr r2, _0811B87C @ =0x0000f3f4 -_0811B844: - lsls r0, r1, 1 - adds r0, r3 - strh r2, [r0] - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0x9F - bls _0811B844 - ldr r0, _0811B880 @ =sub_811BC2C - bl SetVBlankCallback - ldr r1, _0811B870 @ =0x0200c000 - movs r0, 0x78 - strh r0, [r1, 0x2C] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0x1 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0811B870: .4byte 0x0200c000 -_0811B874: .4byte 0x0000f0f1 -_0811B878: .4byte gUnknown_03005560 -_0811B87C: .4byte 0x0000f3f4 -_0811B880: .4byte sub_811BC2C - thumb_func_end sub_811B820 - - thumb_func_start sub_811B884 -sub_811B884: @ 811B884 - push {r4-r6,lr} - sub sp, 0xC - adds r6, r0, 0 - ldr r4, _0811B904 @ =0x0200c000 - ldrb r0, [r4] - movs r0, 0 - strb r0, [r4] - adds r0, r4, 0 - adds r0, 0x24 - movs r1, 0x2C - ldrsh r3, [r4, r1] - movs r1, 0x1 - negs r1, r1 - str r1, [sp] - movs r1, 0x1 - str r1, [sp, 0x4] - str r1, [sp, 0x8] - movs r1, 0x78 - movs r2, 0x50 - bl sub_811D8FC - ldr r5, _0811B908 @ =gUnknown_03004DE0 -_0811B8B0: - movs r3, 0x2A - ldrsh r2, [r4, r3] - lsls r2, 1 - adds r2, r5 - ldrh r0, [r4, 0x28] - adds r0, 0x1 - movs r3, 0xF0 - lsls r3, 7 - adds r1, r3, 0 - orrs r0, r1 - strh r0, [r2] - adds r0, r4, 0 - adds r0, 0x24 - movs r1, 0x1 - movs r2, 0x1 - bl sub_811D978 - lsls r0, 24 - cmp r0, 0 - beq _0811B8B0 - ldr r2, _0811B904 @ =0x0200c000 - ldrh r0, [r2, 0x2C] - adds r0, 0x10 - strh r0, [r2, 0x2C] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xEF - ble _0811B8F2 - movs r0, 0 - strh r0, [r2, 0x2E] - ldrh r0, [r6, 0x8] - adds r0, 0x1 - strh r0, [r6, 0x8] -_0811B8F2: - ldrb r0, [r2] - adds r0, 0x1 - ldrb r1, [r2] - strb r0, [r2] - movs r0, 0 - add sp, 0xC - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0811B904: .4byte 0x0200c000 -_0811B908: .4byte gUnknown_03004DE0 - thumb_func_end sub_811B884 - - thumb_func_start sub_811B90C -sub_811B90C: @ 811B90C - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x10 - adds r7, r0, 0 - add r1, sp, 0xC - movs r0, 0 - strb r0, [r1] - ldr r4, _0811B988 @ =0x0200c000 - ldrb r0, [r4] - movs r0, 0 - strb r0, [r4] - adds r0, r4, 0 - adds r0, 0x24 - movs r2, 0x2E - ldrsh r1, [r4, r2] - str r1, [sp] - movs r1, 0x1 - str r1, [sp, 0x4] - str r1, [sp, 0x8] - movs r1, 0x78 - movs r2, 0x50 - movs r3, 0xF0 - bl sub_811D8FC - adds r6, r4, 0 - ldr r5, _0811B98C @ =gUnknown_03004DE0 - mov r8, r5 - add r5, sp, 0xC -_0811B946: - movs r1, 0x78 - ldrh r0, [r4, 0x28] - adds r0, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - movs r2, 0x2E - ldrsh r0, [r4, r2] - cmp r0, 0x4F - ble _0811B95C - ldrh r1, [r4, 0x28] - movs r3, 0xF0 -_0811B95C: - movs r0, 0x2A - ldrsh r2, [r4, r0] - lsls r2, 1 - add r2, r8 - lsls r1, 16 - asrs r1, 8 - lsls r0, r3, 16 - asrs r3, r0, 16 - orrs r3, r1 - strh r3, [r2] - ldrb r0, [r5] - cmp r0, 0 - bne _0811B990 - adds r0, r4, 0 - adds r0, 0x24 - movs r1, 0x1 - movs r2, 0x1 - bl sub_811D978 - strb r0, [r5] - b _0811B946 - .align 2, 0 -_0811B988: .4byte 0x0200c000 -_0811B98C: .4byte gUnknown_03004DE0 -_0811B990: - ldrh r0, [r4, 0x2E] - adds r0, 0x8 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r1, r0, 16 - cmp r1, 0x9F - ble _0811B9AA - movs r0, 0xF0 - strh r0, [r4, 0x2C] - ldrh r0, [r7, 0x8] - adds r0, 0x1 - strh r0, [r7, 0x8] - b _0811B9D0 -_0811B9AA: - movs r2, 0x2A - ldrsh r0, [r4, r2] - cmp r0, r1 - bge _0811B9D0 - ldr r4, _0811B9E8 @ =gUnknown_03004DE0 - ldr r2, _0811B9EC @ =0x0200c000 -_0811B9B6: - ldrh r0, [r2, 0x2A] - adds r0, 0x1 - strh r0, [r2, 0x2A] - lsls r0, 16 - asrs r0, 15 - adds r0, r4 - strh r3, [r0] - movs r5, 0x2A - ldrsh r1, [r2, r5] - movs r5, 0x2E - ldrsh r0, [r2, r5] - cmp r1, r0 - blt _0811B9B6 -_0811B9D0: - ldrb r0, [r6] - adds r0, 0x1 - ldrb r1, [r6] - strb r0, [r6] - movs r0, 0 - add sp, 0x10 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0811B9E8: .4byte gUnknown_03004DE0 -_0811B9EC: .4byte 0x0200c000 - thumb_func_end sub_811B90C - - thumb_func_start sub_811B9F0 -sub_811B9F0: @ 811B9F0 + thumb_func_start Phase2_Transition5_Func4 +Phase2_Transition5_Func4: @ 811B9F0 push {r4-r6,lr} sub sp, 0xC adds r6, r0, 0 @@ -1043,10 +73,10 @@ _0811BA56: .align 2, 0 _0811BA68: .4byte 0x0200c000 _0811BA6C: .4byte gUnknown_03004DE0 - thumb_func_end sub_811B9F0 + thumb_func_end Phase2_Transition5_Func4 - thumb_func_start sub_811BA70 -sub_811BA70: @ 811BA70 + thumb_func_start Phase2_Transition5_Func5 +Phase2_Transition5_Func5: @ 811BA70 push {r4-r7,lr} mov r7, r10 mov r6, r9 @@ -1168,10 +198,10 @@ _0811BB3A: .align 2, 0 _0811BB58: .4byte gUnknown_03004DE0 _0811BB5C: .4byte 0x0200c000 - thumb_func_end sub_811BA70 + thumb_func_end Phase2_Transition5_Func5 - thumb_func_start sub_811BB60 -sub_811BB60: @ 811BB60 + thumb_func_start Phase2_Transition5_Func6 +Phase2_Transition5_Func6: @ 811BB60 push {r4-r6,lr} sub sp, 0xC adds r6, r0, 0 @@ -1242,10 +272,10 @@ _0811BBD2: .align 2, 0 _0811BBE4: .4byte 0x0200c000 _0811BBE8: .4byte gUnknown_03004DE0 - thumb_func_end sub_811BB60 + thumb_func_end Phase2_Transition5_Func6 - thumb_func_start sub_811BBEC -sub_811BBEC: @ 811BBEC + thumb_func_start Phase2_Transition5_Func7 +Phase2_Transition5_Func7: @ 811BBEC push {lr} ldr r1, _0811BC1C @ =0x040000b0 ldrh r2, [r1, 0xA] @@ -1271,10 +301,10 @@ _0811BC1C: .4byte 0x040000b0 _0811BC20: .4byte 0x0000c5ff _0811BC24: .4byte 0x00007fff _0811BC28: .4byte Phase2Task_Transition5 - thumb_func_end sub_811BBEC + thumb_func_end Phase2_Transition5_Func7 - thumb_func_start sub_811BC2C -sub_811BC2C: @ 811BC2C + thumb_func_start VBlankCB_Phase2_Transition5 +VBlankCB_Phase2_Transition5: @ 811BC2C push {r4,lr} ldr r4, _0811BC94 @ =0x040000b0 ldrh r1, [r4, 0xA] @@ -1337,7 +367,7 @@ _0811BCAC: .4byte 0x800000a0 _0811BCB0: .4byte REG_WININ _0811BCB4: .4byte REG_WIN0H _0811BCB8: .4byte 0xa2400001 - thumb_func_end sub_811BC2C + thumb_func_end VBlankCB_Phase2_Transition5 thumb_func_start Phase2Task_Transition6 Phase2Task_Transition6: @ 811BCBC diff --git a/data/battle_transition.s b/data/battle_transition.s index 975de2997..d71fa3594 100644 --- a/data/battle_transition.s +++ b/data/battle_transition.s @@ -108,10 +108,10 @@ sPhase2_Transition3_Funcs:: @ 83FD7C0 .4byte Phase2_Transition3_Func6 .align 2 -gUnknown_083FD7D8:: @ 83FD7D8 - .4byte sub_811B5B0 - .4byte sub_811B5FC - .4byte sub_811B688 +sPhase2_Transition4_Funcs:: @ 83FD7D8 + .4byte Phase2_Transition4_Func1 + .4byte Phase2_Transition4_Func2 + .4byte Phase2_Transition4_Func3 .align 1 gUnknown_083FD7E4:: @ 83FD7E4 @@ -132,14 +132,14 @@ gUnknown_083FD7F2:: @ 83FD7F2 .2byte -8 .align 2 -gUnknown_083FD7F8:: @ 83FD7F8 - .4byte sub_811B820 - .4byte sub_811B884 - .4byte sub_811B90C - .4byte sub_811B9F0 - .4byte sub_811BA70 - .4byte sub_811BB60 - .4byte sub_811BBEC +sPhase2_Transition5_Funcs:: @ 83FD7F8 + .4byte Phase2_Transition5_Func1 + .4byte Phase2_Transition5_Func2 + .4byte Phase2_Transition5_Func3 + .4byte Phase2_Transition5_Func4 + .4byte Phase2_Transition5_Func5 + .4byte Phase2_Transition5_Func6 + .4byte Phase2_Transition5_Func7 .align 2 gUnknown_083FD814:: @ 83FD814 diff --git a/src/battle_transition.c b/src/battle_transition.c index ed6bdf387..fb20853a5 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -4,6 +4,9 @@ #include "task.h" #include "palette.h" #include "trig.h" +#include "field_effect.h" +#include "rng.h" +#include "sprite.h" void sub_807DE10(void); void dp12_8087EA4(void); @@ -15,6 +18,8 @@ extern const TransitionState sPhase2_Transition0_Funcs[]; extern const TransitionState sPhase2_Transition1_Funcs[]; extern const TransitionState sPhase2_Transition2_Funcs[]; extern const TransitionState sPhase2_Transition3_Funcs[]; +extern const TransitionState sPhase2_Transition4_Funcs[]; +extern const TransitionState sPhase2_Transition5_Funcs[]; extern const TaskFunc sPhase1_Tasks[]; extern const TaskFunc sPhase2_Tasks[]; @@ -40,6 +45,17 @@ struct TransitionData s16 field_14; s16 field_16; s16 field_18; + s16 field_1A; + s16 field_1C; + s16 field_1E; + s16 field_20; + s16 field_22; + s16 field_24; + s16 field_26; + s16 field_28; + s16 field_2A; + s16 field_2C; + s16 field_2E; }; #define TRANSITION_STRUCT (*(struct TransitionData *) (ewram + 0xC000)) @@ -55,11 +71,17 @@ static void VBlankCB_Phase2_Transition1(void); static void HBlankCB_Phase2_Transition1(void); static void VBlankCB_Phase2_Transition2(void); static void HBlankCB_Phase2_Transition2(void); -void VBlankCB_Phase2_Transition3(void); +void VBlankCB0_Phase2_Transition3(void); +void VBlankCB1_Phase2_Transition3(void); +void VBlankCB_Phase2_Transition5(void); void VBlankCB_BattleTransition(void); void sub_811D6E8(s16* a0, s16 a1, s16 a2, s16 a3, s16 a4, s16 a5); void sub_811D6A8(u16** a0, u16** a1); +void sub_811D764(u16* a0, s16 a1, s16 a2, s16 a3); +void sub_811D6D4(void); +void sub_811D8FC(s16* a0, s16 a1, s16 a2, s16 a3, s16 a4, s16 a5, s16 a6); +bool8 sub_811D978(s16* a0, bool8 a1, bool8 a2); void sub_811AABC(u8 transitionID) { @@ -353,7 +375,7 @@ bool8 Phase2_Transition3_Func1(struct Task* task) gUnknown_03005560[i] = 240; } - SetVBlankCallback(VBlankCB_Phase2_Transition3); + SetVBlankCallback(VBlankCB0_Phase2_Transition3); sub_811D6A8(&dst1, & dst2); CpuFill16(0, dst1, 0x800); @@ -386,3 +408,416 @@ bool8 Phase2_Transition3_Func2(struct Task* task) task->tState++; return 1; } + +bool8 Phase2_Transition3_Func3(struct Task* task) +{ + TRANSITION_STRUCT.field_0 = 0; + if (task->data[3] == 0 || --task->data[3] == 0) + { + task->data[2]++; + task->data[3] = 2; + } + TRANSITION_STRUCT.field_10 = (task->data[1] << 8) | task->data[2]; + if (task->data[2] > 15) + task->tState++; + task->data[4] += 8; + task->data[5] -= 256; + + sub_811D6E8(gUnknown_03004DE0[0], 0, task->data[4], 132, task->data[5] >> 8, 160); + + TRANSITION_STRUCT.field_0++; + return 0; +} + +bool8 Phase2_Transition3_Func4(struct Task* task) +{ + TRANSITION_STRUCT.field_0 = 0; + if (task->data[3] == 0 || --task->data[3] == 0) + { + task->data[1]--; + task->data[3] = 2; + } + TRANSITION_STRUCT.field_10 = (task->data[1] << 8) | task->data[2]; + if (task->data[1] == 0) + task->tState++; + task->data[4] += 8; + task->data[5] -= 256; + + sub_811D6E8(gUnknown_03004DE0[0], 0, task->data[4], 132, task->data[5] >> 8, 160); + + TRANSITION_STRUCT.field_0++; + return 0; +} + +bool8 Phase2_Transition3_Func5(struct Task* task) +{ + TRANSITION_STRUCT.field_0 = 0; + task->data[4] += 8; + task->data[5] -= 256; + + sub_811D6E8(gUnknown_03004DE0[0], 0, task->data[4], 132, task->data[5] >> 8, 160); + + if (task->data[5] <= 0) + { + task->tState++; + task->data[1] = 160; + task->data[2] = 256; + task->data[3] = 0; + } + + TRANSITION_STRUCT.field_0++; + return 0; +} + +bool8 Phase2_Transition3_Func6(struct Task* task) +{ + TRANSITION_STRUCT.field_0 = 0; + if (task->data[2] < 1024) + task->data[2] += 128; + if (task->data[1] != 0) + { + task->data[1] -= (task->data[2] >> 8); + if (task->data[1] < 0) + task->data[1] = 0; + } + sub_811D764(gUnknown_03004DE0[0], 120, 80, task->data[1]); + if (task->data[1] == 0) + { + DmaStop(0); + sub_811D6D4(); + DestroyTask(FindTaskIdByFunc(Phase2Task_Transition3)); + } + if (task->data[3] == 0) + { + task->data[3]++; + SetVBlankCallback(VBlankCB1_Phase2_Transition3); + } + + TRANSITION_STRUCT.field_0++; + return 0; +} + +static void Transition3_Vblank(void) +{ + DmaStop(0); + VBlankCB_BattleTransition(); + if (TRANSITION_STRUCT.field_0) + DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320); + REG_WININ = TRANSITION_STRUCT.field_2; + REG_WINOUT = TRANSITION_STRUCT.field_4; + REG_WIN0V = TRANSITION_STRUCT.field_8; + REG_BLDCNT = TRANSITION_STRUCT.field_E; + REG_BLDALPHA = TRANSITION_STRUCT.field_10; +} + +void VBlankCB0_Phase2_Transition3(void) +{ + Transition3_Vblank(); + DmaSet(0, gUnknown_03005560, ®_BG0HOFS, 0xA2400001); +} + +void VBlankCB1_Phase2_Transition3(void) +{ + Transition3_Vblank(); + DmaSet(0, gUnknown_03005560, ®_WIN0H, 0xA2400001); +} + +void Phase2Task_Transition4(u8 taskID) +{ + while (sPhase2_Transition4_Funcs[gTasks[taskID].tState](&gTasks[taskID])); +} + +extern const u8 gUnknown_083FC108[]; + +bool8 Phase2_Transition4_Func1(struct Task* task) +{ + u16 *dst1, *dst2; + + sub_811D6A8(&dst1, &dst2); + CpuSet(gUnknown_083FC108, dst2, 0x20); + CpuFill32(0, dst1, 0x800); + LoadPalette(gFieldEffectObjectPalette10, 0xF0, 0x20); + + task->tState++; + return 0; +} + +extern const s16 gUnknown_083FD7E4[2]; +extern const s16 gUnknown_083FD7F2[2]; +extern const s16 gUnknown_083FD7E8[5]; + +bool8 Phase2_Transition4_Func2(struct Task* task) +{ + s16 i; + s16 rand; + s16 arr0[2]; + s16 arr1[5]; + + memcpy(arr0, gUnknown_083FD7E4, sizeof(gUnknown_083FD7E4)); + memcpy(arr1, gUnknown_083FD7E8, sizeof(gUnknown_083FD7E8)); + rand = Random() & 1; + for (i = 0; i <= 4; i++, rand ^= 1) + { + gUnknown_0202FF84[0] = arr0[rand]; // x + gUnknown_0202FF84[1] = (i * 32) + 16; // y + gUnknown_0202FF84[2] = rand; + gUnknown_0202FF84[3] = arr1[i]; + FieldEffectStart(FLDEFF_POKEBALL); + } + + task->tState++; + return 0; +} + +bool8 Phase2_Transition4_Func3(struct Task* task) +{ + if (!FieldEffectActiveListContains(FLDEFF_POKEBALL)) + { + sub_811D6D4(); + DestroyTask(FindTaskIdByFunc(Phase2Task_Transition4)); + } + return 0; +} + +extern const struct SpriteTemplate gSpriteTemplate_83FD98C; + +bool8 FldEff_Pokeball(void) +{ + u8 spriteID = CreateSpriteAtEnd(&gSpriteTemplate_83FD98C, gUnknown_0202FF84[0], gUnknown_0202FF84[1], 0); + gSprites[spriteID].oam.priority = 0; + gSprites[spriteID].oam.affineMode = 1; + gSprites[spriteID].data0 = gUnknown_0202FF84[2]; + gSprites[spriteID].data1 = gUnknown_0202FF84[3]; + gSprites[spriteID].data2 = -1; + InitSpriteAffineAnim(&gSprites[spriteID]); + StartSpriteAffineAnim(&gSprites[spriteID], gUnknown_0202FF84[2]); + return 0; +} + +#ifdef NONMATCHING +void sub_811B720(struct Sprite* sprite) +{ + s16 arr0[2]; + + memcpy(arr0, gUnknown_083FD7F2, sizeof(gUnknown_083FD7F2)); + if (sprite->data1 != 0) + sprite->data1--; + else + { + if (sprite->pos1.x < 240) + { + s32 posY = sprite->pos1.y >> 3; + s32 posX = sprite->pos1.x >> 3; + if ((posX >> 3) != sprite->data2) + { + u32 var; + + sprite->data2 = (posX); + var = (((REG_BG0CNT >> 8) & 0x1F) << 10); + + vram[MULTI_DIM_ARR(posY - 2, 32, posX)] = 0xF001; + vram[MULTI_DIM_ARR(posY - 1, 32, posX)] = 0xF001; + vram[MULTI_DIM_ARR(posY - 0, 32, posX)] = 0xF001; + vram[MULTI_DIM_ARR(posY + 0, 32, posX)] = 0xF001; + } + } + sprite->pos1.x += arr0[sprite->data0]; + if (sprite->pos1.x + 15 > 270) + FieldEffectStop(sprite, FLDEFF_POKEBALL); + } +} +#else +__attribute__((naked)) +void sub_811B720(struct Sprite* sprite) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + sub sp, 0x4\n\ + adds r4, r0, 0\n\ + ldr r1, _0811B740 @ =gUnknown_083FD7F2\n\ + mov r0, sp\n\ + movs r2, 0x4\n\ + bl memcpy\n\ + ldrh r1, [r4, 0x30]\n\ + movs r2, 0x30\n\ + ldrsh r0, [r4, r2]\n\ + cmp r0, 0\n\ + beq _0811B744\n\ + subs r0, r1, 0x1\n\ + strh r0, [r4, 0x30]\n\ + b _0811B7D6\n\ + .align 2, 0\n\ +_0811B740: .4byte gUnknown_083FD7F2\n\ +_0811B744:\n\ + ldrh r0, [r4, 0x20]\n\ + lsls r1, r0, 16\n\ + lsrs r0, r1, 16\n\ + cmp r0, 0xF0\n\ + bhi _0811B7B2\n\ + asrs r0, r1, 19\n\ + lsls r0, 16\n\ + ldrh r1, [r4, 0x22]\n\ + lsls r1, 16\n\ + asrs r1, 19\n\ + lsls r1, 16\n\ + lsrs r1, 16\n\ + lsrs r2, r0, 16\n\ + asrs r5, r0, 16\n\ + movs r3, 0x32\n\ + ldrsh r0, [r4, r3]\n\ + cmp r5, r0\n\ + beq _0811B7B2\n\ + strh r2, [r4, 0x32]\n\ + ldr r0, _0811B7E0 @ =REG_BG0CNT\n\ + ldrh r2, [r0]\n\ + lsrs r2, 8\n\ + movs r0, 0x1F\n\ + ands r2, r0\n\ + lsls r2, 11\n\ + movs r0, 0xC0\n\ + lsls r0, 19\n\ + adds r2, r0\n\ + lsls r1, 16\n\ + asrs r1, 16\n\ + subs r0, r1, 0x2\n\ + lsls r0, 5\n\ + adds r0, r5\n\ + lsls r0, 1\n\ + adds r0, r2\n\ + ldr r6, _0811B7E4 @ =0x0000f001\n\ + adds r3, r6, 0\n\ + strh r3, [r0]\n\ + subs r0, r1, 0x1\n\ + lsls r0, 5\n\ + adds r0, r5\n\ + lsls r0, 1\n\ + adds r0, r2\n\ + strh r3, [r0]\n\ + lsls r0, r1, 5\n\ + adds r0, r5\n\ + lsls r0, 1\n\ + adds r0, r2\n\ + strh r3, [r0]\n\ + adds r1, 0x1\n\ + lsls r1, 5\n\ + adds r1, r5\n\ + lsls r1, 1\n\ + adds r1, r2\n\ + strh r3, [r1]\n\ +_0811B7B2:\n\ + movs r1, 0x2E\n\ + ldrsh r0, [r4, r1]\n\ + lsls r0, 1\n\ + add r0, sp\n\ + ldrh r0, [r0]\n\ + ldrh r2, [r4, 0x20]\n\ + adds r0, r2\n\ + strh r0, [r4, 0x20]\n\ + adds r0, 0xF\n\ + lsls r0, 16\n\ + movs r1, 0x87\n\ + lsls r1, 17\n\ + cmp r0, r1\n\ + bls _0811B7D6\n\ + adds r0, r4, 0\n\ + movs r1, 0x2D\n\ + bl FieldEffectStop\n\ +_0811B7D6:\n\ + add sp, 0x4\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0811B7E0: .4byte 0x04000008\n\ +_0811B7E4: .4byte 0x0000f001\n\ + .syntax divided"); +} +#endif // NONMATCHING + +void Phase2Task_Transition5(u8 taskID) +{ + while (sPhase2_Transition5_Funcs[gTasks[taskID].tState](&gTasks[taskID])); +} + +bool8 Phase2_Transition5_Func1(struct Task* task) +{ + u16 i; + + sub_811D658(); + dp12_8087EA4(); + + TRANSITION_STRUCT.field_2 = 0; + TRANSITION_STRUCT.field_4 = 63; + TRANSITION_STRUCT.field_6 = -3855; + TRANSITION_STRUCT.field_8 = 160; + + for (i = 0; i < 160; i++) + { + gUnknown_03005560[i] = 0xF3F4; + } + + SetVBlankCallback(VBlankCB_Phase2_Transition5); + TRANSITION_STRUCT.field_2C = 120; + + task->tState++; + return 1; +} + +bool8 Phase2_Transition5_Func2(struct Task* task) +{ + TRANSITION_STRUCT.field_0 = 0; + + sub_811D8FC(&TRANSITION_STRUCT.field_24, 120, 80, TRANSITION_STRUCT.field_2C, -1, 1, 1); + do + { + gUnknown_03004DE0[0][TRANSITION_STRUCT.field_2A] = (TRANSITION_STRUCT.field_28 + 1) | 0x7800; + } while (!sub_811D978(&TRANSITION_STRUCT.field_24, 1, 1)); + + TRANSITION_STRUCT.field_2C += 16; + if (TRANSITION_STRUCT.field_2C >= 240) + { + TRANSITION_STRUCT.field_2E = 0; + task->tState++; + } + + TRANSITION_STRUCT.field_0++; + return 0; +} + +bool8 Phase2_Transition5_Func3(struct Task* task) +{ + s16 r1, r3; + vu8 var = 0; + + TRANSITION_STRUCT.field_0 = 0; + + sub_811D8FC(&TRANSITION_STRUCT.field_24, 120, 80, 240, TRANSITION_STRUCT.field_2E, 1, 1); + + while (1) + { + r1 = 120, r3 = TRANSITION_STRUCT.field_28 + 1; + if (TRANSITION_STRUCT.field_2E >= 80) + r1 = TRANSITION_STRUCT.field_28, r3 = 240; + gUnknown_03004DE0[0][TRANSITION_STRUCT.field_2A] = (r3) | (r1 << 8); + if (var != 0) + break; + var = sub_811D978(&TRANSITION_STRUCT.field_24, 1, 1); + } + + TRANSITION_STRUCT.field_2E += 8; + if (TRANSITION_STRUCT.field_2E >= 160) + { + TRANSITION_STRUCT.field_2C = 240; + task->tState++; + } + else + { + while (TRANSITION_STRUCT.field_2A < TRANSITION_STRUCT.field_2E) + { + gUnknown_03004DE0[0][++TRANSITION_STRUCT.field_2A] = (r3) | (r1 << 8); + } + } + + TRANSITION_STRUCT.field_0++; + return 0; +} -- cgit v1.2.3 From c87e2d89e33b07ea9cbb9c73ecfdb95d7bc8d4b9 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 19 Aug 2017 23:10:26 +0200 Subject: cam help plox, ninja shift --- asm/battle_transition.s | 562 +---------------------------------------------- data/battle_transition.s | 6 +- src/battle_transition.c | 180 ++++++++++++++- 3 files changed, 185 insertions(+), 563 deletions(-) diff --git a/asm/battle_transition.s b/asm/battle_transition.s index 0a1a71d7d..37f50ebd9 100644 --- a/asm/battle_transition.s +++ b/asm/battle_transition.s @@ -7,558 +7,8 @@ .text - - thumb_func_start Phase2_Transition5_Func4 -Phase2_Transition5_Func4: @ 811B9F0 - push {r4-r6,lr} - sub sp, 0xC - adds r6, r0, 0 - ldr r4, _0811BA68 @ =0x0200c000 - ldrb r0, [r4] - movs r0, 0 - strb r0, [r4] - adds r0, r4, 0 - adds r0, 0x24 - movs r1, 0x2C - ldrsh r3, [r4, r1] - movs r1, 0xA0 - str r1, [sp] - movs r1, 0x1 - str r1, [sp, 0x4] - str r1, [sp, 0x8] - movs r1, 0x78 - movs r2, 0x50 - bl sub_811D8FC - ldr r5, _0811BA6C @ =gUnknown_03004DE0 -_0811BA1A: - movs r0, 0x2A - ldrsh r2, [r4, r0] - lsls r2, 1 - adds r2, r5 - ldrh r0, [r4, 0x28] - lsls r0, 8 - movs r1, 0xF0 - orrs r0, r1 - strh r0, [r2] - adds r0, r4, 0 - adds r0, 0x24 - movs r1, 0x1 - movs r2, 0x1 - bl sub_811D978 - lsls r0, 24 - cmp r0, 0 - beq _0811BA1A - ldr r2, _0811BA68 @ =0x0200c000 - ldrh r0, [r2, 0x2C] - subs r0, 0x10 - strh r0, [r2, 0x2C] - lsls r0, 16 - cmp r0, 0 - bgt _0811BA56 - movs r0, 0xA0 - strh r0, [r2, 0x2E] - ldrh r0, [r6, 0x8] - adds r0, 0x1 - strh r0, [r6, 0x8] -_0811BA56: - ldrb r0, [r2] - adds r0, 0x1 - ldrb r1, [r2] - strb r0, [r2] - movs r0, 0 - add sp, 0xC - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0811BA68: .4byte 0x0200c000 -_0811BA6C: .4byte gUnknown_03004DE0 - thumb_func_end Phase2_Transition5_Func4 - - thumb_func_start Phase2_Transition5_Func5 -Phase2_Transition5_Func5: @ 811BA70 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - mov r8, r0 - add r1, sp, 0xC - movs r0, 0 - strb r0, [r1] - ldr r4, _0811BAF0 @ =0x0200c000 - ldrb r0, [r4] - movs r0, 0 - strb r0, [r4] - adds r0, r4, 0 - adds r0, 0x24 - movs r2, 0x2E - ldrsh r1, [r4, r2] - str r1, [sp] - movs r1, 0x1 - str r1, [sp, 0x4] - str r1, [sp, 0x8] - movs r1, 0x78 - movs r2, 0x50 - movs r3, 0 - bl sub_811D8FC - ldr r3, _0811BAF4 @ =gUnknown_03004DE0 - mov r9, r3 - mov r10, r4 - add r6, sp, 0xC -_0811BAAE: - movs r5, 0x2A - ldrsh r0, [r4, r5] - lsls r0, 1 - mov r7, r9 - adds r5, r0, r7 - ldrb r1, [r5] - ldrh r2, [r4, 0x28] - adds r3, r2, 0 - movs r7, 0x2E - ldrsh r0, [r4, r7] - cmp r0, 0x50 - bgt _0811BACA - movs r2, 0x78 - adds r1, r3, 0 -_0811BACA: - lsls r0, r2, 16 - asrs r0, 8 - lsls r1, 16 - asrs r1, 16 - orrs r1, r0 - movs r3, 0 - strh r1, [r5] - ldrb r0, [r6] - cmp r0, 0 - bne _0811BAF8 - adds r0, r4, 0 - adds r0, 0x24 - movs r1, 0x1 - movs r2, 0x1 - bl sub_811D978 - strb r0, [r6] - b _0811BAAE - .align 2, 0 -_0811BAF0: .4byte 0x0200c000 -_0811BAF4: .4byte gUnknown_03004DE0 -_0811BAF8: - ldrh r0, [r4, 0x2E] - subs r0, 0x8 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r2, r0, 16 - cmp r2, 0 - bgt _0811BB12 - strh r3, [r4, 0x2C] - mov r1, r8 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - b _0811BB3A -_0811BB12: - movs r3, 0x2A - ldrsh r0, [r4, r3] - cmp r0, r2 - ble _0811BB3A - ldr r4, _0811BB58 @ =gUnknown_03004DE0 - ldr r2, _0811BB5C @ =0x0200c000 - adds r3, r1, 0 -_0811BB20: - ldrh r0, [r2, 0x2A] - subs r0, 0x1 - strh r0, [r2, 0x2A] - lsls r0, 16 - asrs r0, 15 - adds r0, r4 - strh r3, [r0] - movs r5, 0x2A - ldrsh r1, [r2, r5] - movs r7, 0x2E - ldrsh r0, [r2, r7] - cmp r1, r0 - bgt _0811BB20 -_0811BB3A: - mov r1, r10 - ldrb r0, [r1] - adds r0, 0x1 - ldrb r1, [r1] - mov r2, r10 - strb r0, [r2] - movs r0, 0 - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0811BB58: .4byte gUnknown_03004DE0 -_0811BB5C: .4byte 0x0200c000 - thumb_func_end Phase2_Transition5_Func5 - - thumb_func_start Phase2_Transition5_Func6 -Phase2_Transition5_Func6: @ 811BB60 - push {r4-r6,lr} - sub sp, 0xC - adds r6, r0, 0 - ldr r4, _0811BBE4 @ =0x0200c000 - ldrb r0, [r4] - movs r1, 0 - strb r1, [r4] - adds r0, r4, 0 - adds r0, 0x24 - movs r2, 0x2C - ldrsh r3, [r4, r2] - str r1, [sp] - movs r1, 0x1 - str r1, [sp, 0x4] - str r1, [sp, 0x8] - movs r1, 0x78 - movs r2, 0x50 - bl sub_811D8FC - ldr r5, _0811BBE8 @ =gUnknown_03004DE0 -_0811BB88: - movs r2, 0x78 - ldrh r3, [r4, 0x28] - movs r1, 0x28 - ldrsh r0, [r4, r1] - cmp r0, 0x77 - ble _0811BB98 - movs r2, 0 - movs r3, 0xF0 -_0811BB98: - movs r0, 0x2A - ldrsh r1, [r4, r0] - lsls r1, 1 - adds r1, r5 - lsls r2, 8 - lsls r0, r3, 16 - asrs r0, 16 - orrs r0, r2 - strh r0, [r1] - adds r0, r4, 0 - adds r0, 0x24 - movs r1, 0x1 - movs r2, 0x1 - bl sub_811D978 - lsls r0, 24 - cmp r0, 0 - beq _0811BB88 - ldr r2, _0811BBE4 @ =0x0200c000 - ldrh r0, [r2, 0x2C] - adds r0, 0x10 - strh r0, [r2, 0x2C] - movs r1, 0x28 - ldrsh r0, [r2, r1] - cmp r0, 0x78 - ble _0811BBD2 - ldrh r0, [r6, 0x8] - adds r0, 0x1 - strh r0, [r6, 0x8] -_0811BBD2: - ldrb r0, [r2] - adds r0, 0x1 - ldrb r1, [r2] - strb r0, [r2] - movs r0, 0 - add sp, 0xC - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0811BBE4: .4byte 0x0200c000 -_0811BBE8: .4byte gUnknown_03004DE0 - thumb_func_end Phase2_Transition5_Func6 - - thumb_func_start Phase2_Transition5_Func7 -Phase2_Transition5_Func7: @ 811BBEC - push {lr} - ldr r1, _0811BC1C @ =0x040000b0 - ldrh r2, [r1, 0xA] - ldr r0, _0811BC20 @ =0x0000c5ff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r2, [r1, 0xA] - ldr r0, _0811BC24 @ =0x00007fff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r0, [r1, 0xA] - bl sub_811D6D4 - ldr r0, _0811BC28 @ =Phase2Task_Transition5 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_0811BC1C: .4byte 0x040000b0 -_0811BC20: .4byte 0x0000c5ff -_0811BC24: .4byte 0x00007fff -_0811BC28: .4byte Phase2Task_Transition5 - thumb_func_end Phase2_Transition5_Func7 - - thumb_func_start VBlankCB_Phase2_Transition5 -VBlankCB_Phase2_Transition5: @ 811BC2C - push {r4,lr} - ldr r4, _0811BC94 @ =0x040000b0 - ldrh r1, [r4, 0xA] - ldr r0, _0811BC98 @ =0x0000c5ff - ands r0, r1 - strh r0, [r4, 0xA] - ldrh r1, [r4, 0xA] - ldr r0, _0811BC9C @ =0x00007fff - ands r0, r1 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0xA] - bl VBlankCB_BattleTransition - ldr r2, _0811BCA0 @ =0x0200c000 - ldrb r0, [r2] - cmp r0, 0 - beq _0811BC62 - ldr r1, _0811BCA4 @ =0x040000d4 - ldr r0, _0811BCA8 @ =gUnknown_03004DE0 - str r0, [r1] - movs r3, 0xF0 - lsls r3, 3 - adds r0, r3 - str r0, [r1, 0x4] - ldr r0, _0811BCAC @ =0x800000a0 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] -_0811BC62: - ldr r1, _0811BCB0 @ =REG_WININ - ldrh r0, [r2, 0x2] - strh r0, [r1] - adds r1, 0x2 - ldrh r0, [r2, 0x4] - strh r0, [r1] - subs r1, 0x6 - ldrh r0, [r2, 0x8] - strh r0, [r1] - ldr r2, _0811BCB4 @ =REG_WIN0H - ldr r0, _0811BCA8 @ =gUnknown_03004DE0 - movs r1, 0xF0 - lsls r1, 3 - adds r0, r1 - ldrh r1, [r0] - strh r1, [r2] - str r0, [r4] - str r2, [r4, 0x4] - ldr r0, _0811BCB8 @ =0xa2400001 - str r0, [r4, 0x8] - ldr r0, [r4, 0x8] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0811BC94: .4byte 0x040000b0 -_0811BC98: .4byte 0x0000c5ff -_0811BC9C: .4byte 0x00007fff -_0811BCA0: .4byte 0x0200c000 -_0811BCA4: .4byte 0x040000d4 -_0811BCA8: .4byte gUnknown_03004DE0 -_0811BCAC: .4byte 0x800000a0 -_0811BCB0: .4byte REG_WININ -_0811BCB4: .4byte REG_WIN0H -_0811BCB8: .4byte 0xa2400001 - thumb_func_end VBlankCB_Phase2_Transition5 - - thumb_func_start Phase2Task_Transition6 -Phase2Task_Transition6: @ 811BCBC - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _0811BCEC @ =gUnknown_083FD814 - ldr r2, _0811BCF0 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_0811BCCE: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _0811BCCE - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0811BCEC: .4byte gUnknown_083FD814 -_0811BCF0: .4byte gTasks - thumb_func_end Phase2Task_Transition6 - - thumb_func_start sub_811BCF4 -sub_811BCF4: @ 811BCF4 - push {r4,r5,lr} - adds r5, r0, 0 - bl sub_811D658 - bl dp12_8087EA4 - movs r2, 0 - ldr r4, _0811BD48 @ =gUnknown_03005560 - ldr r3, _0811BD4C @ =0x0200c000 -_0811BD06: - lsls r0, r2, 1 - adds r0, r4 - ldrh r1, [r3, 0x16] - strh r1, [r0] - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x9F - bls _0811BD06 - ldr r0, _0811BD50 @ =sub_811BE3C - bl SetVBlankCallback - ldr r0, _0811BD54 @ =sub_811BE74 - bl SetHBlankCallback - ldr r2, _0811BD58 @ =0x04000200 - ldrh r0, [r2] - movs r1, 0x2 - orrs r0, r1 - strh r0, [r2] - ldr r2, _0811BD5C @ =REG_DISPSTAT - ldrh r0, [r2] - movs r1, 0x10 - orrs r0, r1 - strh r0, [r2] - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - movs r0, 0x1 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0811BD48: .4byte gUnknown_03005560 -_0811BD4C: .4byte 0x0200c000 -_0811BD50: .4byte sub_811BE3C -_0811BD54: .4byte sub_811BE74 -_0811BD58: .4byte 0x04000200 -_0811BD5C: .4byte REG_DISPSTAT - thumb_func_end sub_811BCF4 - - thumb_func_start sub_811BD60 -sub_811BD60: @ 811BD60 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - adds r6, r0, 0 - ldr r1, _0811BE28 @ =0x0200c000 - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - ldrh r2, [r6, 0xC] - lsls r1, r2, 16 - asrs r0, r1, 24 - lsls r0, 16 - lsrs r3, r0, 16 - ldrh r4, [r6, 0xA] - movs r0, 0xC0 - lsls r0, 1 - mov r8, r0 - movs r5, 0x80 - lsls r5, 3 - adds r0, r4, r5 - strh r0, [r6, 0xA] - ldr r0, _0811BE2C @ =0x1fff0000 - cmp r1, r0 - bgt _0811BD9A - movs r1, 0xC0 - lsls r1, 1 - adds r0, r2, r1 - strh r0, [r6, 0xC] -_0811BD9A: - movs r5, 0 - lsls r7, r3, 16 -_0811BD9E: - lsrs r0, r4, 8 - asrs r1, r7, 16 - bl Sin - ldr r1, _0811BE30 @ =gUnknown_03004DE0 - lsls r2, r5, 1 - adds r2, r1 - ldr r1, _0811BE28 @ =0x0200c000 - ldrh r1, [r1, 0x16] - adds r0, r1 - strh r0, [r2] - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - mov r1, r8 - adds r0, r4, r1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r5, 0x9F - bls _0811BD9E - ldrh r0, [r6, 0xE] - adds r0, 0x1 - strh r0, [r6, 0xE] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x51 - bne _0811BDEC - ldrh r0, [r6, 0x10] - adds r0, 0x1 - strh r0, [r6, 0x10] - movs r0, 0x1 - negs r0, r0 - movs r1, 0x2 - negs r1, r1 - movs r2, 0 - str r2, [sp] - movs r3, 0x10 - bl BeginNormalPaletteFade -_0811BDEC: - movs r5, 0x10 - ldrsh r0, [r6, r5] - cmp r0, 0 - beq _0811BE0E - ldr r0, _0811BE34 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0811BE0E - ldr r0, _0811BE38 @ =Phase2Task_Transition6 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_0811BE0E: - ldr r0, _0811BE28 @ =0x0200c000 - ldrb r1, [r0] - adds r1, 0x1 - ldrb r2, [r0] - strb r1, [r0] - movs r0, 0 - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0811BE28: .4byte 0x0200c000 -_0811BE2C: .4byte 0x1fff0000 -_0811BE30: .4byte gUnknown_03004DE0 -_0811BE34: .4byte gPaletteFade -_0811BE38: .4byte Phase2Task_Transition6 - thumb_func_end sub_811BD60 - - thumb_func_start sub_811BE3C -sub_811BE3C: @ 811BE3C + thumb_func_start VBlankCB_Phase2_Transition6 +VBlankCB_Phase2_Transition6: @ 811BE3C push {lr} bl VBlankCB_BattleTransition ldr r0, _0811BE64 @ =0x0200c000 @@ -583,10 +33,10 @@ _0811BE64: .4byte 0x0200c000 _0811BE68: .4byte 0x040000d4 _0811BE6C: .4byte gUnknown_03004DE0 _0811BE70: .4byte 0x800000a0 - thumb_func_end sub_811BE3C + thumb_func_end VBlankCB_Phase2_Transition6 - thumb_func_start sub_811BE74 -sub_811BE74: @ 811BE74 + thumb_func_start HBlankCB_Phase2_Transition6 +HBlankCB_Phase2_Transition6: @ 811BE74 ldr r1, _0811BE94 @ =gUnknown_03004DE0 ldr r0, _0811BE98 @ =REG_VCOUNT ldrh r0, [r0] @@ -607,7 +57,7 @@ sub_811BE74: @ 811BE74 _0811BE94: .4byte gUnknown_03004DE0 _0811BE98: .4byte REG_VCOUNT _0811BE9C: .4byte REG_BG1VOFS - thumb_func_end sub_811BE74 + thumb_func_end HBlankCB_Phase2_Transition6 thumb_func_start Phase2Task_Transition7 Phase2Task_Transition7: @ 811BEA0 diff --git a/data/battle_transition.s b/data/battle_transition.s index d71fa3594..187915f92 100644 --- a/data/battle_transition.s +++ b/data/battle_transition.s @@ -142,9 +142,9 @@ sPhase2_Transition5_Funcs:: @ 83FD7F8 .4byte Phase2_Transition5_Func7 .align 2 -gUnknown_083FD814:: @ 83FD814 - .4byte sub_811BCF4 - .4byte sub_811BD60 +sPhase2_Transition6_Funcs:: @ 83FD814 + .4byte Phase2_Transition6_Func1 + .4byte Phase2_Transition6_Func2 .align 2 gUnknown_083FD81C:: @ 83FD81C diff --git a/src/battle_transition.c b/src/battle_transition.c index fb20853a5..fa911d411 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -20,6 +20,7 @@ extern const TransitionState sPhase2_Transition2_Funcs[]; extern const TransitionState sPhase2_Transition3_Funcs[]; extern const TransitionState sPhase2_Transition4_Funcs[]; extern const TransitionState sPhase2_Transition5_Funcs[]; +extern const TransitionState sPhase2_Transition6_Funcs[]; extern const TaskFunc sPhase1_Tasks[]; extern const TaskFunc sPhase2_Tasks[]; @@ -69,11 +70,17 @@ void sub_811D658(void); static void VBlankCB_Phase2_Transition1(void); static void HBlankCB_Phase2_Transition1(void); + static void VBlankCB_Phase2_Transition2(void); static void HBlankCB_Phase2_Transition2(void); -void VBlankCB0_Phase2_Transition3(void); -void VBlankCB1_Phase2_Transition3(void); -void VBlankCB_Phase2_Transition5(void); + +static void VBlankCB0_Phase2_Transition3(void); +static void VBlankCB1_Phase2_Transition3(void); + +static void VBlankCB_Phase2_Transition5(void); + +void VBlankCB_Phase2_Transition6(void); +void HBlankCB_Phase2_Transition6(void); void VBlankCB_BattleTransition(void); void sub_811D6E8(s16* a0, s16 a1, s16 a2, s16 a3, s16 a4, s16 a5); @@ -510,7 +517,7 @@ static void Transition3_Vblank(void) REG_BLDALPHA = TRANSITION_STRUCT.field_10; } -void VBlankCB0_Phase2_Transition3(void) +static void VBlankCB0_Phase2_Transition3(void) { Transition3_Vblank(); DmaSet(0, gUnknown_03005560, ®_BG0HOFS, 0xA2400001); @@ -821,3 +828,168 @@ bool8 Phase2_Transition5_Func3(struct Task* task) TRANSITION_STRUCT.field_0++; return 0; } + +bool8 Phase2_Transition5_Func4(struct Task* task) +{ + TRANSITION_STRUCT.field_0 = 0; + + sub_811D8FC(&TRANSITION_STRUCT.field_24, 120, 80, TRANSITION_STRUCT.field_2C, 160, 1, 1); + do + { + gUnknown_03004DE0[0][TRANSITION_STRUCT.field_2A] = (TRANSITION_STRUCT.field_28 << 8) | 0xF0; + } while (!sub_811D978(&TRANSITION_STRUCT.field_24, 1, 1)); + + TRANSITION_STRUCT.field_2C -= 16; + if (TRANSITION_STRUCT.field_2C <= 0) + { + TRANSITION_STRUCT.field_2E = 160; + task->tState++; + } + + TRANSITION_STRUCT.field_0++; + return 0; +} + +bool8 Phase2_Transition5_Func5(struct Task* task) +{ + s16 r1, r2, r3; + vu8 var = 0; + + TRANSITION_STRUCT.field_0 = 0; + + sub_811D8FC(&TRANSITION_STRUCT.field_24, 120, 80, 0, TRANSITION_STRUCT.field_2E, 1, 1); + + while (1) + { + r1 = gUnknown_03004DE0[0][TRANSITION_STRUCT.field_2A] & 0xFF, r2 = TRANSITION_STRUCT.field_28; + if (TRANSITION_STRUCT.field_2E <= 80) + r2 = 120, r1 = TRANSITION_STRUCT.field_28; + gUnknown_03004DE0[0][TRANSITION_STRUCT.field_2A] = (r1) | (r2 << 8); + r3 = 0; + if (var != 0) + break; + var = sub_811D978(&TRANSITION_STRUCT.field_24, 1, 1); + } + + TRANSITION_STRUCT.field_2E -= 8; + if (TRANSITION_STRUCT.field_2E <= 0) + { + TRANSITION_STRUCT.field_2C = r3; + task->tState++; + } + else + { + while (TRANSITION_STRUCT.field_2A > TRANSITION_STRUCT.field_2E) + { + gUnknown_03004DE0[0][--TRANSITION_STRUCT.field_2A] = (r1) | (r2 << 8); + } + } + + TRANSITION_STRUCT.field_0++; + return 0; +} + +bool8 Phase2_Transition5_Func6(struct Task* task) +{ + TRANSITION_STRUCT.field_0 = 0; + + sub_811D8FC(&TRANSITION_STRUCT.field_24, 120, 80, TRANSITION_STRUCT.field_2C, 0, 1, 1); + do + { + s16 r2, r3; + + r2 = 120, r3 = TRANSITION_STRUCT.field_28; + if (TRANSITION_STRUCT.field_28 >= 120) + r2 = 0, r3 = 240; + gUnknown_03004DE0[0][TRANSITION_STRUCT.field_2A] = (r3) | (r2 << 8); + + } while (!sub_811D978(&TRANSITION_STRUCT.field_24, 1, 1)); + + TRANSITION_STRUCT.field_2C += 16; + if (TRANSITION_STRUCT.field_28 > 120) + task->tState++; + + TRANSITION_STRUCT.field_0++; + return 0; +} + +bool8 Phase2_Transition5_Func7(struct Task* task) +{ + DmaStop(0); + sub_811D6D4(); + DestroyTask(FindTaskIdByFunc(Phase2Task_Transition5)); + return 0; +} + +static void VBlankCB_Phase2_Transition5(void) +{ + DmaStop(0); + VBlankCB_BattleTransition(); + if (TRANSITION_STRUCT.field_0 != 0) + DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320); + REG_WININ = TRANSITION_STRUCT.field_2; + REG_WINOUT = TRANSITION_STRUCT.field_4; + REG_WIN0V = TRANSITION_STRUCT.field_8; + REG_WIN0H = gUnknown_03004DE0[1][0]; + DmaSet(0, gUnknown_03004DE0[1], ®_WIN0H, 0xA2400001); +} + +void Phase2Task_Transition6(u8 taskID) +{ + while (sPhase2_Transition6_Funcs[gTasks[taskID].tState](&gTasks[taskID])); +} + +bool8 Phase2_Transition6_Func1(struct Task* task) +{ + u8 i; + + sub_811D658(); + dp12_8087EA4(); + + for (i = 0; i < 160; i++) + { + gUnknown_03005560[i] = TRANSITION_STRUCT.field_16; + } + + SetVBlankCallback(VBlankCB_Phase2_Transition6); + SetHBlankCallback(HBlankCB_Phase2_Transition6); + + REG_IE |= 2; + REG_DISPSTAT |= 0x10; + + task->tState++; + return 1; +} + +bool8 Phase2_Transition6_Func2(struct Task* task) +{ + u8 i; + u16 r3, r4, r8; + + TRANSITION_STRUCT.field_0 = 0; + + r3 = task->data[2] >> 8; + r4 = task->data[1]; + r8 = 384; + task->data[1] += 0x400; + if (task->data[2] <= 0x1FFF) + task->data[2] += 0x180; + + for (i = 0; i < 160; i++, r4 += r8) + { + s16 sinResult = Sin(r4 >> 8, r3); + gUnknown_03004DE0[0][i] = TRANSITION_STRUCT.field_16 + sinResult; + } + + if (++task->data[3] == 81) + { + task->data[4]++; + BeginNormalPaletteFade(-1, -2, 0, 0x10, 0); + } + + if (task->data[4] != 0 && !gPaletteFade.active) + DestroyTask(FindTaskIdByFunc(Phase2Task_Transition6)); + + TRANSITION_STRUCT.field_0++; + return 0; +} -- cgit v1.2.3 From f84d0541314b043fa3ef4e2b9a56809f278787f9 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 20 Aug 2017 17:27:54 +0200 Subject: mugshots tasks done --- asm/battle_transition.s | 1223 ------------------------------------------- data/battle_transition.s | 72 +-- include/battle_transition.h | 16 +- include/songs.h | 2 +- src/battle_transition.c | 619 ++++++++++++++++------ 5 files changed, 524 insertions(+), 1408 deletions(-) diff --git a/asm/battle_transition.s b/asm/battle_transition.s index 37f50ebd9..ab4e54964 100644 --- a/asm/battle_transition.s +++ b/asm/battle_transition.s @@ -7,1229 +7,6 @@ .text - thumb_func_start VBlankCB_Phase2_Transition6 -VBlankCB_Phase2_Transition6: @ 811BE3C - push {lr} - bl VBlankCB_BattleTransition - ldr r0, _0811BE64 @ =0x0200c000 - ldrb r0, [r0] - cmp r0, 0 - beq _0811BE5E - ldr r1, _0811BE68 @ =0x040000d4 - ldr r0, _0811BE6C @ =gUnknown_03004DE0 - str r0, [r1] - movs r2, 0xF0 - lsls r2, 3 - adds r0, r2 - str r0, [r1, 0x4] - ldr r0, _0811BE70 @ =0x800000a0 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] -_0811BE5E: - pop {r0} - bx r0 - .align 2, 0 -_0811BE64: .4byte 0x0200c000 -_0811BE68: .4byte 0x040000d4 -_0811BE6C: .4byte gUnknown_03004DE0 -_0811BE70: .4byte 0x800000a0 - thumb_func_end VBlankCB_Phase2_Transition6 - - thumb_func_start HBlankCB_Phase2_Transition6 -HBlankCB_Phase2_Transition6: @ 811BE74 - ldr r1, _0811BE94 @ =gUnknown_03004DE0 - ldr r0, _0811BE98 @ =REG_VCOUNT - ldrh r0, [r0] - lsls r0, 1 - movs r2, 0xF0 - lsls r2, 3 - adds r1, r2 - adds r0, r1 - ldrh r1, [r0] - ldr r0, _0811BE9C @ =REG_BG1VOFS - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - bx lr - .align 2, 0 -_0811BE94: .4byte gUnknown_03004DE0 -_0811BE98: .4byte REG_VCOUNT -_0811BE9C: .4byte REG_BG1VOFS - thumb_func_end HBlankCB_Phase2_Transition6 - - thumb_func_start Phase2Task_Transition7 -Phase2Task_Transition7: @ 811BEA0 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _0811BED0 @ =gUnknown_083FD81C - ldr r2, _0811BED4 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_0811BEB2: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _0811BEB2 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0811BED0: .4byte gUnknown_083FD81C -_0811BED4: .4byte gTasks - thumb_func_end Phase2Task_Transition7 - - thumb_func_start sub_811BED8 -sub_811BED8: @ 811BED8 - push {r4,lr} - adds r4, r0, 0 - bl sub_811D658 - bl dp12_8087EA4 - ldr r1, _0811BF20 @ =0x0200c000 - movs r2, 0 - movs r0, 0x3F - strh r0, [r1, 0x2] - strh r2, [r1, 0x4] - movs r0, 0xF0 - strh r0, [r1, 0x6] - movs r0, 0xA0 - strh r0, [r1, 0x8] - movs r1, 0 - ldr r3, _0811BF24 @ =gUnknown_03005560 - movs r2, 0xF2 -_0811BEFC: - lsls r0, r1, 1 - adds r0, r3 - strh r2, [r0] - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x9F - bls _0811BEFC - ldr r0, _0811BF28 @ =sub_811C004 - bl SetVBlankCallback - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0x1 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0811BF20: .4byte 0x0200c000 -_0811BF24: .4byte gUnknown_03005560 -_0811BF28: .4byte sub_811C004 - thumb_func_end sub_811BED8 - - thumb_func_start sub_811BF2C -sub_811BF2C: @ 811BF2C - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r4, r0, 0 - ldr r1, _0811BFBC @ =0x0200c000 - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - ldr r7, _0811BFC0 @ =gUnknown_03004DE0 - ldrh r0, [r4, 0xC] - ldrb r5, [r4, 0xC] - adds r0, 0x10 - strh r0, [r4, 0xC] - ldrh r0, [r4, 0xA] - adds r0, 0x8 - strh r0, [r4, 0xA] - movs r6, 0 - movs r0, 0x1 - mov r8, r0 -_0811BF52: - adds r0, r5, 0 - movs r1, 0x28 - bl Sin - ldrh r1, [r4, 0xA] - adds r0, r1 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r0, 0 - bge _0811BF68 - movs r1, 0 -_0811BF68: - lsls r0, r1, 16 - asrs r0, 16 - cmp r0, 0xF0 - ble _0811BF72 - movs r1, 0xF0 -_0811BF72: - lsls r0, r1, 16 - asrs r0, 16 - lsls r1, r0, 8 - movs r2, 0xF1 - orrs r1, r2 - strh r1, [r7] - cmp r0, 0xEF - bgt _0811BF86 - movs r0, 0 - mov r8, r0 -_0811BF86: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - adds r0, r5, 0x4 - lsls r0, 24 - lsrs r5, r0, 24 - adds r7, 0x2 - cmp r6, 0x9F - bls _0811BF52 - mov r1, r8 - cmp r1, 0 - beq _0811BFA4 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_0811BFA4: - ldr r0, _0811BFBC @ =0x0200c000 - ldrb r1, [r0] - adds r1, 0x1 - ldrb r2, [r0] - strb r1, [r0] - movs r0, 0 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0811BFBC: .4byte 0x0200c000 -_0811BFC0: .4byte gUnknown_03004DE0 - thumb_func_end sub_811BF2C - - thumb_func_start sub_811BFC4 -sub_811BFC4: @ 811BFC4 - push {lr} - ldr r1, _0811BFF4 @ =0x040000b0 - ldrh r2, [r1, 0xA] - ldr r0, _0811BFF8 @ =0x0000c5ff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r2, [r1, 0xA] - ldr r0, _0811BFFC @ =0x00007fff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r0, [r1, 0xA] - bl sub_811D6D4 - ldr r0, _0811C000 @ =Phase2Task_Transition7 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_0811BFF4: .4byte 0x040000b0 -_0811BFF8: .4byte 0x0000c5ff -_0811BFFC: .4byte 0x00007fff -_0811C000: .4byte Phase2Task_Transition7 - thumb_func_end sub_811BFC4 - - thumb_func_start sub_811C004 -sub_811C004: @ 811C004 - push {r4,lr} - ldr r4, _0811C060 @ =0x040000b0 - ldrh r1, [r4, 0xA] - ldr r0, _0811C064 @ =0x0000c5ff - ands r0, r1 - strh r0, [r4, 0xA] - ldrh r1, [r4, 0xA] - ldr r0, _0811C068 @ =0x00007fff - ands r0, r1 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0xA] - bl VBlankCB_BattleTransition - ldr r2, _0811C06C @ =0x0200c000 - ldrb r0, [r2] - cmp r0, 0 - beq _0811C03A - ldr r1, _0811C070 @ =0x040000d4 - ldr r0, _0811C074 @ =gUnknown_03004DE0 - str r0, [r1] - movs r3, 0xF0 - lsls r3, 3 - adds r0, r3 - str r0, [r1, 0x4] - ldr r0, _0811C078 @ =0x800000a0 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] -_0811C03A: - ldr r1, _0811C07C @ =REG_WININ - ldrh r0, [r2, 0x2] - strh r0, [r1] - adds r1, 0x2 - ldrh r0, [r2, 0x4] - strh r0, [r1] - subs r1, 0x6 - ldrh r0, [r2, 0x8] - strh r0, [r1] - ldr r0, _0811C080 @ =gUnknown_03005560 - str r0, [r4] - ldr r0, _0811C084 @ =REG_WIN0H - str r0, [r4, 0x4] - ldr r0, _0811C088 @ =0xa2400001 - str r0, [r4, 0x8] - ldr r0, [r4, 0x8] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0811C060: .4byte 0x040000b0 -_0811C064: .4byte 0x0000c5ff -_0811C068: .4byte 0x00007fff -_0811C06C: .4byte 0x0200c000 -_0811C070: .4byte 0x040000d4 -_0811C074: .4byte gUnknown_03004DE0 -_0811C078: .4byte 0x800000a0 -_0811C07C: .4byte REG_WININ -_0811C080: .4byte gUnknown_03005560 -_0811C084: .4byte REG_WIN0H -_0811C088: .4byte 0xa2400001 - thumb_func_end sub_811C004 - - thumb_func_start Phase2Task_Transition12 -Phase2Task_Transition12: @ 811C08C - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0811C0A8 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r2, 0 - strh r2, [r1, 0x26] - bl sub_811C12C - pop {r0} - bx r0 - .align 2, 0 -_0811C0A8: .4byte gTasks - thumb_func_end Phase2Task_Transition12 - - thumb_func_start Phase2Task_Transition13 -Phase2Task_Transition13: @ 811C0AC - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0811C0C8 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r2, 0x1 - strh r2, [r1, 0x26] - bl sub_811C12C - pop {r0} - bx r0 - .align 2, 0 -_0811C0C8: .4byte gTasks - thumb_func_end Phase2Task_Transition13 - - thumb_func_start Phase2Task_Transition14 -Phase2Task_Transition14: @ 811C0CC - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0811C0E8 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r2, 0x2 - strh r2, [r1, 0x26] - bl sub_811C12C - pop {r0} - bx r0 - .align 2, 0 -_0811C0E8: .4byte gTasks - thumb_func_end Phase2Task_Transition14 - - thumb_func_start Phase2Task_Transition15 -Phase2Task_Transition15: @ 811C0EC - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0811C108 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r2, 0x3 - strh r2, [r1, 0x26] - bl sub_811C12C - pop {r0} - bx r0 - .align 2, 0 -_0811C108: .4byte gTasks - thumb_func_end Phase2Task_Transition15 - - thumb_func_start Phase2Task_Transition16 -Phase2Task_Transition16: @ 811C10C - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0811C128 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r2, 0x4 - strh r2, [r1, 0x26] - bl sub_811C12C - pop {r0} - bx r0 - .align 2, 0 -_0811C128: .4byte gTasks - thumb_func_end Phase2Task_Transition16 - - thumb_func_start sub_811C12C -sub_811C12C: @ 811C12C - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _0811C15C @ =gUnknown_083FD828 - ldr r2, _0811C160 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_0811C13E: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _0811C13E - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0811C15C: .4byte gUnknown_083FD828 -_0811C160: .4byte gTasks - thumb_func_end sub_811C12C - - thumb_func_start sub_811C164 -sub_811C164: @ 811C164 - push {r4,lr} - adds r4, r0, 0 - bl sub_811D658 - bl dp12_8087EA4 - adds r0, r4, 0 - bl sub_811C7B0 - movs r0, 0 - strh r0, [r4, 0xA] - movs r0, 0x1 - strh r0, [r4, 0xC] - movs r0, 0xEF - strh r0, [r4, 0xE] - ldr r1, _0811C1BC @ =0x0200c000 - movs r0, 0x3F - strh r0, [r1, 0x2] - movs r0, 0x3E - strh r0, [r1, 0x4] - movs r0, 0xA0 - strh r0, [r1, 0x8] - movs r1, 0 - ldr r3, _0811C1C0 @ =gUnknown_03005560 - ldr r2, _0811C1C4 @ =0x0000f0f1 -_0811C196: - lsls r0, r1, 1 - adds r0, r3 - strh r2, [r0] - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x9F - bls _0811C196 - ldr r0, _0811C1C8 @ =sub_811C670 - bl SetVBlankCallback - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0811C1BC: .4byte 0x0200c000 -_0811C1C0: .4byte gUnknown_03005560 -_0811C1C4: .4byte 0x0000f0f1 -_0811C1C8: .4byte sub_811C670 - thumb_func_end sub_811C164 - - thumb_func_start sub_811C1CC -sub_811C1CC: @ 811C1CC - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - mov r8, r0 - ldr r6, _0811C284 @ =gUnknown_083FDFF4 - add r1, sp, 0x4 - mov r0, sp - bl sub_811D6A8 - ldr r0, _0811C288 @ =gUnknown_083FC348 - ldr r1, [sp, 0x4] - movs r2, 0xF0 - bl CpuSet - ldr r1, _0811C28C @ =gUnknown_083FDB00 - mov r2, r8 - movs r3, 0x26 - ldrsh r0, [r2, r3] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0xF0 - movs r2, 0x20 - bl LoadPalette - ldr r1, _0811C290 @ =gUnknown_083FDB14 - ldr r0, _0811C294 @ =gSaveBlock2 - ldrb r0, [r0, 0x8] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0xFA - movs r2, 0xC - bl LoadPalette - movs r1, 0 - ldr r5, [sp] - ldr r0, _0811C298 @ =sub_811C77C - mov r12, r0 - movs r2, 0xF0 - lsls r2, 8 - adds r7, r2, 0 -_0811C222: - movs r0, 0 - lsls r3, r1, 16 - asrs r4, r3, 11 -_0811C228: - lsls r2, r0, 16 - asrs r2, 16 - adds r1, r4, r2 - lsls r1, 1 - adds r1, r5 - ldrh r0, [r6] - orrs r0, r7 - strh r0, [r1] - adds r2, 0x1 - lsls r2, 16 - adds r6, 0x2 - lsrs r0, r2, 16 - asrs r2, 16 - cmp r2, 0x1F - ble _0811C228 - movs r1, 0x80 - lsls r1, 9 - adds r0, r3, r1 - lsrs r1, r0, 16 - asrs r0, 16 - cmp r0, 0x13 - ble _0811C222 - ldr r2, _0811C29C @ =0x04000200 - ldrh r0, [r2] - movs r1, 0x2 - orrs r0, r1 - strh r0, [r2] - ldr r2, _0811C2A0 @ =REG_DISPSTAT - ldrh r0, [r2] - movs r1, 0x10 - orrs r0, r1 - strh r0, [r2] - mov r0, r12 - bl SetHBlankCallback - mov r2, r8 - ldrh r0, [r2, 0x8] - adds r0, 0x1 - strh r0, [r2, 0x8] - movs r0, 0 - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0811C284: .4byte gUnknown_083FDFF4 -_0811C288: .4byte gUnknown_083FC348 -_0811C28C: .4byte gUnknown_083FDB00 -_0811C290: .4byte gUnknown_083FDB14 -_0811C294: .4byte gSaveBlock2 -_0811C298: .4byte sub_811C77C -_0811C29C: .4byte 0x04000200 -_0811C2A0: .4byte REG_DISPSTAT - thumb_func_end sub_811C1CC - - thumb_func_start sub_811C2A4 -sub_811C2A4: @ 811C2A4 - push {r4-r7,lr} - adds r4, r0, 0 - ldr r1, _0811C384 @ =0x0200c000 - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - ldr r7, _0811C388 @ =gUnknown_03004DE0 - ldrh r0, [r4, 0xA] - ldrb r5, [r4, 0xA] - adds r0, 0x10 - strh r0, [r4, 0xA] - movs r6, 0 -_0811C2BC: - adds r0, r5, 0 - movs r1, 0x10 - bl Sin - ldrh r1, [r4, 0xC] - adds r0, r1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r0, 0 - bge _0811C2D2 - movs r2, 0x1 -_0811C2D2: - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0xF0 - ble _0811C2DC - movs r2, 0xF0 -_0811C2DC: - strh r2, [r7] - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - adds r7, 0x2 - adds r0, r5, 0 - adds r0, 0x10 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r6, 0x4F - bls _0811C2BC - cmp r6, 0x9F - bhi _0811C334 -_0811C2F6: - adds r0, r5, 0 - movs r1, 0x10 - bl Sin - ldrh r1, [r4, 0xE] - subs r1, r0 - lsls r1, 16 - lsrs r2, r1, 16 - cmp r1, 0 - bge _0811C30C - movs r2, 0 -_0811C30C: - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0xEF - ble _0811C316 - movs r2, 0xEF -_0811C316: - lsls r0, r2, 16 - asrs r0, 8 - movs r1, 0xF0 - orrs r0, r1 - strh r0, [r7] - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - adds r7, 0x2 - adds r0, r5, 0 - adds r0, 0x10 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r6, 0x9F - bls _0811C2F6 -_0811C334: - ldrh r1, [r4, 0xC] - adds r1, 0x8 - strh r1, [r4, 0xC] - ldrh r0, [r4, 0xE] - subs r0, 0x8 - strh r0, [r4, 0xE] - lsls r1, 16 - asrs r1, 16 - cmp r1, 0xF0 - ble _0811C34C - movs r0, 0xF0 - strh r0, [r4, 0xC] -_0811C34C: - movs r1, 0xE - ldrsh r0, [r4, r1] - cmp r0, 0 - bge _0811C358 - movs r0, 0 - strh r0, [r4, 0xE] -_0811C358: - ldr r0, [r4, 0xC] - cmp r0, 0xF0 - bne _0811C364 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_0811C364: - ldr r1, _0811C384 @ =0x0200c000 - ldrh r0, [r1, 0x18] - subs r0, 0x8 - strh r0, [r1, 0x18] - ldrh r0, [r1, 0x1A] - adds r0, 0x8 - strh r0, [r1, 0x1A] - ldrb r0, [r1] - adds r0, 0x1 - ldrb r2, [r1] - strb r0, [r1] - movs r0, 0 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0811C384: .4byte 0x0200c000 -_0811C388: .4byte gUnknown_03004DE0 - thumb_func_end sub_811C2A4 - - thumb_func_start sub_811C38C -sub_811C38C: @ 811C38C - push {r4,r5,lr} - adds r4, r0, 0 - ldr r0, _0811C3F8 @ =0x0200c000 - ldrb r1, [r0] - movs r1, 0 - strb r1, [r0] - ldr r2, _0811C3FC @ =gUnknown_03004DE0 - adds r5, r0, 0 - movs r3, 0xF0 -_0811C39E: - strh r3, [r2] - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - adds r2, 0x2 - cmp r1, 0x9F - bls _0811C39E - ldrh r0, [r4, 0x8] - adds r0, 0x1 - movs r1, 0 - strh r0, [r4, 0x8] - strh r1, [r4, 0xA] - strh r1, [r4, 0xC] - strh r1, [r4, 0xE] - ldrh r0, [r5, 0x18] - subs r0, 0x8 - strh r0, [r5, 0x18] - ldrh r0, [r5, 0x1A] - adds r0, 0x8 - strh r0, [r5, 0x1A] - movs r1, 0x22 - ldrsh r0, [r4, r1] - movs r1, 0 - bl sub_811CA10 - movs r1, 0x24 - ldrsh r0, [r4, r1] - movs r1, 0x1 - bl sub_811CA10 - movs r1, 0x22 - ldrsh r0, [r4, r1] - bl sub_811CA28 - movs r0, 0x68 - bl PlaySE - ldrb r0, [r5] - adds r0, 0x1 - ldrb r1, [r5] - strb r0, [r5] - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0811C3F8: .4byte 0x0200c000 -_0811C3FC: .4byte gUnknown_03004DE0 - thumb_func_end sub_811C38C - - thumb_func_start sub_811C400 -sub_811C400: @ 811C400 - push {r4,lr} - adds r4, r0, 0 - ldr r1, _0811C438 @ =0x0200c000 - ldrh r0, [r1, 0x18] - subs r0, 0x8 - strh r0, [r1, 0x18] - ldrh r0, [r1, 0x1A] - adds r0, 0x8 - strh r0, [r1, 0x1A] - movs r1, 0x22 - ldrsh r0, [r4, r1] - bl sub_811CA44 - lsls r0, 16 - cmp r0, 0 - beq _0811C42E - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r1, 0x24 - ldrsh r0, [r4, r1] - bl sub_811CA28 -_0811C42E: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0811C438: .4byte 0x0200c000 - thumb_func_end sub_811C400 - - thumb_func_start sub_811C43C -sub_811C43C: @ 811C43C - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r6, r0, 0 - ldr r7, _0811C4D0 @ =0x0200c000 - ldrh r0, [r7, 0x18] - subs r0, 0x8 - movs r1, 0 - mov r8, r1 - strh r0, [r7, 0x18] - ldrh r0, [r7, 0x1A] - adds r0, 0x8 - strh r0, [r7, 0x1A] - movs r1, 0x24 - ldrsh r0, [r6, r1] - bl sub_811CA44 - lsls r0, 16 - cmp r0, 0 - beq _0811C4C4 - ldrb r0, [r7] - movs r0, 0 - strb r0, [r7] - movs r0, 0 - bl SetVBlankCallback - ldr r1, _0811C4D4 @ =0x040000b0 - ldrh r2, [r1, 0xA] - ldr r0, _0811C4D8 @ =0x0000c5ff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r2, [r1, 0xA] - ldr r0, _0811C4DC @ =0x00007fff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r0, [r1, 0xA] - ldr r4, _0811C4E0 @ =gUnknown_03004DE0 - movs r5, 0xA0 - lsls r5, 1 - adds r0, r4, 0 - movs r1, 0 - adds r2, r5, 0 - bl memset - movs r0, 0xF0 - lsls r0, 3 - adds r4, r0 - adds r0, r4, 0 - movs r1, 0 - adds r2, r5, 0 - bl memset - ldr r1, _0811C4E4 @ =REG_WIN0H - movs r0, 0xF0 - strh r0, [r1] - ldr r0, _0811C4E8 @ =REG_BLDY - mov r1, r8 - strh r1, [r0] - ldrh r0, [r6, 0x8] - adds r0, 0x1 - strh r0, [r6, 0x8] - strh r1, [r6, 0xE] - strh r1, [r6, 0x10] - movs r0, 0xBF - strh r0, [r7, 0xE] - ldr r0, _0811C4EC @ =sub_811C700 - bl SetVBlankCallback -_0811C4C4: - movs r0, 0 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0811C4D0: .4byte 0x0200c000 -_0811C4D4: .4byte 0x040000b0 -_0811C4D8: .4byte 0x0000c5ff -_0811C4DC: .4byte 0x00007fff -_0811C4E0: .4byte gUnknown_03004DE0 -_0811C4E4: .4byte REG_WIN0H -_0811C4E8: .4byte REG_BLDY -_0811C4EC: .4byte sub_811C700 - thumb_func_end sub_811C43C - - thumb_func_start sub_811C4F0 -sub_811C4F0: @ 811C4F0 - push {r4-r7,lr} - adds r4, r0, 0 - ldr r1, _0811C5AC @ =0x0200c000 - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - movs r6, 0x1 - ldrh r0, [r1, 0x18] - subs r0, 0x8 - strh r0, [r1, 0x18] - ldrh r0, [r1, 0x1A] - adds r0, 0x8 - strh r0, [r1, 0x1A] - ldrh r2, [r4, 0x10] - movs r3, 0x10 - ldrsh r0, [r4, r3] - adds r7, r1, 0 - cmp r0, 0x4F - bgt _0811C51A - adds r0, r2, 0x2 - strh r0, [r4, 0x10] -_0811C51A: - movs r1, 0x10 - ldrsh r0, [r4, r1] - cmp r0, 0x50 - ble _0811C526 - movs r0, 0x50 - strh r0, [r4, 0x10] -_0811C526: - ldrh r0, [r4, 0xE] - adds r0, 0x1 - strh r0, [r4, 0xE] - movs r1, 0x1 - ands r0, r1 - ldrh r2, [r4, 0x10] - cmp r0, 0 - beq _0811C58C - movs r3, 0 - lsls r0, r2, 16 - movs r6, 0 - cmp r0, 0 - blt _0811C58C - movs r2, 0x50 - mov r12, r2 - ldr r5, _0811C5B0 @ =gUnknown_03004DE0 -_0811C546: - lsls r0, r3, 16 - asrs r2, r0, 16 - mov r3, r12 - subs r1, r3, r2 - adds r0, r2, 0 - adds r0, 0x50 - lsls r0, 16 - lsrs r3, r0, 16 - lsls r1, 16 - asrs r1, 15 - adds r1, r5 - ldrh r0, [r1] - cmp r0, 0xF - bhi _0811C568 - movs r6, 0x1 - adds r0, 0x1 - strh r0, [r1] -_0811C568: - lsls r0, r3, 16 - asrs r0, 15 - adds r1, r0, r5 - ldrh r0, [r1] - cmp r0, 0xF - bhi _0811C57A - movs r6, 0x1 - adds r0, 0x1 - strh r0, [r1] -_0811C57A: - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - asrs r0, 16 - movs r2, 0x10 - ldrsh r1, [r4, r2] - ldrh r2, [r4, 0x10] - cmp r0, r1 - ble _0811C546 -_0811C58C: - cmp r2, 0x50 - bne _0811C59A - cmp r6, 0 - bne _0811C59A - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_0811C59A: - ldrb r0, [r7] - adds r0, 0x1 - ldrb r1, [r7] - strb r0, [r7] - movs r0, 0 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0811C5AC: .4byte 0x0200c000 -_0811C5B0: .4byte gUnknown_03004DE0 - thumb_func_end sub_811C4F0 - - thumb_func_start sub_811C5B4 -sub_811C5B4: @ 811C5B4 - push {r4-r6,lr} - adds r5, r0, 0 - ldr r4, _0811C5E0 @ =0x0200c000 - ldrb r0, [r4] - movs r6, 0 - strb r6, [r4] - movs r0, 0x1 - negs r0, r0 - ldr r2, _0811C5E4 @ =0x00007fff - movs r1, 0x10 - bl BlendPalettes - movs r0, 0xFF - strh r0, [r4, 0xE] - strh r6, [r5, 0xE] - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - movs r0, 0x1 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0811C5E0: .4byte 0x0200c000 -_0811C5E4: .4byte 0x00007fff - thumb_func_end sub_811C5B4 - - thumb_func_start sub_811C5E8 -sub_811C5E8: @ 811C5E8 - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _0811C628 @ =0x0200c000 - ldrb r0, [r5] - movs r0, 0 - strb r0, [r5] - ldrh r0, [r4, 0xE] - adds r0, 0x1 - strh r0, [r4, 0xE] - ldr r0, _0811C62C @ =gUnknown_03004DE0 - movs r2, 0xE - ldrsh r1, [r4, r2] - movs r2, 0xA0 - lsls r2, 1 - bl memset - movs r1, 0xE - ldrsh r0, [r4, r1] - cmp r0, 0xF - ble _0811C616 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_0811C616: - ldrb r0, [r5] - adds r0, 0x1 - ldrb r1, [r5] - strb r0, [r5] - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0811C628: .4byte 0x0200c000 -_0811C62C: .4byte gUnknown_03004DE0 - thumb_func_end sub_811C5E8 - - thumb_func_start sub_811C630 -sub_811C630: @ 811C630 - push {r4,lr} - adds r4, r0, 0 - ldr r1, _0811C664 @ =0x040000b0 - ldrh r2, [r1, 0xA] - ldr r0, _0811C668 @ =0x0000c5ff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r2, [r1, 0xA] - ldr r0, _0811C66C @ =0x00007fff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r0, [r1, 0xA] - bl sub_811D6D4 - ldr r0, [r4] - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0811C664: .4byte 0x040000b0 -_0811C668: .4byte 0x0000c5ff -_0811C66C: .4byte 0x00007fff - thumb_func_end sub_811C630 - - thumb_func_start sub_811C670 -sub_811C670: @ 811C670 - push {r4,lr} - ldr r4, _0811C6D4 @ =0x040000b0 - ldrh r1, [r4, 0xA] - ldr r0, _0811C6D8 @ =0x0000c5ff - ands r0, r1 - strh r0, [r4, 0xA] - ldrh r1, [r4, 0xA] - ldr r0, _0811C6DC @ =0x00007fff - ands r0, r1 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0xA] - bl VBlankCB_BattleTransition - ldr r2, _0811C6E0 @ =0x0200c000 - ldrb r0, [r2] - cmp r0, 0 - beq _0811C6A6 - ldr r1, _0811C6E4 @ =0x040000d4 - ldr r0, _0811C6E8 @ =gUnknown_03004DE0 - str r0, [r1] - movs r3, 0xF0 - lsls r3, 3 - adds r0, r3 - str r0, [r1, 0x4] - ldr r0, _0811C6EC @ =0x800000a0 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] -_0811C6A6: - ldr r1, _0811C6F0 @ =REG_BG0VOFS - ldrh r0, [r2, 0x1C] - strh r0, [r1] - adds r1, 0x36 - ldrh r0, [r2, 0x2] - strh r0, [r1] - adds r1, 0x2 - ldrh r0, [r2, 0x4] - strh r0, [r1] - subs r1, 0x6 - ldrh r0, [r2, 0x8] - strh r0, [r1] - ldr r0, _0811C6F4 @ =gUnknown_03005560 - str r0, [r4] - ldr r0, _0811C6F8 @ =REG_WIN0H - str r0, [r4, 0x4] - ldr r0, _0811C6FC @ =0xa2400001 - str r0, [r4, 0x8] - ldr r0, [r4, 0x8] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0811C6D4: .4byte 0x040000b0 -_0811C6D8: .4byte 0x0000c5ff -_0811C6DC: .4byte 0x00007fff -_0811C6E0: .4byte 0x0200c000 -_0811C6E4: .4byte 0x040000d4 -_0811C6E8: .4byte gUnknown_03004DE0 -_0811C6EC: .4byte 0x800000a0 -_0811C6F0: .4byte REG_BG0VOFS -_0811C6F4: .4byte gUnknown_03005560 -_0811C6F8: .4byte REG_WIN0H -_0811C6FC: .4byte 0xa2400001 - thumb_func_end sub_811C670 - - thumb_func_start sub_811C700 -sub_811C700: @ 811C700 - push {r4,lr} - ldr r4, _0811C750 @ =0x040000b0 - ldrh r1, [r4, 0xA] - ldr r0, _0811C754 @ =0x0000c5ff - ands r0, r1 - strh r0, [r4, 0xA] - ldrh r1, [r4, 0xA] - ldr r0, _0811C758 @ =0x00007fff - ands r0, r1 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0xA] - bl VBlankCB_BattleTransition - ldr r2, _0811C75C @ =0x0200c000 - ldrb r0, [r2] - cmp r0, 0 - beq _0811C736 - ldr r1, _0811C760 @ =0x040000d4 - ldr r0, _0811C764 @ =gUnknown_03004DE0 - str r0, [r1] - movs r3, 0xF0 - lsls r3, 3 - adds r0, r3 - str r0, [r1, 0x4] - ldr r0, _0811C768 @ =0x800000a0 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] -_0811C736: - ldr r1, _0811C76C @ =REG_BLDCNT - ldrh r0, [r2, 0xE] - strh r0, [r1] - ldr r0, _0811C770 @ =gUnknown_03005560 - str r0, [r4] - ldr r0, _0811C774 @ =REG_BLDY - str r0, [r4, 0x4] - ldr r0, _0811C778 @ =0xa2400001 - str r0, [r4, 0x8] - ldr r0, [r4, 0x8] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0811C750: .4byte 0x040000b0 -_0811C754: .4byte 0x0000c5ff -_0811C758: .4byte 0x00007fff -_0811C75C: .4byte 0x0200c000 -_0811C760: .4byte 0x040000d4 -_0811C764: .4byte gUnknown_03004DE0 -_0811C768: .4byte 0x800000a0 -_0811C76C: .4byte REG_BLDCNT -_0811C770: .4byte gUnknown_03005560 -_0811C774: .4byte REG_BLDY -_0811C778: .4byte 0xa2400001 - thumb_func_end sub_811C700 - - thumb_func_start sub_811C77C -sub_811C77C: @ 811C77C - push {lr} - ldr r0, _0811C790 @ =REG_VCOUNT - ldrh r0, [r0] - cmp r0, 0x4F - bhi _0811C79C - ldr r0, _0811C794 @ =REG_BG0HOFS - ldr r1, _0811C798 @ =0x0200c000 - ldrh r1, [r1, 0x18] - b _0811C7A2 - .align 2, 0 -_0811C790: .4byte REG_VCOUNT -_0811C794: .4byte REG_BG0HOFS -_0811C798: .4byte 0x0200c000 -_0811C79C: - ldr r0, _0811C7A8 @ =REG_BG0HOFS - ldr r1, _0811C7AC @ =0x0200c000 - ldrh r1, [r1, 0x1A] -_0811C7A2: - strh r1, [r0] - pop {r0} - bx r0 - .align 2, 0 -_0811C7A8: .4byte REG_BG0HOFS -_0811C7AC: .4byte 0x0200c000 - thumb_func_end sub_811C77C thumb_func_start sub_811C7B0 sub_811C7B0: @ 811C7B0 diff --git a/data/battle_transition.s b/data/battle_transition.s index 187915f92..94b242ed3 100644 --- a/data/battle_transition.s +++ b/data/battle_transition.s @@ -69,11 +69,11 @@ sPhase2_Tasks:: @ 83FD750 .4byte Phase2Task_Transition9 .4byte Phase2Task_Transition10 .4byte Phase2Task_Transition11 - .4byte Phase2Task_Transition12 - .4byte Phase2Task_Transition13 - .4byte Phase2Task_Transition14 - .4byte Phase2Task_Transition15 - .4byte Phase2Task_Transition16 + .4byte Phase2Task_Transition_Sydney + .4byte Phase2Task_Transition_Phoebe + .4byte Phase2Task_Transition_Glacia + .4byte Phase2Task_Transition_Drake + .4byte Phase2Task_Transition_Steven .align 2 sMainTransitionPhases:: @ 83FD794 @@ -147,23 +147,23 @@ sPhase2_Transition6_Funcs:: @ 83FD814 .4byte Phase2_Transition6_Func2 .align 2 -gUnknown_083FD81C:: @ 83FD81C - .4byte sub_811BED8 - .4byte sub_811BF2C - .4byte sub_811BFC4 +sPhase2_Transition7_Funcs:: @ 83FD81C + .4byte Phase2_Transition7_Func1 + .4byte Phase2_Transition7_Func2 + .4byte Phase2_Transition7_Func3 .align 2 -gUnknown_083FD828:: @ 83FD828 - .4byte sub_811C164 - .4byte sub_811C1CC - .4byte sub_811C2A4 - .4byte sub_811C38C - .4byte sub_811C400 - .4byte sub_811C43C - .4byte sub_811C4F0 - .4byte sub_811C5B4 - .4byte sub_811C5E8 - .4byte sub_811C630 +sPhase2_Mugshot_Transition_Funcs:: @ 83FD828 + .4byte Phase2_Mugshot_Func1 + .4byte Phase2_Mugshot_Func2 + .4byte Phase2_Mugshot_Func3 + .4byte Phase2_Mugshot_Func4 + .4byte Phase2_Mugshot_Func5 + .4byte Phase2_Mugshot_Func6 + .4byte Phase2_Mugshot_Func7 + .4byte Phase2_Mugshot_Func8 + .4byte Phase2_Mugshot_Func9 + .4byte Phase2_Mugshot_Func10 gUnknown_083FD850:: @ 83FD850 .byte TRAINER_PIC_SIDNEY @@ -342,45 +342,45 @@ gFieldEffectObjectPaletteInfo10:: @ 83FDA18 obj_pal gFieldEffectObjectPalette10, 0x1009 .align 2 -Unknown_83FDA20: +sMugshotPal_Sydney: .incbin "graphics/battle_transitions/sidney_bg.gbapal" .align 2 -Unknown_83FDA40: +sMugshotPal_Phoebe: .incbin "graphics/battle_transitions/phoebe_bg.gbapal" .align 2 -Unknown_83FDA60: +sMugshotPal_Glacia: .incbin "graphics/battle_transitions/glacia_bg.gbapal" .align 2 -Unknown_83FDA80: +sMugshotPal_Drake: .incbin "graphics/battle_transitions/drake_bg.gbapal" .align 2 -Unknown_83FDAA0: +sMugshotPal_Steven: .incbin "graphics/battle_transitions/steven_bg.gbapal" .align 2 -Unknown_83FDAC0: +sMugshotPal_Brendan: .incbin "graphics/battle_transitions/brendan_bg.gbapal" .align 2 -Unknown_83FDAE0: +sMugshotPal_May: .incbin "graphics/battle_transitions/may_bg.gbapal" .align 2 -gUnknown_083FDB00:: @ 83FDB00 - .4byte Unknown_83FDA20 - .4byte Unknown_83FDA40 - .4byte Unknown_83FDA60 - .4byte Unknown_83FDA80 - .4byte Unknown_83FDAA0 +sOpponentMugshotsPals:: @ 83FDB00 + .4byte sMugshotPal_Sydney + .4byte sMugshotPal_Phoebe + .4byte sMugshotPal_Glacia + .4byte sMugshotPal_Drake + .4byte sMugshotPal_Steven .align 2 -gUnknown_083FDB14:: @ 83FDB14 - .4byte Unknown_83FDAC0 - .4byte Unknown_83FDAE0 +sPlayerMugshotsPals:: @ 83FDB14 + .4byte sMugshotPal_Brendan + .4byte sMugshotPal_May .align 2 UnusedTrainerPalette: diff --git a/include/battle_transition.h b/include/battle_transition.h index bc78bd06e..a709a2f7b 100644 --- a/include/battle_transition.h +++ b/include/battle_transition.h @@ -5,6 +5,20 @@ void sub_811AABC(u8); void sub_811AAD8(u8); bool8 IsBattleTransitionDone(void); -#define B_TRANSITION_WILD 8 +enum // TRANSITION_MUGSHOT +{ + MUGSHOT_SYDNEY, + MUGSHOT_PHOEBE, + MUGSHOT_GLACIA, + MUGSHOT_DRAKE, + MUGSHOT_STEVEN, +}; + +#define B_TRANSITION_WILD 8 +#define B_TRANSITION_SYDNEY 12 +#define B_TRANSITION_PHOEBE 13 +#define B_TRANSITION_GLACIA 13 +#define B_TRANSITION_DRAKE 14 +#define B_TRANSITION_STEVEN 15 #endif // GUARD_BATTLE_TRANSITION_H diff --git a/include/songs.h b/include/songs.h index 8cf7ee5e9..a287f6436 100644 --- a/include/songs.h +++ b/include/songs.h @@ -107,7 +107,7 @@ enum SE_C_PIKON, SE_REAPOKE, SE_OP_BASYU, - SE_BT_START, + /*0x68*/ SE_BT_START, SE_DENDOU, SE_JIHANKI, SE_TAMA, diff --git a/src/battle_transition.c b/src/battle_transition.c index fa911d411..5cb9de1bb 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -1,4 +1,5 @@ #include "global.h" +#include "battle_transition.h" #include "main.h" #include "rom4.h" #include "task.h" @@ -7,6 +8,8 @@ #include "field_effect.h" #include "rng.h" #include "sprite.h" +#include "sound.h" +#include "songs.h" void sub_807DE10(void); void dp12_8087EA4(void); @@ -21,6 +24,8 @@ extern const TransitionState sPhase2_Transition3_Funcs[]; extern const TransitionState sPhase2_Transition4_Funcs[]; extern const TransitionState sPhase2_Transition5_Funcs[]; extern const TransitionState sPhase2_Transition6_Funcs[]; +extern const TransitionState sPhase2_Transition7_Funcs[]; +extern const TransitionState sPhase2_Mugshot_Transition_Funcs[]; extern const TaskFunc sPhase1_Tasks[]; extern const TaskFunc sPhase2_Tasks[]; @@ -34,14 +39,14 @@ struct TransitionData { vs8 field_0; // now that's interesting s8 field_1; - s16 field_2; - s16 field_4; + s16 WININ; + s16 WINOUT; s16 field_6; - s16 field_8; + s16 WIN0V; s16 field_A; s16 field_C; - s16 field_E; - s16 field_10; + s16 BLDCNT; + s16 BLDALPHA; s16 field_12; s16 field_14; s16 field_16; @@ -79,8 +84,14 @@ static void VBlankCB1_Phase2_Transition3(void); static void VBlankCB_Phase2_Transition5(void); -void VBlankCB_Phase2_Transition6(void); -void HBlankCB_Phase2_Transition6(void); +static void VBlankCB_Phase2_Transition6(void); +static void HBlankCB_Phase2_Transition6(void); + +static void VBlankCB_Phase2_Transition7(void); + +static void VBlankCB0_Phase2_Mugshots(void); +static void VBlankCB1_Phase2_Mugshots(void); +static void HBlankCB_Phase2_Mugshots(void); void VBlankCB_BattleTransition(void); void sub_811D6E8(s16* a0, s16 a1, s16 a2, s16 a3, s16 a4, s16 a5); @@ -89,6 +100,12 @@ void sub_811D764(u16* a0, s16 a1, s16 a2, s16 a3); void sub_811D6D4(void); void sub_811D8FC(s16* a0, s16 a1, s16 a2, s16 a3, s16 a4, s16 a5, s16 a6); bool8 sub_811D978(s16* a0, bool8 a1, bool8 a2); +static void Phase2Task_MugShotTransition(u8 taskID); +void sub_811C7B0(struct Task* task); + +void sub_811CA10(s16 spriteID, s16 value); +void sub_811CA28(s16 spriteID); +s16 sub_811CA44(s16 spriteID); void sub_811AABC(u8 transitionID) { @@ -370,12 +387,12 @@ bool8 Phase2_Transition3_Func1(struct Task* task) task->data[2] = 0; task->data[4] = 0; task->data[5] = 0x4000; - TRANSITION_STRUCT.field_2 = 63; - TRANSITION_STRUCT.field_4 = 0; + TRANSITION_STRUCT.WININ = 63; + TRANSITION_STRUCT.WINOUT = 0; TRANSITION_STRUCT.field_6 = 240; - TRANSITION_STRUCT.field_8 = 160; - TRANSITION_STRUCT.field_E = 0x3F41; - TRANSITION_STRUCT.field_10 = task->data[1] * 256; // 16 * 256 = 0x1000 + TRANSITION_STRUCT.WIN0V = 160; + TRANSITION_STRUCT.BLDCNT = 0x3F41; + TRANSITION_STRUCT.BLDALPHA = task->data[1] * 256; // 16 * 256 = 0x1000 for (i = 0; i < 160; i++) { @@ -424,7 +441,7 @@ bool8 Phase2_Transition3_Func3(struct Task* task) task->data[2]++; task->data[3] = 2; } - TRANSITION_STRUCT.field_10 = (task->data[1] << 8) | task->data[2]; + TRANSITION_STRUCT.BLDALPHA = (task->data[1] << 8) | task->data[2]; if (task->data[2] > 15) task->tState++; task->data[4] += 8; @@ -444,7 +461,7 @@ bool8 Phase2_Transition3_Func4(struct Task* task) task->data[1]--; task->data[3] = 2; } - TRANSITION_STRUCT.field_10 = (task->data[1] << 8) | task->data[2]; + TRANSITION_STRUCT.BLDALPHA = (task->data[1] << 8) | task->data[2]; if (task->data[1] == 0) task->tState++; task->data[4] += 8; @@ -510,11 +527,11 @@ static void Transition3_Vblank(void) VBlankCB_BattleTransition(); if (TRANSITION_STRUCT.field_0) DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320); - REG_WININ = TRANSITION_STRUCT.field_2; - REG_WINOUT = TRANSITION_STRUCT.field_4; - REG_WIN0V = TRANSITION_STRUCT.field_8; - REG_BLDCNT = TRANSITION_STRUCT.field_E; - REG_BLDALPHA = TRANSITION_STRUCT.field_10; + REG_WININ = TRANSITION_STRUCT.WININ; + REG_WINOUT = TRANSITION_STRUCT.WINOUT; + REG_WIN0V = TRANSITION_STRUCT.WIN0V; + REG_BLDCNT = TRANSITION_STRUCT.BLDCNT; + REG_BLDALPHA = TRANSITION_STRUCT.BLDALPHA; } static void VBlankCB0_Phase2_Transition3(void) @@ -601,7 +618,12 @@ bool8 FldEff_Pokeball(void) return 0; } -#ifdef NONMATCHING +#define SOME_VRAM_STORE(ptr, posY, posX, toStore) \ +{ \ + u32 index = (posY) * 32 + posX; \ + ptr[index] = toStore; \ +} + void sub_811B720(struct Sprite* sprite) { s16 arr0[2]; @@ -611,135 +633,31 @@ void sub_811B720(struct Sprite* sprite) sprite->data1--; else { - if (sprite->pos1.x < 240) + if (sprite->pos1.x >= 0 && sprite->pos1.x <= 240) { - s32 posY = sprite->pos1.y >> 3; - s32 posX = sprite->pos1.x >> 3; - if ((posX >> 3) != sprite->data2) + s16 posX = sprite->pos1.x >> 3; + s16 posY = sprite->pos1.y >> 3; + + if (posX != sprite->data2) { u32 var; + u16 *ptr; - sprite->data2 = (posX); - var = (((REG_BG0CNT >> 8) & 0x1F) << 10); + sprite->data2 = posX; + var = (((REG_BG0CNT >> 8) & 0x1F) << 11); // r2 + ptr = (u16 *)(VRAM + var); - vram[MULTI_DIM_ARR(posY - 2, 32, posX)] = 0xF001; - vram[MULTI_DIM_ARR(posY - 1, 32, posX)] = 0xF001; - vram[MULTI_DIM_ARR(posY - 0, 32, posX)] = 0xF001; - vram[MULTI_DIM_ARR(posY + 0, 32, posX)] = 0xF001; + SOME_VRAM_STORE(ptr, posY - 2, posX, 0xF001); + SOME_VRAM_STORE(ptr, posY - 1, posX, 0xF001); + SOME_VRAM_STORE(ptr, posY - 0, posX, 0xF001); + SOME_VRAM_STORE(ptr, posY + 1, posX, 0xF001); } } sprite->pos1.x += arr0[sprite->data0]; - if (sprite->pos1.x + 15 > 270) + if (sprite->pos1.x < -15 || sprite->pos1.x > 255) FieldEffectStop(sprite, FLDEFF_POKEBALL); } } -#else -__attribute__((naked)) -void sub_811B720(struct Sprite* sprite) -{ - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - sub sp, 0x4\n\ - adds r4, r0, 0\n\ - ldr r1, _0811B740 @ =gUnknown_083FD7F2\n\ - mov r0, sp\n\ - movs r2, 0x4\n\ - bl memcpy\n\ - ldrh r1, [r4, 0x30]\n\ - movs r2, 0x30\n\ - ldrsh r0, [r4, r2]\n\ - cmp r0, 0\n\ - beq _0811B744\n\ - subs r0, r1, 0x1\n\ - strh r0, [r4, 0x30]\n\ - b _0811B7D6\n\ - .align 2, 0\n\ -_0811B740: .4byte gUnknown_083FD7F2\n\ -_0811B744:\n\ - ldrh r0, [r4, 0x20]\n\ - lsls r1, r0, 16\n\ - lsrs r0, r1, 16\n\ - cmp r0, 0xF0\n\ - bhi _0811B7B2\n\ - asrs r0, r1, 19\n\ - lsls r0, 16\n\ - ldrh r1, [r4, 0x22]\n\ - lsls r1, 16\n\ - asrs r1, 19\n\ - lsls r1, 16\n\ - lsrs r1, 16\n\ - lsrs r2, r0, 16\n\ - asrs r5, r0, 16\n\ - movs r3, 0x32\n\ - ldrsh r0, [r4, r3]\n\ - cmp r5, r0\n\ - beq _0811B7B2\n\ - strh r2, [r4, 0x32]\n\ - ldr r0, _0811B7E0 @ =REG_BG0CNT\n\ - ldrh r2, [r0]\n\ - lsrs r2, 8\n\ - movs r0, 0x1F\n\ - ands r2, r0\n\ - lsls r2, 11\n\ - movs r0, 0xC0\n\ - lsls r0, 19\n\ - adds r2, r0\n\ - lsls r1, 16\n\ - asrs r1, 16\n\ - subs r0, r1, 0x2\n\ - lsls r0, 5\n\ - adds r0, r5\n\ - lsls r0, 1\n\ - adds r0, r2\n\ - ldr r6, _0811B7E4 @ =0x0000f001\n\ - adds r3, r6, 0\n\ - strh r3, [r0]\n\ - subs r0, r1, 0x1\n\ - lsls r0, 5\n\ - adds r0, r5\n\ - lsls r0, 1\n\ - adds r0, r2\n\ - strh r3, [r0]\n\ - lsls r0, r1, 5\n\ - adds r0, r5\n\ - lsls r0, 1\n\ - adds r0, r2\n\ - strh r3, [r0]\n\ - adds r1, 0x1\n\ - lsls r1, 5\n\ - adds r1, r5\n\ - lsls r1, 1\n\ - adds r1, r2\n\ - strh r3, [r1]\n\ -_0811B7B2:\n\ - movs r1, 0x2E\n\ - ldrsh r0, [r4, r1]\n\ - lsls r0, 1\n\ - add r0, sp\n\ - ldrh r0, [r0]\n\ - ldrh r2, [r4, 0x20]\n\ - adds r0, r2\n\ - strh r0, [r4, 0x20]\n\ - adds r0, 0xF\n\ - lsls r0, 16\n\ - movs r1, 0x87\n\ - lsls r1, 17\n\ - cmp r0, r1\n\ - bls _0811B7D6\n\ - adds r0, r4, 0\n\ - movs r1, 0x2D\n\ - bl FieldEffectStop\n\ -_0811B7D6:\n\ - add sp, 0x4\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_0811B7E0: .4byte 0x04000008\n\ -_0811B7E4: .4byte 0x0000f001\n\ - .syntax divided"); -} -#endif // NONMATCHING void Phase2Task_Transition5(u8 taskID) { @@ -753,10 +671,10 @@ bool8 Phase2_Transition5_Func1(struct Task* task) sub_811D658(); dp12_8087EA4(); - TRANSITION_STRUCT.field_2 = 0; - TRANSITION_STRUCT.field_4 = 63; + TRANSITION_STRUCT.WININ = 0; + TRANSITION_STRUCT.WINOUT = 63; TRANSITION_STRUCT.field_6 = -3855; - TRANSITION_STRUCT.field_8 = 160; + TRANSITION_STRUCT.WIN0V = 160; for (i = 0; i < 160; i++) { @@ -927,9 +845,9 @@ static void VBlankCB_Phase2_Transition5(void) VBlankCB_BattleTransition(); if (TRANSITION_STRUCT.field_0 != 0) DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320); - REG_WININ = TRANSITION_STRUCT.field_2; - REG_WINOUT = TRANSITION_STRUCT.field_4; - REG_WIN0V = TRANSITION_STRUCT.field_8; + REG_WININ = TRANSITION_STRUCT.WININ; + REG_WINOUT = TRANSITION_STRUCT.WINOUT; + REG_WIN0V = TRANSITION_STRUCT.WIN0V; REG_WIN0H = gUnknown_03004DE0[1][0]; DmaSet(0, gUnknown_03004DE0[1], ®_WIN0H, 0xA2400001); } @@ -964,7 +882,8 @@ bool8 Phase2_Transition6_Func1(struct Task* task) bool8 Phase2_Transition6_Func2(struct Task* task) { u8 i; - u16 r3, r4, r8; + s16 r3; + u16 r4, r8; TRANSITION_STRUCT.field_0 = 0; @@ -977,8 +896,11 @@ bool8 Phase2_Transition6_Func2(struct Task* task) for (i = 0; i < 160; i++, r4 += r8) { - s16 sinResult = Sin(r4 >> 8, r3); - gUnknown_03004DE0[0][i] = TRANSITION_STRUCT.field_16 + sinResult; + // todo: fix the asm + s16 var = r4 >> 8; + asm(""); + gUnknown_03004DE0[0][i] = TRANSITION_STRUCT.field_16 + Sin(var, r3); + asm(""); } if (++task->data[3] == 81) @@ -993,3 +915,406 @@ bool8 Phase2_Transition6_Func2(struct Task* task) TRANSITION_STRUCT.field_0++; return 0; } + +static void VBlankCB_Phase2_Transition6(void) +{ + VBlankCB_BattleTransition(); + if (TRANSITION_STRUCT.field_0) + DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320); +} + +static void HBlankCB_Phase2_Transition6(void) +{ + u16 var = gUnknown_03004DE0[1][REG_VCOUNT]; + REG_BG1VOFS = var; + REG_BG2VOFS = var; + REG_BG3VOFS = var; +} + +void Phase2Task_Transition7(u8 taskID) +{ + while (sPhase2_Transition7_Funcs[gTasks[taskID].tState](&gTasks[taskID])); +} + +bool8 Phase2_Transition7_Func1(struct Task* task) +{ + u8 i; + + sub_811D658(); + dp12_8087EA4(); + + TRANSITION_STRUCT.WININ = 63; + TRANSITION_STRUCT.WINOUT = 0; + TRANSITION_STRUCT.field_6 = 240; + TRANSITION_STRUCT.WIN0V = 160; + + for (i = 0; i < 160; i++) + { + gUnknown_03004DE0[1][i] = 242; + } + + SetVBlankCallback(VBlankCB_Phase2_Transition7); + + task->tState++; + return 1; +} + +bool8 Phase2_Transition7_Func2(struct Task* task) +{ + u8 i, r5; + u16* toStore; + bool8 nextFunc; + + TRANSITION_STRUCT.field_0 = 0; + toStore = gUnknown_03004DE0[0]; + r5 = task->data[2]; + task->data[2] += 16; + task->data[1] += 8; + + for (i = 0, nextFunc = TRUE; i < 160; i++, r5 += 4, toStore++) + { + s16 value = task->data[1] + Sin(r5, 40); + if (value < 0) + value = 0; + if (value > 240) + value = 240; + *toStore = (value << 8) | (0xF1); + if (value < 240) + nextFunc = FALSE; + } + if (nextFunc) + task->tState++; + + TRANSITION_STRUCT.field_0++; + return 0; +} + +bool8 Phase2_Transition7_Func3(struct Task* task) +{ + DmaStop(0); + sub_811D6D4(); + DestroyTask(FindTaskIdByFunc(Phase2Task_Transition7)); + return 0; +} + +static void VBlankCB_Phase2_Transition7(void) +{ + DmaStop(0); + VBlankCB_BattleTransition(); + if (TRANSITION_STRUCT.field_0 != 0) + DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320); + REG_WININ = TRANSITION_STRUCT.WININ; + REG_WINOUT = TRANSITION_STRUCT.WINOUT; + REG_WIN0V = TRANSITION_STRUCT.WIN0V; + DmaSet(0, gUnknown_03004DE0[1], ®_WIN0H, 0xA2400001); +} + +#define tMugshotID data[15] + +void Phase2Task_Transition_Sydney(u8 taskID) +{ + gTasks[taskID].tMugshotID = MUGSHOT_SYDNEY; + Phase2Task_MugShotTransition(taskID); +} + +void Phase2Task_Transition_Phoebe(u8 taskID) +{ + gTasks[taskID].tMugshotID = MUGSHOT_PHOEBE; + Phase2Task_MugShotTransition(taskID); +} + +void Phase2Task_Transition_Glacia(u8 taskID) +{ + gTasks[taskID].tMugshotID = MUGSHOT_GLACIA; + Phase2Task_MugShotTransition(taskID); +} + +void Phase2Task_Transition_Drake(u8 taskID) +{ + gTasks[taskID].tMugshotID = MUGSHOT_DRAKE; + Phase2Task_MugShotTransition(taskID); +} + +void Phase2Task_Transition_Steven(u8 taskID) +{ + gTasks[taskID].tMugshotID = MUGSHOT_STEVEN; + Phase2Task_MugShotTransition(taskID); +} + +static void Phase2Task_MugShotTransition(u8 taskID) +{ + while (sPhase2_Mugshot_Transition_Funcs[gTasks[taskID].tState](&gTasks[taskID])); +} + +bool8 Phase2_Mugshot_Func1(struct Task* task) +{ + u8 i; + + sub_811D658(); + dp12_8087EA4(); + sub_811C7B0(task); + + task->data[1] = 0; + task->data[2] = 1; + task->data[3] = 239; + TRANSITION_STRUCT.WININ = 63; + TRANSITION_STRUCT.WINOUT = 62; + TRANSITION_STRUCT.WIN0V = 160; + + for (i = 0; i < 160; i++) + { + gUnknown_03004DE0[1][i] = 0xF0F1; + } + + SetVBlankCallback(VBlankCB0_Phase2_Mugshots); + + task->tState++; + return 0; +} + +extern const u8 gUnknown_083FC348[]; +extern const u16 gUnknown_083FDFF4[]; +extern const u8 * const sOpponentMugshotsPals[]; +extern const u8 * const sPlayerMugshotsPals[2]; + +bool8 Phase2_Mugshot_Func2(struct Task* task) +{ + s16 i, j; + u16 *dst1, *dst2; + const u16* var; + + var = gUnknown_083FDFF4; + sub_811D6A8(&dst1, &dst2); + CpuSet(gUnknown_083FC348, dst2, 0xF0); + LoadPalette(sOpponentMugshotsPals[task->tMugshotID], 0xF0, 0x20); + LoadPalette(sPlayerMugshotsPals[gSaveBlock2.playerGender], 0xFA, 0xC); + + for (i = 0; i < 20; i++) + { + for (j = 0; j < 32; j++, var++) + { + dst1[i * 32 + j] = *var | 0xF000; + } + } + + REG_IE |= 2; + REG_DISPSTAT |= 0x10; + SetHBlankCallback(HBlankCB_Phase2_Mugshots); + task->tState++; + return 0; +} + +bool8 Phase2_Mugshot_Func3(struct Task* task) +{ + u8 i, r5; + u16* toStore; + s16 value; + s32 mergedValue; + + TRANSITION_STRUCT.field_0 = 0; + + toStore = gUnknown_03004DE0[0]; + r5 = task->data[1]; + task->data[1] += 0x10; + + for (i = 0; i < 80; i++, toStore++, r5 += 0x10) + { + value = task->data[2] + Sin(r5, 0x10); + if (value < 0) + value = 1; + if (value > 0xF0) + value = 0xF0; + *toStore = value; + } + for (; i < 160; i++, toStore++, r5 += 0x10) + { + value = task->data[3] - Sin(r5, 0x10); + if (value < 0) + value = 0; + if (value > 0xEF) + value = 0xEF; + *toStore = (value << 8) | (0xF0); + } + + task->data[2] += 8; + task->data[3] -= 8; + if (task->data[2] > 0xF0) + task->data[2] = 0xF0; + if (task->data[3] < 0) + task->data[3] = 0; + mergedValue = *(s32*)(&task->data[2]); + if (mergedValue == 0xF0) + task->tState++; + + TRANSITION_STRUCT.field_18 -= 8; + TRANSITION_STRUCT.field_1A += 8; + TRANSITION_STRUCT.field_0++; + return 0; +} + +bool8 Phase2_Mugshot_Func4(struct Task* task) +{ + u8 i; + u16* toStore; + + TRANSITION_STRUCT.field_0 = 0; + + for (i = 0, toStore = gUnknown_03004DE0[0]; i < 160; i++, toStore++) + { + *toStore = 0xF0; + } + + task->tState++; + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + TRANSITION_STRUCT.field_18 -= 8; + TRANSITION_STRUCT.field_1A += 8; + + sub_811CA10(task->data[13], 0); + sub_811CA10(task->data[14], 1); + sub_811CA28(task->data[13]); + + PlaySE(SE_BT_START); + + TRANSITION_STRUCT.field_0++; + return 0; +} + +bool8 Phase2_Mugshot_Func5(struct Task* task) +{ + TRANSITION_STRUCT.field_18 -= 8; + TRANSITION_STRUCT.field_1A += 8; + if (sub_811CA44(task->data[13])) + { + task->tState++; + sub_811CA28(task->data[14]); + } + return 0; +} + +bool8 Phase2_Mugshot_Func6(struct Task* task) +{ + TRANSITION_STRUCT.field_18 -= 8; + TRANSITION_STRUCT.field_1A += 8; + if (sub_811CA44(task->data[14])) + { + TRANSITION_STRUCT.field_0 = 0; + SetVBlankCallback(NULL); + DmaStop(0); + memset(gUnknown_03004DE0[0], 0, 0x140); + memset(gUnknown_03004DE0[1], 0, 0x140); + REG_WIN0H = 0xF0; + REG_BLDY = 0; + task->tState++; + task->data[3] = 0; + task->data[4] = 0; + TRANSITION_STRUCT.BLDCNT = 0xBF; + SetVBlankCallback(VBlankCB1_Phase2_Mugshots); + } + return 0; +} + +bool8 Phase2_Mugshot_Func7(struct Task* task) +{ + bool32 r6; + + TRANSITION_STRUCT.field_0 = 0; + r6 = TRUE; + TRANSITION_STRUCT.field_18 -= 8; + TRANSITION_STRUCT.field_1A += 8; + + if (task->data[4] < 0x50) + task->data[4] += 2; + if (task->data[4] > 0x50) + task->data[4] = 0x50; + + if (++task->data[3] & 1) + { + s16 i; + for (i = 0, r6 = FALSE; i <= task->data[4]; i++) + { + s16 index1 = 0x50 - i; + s16 index2 = 0x50 + i; + if (gUnknown_03004DE0[0][index1] <= 15) + { + r6 = TRUE; + gUnknown_03004DE0[0][index1]++; + } + if (gUnknown_03004DE0[0][index2] <= 15) + { + r6 = TRUE; + gUnknown_03004DE0[0][index2]++; + } + } + } + + if (task->data[4] == 0x50 && !r6) + task->tState++; + + TRANSITION_STRUCT.field_0++; + return 0; +} + +bool8 Phase2_Mugshot_Func8(struct Task* task) +{ + TRANSITION_STRUCT.field_0 = 0; + BlendPalettes(-1, 0x10, 0x7FFF); + TRANSITION_STRUCT.BLDCNT = 0xFF; + task->data[3] = 0; + + task->tState++; + return 1; +} + +bool8 Phase2_Mugshot_Func9(struct Task* task) +{ + TRANSITION_STRUCT.field_0 = 0; + + task->data[3]++; + memset(gUnknown_03004DE0[0], task->data[3], 0x140); + if (task->data[3] > 15) + task->tState++; + + TRANSITION_STRUCT.field_0++; + return 0; +} + +bool8 Phase2_Mugshot_Func10(struct Task* task) +{ + DmaStop(0); + sub_811D6D4(); + DestroyTask(FindTaskIdByFunc(task->func)); + return 0; +} + +static void VBlankCB0_Phase2_Mugshots(void) +{ + DmaStop(0); + VBlankCB_BattleTransition(); + if (TRANSITION_STRUCT.field_0 != 0) + DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320); + REG_BG0VOFS = TRANSITION_STRUCT.field_1C; + REG_WININ = TRANSITION_STRUCT.WININ; + REG_WINOUT = TRANSITION_STRUCT.WINOUT; + REG_WIN0V = TRANSITION_STRUCT.WIN0V; + DmaSet(0, gUnknown_03004DE0[1], ®_WIN0H, 0xA2400001); +} + +static void VBlankCB1_Phase2_Mugshots(void) +{ + DmaStop(0); + VBlankCB_BattleTransition(); + if (TRANSITION_STRUCT.field_0 != 0) + DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320); + REG_BLDCNT = TRANSITION_STRUCT.BLDCNT; + DmaSet(0, gUnknown_03004DE0[1], ®_BLDY, 0xA2400001); +} + +static void HBlankCB_Phase2_Mugshots(void) +{ + if (REG_VCOUNT < 80) + REG_BG0HOFS = TRANSITION_STRUCT.field_18; + else + REG_BG0HOFS = TRANSITION_STRUCT.field_1A; +} -- cgit v1.2.3 From 169714a6d4f2fcaef2f55baf6954620f8b9655e7 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 20 Aug 2017 21:32:41 +0200 Subject: mugshots done, moved some data to C --- asm/battle_transition.s | 369 +------------------------------------------- data/battle_transition.s | 78 +--------- include/battle_transition.h | 8 +- include/field_effect.h | 2 +- ld_script.txt | 1 + src/battle_transition.c | 283 ++++++++++++++++++++++++++------- src/field_effect.c | 10 +- src/main_menu.c | 4 +- 8 files changed, 242 insertions(+), 513 deletions(-) diff --git a/asm/battle_transition.s b/asm/battle_transition.s index ab4e54964..cc3c98062 100644 --- a/asm/battle_transition.s +++ b/asm/battle_transition.s @@ -7,371 +7,6 @@ .text - - thumb_func_start sub_811C7B0 -sub_811C7B0: @ 811C7B0 - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - sub sp, 0x4 - adds r4, r0, 0 - ldr r0, _0811C8EC @ =gUnknown_083FD850 - movs r2, 0x26 - ldrsh r1, [r4, r2] - mov r8, r1 - add r0, r8 - ldrb r0, [r0] - ldr r2, _0811C8F0 @ =gUnknown_083FD86A - lsls r1, 2 - mov r8, r1 - adds r1, r2 - ldrh r1, [r1] - subs r1, 0x20 - lsls r1, 16 - asrs r1, 16 - adds r2, 0x2 - add r2, r8 - ldrh r2, [r2] - adds r2, 0x2A - lsls r2, 16 - asrs r2, 16 - ldr r5, _0811C8F4 @ =0x0200c03c - str r5, [sp] - movs r3, 0 - bl CreateTrainerSprite_BirchSpeech - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x22] - ldr r0, _0811C8F8 @ =gSaveBlock2 - ldrb r0, [r0, 0x8] - movs r1, 0x88 - lsls r1, 1 - str r5, [sp] - movs r2, 0x6A - movs r3, 0 - bl CreateTrainerSprite_BirchSpeech - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x24] - movs r3, 0x22 - ldrsh r0, [r4, r3] - lsls r5, r0, 4 - adds r5, r0 - lsls r5, 2 - ldr r1, _0811C8FC @ =gSprites - adds r5, r1 - movs r2, 0x24 - ldrsh r0, [r4, r2] - lsls r6, r0, 4 - adds r6, r0 - lsls r6, 2 - adds r6, r1 - ldr r0, _0811C900 @ =sub_811C90C - str r0, [r5, 0x1C] - str r0, [r6, 0x1C] - ldrb r0, [r5, 0x1] - movs r1, 0x3 - orrs r0, r1 - strb r0, [r5, 0x1] - ldrb r0, [r6, 0x1] - orrs r0, r1 - strb r0, [r6, 0x1] - bl AllocOamMatrix - lsls r0, 24 - lsrs r0, 24 - movs r3, 0x1F - mov r9, r3 - mov r4, r9 - ands r0, r4 - lsls r0, 1 - ldrb r2, [r5, 0x3] - movs r4, 0x3F - negs r4, r4 - adds r1, r4, 0 - ands r1, r2 - orrs r1, r0 - strb r1, [r5, 0x3] - bl AllocOamMatrix - lsls r0, 24 - lsrs r0, 24 - mov r1, r9 - ands r0, r1 - lsls r0, 1 - ldrb r1, [r6, 0x3] - ands r4, r1 - orrs r4, r0 - strb r4, [r6, 0x3] - ldrb r2, [r5, 0x1] - movs r1, 0x3F - adds r0, r1, 0 - ands r0, r2 - movs r2, 0x40 - orrs r0, r2 - strb r0, [r5, 0x1] - ldrb r0, [r6, 0x1] - ands r1, r0 - orrs r1, r2 - strb r1, [r6, 0x1] - ldrb r0, [r5, 0x3] - movs r1, 0xC0 - orrs r0, r1 - strb r0, [r5, 0x3] - ldrb r0, [r6, 0x3] - orrs r0, r1 - strb r0, [r6, 0x3] - adds r0, r5, 0 - movs r1, 0x1 - movs r2, 0x3 - movs r3, 0x3 - bl CalcCenterToCornerVec - adds r0, r6, 0 - movs r1, 0x1 - movs r2, 0x3 - movs r3, 0x3 - bl CalcCenterToCornerVec - ldrb r0, [r5, 0x3] - lsls r0, 26 - lsrs r0, 27 - ldr r2, _0811C904 @ =gUnknown_083FD856 - mov r3, r8 - adds r1, r3, r2 - movs r4, 0 - ldrsh r1, [r1, r4] - adds r2, 0x2 - add r8, r2 - mov r3, r8 - movs r4, 0 - ldrsh r2, [r3, r4] - movs r3, 0 - bl SetOamMatrixRotationScaling - ldrb r0, [r6, 0x3] - lsls r0, 26 - lsrs r0, 27 - ldr r1, _0811C908 @ =0xfffffe00 - movs r2, 0x80 - lsls r2, 2 - movs r3, 0 - bl SetOamMatrixRotationScaling - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0811C8EC: .4byte gUnknown_083FD850 -_0811C8F0: .4byte gUnknown_083FD86A -_0811C8F4: .4byte 0x0200c03c -_0811C8F8: .4byte gSaveBlock2 -_0811C8FC: .4byte gSprites -_0811C900: .4byte sub_811C90C -_0811C904: .4byte gUnknown_083FD856 -_0811C908: .4byte 0xfffffe00 - thumb_func_end sub_811C7B0 - - thumb_func_start sub_811C90C -sub_811C90C: @ 811C90C - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _0811C930 @ =gUnknown_083FD880 -_0811C912: - movs r1, 0x2E - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _0811C912 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0811C930: .4byte gUnknown_083FD880 - thumb_func_end sub_811C90C - - thumb_func_start sub_811C934 -sub_811C934: @ 811C934 - movs r0, 0 - bx lr - thumb_func_end sub_811C934 - - thumb_func_start sub_811C938 -sub_811C938: @ 811C938 - push {r4,r5,lr} - sub sp, 0x8 - adds r5, r0, 0 - ldr r1, _0811C97C @ =gUnknown_083FD89C - mov r0, sp - movs r2, 0x4 - bl memcpy - add r4, sp, 0x4 - ldr r1, _0811C980 @ =gUnknown_083FD8A0 - adds r0, r4, 0 - movs r2, 0x4 - bl memcpy - ldrh r0, [r5, 0x2E] - adds r0, 0x1 - strh r0, [r5, 0x2E] - movs r1, 0x3C - ldrsh r0, [r5, r1] - lsls r0, 1 - add r0, sp - ldrh r0, [r0] - strh r0, [r5, 0x30] - movs r1, 0x3C - ldrsh r0, [r5, r1] - lsls r0, 1 - adds r4, r0 - ldrh r0, [r4] - strh r0, [r5, 0x32] - movs r0, 0x1 - add sp, 0x8 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0811C97C: .4byte gUnknown_083FD89C -_0811C980: .4byte gUnknown_083FD8A0 - thumb_func_end sub_811C938 - - thumb_func_start sub_811C984 -sub_811C984: @ 811C984 - push {lr} - adds r1, r0, 0 - ldrh r0, [r1, 0x30] - ldrh r3, [r1, 0x20] - adds r2, r0, r3 - strh r2, [r1, 0x20] - movs r3, 0x3C - ldrsh r0, [r1, r3] - cmp r0, 0 - beq _0811C9A2 - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0x84 - bgt _0811C9B0 - b _0811C9AA -_0811C9A2: - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0x67 - ble _0811C9B0 -_0811C9AA: - ldrh r0, [r1, 0x2E] - adds r0, 0x1 - strh r0, [r1, 0x2E] -_0811C9B0: - movs r0, 0 - pop {r1} - bx r1 - thumb_func_end sub_811C984 - - thumb_func_start sub_811C9B8 -sub_811C9B8: @ 811C9B8 - push {lr} - adds r2, r0, 0 - ldrh r3, [r2, 0x32] - ldrh r0, [r2, 0x30] - adds r1, r3, r0 - strh r1, [r2, 0x30] - ldrh r0, [r2, 0x20] - adds r0, r1 - strh r0, [r2, 0x20] - lsls r1, 16 - cmp r1, 0 - bne _0811C9DE - ldrh r0, [r2, 0x2E] - adds r0, 0x1 - strh r0, [r2, 0x2E] - negs r0, r3 - strh r0, [r2, 0x32] - movs r0, 0x1 - strh r0, [r2, 0x3A] -_0811C9DE: - movs r0, 0 - pop {r1} - bx r1 - thumb_func_end sub_811C9B8 - - thumb_func_start sub_811C9E4 -sub_811C9E4: @ 811C9E4 - push {lr} - adds r2, r0, 0 - ldrh r0, [r2, 0x32] - ldrh r1, [r2, 0x30] - adds r0, r1 - strh r0, [r2, 0x30] - ldrh r1, [r2, 0x20] - adds r1, r0 - strh r1, [r2, 0x20] - adds r1, 0x1F - lsls r1, 16 - movs r0, 0x97 - lsls r0, 17 - cmp r1, r0 - bls _0811CA08 - ldrh r0, [r2, 0x2E] - adds r0, 0x1 - strh r0, [r2, 0x2E] -_0811CA08: - movs r0, 0 - pop {r1} - bx r1 - thumb_func_end sub_811C9E4 - - thumb_func_start sub_811CA10 -sub_811CA10: @ 811CA10 - ldr r3, _0811CA24 @ =gSprites - lsls r0, 16 - asrs r0, 16 - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r3 - strh r1, [r2, 0x3C] - bx lr - .align 2, 0 -_0811CA24: .4byte gSprites - thumb_func_end sub_811CA10 - - thumb_func_start sub_811CA28 -sub_811CA28: @ 811CA28 - ldr r2, _0811CA40 @ =gSprites - lsls r0, 16 - asrs r0, 16 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldrh r0, [r1, 0x2E] - adds r0, 0x1 - strh r0, [r1, 0x2E] - bx lr - .align 2, 0 -_0811CA40: .4byte gSprites - thumb_func_end sub_811CA28 - - thumb_func_start sub_811CA44 -sub_811CA44: @ 811CA44 - ldr r2, _0811CA58 @ =gSprites - lsls r0, 16 - asrs r0, 16 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - movs r2, 0x3A - ldrsh r0, [r1, r2] - bx lr - .align 2, 0 -_0811CA58: .4byte gSprites - thumb_func_end sub_811CA44 - thumb_func_start Phase2Task_Transition8 Phase2Task_Transition8: @ 811CA5C push {r4,r5,lr} @@ -1938,7 +1573,7 @@ _0811D64E: thumb_func_start sub_811D658 sub_811D658: @ 811D658 push {lr} - ldr r0, _0811D674 @ =gUnknown_083FD708 + ldr r0, _0811D674 @ =sTransitionStructPtr ldr r0, [r0] movs r1, 0 movs r2, 0x3C @@ -1949,7 +1584,7 @@ sub_811D658: @ 811D658 pop {r0} bx r0 .align 2, 0 -_0811D674: .4byte gUnknown_083FD708 +_0811D674: .4byte sTransitionStructPtr _0811D678: .4byte 0x0200c014 thumb_func_end sub_811D658 diff --git a/data/battle_transition.s b/data/battle_transition.s index 94b242ed3..ae69888d1 100644 --- a/data/battle_transition.s +++ b/data/battle_transition.s @@ -3,79 +3,7 @@ .section .rodata - .align 2 -gUnknown_083FBB88:: @ 83FBB88 - .incbin "graphics/battle_transitions/big_pokeball.4bpp" - - .align 2 -gUnknown_083FC108:: @ 83FC108 - .incbin "graphics/battle_transitions/pokeball_trail.4bpp" - - .align 2 -gSpriteImage_83FC148:: @ 83FC148 - .incbin "graphics/battle_transitions/pokeball.4bpp" - - .align 2 -gUnknown_083FC348:: @ 83FC348 - .incbin "graphics/battle_transitions/elite_four_bg.4bpp" - - .align 2 -gSpriteImage_83FC528:: @ 83FC528 - .incbin "graphics/battle_transitions/unused_brendan.4bpp" - - .align 2 -gSpriteImage_83FCD28:: @ 83FCD28 - .incbin "graphics/battle_transitions/unused_lass.4bpp" - - .align 2 -gUnknown_083FD528:: @ 83FD528 - .incbin "graphics/battle_transitions/shrinking_box.4bpp" - - .align 2 -gUnknown_083FD708:: @ 83FD708 - .4byte 0x0200c000 - .align 2 -sPhase1_Tasks:: @ 83FD70C - .4byte Phase1Task_TransitionAll - .4byte Phase1Task_TransitionAll - .4byte Phase1Task_TransitionAll - .4byte Phase1Task_TransitionAll - .4byte Phase1Task_TransitionAll - .4byte Phase1Task_TransitionAll - .4byte Phase1Task_TransitionAll - .4byte Phase1Task_TransitionAll - .4byte Phase1Task_TransitionAll - .4byte Phase1Task_TransitionAll - .4byte Phase1Task_TransitionAll - .4byte Phase1Task_TransitionAll - .4byte Phase1Task_TransitionAll - .4byte Phase1Task_TransitionAll - .4byte Phase1Task_TransitionAll - .4byte Phase1Task_TransitionAll - .4byte Phase1Task_TransitionAll - - .align 2 -sPhase2_Tasks:: @ 83FD750 - .4byte Phase2Task_Transition0 - .4byte Phase2Task_Transition1 - .4byte Phase2Task_Transition2 - .4byte Phase2Task_Transition3 - .4byte Phase2Task_Transition4 - .4byte Phase2Task_Transition5 - .4byte Phase2Task_Transition6 - .4byte Phase2Task_Transition7 - .4byte Phase2Task_Transition8 - .4byte Phase2Task_Transition9 - .4byte Phase2Task_Transition10 - .4byte Phase2Task_Transition11 - .4byte Phase2Task_Transition_Sydney - .4byte Phase2Task_Transition_Phoebe - .4byte Phase2Task_Transition_Glacia - .4byte Phase2Task_Transition_Drake - .4byte Phase2Task_Transition_Steven - - .align 2 sMainTransitionPhases:: @ 83FD794 .4byte Transition_Phase1 .4byte Transition_WaitForPhase1 @@ -165,7 +93,7 @@ sPhase2_Mugshot_Transition_Funcs:: @ 83FD828 .4byte Phase2_Mugshot_Func9 .4byte Phase2_Mugshot_Func10 -gUnknown_083FD850:: @ 83FD850 +sMugshotsTrainerPicIDsTable:: @ 83FD850 .byte TRAINER_PIC_SIDNEY .byte TRAINER_PIC_PHOEBE .byte TRAINER_PIC_GLACIA @@ -173,7 +101,7 @@ gUnknown_083FD850:: @ 83FD850 .byte TRAINER_PIC_STEVEN .align 1 -gUnknown_083FD856:: @ 83FD856 +sMugshotsOpponentRotationScales:: @ 83FD856 .2byte 0x200, 0x200 .2byte 0x200, 0x200 .2byte 0x1B0, 0x1B0 @@ -181,7 +109,7 @@ gUnknown_083FD856:: @ 83FD856 .2byte 0x188, 0x188 .align 1 -gUnknown_083FD86A:: @ 83FD86A +sMugshotsOpponentCoords:: @ 83FD86A .2byte 0, 0 .2byte 0, 0 .2byte -4, 4 diff --git a/include/battle_transition.h b/include/battle_transition.h index a709a2f7b..597e9724d 100644 --- a/include/battle_transition.h +++ b/include/battle_transition.h @@ -5,6 +5,8 @@ void sub_811AABC(u8); void sub_811AAD8(u8); bool8 IsBattleTransitionDone(void); +#define TRANSITIONS_NO 17 + enum // TRANSITION_MUGSHOT { MUGSHOT_SYDNEY, @@ -17,8 +19,8 @@ enum // TRANSITION_MUGSHOT #define B_TRANSITION_WILD 8 #define B_TRANSITION_SYDNEY 12 #define B_TRANSITION_PHOEBE 13 -#define B_TRANSITION_GLACIA 13 -#define B_TRANSITION_DRAKE 14 -#define B_TRANSITION_STEVEN 15 +#define B_TRANSITION_GLACIA 14 +#define B_TRANSITION_DRAKE 15 +#define B_TRANSITION_STEVEN 16 #endif // GUARD_BATTLE_TRANSITION_H diff --git a/include/field_effect.h b/include/field_effect.h index ea02c4131..f43b15afb 100644 --- a/include/field_effect.h +++ b/include/field_effect.h @@ -244,7 +244,7 @@ void sub_808948C(struct Task *); void sub_80894C4(struct Task *); void fishE(struct Task *); -u8 CreateTrainerSprite_BirchSpeech(u8 gender, s16 x, s16 y, u8 subpriority, u8 *buffer); +u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buffer); void LoadTrainerGfx_TrainerCard(u8 gender, u16 palOffset, u8 *dest); u8 CreateBirchSprite(s16 x, s16 y, u8 subpriority); u8 CreateMonSprite_PicBox(u16, s16, s16, u8); diff --git a/ld_script.txt b/ld_script.txt index cdc88ac2b..80b882108 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -444,6 +444,7 @@ SECTIONS { data/roulette.o(.rodata); data/pokedex_cry_screen.o(.rodata); data/landmark.o(.rodata); + src/battle_transition.o(.rodata); data/battle_transition.o(.rodata); data/battle_811DA74.o(.rodata); data/battle_message.o(.rodata); diff --git a/src/battle_transition.c b/src/battle_transition.c index 5cb9de1bb..8d87f12f6 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -14,25 +14,8 @@ void sub_807DE10(void); void dp12_8087EA4(void); -typedef bool8 (*TransitionState)(struct Task* task); - -extern const TransitionState sMainTransitionPhases[]; -extern const TransitionState sPhase2_Transition0_Funcs[]; -extern const TransitionState sPhase2_Transition1_Funcs[]; -extern const TransitionState sPhase2_Transition2_Funcs[]; -extern const TransitionState sPhase2_Transition3_Funcs[]; -extern const TransitionState sPhase2_Transition4_Funcs[]; -extern const TransitionState sPhase2_Transition5_Funcs[]; -extern const TransitionState sPhase2_Transition6_Funcs[]; -extern const TransitionState sPhase2_Transition7_Funcs[]; -extern const TransitionState sPhase2_Mugshot_Transition_Funcs[]; - -extern const TaskFunc sPhase1_Tasks[]; -extern const TaskFunc sPhase2_Tasks[]; - extern u8 ewram[]; extern s16 gUnknown_03005560[]; - extern u16 gUnknown_03004DE0[][0x3C0]; struct TransitionData @@ -73,6 +56,25 @@ void sub_811D4C8(s16 a0, s16 a1, s16 a2, s16 a3, s16 a4); bool8 sub_811D52C(void); void sub_811D658(void); +static void Phase1Task_TransitionAll(u8 taskID); +static void Phase2Task_Transition0(u8 taskID); +static void Phase2Task_Transition1(u8 taskID); +static void Phase2Task_Transition2(u8 taskID); +static void Phase2Task_Transition3(u8 taskID); +static void Phase2Task_Transition4(u8 taskID); +static void Phase2Task_Transition5(u8 taskID); +static void Phase2Task_Transition6(u8 taskID); +static void Phase2Task_Transition7(u8 taskID); + void Phase2Task_Transition8(u8 taskID); + void Phase2Task_Transition9(u8 taskID); + void Phase2Task_Transition10(u8 taskID); + void Phase2Task_Transition11(u8 taskID); +static void Phase2Task_Transition_Sydney(u8 taskID); +static void Phase2Task_Transition_Phoebe(u8 taskID); +static void Phase2Task_Transition_Glacia(u8 taskID); +static void Phase2Task_Transition_Drake(u8 taskID); +static void Phase2Task_Transition_Steven(u8 taskID); + static void VBlankCB_Phase2_Transition1(void); static void HBlankCB_Phase2_Transition1(void); @@ -101,11 +103,77 @@ void sub_811D6D4(void); void sub_811D8FC(s16* a0, s16 a1, s16 a2, s16 a3, s16 a4, s16 a5, s16 a6); bool8 sub_811D978(s16* a0, bool8 a1, bool8 a2); static void Phase2Task_MugShotTransition(u8 taskID); -void sub_811C7B0(struct Task* task); +static void Mugshots_CreateOpponentPlayerSprites(struct Task* task); +static void sub_811CA10(s16 spriteID, s16 value); +static void sub_811CA28(s16 spriteID); +static s16 sub_811CA44(s16 spriteID); -void sub_811CA10(s16 spriteID, s16 value); -void sub_811CA28(s16 spriteID); -s16 sub_811CA44(s16 spriteID); +// const data +typedef bool8 (*TransitionState)(struct Task* task); +typedef bool8 (*TransitionSpriteCallback)(struct Sprite* sprite); + +extern const TransitionState sMainTransitionPhases[]; +extern const TransitionState sPhase2_Transition0_Funcs[]; +extern const TransitionState sPhase2_Transition1_Funcs[]; +extern const TransitionState sPhase2_Transition2_Funcs[]; +extern const TransitionState sPhase2_Transition3_Funcs[]; +extern const TransitionState sPhase2_Transition4_Funcs[]; +extern const TransitionState sPhase2_Transition5_Funcs[]; +extern const TransitionState sPhase2_Transition6_Funcs[]; +extern const TransitionState sPhase2_Transition7_Funcs[]; +extern const TransitionState sPhase2_Mugshot_Transition_Funcs[]; +extern const u16 gFieldEffectObjectPalette10[]; +extern const u16 gUnknown_083FDB44[]; +extern const s16 gUnknown_083FD7E4[2]; +extern const s16 gUnknown_083FD7F2[2]; +extern const s16 gUnknown_083FD7E8[5]; +extern const struct SpriteTemplate gSpriteTemplate_83FD98C; +extern const u16 gUnknown_083FDFF4[]; +extern const u8 * const sOpponentMugshotsPals[]; +extern const u8 * const sPlayerMugshotsPals[2]; +extern const u8 sMugshotsTrainerPicIDsTable[]; +extern const s16 sMugshotsOpponentCoords[][2]; +extern const s16 sMugshotsOpponentRotationScales[][2]; +extern const TransitionSpriteCallback gUnknown_083FD880[]; +extern const s16 gUnknown_083FD89C[2]; +extern const s16 gUnknown_083FD8A0[2]; + +static const u32 gUnknown_083FBB88[] = INCBIN_U32("graphics/battle_transitions/big_pokeball.4bpp"); +static const u32 gUnknown_083FC108[] = INCBIN_U32("graphics/battle_transitions/pokeball_trail.4bpp"); +const u32 gSpriteImage_83FC148[] = INCBIN_U32("graphics/battle_transitions/pokeball.4bpp"); +static const u32 gUnknown_083FC348[] = INCBIN_U32("graphics/battle_transitions/elite_four_bg.4bpp"); +const u32 gSpriteImage_83FC528[] = INCBIN_U32("graphics/battle_transitions/unused_brendan.4bpp"); +const u32 gSpriteImage_83FCD28[] = INCBIN_U32("graphics/battle_transitions/unused_lass.4bpp"); +const u32 gUnknown_083FD528[] = INCBIN_U32("graphics/battle_transitions/shrinking_box.4bpp"); +struct TransitionData * const sTransitionStructPtr = &TRANSITION_STRUCT; + +static const TaskFunc sPhase1_Tasks[TRANSITIONS_NO] = +{ + [0 ... TRANSITIONS_NO - 1] = &Phase1Task_TransitionAll +}; + +static const TaskFunc sPhase2_Tasks[TRANSITIONS_NO] = +{ + &Phase2Task_Transition0, // 0 + &Phase2Task_Transition1, // 1 + &Phase2Task_Transition2, // 2 + &Phase2Task_Transition3, // 3 + &Phase2Task_Transition4, // 4 + &Phase2Task_Transition5, // 5 + &Phase2Task_Transition6, // 6 + &Phase2Task_Transition7, // 7 + &Phase2Task_Transition8, // 8 + &Phase2Task_Transition9, // 9 + &Phase2Task_Transition10, // 10 + &Phase2Task_Transition11, // 11 + &Phase2Task_Transition_Sydney, // 12 + &Phase2Task_Transition_Phoebe, // 13 + &Phase2Task_Transition_Glacia, // 14 + &Phase2Task_Transition_Drake, // 15 + &Phase2Task_Transition_Steven, // 16 +}; + +void sub_811C90C(struct Sprite* sprite); void sub_811AABC(u8 transitionID) { @@ -188,7 +256,7 @@ bool8 Transition_WaitForPhase2(struct Task* task) return 0; } -void Phase1Task_TransitionAll(u8 taskID) +static void Phase1Task_TransitionAll(u8 taskID) { if (gTasks[taskID].tState == 0) { @@ -199,7 +267,7 @@ void Phase1Task_TransitionAll(u8 taskID) DestroyTask(taskID); } -void Phase2Task_Transition0(u8 taskID) +static void Phase2Task_Transition0(u8 taskID) { while (sPhase2_Transition0_Funcs[gTasks[taskID].tState](&gTasks[taskID])); } @@ -240,7 +308,7 @@ bool8 Phase2_Transition0_Func3(struct Task* task) return 0; } -void Phase2Task_Transition1(u8 taskID) +static void Phase2Task_Transition1(u8 taskID) { while (sPhase2_Transition1_Funcs[gTasks[taskID].tState](&gTasks[taskID])); } @@ -300,7 +368,7 @@ static void HBlankCB_Phase2_Transition1(void) REG_BG3HOFS = var; } -void Phase2Task_Transition2(u8 taskID) +static void Phase2Task_Transition2(u8 taskID) { while (sPhase2_Transition2_Funcs[gTasks[taskID].tState](&gTasks[taskID])); } @@ -367,14 +435,11 @@ static void HBlankCB_Phase2_Transition2(void) REG_BG3VOFS = var; } -void Phase2Task_Transition3(u8 taskID) +static void Phase2Task_Transition3(u8 taskID) { while (sPhase2_Transition3_Funcs[gTasks[taskID].tState](&gTasks[taskID])); } -extern const u8 gUnknown_083FBB88[]; -extern const u16 gFieldEffectObjectPalette10[]; - bool8 Phase2_Transition3_Func1(struct Task* task) { u16 i; @@ -410,8 +475,6 @@ bool8 Phase2_Transition3_Func1(struct Task* task) return 0; } -extern const u16 gUnknown_083FDB44[]; - bool8 Phase2_Transition3_Func2(struct Task* task) { s16 i, j; @@ -546,13 +609,11 @@ void VBlankCB1_Phase2_Transition3(void) DmaSet(0, gUnknown_03005560, ®_WIN0H, 0xA2400001); } -void Phase2Task_Transition4(u8 taskID) +static void Phase2Task_Transition4(u8 taskID) { while (sPhase2_Transition4_Funcs[gTasks[taskID].tState](&gTasks[taskID])); } -extern const u8 gUnknown_083FC108[]; - bool8 Phase2_Transition4_Func1(struct Task* task) { u16 *dst1, *dst2; @@ -566,10 +627,6 @@ bool8 Phase2_Transition4_Func1(struct Task* task) return 0; } -extern const s16 gUnknown_083FD7E4[2]; -extern const s16 gUnknown_083FD7F2[2]; -extern const s16 gUnknown_083FD7E8[5]; - bool8 Phase2_Transition4_Func2(struct Task* task) { s16 i; @@ -603,8 +660,6 @@ bool8 Phase2_Transition4_Func3(struct Task* task) return 0; } -extern const struct SpriteTemplate gSpriteTemplate_83FD98C; - bool8 FldEff_Pokeball(void) { u8 spriteID = CreateSpriteAtEnd(&gSpriteTemplate_83FD98C, gUnknown_0202FF84[0], gUnknown_0202FF84[1], 0); @@ -659,7 +714,7 @@ void sub_811B720(struct Sprite* sprite) } } -void Phase2Task_Transition5(u8 taskID) +static void Phase2Task_Transition5(u8 taskID) { while (sPhase2_Transition5_Funcs[gTasks[taskID].tState](&gTasks[taskID])); } @@ -931,7 +986,7 @@ static void HBlankCB_Phase2_Transition6(void) REG_BG3VOFS = var; } -void Phase2Task_Transition7(u8 taskID) +static void Phase2Task_Transition7(u8 taskID) { while (sPhase2_Transition7_Funcs[gTasks[taskID].tState](&gTasks[taskID])); } @@ -1009,33 +1064,35 @@ static void VBlankCB_Phase2_Transition7(void) DmaSet(0, gUnknown_03004DE0[1], ®_WIN0H, 0xA2400001); } -#define tMugshotID data[15] +#define tMugshotOpponentID data[13] +#define tMugshotPlayerID data[14] +#define tMugshotID data[15] -void Phase2Task_Transition_Sydney(u8 taskID) +static void Phase2Task_Transition_Sydney(u8 taskID) { gTasks[taskID].tMugshotID = MUGSHOT_SYDNEY; Phase2Task_MugShotTransition(taskID); } -void Phase2Task_Transition_Phoebe(u8 taskID) +static void Phase2Task_Transition_Phoebe(u8 taskID) { gTasks[taskID].tMugshotID = MUGSHOT_PHOEBE; Phase2Task_MugShotTransition(taskID); } -void Phase2Task_Transition_Glacia(u8 taskID) +static void Phase2Task_Transition_Glacia(u8 taskID) { gTasks[taskID].tMugshotID = MUGSHOT_GLACIA; Phase2Task_MugShotTransition(taskID); } -void Phase2Task_Transition_Drake(u8 taskID) +static void Phase2Task_Transition_Drake(u8 taskID) { gTasks[taskID].tMugshotID = MUGSHOT_DRAKE; Phase2Task_MugShotTransition(taskID); } -void Phase2Task_Transition_Steven(u8 taskID) +static void Phase2Task_Transition_Steven(u8 taskID) { gTasks[taskID].tMugshotID = MUGSHOT_STEVEN; Phase2Task_MugShotTransition(taskID); @@ -1052,7 +1109,7 @@ bool8 Phase2_Mugshot_Func1(struct Task* task) sub_811D658(); dp12_8087EA4(); - sub_811C7B0(task); + Mugshots_CreateOpponentPlayerSprites(task); task->data[1] = 0; task->data[2] = 1; @@ -1072,11 +1129,6 @@ bool8 Phase2_Mugshot_Func1(struct Task* task) return 0; } -extern const u8 gUnknown_083FC348[]; -extern const u16 gUnknown_083FDFF4[]; -extern const u8 * const sOpponentMugshotsPals[]; -extern const u8 * const sPlayerMugshotsPals[2]; - bool8 Phase2_Mugshot_Func2(struct Task* task) { s16 i, j; @@ -1171,9 +1223,9 @@ bool8 Phase2_Mugshot_Func4(struct Task* task) TRANSITION_STRUCT.field_18 -= 8; TRANSITION_STRUCT.field_1A += 8; - sub_811CA10(task->data[13], 0); - sub_811CA10(task->data[14], 1); - sub_811CA28(task->data[13]); + sub_811CA10(task->tMugshotOpponentID, 0); + sub_811CA10(task->tMugshotPlayerID, 1); + sub_811CA28(task->tMugshotOpponentID); PlaySE(SE_BT_START); @@ -1185,10 +1237,10 @@ bool8 Phase2_Mugshot_Func5(struct Task* task) { TRANSITION_STRUCT.field_18 -= 8; TRANSITION_STRUCT.field_1A += 8; - if (sub_811CA44(task->data[13])) + if (sub_811CA44(task->tMugshotOpponentID)) { task->tState++; - sub_811CA28(task->data[14]); + sub_811CA28(task->tMugshotPlayerID); } return 0; } @@ -1197,7 +1249,7 @@ bool8 Phase2_Mugshot_Func6(struct Task* task) { TRANSITION_STRUCT.field_18 -= 8; TRANSITION_STRUCT.field_1A += 8; - if (sub_811CA44(task->data[14])) + if (sub_811CA44(task->tMugshotPlayerID)) { TRANSITION_STRUCT.field_0 = 0; SetVBlankCallback(NULL); @@ -1318,3 +1370,114 @@ static void HBlankCB_Phase2_Mugshots(void) else REG_BG0HOFS = TRANSITION_STRUCT.field_1A; } + +static void Mugshots_CreateOpponentPlayerSprites(struct Task* task) +{ + struct Sprite *opponentSprite, *playerSprite; + + s16 mugshotID = task->tMugshotID; + task->tMugshotOpponentID = CreateTrainerSprite(sMugshotsTrainerPicIDsTable[mugshotID], + sMugshotsOpponentCoords[mugshotID][0] - 32, + sMugshotsOpponentCoords[mugshotID][1] + 42, + 0, &ewram[0xC03C]); + task->tMugshotPlayerID = CreateTrainerSprite(gSaveBlock2.playerGender, 272, 106, 0, &ewram[0xC03C]); + + opponentSprite = &gSprites[task->tMugshotOpponentID]; + playerSprite = &gSprites[task->tMugshotPlayerID]; + + opponentSprite->callback = sub_811C90C; + playerSprite->callback = sub_811C90C; + + opponentSprite->oam.affineMode = 3; + playerSprite->oam.affineMode = 3; + + opponentSprite->oam.matrixNum = AllocOamMatrix(); + playerSprite->oam.matrixNum = AllocOamMatrix(); + + opponentSprite->oam.shape = 1; + playerSprite->oam.shape = 1; + + opponentSprite->oam.size = 3; + playerSprite->oam.size = 3; + + CalcCenterToCornerVec(opponentSprite, 1, 3, 3); + CalcCenterToCornerVec(playerSprite, 1, 3, 3); + + SetOamMatrixRotationScaling(opponentSprite->oam.matrixNum, sMugshotsOpponentRotationScales[mugshotID][0], sMugshotsOpponentRotationScales[mugshotID][1], 0); + SetOamMatrixRotationScaling(playerSprite->oam.matrixNum, -512, 0x200, 0); +} + +void sub_811C90C(struct Sprite* sprite) +{ + while (gUnknown_083FD880[sprite->data0](sprite)); +} + +bool8 sub_811C934(struct Sprite* sprite) +{ + return 0; +} + +bool8 sub_811C938(struct Sprite* sprite) +{ + s16 arr0[2]; + s16 arr1[2]; + + memcpy(arr0, gUnknown_083FD89C, sizeof(gUnknown_083FD89C)); + memcpy(arr1, gUnknown_083FD8A0, sizeof(gUnknown_083FD8A0)); + + sprite->data0++; + sprite->data1 = arr0[sprite->data7]; + sprite->data2 = arr1[sprite->data7]; + return 1; +} + +bool8 sub_811C984(struct Sprite* sprite) +{ + sprite->pos1.x += sprite->data1; + if (sprite->data7 && sprite->pos1.x < 133) + sprite->data0++; + else if (!sprite->data7 && sprite->pos1.x > 103) + sprite->data0++; + return 0; +} + +bool8 sub_811C9B8(struct Sprite* sprite) +{ + sprite->data1 += sprite->data2; + sprite->pos1.x += sprite->data1; + if (sprite->data1 == 0) + { + sprite->data0++; + sprite->data2 = -sprite->data2; + sprite->data6 = 1; + } + return 0; +} + +bool8 sub_811C9E4(struct Sprite* sprite) +{ + sprite->data1 += sprite->data2; + sprite->pos1.x += sprite->data1; + if (sprite->pos1.x < -31 || sprite->pos1.x > 271) + sprite->data0++; + return 0; +} + +static void sub_811CA10(s16 spriteID, s16 value) +{ + gSprites[spriteID].data7 = value; +} + +static void sub_811CA28(s16 spriteID) +{ + gSprites[spriteID].data0++; +} + +static s16 sub_811CA44(s16 spriteID) +{ + return gSprites[spriteID].data6; +} + +#undef tMugshotOpponentID +#undef tMugshotPlayerID +#undef tMugshotID diff --git a/src/field_effect.c b/src/field_effect.c index 3632d7053..cffed2614 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -618,13 +618,13 @@ bool8 FieldEffectActiveListContains(u8 id) return FALSE; } -u8 CreateTrainerSprite_BirchSpeech(u8 gender, s16 x, s16 y, u8 subpriority, u8 *buffer) +u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buffer) { struct SpriteTemplate spriteTemplate; - LoadCompressedObjectPaletteOverrideBuffer(&gTrainerFrontPicPaletteTable[gender], buffer); - LoadCompressedObjectPicOverrideBuffer(&gTrainerFrontPicTable[gender], buffer); - spriteTemplate.tileTag = gTrainerFrontPicTable[gender].tag; - spriteTemplate.paletteTag = gTrainerFrontPicPaletteTable[gender].tag; + LoadCompressedObjectPaletteOverrideBuffer(&gTrainerFrontPicPaletteTable[trainerSpriteID], buffer); + LoadCompressedObjectPicOverrideBuffer(&gTrainerFrontPicTable[trainerSpriteID], buffer); + spriteTemplate.tileTag = gTrainerFrontPicTable[trainerSpriteID].tag; + spriteTemplate.paletteTag = gTrainerFrontPicPaletteTable[trainerSpriteID].tag; spriteTemplate.oam = &gOamData_839F0F4; spriteTemplate.anims = gDummySpriteAnimTable; spriteTemplate.images = NULL; diff --git a/src/main_menu.c b/src/main_menu.c index 09fd06d9e..3b616065b 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -1421,14 +1421,14 @@ void AddBirchSpeechObjects(u8 taskId) gTasks[taskId].data[TD_AZURILL_SPRITE_ID] = spriteId; //Create Brendan sprite - spriteId = CreateTrainerSprite_BirchSpeech(0, 120, 60, 0, unk_2000000); + spriteId = CreateTrainerSprite(0, 120, 60, 0, unk_2000000); gSprites[spriteId].callback = nullsub_34; gSprites[spriteId].invisible = 1; gSprites[spriteId].oam.priority = 0; gTasks[taskId].data[TD_BRENDAN_SPRITE_ID] = spriteId; //Create May sprite - spriteId = CreateTrainerSprite_BirchSpeech(1, 120, 60, 0, unk_2000000 + 0x800); + spriteId = CreateTrainerSprite(1, 120, 60, 0, unk_2000000 + 0x800); gSprites[spriteId].callback = nullsub_34; gSprites[spriteId].invisible = 1; gSprites[spriteId].oam.priority = 0; -- cgit v1.2.3 From a5b770a5112914468158842885b0b37f5425c887 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 20 Aug 2017 23:12:00 +0200 Subject: some more functions --- asm/battle_transition.s | 48 +++++++++----------------------------------- data/battle_transition.s | 15 ++++---------- src/battle_transition.c | 52 +++++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 60 insertions(+), 55 deletions(-) diff --git a/asm/battle_transition.s b/asm/battle_transition.s index cc3c98062..fbed395e5 100644 --- a/asm/battle_transition.s +++ b/asm/battle_transition.s @@ -7,38 +7,8 @@ .text - thumb_func_start Phase2Task_Transition8 -Phase2Task_Transition8: @ 811CA5C - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _0811CA8C @ =gUnknown_083FD8A4 - ldr r2, _0811CA90 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_0811CA6E: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _0811CA6E - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0811CA8C: .4byte gUnknown_083FD8A4 -_0811CA90: .4byte gTasks - thumb_func_end Phase2Task_Transition8 - - thumb_func_start sub_811CA94 -sub_811CA94: @ 811CA94 + thumb_func_start Phase2_Transition8_Func1 +Phase2_Transition8_Func1: @ 811CA94 push {r4-r6,lr} adds r4, r0, 0 bl sub_811D658 @@ -101,10 +71,10 @@ _0811CB10: .4byte 0x04000200 _0811CB14: .4byte REG_DISPSTAT _0811CB18: .4byte sub_811CC28 _0811CB1C: .4byte sub_811CCB0 - thumb_func_end sub_811CA94 + thumb_func_end Phase2_Transition8_Func1 - thumb_func_start sub_811CB20 -sub_811CB20: @ 811CB20 + thumb_func_start Phase2_Transition8_Func2 +Phase2_Transition8_Func2: @ 811CB20 push {r4-r7,lr} mov r7, r8 push {r7} @@ -208,10 +178,10 @@ _0811CBCE: pop {r4-r7} pop {r1} bx r1 - thumb_func_end sub_811CB20 + thumb_func_end Phase2_Transition8_Func2 - thumb_func_start sub_811CBE8 -sub_811CBE8: @ 811CBE8 + thumb_func_start Phase2_Transition8_Func3 +Phase2_Transition8_Func3: @ 811CBE8 push {lr} ldr r1, _0811CC18 @ =0x040000b0 ldrh r2, [r1, 0xA] @@ -237,7 +207,7 @@ _0811CC18: .4byte 0x040000b0 _0811CC1C: .4byte 0x0000c5ff _0811CC20: .4byte 0x00007fff _0811CC24: .4byte Phase2Task_Transition8 - thumb_func_end sub_811CBE8 + thumb_func_end Phase2_Transition8_Func3 thumb_func_start sub_811CC28 sub_811CC28: @ 811CC28 diff --git a/data/battle_transition.s b/data/battle_transition.s index ae69888d1..95f5c4737 100644 --- a/data/battle_transition.s +++ b/data/battle_transition.s @@ -4,13 +4,6 @@ .section .rodata -sMainTransitionPhases:: @ 83FD794 - .4byte Transition_Phase1 - .4byte Transition_WaitForPhase1 - .4byte Transition_Phase2 - .4byte Transition_WaitForPhase2 - - .align 2 sPhase2_Transition0_Funcs:: @ 83FD7A4 .4byte Phase2_Transition0_Func1 .4byte Phase2_Transition0_Func2 @@ -135,10 +128,10 @@ gUnknown_083FD8A0:: @ 83FD8A0 .2byte -1, 1 .align 2 -gUnknown_083FD8A4:: @ 83FD8A4 - .4byte sub_811CA94 - .4byte sub_811CB20 - .4byte sub_811CBE8 +sPhase2_Transition8_Funcs:: @ 83FD8A4 + .4byte Phase2_Transition8_Func1 + .4byte Phase2_Transition8_Func2 + .4byte Phase2_Transition8_Func3 .align 2 gUnknown_083FD8B0:: @ 83FD8B0 diff --git a/src/battle_transition.c b/src/battle_transition.c index 8d87f12f6..9ef012bb2 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -74,6 +74,10 @@ static void Phase2Task_Transition_Phoebe(u8 taskID); static void Phase2Task_Transition_Glacia(u8 taskID); static void Phase2Task_Transition_Drake(u8 taskID); static void Phase2Task_Transition_Steven(u8 taskID); +static bool8 Transition_Phase1(struct Task* task); +static bool8 Transition_WaitForPhase1(struct Task* task); +static bool8 Transition_Phase2(struct Task* task); +static bool8 Transition_WaitForPhase2(struct Task* task); static void VBlankCB_Phase2_Transition1(void); static void HBlankCB_Phase2_Transition1(void); @@ -112,7 +116,6 @@ static s16 sub_811CA44(s16 spriteID); typedef bool8 (*TransitionState)(struct Task* task); typedef bool8 (*TransitionSpriteCallback)(struct Sprite* sprite); -extern const TransitionState sMainTransitionPhases[]; extern const TransitionState sPhase2_Transition0_Funcs[]; extern const TransitionState sPhase2_Transition1_Funcs[]; extern const TransitionState sPhase2_Transition2_Funcs[]; @@ -121,6 +124,7 @@ extern const TransitionState sPhase2_Transition4_Funcs[]; extern const TransitionState sPhase2_Transition5_Funcs[]; extern const TransitionState sPhase2_Transition6_Funcs[]; extern const TransitionState sPhase2_Transition7_Funcs[]; +extern const TransitionState sPhase2_Transition8_Funcs[]; extern const TransitionState sPhase2_Mugshot_Transition_Funcs[]; extern const u16 gFieldEffectObjectPalette10[]; extern const u16 gUnknown_083FDB44[]; @@ -173,6 +177,14 @@ static const TaskFunc sPhase2_Tasks[TRANSITIONS_NO] = &Phase2Task_Transition_Steven, // 16 }; +static const TransitionState sMainTransitionPhases[] = +{ + &Transition_Phase1, + &Transition_WaitForPhase1, + &Transition_Phase2, + &Transition_WaitForPhase2 +}; + void sub_811C90C(struct Sprite* sprite); void sub_811AABC(u8 transitionID) @@ -213,7 +225,7 @@ static void Task_BattleTransitionMain(u8 taskID) while (sMainTransitionPhases[gTasks[taskID].tState](&gTasks[taskID])); } -bool8 Transition_Phase1(struct Task* task) +static bool8 Transition_Phase1(struct Task* task) { sub_807DE10(); CpuSet(gPlttBufferFaded, gPlttBufferUnfaded, 0x4000100); @@ -230,7 +242,7 @@ bool8 Transition_Phase1(struct Task* task) } } -bool8 Transition_WaitForPhase1(struct Task* task) +static bool8 Transition_WaitForPhase1(struct Task* task) { if (FindTaskIdByFunc(sPhase1_Tasks[task->tTransitionID]) == 0xFF) { @@ -241,14 +253,14 @@ bool8 Transition_WaitForPhase1(struct Task* task) return 0; } -bool8 Transition_Phase2(struct Task* task) +static bool8 Transition_Phase2(struct Task* task) { CreateTask(sPhase2_Tasks[task->tTransitionID], 0); task->tState++; return 0; } -bool8 Transition_WaitForPhase2(struct Task* task) +static bool8 Transition_WaitForPhase2(struct Task* task) { task->tTransitionDone = 0; if (FindTaskIdByFunc(sPhase2_Tasks[task->tTransitionID]) == 0xFF) @@ -1481,3 +1493,33 @@ static s16 sub_811CA44(s16 spriteID) #undef tMugshotOpponentID #undef tMugshotPlayerID #undef tMugshotID + +void Phase2Task_Transition8(u8 taskID) +{ + while (sPhase2_Transition8_Funcs[gTasks[taskID].tState](&gTasks[taskID])); +} + +bool8 Phase2_Transition7_Func1(struct Task* task) +{ + u8 i; + + sub_811D658(); + dp12_8087EA4(); + + task->data[2] = 256; + task->data[3] = 256; + TRANSITION_STRUCT.WININ = 63; + TRANSITION_STRUCT.WINOUT = 0; + TRANSITION_STRUCT.WIN0V = 160; + + for (i = 0; i < 160; i++) + { + gUnknown_03004DE0[1][i] = TRANSITION_STRUCT.field_14; + gUnknown_03004DE0[1][160 + i] = 0xF0; + } + + SetVBlankCallback(VBlankCB_Phase2_Transition7); + + task->tState++; + return 1; +} -- cgit v1.2.3 From aa053f1948dcb03213105c63ed81f197909222c6 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sun, 20 Aug 2017 21:32:22 -0400 Subject: sub_80B33D0 --- asm/shop.s | 40 ---------------------------------------- src/shop.c | 9 +++++++++ 2 files changed, 9 insertions(+), 40 deletions(-) diff --git a/asm/shop.s b/asm/shop.s index a341e90a1..8b4b0b00d 100644 --- a/asm/shop.s +++ b/asm/shop.s @@ -6,46 +6,6 @@ .text - thumb_func_start sub_80B33D0 -sub_80B33D0: @ 80B33D0 - push {r4-r6,lr} - mov r6, r8 - push {r6} - adds r6, r0, 0 - adds r4, r1, 0 - mov r8, r2 - lsls r4, 22 - ldr r5, _080B3418 @ =gBGTilemapBuffers + 0x1800 - lsls r6, 17 - asrs r6, 16 - movs r0, 0x80 - lsls r0, 15 - adds r4, r0 - asrs r4, 16 - adds r0, r5, 0 - adds r1, r6, 0 - adds r2, r4, 0 - mov r3, r8 - bl BuyMenuDrawMapMetatileLayer - ldr r0, _080B341C @ =0xfffff800 - adds r5, r0 - movs r0, 0x8 - add r8, r0 - adds r0, r5, 0 - adds r1, r6, 0 - adds r2, r4, 0 - mov r3, r8 - bl BuyMenuDrawMapMetatileLayer - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B3418: .4byte gBGTilemapBuffers + 0x1800 -_080B341C: .4byte 0xfffff800 - thumb_func_end sub_80B33D0 - thumb_func_start sub_80B3420 sub_80B3420: @ 80B3420 push {r4-r7,lr} diff --git a/src/shop.c b/src/shop.c index d53646a88..5cc1f276e 100644 --- a/src/shop.c +++ b/src/shop.c @@ -340,3 +340,12 @@ void BuyMenuDrawMapMetatile(int var1, int var2, u16 *var3, s8 var4) break; } } + +void sub_80B33D0(s16 var1, int var2, u16 *var3) +{ + s16 offset1 = var1 * 2; + s16 offset2 = (var2 * 0x40) + 0x40; + + BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[3], offset1, offset2, var3); + BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[2], offset1, offset2, var3 + 4); +} -- cgit v1.2.3 From e7f670bf790a96e63b1302bc004bfaa55c8ac7ea Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Mon, 21 Aug 2017 10:47:43 -0400 Subject: i am useless --- asm/shop.s | 326 +------------------------------------------------- include/shop.h | 2 + src/shop.c | 368 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 376 insertions(+), 320 deletions(-) diff --git a/asm/shop.s b/asm/shop.s index 8b4b0b00d..91d6cafb8 100644 --- a/asm/shop.s +++ b/asm/shop.s @@ -6,320 +6,6 @@ .text - thumb_func_start sub_80B3420 -sub_80B3420: @ 80B3420 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - mov r4, sp - adds r4, 0x2 - mov r0, sp - adds r1, r4, 0 - bl GetXYCoordsOneStepInFrontOfPlayer - mov r1, sp - mov r0, sp - ldrh r0, [r0] - subs r0, 0x3 - strh r0, [r1] - ldrh r0, [r4] - subs r0, 0x3 - strh r0, [r4] - movs r1, 0 - ldr r0, _080B34A8 @ =0x000001ff - mov r10, r0 - ldr r2, _080B34AC @ =gMapHeader - mov r9, r2 -_080B3452: - movs r4, 0 - lsls r1, 16 - mov r8, r1 - asrs r7, r1, 16 -_080B345A: - mov r0, sp - movs r3, 0 - ldrsh r0, [r0, r3] - lsls r4, 16 - asrs r6, r4, 16 - adds r0, r6 - mov r2, sp - movs r3, 0x2 - ldrsh r1, [r2, r3] - adds r1, r7 - bl MapGridGetMetatileIdAt - lsls r0, 16 - lsrs r5, r0, 16 - cmp r7, 0x5 - beq _080B34D0 - cmp r6, 0x6 - beq _080B34D0 - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - adds r0, r6 - mov r2, sp - movs r3, 0x2 - ldrsh r1, [r2, r3] - adds r1, r7 - bl MapGridGetMetatileLayerTypeAt - lsls r0, 24 - lsrs r3, r0, 24 - cmp r5, r10 - bhi _080B34B0 - mov r1, r9 - ldr r0, [r1] - ldr r0, [r0, 0x10] - lsls r1, r5, 4 - ldr r2, [r0, 0xC] - adds r2, r1 - b _080B34C0 - .align 2, 0 -_080B34A8: .4byte 0x000001ff -_080B34AC: .4byte gMapHeader -_080B34B0: - mov r2, r9 - ldr r0, [r2] - ldr r1, [r0, 0x14] - ldr r2, _080B34CC @ =0xfffffe00 - adds r0, r5, r2 - lsls r0, 4 - ldr r2, [r1, 0xC] - adds r2, r0 -_080B34C0: - adds r0, r6, 0 - adds r1, r7, 0 - bl BuyMenuDrawMapMetatile - b _080B3506 - .align 2, 0 -_080B34CC: .4byte 0xfffffe00 -_080B34D0: - cmp r5, r10 - bhi _080B34EC - asrs r0, r4, 16 - mov r3, r9 - ldr r1, [r3] - ldr r1, [r1, 0x10] - lsls r3, r5, 4 - ldr r2, [r1, 0xC] - adds r2, r3 - mov r3, r8 - asrs r1, r3, 16 - bl sub_80B33D0 - b _080B3506 -_080B34EC: - asrs r0, r4, 16 - mov r2, r9 - ldr r1, [r2] - ldr r2, [r1, 0x14] - ldr r3, _080B354C @ =0xfffffe00 - adds r1, r5, r3 - lsls r1, 4 - ldr r2, [r2, 0xC] - adds r2, r1 - mov r3, r8 - asrs r1, r3, 16 - bl sub_80B33D0 -_080B3506: - cmp r7, 0 - bne _080B3520 - asrs r1, r4, 16 - cmp r1, 0 - beq _080B3520 - cmp r1, 0x6 - beq _080B3520 - lsls r1, 17 - asrs r1, 16 - ldr r0, _080B3550 @ =gBGTilemapBuffers + 0x800 - movs r2, 0x40 - bl sub_80B32EC -_080B3520: - movs r1, 0x80 - lsls r1, 9 - adds r0, r4, r1 - lsrs r4, r0, 16 - asrs r0, 16 - cmp r0, 0x6 - ble _080B345A - adds r0, r1, 0 - add r0, r8 - lsrs r1, r0, 16 - asrs r0, 16 - cmp r0, 0x5 - ble _080B3452 - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B354C: .4byte 0xfffffe00 -_080B3550: .4byte gBGTilemapBuffers + 0x800 - thumb_func_end sub_80B3420 - - thumb_func_start BuyMenuDrawMapGraphics -BuyMenuDrawMapGraphics: @ 80B3554 - push {lr} - bl sub_80F9020 - bl sub_80B356C - bl sub_80B368C - bl sub_80B3420 - pop {r0} - bx r0 - thumb_func_end BuyMenuDrawMapGraphics - - thumb_func_start sub_80B356C -sub_80B356C: @ 80B356C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - movs r0, 0 - mov r8, r0 - mov r4, sp - adds r4, 0x2 - mov r0, sp - adds r1, r4, 0 - bl GetXYCoordsOneStepInFrontOfPlayer - bl PlayerGetZCoord - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x4] - movs r5, 0 - ldr r2, _080B3674 @ =gUnknown_020386A4 - movs r1, 0x10 -_080B3598: - lsls r0, r5, 3 - adds r0, r2 - strh r1, [r0] - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0xF - bls _080B3598 - movs r5, 0 - ldr r7, _080B3678 @ =gUnknown_020386AA - subs r1, r7, 0x6 - mov r9, r1 -_080B35B0: - movs r4, 0 - adds r2, r5, 0x1 - mov r10, r2 -_080B35B6: - mov r1, sp - ldr r3, _080B367C @ =0x0000fffd - adds r0, r3, 0 - ldrh r1, [r1] - adds r0, r1 - adds r0, r4 - lsls r0, 16 - lsrs r0, 16 - ldr r2, _080B3680 @ =0x0000fffe - adds r1, r2, 0 - mov r3, sp - ldrh r3, [r3, 0x2] - adds r1, r3 - adds r1, r5 - lsls r1, 16 - lsrs r1, 16 - ldr r2, [sp, 0x4] - bl GetFieldObjectIdByXYZ - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x10 - beq _080B3650 - mov r0, r8 - lsls r3, r0, 3 - mov r1, r9 - adds r0, r3, r1 - movs r6, 0 - strh r2, [r0] - mov r0, r9 - adds r0, 0x2 - adds r0, r3, r0 - strh r4, [r0] - ldr r1, _080B3684 @ =gUnknown_020386A8 - adds r0, r3, r1 - strh r5, [r0] - ldr r1, _080B3688 @ =gMapObjects - lsls r0, r2, 3 - adds r0, r2 - lsls r0, 2 - adds r2, r0, r1 - ldrb r0, [r2, 0x18] - lsls r0, 28 - lsrs r0, 28 - cmp r0, 0x1 - bne _080B3616 - adds r0, r3, r7 - strh r6, [r0] -_080B3616: - ldrb r0, [r2, 0x18] - lsls r0, 28 - lsrs r0, 28 - cmp r0, 0x2 - bne _080B3626 - adds r1, r3, r7 - movs r0, 0x1 - strh r0, [r1] -_080B3626: - ldrb r0, [r2, 0x18] - lsls r0, 28 - lsrs r0, 28 - cmp r0, 0x3 - bne _080B3636 - adds r1, r3, r7 - movs r0, 0x2 - strh r0, [r1] -_080B3636: - ldrb r0, [r2, 0x18] - lsls r0, 28 - lsrs r0, 28 - cmp r0, 0x4 - bne _080B3646 - adds r1, r3, r7 - movs r0, 0x3 - strh r0, [r1] -_080B3646: - mov r0, r8 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 -_080B3650: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x6 - bls _080B35B6 - mov r2, r10 - lsls r0, r2, 24 - lsrs r5, r0, 24 - cmp r5, 0x4 - bls _080B35B0 - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B3674: .4byte gUnknown_020386A4 -_080B3678: .4byte gUnknown_020386AA -_080B367C: .4byte 0x0000fffd -_080B3680: .4byte 0x0000fffe -_080B3684: .4byte gUnknown_020386A8 -_080B3688: .4byte gMapObjects - thumb_func_end sub_80B356C - thumb_func_start sub_80B368C sub_80B368C: @ 80B368C push {r4-r7,lr} @@ -332,8 +18,8 @@ sub_80B368C: @ 80B368C mov r8, r0 ldr r7, _080B3714 @ =gMapObjects _080B369E: - lsls r4, r5, 3 - adds r1, r4, r6 + lsls r4, r5, 3 (i * 8) + adds r1, r4, r6 (gUnknown_020386A4 + (i * 8)) movs r2, 0 ldrsh r0, [r1, r2] cmp r0, 0x10 @@ -344,9 +30,9 @@ _080B369E: lsls r0, 2 adds r0, r7 ldrb r0, [r0, 0x5] - adds r1, r6, 0x2 + adds r1, r6, 0x2 adds r1, r4, r1 - ldrh r2, [r1] + ldrh r2, [r1] (gUnknown_020386A4[i].) lsls r2, 4 adds r2, 0x8 lsls r2, 16 @@ -370,8 +56,8 @@ _080B369E: lsls r2, 2 ldr r0, _080B371C @ =gSprites adds r2, r0 - mov r1, r8 - adds r0, r4, r1 + mov r1, r8 (r1 = gUnknown_020386A4 + 6) + adds r0, r4, r1 ( gUnknown_020386A4 + 6 + ) ldrb r1, [r0] adds r0, r2, 0 bl StartSpriteAnim diff --git a/include/shop.h b/include/shop.h index cca6091c9..414bd628f 100644 --- a/include/shop.h +++ b/include/shop.h @@ -14,5 +14,7 @@ void sub_80B40E8(u8); void CreatePokemartMenu(void *); void CreateDecorationShop1Menu(void *); void CreateDecorationShop2Menu(void *); +void sub_80B356C(void); +void sub_80B368C(void); #endif // GUARD_SHOP_H diff --git a/src/shop.c b/src/shop.c index 5cc1f276e..b832b5a26 100644 --- a/src/shop.c +++ b/src/shop.c @@ -16,6 +16,7 @@ #include "task.h" #include "tv.h" #include "unknown_task.h" +#include "field_map_obj.h" struct UnknownShopStruct { @@ -349,3 +350,370 @@ void sub_80B33D0(s16 var1, int var2, u16 *var3) BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[3], offset1, offset2, var3); BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[2], offset1, offset2, var3 + 4); } + +// no. for loop too hard. +__attribute__((naked)) +void sub_80B3420() // dont know args +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x4\n\ + mov r4, sp\n\ + adds r4, 0x2\n\ + mov r0, sp\n\ + adds r1, r4, 0\n\ + bl GetXYCoordsOneStepInFrontOfPlayer\n\ + mov r1, sp\n\ + mov r0, sp\n\ + ldrh r0, [r0]\n\ + subs r0, 0x3\n\ + strh r0, [r1]\n\ + ldrh r0, [r4]\n\ + subs r0, 0x3\n\ + strh r0, [r4]\n\ + movs r1, 0\n\ + ldr r0, _080B34A8 @ =0x000001ff\n\ + mov r10, r0\n\ + ldr r2, _080B34AC @ =gMapHeader\n\ + mov r9, r2\n\ +_080B3452:\n\ + movs r4, 0\n\ + lsls r1, 16\n\ + mov r8, r1\n\ + asrs r7, r1, 16\n\ +_080B345A:\n\ + mov r0, sp\n\ + movs r3, 0\n\ + ldrsh r0, [r0, r3]\n\ + lsls r4, 16\n\ + asrs r6, r4, 16\n\ + adds r0, r6\n\ + mov r2, sp\n\ + movs r3, 0x2\n\ + ldrsh r1, [r2, r3]\n\ + adds r1, r7\n\ + bl MapGridGetMetatileIdAt\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + cmp r7, 0x5\n\ + beq _080B34D0\n\ + cmp r6, 0x6\n\ + beq _080B34D0\n\ + mov r0, sp\n\ + movs r1, 0\n\ + ldrsh r0, [r0, r1]\n\ + adds r0, r6\n\ + mov r2, sp\n\ + movs r3, 0x2\n\ + ldrsh r1, [r2, r3]\n\ + adds r1, r7\n\ + bl MapGridGetMetatileLayerTypeAt\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + cmp r5, r10\n\ + bhi _080B34B0\n\ + mov r1, r9\n\ + ldr r0, [r1]\n\ + ldr r0, [r0, 0x10]\n\ + lsls r1, r5, 4\n\ + ldr r2, [r0, 0xC]\n\ + adds r2, r1\n\ + b _080B34C0\n\ + .align 2, 0\n\ +_080B34A8: .4byte 0x000001ff\n\ +_080B34AC: .4byte gMapHeader\n\ +_080B34B0:\n\ + mov r2, r9\n\ + ldr r0, [r2]\n\ + ldr r1, [r0, 0x14]\n\ + ldr r2, _080B34CC @ =0xfffffe00\n\ + adds r0, r5, r2\n\ + lsls r0, 4\n\ + ldr r2, [r1, 0xC]\n\ + adds r2, r0\n\ +_080B34C0:\n\ + adds r0, r6, 0\n\ + adds r1, r7, 0\n\ + bl BuyMenuDrawMapMetatile\n\ + b _080B3506\n\ + .align 2, 0\n\ +_080B34CC: .4byte 0xfffffe00\n\ +_080B34D0:\n\ + cmp r5, r10\n\ + bhi _080B34EC\n\ + asrs r0, r4, 16\n\ + mov r3, r9\n\ + ldr r1, [r3]\n\ + ldr r1, [r1, 0x10]\n\ + lsls r3, r5, 4\n\ + ldr r2, [r1, 0xC]\n\ + adds r2, r3\n\ + mov r3, r8\n\ + asrs r1, r3, 16\n\ + bl sub_80B33D0\n\ + b _080B3506\n\ +_080B34EC:\n\ + asrs r0, r4, 16\n\ + mov r2, r9\n\ + ldr r1, [r2]\n\ + ldr r2, [r1, 0x14]\n\ + ldr r3, _080B354C @ =0xfffffe00\n\ + adds r1, r5, r3\n\ + lsls r1, 4\n\ + ldr r2, [r2, 0xC]\n\ + adds r2, r1\n\ + mov r3, r8\n\ + asrs r1, r3, 16\n\ + bl sub_80B33D0\n\ +_080B3506:\n\ + cmp r7, 0\n\ + bne _080B3520\n\ + asrs r1, r4, 16\n\ + cmp r1, 0\n\ + beq _080B3520\n\ + cmp r1, 0x6\n\ + beq _080B3520\n\ + lsls r1, 17\n\ + asrs r1, 16\n\ + ldr r0, _080B3550 @ =gBGTilemapBuffers + 0x800\n\ + movs r2, 0x40\n\ + bl sub_80B32EC\n\ +_080B3520:\n\ + movs r1, 0x80\n\ + lsls r1, 9\n\ + adds r0, r4, r1\n\ + lsrs r4, r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x6\n\ + ble _080B345A\n\ + adds r0, r1, 0\n\ + add r0, r8\n\ + lsrs r1, r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x5\n\ + ble _080B3452\n\ + add sp, 0x4\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\ +_080B354C: .4byte 0xfffffe00\n\ +_080B3550: .4byte gBGTilemapBuffers + 0x800\n\ + .syntax divided"); +} + +void BuyMenuDrawMapGraphics(void) +{ + sub_80F9020(); + sub_80B356C(); + sub_80B368C(); + sub_80B3420(); +} + +// yet another difficult multi for-loop. No. +__attribute__((naked)) +void sub_80B356C(void) // PopulateShopViewWindowObjectInfo ? +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x8\n\ + movs r0, 0\n\ + mov r8, r0\n\ + mov r4, sp\n\ + adds r4, 0x2\n\ + mov r0, sp\n\ + adds r1, r4, 0\n\ + bl GetXYCoordsOneStepInFrontOfPlayer\n\ + bl PlayerGetZCoord\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + str r0, [sp, 0x4]\n\ + movs r5, 0\n\ + ldr r2, _080B3674 @ =gUnknown_020386A4\n\ + movs r1, 0x10\n\ +_080B3598:\n\ + lsls r0, r5, 3\n\ + adds r0, r2\n\ + strh r1, [r0]\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0xF\n\ + bls _080B3598\n\ + movs r5, 0\n\ + ldr r7, _080B3678 @ =gUnknown_020386AA\n\ + subs r1, r7, 0x6\n\ + mov r9, r1\n\ +_080B35B0:\n\ + movs r4, 0\n\ + adds r2, r5, 0x1\n\ + mov r10, r2\n\ +_080B35B6:\n\ + mov r1, sp\n\ + ldr r3, _080B367C @ =0x0000fffd\n\ + adds r0, r3, 0\n\ + ldrh r1, [r1]\n\ + adds r0, r1\n\ + adds r0, r4\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + ldr r2, _080B3680 @ =0x0000fffe\n\ + adds r1, r2, 0\n\ + mov r3, sp\n\ + ldrh r3, [r3, 0x2]\n\ + adds r1, r3\n\ + adds r1, r5\n\ + lsls r1, 16\n\ + lsrs r1, 16\n\ + ldr r2, [sp, 0x4]\n\ + bl GetFieldObjectIdByXYZ\n\ + lsls r0, 24\n\ + lsrs r2, r0, 24\n\ + cmp r2, 0x10\n\ + beq _080B3650\n\ + mov r0, r8\n\ + lsls r3, r0, 3\n\ + mov r1, r9\n\ + adds r0, r3, r1\n\ + movs r6, 0\n\ + strh r2, [r0]\n\ + mov r0, r9\n\ + adds r0, 0x2\n\ + adds r0, r3, r0\n\ + strh r4, [r0]\n\ + ldr r1, _080B3684 @ =gUnknown_020386A8\n\ + adds r0, r3, r1\n\ + strh r5, [r0]\n\ + ldr r1, _080B3688 @ =gMapObjects\n\ + lsls r0, r2, 3\n\ + adds r0, r2\n\ + lsls r0, 2\n\ + adds r2, r0, r1\n\ + ldrb r0, [r2, 0x18]\n\ + lsls r0, 28\n\ + lsrs r0, 28\n\ + cmp r0, 0x1\n\ + bne _080B3616\n\ + adds r0, r3, r7\n\ + strh r6, [r0]\n\ +_080B3616:\n\ + ldrb r0, [r2, 0x18]\n\ + lsls r0, 28\n\ + lsrs r0, 28\n\ + cmp r0, 0x2\n\ + bne _080B3626\n\ + adds r1, r3, r7\n\ + movs r0, 0x1\n\ + strh r0, [r1]\n\ +_080B3626:\n\ + ldrb r0, [r2, 0x18]\n\ + lsls r0, 28\n\ + lsrs r0, 28\n\ + cmp r0, 0x3\n\ + bne _080B3636\n\ + adds r1, r3, r7\n\ + movs r0, 0x2\n\ + strh r0, [r1]\n\ +_080B3636:\n\ + ldrb r0, [r2, 0x18]\n\ + lsls r0, 28\n\ + lsrs r0, 28\n\ + cmp r0, 0x4\n\ + bne _080B3646\n\ + adds r1, r3, r7\n\ + movs r0, 0x3\n\ + strh r0, [r1]\n\ +_080B3646:\n\ + mov r0, r8\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r8, r0\n\ +_080B3650:\n\ + adds r0, r4, 0x1\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + cmp r4, 0x6\n\ + bls _080B35B6\n\ + mov r2, r10\n\ + lsls r0, r2, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0x4\n\ + bls _080B35B0\n\ + add sp, 0x8\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\ +_080B3674: .4byte gUnknown_020386A4\n\ +_080B3678: .4byte gUnknown_020386AA\n\ +_080B367C: .4byte 0x0000fffd\n\ +_080B3680: .4byte 0x0000fffe\n\ +_080B3684: .4byte gUnknown_020386A8\n\ +_080B3688: .4byte gMapObjects\n\ + .syntax divided"); +} +/* +struct UnkStruct_20386A4 +{ + s16 mapObjId; + u16 unk2; + u16 unk4; + u8 unk6[2]; +}; +*/ + +//extern s16 gUnknown_020386A4[][]; +//extern struct UnkStruct_20386A4 gUnknown_020386A4[]; + +// all 3 of these are incredibly hard, please help +/*void sub_80B368C(void) +{ + // r0 = spriteId + // r1 = gUnknown_020386A4 + 6 + // r2 = gSprites[spriteId] + // r3 = gUnknown_020386A4[i].unk4 + 32 + // r4 = i * 8 + // r5 = 0 (i) + // r6 = gUnknown_020386A4 + // r7 = gMapObjects + // r8 = gUnknown_020386A4 + 6 + // r9 = + // r10 = + // r11 = + // r12 = + + u8 i = 0; + u8 *unkArray = (u8 *)&gUnknown_020386A4[6]; + + for(; i < 16; i++) // max objects? + { + s16 mapObjId = unkStruct[i].mapObjId; + if(mapObjId != 16) + { + u8 spriteId = AddPseudoFieldObject( + gMapObjects[mapObjId].graphicsId, + SpriteCallbackDummy, + unkStruct[i].unk2 * 16 + 8, + unkStruct[i].unk4 + 12, + 2); + StartSpriteAnim(&gSprites[spriteId], unkArray[i]); + } + } +}*/ -- cgit v1.2.3 From a60e147d21e557bc9601e641d4a58488ede25613 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Mon, 21 Aug 2017 11:23:34 -0400 Subject: idiot. --- asm/shop.s | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/asm/shop.s b/asm/shop.s index 91d6cafb8..05b86b1e2 100644 --- a/asm/shop.s +++ b/asm/shop.s @@ -18,8 +18,8 @@ sub_80B368C: @ 80B368C mov r8, r0 ldr r7, _080B3714 @ =gMapObjects _080B369E: - lsls r4, r5, 3 (i * 8) - adds r1, r4, r6 (gUnknown_020386A4 + (i * 8)) + lsls r4, r5, 3 + adds r1, r4, r6 movs r2, 0 ldrsh r0, [r1, r2] cmp r0, 0x10 @@ -32,7 +32,7 @@ _080B369E: ldrb r0, [r0, 0x5] adds r1, r6, 0x2 adds r1, r4, r1 - ldrh r2, [r1] (gUnknown_020386A4[i].) + ldrh r2, [r1] lsls r2, 4 adds r2, 0x8 lsls r2, 16 @@ -56,8 +56,8 @@ _080B369E: lsls r2, 2 ldr r0, _080B371C @ =gSprites adds r2, r0 - mov r1, r8 (r1 = gUnknown_020386A4 + 6) - adds r0, r4, r1 ( gUnknown_020386A4 + 6 + ) + mov r1, r8 + adds r0, r4, r1 ldrb r1, [r0] adds r0, r2, 0 bl StartSpriteAnim -- cgit v1.2.3 From a10592da1afeec6945e31f8321b94990c503e937 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 21 Aug 2017 21:11:42 +0200 Subject: transition main functions are done --- asm/battle_transition.s | 1316 ---------------------------------------------- data/battle_transition.s | 32 +- src/battle_transition.c | 556 +++++++++++++++++--- 3 files changed, 501 insertions(+), 1403 deletions(-) diff --git a/asm/battle_transition.s b/asm/battle_transition.s index fbed395e5..2517b2aad 100644 --- a/asm/battle_transition.s +++ b/asm/battle_transition.s @@ -7,1322 +7,6 @@ .text - thumb_func_start Phase2_Transition8_Func1 -Phase2_Transition8_Func1: @ 811CA94 - push {r4-r6,lr} - adds r4, r0, 0 - bl sub_811D658 - bl dp12_8087EA4 - movs r2, 0 - movs r0, 0x80 - lsls r0, 1 - strh r0, [r4, 0xC] - movs r0, 0x1 - strh r0, [r4, 0xE] - ldr r1, _0811CB08 @ =0x0200c000 - movs r0, 0x3F - strh r0, [r1, 0x2] - strh r2, [r1, 0x4] - movs r0, 0xA0 - strh r0, [r1, 0x8] - ldr r3, _0811CB0C @ =gUnknown_03005560 - adds r6, r1, 0 - movs r5, 0xF0 -_0811CABE: - lsls r0, r2, 1 - adds r0, r3 - ldrh r1, [r6, 0x14] - strh r1, [r0] - adds r0, r2, 0 - adds r0, 0xA0 - lsls r0, 1 - adds r0, r3 - strh r5, [r0] - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0x9F - bls _0811CABE - ldr r2, _0811CB10 @ =0x04000200 - ldrh r0, [r2] - movs r1, 0x2 - orrs r0, r1 - strh r0, [r2] - ldr r2, _0811CB14 @ =REG_DISPSTAT - ldrh r0, [r2] - movs r1, 0x10 - orrs r0, r1 - strh r0, [r2] - ldr r0, _0811CB18 @ =sub_811CC28 - bl SetVBlankCallback - ldr r0, _0811CB1C @ =sub_811CCB0 - bl SetHBlankCallback - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0x1 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0811CB08: .4byte 0x0200c000 -_0811CB0C: .4byte gUnknown_03005560 -_0811CB10: .4byte 0x04000200 -_0811CB14: .4byte REG_DISPSTAT -_0811CB18: .4byte sub_811CC28 -_0811CB1C: .4byte sub_811CCB0 - thumb_func_end Phase2_Transition8_Func1 - - thumb_func_start Phase2_Transition8_Func2 -Phase2_Transition8_Func2: @ 811CB20 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r2, r0, 0 - ldr r1, _0811CB98 @ =0x0200c000 - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - ldrh r0, [r2, 0xC] - lsls r0, 16 - asrs r0, 24 - ldrh r3, [r2, 0xA] - adds r0, r3 - strh r0, [r2, 0xA] - lsls r0, 16 - asrs r0, 16 - mov r12, r1 - cmp r0, 0xF0 - ble _0811CB4A - movs r0, 0xF0 - strh r0, [r2, 0xA] -_0811CB4A: - ldrh r4, [r2, 0xC] - movs r0, 0xC - ldrsh r1, [r2, r0] - ldr r0, _0811CB9C @ =0x00000fff - ldrh r3, [r2, 0xE] - cmp r1, r0 - bgt _0811CB5C - adds r0, r4, r3 - strh r0, [r2, 0xC] -_0811CB5C: - lsls r0, r3, 16 - asrs r0, 16 - cmp r0, 0x7F - bgt _0811CB68 - lsls r0, r3, 1 - strh r0, [r2, 0xE] -_0811CB68: - movs r5, 0 - ldr r7, _0811CBA0 @ =gUnknown_03004DE0 - movs r1, 0xA0 - lsls r1, 1 - adds r1, r7 - mov r8, r1 - mov r6, r12 -_0811CB76: - lsls r0, r5, 1 - adds r3, r0, r7 - mov r1, r8 - adds r4, r0, r1 - movs r0, 0x1 - ands r0, r5 - cmp r0, 0 - beq _0811CBA4 - ldrh r0, [r2, 0xA] - ldrh r1, [r6, 0x14] - adds r0, r1 - strh r0, [r3] - ldrh r1, [r2, 0xA] - movs r0, 0xF0 - subs r0, r1 - b _0811CBB4 - .align 2, 0 -_0811CB98: .4byte 0x0200c000 -_0811CB9C: .4byte 0x00000fff -_0811CBA0: .4byte gUnknown_03004DE0 -_0811CBA4: - ldrh r0, [r6, 0x14] - ldrh r1, [r2, 0xA] - subs r0, r1 - strh r0, [r3] - ldrh r0, [r2, 0xA] - lsls r0, 8 - movs r1, 0xF1 - orrs r0, r1 -_0811CBB4: - strh r0, [r4] - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0x9F - bls _0811CB76 - movs r3, 0xA - ldrsh r0, [r2, r3] - cmp r0, 0xEF - ble _0811CBCE - ldrh r0, [r2, 0x8] - adds r0, 0x1 - strh r0, [r2, 0x8] -_0811CBCE: - mov r1, r12 - ldrb r0, [r1] - adds r0, 0x1 - ldrb r1, [r1] - mov r2, r12 - strb r0, [r2] - movs r0, 0 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end Phase2_Transition8_Func2 - - thumb_func_start Phase2_Transition8_Func3 -Phase2_Transition8_Func3: @ 811CBE8 - push {lr} - ldr r1, _0811CC18 @ =0x040000b0 - ldrh r2, [r1, 0xA] - ldr r0, _0811CC1C @ =0x0000c5ff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r2, [r1, 0xA] - ldr r0, _0811CC20 @ =0x00007fff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r0, [r1, 0xA] - bl sub_811D6D4 - ldr r0, _0811CC24 @ =Phase2Task_Transition8 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_0811CC18: .4byte 0x040000b0 -_0811CC1C: .4byte 0x0000c5ff -_0811CC20: .4byte 0x00007fff -_0811CC24: .4byte Phase2Task_Transition8 - thumb_func_end Phase2_Transition8_Func3 - - thumb_func_start sub_811CC28 -sub_811CC28: @ 811CC28 - push {r4,lr} - ldr r4, _0811CC84 @ =0x040000b0 - ldrh r1, [r4, 0xA] - ldr r0, _0811CC88 @ =0x0000c5ff - ands r0, r1 - strh r0, [r4, 0xA] - ldrh r1, [r4, 0xA] - ldr r0, _0811CC8C @ =0x00007fff - ands r0, r1 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0xA] - bl VBlankCB_BattleTransition - ldr r2, _0811CC90 @ =REG_WININ - ldr r1, _0811CC94 @ =0x0200c000 - ldrh r0, [r1, 0x2] - strh r0, [r2] - adds r2, 0x2 - ldrh r0, [r1, 0x4] - strh r0, [r2] - subs r2, 0x6 - ldrh r0, [r1, 0x8] - strh r0, [r2] - ldrb r0, [r1] - cmp r0, 0 - beq _0811CC70 - ldr r1, _0811CC98 @ =0x040000d4 - ldr r0, _0811CC9C @ =gUnknown_03004DE0 - str r0, [r1] - movs r2, 0xF0 - lsls r2, 3 - adds r0, r2 - str r0, [r1, 0x4] - ldr r0, _0811CCA0 @ =0x80000140 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] -_0811CC70: - ldr r0, _0811CCA4 @ =gUnknown_030056A0 - str r0, [r4] - ldr r0, _0811CCA8 @ =REG_WIN0H - str r0, [r4, 0x4] - ldr r0, _0811CCAC @ =0xa2400001 - str r0, [r4, 0x8] - ldr r0, [r4, 0x8] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0811CC84: .4byte 0x040000b0 -_0811CC88: .4byte 0x0000c5ff -_0811CC8C: .4byte 0x00007fff -_0811CC90: .4byte REG_WININ -_0811CC94: .4byte 0x0200c000 -_0811CC98: .4byte 0x040000d4 -_0811CC9C: .4byte gUnknown_03004DE0 -_0811CCA0: .4byte 0x80000140 -_0811CCA4: .4byte gUnknown_030056A0 -_0811CCA8: .4byte REG_WIN0H -_0811CCAC: .4byte 0xa2400001 - thumb_func_end sub_811CC28 - - thumb_func_start sub_811CCB0 -sub_811CCB0: @ 811CCB0 - ldr r1, _0811CCD0 @ =gUnknown_03004DE0 - ldr r0, _0811CCD4 @ =REG_VCOUNT - ldrh r0, [r0] - lsls r0, 1 - movs r2, 0xF0 - lsls r2, 3 - adds r1, r2 - adds r0, r1 - ldrh r1, [r0] - ldr r0, _0811CCD8 @ =REG_BG1HOFS - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - bx lr - .align 2, 0 -_0811CCD0: .4byte gUnknown_03004DE0 -_0811CCD4: .4byte REG_VCOUNT -_0811CCD8: .4byte REG_BG1HOFS - thumb_func_end sub_811CCB0 - - thumb_func_start Phase2Task_Transition9 -Phase2Task_Transition9: @ 811CCDC - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _0811CD0C @ =gUnknown_083FD8B0 - ldr r2, _0811CD10 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_0811CCEE: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _0811CCEE - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0811CD0C: .4byte gUnknown_083FD8B0 -_0811CD10: .4byte gTasks - thumb_func_end Phase2Task_Transition9 - - thumb_func_start sub_811CD14 -sub_811CD14: @ 811CD14 - push {r4,r5,lr} - adds r5, r0, 0 - bl sub_811D658 - bl dp12_8087EA4 - ldr r1, _0811CD88 @ =0x0200c000 - movs r2, 0 - movs r0, 0xBF - strh r0, [r1, 0xE] - strh r2, [r1, 0x12] - movs r0, 0x1E - strh r0, [r1, 0x2] - movs r0, 0x3F - strh r0, [r1, 0x4] - movs r0, 0xA0 - strh r0, [r1, 0x8] - movs r1, 0 - ldr r2, _0811CD8C @ =gUnknown_03005560 - movs r4, 0 - movs r3, 0xF0 -_0811CD3E: - lsls r0, r1, 1 - adds r0, r2 - strh r4, [r0] - adds r0, r1, 0 - adds r0, 0xA0 - lsls r0, 1 - adds r0, r2 - strh r3, [r0] - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0x9F - bls _0811CD3E - ldr r2, _0811CD90 @ =0x04000200 - ldrh r0, [r2] - movs r1, 0x2 - orrs r0, r1 - strh r0, [r2] - ldr r2, _0811CD94 @ =REG_DISPSTAT - ldrh r0, [r2] - movs r1, 0x10 - orrs r0, r1 - strh r0, [r2] - ldr r0, _0811CD98 @ =sub_811CFAC - bl SetHBlankCallback - ldr r0, _0811CD9C @ =sub_811CEE4 - bl SetVBlankCallback - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0811CD88: .4byte 0x0200c000 -_0811CD8C: .4byte gUnknown_03005560 -_0811CD90: .4byte 0x04000200 -_0811CD94: .4byte REG_DISPSTAT -_0811CD98: .4byte sub_811CFAC -_0811CD9C: .4byte sub_811CEE4 - thumb_func_end sub_811CD14 - - thumb_func_start sub_811CDA0 -sub_811CDA0: @ 811CDA0 - push {r4-r6,lr} - sub sp, 0x10 - adds r6, r0, 0 - ldr r1, _0811CE08 @ =gUnknown_083FD8C4 - mov r0, sp - movs r2, 0x10 - bl memcpy - movs r5, 0 - movs r4, 0 -_0811CDB4: - ldr r0, _0811CE0C @ =sub_811CFD0 - bl CreateInvisibleSprite - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _0811CE10 @ =gSprites - adds r2, r1, r0 - movs r0, 0xF0 - strh r0, [r2, 0x20] - strh r4, [r2, 0x22] - lsls r1, r5, 16 - asrs r1, 16 - lsls r0, r1, 1 - add r0, sp - ldrh r0, [r0] - strh r0, [r2, 0x38] - adds r1, 0x1 - lsls r1, 16 - lsls r0, r4, 16 - movs r3, 0xA0 - lsls r3, 13 - adds r0, r3 - lsrs r4, r0, 16 - lsrs r5, r1, 16 - asrs r1, 16 - cmp r1, 0x7 - ble _0811CDB4 - ldrh r0, [r2, 0x3A] - adds r0, 0x1 - strh r0, [r2, 0x3A] - ldrh r0, [r6, 0x8] - adds r0, 0x1 - strh r0, [r6, 0x8] - movs r0, 0 - add sp, 0x10 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0811CE08: .4byte gUnknown_083FD8C4 -_0811CE0C: .4byte sub_811CFD0 -_0811CE10: .4byte gSprites - thumb_func_end sub_811CDA0 - - thumb_func_start sub_811CE14 -sub_811CE14: @ 811CE14 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _0811CE44 @ =0x0200c000 - ldrb r1, [r0] - movs r1, 0 - strb r1, [r0] - movs r1, 0x20 - ldrsh r0, [r0, r1] - cmp r0, 0x7 - ble _0811CE3A - movs r0, 0x1 - negs r0, r0 - ldr r2, _0811CE48 @ =0x00007fff - movs r1, 0x10 - bl BlendPalettes - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_0811CE3A: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0811CE44: .4byte 0x0200c000 -_0811CE48: .4byte 0x00007fff - thumb_func_end sub_811CE14 - - thumb_func_start sub_811CE4C -sub_811CE4C: @ 811CE4C - push {r4-r6,lr} - adds r6, r0, 0 - ldr r4, _0811CE9C @ =0x0200c000 - ldrb r0, [r4] - movs r5, 0 - strb r5, [r4] - ldr r1, _0811CEA0 @ =0x040000b0 - ldrh r2, [r1, 0xA] - ldr r0, _0811CEA4 @ =0x0000c5ff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r2, [r1, 0xA] - ldr r0, _0811CEA8 @ =0x00007fff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r0, [r1, 0xA] - movs r0, 0 - bl SetVBlankCallback - movs r0, 0 - bl SetHBlankCallback - movs r0, 0xF0 - strh r0, [r4, 0x6] - strh r5, [r4, 0x12] - movs r0, 0xFF - strh r0, [r4, 0xE] - movs r0, 0x3F - strh r0, [r4, 0x2] - ldr r0, _0811CEAC @ =sub_811CF74 - bl SetVBlankCallback - ldrh r0, [r6, 0x8] - adds r0, 0x1 - strh r0, [r6, 0x8] - movs r0, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0811CE9C: .4byte 0x0200c000 -_0811CEA0: .4byte 0x040000b0 -_0811CEA4: .4byte 0x0000c5ff -_0811CEA8: .4byte 0x00007fff -_0811CEAC: .4byte sub_811CF74 - thumb_func_end sub_811CE4C - - thumb_func_start sub_811CEB0 -sub_811CEB0: @ 811CEB0 - push {lr} - ldr r1, _0811CEDC @ =0x0200c000 - ldrh r0, [r1, 0x12] - adds r0, 0x1 - strh r0, [r1, 0x12] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x10 - bls _0811CED4 - bl sub_811D6D4 - ldr r0, _0811CEE0 @ =Phase2Task_Transition9 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_0811CED4: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_0811CEDC: .4byte 0x0200c000 -_0811CEE0: .4byte Phase2Task_Transition9 - thumb_func_end sub_811CEB0 - - thumb_func_start sub_811CEE4 -sub_811CEE4: @ 811CEE4 - push {r4,lr} - ldr r4, _0811CF48 @ =0x040000b0 - ldrh r1, [r4, 0xA] - ldr r0, _0811CF4C @ =0x0000c5ff - ands r0, r1 - strh r0, [r4, 0xA] - ldrh r1, [r4, 0xA] - ldr r0, _0811CF50 @ =0x00007fff - ands r0, r1 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0xA] - bl VBlankCB_BattleTransition - ldr r2, _0811CF54 @ =REG_BLDCNT - ldr r1, _0811CF58 @ =0x0200c000 - ldrh r0, [r1, 0xE] - strh r0, [r2] - subs r2, 0x8 - ldrh r0, [r1, 0x2] - strh r0, [r2] - adds r2, 0x2 - ldrh r0, [r1, 0x4] - strh r0, [r2] - subs r2, 0x6 - ldrh r0, [r1, 0x6] - strh r0, [r2] - ldrb r0, [r1] - cmp r0, 0 - beq _0811CF32 - ldr r1, _0811CF5C @ =0x040000d4 - ldr r0, _0811CF60 @ =gUnknown_03004DE0 - str r0, [r1] - movs r2, 0xF0 - lsls r2, 3 - adds r0, r2 - str r0, [r1, 0x4] - ldr r0, _0811CF64 @ =0x80000140 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] -_0811CF32: - ldr r0, _0811CF68 @ =gUnknown_030056A0 - str r0, [r4] - ldr r0, _0811CF6C @ =REG_WIN0H - str r0, [r4, 0x4] - ldr r0, _0811CF70 @ =0xa2400001 - str r0, [r4, 0x8] - ldr r0, [r4, 0x8] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0811CF48: .4byte 0x040000b0 -_0811CF4C: .4byte 0x0000c5ff -_0811CF50: .4byte 0x00007fff -_0811CF54: .4byte REG_BLDCNT -_0811CF58: .4byte 0x0200c000 -_0811CF5C: .4byte 0x040000d4 -_0811CF60: .4byte gUnknown_03004DE0 -_0811CF64: .4byte 0x80000140 -_0811CF68: .4byte gUnknown_030056A0 -_0811CF6C: .4byte REG_WIN0H -_0811CF70: .4byte 0xa2400001 - thumb_func_end sub_811CEE4 - - thumb_func_start sub_811CF74 -sub_811CF74: @ 811CF74 - push {lr} - bl VBlankCB_BattleTransition - ldr r1, _0811CFA4 @ =REG_BLDY - ldr r2, _0811CFA8 @ =0x0200c000 - ldrh r0, [r2, 0x12] - strh r0, [r1] - subs r1, 0x4 - ldrh r0, [r2, 0xE] - strh r0, [r1] - subs r1, 0x8 - ldrh r0, [r2, 0x2] - strh r0, [r1] - adds r1, 0x2 - ldrh r0, [r2, 0x4] - strh r0, [r1] - subs r1, 0xA - ldrh r0, [r2, 0x6] - strh r0, [r1] - adds r1, 0x4 - ldrh r0, [r2, 0x8] - strh r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_0811CFA4: .4byte REG_BLDY -_0811CFA8: .4byte 0x0200c000 - thumb_func_end sub_811CF74 - - thumb_func_start sub_811CFAC -sub_811CFAC: @ 811CFAC - ldr r2, _0811CFC4 @ =REG_BLDY - ldr r1, _0811CFC8 @ =gUnknown_03004DE0 - ldr r0, _0811CFCC @ =REG_VCOUNT - ldrh r0, [r0] - lsls r0, 1 - movs r3, 0xF0 - lsls r3, 3 - adds r1, r3 - adds r0, r1 - ldrh r0, [r0] - strh r0, [r2] - bx lr - .align 2, 0 -_0811CFC4: .4byte REG_BLDY -_0811CFC8: .4byte gUnknown_03004DE0 -_0811CFCC: .4byte REG_VCOUNT - thumb_func_end sub_811CFAC - - thumb_func_start sub_811CFD0 -sub_811CFD0: @ 811CFD0 - push {r4-r6,lr} - adds r3, r0, 0 - ldrh r1, [r3, 0x38] - movs r2, 0x38 - ldrsh r0, [r3, r2] - cmp r0, 0 - beq _0811CFF8 - subs r0, r1, 0x1 - strh r0, [r3, 0x38] - movs r1, 0x3A - ldrsh r0, [r3, r1] - cmp r0, 0 - beq _0811D0AA - ldr r0, _0811CFF4 @ =0x0200c000 - ldrb r1, [r0] - movs r1, 0x1 - strb r1, [r0] - b _0811D0AA - .align 2, 0 -_0811CFF4: .4byte 0x0200c000 -_0811CFF8: - movs r2, 0x22 - ldrsh r1, [r3, r2] - lsls r1, 1 - ldr r0, _0811D0B0 @ =gUnknown_03004DE0 - adds r6, r1, r0 - movs r2, 0xA0 - lsls r2, 1 - adds r0, r2 - adds r5, r1, r0 - movs r4, 0 -_0811D00C: - lsls r1, r4, 1 - adds r2, r1, r6 - ldrh r0, [r3, 0x2E] - lsls r0, 16 - asrs r0, 24 - strh r0, [r2] - adds r1, r5 - ldrh r0, [r3, 0x20] - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1] - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x13 - bls _0811D00C - movs r1, 0x20 - ldrsh r0, [r3, r1] - ldrh r2, [r3, 0x20] - cmp r0, 0 - bne _0811D046 - movs r0, 0x2E - ldrsh r1, [r3, r0] - movs r0, 0x80 - lsls r0, 5 - cmp r1, r0 - bne _0811D046 - movs r0, 0x1 - strh r0, [r3, 0x30] -_0811D046: - adds r1, r2, 0 - subs r1, 0x10 - strh r1, [r3, 0x20] - ldrh r0, [r3, 0x2E] - adds r0, 0x80 - strh r0, [r3, 0x2E] - lsls r1, 16 - cmp r1, 0 - bge _0811D05C - movs r0, 0 - strh r0, [r3, 0x20] -_0811D05C: - movs r1, 0x2E - ldrsh r0, [r3, r1] - movs r1, 0x80 - lsls r1, 5 - cmp r0, r1 - ble _0811D06A - strh r1, [r3, 0x2E] -_0811D06A: - movs r0, 0x3A - ldrsh r2, [r3, r0] - cmp r2, 0 - beq _0811D07A - ldr r0, _0811D0B4 @ =0x0200c000 - ldrb r1, [r0] - movs r1, 0x1 - strb r1, [r0] -_0811D07A: - movs r1, 0x30 - ldrsh r0, [r3, r1] - cmp r0, 0 - beq _0811D0AA - ldr r4, _0811D0B4 @ =0x0200c000 - cmp r2, 0 - beq _0811D09E - movs r2, 0x20 - ldrsh r0, [r4, r2] - cmp r0, 0x6 - ble _0811D0AA - ldrh r0, [r3, 0x32] - adds r1, r0, 0x1 - strh r1, [r3, 0x32] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x7 - ble _0811D0AA -_0811D09E: - ldrh r0, [r4, 0x20] - adds r0, 0x1 - strh r0, [r4, 0x20] - adds r0, r3, 0 - bl DestroySprite -_0811D0AA: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0811D0B0: .4byte gUnknown_03004DE0 -_0811D0B4: .4byte 0x0200c000 - thumb_func_end sub_811CFD0 - - thumb_func_start Phase2Task_Transition10 -Phase2Task_Transition10: @ 811D0B8 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _0811D0E8 @ =gUnknown_083FD8D4 - ldr r2, _0811D0EC @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_0811D0CA: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _0811D0CA - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0811D0E8: .4byte gUnknown_083FD8D4 -_0811D0EC: .4byte gTasks - thumb_func_end Phase2Task_Transition10 - - thumb_func_start sub_811D0F0 -sub_811D0F0: @ 811D0F0 - push {r4,lr} - sub sp, 0xC - adds r4, r0, 0 - add r0, sp, 0x4 - add r1, sp, 0x8 - bl sub_811D6A8 - ldr r0, _0811D138 @ =gUnknown_083FD528 - ldr r1, [sp, 0x8] - movs r2, 0x10 - bl CpuSet - mov r1, sp - movs r2, 0xF0 - lsls r2, 8 - adds r0, r2, 0 - strh r0, [r1] - ldr r1, [sp, 0x4] - ldr r2, _0811D13C @ =0x01000400 - mov r0, sp - bl CpuSet - ldr r0, _0811D140 @ =gFieldEffectObjectPalette10 - movs r1, 0xF0 - movs r2, 0x20 - bl LoadPalette - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0 - add sp, 0xC - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0811D138: .4byte gUnknown_083FD528 -_0811D13C: .4byte 0x01000400 -_0811D140: .4byte gFieldEffectObjectPalette10 - thumb_func_end sub_811D0F0 - - thumb_func_start sub_811D144 -sub_811D144: @ 811D144 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - movs r1, 0xA - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _0811D186 - mov r0, sp - bl sub_811D690 - movs r0, 0x3 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - movs r1, 0xC - ldrsh r0, [r4, r1] - lsls r0, 5 - ldr r1, _0811D198 @ =gUnknown_083FD528 - adds r0, r1 - ldr r1, [sp] - movs r2, 0x10 - bl CpuSet - movs r1, 0xC - ldrsh r0, [r4, r1] - cmp r0, 0xD - ble _0811D186 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0x10 - strh r0, [r4, 0xA] -_0811D186: - ldrh r0, [r4, 0xA] - subs r0, 0x1 - strh r0, [r4, 0xA] - movs r0, 0 - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0811D198: .4byte gUnknown_083FD528 - thumb_func_end sub_811D144 - - thumb_func_start sub_811D19C -sub_811D19C: @ 811D19C - push {lr} - ldrh r1, [r0, 0xA] - subs r1, 0x1 - strh r1, [r0, 0xA] - lsls r1, 16 - cmp r1, 0 - bne _0811D1BC - bl sub_811D6D4 - ldr r0, _0811D1C4 @ =Phase2Task_Transition10 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_0811D1BC: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_0811D1C4: .4byte Phase2Task_Transition10 - thumb_func_end sub_811D19C - - thumb_func_start Phase2Task_Transition11 -Phase2Task_Transition11: @ 811D1C8 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _0811D1F8 @ =gUnknown_083FD8E0 - ldr r2, _0811D1FC @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_0811D1DA: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _0811D1DA - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0811D1F8: .4byte gUnknown_083FD8E0 -_0811D1FC: .4byte gTasks - thumb_func_end Phase2Task_Transition11 - - thumb_func_start sub_811D200 -sub_811D200: @ 811D200 - push {r4,r5,lr} - adds r5, r0, 0 - bl sub_811D658 - bl dp12_8087EA4 - ldr r1, _0811D254 @ =0x0200c000 - movs r2, 0 - movs r0, 0x3F - strh r0, [r1, 0x2] - strh r2, [r1, 0x4] - movs r0, 0xA0 - strh r0, [r1, 0x8] - movs r1, 0 - ldr r2, _0811D258 @ =gUnknown_03004DE0 - movs r3, 0xF0 - adds r4, r2, 0 -_0811D222: - lsls r0, r1, 1 - adds r0, r2 - strh r3, [r0] - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0x9F - bls _0811D222 - movs r0, 0xF0 - lsls r0, 3 - adds r1, r4, r0 - adds r0, r4, 0 - movs r2, 0xA0 - bl CpuSet - ldr r0, _0811D25C @ =sub_811D438 - bl SetVBlankCallback - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - movs r0, 0x1 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0811D254: .4byte 0x0200c000 -_0811D258: .4byte gUnknown_03004DE0 -_0811D25C: .4byte sub_811D438 - thumb_func_end sub_811D200 - - thumb_func_start sub_811D260 -sub_811D260: @ 811D260 - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0xC - mov r8, r0 - ldr r0, _0811D2D0 @ =0x0200c024 - ldr r6, _0811D2D4 @ =gUnknown_083FD8F4 - mov r2, r8 - movs r3, 0xA - ldrsh r1, [r2, r3] - lsls r4, r1, 2 - adds r4, r1 - lsls r4, 1 - adds r1, r4, r6 - movs r5, 0 - ldrsh r1, [r1, r5] - adds r2, r6, 0x2 - adds r2, r4, r2 - movs r3, 0 - ldrsh r2, [r2, r3] - adds r3, r6, 0x4 - adds r3, r4, r3 - movs r5, 0 - ldrsh r3, [r3, r5] - adds r5, r6, 0x6 - adds r4, r5 - movs r5, 0 - ldrsh r4, [r4, r5] - str r4, [sp] - movs r4, 0x1 - str r4, [sp, 0x4] - str r4, [sp, 0x8] - bl sub_811D8FC - mov r0, r8 - movs r2, 0xA - ldrsh r1, [r0, r2] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 1 - adds r6, 0x8 - adds r0, r6 - ldrh r0, [r0] - mov r3, r8 - strh r0, [r3, 0xC] - ldrh r0, [r3, 0x8] - adds r0, 0x1 - strh r0, [r3, 0x8] - movs r0, 0x1 - add sp, 0xC - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0811D2D0: .4byte 0x0200c024 -_0811D2D4: .4byte gUnknown_083FD8F4 - thumb_func_end sub_811D260 - - thumb_func_start sub_811D2D8 -sub_811D2D8: @ 811D2D8 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r7, r0, 0 - ldr r0, _0811D324 @ =0x0200c000 - ldrb r1, [r0] - movs r1, 0 - strb r1, [r0] - mov r8, r1 - mov r12, r1 - adds r6, r0, 0 - ldr r0, _0811D328 @ =gUnknown_03004DE0 - mov r9, r0 -_0811D2F4: - ldr r1, _0811D328 @ =gUnknown_03004DE0 - movs r2, 0x2A - ldrsh r0, [r6, r2] - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - lsrs r3, r0, 8 - movs r4, 0xFF - ands r4, r0 - movs r1, 0xC - ldrsh r0, [r7, r1] - cmp r0, 0 - bne _0811D32C - movs r2, 0x28 - ldrsh r0, [r6, r2] - cmp r3, r0 - bge _0811D318 - ldrh r3, [r6, 0x28] -_0811D318: - lsls r0, r3, 16 - lsls r1, r4, 16 - cmp r0, r1 - ble _0811D344 - lsrs r3, r1, 16 - b _0811D344 - .align 2, 0 -_0811D324: .4byte 0x0200c000 -_0811D328: .4byte gUnknown_03004DE0 -_0811D32C: - lsls r0, r4, 16 - asrs r0, 16 - movs r2, 0x28 - ldrsh r1, [r6, r2] - cmp r0, r1 - ble _0811D33A - ldrh r4, [r6, 0x28] -_0811D33A: - lsls r0, r4, 16 - lsls r1, r3, 16 - cmp r0, r1 - bgt _0811D344 - lsrs r4, r1, 16 -_0811D344: - ldr r5, _0811D368 @ =0x0200c000 - movs r0, 0x2A - ldrsh r2, [r5, r0] - lsls r2, 1 - add r2, r9 - lsls r1, r3, 16 - asrs r1, 8 - lsls r0, r4, 16 - asrs r0, 16 - orrs r0, r1 - strh r0, [r2] - mov r1, r12 - cmp r1, 0 - beq _0811D36C - ldrh r0, [r7, 0x8] - adds r0, 0x1 - strh r0, [r7, 0x8] - b _0811D392 - .align 2, 0 -_0811D368: .4byte 0x0200c000 -_0811D36C: - adds r0, r5, 0 - adds r0, 0x24 - movs r1, 0x1 - movs r2, 0x1 - bl sub_811D978 - lsls r0, 24 - lsrs r0, 24 - mov r12, r0 - mov r2, r8 - lsls r0, r2, 16 - movs r1, 0x80 - lsls r1, 9 - adds r0, r1 - lsrs r2, r0, 16 - mov r8, r2 - asrs r0, 16 - cmp r0, 0xF - ble _0811D2F4 -_0811D392: - ldr r0, _0811D3AC @ =0x0200c000 - ldrb r1, [r0] - adds r1, 0x1 - ldrb r2, [r0] - strb r1, [r0] - movs r0, 0 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0811D3AC: .4byte 0x0200c000 - thumb_func_end sub_811D2D8 - - thumb_func_start sub_811D3B0 -sub_811D3B0: @ 811D3B0 - push {lr} - adds r2, r0, 0 - ldrh r0, [r2, 0xA] - adds r0, 0x1 - strh r0, [r2, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x6 - ble _0811D3FC - ldr r1, _0811D3EC @ =0x040000b0 - ldrh r2, [r1, 0xA] - ldr r0, _0811D3F0 @ =0x0000c5ff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r2, [r1, 0xA] - ldr r0, _0811D3F4 @ =0x00007fff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r0, [r1, 0xA] - bl sub_811D6D4 - ldr r0, _0811D3F8 @ =Phase2Task_Transition11 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - movs r0, 0 - b _0811D414 - .align 2, 0 -_0811D3EC: .4byte 0x040000b0 -_0811D3F0: .4byte 0x0000c5ff -_0811D3F4: .4byte 0x00007fff -_0811D3F8: .4byte Phase2Task_Transition11 -_0811D3FC: - ldrh r0, [r2, 0x8] - adds r0, 0x1 - strh r0, [r2, 0x8] - ldr r1, _0811D418 @ =gUnknown_083FD93A - movs r3, 0xA - ldrsh r0, [r2, r3] - subs r0, 0x1 - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - strh r0, [r2, 0xE] - movs r0, 0x1 -_0811D414: - pop {r1} - bx r1 - .align 2, 0 -_0811D418: .4byte gUnknown_083FD93A - thumb_func_end sub_811D3B0 - - thumb_func_start sub_811D41C -sub_811D41C: @ 811D41C - push {lr} - adds r1, r0, 0 - ldrh r0, [r1, 0xE] - subs r0, 0x1 - strh r0, [r1, 0xE] - lsls r0, 16 - cmp r0, 0 - beq _0811D430 - movs r0, 0 - b _0811D434 -_0811D430: - movs r0, 0x1 - strh r0, [r1, 0x8] -_0811D434: - pop {r1} - bx r1 - thumb_func_end sub_811D41C - - thumb_func_start sub_811D438 -sub_811D438: @ 811D438 - push {r4,lr} - ldr r4, _0811D4A0 @ =0x040000b0 - ldrh r1, [r4, 0xA] - ldr r0, _0811D4A4 @ =0x0000c5ff - ands r0, r1 - strh r0, [r4, 0xA] - ldrh r1, [r4, 0xA] - ldr r0, _0811D4A8 @ =0x00007fff - ands r0, r1 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0xA] - bl VBlankCB_BattleTransition - ldr r2, _0811D4AC @ =0x0200c000 - ldrb r0, [r2] - cmp r0, 0 - beq _0811D46E - ldr r1, _0811D4B0 @ =0x040000d4 - ldr r0, _0811D4B4 @ =gUnknown_03004DE0 - str r0, [r1] - movs r3, 0xF0 - lsls r3, 3 - adds r0, r3 - str r0, [r1, 0x4] - ldr r0, _0811D4B8 @ =0x800000a0 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] -_0811D46E: - ldr r1, _0811D4BC @ =REG_WININ - ldrh r0, [r2, 0x2] - strh r0, [r1] - adds r1, 0x2 - ldrh r0, [r2, 0x4] - strh r0, [r1] - subs r1, 0x6 - ldrh r0, [r2, 0x8] - strh r0, [r1] - ldr r2, _0811D4C0 @ =REG_WIN0H - ldr r0, _0811D4B4 @ =gUnknown_03004DE0 - movs r1, 0xF0 - lsls r1, 3 - adds r0, r1 - ldrh r1, [r0] - strh r1, [r2] - str r0, [r4] - str r2, [r4, 0x4] - ldr r0, _0811D4C4 @ =0xa2400001 - str r0, [r4, 0x8] - ldr r0, [r4, 0x8] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0811D4A0: .4byte 0x040000b0 -_0811D4A4: .4byte 0x0000c5ff -_0811D4A8: .4byte 0x00007fff -_0811D4AC: .4byte 0x0200c000 -_0811D4B0: .4byte 0x040000d4 -_0811D4B4: .4byte gUnknown_03004DE0 -_0811D4B8: .4byte 0x800000a0 -_0811D4BC: .4byte REG_WININ -_0811D4C0: .4byte REG_WIN0H -_0811D4C4: .4byte 0xa2400001 - thumb_func_end sub_811D438 - thumb_func_start sub_811D4C8 sub_811D4C8: @ 811D4C8 push {r4-r6,lr} diff --git a/data/battle_transition.s b/data/battle_transition.s index 95f5c4737..e15d03dd6 100644 --- a/data/battle_transition.s +++ b/data/battle_transition.s @@ -134,12 +134,12 @@ sPhase2_Transition8_Funcs:: @ 83FD8A4 .4byte Phase2_Transition8_Func3 .align 2 -gUnknown_083FD8B0:: @ 83FD8B0 - .4byte sub_811CD14 - .4byte sub_811CDA0 - .4byte sub_811CE14 - .4byte sub_811CE4C - .4byte sub_811CEB0 +sPhase2_Transition9_Funcs:: @ 83FD8B0 + .4byte Phase2_Transition9_Func1 + .4byte Phase2_Transition9_Func2 + .4byte Phase2_Transition9_Func3 + .4byte Phase2_Transition9_Func4 + .4byte Phase2_Transition9_Func5 .align 1 gUnknown_083FD8C4:: @ 83FD8C4 @@ -153,18 +153,18 @@ gUnknown_083FD8C4:: @ 83FD8C4 .2byte 5 .align 2 -gUnknown_083FD8D4:: @ 83FD8D4 - .4byte sub_811D0F0 - .4byte sub_811D144 - .4byte sub_811D19C +sPhase2_Transition10_Funcs:: @ 83FD8D4 + .4byte Phase2_Transition10_Func1 + .4byte Phase2_Transition10_Func2 + .4byte Phase2_Transition10_Func3 .align 2 -gUnknown_083FD8E0:: @ 83FD8E0 - .4byte sub_811D200 - .4byte sub_811D260 - .4byte sub_811D2D8 - .4byte sub_811D3B0 - .4byte sub_811D41C +sPhase2_Transition11_Funcs:: @ 83FD8E0 + .4byte Phase2_Transition11_Func1 + .4byte Phase2_Transition11_Func2 + .4byte Phase2_Transition11_Func3 + .4byte Phase2_Transition11_Func4 + .4byte Phase2_Transition11_Func5 .align 1 gUnknown_083FD8F4:: @ 83FD8F4 diff --git a/src/battle_transition.c b/src/battle_transition.c index 9ef012bb2..ae2e26d21 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -20,17 +20,16 @@ extern u16 gUnknown_03004DE0[][0x3C0]; struct TransitionData { - vs8 field_0; // now that's interesting - s8 field_1; - s16 WININ; - s16 WINOUT; - s16 field_6; - s16 WIN0V; - s16 field_A; - s16 field_C; - s16 BLDCNT; - s16 BLDALPHA; - s16 field_12; + vs8 VBlank_DMA; + u16 WININ; + u16 WINOUT; + u16 field_6; + u16 WIN0V; + u16 field_A; + u16 field_C; + u16 BLDCNT; + u16 BLDALPHA; + u16 field_12; s16 field_14; s16 field_16; s16 field_18; @@ -65,10 +64,10 @@ static void Phase2Task_Transition4(u8 taskID); static void Phase2Task_Transition5(u8 taskID); static void Phase2Task_Transition6(u8 taskID); static void Phase2Task_Transition7(u8 taskID); - void Phase2Task_Transition8(u8 taskID); - void Phase2Task_Transition9(u8 taskID); - void Phase2Task_Transition10(u8 taskID); - void Phase2Task_Transition11(u8 taskID); +static void Phase2Task_Transition8(u8 taskID); +static void Phase2Task_Transition9(u8 taskID); +static void Phase2Task_Transition10(u8 taskID); +static void Phase2Task_Transition11(u8 taskID); static void Phase2Task_Transition_Sydney(u8 taskID); static void Phase2Task_Transition_Phoebe(u8 taskID); static void Phase2Task_Transition_Glacia(u8 taskID); @@ -78,30 +77,30 @@ static bool8 Transition_Phase1(struct Task* task); static bool8 Transition_WaitForPhase1(struct Task* task); static bool8 Transition_Phase2(struct Task* task); static bool8 Transition_WaitForPhase2(struct Task* task); - static void VBlankCB_Phase2_Transition1(void); static void HBlankCB_Phase2_Transition1(void); - static void VBlankCB_Phase2_Transition2(void); static void HBlankCB_Phase2_Transition2(void); - static void VBlankCB0_Phase2_Transition3(void); static void VBlankCB1_Phase2_Transition3(void); - static void VBlankCB_Phase2_Transition5(void); - static void VBlankCB_Phase2_Transition6(void); static void HBlankCB_Phase2_Transition6(void); - static void VBlankCB_Phase2_Transition7(void); - +static void VBlankCB_Phase2_Transition8(void); +static void HBlankCB_Phase2_Transition8(void); +static void VBlankCB0_Phase2_Transition9(void); +static void VBlankCB1_Phase2_Transition9(void); +static void HBlankCB_Phase2_Transition9(void); static void VBlankCB0_Phase2_Mugshots(void); static void VBlankCB1_Phase2_Mugshots(void); static void HBlankCB_Phase2_Mugshots(void); +static void VBlankCB_Phase2_Transition11(void); void VBlankCB_BattleTransition(void); void sub_811D6E8(s16* a0, s16 a1, s16 a2, s16 a3, s16 a4, s16 a5); void sub_811D6A8(u16** a0, u16** a1); +void sub_811D690(u16** a0); void sub_811D764(u16* a0, s16 a1, s16 a2, s16 a3); void sub_811D6D4(void); void sub_811D8FC(s16* a0, s16 a1, s16 a2, s16 a3, s16 a4, s16 a5, s16 a6); @@ -111,6 +110,7 @@ static void Mugshots_CreateOpponentPlayerSprites(struct Task* task); static void sub_811CA10(s16 spriteID, s16 value); static void sub_811CA28(s16 spriteID); static s16 sub_811CA44(s16 spriteID); +void sub_811CFD0(struct Sprite* sprite); // const data typedef bool8 (*TransitionState)(struct Task* task); @@ -125,6 +125,9 @@ extern const TransitionState sPhase2_Transition5_Funcs[]; extern const TransitionState sPhase2_Transition6_Funcs[]; extern const TransitionState sPhase2_Transition7_Funcs[]; extern const TransitionState sPhase2_Transition8_Funcs[]; +extern const TransitionState sPhase2_Transition9_Funcs[]; +extern const TransitionState sPhase2_Transition10_Funcs[]; +extern const TransitionState sPhase2_Transition11_Funcs[]; extern const TransitionState sPhase2_Mugshot_Transition_Funcs[]; extern const u16 gFieldEffectObjectPalette10[]; extern const u16 gUnknown_083FDB44[]; @@ -349,7 +352,7 @@ bool8 Phase2_Transition1_Func1(struct Task* task) bool8 Phase2_Transition1_Func2(struct Task* task) { - TRANSITION_STRUCT.field_0 = 0; + TRANSITION_STRUCT.VBlank_DMA = 0; task->data[1] += 4; task->data[2] += 8; @@ -361,14 +364,14 @@ bool8 Phase2_Transition1_Func2(struct Task* task) DestroyTask(taskID); } - TRANSITION_STRUCT.field_0++; + TRANSITION_STRUCT.VBlank_DMA++; return 0; } static void VBlankCB_Phase2_Transition1(void) { VBlankCB_BattleTransition(); - if (TRANSITION_STRUCT.field_0) + if (TRANSITION_STRUCT.VBlank_DMA) DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320); } @@ -413,7 +416,7 @@ bool8 Phase2_Transition2_Func2(struct Task* task) u8 i; u16 r3, r4; - TRANSITION_STRUCT.field_0 = 0; + TRANSITION_STRUCT.VBlank_DMA = 0; r4 = task->data[1]; r3 = task->data[2] >> 8; task->data[1] += 4224; @@ -428,14 +431,14 @@ bool8 Phase2_Transition2_Func2(struct Task* task) if (!gPaletteFade.active) DestroyTask(FindTaskIdByFunc(Phase2Task_Transition2)); - TRANSITION_STRUCT.field_0++; + TRANSITION_STRUCT.VBlank_DMA++; return 0; } static void VBlankCB_Phase2_Transition2(void) { VBlankCB_BattleTransition(); - if (TRANSITION_STRUCT.field_0) + if (TRANSITION_STRUCT.VBlank_DMA) DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320); } @@ -510,7 +513,7 @@ bool8 Phase2_Transition3_Func2(struct Task* task) bool8 Phase2_Transition3_Func3(struct Task* task) { - TRANSITION_STRUCT.field_0 = 0; + TRANSITION_STRUCT.VBlank_DMA = 0; if (task->data[3] == 0 || --task->data[3] == 0) { task->data[2]++; @@ -524,13 +527,13 @@ bool8 Phase2_Transition3_Func3(struct Task* task) sub_811D6E8(gUnknown_03004DE0[0], 0, task->data[4], 132, task->data[5] >> 8, 160); - TRANSITION_STRUCT.field_0++; + TRANSITION_STRUCT.VBlank_DMA++; return 0; } bool8 Phase2_Transition3_Func4(struct Task* task) { - TRANSITION_STRUCT.field_0 = 0; + TRANSITION_STRUCT.VBlank_DMA = 0; if (task->data[3] == 0 || --task->data[3] == 0) { task->data[1]--; @@ -544,13 +547,13 @@ bool8 Phase2_Transition3_Func4(struct Task* task) sub_811D6E8(gUnknown_03004DE0[0], 0, task->data[4], 132, task->data[5] >> 8, 160); - TRANSITION_STRUCT.field_0++; + TRANSITION_STRUCT.VBlank_DMA++; return 0; } bool8 Phase2_Transition3_Func5(struct Task* task) { - TRANSITION_STRUCT.field_0 = 0; + TRANSITION_STRUCT.VBlank_DMA = 0; task->data[4] += 8; task->data[5] -= 256; @@ -564,13 +567,13 @@ bool8 Phase2_Transition3_Func5(struct Task* task) task->data[3] = 0; } - TRANSITION_STRUCT.field_0++; + TRANSITION_STRUCT.VBlank_DMA++; return 0; } bool8 Phase2_Transition3_Func6(struct Task* task) { - TRANSITION_STRUCT.field_0 = 0; + TRANSITION_STRUCT.VBlank_DMA = 0; if (task->data[2] < 1024) task->data[2] += 128; if (task->data[1] != 0) @@ -592,7 +595,7 @@ bool8 Phase2_Transition3_Func6(struct Task* task) SetVBlankCallback(VBlankCB1_Phase2_Transition3); } - TRANSITION_STRUCT.field_0++; + TRANSITION_STRUCT.VBlank_DMA++; return 0; } @@ -600,7 +603,7 @@ static void Transition3_Vblank(void) { DmaStop(0); VBlankCB_BattleTransition(); - if (TRANSITION_STRUCT.field_0) + if (TRANSITION_STRUCT.VBlank_DMA) DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320); REG_WININ = TRANSITION_STRUCT.WININ; REG_WINOUT = TRANSITION_STRUCT.WINOUT; @@ -757,7 +760,7 @@ bool8 Phase2_Transition5_Func1(struct Task* task) bool8 Phase2_Transition5_Func2(struct Task* task) { - TRANSITION_STRUCT.field_0 = 0; + TRANSITION_STRUCT.VBlank_DMA = 0; sub_811D8FC(&TRANSITION_STRUCT.field_24, 120, 80, TRANSITION_STRUCT.field_2C, -1, 1, 1); do @@ -772,7 +775,7 @@ bool8 Phase2_Transition5_Func2(struct Task* task) task->tState++; } - TRANSITION_STRUCT.field_0++; + TRANSITION_STRUCT.VBlank_DMA++; return 0; } @@ -781,7 +784,7 @@ bool8 Phase2_Transition5_Func3(struct Task* task) s16 r1, r3; vu8 var = 0; - TRANSITION_STRUCT.field_0 = 0; + TRANSITION_STRUCT.VBlank_DMA = 0; sub_811D8FC(&TRANSITION_STRUCT.field_24, 120, 80, 240, TRANSITION_STRUCT.field_2E, 1, 1); @@ -810,13 +813,13 @@ bool8 Phase2_Transition5_Func3(struct Task* task) } } - TRANSITION_STRUCT.field_0++; + TRANSITION_STRUCT.VBlank_DMA++; return 0; } bool8 Phase2_Transition5_Func4(struct Task* task) { - TRANSITION_STRUCT.field_0 = 0; + TRANSITION_STRUCT.VBlank_DMA = 0; sub_811D8FC(&TRANSITION_STRUCT.field_24, 120, 80, TRANSITION_STRUCT.field_2C, 160, 1, 1); do @@ -831,7 +834,7 @@ bool8 Phase2_Transition5_Func4(struct Task* task) task->tState++; } - TRANSITION_STRUCT.field_0++; + TRANSITION_STRUCT.VBlank_DMA++; return 0; } @@ -840,7 +843,7 @@ bool8 Phase2_Transition5_Func5(struct Task* task) s16 r1, r2, r3; vu8 var = 0; - TRANSITION_STRUCT.field_0 = 0; + TRANSITION_STRUCT.VBlank_DMA = 0; sub_811D8FC(&TRANSITION_STRUCT.field_24, 120, 80, 0, TRANSITION_STRUCT.field_2E, 1, 1); @@ -870,13 +873,13 @@ bool8 Phase2_Transition5_Func5(struct Task* task) } } - TRANSITION_STRUCT.field_0++; + TRANSITION_STRUCT.VBlank_DMA++; return 0; } bool8 Phase2_Transition5_Func6(struct Task* task) { - TRANSITION_STRUCT.field_0 = 0; + TRANSITION_STRUCT.VBlank_DMA = 0; sub_811D8FC(&TRANSITION_STRUCT.field_24, 120, 80, TRANSITION_STRUCT.field_2C, 0, 1, 1); do @@ -894,7 +897,7 @@ bool8 Phase2_Transition5_Func6(struct Task* task) if (TRANSITION_STRUCT.field_28 > 120) task->tState++; - TRANSITION_STRUCT.field_0++; + TRANSITION_STRUCT.VBlank_DMA++; return 0; } @@ -910,7 +913,7 @@ static void VBlankCB_Phase2_Transition5(void) { DmaStop(0); VBlankCB_BattleTransition(); - if (TRANSITION_STRUCT.field_0 != 0) + if (TRANSITION_STRUCT.VBlank_DMA != 0) DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320); REG_WININ = TRANSITION_STRUCT.WININ; REG_WINOUT = TRANSITION_STRUCT.WINOUT; @@ -952,7 +955,7 @@ bool8 Phase2_Transition6_Func2(struct Task* task) s16 r3; u16 r4, r8; - TRANSITION_STRUCT.field_0 = 0; + TRANSITION_STRUCT.VBlank_DMA = 0; r3 = task->data[2] >> 8; r4 = task->data[1]; @@ -979,14 +982,14 @@ bool8 Phase2_Transition6_Func2(struct Task* task) if (task->data[4] != 0 && !gPaletteFade.active) DestroyTask(FindTaskIdByFunc(Phase2Task_Transition6)); - TRANSITION_STRUCT.field_0++; + TRANSITION_STRUCT.VBlank_DMA++; return 0; } static void VBlankCB_Phase2_Transition6(void) { VBlankCB_BattleTransition(); - if (TRANSITION_STRUCT.field_0) + if (TRANSITION_STRUCT.VBlank_DMA) DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320); } @@ -1032,7 +1035,7 @@ bool8 Phase2_Transition7_Func2(struct Task* task) u16* toStore; bool8 nextFunc; - TRANSITION_STRUCT.field_0 = 0; + TRANSITION_STRUCT.VBlank_DMA = 0; toStore = gUnknown_03004DE0[0]; r5 = task->data[2]; task->data[2] += 16; @@ -1052,7 +1055,7 @@ bool8 Phase2_Transition7_Func2(struct Task* task) if (nextFunc) task->tState++; - TRANSITION_STRUCT.field_0++; + TRANSITION_STRUCT.VBlank_DMA++; return 0; } @@ -1068,7 +1071,7 @@ static void VBlankCB_Phase2_Transition7(void) { DmaStop(0); VBlankCB_BattleTransition(); - if (TRANSITION_STRUCT.field_0 != 0) + if (TRANSITION_STRUCT.VBlank_DMA != 0) DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320); REG_WININ = TRANSITION_STRUCT.WININ; REG_WINOUT = TRANSITION_STRUCT.WINOUT; @@ -1175,7 +1178,7 @@ bool8 Phase2_Mugshot_Func3(struct Task* task) s16 value; s32 mergedValue; - TRANSITION_STRUCT.field_0 = 0; + TRANSITION_STRUCT.VBlank_DMA = 0; toStore = gUnknown_03004DE0[0]; r5 = task->data[1]; @@ -1212,7 +1215,7 @@ bool8 Phase2_Mugshot_Func3(struct Task* task) TRANSITION_STRUCT.field_18 -= 8; TRANSITION_STRUCT.field_1A += 8; - TRANSITION_STRUCT.field_0++; + TRANSITION_STRUCT.VBlank_DMA++; return 0; } @@ -1221,7 +1224,7 @@ bool8 Phase2_Mugshot_Func4(struct Task* task) u8 i; u16* toStore; - TRANSITION_STRUCT.field_0 = 0; + TRANSITION_STRUCT.VBlank_DMA = 0; for (i = 0, toStore = gUnknown_03004DE0[0]; i < 160; i++, toStore++) { @@ -1241,7 +1244,7 @@ bool8 Phase2_Mugshot_Func4(struct Task* task) PlaySE(SE_BT_START); - TRANSITION_STRUCT.field_0++; + TRANSITION_STRUCT.VBlank_DMA++; return 0; } @@ -1263,7 +1266,7 @@ bool8 Phase2_Mugshot_Func6(struct Task* task) TRANSITION_STRUCT.field_1A += 8; if (sub_811CA44(task->tMugshotPlayerID)) { - TRANSITION_STRUCT.field_0 = 0; + TRANSITION_STRUCT.VBlank_DMA = 0; SetVBlankCallback(NULL); DmaStop(0); memset(gUnknown_03004DE0[0], 0, 0x140); @@ -1283,7 +1286,7 @@ bool8 Phase2_Mugshot_Func7(struct Task* task) { bool32 r6; - TRANSITION_STRUCT.field_0 = 0; + TRANSITION_STRUCT.VBlank_DMA = 0; r6 = TRUE; TRANSITION_STRUCT.field_18 -= 8; TRANSITION_STRUCT.field_1A += 8; @@ -1316,13 +1319,13 @@ bool8 Phase2_Mugshot_Func7(struct Task* task) if (task->data[4] == 0x50 && !r6) task->tState++; - TRANSITION_STRUCT.field_0++; + TRANSITION_STRUCT.VBlank_DMA++; return 0; } bool8 Phase2_Mugshot_Func8(struct Task* task) { - TRANSITION_STRUCT.field_0 = 0; + TRANSITION_STRUCT.VBlank_DMA = 0; BlendPalettes(-1, 0x10, 0x7FFF); TRANSITION_STRUCT.BLDCNT = 0xFF; task->data[3] = 0; @@ -1333,14 +1336,14 @@ bool8 Phase2_Mugshot_Func8(struct Task* task) bool8 Phase2_Mugshot_Func9(struct Task* task) { - TRANSITION_STRUCT.field_0 = 0; + TRANSITION_STRUCT.VBlank_DMA = 0; task->data[3]++; memset(gUnknown_03004DE0[0], task->data[3], 0x140); if (task->data[3] > 15) task->tState++; - TRANSITION_STRUCT.field_0++; + TRANSITION_STRUCT.VBlank_DMA++; return 0; } @@ -1356,7 +1359,7 @@ static void VBlankCB0_Phase2_Mugshots(void) { DmaStop(0); VBlankCB_BattleTransition(); - if (TRANSITION_STRUCT.field_0 != 0) + if (TRANSITION_STRUCT.VBlank_DMA != 0) DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320); REG_BG0VOFS = TRANSITION_STRUCT.field_1C; REG_WININ = TRANSITION_STRUCT.WININ; @@ -1369,7 +1372,7 @@ static void VBlankCB1_Phase2_Mugshots(void) { DmaStop(0); VBlankCB_BattleTransition(); - if (TRANSITION_STRUCT.field_0 != 0) + if (TRANSITION_STRUCT.VBlank_DMA != 0) DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320); REG_BLDCNT = TRANSITION_STRUCT.BLDCNT; DmaSet(0, gUnknown_03004DE0[1], ®_BLDY, 0xA2400001); @@ -1494,20 +1497,20 @@ static s16 sub_811CA44(s16 spriteID) #undef tMugshotPlayerID #undef tMugshotID -void Phase2Task_Transition8(u8 taskID) +static void Phase2Task_Transition8(u8 taskID) { while (sPhase2_Transition8_Funcs[gTasks[taskID].tState](&gTasks[taskID])); } -bool8 Phase2_Transition7_Func1(struct Task* task) +bool8 Phase2_Transition8_Func1(struct Task* task) { - u8 i; + u16 i; sub_811D658(); dp12_8087EA4(); task->data[2] = 256; - task->data[3] = 256; + task->data[3] = 1; TRANSITION_STRUCT.WININ = 63; TRANSITION_STRUCT.WINOUT = 0; TRANSITION_STRUCT.WIN0V = 160; @@ -1518,8 +1521,419 @@ bool8 Phase2_Transition7_Func1(struct Task* task) gUnknown_03004DE0[1][160 + i] = 0xF0; } - SetVBlankCallback(VBlankCB_Phase2_Transition7); + REG_IE |= 2; + REG_DISPSTAT |= 0x10; + + SetVBlankCallback(VBlankCB_Phase2_Transition8); + SetHBlankCallback(HBlankCB_Phase2_Transition8); + + task->tState++; + return 1; +} + +bool8 Phase2_Transition8_Func2(struct Task* task) +{ + u16 i; + + TRANSITION_STRUCT.VBlank_DMA = 0; + + task->data[1] += (task->data[2] >> 8); + if (task->data[1] > 0xF0) + task->data[1] = 0xF0; + if (task->data[2] <= 0xFFF) + task->data[2] += task->data[3]; + if (task->data[3] < 128) + task->data[3] <<= 1; // multiplying by two + + for (i = 0; i < 160; i++) + { + u16* storeLoc1 = &gUnknown_03004DE0[0][i]; + u16* storeLoc2 = &gUnknown_03004DE0[0][i + 160]; + if (1 & i) + { + *storeLoc1 = TRANSITION_STRUCT.field_14 + task->data[1]; + *storeLoc2 = 0xF0 - task->data[1]; + } + else + { + *storeLoc1 = TRANSITION_STRUCT.field_14 - task->data[1]; + *storeLoc2 = (task->data[1] << 8) | (0xF1); + } + } + + if (task->data[1] > 0xEF) + task->tState++; + + TRANSITION_STRUCT.VBlank_DMA++; + return 0; +} + +bool8 Phase2_Transition8_Func3(struct Task* task) +{ + DmaStop(0); + sub_811D6D4(); + DestroyTask(FindTaskIdByFunc(Phase2Task_Transition8)); + return 0; +} + +static void VBlankCB_Phase2_Transition8(void) +{ + DmaStop(0); + VBlankCB_BattleTransition(); + REG_WININ = TRANSITION_STRUCT.WININ; + REG_WINOUT = TRANSITION_STRUCT.WINOUT; + REG_WIN0V = TRANSITION_STRUCT.WIN0V; + if (TRANSITION_STRUCT.VBlank_DMA) + DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 640); + DmaSet(0, &gUnknown_03004DE0[1][160], ®_WIN0H, 0xA2400001); +} + +static void HBlankCB_Phase2_Transition8(void) +{ + u16 var = gUnknown_03004DE0[1][REG_VCOUNT]; + REG_BG1HOFS = var; + REG_BG2HOFS = var; + REG_BG3HOFS = var; +} + +static void Phase2Task_Transition9(u8 taskID) +{ + while (sPhase2_Transition9_Funcs[gTasks[taskID].tState](&gTasks[taskID])); +} + +bool8 Phase2_Transition9_Func1(struct Task* task) +{ + u16 i; + + sub_811D658(); + dp12_8087EA4(); + + TRANSITION_STRUCT.BLDCNT = 0xBF; + TRANSITION_STRUCT.field_12 = 0; + TRANSITION_STRUCT.WININ = 0x1E; + TRANSITION_STRUCT.WINOUT = 0x3F; + TRANSITION_STRUCT.WIN0V = 0xA0; + + for (i = 0; i < 160; i++) + { + gUnknown_03004DE0[1][i] = 0; + gUnknown_03004DE0[1][i + 160] = 0xF0; + } + + REG_IE |= 2; + REG_DISPSTAT |= 0x10; + + SetHBlankCallback(HBlankCB_Phase2_Transition9); + SetVBlankCallback(VBlankCB0_Phase2_Transition9); + + task->tState++; + return 0; +} + +extern const s16 gUnknown_083FD8C4[8]; + +bool8 Phase2_Transition9_Func2(struct Task* task) +{ + s16 i, posY; + s16 arr1[8]; + struct Sprite* sprite; + + memcpy(arr1, gUnknown_083FD8C4, sizeof(gUnknown_083FD8C4)); + for (i = 0, posY = 0; i < 8; i++, posY += 0x14) + { + sprite = &gSprites[CreateInvisibleSprite(sub_811CFD0)]; + sprite->pos1.x = 0xF0; + sprite->pos1.y = posY; + sprite->data5 = arr1[i]; + } + sprite->data6++; + + task->tState++; + return 0; +} + +bool8 Phase2_Transition9_Func3(struct Task* task) +{ + TRANSITION_STRUCT.VBlank_DMA = 0; + if (TRANSITION_STRUCT.field_20 > 7) + { + BlendPalettes(-1, 0x10, 0x7FFF); + task->tState++; + } + return 0; +} + +bool8 Phase2_Transition9_Func4(struct Task* task) +{ + TRANSITION_STRUCT.VBlank_DMA = 0; + + DmaStop(0); + SetVBlankCallback(0); + SetHBlankCallback(0); + + TRANSITION_STRUCT.field_6 = 0xF0; + TRANSITION_STRUCT.field_12 = 0; + TRANSITION_STRUCT.BLDCNT = 0xFF; + TRANSITION_STRUCT.WININ = 0x3F; + + SetVBlankCallback(VBlankCB1_Phase2_Transition9); + + task->tState++; + return 0; +} + +bool8 Phase2_Transition9_Func5(struct Task* task) +{ + if (++TRANSITION_STRUCT.field_12 > 16) + { + sub_811D6D4(); + DestroyTask(FindTaskIdByFunc(Phase2Task_Transition9)); + } + return 0; +} + +static void VBlankCB0_Phase2_Transition9(void) +{ + DmaStop(0); + VBlankCB_BattleTransition(); + REG_BLDCNT = TRANSITION_STRUCT.BLDCNT; + REG_WININ = TRANSITION_STRUCT.WININ; + REG_WINOUT = TRANSITION_STRUCT.WINOUT; + REG_WIN0V = TRANSITION_STRUCT.field_6; + if (TRANSITION_STRUCT.VBlank_DMA) + DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 640); + DmaSet(0, &gUnknown_03004DE0[1][160], ®_WIN0H, 0xA2400001); +} + +static void VBlankCB1_Phase2_Transition9(void) +{ + VBlankCB_BattleTransition(); + REG_BLDY = TRANSITION_STRUCT.field_12; + REG_BLDCNT = TRANSITION_STRUCT.BLDCNT; + REG_WININ = TRANSITION_STRUCT.WININ; + REG_WINOUT = TRANSITION_STRUCT.WINOUT; + REG_WIN0H = TRANSITION_STRUCT.field_6; + REG_WIN0V = TRANSITION_STRUCT.WIN0V; +} + +static void HBlankCB_Phase2_Transition9(void) +{ + REG_BLDY = gUnknown_03004DE0[1][REG_VCOUNT]; +} + +void sub_811CFD0(struct Sprite* sprite) +{ + if (sprite->data5) + { + sprite->data5--; + if (sprite->data6) + TRANSITION_STRUCT.VBlank_DMA = 1; + } + else + { + u16 i; + u16* ptr1 = &gUnknown_03004DE0[0][sprite->pos1.y]; + u16* ptr2 = &gUnknown_03004DE0[0][sprite->pos1.y + 160]; + for (i = 0; i < 20; i++) + { + ptr1[i] = sprite->data0 >> 8; + ptr2[i] = (u8)(sprite->pos1.x); + } + if (sprite->pos1.x == 0 && sprite->data0 == 0x1000) + sprite->data1 = 1; + + sprite->pos1.x -= 16; + sprite->data0 += 0x80; + + if (sprite->pos1.x < 0) + sprite->pos1.x = 0; + if (sprite->data0 > 0x1000) + sprite->data0 = 0x1000; + + if (sprite->data6) + TRANSITION_STRUCT.VBlank_DMA = 1; + + if (sprite->data1) + { + if (sprite->data6 == 0 || (TRANSITION_STRUCT.field_20 > 6 && sprite->data2++ > 7)) + { + TRANSITION_STRUCT.field_20++; + DestroySprite(sprite); + } + } + } +} + +static void Phase2Task_Transition10(u8 taskID) +{ + while (sPhase2_Transition10_Funcs[gTasks[taskID].tState](&gTasks[taskID])); +} + +bool8 Phase2_Transition10_Func1(struct Task* task) +{ + u16 *dst1, *dst2; + + sub_811D6A8(&dst1, &dst2); + CpuSet(gUnknown_083FD528, dst2, 0x10); + CpuFill16(0xF000, dst1, 0x800); + LoadPalette(gFieldEffectObjectPalette10, 0xF0, 0x20); + task->tState++; + return 0; +} + +bool8 Phase2_Transition10_Func2(struct Task* task) +{ + u16* dst1; + + if (task->data[1] == 0) + { + sub_811D690(&dst1); + task->data[1] = 3; + task->data[2]++; + CpuSet(gUnknown_083FD528 + (task->data[2] * 8), dst1, 0x10); + if (task->data[2] > 0xD) + { + task->tState++; + task->data[1] = 16; + } + } + + task->data[1]--; + return 0; +} + +bool8 Phase2_Transition10_Func3(struct Task* task) +{ + if (--task->data[1] == 0) + { + sub_811D6D4(); + DestroyTask(FindTaskIdByFunc(Phase2Task_Transition10)); + } + return 0; +} + +static void Phase2Task_Transition11(u8 taskID) +{ + while (sPhase2_Transition11_Funcs[gTasks[taskID].tState](&gTasks[taskID])); +} + +bool8 Phase2_Transition11_Func1(struct Task* task) +{ + u16 i; + + sub_811D658(); + dp12_8087EA4(); + + TRANSITION_STRUCT.WININ = 0x3F; + TRANSITION_STRUCT.WINOUT = 0; + TRANSITION_STRUCT.WIN0V = 0xA0; + + for (i = 0; i < 160; i++) + { + gUnknown_03004DE0[0][i] = 0xF0; + } + + CpuSet(gUnknown_03004DE0[0], gUnknown_03004DE0[1], 0xA0); + SetVBlankCallback(VBlankCB_Phase2_Transition11); + + task->tState++; + return 1; +} + +extern const s16 gUnknown_083FD8F4[][5]; + +bool8 Phase2_Transition11_Func2(struct Task* task) +{ + sub_811D8FC(&TRANSITION_STRUCT.field_24, + gUnknown_083FD8F4[task->data[1]][0], + gUnknown_083FD8F4[task->data[1]][1], + gUnknown_083FD8F4[task->data[1]][2], + gUnknown_083FD8F4[task->data[1]][3], + 1, 1); + task->data[2] = gUnknown_083FD8F4[task->data[1]][4]; task->tState++; return 1; } + +bool8 Phase2_Transition11_Func3(struct Task* task) +{ + s16 i; + bool8 nextFunc; + + TRANSITION_STRUCT.VBlank_DMA = 0; + + for (i = 0, nextFunc = FALSE; i < 16; i++) + { + s16 r3 = gUnknown_03004DE0[0][TRANSITION_STRUCT.field_2A] >> 8; + s16 r4 = gUnknown_03004DE0[0][TRANSITION_STRUCT.field_2A] & 0xFF; + if (task->data[2] == 0) + { + if (r3 < TRANSITION_STRUCT.field_28) + r3 = TRANSITION_STRUCT.field_28; + if (r3 > r4) + r3 = r4; + } + else + { + if (r4 > TRANSITION_STRUCT.field_28) + r4 = TRANSITION_STRUCT.field_28; + if (r4 <= r3) + r4 = r3; + } + gUnknown_03004DE0[0][TRANSITION_STRUCT.field_2A] = (r4) | (r3 << 8); + if (nextFunc) + { + task->tState++; + break; + } + else + nextFunc = sub_811D978(&TRANSITION_STRUCT.field_24, 1, 1); + } + + TRANSITION_STRUCT.VBlank_DMA++; + return 0; +} + +extern const s16 gUnknown_083FD93A[]; + +bool8 Phase2_Transition11_Func4(struct Task* task) +{ + if (++task->data[1] < 7) + { + task->tState++; + task->data[3] = gUnknown_083FD93A[task->data[1] - 1]; + return 1; + } + else + { + DmaStop(0); + sub_811D6D4(); + DestroyTask(FindTaskIdByFunc(Phase2Task_Transition11)); + return 0; + } +} + +bool8 Phase2_Transition11_Func5(struct Task* task) +{ + if (--task->data[3] == 0) + { + task->tState = 1; + return 1; + } + else + return 0; +} + +static void VBlankCB_Phase2_Transition11(void) +{ + DmaStop(0); + VBlankCB_BattleTransition(); + if (TRANSITION_STRUCT.VBlank_DMA) + DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320); + REG_WININ = TRANSITION_STRUCT.WININ; + REG_WINOUT = TRANSITION_STRUCT.WINOUT; + REG_WIN0V = TRANSITION_STRUCT.WIN0V; + REG_WIN0H = gUnknown_03004DE0[1][0]; + DmaSet(0, gUnknown_03004DE0[1], ®_WIN0H, 0xA2400001); +} -- cgit v1.2.3 From f3191f7aa13529f73d28bc48cf74406a204962c9 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 21 Aug 2017 23:05:56 +0200 Subject: name suggestions, phase2 data to C --- data/battle_transition.s | 163 ------------------- include/battle_transition.h | 24 ++- src/battle_transition.c | 385 ++++++++++++++++++++++++++++++++------------ 3 files changed, 300 insertions(+), 272 deletions(-) diff --git a/data/battle_transition.s b/data/battle_transition.s index e15d03dd6..55f7defa6 100644 --- a/data/battle_transition.s +++ b/data/battle_transition.s @@ -4,169 +4,6 @@ .section .rodata -sPhase2_Transition0_Funcs:: @ 83FD7A4 - .4byte Phase2_Transition0_Func1 - .4byte Phase2_Transition0_Func2 - .4byte Phase2_Transition0_Func3 - - .align 2 -sPhase2_Transition1_Funcs:: @ 83FD7B0 - .4byte Phase2_Transition1_Func1 - .4byte Phase2_Transition1_Func2 - - .align 2 -sPhase2_Transition2_Funcs:: @ 83FD7B8 - .4byte Phase2_Transition2_Func1 - .4byte Phase2_Transition2_Func2 - - .align 2 -sPhase2_Transition3_Funcs:: @ 83FD7C0 - .4byte Phase2_Transition3_Func1 - .4byte Phase2_Transition3_Func2 - .4byte Phase2_Transition3_Func3 - .4byte Phase2_Transition3_Func4 - .4byte Phase2_Transition3_Func5 - .4byte Phase2_Transition3_Func6 - - .align 2 -sPhase2_Transition4_Funcs:: @ 83FD7D8 - .4byte Phase2_Transition4_Func1 - .4byte Phase2_Transition4_Func2 - .4byte Phase2_Transition4_Func3 - - .align 1 -gUnknown_083FD7E4:: @ 83FD7E4 - .2byte -16 - .2byte 256 - - .align 1 -gUnknown_083FD7E8:: @ 83FD7E8 - .2byte 0 - .2byte 32 - .2byte 64 - .2byte 18 - .2byte 48 - - .align 1 -gUnknown_083FD7F2:: @ 83FD7F2 - .2byte 8 - .2byte -8 - - .align 2 -sPhase2_Transition5_Funcs:: @ 83FD7F8 - .4byte Phase2_Transition5_Func1 - .4byte Phase2_Transition5_Func2 - .4byte Phase2_Transition5_Func3 - .4byte Phase2_Transition5_Func4 - .4byte Phase2_Transition5_Func5 - .4byte Phase2_Transition5_Func6 - .4byte Phase2_Transition5_Func7 - - .align 2 -sPhase2_Transition6_Funcs:: @ 83FD814 - .4byte Phase2_Transition6_Func1 - .4byte Phase2_Transition6_Func2 - - .align 2 -sPhase2_Transition7_Funcs:: @ 83FD81C - .4byte Phase2_Transition7_Func1 - .4byte Phase2_Transition7_Func2 - .4byte Phase2_Transition7_Func3 - - .align 2 -sPhase2_Mugshot_Transition_Funcs:: @ 83FD828 - .4byte Phase2_Mugshot_Func1 - .4byte Phase2_Mugshot_Func2 - .4byte Phase2_Mugshot_Func3 - .4byte Phase2_Mugshot_Func4 - .4byte Phase2_Mugshot_Func5 - .4byte Phase2_Mugshot_Func6 - .4byte Phase2_Mugshot_Func7 - .4byte Phase2_Mugshot_Func8 - .4byte Phase2_Mugshot_Func9 - .4byte Phase2_Mugshot_Func10 - -sMugshotsTrainerPicIDsTable:: @ 83FD850 - .byte TRAINER_PIC_SIDNEY - .byte TRAINER_PIC_PHOEBE - .byte TRAINER_PIC_GLACIA - .byte TRAINER_PIC_DRAKE - .byte TRAINER_PIC_STEVEN - - .align 1 -sMugshotsOpponentRotationScales:: @ 83FD856 - .2byte 0x200, 0x200 - .2byte 0x200, 0x200 - .2byte 0x1B0, 0x1B0 - .2byte 0x1A0, 0x1A0 - .2byte 0x188, 0x188 - - .align 1 -sMugshotsOpponentCoords:: @ 83FD86A - .2byte 0, 0 - .2byte 0, 0 - .2byte -4, 4 - .2byte 0, 5 - .2byte 0, 7 - - .align 2 -gUnknown_083FD880:: @ 83FD880 - .4byte sub_811C934 - .4byte sub_811C938 - .4byte sub_811C984 - .4byte sub_811C9B8 - .4byte sub_811C934 - .4byte sub_811C9E4 - .4byte sub_811C934 - - .align 1 -gUnknown_083FD89C:: @ 83FD89C - .2byte 12, -12 - - .align 1 -gUnknown_083FD8A0:: @ 83FD8A0 - .2byte -1, 1 - - .align 2 -sPhase2_Transition8_Funcs:: @ 83FD8A4 - .4byte Phase2_Transition8_Func1 - .4byte Phase2_Transition8_Func2 - .4byte Phase2_Transition8_Func3 - - .align 2 -sPhase2_Transition9_Funcs:: @ 83FD8B0 - .4byte Phase2_Transition9_Func1 - .4byte Phase2_Transition9_Func2 - .4byte Phase2_Transition9_Func3 - .4byte Phase2_Transition9_Func4 - .4byte Phase2_Transition9_Func5 - - .align 1 -gUnknown_083FD8C4:: @ 83FD8C4 - .2byte 0 - .2byte 20 - .2byte 15 - .2byte 40 - .2byte 10 - .2byte 25 - .2byte 35 - .2byte 5 - - .align 2 -sPhase2_Transition10_Funcs:: @ 83FD8D4 - .4byte Phase2_Transition10_Func1 - .4byte Phase2_Transition10_Func2 - .4byte Phase2_Transition10_Func3 - - .align 2 -sPhase2_Transition11_Funcs:: @ 83FD8E0 - .4byte Phase2_Transition11_Func1 - .4byte Phase2_Transition11_Func2 - .4byte Phase2_Transition11_Func3 - .4byte Phase2_Transition11_Func4 - .4byte Phase2_Transition11_Func5 - - .align 1 gUnknown_083FD8F4:: @ 83FD8F4 .2byte 56, 0, 0, 160, 0 .2byte 104, 160, 240, 88, 1 diff --git a/include/battle_transition.h b/include/battle_transition.h index 597e9724d..9082b20ef 100644 --- a/include/battle_transition.h +++ b/include/battle_transition.h @@ -16,11 +16,23 @@ enum // TRANSITION_MUGSHOT MUGSHOT_STEVEN, }; -#define B_TRANSITION_WILD 8 -#define B_TRANSITION_SYDNEY 12 -#define B_TRANSITION_PHOEBE 13 -#define B_TRANSITION_GLACIA 14 -#define B_TRANSITION_DRAKE 15 -#define B_TRANSITION_STEVEN 16 +#define MUGSHOTS_NO 5 + +// credits for the names goes to Dyskinesia + +#define B_TRANSITION_BLUR 0 +#define B_TRANSITION_SMEAR 1 +#define B_TRANSITION_SHUFFLE 2 +#define B_TRANSITION_BIG_POKEBALL 3 +#define B_TRANSITION_POKEBALLS_WIPEOUT 4 +#define B_TRANSITION_RIPPLE 6 +#define B_TRANSITION_WAVE 7 +#define B_TRANSITION_SLICE 8 +#define B_TRANSITION_SHARDS 11 +#define B_TRANSITION_SYDNEY 12 +#define B_TRANSITION_PHOEBE 13 +#define B_TRANSITION_GLACIA 14 +#define B_TRANSITION_DRAKE 15 +#define B_TRANSITION_STEVEN 16 #endif // GUARD_BATTLE_TRANSITION_H diff --git a/src/battle_transition.c b/src/battle_transition.c index ae2e26d21..c0770f793 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -10,9 +10,11 @@ #include "sprite.h" #include "sound.h" #include "songs.h" +#include "trainer.h" void sub_807DE10(void); void dp12_8087EA4(void); +void sub_811C90C(struct Sprite* sprite); extern u8 ewram[]; extern s16 gUnknown_03005560[]; @@ -47,14 +49,12 @@ struct TransitionData }; #define TRANSITION_STRUCT (*(struct TransitionData *) (ewram + 0xC000)) +typedef bool8 (*TransitionState)(struct Task* task); +typedef bool8 (*TransitionSpriteCallback)(struct Sprite* sprite); // this file's functions static void LaunchBattleTransitionTask(u8 transitionID); static void Task_BattleTransitionMain(u8 taskID); -void sub_811D4C8(s16 a0, s16 a1, s16 a2, s16 a3, s16 a4); -bool8 sub_811D52C(void); -void sub_811D658(void); - static void Phase1Task_TransitionAll(u8 taskID); static void Phase2Task_Transition0(u8 taskID); static void Phase2Task_Transition1(u8 taskID); @@ -96,7 +96,74 @@ static void VBlankCB0_Phase2_Mugshots(void); static void VBlankCB1_Phase2_Mugshots(void); static void HBlankCB_Phase2_Mugshots(void); static void VBlankCB_Phase2_Transition11(void); +static bool8 Phase2_Transition0_Func1(struct Task* task); +static bool8 Phase2_Transition0_Func2(struct Task* task); +static bool8 Phase2_Transition0_Func3(struct Task* task); +static bool8 Phase2_Transition1_Func1(struct Task* task); +static bool8 Phase2_Transition1_Func2(struct Task* task); +static bool8 Phase2_Transition2_Func1(struct Task* task); +static bool8 Phase2_Transition2_Func2(struct Task* task); +static bool8 Phase2_Transition3_Func1(struct Task* task); +static bool8 Phase2_Transition3_Func2(struct Task* task); +static bool8 Phase2_Transition3_Func3(struct Task* task); +static bool8 Phase2_Transition3_Func4(struct Task* task); +static bool8 Phase2_Transition3_Func5(struct Task* task); +static bool8 Phase2_Transition3_Func6(struct Task* task); +static bool8 Phase2_Transition4_Func1(struct Task* task); +static bool8 Phase2_Transition4_Func2(struct Task* task); +static bool8 Phase2_Transition4_Func3(struct Task* task); +static bool8 Phase2_Transition5_Func1(struct Task* task); +static bool8 Phase2_Transition5_Func2(struct Task* task); +static bool8 Phase2_Transition5_Func3(struct Task* task); +static bool8 Phase2_Transition5_Func4(struct Task* task); +static bool8 Phase2_Transition5_Func5(struct Task* task); +static bool8 Phase2_Transition5_Func6(struct Task* task); +static bool8 Phase2_Transition5_Func7(struct Task* task); +static bool8 Phase2_Transition6_Func1(struct Task* task); +static bool8 Phase2_Transition6_Func2(struct Task* task); +static bool8 Phase2_Transition7_Func1(struct Task* task); +static bool8 Phase2_Transition7_Func2(struct Task* task); +static bool8 Phase2_Transition7_Func3(struct Task* task); +static bool8 Phase2_Transition8_Func1(struct Task* task); +static bool8 Phase2_Transition8_Func2(struct Task* task); +static bool8 Phase2_Transition8_Func3(struct Task* task); +static bool8 Phase2_Transition9_Func1(struct Task* task); +static bool8 Phase2_Transition9_Func2(struct Task* task); +static bool8 Phase2_Transition9_Func3(struct Task* task); +static bool8 Phase2_Transition9_Func4(struct Task* task); +static bool8 Phase2_Transition9_Func5(struct Task* task); +static bool8 Phase2_Transition10_Func1(struct Task* task); +static bool8 Phase2_Transition10_Func2(struct Task* task); +static bool8 Phase2_Transition10_Func3(struct Task* task); +static bool8 Phase2_Transition11_Func1(struct Task* task); +static bool8 Phase2_Transition11_Func2(struct Task* task); +static bool8 Phase2_Transition11_Func3(struct Task* task); +static bool8 Phase2_Transition11_Func4(struct Task* task); +static bool8 Phase2_Transition11_Func5(struct Task* task); +static bool8 Phase2_Mugshot_Func1(struct Task* task); +static bool8 Phase2_Mugshot_Func2(struct Task* task); +static bool8 Phase2_Mugshot_Func3(struct Task* task); +static bool8 Phase2_Mugshot_Func4(struct Task* task); +static bool8 Phase2_Mugshot_Func5(struct Task* task); +static bool8 Phase2_Mugshot_Func6(struct Task* task); +static bool8 Phase2_Mugshot_Func7(struct Task* task); +static bool8 Phase2_Mugshot_Func8(struct Task* task); +static bool8 Phase2_Mugshot_Func9(struct Task* task); +static bool8 Phase2_Mugshot_Func10(struct Task* task); +static void Phase2Task_MugShotTransition(u8 taskID); +static void Mugshots_CreateOpponentPlayerSprites(struct Task* task); +static void sub_811CA10(s16 spriteID, s16 value); +static void sub_811CA28(s16 spriteID); +static s16 sub_811CA44(s16 spriteID); +static bool8 sub_811C934(struct Sprite* sprite); +static bool8 sub_811C938(struct Sprite* sprite); +static bool8 sub_811C984(struct Sprite* sprite); +static bool8 sub_811C9B8(struct Sprite* sprite); +static bool8 sub_811C9E4(struct Sprite* sprite); +void sub_811D4C8(s16 a0, s16 a1, s16 a2, s16 a3, s16 a4); +bool8 sub_811D52C(void); +void sub_811D658(void); void VBlankCB_BattleTransition(void); void sub_811D6E8(s16* a0, s16 a1, s16 a2, s16 a3, s16 a4, s16 a5); void sub_811D6A8(u16** a0, u16** a1); @@ -105,45 +172,9 @@ void sub_811D764(u16* a0, s16 a1, s16 a2, s16 a3); void sub_811D6D4(void); void sub_811D8FC(s16* a0, s16 a1, s16 a2, s16 a3, s16 a4, s16 a5, s16 a6); bool8 sub_811D978(s16* a0, bool8 a1, bool8 a2); -static void Phase2Task_MugShotTransition(u8 taskID); -static void Mugshots_CreateOpponentPlayerSprites(struct Task* task); -static void sub_811CA10(s16 spriteID, s16 value); -static void sub_811CA28(s16 spriteID); -static s16 sub_811CA44(s16 spriteID); void sub_811CFD0(struct Sprite* sprite); // const data -typedef bool8 (*TransitionState)(struct Task* task); -typedef bool8 (*TransitionSpriteCallback)(struct Sprite* sprite); - -extern const TransitionState sPhase2_Transition0_Funcs[]; -extern const TransitionState sPhase2_Transition1_Funcs[]; -extern const TransitionState sPhase2_Transition2_Funcs[]; -extern const TransitionState sPhase2_Transition3_Funcs[]; -extern const TransitionState sPhase2_Transition4_Funcs[]; -extern const TransitionState sPhase2_Transition5_Funcs[]; -extern const TransitionState sPhase2_Transition6_Funcs[]; -extern const TransitionState sPhase2_Transition7_Funcs[]; -extern const TransitionState sPhase2_Transition8_Funcs[]; -extern const TransitionState sPhase2_Transition9_Funcs[]; -extern const TransitionState sPhase2_Transition10_Funcs[]; -extern const TransitionState sPhase2_Transition11_Funcs[]; -extern const TransitionState sPhase2_Mugshot_Transition_Funcs[]; -extern const u16 gFieldEffectObjectPalette10[]; -extern const u16 gUnknown_083FDB44[]; -extern const s16 gUnknown_083FD7E4[2]; -extern const s16 gUnknown_083FD7F2[2]; -extern const s16 gUnknown_083FD7E8[5]; -extern const struct SpriteTemplate gSpriteTemplate_83FD98C; -extern const u16 gUnknown_083FDFF4[]; -extern const u8 * const sOpponentMugshotsPals[]; -extern const u8 * const sPlayerMugshotsPals[2]; -extern const u8 sMugshotsTrainerPicIDsTable[]; -extern const s16 sMugshotsOpponentCoords[][2]; -extern const s16 sMugshotsOpponentRotationScales[][2]; -extern const TransitionSpriteCallback gUnknown_083FD880[]; -extern const s16 gUnknown_083FD89C[2]; -extern const s16 gUnknown_083FD8A0[2]; static const u32 gUnknown_083FBB88[] = INCBIN_U32("graphics/battle_transitions/big_pokeball.4bpp"); static const u32 gUnknown_083FC108[] = INCBIN_U32("graphics/battle_transitions/pokeball_trail.4bpp"); @@ -152,6 +183,7 @@ static const u32 gUnknown_083FC348[] = INCBIN_U32("graphics/battle_transitions/e const u32 gSpriteImage_83FC528[] = INCBIN_U32("graphics/battle_transitions/unused_brendan.4bpp"); const u32 gSpriteImage_83FCD28[] = INCBIN_U32("graphics/battle_transitions/unused_lass.4bpp"); const u32 gUnknown_083FD528[] = INCBIN_U32("graphics/battle_transitions/shrinking_box.4bpp"); + struct TransitionData * const sTransitionStructPtr = &TRANSITION_STRUCT; static const TaskFunc sPhase1_Tasks[TRANSITIONS_NO] = @@ -188,7 +220,160 @@ static const TransitionState sMainTransitionPhases[] = &Transition_WaitForPhase2 }; -void sub_811C90C(struct Sprite* sprite); +static const TransitionState sPhase2_Transition0_Funcs[] = +{ + &Phase2_Transition0_Func1, + &Phase2_Transition0_Func2, + &Phase2_Transition0_Func3 +}; + +static const TransitionState sPhase2_Transition1_Funcs[] = +{ + &Phase2_Transition1_Func1, + &Phase2_Transition1_Func2, +}; + +static const TransitionState sPhase2_Transition2_Funcs[] = +{ + &Phase2_Transition2_Func1, + &Phase2_Transition2_Func2, +}; + +static const TransitionState sPhase2_Transition3_Funcs[] = +{ + &Phase2_Transition3_Func1, + &Phase2_Transition3_Func2, + &Phase2_Transition3_Func3, + &Phase2_Transition3_Func4, + &Phase2_Transition3_Func5, + &Phase2_Transition3_Func6 +}; + +static const TransitionState sPhase2_Transition4_Funcs[] = +{ + &Phase2_Transition4_Func1, + &Phase2_Transition4_Func2, + &Phase2_Transition4_Func3 +}; + +static const s16 gUnknown_083FD7E4[2] = {-16, 256}; +static const s16 gUnknown_083FD7E8[5] = {0, 32, 64, 18, 48}; +static const s16 gUnknown_083FD7F2[2] = {8, -8}; + +static const TransitionState sPhase2_Transition5_Funcs[] = +{ + &Phase2_Transition5_Func1, + &Phase2_Transition5_Func2, + &Phase2_Transition5_Func3, + &Phase2_Transition5_Func4, + &Phase2_Transition5_Func5, + &Phase2_Transition5_Func6, + &Phase2_Transition5_Func7 +}; + +static const TransitionState sPhase2_Transition6_Funcs[] = +{ + &Phase2_Transition6_Func1, + &Phase2_Transition6_Func2 +}; + +static const TransitionState sPhase2_Transition7_Funcs[] = +{ + &Phase2_Transition7_Func1, + &Phase2_Transition7_Func2, + &Phase2_Transition7_Func3 +}; + +static const TransitionState sPhase2_Mugshot_Transition_Funcs[] = +{ + &Phase2_Mugshot_Func1, + &Phase2_Mugshot_Func2, + &Phase2_Mugshot_Func3, + &Phase2_Mugshot_Func4, + &Phase2_Mugshot_Func5, + &Phase2_Mugshot_Func6, + &Phase2_Mugshot_Func7, + &Phase2_Mugshot_Func8, + &Phase2_Mugshot_Func9, + &Phase2_Mugshot_Func10 +}; + +static const u8 sMugshotsTrainerPicIDsTable[MUGSHOTS_NO] = {TRAINER_PIC_SIDNEY, TRAINER_PIC_PHOEBE, TRAINER_PIC_GLACIA, TRAINER_PIC_DRAKE, TRAINER_PIC_STEVEN}; +static const s16 sMugshotsOpponentRotationScales[MUGSHOTS_NO][2] = +{ + {0x200, 0x200}, + {0x200, 0x200}, + {0x1B0, 0x1B0}, + {0x1A0, 0x1A0}, + {0x188, 0x188}, +}; +static const s16 sMugshotsOpponentCoords[MUGSHOTS_NO][2] = +{ + {0, 0}, + {0, 0}, + {-4, 4}, + {0, 5}, + {0, 7}, +}; + +static const TransitionSpriteCallback gUnknown_083FD880[] = +{ + &sub_811C934, + &sub_811C938, + &sub_811C984, + &sub_811C9B8, + &sub_811C934, + &sub_811C9E4, + &sub_811C934 +}; + +static const s16 gUnknown_083FD89C[2] = {12, -12}; +static const s16 gUnknown_083FD8A0[2] = {-1, 1}; + +static const TransitionState sPhase2_Transition8_Funcs[] = +{ + &Phase2_Transition8_Func1, + &Phase2_Transition8_Func2, + &Phase2_Transition8_Func3 +}; + +static const TransitionState sPhase2_Transition9_Funcs[] = +{ + &Phase2_Transition9_Func1, + &Phase2_Transition9_Func2, + &Phase2_Transition9_Func3, + &Phase2_Transition9_Func4, + &Phase2_Transition9_Func5 +}; + +static const s16 gUnknown_083FD8C4[8] = {0, 20, 15, 40, 10, 25, 35, 5}; + +static const TransitionState sPhase2_Transition10_Funcs[] = +{ + &Phase2_Transition10_Func1, + &Phase2_Transition10_Func2, + &Phase2_Transition10_Func3 +}; + +static const TransitionState sPhase2_Transition11_Funcs[] = +{ + &Phase2_Transition11_Func1, + &Phase2_Transition11_Func2, + &Phase2_Transition11_Func3, + &Phase2_Transition11_Func4, + &Phase2_Transition11_Func5 +}; + +extern const u16 gFieldEffectObjectPalette10[]; +extern const u16 gUnknown_083FDB44[]; +extern const struct SpriteTemplate gSpriteTemplate_83FD98C; +extern const u16 gUnknown_083FDFF4[]; +extern const u8 * const sOpponentMugshotsPals[]; +extern const u8 * const sPlayerMugshotsPals[2]; +extern const s16 gUnknown_083FD8F4[][5]; +extern const s16 gUnknown_083FD93A[]; + +// actual code starts here void sub_811AABC(u8 transitionID) { @@ -287,7 +472,7 @@ static void Phase2Task_Transition0(u8 taskID) while (sPhase2_Transition0_Funcs[gTasks[taskID].tState](&gTasks[taskID])); } -bool8 Phase2_Transition0_Func1(struct Task* task) +static bool8 Phase2_Transition0_Func1(struct Task* task) { REG_MOSAIC = 0; REG_BG1CNT |= 0x40; @@ -297,7 +482,7 @@ bool8 Phase2_Transition0_Func1(struct Task* task) return 1; } -bool8 Phase2_Transition0_Func2(struct Task* task) +static bool8 Phase2_Transition0_Func2(struct Task* task) { if (task->data[1] != 0) task->data[1]--; @@ -313,7 +498,7 @@ bool8 Phase2_Transition0_Func2(struct Task* task) return 0; } -bool8 Phase2_Transition0_Func3(struct Task* task) +static bool8 Phase2_Transition0_Func3(struct Task* task) { if (!gPaletteFade.active) { @@ -328,7 +513,7 @@ static void Phase2Task_Transition1(u8 taskID) while (sPhase2_Transition1_Funcs[gTasks[taskID].tState](&gTasks[taskID])); } -bool8 Phase2_Transition1_Func1(struct Task* task) +static bool8 Phase2_Transition1_Func1(struct Task* task) { u16 savedIME; @@ -350,7 +535,7 @@ bool8 Phase2_Transition1_Func1(struct Task* task) return 0; } -bool8 Phase2_Transition1_Func2(struct Task* task) +static bool8 Phase2_Transition1_Func2(struct Task* task) { TRANSITION_STRUCT.VBlank_DMA = 0; task->data[1] += 4; @@ -388,7 +573,7 @@ static void Phase2Task_Transition2(u8 taskID) while (sPhase2_Transition2_Funcs[gTasks[taskID].tState](&gTasks[taskID])); } -bool8 Phase2_Transition2_Func1(struct Task* task) +static bool8 Phase2_Transition2_Func1(struct Task* task) { u16 savedIME; @@ -411,7 +596,7 @@ bool8 Phase2_Transition2_Func1(struct Task* task) return 0; } -bool8 Phase2_Transition2_Func2(struct Task* task) +static bool8 Phase2_Transition2_Func2(struct Task* task) { u8 i; u16 r3, r4; @@ -455,7 +640,7 @@ static void Phase2Task_Transition3(u8 taskID) while (sPhase2_Transition3_Funcs[gTasks[taskID].tState](&gTasks[taskID])); } -bool8 Phase2_Transition3_Func1(struct Task* task) +static bool8 Phase2_Transition3_Func1(struct Task* task) { u16 i; u16 *dst1, *dst2; @@ -490,7 +675,7 @@ bool8 Phase2_Transition3_Func1(struct Task* task) return 0; } -bool8 Phase2_Transition3_Func2(struct Task* task) +static bool8 Phase2_Transition3_Func2(struct Task* task) { s16 i, j; u16 *dst1, *dst2; @@ -511,7 +696,7 @@ bool8 Phase2_Transition3_Func2(struct Task* task) return 1; } -bool8 Phase2_Transition3_Func3(struct Task* task) +static bool8 Phase2_Transition3_Func3(struct Task* task) { TRANSITION_STRUCT.VBlank_DMA = 0; if (task->data[3] == 0 || --task->data[3] == 0) @@ -531,7 +716,7 @@ bool8 Phase2_Transition3_Func3(struct Task* task) return 0; } -bool8 Phase2_Transition3_Func4(struct Task* task) +static bool8 Phase2_Transition3_Func4(struct Task* task) { TRANSITION_STRUCT.VBlank_DMA = 0; if (task->data[3] == 0 || --task->data[3] == 0) @@ -551,7 +736,7 @@ bool8 Phase2_Transition3_Func4(struct Task* task) return 0; } -bool8 Phase2_Transition3_Func5(struct Task* task) +static bool8 Phase2_Transition3_Func5(struct Task* task) { TRANSITION_STRUCT.VBlank_DMA = 0; task->data[4] += 8; @@ -571,7 +756,7 @@ bool8 Phase2_Transition3_Func5(struct Task* task) return 0; } -bool8 Phase2_Transition3_Func6(struct Task* task) +static bool8 Phase2_Transition3_Func6(struct Task* task) { TRANSITION_STRUCT.VBlank_DMA = 0; if (task->data[2] < 1024) @@ -618,7 +803,7 @@ static void VBlankCB0_Phase2_Transition3(void) DmaSet(0, gUnknown_03005560, ®_BG0HOFS, 0xA2400001); } -void VBlankCB1_Phase2_Transition3(void) +static void VBlankCB1_Phase2_Transition3(void) { Transition3_Vblank(); DmaSet(0, gUnknown_03005560, ®_WIN0H, 0xA2400001); @@ -629,7 +814,7 @@ static void Phase2Task_Transition4(u8 taskID) while (sPhase2_Transition4_Funcs[gTasks[taskID].tState](&gTasks[taskID])); } -bool8 Phase2_Transition4_Func1(struct Task* task) +static bool8 Phase2_Transition4_Func1(struct Task* task) { u16 *dst1, *dst2; @@ -642,7 +827,7 @@ bool8 Phase2_Transition4_Func1(struct Task* task) return 0; } -bool8 Phase2_Transition4_Func2(struct Task* task) +static bool8 Phase2_Transition4_Func2(struct Task* task) { s16 i; s16 rand; @@ -665,7 +850,7 @@ bool8 Phase2_Transition4_Func2(struct Task* task) return 0; } -bool8 Phase2_Transition4_Func3(struct Task* task) +static bool8 Phase2_Transition4_Func3(struct Task* task) { if (!FieldEffectActiveListContains(FLDEFF_POKEBALL)) { @@ -734,7 +919,7 @@ static void Phase2Task_Transition5(u8 taskID) while (sPhase2_Transition5_Funcs[gTasks[taskID].tState](&gTasks[taskID])); } -bool8 Phase2_Transition5_Func1(struct Task* task) +static bool8 Phase2_Transition5_Func1(struct Task* task) { u16 i; @@ -758,7 +943,7 @@ bool8 Phase2_Transition5_Func1(struct Task* task) return 1; } -bool8 Phase2_Transition5_Func2(struct Task* task) +static bool8 Phase2_Transition5_Func2(struct Task* task) { TRANSITION_STRUCT.VBlank_DMA = 0; @@ -779,7 +964,7 @@ bool8 Phase2_Transition5_Func2(struct Task* task) return 0; } -bool8 Phase2_Transition5_Func3(struct Task* task) +static bool8 Phase2_Transition5_Func3(struct Task* task) { s16 r1, r3; vu8 var = 0; @@ -817,7 +1002,7 @@ bool8 Phase2_Transition5_Func3(struct Task* task) return 0; } -bool8 Phase2_Transition5_Func4(struct Task* task) +static bool8 Phase2_Transition5_Func4(struct Task* task) { TRANSITION_STRUCT.VBlank_DMA = 0; @@ -838,7 +1023,7 @@ bool8 Phase2_Transition5_Func4(struct Task* task) return 0; } -bool8 Phase2_Transition5_Func5(struct Task* task) +static bool8 Phase2_Transition5_Func5(struct Task* task) { s16 r1, r2, r3; vu8 var = 0; @@ -877,7 +1062,7 @@ bool8 Phase2_Transition5_Func5(struct Task* task) return 0; } -bool8 Phase2_Transition5_Func6(struct Task* task) +static bool8 Phase2_Transition5_Func6(struct Task* task) { TRANSITION_STRUCT.VBlank_DMA = 0; @@ -901,7 +1086,7 @@ bool8 Phase2_Transition5_Func6(struct Task* task) return 0; } -bool8 Phase2_Transition5_Func7(struct Task* task) +static bool8 Phase2_Transition5_Func7(struct Task* task) { DmaStop(0); sub_811D6D4(); @@ -922,12 +1107,12 @@ static void VBlankCB_Phase2_Transition5(void) DmaSet(0, gUnknown_03004DE0[1], ®_WIN0H, 0xA2400001); } -void Phase2Task_Transition6(u8 taskID) +static void Phase2Task_Transition6(u8 taskID) { while (sPhase2_Transition6_Funcs[gTasks[taskID].tState](&gTasks[taskID])); } -bool8 Phase2_Transition6_Func1(struct Task* task) +static bool8 Phase2_Transition6_Func1(struct Task* task) { u8 i; @@ -949,7 +1134,7 @@ bool8 Phase2_Transition6_Func1(struct Task* task) return 1; } -bool8 Phase2_Transition6_Func2(struct Task* task) +static bool8 Phase2_Transition6_Func2(struct Task* task) { u8 i; s16 r3; @@ -1006,7 +1191,7 @@ static void Phase2Task_Transition7(u8 taskID) while (sPhase2_Transition7_Funcs[gTasks[taskID].tState](&gTasks[taskID])); } -bool8 Phase2_Transition7_Func1(struct Task* task) +static bool8 Phase2_Transition7_Func1(struct Task* task) { u8 i; @@ -1029,7 +1214,7 @@ bool8 Phase2_Transition7_Func1(struct Task* task) return 1; } -bool8 Phase2_Transition7_Func2(struct Task* task) +static bool8 Phase2_Transition7_Func2(struct Task* task) { u8 i, r5; u16* toStore; @@ -1059,7 +1244,7 @@ bool8 Phase2_Transition7_Func2(struct Task* task) return 0; } -bool8 Phase2_Transition7_Func3(struct Task* task) +static bool8 Phase2_Transition7_Func3(struct Task* task) { DmaStop(0); sub_811D6D4(); @@ -1118,7 +1303,7 @@ static void Phase2Task_MugShotTransition(u8 taskID) while (sPhase2_Mugshot_Transition_Funcs[gTasks[taskID].tState](&gTasks[taskID])); } -bool8 Phase2_Mugshot_Func1(struct Task* task) +static bool8 Phase2_Mugshot_Func1(struct Task* task) { u8 i; @@ -1144,7 +1329,7 @@ bool8 Phase2_Mugshot_Func1(struct Task* task) return 0; } -bool8 Phase2_Mugshot_Func2(struct Task* task) +static bool8 Phase2_Mugshot_Func2(struct Task* task) { s16 i, j; u16 *dst1, *dst2; @@ -1171,7 +1356,7 @@ bool8 Phase2_Mugshot_Func2(struct Task* task) return 0; } -bool8 Phase2_Mugshot_Func3(struct Task* task) +static bool8 Phase2_Mugshot_Func3(struct Task* task) { u8 i, r5; u16* toStore; @@ -1219,7 +1404,7 @@ bool8 Phase2_Mugshot_Func3(struct Task* task) return 0; } -bool8 Phase2_Mugshot_Func4(struct Task* task) +static bool8 Phase2_Mugshot_Func4(struct Task* task) { u8 i; u16* toStore; @@ -1248,7 +1433,7 @@ bool8 Phase2_Mugshot_Func4(struct Task* task) return 0; } -bool8 Phase2_Mugshot_Func5(struct Task* task) +static bool8 Phase2_Mugshot_Func5(struct Task* task) { TRANSITION_STRUCT.field_18 -= 8; TRANSITION_STRUCT.field_1A += 8; @@ -1260,7 +1445,7 @@ bool8 Phase2_Mugshot_Func5(struct Task* task) return 0; } -bool8 Phase2_Mugshot_Func6(struct Task* task) +static bool8 Phase2_Mugshot_Func6(struct Task* task) { TRANSITION_STRUCT.field_18 -= 8; TRANSITION_STRUCT.field_1A += 8; @@ -1282,7 +1467,7 @@ bool8 Phase2_Mugshot_Func6(struct Task* task) return 0; } -bool8 Phase2_Mugshot_Func7(struct Task* task) +static bool8 Phase2_Mugshot_Func7(struct Task* task) { bool32 r6; @@ -1323,7 +1508,7 @@ bool8 Phase2_Mugshot_Func7(struct Task* task) return 0; } -bool8 Phase2_Mugshot_Func8(struct Task* task) +static bool8 Phase2_Mugshot_Func8(struct Task* task) { TRANSITION_STRUCT.VBlank_DMA = 0; BlendPalettes(-1, 0x10, 0x7FFF); @@ -1334,7 +1519,7 @@ bool8 Phase2_Mugshot_Func8(struct Task* task) return 1; } -bool8 Phase2_Mugshot_Func9(struct Task* task) +static bool8 Phase2_Mugshot_Func9(struct Task* task) { TRANSITION_STRUCT.VBlank_DMA = 0; @@ -1347,7 +1532,7 @@ bool8 Phase2_Mugshot_Func9(struct Task* task) return 0; } -bool8 Phase2_Mugshot_Func10(struct Task* task) +static bool8 Phase2_Mugshot_Func10(struct Task* task) { DmaStop(0); sub_811D6D4(); @@ -1502,7 +1687,7 @@ static void Phase2Task_Transition8(u8 taskID) while (sPhase2_Transition8_Funcs[gTasks[taskID].tState](&gTasks[taskID])); } -bool8 Phase2_Transition8_Func1(struct Task* task) +static bool8 Phase2_Transition8_Func1(struct Task* task) { u16 i; @@ -1531,7 +1716,7 @@ bool8 Phase2_Transition8_Func1(struct Task* task) return 1; } -bool8 Phase2_Transition8_Func2(struct Task* task) +static bool8 Phase2_Transition8_Func2(struct Task* task) { u16 i; @@ -1568,7 +1753,7 @@ bool8 Phase2_Transition8_Func2(struct Task* task) return 0; } -bool8 Phase2_Transition8_Func3(struct Task* task) +static bool8 Phase2_Transition8_Func3(struct Task* task) { DmaStop(0); sub_811D6D4(); @@ -1601,7 +1786,7 @@ static void Phase2Task_Transition9(u8 taskID) while (sPhase2_Transition9_Funcs[gTasks[taskID].tState](&gTasks[taskID])); } -bool8 Phase2_Transition9_Func1(struct Task* task) +static bool8 Phase2_Transition9_Func1(struct Task* task) { u16 i; @@ -1630,9 +1815,7 @@ bool8 Phase2_Transition9_Func1(struct Task* task) return 0; } -extern const s16 gUnknown_083FD8C4[8]; - -bool8 Phase2_Transition9_Func2(struct Task* task) +static bool8 Phase2_Transition9_Func2(struct Task* task) { s16 i, posY; s16 arr1[8]; @@ -1652,7 +1835,7 @@ bool8 Phase2_Transition9_Func2(struct Task* task) return 0; } -bool8 Phase2_Transition9_Func3(struct Task* task) +static bool8 Phase2_Transition9_Func3(struct Task* task) { TRANSITION_STRUCT.VBlank_DMA = 0; if (TRANSITION_STRUCT.field_20 > 7) @@ -1663,7 +1846,7 @@ bool8 Phase2_Transition9_Func3(struct Task* task) return 0; } -bool8 Phase2_Transition9_Func4(struct Task* task) +static bool8 Phase2_Transition9_Func4(struct Task* task) { TRANSITION_STRUCT.VBlank_DMA = 0; @@ -1682,7 +1865,7 @@ bool8 Phase2_Transition9_Func4(struct Task* task) return 0; } -bool8 Phase2_Transition9_Func5(struct Task* task) +static bool8 Phase2_Transition9_Func5(struct Task* task) { if (++TRANSITION_STRUCT.field_12 > 16) { @@ -1769,7 +1952,7 @@ static void Phase2Task_Transition10(u8 taskID) while (sPhase2_Transition10_Funcs[gTasks[taskID].tState](&gTasks[taskID])); } -bool8 Phase2_Transition10_Func1(struct Task* task) +static bool8 Phase2_Transition10_Func1(struct Task* task) { u16 *dst1, *dst2; @@ -1782,7 +1965,7 @@ bool8 Phase2_Transition10_Func1(struct Task* task) return 0; } -bool8 Phase2_Transition10_Func2(struct Task* task) +static bool8 Phase2_Transition10_Func2(struct Task* task) { u16* dst1; @@ -1803,7 +1986,7 @@ bool8 Phase2_Transition10_Func2(struct Task* task) return 0; } -bool8 Phase2_Transition10_Func3(struct Task* task) +static bool8 Phase2_Transition10_Func3(struct Task* task) { if (--task->data[1] == 0) { @@ -1818,7 +2001,7 @@ static void Phase2Task_Transition11(u8 taskID) while (sPhase2_Transition11_Funcs[gTasks[taskID].tState](&gTasks[taskID])); } -bool8 Phase2_Transition11_Func1(struct Task* task) +static bool8 Phase2_Transition11_Func1(struct Task* task) { u16 i; @@ -1841,9 +2024,7 @@ bool8 Phase2_Transition11_Func1(struct Task* task) return 1; } -extern const s16 gUnknown_083FD8F4[][5]; - -bool8 Phase2_Transition11_Func2(struct Task* task) +static bool8 Phase2_Transition11_Func2(struct Task* task) { sub_811D8FC(&TRANSITION_STRUCT.field_24, gUnknown_083FD8F4[task->data[1]][0], @@ -1856,7 +2037,7 @@ bool8 Phase2_Transition11_Func2(struct Task* task) return 1; } -bool8 Phase2_Transition11_Func3(struct Task* task) +static bool8 Phase2_Transition11_Func3(struct Task* task) { s16 i; bool8 nextFunc; @@ -1895,9 +2076,7 @@ bool8 Phase2_Transition11_Func3(struct Task* task) return 0; } -extern const s16 gUnknown_083FD93A[]; - -bool8 Phase2_Transition11_Func4(struct Task* task) +static bool8 Phase2_Transition11_Func4(struct Task* task) { if (++task->data[1] < 7) { @@ -1914,7 +2093,7 @@ bool8 Phase2_Transition11_Func4(struct Task* task) } } -bool8 Phase2_Transition11_Func5(struct Task* task) +static bool8 Phase2_Transition11_Func5(struct Task* task) { if (--task->data[3] == 0) { -- cgit v1.2.3 From fc9f7853a0e8dde9f80c1e16bee3a05978d29d15 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 21 Aug 2017 23:40:13 +0200 Subject: up to sub_811D584 --- asm/battle_transition.s | 101 -------------------------------------------- data/battle_transition.s | 25 ----------- include/battle_transition.h | 6 +-- src/battle_transition.c | 52 +++++++++++++++++++++-- 4 files changed, 51 insertions(+), 133 deletions(-) diff --git a/asm/battle_transition.s b/asm/battle_transition.s index 2517b2aad..3e4929422 100644 --- a/asm/battle_transition.s +++ b/asm/battle_transition.s @@ -7,107 +7,6 @@ .text - thumb_func_start sub_811D4C8 -sub_811D4C8: @ 811D4C8 - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0x4 - mov r8, r0 - adds r4, r1, 0 - adds r5, r2, 0 - adds r6, r3, 0 - ldr r3, [sp, 0x18] - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 16 - lsrs r5, 16 - lsls r6, 16 - lsrs r6, 16 - lsls r3, 16 - lsrs r3, 16 - ldr r0, _0811D524 @ =sub_811D54C - movs r1, 0x3 - str r3, [sp] - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0811D528 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - mov r0, r8 - strh r0, [r1, 0xA] - strh r4, [r1, 0xC] - strh r5, [r1, 0xE] - strh r6, [r1, 0x10] - ldr r3, [sp] - strh r3, [r1, 0x12] - strh r0, [r1, 0x14] - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0811D524: .4byte sub_811D54C -_0811D528: .4byte gTasks - thumb_func_end sub_811D4C8 - - thumb_func_start sub_811D52C -sub_811D52C: @ 811D52C - push {lr} - ldr r0, _0811D540 @ =sub_811D54C - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - beq _0811D544 - movs r0, 0 - b _0811D546 - .align 2, 0 -_0811D540: .4byte sub_811D54C -_0811D544: - movs r0, 0x1 -_0811D546: - pop {r1} - bx r1 - thumb_func_end sub_811D52C - - thumb_func_start sub_811D54C -sub_811D54C: @ 811D54C - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _0811D57C @ =gUnknown_083FD948 - ldr r2, _0811D580 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_0811D55E: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _0811D55E - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0811D57C: .4byte gUnknown_083FD948 -_0811D580: .4byte gTasks - thumb_func_end sub_811D54C thumb_func_start sub_811D584 sub_811D584: @ 811D584 diff --git a/data/battle_transition.s b/data/battle_transition.s index 55f7defa6..3dd12ef76 100644 --- a/data/battle_transition.s +++ b/data/battle_transition.s @@ -4,31 +4,6 @@ .section .rodata -gUnknown_083FD8F4:: @ 83FD8F4 - .2byte 56, 0, 0, 160, 0 - .2byte 104, 160, 240, 88, 1 - .2byte 240, 72, 56, 0, 1 - .2byte 0, 32, 144, 160, 0 - .2byte 144, 160, 184, 0, 1 - .2byte 56, 0, 168, 160, 0 - .2byte 168, 160, 48, 0, 1 - - .align 1 -gUnknown_083FD93A:: @ 83FD93A - .2byte 8 - .2byte 4 - .2byte 2 - .2byte 1 - .2byte 1 - .2byte 1 - .2byte 0 - - .align 2 -gUnknown_083FD948:: @ 83FD948 - .4byte sub_811D584 - .4byte sub_811D5E0 - - .align 2 gSpriteImageTable_83FD950:: @ 83FD950 obj_frame_tiles gSpriteImage_83FC148, 0x200 diff --git a/include/battle_transition.h b/include/battle_transition.h index 9082b20ef..b2d897493 100644 --- a/include/battle_transition.h +++ b/include/battle_transition.h @@ -1,8 +1,8 @@ #ifndef GUARD_BATTLE_TRANSITION_H #define GUARD_BATTLE_TRANSITION_H -void sub_811AABC(u8); -void sub_811AAD8(u8); +void sub_811AABC(u8 transitionID); +void sub_811AAD8(u8 transitionID); bool8 IsBattleTransitionDone(void); #define TRANSITIONS_NO 17 @@ -18,7 +18,7 @@ enum // TRANSITION_MUGSHOT #define MUGSHOTS_NO 5 -// credits for the names goes to Dyskinesia +// credits for the names go to Dyskinesia #define B_TRANSITION_BLUR 0 #define B_TRANSITION_SMEAR 1 diff --git a/src/battle_transition.c b/src/battle_transition.c index c0770f793..9f4126822 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -160,9 +160,9 @@ static bool8 sub_811C938(struct Sprite* sprite); static bool8 sub_811C984(struct Sprite* sprite); static bool8 sub_811C9B8(struct Sprite* sprite); static bool8 sub_811C9E4(struct Sprite* sprite); +static void sub_811D4C8(s16 a0, s16 a1, s16 a2, s16 a3, s16 a4); +static bool8 sub_811D52C(void); -void sub_811D4C8(s16 a0, s16 a1, s16 a2, s16 a3, s16 a4); -bool8 sub_811D52C(void); void sub_811D658(void); void VBlankCB_BattleTransition(void); void sub_811D6E8(s16* a0, s16 a1, s16 a2, s16 a3, s16 a4, s16 a5); @@ -173,6 +173,9 @@ void sub_811D6D4(void); void sub_811D8FC(s16* a0, s16 a1, s16 a2, s16 a3, s16 a4, s16 a5, s16 a6); bool8 sub_811D978(s16* a0, bool8 a1, bool8 a2); void sub_811CFD0(struct Sprite* sprite); +void sub_811D54C(u8 taskID); +bool8 sub_811D584(struct Task* task); +bool8 sub_811D5E0(struct Task* task); // const data @@ -364,14 +367,31 @@ static const TransitionState sPhase2_Transition11_Funcs[] = &Phase2_Transition11_Func5 }; +static const s16 gUnknown_083FD8F4[][5] = +{ + {56, 0, 0, 160, 0}, + {104, 160, 240, 88, 1}, + {240, 72, 56, 0, 1}, + {0, 32, 144, 160, 0}, + {144, 160, 184, 0, 1}, + {56, 0, 168, 160, 0}, + {168, 160, 48, 0, 1}, +}; + +static const s16 gUnknown_083FD93A[] = {8, 4, 2, 1, 1, 1, 0}; + +static const TransitionState gUnknown_083FD948[] = +{ + &sub_811D584, + &sub_811D5E0 +}; + extern const u16 gFieldEffectObjectPalette10[]; extern const u16 gUnknown_083FDB44[]; extern const struct SpriteTemplate gSpriteTemplate_83FD98C; extern const u16 gUnknown_083FDFF4[]; extern const u8 * const sOpponentMugshotsPals[]; extern const u8 * const sPlayerMugshotsPals[2]; -extern const s16 gUnknown_083FD8F4[][5]; -extern const s16 gUnknown_083FD93A[]; // actual code starts here @@ -2116,3 +2136,27 @@ static void VBlankCB_Phase2_Transition11(void) REG_WIN0H = gUnknown_03004DE0[1][0]; DmaSet(0, gUnknown_03004DE0[1], ®_WIN0H, 0xA2400001); } + +static void sub_811D4C8(s16 a0, s16 a1, s16 a2, s16 a3, s16 a4) +{ + u8 taskID = CreateTask(sub_811D54C, 3); + gTasks[taskID].data[1] = a0; + gTasks[taskID].data[2] = a1; + gTasks[taskID].data[3] = a2; + gTasks[taskID].data[4] = a3; + gTasks[taskID].data[5] = a4; + gTasks[taskID].data[6] = a0; +} + +static bool8 sub_811D52C(void) +{ + if (FindTaskIdByFunc(sub_811D54C) == 0xFF) + return 1; + else + return 0; +} + +void sub_811D54C(u8 taskID) +{ + while (gUnknown_083FD948[gTasks[taskID].tState](&gTasks[taskID])); +} -- cgit v1.2.3 From 878b0d50996ba8be9d18a8c0df39b1f7f255033b Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Mon, 21 Aug 2017 18:46:20 -0400 Subject: thanks cam. --- asm/shop.s | 74 ---------- src/shop.c | 446 +++++++++++++------------------------------------------------ 2 files changed, 94 insertions(+), 426 deletions(-) diff --git a/asm/shop.s b/asm/shop.s index 05b86b1e2..edbbbdbad 100644 --- a/asm/shop.s +++ b/asm/shop.s @@ -6,80 +6,6 @@ .text - thumb_func_start sub_80B368C -sub_80B368C: @ 80B368C - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - movs r5, 0 - ldr r6, _080B3710 @ =gUnknown_020386A4 - adds r0, r6, 0x6 - mov r8, r0 - ldr r7, _080B3714 @ =gMapObjects -_080B369E: - lsls r4, r5, 3 - adds r1, r4, r6 - movs r2, 0 - ldrsh r0, [r1, r2] - cmp r0, 0x10 - beq _080B36F8 - adds r1, r0, 0 - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r7 - ldrb r0, [r0, 0x5] - adds r1, r6, 0x2 - adds r1, r4, r1 - ldrh r2, [r1] - lsls r2, 4 - adds r2, 0x8 - lsls r2, 16 - asrs r2, 16 - adds r1, r6, 0x4 - adds r1, r4, r1 - ldrh r3, [r1] - lsls r3, 20 - movs r1, 0x80 - lsls r1, 14 - adds r3, r1 - asrs r3, 16 - movs r1, 0x2 - str r1, [sp] - ldr r1, _080B3718 @ =SpriteCallbackDummy - bl AddPseudoFieldObject - lsls r0, 24 - lsrs r0, 24 - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - ldr r0, _080B371C @ =gSprites - adds r2, r0 - mov r1, r8 - adds r0, r4, r1 - ldrb r1, [r0] - adds r0, r2, 0 - bl StartSpriteAnim -_080B36F8: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0xF - bls _080B369E - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B3710: .4byte gUnknown_020386A4 -_080B3714: .4byte gMapObjects -_080B3718: .4byte SpriteCallbackDummy -_080B371C: .4byte gSprites - thumb_func_end sub_80B368C - thumb_func_start sub_80B3720 sub_80B3720: @ 80B3720 push {r4-r6,lr} diff --git a/src/shop.c b/src/shop.c index b832b5a26..06ec45292 100644 --- a/src/shop.c +++ b/src/shop.c @@ -17,6 +17,8 @@ #include "tv.h" #include "unknown_task.h" #include "field_map_obj.h" +#include "field_player_avatar.h" +#include "fieldmap.h" struct UnknownShopStruct { @@ -319,7 +321,7 @@ void BuyMenuDrawMapMetatileLayer(u16 *array, s16 offset1, s16 offset2, u16 *arra array[offset1 + offset2 + 33] = array2[3]; } -void BuyMenuDrawMapMetatile(int var1, int var2, u16 *var3, s8 var4) +void BuyMenuDrawMapMetatile(int var1, int var2, u16 *var3, s32 var4) { u8 tempVar4 = var4; s16 offset1 = var1 * 2; @@ -351,163 +353,44 @@ void sub_80B33D0(s16 var1, int var2, u16 *var3) BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[2], offset1, offset2, var3 + 4); } -// no. for loop too hard. -__attribute__((naked)) -void sub_80B3420() // dont know args +void sub_80B3420(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\ - sub sp, 0x4\n\ - mov r4, sp\n\ - adds r4, 0x2\n\ - mov r0, sp\n\ - adds r1, r4, 0\n\ - bl GetXYCoordsOneStepInFrontOfPlayer\n\ - mov r1, sp\n\ - mov r0, sp\n\ - ldrh r0, [r0]\n\ - subs r0, 0x3\n\ - strh r0, [r1]\n\ - ldrh r0, [r4]\n\ - subs r0, 0x3\n\ - strh r0, [r4]\n\ - movs r1, 0\n\ - ldr r0, _080B34A8 @ =0x000001ff\n\ - mov r10, r0\n\ - ldr r2, _080B34AC @ =gMapHeader\n\ - mov r9, r2\n\ -_080B3452:\n\ - movs r4, 0\n\ - lsls r1, 16\n\ - mov r8, r1\n\ - asrs r7, r1, 16\n\ -_080B345A:\n\ - mov r0, sp\n\ - movs r3, 0\n\ - ldrsh r0, [r0, r3]\n\ - lsls r4, 16\n\ - asrs r6, r4, 16\n\ - adds r0, r6\n\ - mov r2, sp\n\ - movs r3, 0x2\n\ - ldrsh r1, [r2, r3]\n\ - adds r1, r7\n\ - bl MapGridGetMetatileIdAt\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - cmp r7, 0x5\n\ - beq _080B34D0\n\ - cmp r6, 0x6\n\ - beq _080B34D0\n\ - mov r0, sp\n\ - movs r1, 0\n\ - ldrsh r0, [r0, r1]\n\ - adds r0, r6\n\ - mov r2, sp\n\ - movs r3, 0x2\n\ - ldrsh r1, [r2, r3]\n\ - adds r1, r7\n\ - bl MapGridGetMetatileLayerTypeAt\n\ - lsls r0, 24\n\ - lsrs r3, r0, 24\n\ - cmp r5, r10\n\ - bhi _080B34B0\n\ - mov r1, r9\n\ - ldr r0, [r1]\n\ - ldr r0, [r0, 0x10]\n\ - lsls r1, r5, 4\n\ - ldr r2, [r0, 0xC]\n\ - adds r2, r1\n\ - b _080B34C0\n\ - .align 2, 0\n\ -_080B34A8: .4byte 0x000001ff\n\ -_080B34AC: .4byte gMapHeader\n\ -_080B34B0:\n\ - mov r2, r9\n\ - ldr r0, [r2]\n\ - ldr r1, [r0, 0x14]\n\ - ldr r2, _080B34CC @ =0xfffffe00\n\ - adds r0, r5, r2\n\ - lsls r0, 4\n\ - ldr r2, [r1, 0xC]\n\ - adds r2, r0\n\ -_080B34C0:\n\ - adds r0, r6, 0\n\ - adds r1, r7, 0\n\ - bl BuyMenuDrawMapMetatile\n\ - b _080B3506\n\ - .align 2, 0\n\ -_080B34CC: .4byte 0xfffffe00\n\ -_080B34D0:\n\ - cmp r5, r10\n\ - bhi _080B34EC\n\ - asrs r0, r4, 16\n\ - mov r3, r9\n\ - ldr r1, [r3]\n\ - ldr r1, [r1, 0x10]\n\ - lsls r3, r5, 4\n\ - ldr r2, [r1, 0xC]\n\ - adds r2, r3\n\ - mov r3, r8\n\ - asrs r1, r3, 16\n\ - bl sub_80B33D0\n\ - b _080B3506\n\ -_080B34EC:\n\ - asrs r0, r4, 16\n\ - mov r2, r9\n\ - ldr r1, [r2]\n\ - ldr r2, [r1, 0x14]\n\ - ldr r3, _080B354C @ =0xfffffe00\n\ - adds r1, r5, r3\n\ - lsls r1, 4\n\ - ldr r2, [r2, 0xC]\n\ - adds r2, r1\n\ - mov r3, r8\n\ - asrs r1, r3, 16\n\ - bl sub_80B33D0\n\ -_080B3506:\n\ - cmp r7, 0\n\ - bne _080B3520\n\ - asrs r1, r4, 16\n\ - cmp r1, 0\n\ - beq _080B3520\n\ - cmp r1, 0x6\n\ - beq _080B3520\n\ - lsls r1, 17\n\ - asrs r1, 16\n\ - ldr r0, _080B3550 @ =gBGTilemapBuffers + 0x800\n\ - movs r2, 0x40\n\ - bl sub_80B32EC\n\ -_080B3520:\n\ - movs r1, 0x80\n\ - lsls r1, 9\n\ - adds r0, r4, r1\n\ - lsrs r4, r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x6\n\ - ble _080B345A\n\ - adds r0, r1, 0\n\ - add r0, r8\n\ - lsrs r1, r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x5\n\ - ble _080B3452\n\ - add sp, 0x4\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\ -_080B354C: .4byte 0xfffffe00\n\ -_080B3550: .4byte gBGTilemapBuffers + 0x800\n\ - .syntax divided"); + s16 facingX; + s16 facingY; + s16 x; + s16 y; + + GetXYCoordsOneStepInFrontOfPlayer(&facingX, &facingY); + facingX -= 3; + facingY -= 3; + + for (y = 0; y < 6; y++) + { + for (x = 0; x < 7; x++) + { + u16 metatileId = MapGridGetMetatileIdAt(facingX + x, facingY + y); + + if (y != 5 && x != 6) + { + s32 r3 = MapGridGetMetatileLayerTypeAt(facingX + x, facingY + y); + + if (metatileId < 512) + BuyMenuDrawMapMetatile(x, y, (u16 *)gMapHeader.mapData->primaryTileset->metatiles + metatileId * 8, r3); + else + BuyMenuDrawMapMetatile(x, y, (u16 *)gMapHeader.mapData->secondaryTileset->metatiles + (metatileId - 512) * 8, r3); + } + else + { + if (metatileId < 512) + sub_80B33D0(x, y, (u16 *)gMapHeader.mapData->primaryTileset->metatiles + metatileId * 8); + else + sub_80B33D0(x, y, (u16 *)gMapHeader.mapData->secondaryTileset->metatiles + (metatileId - 512) * 8); + } + + if (y == 0 && x != 0 && x != 6) + sub_80B32EC(gBGTilemapBuffers[1], x * 2, 64); + } + } } void BuyMenuDrawMapGraphics(void) @@ -518,202 +401,61 @@ void BuyMenuDrawMapGraphics(void) sub_80B3420(); } -// yet another difficult multi for-loop. No. -__attribute__((naked)) -void sub_80B356C(void) // PopulateShopViewWindowObjectInfo ? +extern s16 gUnknown_020386A4[][4]; + +void sub_80B356C(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\ - sub sp, 0x8\n\ - movs r0, 0\n\ - mov r8, r0\n\ - mov r4, sp\n\ - adds r4, 0x2\n\ - mov r0, sp\n\ - adds r1, r4, 0\n\ - bl GetXYCoordsOneStepInFrontOfPlayer\n\ - bl PlayerGetZCoord\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - str r0, [sp, 0x4]\n\ - movs r5, 0\n\ - ldr r2, _080B3674 @ =gUnknown_020386A4\n\ - movs r1, 0x10\n\ -_080B3598:\n\ - lsls r0, r5, 3\n\ - adds r0, r2\n\ - strh r1, [r0]\n\ - adds r0, r5, 0x1\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - cmp r5, 0xF\n\ - bls _080B3598\n\ - movs r5, 0\n\ - ldr r7, _080B3678 @ =gUnknown_020386AA\n\ - subs r1, r7, 0x6\n\ - mov r9, r1\n\ -_080B35B0:\n\ - movs r4, 0\n\ - adds r2, r5, 0x1\n\ - mov r10, r2\n\ -_080B35B6:\n\ - mov r1, sp\n\ - ldr r3, _080B367C @ =0x0000fffd\n\ - adds r0, r3, 0\n\ - ldrh r1, [r1]\n\ - adds r0, r1\n\ - adds r0, r4\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - ldr r2, _080B3680 @ =0x0000fffe\n\ - adds r1, r2, 0\n\ - mov r3, sp\n\ - ldrh r3, [r3, 0x2]\n\ - adds r1, r3\n\ - adds r1, r5\n\ - lsls r1, 16\n\ - lsrs r1, 16\n\ - ldr r2, [sp, 0x4]\n\ - bl GetFieldObjectIdByXYZ\n\ - lsls r0, 24\n\ - lsrs r2, r0, 24\n\ - cmp r2, 0x10\n\ - beq _080B3650\n\ - mov r0, r8\n\ - lsls r3, r0, 3\n\ - mov r1, r9\n\ - adds r0, r3, r1\n\ - movs r6, 0\n\ - strh r2, [r0]\n\ - mov r0, r9\n\ - adds r0, 0x2\n\ - adds r0, r3, r0\n\ - strh r4, [r0]\n\ - ldr r1, _080B3684 @ =gUnknown_020386A8\n\ - adds r0, r3, r1\n\ - strh r5, [r0]\n\ - ldr r1, _080B3688 @ =gMapObjects\n\ - lsls r0, r2, 3\n\ - adds r0, r2\n\ - lsls r0, 2\n\ - adds r2, r0, r1\n\ - ldrb r0, [r2, 0x18]\n\ - lsls r0, 28\n\ - lsrs r0, 28\n\ - cmp r0, 0x1\n\ - bne _080B3616\n\ - adds r0, r3, r7\n\ - strh r6, [r0]\n\ -_080B3616:\n\ - ldrb r0, [r2, 0x18]\n\ - lsls r0, 28\n\ - lsrs r0, 28\n\ - cmp r0, 0x2\n\ - bne _080B3626\n\ - adds r1, r3, r7\n\ - movs r0, 0x1\n\ - strh r0, [r1]\n\ -_080B3626:\n\ - ldrb r0, [r2, 0x18]\n\ - lsls r0, 28\n\ - lsrs r0, 28\n\ - cmp r0, 0x3\n\ - bne _080B3636\n\ - adds r1, r3, r7\n\ - movs r0, 0x2\n\ - strh r0, [r1]\n\ -_080B3636:\n\ - ldrb r0, [r2, 0x18]\n\ - lsls r0, 28\n\ - lsrs r0, 28\n\ - cmp r0, 0x4\n\ - bne _080B3646\n\ - adds r1, r3, r7\n\ - movs r0, 0x3\n\ - strh r0, [r1]\n\ -_080B3646:\n\ - mov r0, r8\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r8, r0\n\ -_080B3650:\n\ - adds r0, r4, 0x1\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - cmp r4, 0x6\n\ - bls _080B35B6\n\ - mov r2, r10\n\ - lsls r0, r2, 24\n\ - lsrs r5, r0, 24\n\ - cmp r5, 0x4\n\ - bls _080B35B0\n\ - add sp, 0x8\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\ -_080B3674: .4byte gUnknown_020386A4\n\ -_080B3678: .4byte gUnknown_020386AA\n\ -_080B367C: .4byte 0x0000fffd\n\ -_080B3680: .4byte 0x0000fffe\n\ -_080B3684: .4byte gUnknown_020386A8\n\ -_080B3688: .4byte gMapObjects\n\ - .syntax divided"); + s16 facingX; + s16 facingY; + u8 playerHeight; + u8 y; + u8 x; + u8 r8 = 0; + + GetXYCoordsOneStepInFrontOfPlayer(&facingX, &facingY); + playerHeight = PlayerGetZCoord(); + for (y = 0; y < 16; y++) + gUnknown_020386A4[y][0] = 16; + for (y = 0; y < 5; y++) + { + for (x = 0; x < 7; x++) + { + u8 mapObjId = GetFieldObjectIdByXYZ(facingX - 3 + x, facingY - 2 + y, playerHeight); + + if (mapObjId != 16) + { + gUnknown_020386A4[r8][0] = mapObjId; + gUnknown_020386A4[r8][1] = x; + gUnknown_020386A4[r8][2] = y; + if (gMapObjects[mapObjId].mapobj_unk_18 == 1) + gUnknown_020386A4[r8][3] = 0; + if (gMapObjects[mapObjId].mapobj_unk_18 == 2) + gUnknown_020386A4[r8][3] = 1; + if (gMapObjects[mapObjId].mapobj_unk_18 == 3) + gUnknown_020386A4[r8][3] = 2; + if (gMapObjects[mapObjId].mapobj_unk_18 == 4) + gUnknown_020386A4[r8][3] = 3; + r8++; + } + } + } } -/* -struct UnkStruct_20386A4 -{ - s16 mapObjId; - u16 unk2; - u16 unk4; - u8 unk6[2]; -}; -*/ - -//extern s16 gUnknown_020386A4[][]; -//extern struct UnkStruct_20386A4 gUnknown_020386A4[]; -// all 3 of these are incredibly hard, please help -/*void sub_80B368C(void) +void sub_80B368C(void) { - // r0 = spriteId - // r1 = gUnknown_020386A4 + 6 - // r2 = gSprites[spriteId] - // r3 = gUnknown_020386A4[i].unk4 + 32 - // r4 = i * 8 - // r5 = 0 (i) - // r6 = gUnknown_020386A4 - // r7 = gMapObjects - // r8 = gUnknown_020386A4 + 6 - // r9 = - // r10 = - // r11 = - // r12 = - - u8 i = 0; - u8 *unkArray = (u8 *)&gUnknown_020386A4[6]; - - for(; i < 16; i++) // max objects? - { - s16 mapObjId = unkStruct[i].mapObjId; - if(mapObjId != 16) - { - u8 spriteId = AddPseudoFieldObject( - gMapObjects[mapObjId].graphicsId, - SpriteCallbackDummy, - unkStruct[i].unk2 * 16 + 8, - unkStruct[i].unk4 + 12, - 2); - StartSpriteAnim(&gSprites[spriteId], unkArray[i]); - } - } -}*/ + u8 i; + + for(i = 0; i < 16; i++) // max objects? + { + if(gUnknown_020386A4[i][0] == 16) + continue; + + StartSpriteAnim(&gSprites[AddPseudoFieldObject( + gMapObjects[gUnknown_020386A4[i][0]].graphicsId, + SpriteCallbackDummy, + (u16)gUnknown_020386A4[i][1] * 16 + 8, + (u16)gUnknown_020386A4[i][2] * 16 + 32, + 2)], + gUnknown_020386A4[i][3]); + } +} -- cgit v1.2.3 From 05c2f2e4fc7ad2fc98315e53a0b1adb7d4d4c0d1 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Tue, 22 Aug 2017 02:33:18 -0400 Subject: decompile up to sub_80B37F8 --- asm/shop.s | 193 ------------------------------------------------------------- src/shop.c | 121 +++++++++++++++++++++++++++++--------- 2 files changed, 93 insertions(+), 221 deletions(-) diff --git a/asm/shop.s b/asm/shop.s index edbbbdbad..4c284fc4e 100644 --- a/asm/shop.s +++ b/asm/shop.s @@ -6,199 +6,6 @@ .text - thumb_func_start sub_80B3720 -sub_80B3720: @ 80B3720 - push {r4-r6,lr} - movs r1, 0 - ldr r6, _080B3754 @ =gBGTilemapBuffers + 0x800 - ldr r5, _080B3758 @ =0x000003ff - ldr r4, _080B375C @ =0x02018000 - ldr r0, _080B3760 @ =0x0000c3e0 - adds r3, r0, 0 -_080B372E: - lsls r0, r1, 16 - asrs r2, r0, 16 - lsls r1, r2, 1 - adds r0, r1, r4 - ldrh r0, [r0] - cmp r0, 0 - beq _080B3742 - adds r1, r6 - adds r0, r3 - strh r0, [r1] -_080B3742: - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - asrs r0, 16 - cmp r0, r5 - ble _080B372E - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B3754: .4byte gBGTilemapBuffers + 0x800 -_080B3758: .4byte 0x000003ff -_080B375C: .4byte 0x02018000 -_080B3760: .4byte 0x0000c3e0 - thumb_func_end sub_80B3720 - - thumb_func_start sub_80B3764 -sub_80B3764: @ 80B3764 - push {r4,r5,lr} - sub sp, 0x8 - adds r4, r0, 0 - adds r5, r1, 0 - bl sub_80B3720 - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0 - bl sub_80B39D0 - ldr r0, _080B3798 @ =gUnknown_03000708 - ldrb r0, [r0, 0x9] - str r0, [sp] - movs r0, 0xF - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0xE - movs r2, 0x2 - movs r3, 0x8 - bl InitMenu - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B3798: .4byte gUnknown_03000708 - thumb_func_end sub_80B3764 - - thumb_func_start sub_80B379C -sub_80B379C: @ 80B379C - push {r4-r7,lr} - movs r1, 0 - ldr r0, _080B37E0 @ =gBGTilemapBuffers + 0x800 - mov r12, r0 - ldr r7, _080B37E4 @ =0x02018300 - ldr r0, _080B37E8 @ =0x0000c3e0 - adds r6, r0, 0 -_080B37AA: - movs r2, 0 - adds r0, r1, 0 - adds r0, 0xC - adds r5, r1, 0x1 - lsls r4, r0, 5 - lsls r3, r1, 5 -_080B37B6: - adds r1, r4, r2 - lsls r1, 1 - add r1, r12 - adds r0, r3, r2 - lsls r0, 1 - adds r0, r7 - ldrh r0, [r0] - adds r0, r6, r0 - strh r0, [r1] - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0xD - bls _080B37B6 - lsls r0, r5, 16 - lsrs r1, r0, 16 - cmp r1, 0x7 - bls _080B37AA - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B37E0: .4byte gBGTilemapBuffers + 0x800 -_080B37E4: .4byte 0x02018300 -_080B37E8: .4byte 0x0000c3e0 - thumb_func_end sub_80B379C - - thumb_func_start sub_80B37EC -sub_80B37EC: @ 80B37EC - push {lr} - bl sub_80B3A70 - pop {r0} - bx r0 - thumb_func_end sub_80B37EC - - thumb_func_start sub_80B37F8 -sub_80B37F8: @ 80B37F8 - push {r4-r6,lr} - sub sp, 0x8 - adds r6, r0, 0 - lsls r6, 24 - lsrs r6, 24 - ldr r1, _080B3884 @ =gUnknown_03000708 - ldrb r0, [r1, 0xB] - ldrb r2, [r1, 0x9] - adds r0, r2 - ldr r1, [r1, 0x4] - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - bl ItemId_GetPrice - adds r4, r0, 0 - movs r0, 0x1 - bl GetPriceReduction - lsls r4, 16 - lsrs r4, 16 - lsls r0, 24 - lsrs r0, 24 - asrs r4, r0 - ldr r0, _080B3888 @ =gTasks - lsls r5, r6, 2 - adds r5, r6 - lsls r5, 3 - adds r5, r0 - movs r1, 0xA - ldrsh r0, [r5, r1] - muls r0, r4 - movs r1, 0x6 - movs r2, 0x6 - movs r3, 0xB - bl sub_80B7A94 - ldr r0, _080B388C @ =gStringVar1 - movs r1, 0xFC - strb r1, [r0] - movs r1, 0x14 - strb r1, [r0, 0x1] - movs r1, 0x6 - strb r1, [r0, 0x2] - adds r0, 0x3 - movs r2, 0xA - ldrsh r1, [r5, r2] - movs r2, 0x1 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - ldr r0, _080B3890 @ =gOtherText_xString1 - movs r1, 0x1 - movs r2, 0xB - bl MenuPrint - ldr r0, _080B3894 @ =gBGTilemapBuffers + 0x800 - movs r1, 0x2 - str r1, [sp] - ldr r1, _080B3898 @ =0x0000c3e1 - str r1, [sp, 0x4] - movs r1, 0x1 - movs r2, 0xB - movs r3, 0xC - bl sub_80A3FA0 - add sp, 0x8 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B3884: .4byte gUnknown_03000708 -_080B3888: .4byte gTasks -_080B388C: .4byte gStringVar1 -_080B3890: .4byte gOtherText_xString1 -_080B3894: .4byte gBGTilemapBuffers + 0x800 -_080B3898: .4byte 0x0000c3e1 - thumb_func_end sub_80B37F8 - thumb_func_start sub_80B389C sub_80B389C: @ 80B389C push {r4-r7,lr} diff --git a/src/shop.c b/src/shop.c index 06ec45292..aca48cc2e 100644 --- a/src/shop.c +++ b/src/shop.c @@ -19,13 +19,17 @@ #include "field_map_obj.h" #include "field_player_avatar.h" #include "fieldmap.h" +#include "item.h" + +extern void sub_80B39D0(int, int, int); +extern void sub_80B3A70(void); struct UnknownShopStruct { /* 0x0 */ void (* callback) (void); /* 0x4 */ u16 *itemList; /* 0x8 */ u8 itemCount; - /* 0x9 */ u8 unk9; + /* 0x9 */ u8 cursor; /* 0xA */ u8 unkA; /* 0xB */ u8 unkB; /* 0xC */ bool8 unkC; @@ -35,10 +39,26 @@ struct UnknownShopStruct extern struct UnknownShopStruct gUnknown_03000708; extern struct MenuAction gUnknown_083CC6D0[]; +extern u8 ewram[]; + extern u8 gUnknown_083CC6E8[]; extern u8 gUnknown_083CC6EB[]; extern u8 gBuyMenuFrame_Gfx[]; +#define ewram18000 ((u16 *)(ewram + 0x18000)) +#define ewram18300 ((u16 *)(ewram + 0x18300)) + +// shop view window NPC info enum +enum +{ + MAP_OBJ_ID, + X_COORD, + Y_COORD, + ANIM_NUM +}; + +extern s16 gUnknown_020386A4[][4]; // game freak barely uses 2d arrays wtf? + extern u16 gBuyMenuFrame_Tilemap[]; extern u16 gMenuMoneyPal[16]; extern u16 gUnknown_083CC710[2]; @@ -47,7 +67,7 @@ u8 CreateShopMenu(bool8 var) { ScriptContext2_Enable(); gUnknown_03000708.unkC = var; - gUnknown_03000708.unk9 = 0; + gUnknown_03000708.cursor = 0; if(var == FALSE) { @@ -89,35 +109,35 @@ void sub_80B2E38(u8 var) { const u8 local = var; - if(gMain.newAndRepeatedKeys & 0x40) + if(gMain.newAndRepeatedKeys & DPAD_UP) { - if(gUnknown_03000708.unk9) + if(gUnknown_03000708.cursor) // can move cursor up? { PlaySE(0x5); - gUnknown_03000708.unk9 = MoveMenuCursor(-1); + gUnknown_03000708.cursor = MoveMenuCursor(-1); } } - else if(gMain.newAndRepeatedKeys & 0x80) + else if(gMain.newAndRepeatedKeys & DPAD_DOWN) { - if(gUnknown_03000708.unk9 != gUnknown_03000708.unkA) + if(gUnknown_03000708.cursor != gUnknown_03000708.unkA) // can move cursor down? { PlaySE(0x5); - gUnknown_03000708.unk9 = MoveMenuCursor(1); + gUnknown_03000708.cursor = MoveMenuCursor(1); } } - else if (gMain.newKeys & 1) + else if (gMain.newKeys & A_BUTTON) { PlaySE(0x5); if(!gUnknown_03000708.unkC) { - gUnknown_083CC6D0[gUnknown_083CC6E8[gUnknown_03000708.unk9]].func(local); + gUnknown_083CC6D0[gUnknown_083CC6E8[gUnknown_03000708.cursor]].func(local); } else { - gUnknown_083CC6D0[gUnknown_083CC6EB[gUnknown_03000708.unk9]].func(local); + gUnknown_083CC6D0[gUnknown_083CC6EB[gUnknown_03000708.cursor]].func(local); } } - else if(gMain.newKeys & 2) + else if(gMain.newKeys & B_BUTTON) { PlaySE(0x5); HandleShopMenuQuit(local); @@ -256,7 +276,7 @@ void BuyMenuDrawGraphics(void) SetUpWindowConfig(&gWindowConfig_81E6DFC); InitMenuWindow(&gWindowConfig_81E6DFC); BuyMenuDrawMapGraphics(); - gUnknown_03000708.unk9 = zero; + gUnknown_03000708.cursor = zero; gUnknown_03000708.unkB = zero2; MenuZeroFillWindowRect(0, 0, 0x20, 0x20); sub_80B7C14(gSaveBlock1.money, 0, 0); @@ -401,8 +421,6 @@ void BuyMenuDrawMapGraphics(void) sub_80B3420(); } -extern s16 gUnknown_020386A4[][4]; - void sub_80B356C(void) { s16 facingX; @@ -415,7 +433,7 @@ void sub_80B356C(void) GetXYCoordsOneStepInFrontOfPlayer(&facingX, &facingY); playerHeight = PlayerGetZCoord(); for (y = 0; y < 16; y++) - gUnknown_020386A4[y][0] = 16; + gUnknown_020386A4[y][MAP_OBJ_ID] = 16; for (y = 0; y < 5; y++) { for (x = 0; x < 7; x++) @@ -424,17 +442,17 @@ void sub_80B356C(void) if (mapObjId != 16) { - gUnknown_020386A4[r8][0] = mapObjId; - gUnknown_020386A4[r8][1] = x; - gUnknown_020386A4[r8][2] = y; + gUnknown_020386A4[r8][MAP_OBJ_ID] = mapObjId; + gUnknown_020386A4[r8][X_COORD] = x; + gUnknown_020386A4[r8][Y_COORD] = y; if (gMapObjects[mapObjId].mapobj_unk_18 == 1) - gUnknown_020386A4[r8][3] = 0; + gUnknown_020386A4[r8][ANIM_NUM] = 0; if (gMapObjects[mapObjId].mapobj_unk_18 == 2) - gUnknown_020386A4[r8][3] = 1; + gUnknown_020386A4[r8][ANIM_NUM] = 1; if (gMapObjects[mapObjId].mapobj_unk_18 == 3) - gUnknown_020386A4[r8][3] = 2; + gUnknown_020386A4[r8][ANIM_NUM] = 2; if (gMapObjects[mapObjId].mapobj_unk_18 == 4) - gUnknown_020386A4[r8][3] = 3; + gUnknown_020386A4[r8][ANIM_NUM] = 3; r8++; } } @@ -447,15 +465,62 @@ void sub_80B368C(void) for(i = 0; i < 16; i++) // max objects? { - if(gUnknown_020386A4[i][0] == 16) + if(gUnknown_020386A4[i][MAP_OBJ_ID] == 16) continue; StartSpriteAnim(&gSprites[AddPseudoFieldObject( - gMapObjects[gUnknown_020386A4[i][0]].graphicsId, + gMapObjects[gUnknown_020386A4[i][MAP_OBJ_ID]].graphicsId, SpriteCallbackDummy, - (u16)gUnknown_020386A4[i][1] * 16 + 8, - (u16)gUnknown_020386A4[i][2] * 16 + 32, + (u16)gUnknown_020386A4[i][X_COORD] * 16 + 8, + (u16)gUnknown_020386A4[i][Y_COORD] * 16 + 32, 2)], - gUnknown_020386A4[i][3]); + gUnknown_020386A4[i][ANIM_NUM]); + } +} + +void sub_80B3720(void) +{ + s16 i; + + for (i = 0; i < 0x400; i++) + { + if (ewram18000[i] != 0) + gBGTilemapBuffers[1][i] = ewram18000[i] + 0xC3E0; } } + +void sub_80B3764(int var1, int var2) +{ + sub_80B3720(); + sub_80B39D0(var1, var2, 0); + InitMenu(0, 0xE, 0x2, 0x8, gUnknown_03000708.cursor, 0xF); +} + +void sub_80B379C(void) +{ + u16 i, j; + + for(i = 0; i < 8; i++) + for(j = 0; j < 14; j++) + gBGTilemapBuffers[1][32 * (i + 12) + j] = ewram18300[32 * i + j] + 0xC3E0; +} + +void sub_80B37EC(void) +{ + sub_80B3A70(); +} + +void sub_80B37F8(u8 taskId) +{ + u16 itemListIndex = gUnknown_03000708.unkB + gUnknown_03000708.cursor; + u16 itemId = *(gUnknown_03000708.itemList + itemListIndex); + u32 price = (ItemId_GetPrice(itemId) >> GetPriceReduction(1)); + + sub_80B7A94(gTasks[taskId].data[1] * price, 6, 6, 11); + gStringVar1[0] = EXT_CTRL_CODE_BEGIN; + gStringVar1[1] = 0x14; + gStringVar1[2] = 0x6; + ConvertIntToDecimalStringN(&gStringVar1[3], gTasks[taskId].data[1], 1, 2); + MenuPrint(gOtherText_xString1, 1, 11); + sub_80A3FA0(gBGTilemapBuffers[1], 1, 11, 12, 2, 0xC3E1); +} -- cgit v1.2.3 From be47f6b54bd4b586d435d6fbff56bc315ff72efc Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 22 Aug 2017 17:10:50 +0200 Subject: a really hard math function --- asm/battle_transition.s | 481 -------------------------------------------- include/battle_transition.h | 34 ++-- src/battle_transition.c | 353 +++++++++++++++++++++++--------- 3 files changed, 280 insertions(+), 588 deletions(-) diff --git a/asm/battle_transition.s b/asm/battle_transition.s index 3e4929422..f99f53fb3 100644 --- a/asm/battle_transition.s +++ b/asm/battle_transition.s @@ -8,487 +8,6 @@ - thumb_func_start sub_811D584 -sub_811D584: @ 811D584 - push {r4,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0x14] - movs r2, 0x14 - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _0811D59C - subs r0, r1, 0x1 - strh r0, [r4, 0x14] - lsls r0, 16 - cmp r0, 0 - bne _0811D5C0 -_0811D59C: - ldrh r0, [r4, 0xA] - strh r0, [r4, 0x14] - ldrh r0, [r4, 0x10] - ldrh r1, [r4, 0x16] - adds r0, r1 - strh r0, [r4, 0x16] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x10 - ble _0811D5B4 - movs r0, 0x10 - strh r0, [r4, 0x16] -_0811D5B4: - movs r0, 0x1 - negs r0, r0 - ldrb r1, [r4, 0x16] - ldr r2, _0811D5DC @ =0x00002d6b - bl BlendPalettes -_0811D5C0: - movs r2, 0x16 - ldrsh r0, [r4, r2] - cmp r0, 0xF - ble _0811D5D2 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - ldrh r0, [r4, 0xC] - strh r0, [r4, 0x14] -_0811D5D2: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0811D5DC: .4byte 0x00002d6b - thumb_func_end sub_811D584 - - thumb_func_start sub_811D5E0 -sub_811D5E0: @ 811D5E0 - push {r4,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0x14] - movs r2, 0x14 - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _0811D5F8 - subs r0, r1, 0x1 - strh r0, [r4, 0x14] - lsls r0, 16 - cmp r0, 0 - bne _0811D61A -_0811D5F8: - ldrh r0, [r4, 0xC] - strh r0, [r4, 0x14] - ldrh r0, [r4, 0x16] - ldrh r1, [r4, 0x12] - subs r0, r1 - strh r0, [r4, 0x16] - lsls r0, 16 - cmp r0, 0 - bge _0811D60E - movs r0, 0 - strh r0, [r4, 0x16] -_0811D60E: - movs r0, 0x1 - negs r0, r0 - ldrb r1, [r4, 0x16] - ldr r2, _0811D640 @ =0x00002d6b - bl BlendPalettes -_0811D61A: - movs r0, 0x16 - ldrsh r1, [r4, r0] - cmp r1, 0 - bne _0811D64E - ldrh r0, [r4, 0xE] - subs r0, 0x1 - strh r0, [r4, 0xE] - lsls r0, 16 - cmp r0, 0 - bne _0811D648 - ldr r0, _0811D644 @ =sub_811D54C - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - b _0811D64E - .align 2, 0 -_0811D640: .4byte 0x00002d6b -_0811D644: .4byte sub_811D54C -_0811D648: - ldrh r0, [r4, 0xA] - strh r0, [r4, 0x14] - strh r1, [r4, 0x8] -_0811D64E: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_811D5E0 - - thumb_func_start sub_811D658 -sub_811D658: @ 811D658 - push {lr} - ldr r0, _0811D674 @ =sTransitionStructPtr - ldr r0, [r0] - movs r1, 0 - movs r2, 0x3C - bl memset - ldr r0, _0811D678 @ =0x0200c014 - adds r1, r0, 0x2 - bl sub_8057B14 - pop {r0} - bx r0 - .align 2, 0 -_0811D674: .4byte sTransitionStructPtr -_0811D678: .4byte 0x0200c014 - thumb_func_end sub_811D658 - - thumb_func_start VBlankCB_BattleTransition -VBlankCB_BattleTransition: @ 811D67C - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end VBlankCB_BattleTransition - - thumb_func_start sub_811D690 -sub_811D690: @ 811D690 - ldr r1, _0811D6A4 @ =REG_BG0CNT - ldrh r1, [r1] - lsrs r1, 2 - lsls r1, 30 - lsrs r1, 16 - movs r2, 0xC0 - lsls r2, 19 - adds r1, r2 - str r1, [r0] - bx lr - .align 2, 0 -_0811D6A4: .4byte REG_BG0CNT - thumb_func_end sub_811D690 - - thumb_func_start sub_811D6A8 -sub_811D6A8: @ 811D6A8 - push {r4,lr} - ldr r3, _0811D6D0 @ =REG_BG0CNT - ldrh r2, [r3] - lsrs r2, 8 - ldrh r3, [r3] - lsrs r3, 2 - lsls r2, 27 - lsrs r2, 16 - lsls r3, 30 - lsrs r3, 16 - movs r4, 0xC0 - lsls r4, 19 - adds r2, r4 - str r2, [r0] - adds r3, r4 - str r3, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0811D6D0: .4byte REG_BG0CNT - thumb_func_end sub_811D6A8 - - thumb_func_start sub_811D6D4 -sub_811D6D4: @ 811D6D4 - push {lr} - movs r0, 0x1 - negs r0, r0 - movs r1, 0x10 - movs r2, 0 - bl BlendPalettes - pop {r0} - bx r0 - thumb_func_end sub_811D6D4 - - thumb_func_start sub_811D6E8 -sub_811D6E8: @ 811D6E8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - mov r10, r0 - ldr r0, [sp, 0x20] - ldr r4, [sp, 0x24] - lsls r1, 16 - lsrs r7, r1, 16 - lsls r2, 16 - lsrs r2, 16 - lsls r3, 16 - lsrs r3, 16 - lsls r0, 16 - lsrs r1, r0, 16 - lsls r4, 16 - movs r6, 0 - lsrs r5, r4, 16 - cmp r4, 0 - ble _0811D750 - lsls r0, r7, 16 - asrs r0, 16 - mov r9, r0 - lsls r1, 16 - mov r8, r1 - lsls r0, r3, 16 - asrs r7, r0, 16 -_0811D720: - lsls r4, r2, 16 - asrs r4, 16 - movs r0, 0xFF - ands r0, r4 - mov r2, r8 - asrs r1, r2, 16 - bl Sin - lsls r1, r6, 1 - add r1, r10 - add r0, r9 - strh r0, [r1] - lsls r1, r5, 16 - ldr r0, _0811D760 @ =0xffff0000 - adds r1, r0 - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - adds r4, r7 - lsls r4, 16 - lsrs r2, r4, 16 - lsrs r5, r1, 16 - cmp r1, 0 - bgt _0811D720 -_0811D750: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0811D760: .4byte 0xffff0000 - thumb_func_end sub_811D6E8 - - thumb_func_start sub_811D764 -sub_811D764: @ 811D764 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x14 - mov r9, r0 - adds r5, r2, 0 - adds r4, r3, 0 - lsls r1, 16 - lsrs r1, 16 - str r1, [sp] - lsls r5, 16 - lsrs r5, 16 - lsls r4, 16 - lsrs r4, 16 - movs r2, 0xA0 - lsls r2, 1 - movs r1, 0xA - bl memset - movs r1, 0 - lsls r4, 16 - asrs r4, 16 - str r4, [sp, 0x4] - lsls r5, 16 - asrs r5, 16 - str r5, [sp, 0x8] -_0811D79C: - lsls r5, r1, 16 - asrs r0, r5, 16 - mov r10, r0 - ldr r1, [sp, 0x4] - bl Sin - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - mov r0, r10 - ldr r1, [sp, 0x4] - bl Cos - ldr r2, [sp] - lsls r1, r2, 16 - asrs r1, 16 - lsls r4, 16 - asrs r4, 16 - subs r2, r1, r4 - lsls r2, 16 - adds r1, r4 - lsls r1, 16 - lsrs r6, r1, 16 - lsls r0, 16 - asrs r0, 16 - ldr r3, [sp, 0x8] - subs r1, r3, r0 - lsls r1, 16 - lsrs r7, r1, 16 - adds r0, r3, r0 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - lsrs r1, r2, 16 - str r5, [sp, 0x10] - cmp r2, 0 - bge _0811D7E8 - movs r1, 0 -_0811D7E8: - lsls r0, r6, 16 - asrs r0, 16 - cmp r0, 0xF0 - ble _0811D7F2 - movs r6, 0xF0 -_0811D7F2: - lsls r0, r7, 16 - cmp r0, 0 - bge _0811D7FA - movs r7, 0 -_0811D7FA: - mov r2, r8 - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0x9F - ble _0811D808 - movs r3, 0x9F - mov r8, r3 -_0811D808: - lsls r0, r1, 24 - lsrs r0, 16 - orrs r6, r0 - lsls r0, r7, 16 - asrs r0, 16 - str r0, [sp, 0xC] - lsls r0, 1 - add r0, r9 - strh r6, [r0] - mov r0, r8 - lsls r4, r0, 16 - asrs r0, r4, 15 - add r0, r9 - strh r6, [r0] - mov r0, r10 - adds r0, 0x1 - lsls r0, 16 - asrs r0, 16 - ldr r1, [sp, 0x4] - bl Cos - lsls r0, 16 - asrs r0, 16 - ldr r2, [sp, 0x8] - subs r1, r2, r0 - lsls r1, 16 - adds r0, r2, r0 - lsls r0, 16 - lsrs r2, r0, 16 - lsrs r3, r1, 16 - cmp r1, 0 - bge _0811D84A - movs r3, 0 -_0811D84A: - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0x9F - ble _0811D854 - movs r2, 0x9F -_0811D854: - lsls r0, r3, 16 - asrs r1, r0, 16 - adds r3, r0, 0 - lsls r5, r2, 16 - ldr r0, [sp, 0xC] - cmp r0, r1 - ble _0811D878 - adds r2, r1, 0 -_0811D864: - lsls r1, r7, 16 - ldr r0, _0811D8F8 @ =0xffff0000 - adds r1, r0 - asrs r0, r1, 15 - add r0, r9 - strh r6, [r0] - lsrs r7, r1, 16 - asrs r1, 16 - cmp r1, r2 - bgt _0811D864 -_0811D878: - lsls r1, r7, 16 - asrs r0, r3, 16 - cmp r1, r3 - bge _0811D896 - adds r2, r0, 0 -_0811D882: - movs r3, 0x80 - lsls r3, 9 - adds r0, r1, r3 - asrs r1, r0, 15 - add r1, r9 - strh r6, [r1] - adds r1, r0, 0 - asrs r0, r1, 16 - cmp r0, r2 - blt _0811D882 -_0811D896: - asrs r0, r5, 16 - cmp r4, r5 - ble _0811D8B4 - adds r1, r0, 0 -_0811D89E: - ldr r2, _0811D8F8 @ =0xffff0000 - adds r0, r4, r2 - lsrs r3, r0, 16 - mov r8, r3 - asrs r0, 15 - add r0, r9 - strh r6, [r0] - lsls r4, r3, 16 - asrs r0, r4, 16 - cmp r0, r1 - bgt _0811D89E -_0811D8B4: - mov r0, r8 - lsls r4, r0, 16 - asrs r0, r5, 16 - cmp r4, r5 - bge _0811D8D4 - adds r2, r0, 0 -_0811D8C0: - movs r1, 0x80 - lsls r1, 9 - adds r0, r4, r1 - asrs r1, r0, 15 - add r1, r9 - strh r6, [r1] - adds r4, r0, 0 - asrs r0, r4, 16 - cmp r0, r2 - blt _0811D8C0 -_0811D8D4: - ldr r2, [sp, 0x10] - movs r3, 0x80 - lsls r3, 9 - adds r0, r2, r3 - lsrs r1, r0, 16 - asrs r0, 16 - cmp r0, 0x3F - bgt _0811D8E6 - b _0811D79C -_0811D8E6: - add sp, 0x14 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0811D8F8: .4byte 0xffff0000 - thumb_func_end sub_811D764 - thumb_func_start sub_811D8FC sub_811D8FC: @ 811D8FC push {r4-r7,lr} diff --git a/include/battle_transition.h b/include/battle_transition.h index b2d897493..63ea36b67 100644 --- a/include/battle_transition.h +++ b/include/battle_transition.h @@ -18,21 +18,25 @@ enum // TRANSITION_MUGSHOT #define MUGSHOTS_NO 5 -// credits for the names go to Dyskinesia +// credits for the names go to Dyskinesia, Tetrable and Dizzy Egg +// names are naturally subject to change -#define B_TRANSITION_BLUR 0 -#define B_TRANSITION_SMEAR 1 -#define B_TRANSITION_SHUFFLE 2 -#define B_TRANSITION_BIG_POKEBALL 3 -#define B_TRANSITION_POKEBALLS_WIPEOUT 4 -#define B_TRANSITION_RIPPLE 6 -#define B_TRANSITION_WAVE 7 -#define B_TRANSITION_SLICE 8 -#define B_TRANSITION_SHARDS 11 -#define B_TRANSITION_SYDNEY 12 -#define B_TRANSITION_PHOEBE 13 -#define B_TRANSITION_GLACIA 14 -#define B_TRANSITION_DRAKE 15 -#define B_TRANSITION_STEVEN 16 +#define B_TRANSITION_BLUR 0 +#define B_TRANSITION_SWEARL 1 +#define B_TRANSITION_SHUFFLE 2 +#define B_TRANSITION_BIG_POKEBALL 3 +#define B_TRANSITION_POKEBALLS_WIPEOUT 4 +#define B_TRANSITION_CLOCKWISE_BLACKFADE 5 +#define B_TRANSITION_RIPPLE 6 +#define B_TRANSITION_WAVE 7 +#define B_TRANSITION_SLICE 8 +#define B_TRANSITION_WHITEFADE 9 +#define B_TRANSITION_GRID_SQUARES 10 +#define B_TRANSITION_SHARDS 11 +#define B_TRANSITION_SYDNEY 12 +#define B_TRANSITION_PHOEBE 13 +#define B_TRANSITION_GLACIA 14 +#define B_TRANSITION_DRAKE 15 +#define B_TRANSITION_STEVEN 16 #endif // GUARD_BATTLE_TRANSITION_H diff --git a/src/battle_transition.c b/src/battle_transition.c index 9f4126822..fcf49a7fb 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -11,6 +11,7 @@ #include "sound.h" #include "songs.h" #include "trainer.h" +#include "field_camera.h" void sub_807DE10(void); void dp12_8087EA4(void); @@ -46,6 +47,12 @@ struct TransitionData s16 field_2A; s16 field_2C; s16 field_2E; + s16 field_30; + s16 field_32; + s16 field_34; + s16 field_36; + s16 field_38; + s16 field_3A; }; #define TRANSITION_STRUCT (*(struct TransitionData *) (ewram + 0xC000)) @@ -160,22 +167,22 @@ static bool8 sub_811C938(struct Sprite* sprite); static bool8 sub_811C984(struct Sprite* sprite); static bool8 sub_811C9B8(struct Sprite* sprite); static bool8 sub_811C9E4(struct Sprite* sprite); -static void sub_811D4C8(s16 a0, s16 a1, s16 a2, s16 a3, s16 a4); +static void CreatePhase1Task(s16 a0, s16 a1, s16 a2, s16 a3, s16 a4); static bool8 sub_811D52C(void); +static void Phase1_Task_RunFuncs(u8 taskID); +static bool8 Phase1_TransitionAll_Func1(struct Task* task); +static bool8 Phase1_TransitionAll_Func2(struct Task* task); +static void sub_811D658(void); +static void VBlankCB_BattleTransition(void); +static void sub_811D6A8(u16** a0, u16** a1); +static void sub_811D690(u16** a0); +static void sub_811D6D4(void); +static void sub_811D6E8(s16* array, s16 sinAdd, s16 index, s16 indexIncrementer, s16 amplitude, s16 arrSize); -void sub_811D658(void); -void VBlankCB_BattleTransition(void); -void sub_811D6E8(s16* a0, s16 a1, s16 a2, s16 a3, s16 a4, s16 a5); -void sub_811D6A8(u16** a0, u16** a1); -void sub_811D690(u16** a0); void sub_811D764(u16* a0, s16 a1, s16 a2, s16 a3); -void sub_811D6D4(void); void sub_811D8FC(s16* a0, s16 a1, s16 a2, s16 a3, s16 a4, s16 a5, s16 a6); bool8 sub_811D978(s16* a0, bool8 a1, bool8 a2); void sub_811CFD0(struct Sprite* sprite); -void sub_811D54C(u8 taskID); -bool8 sub_811D584(struct Task* task); -bool8 sub_811D5E0(struct Task* task); // const data @@ -187,7 +194,7 @@ const u32 gSpriteImage_83FC528[] = INCBIN_U32("graphics/battle_transitions/unuse const u32 gSpriteImage_83FCD28[] = INCBIN_U32("graphics/battle_transitions/unused_lass.4bpp"); const u32 gUnknown_083FD528[] = INCBIN_U32("graphics/battle_transitions/shrinking_box.4bpp"); -struct TransitionData * const sTransitionStructPtr = &TRANSITION_STRUCT; +static struct TransitionData * const sTransitionStructPtr = &TRANSITION_STRUCT; static const TaskFunc sPhase1_Tasks[TRANSITIONS_NO] = { @@ -380,10 +387,10 @@ static const s16 gUnknown_083FD8F4[][5] = static const s16 gUnknown_083FD93A[] = {8, 4, 2, 1, 1, 1, 0}; -static const TransitionState gUnknown_083FD948[] = +static const TransitionState sPhase1_TransitionAll_Funcs[] = { - &sub_811D584, - &sub_811D5E0 + &Phase1_TransitionAll_Func1, + &Phase1_TransitionAll_Func2 }; extern const u16 gFieldEffectObjectPalette10[]; @@ -416,10 +423,10 @@ bool8 IsBattleTransitionDone(void) if (gTasks[taskID].tTransitionDone) { DestroyTask(taskID); - return 1; + return TRUE; } else - return 0; + return FALSE; } static void LaunchBattleTransitionTask(u8 transitionID) @@ -441,12 +448,12 @@ static bool8 Transition_Phase1(struct Task* task) { CreateTask(sPhase1_Tasks[task->tTransitionID], 4); task->tState++; - return 0; + return FALSE; } else { task->tState = 2; - return 1; + return TRUE; } } @@ -455,17 +462,17 @@ static bool8 Transition_WaitForPhase1(struct Task* task) if (FindTaskIdByFunc(sPhase1_Tasks[task->tTransitionID]) == 0xFF) { task->tState++; - return 1; + return TRUE; } else - return 0; + return FALSE; } static bool8 Transition_Phase2(struct Task* task) { CreateTask(sPhase2_Tasks[task->tTransitionID], 0); task->tState++; - return 0; + return FALSE; } static bool8 Transition_WaitForPhase2(struct Task* task) @@ -473,7 +480,7 @@ static bool8 Transition_WaitForPhase2(struct Task* task) task->tTransitionDone = 0; if (FindTaskIdByFunc(sPhase2_Tasks[task->tTransitionID]) == 0xFF) task->tTransitionDone = 1; - return 0; + return FALSE; } static void Phase1Task_TransitionAll(u8 taskID) @@ -481,7 +488,7 @@ static void Phase1Task_TransitionAll(u8 taskID) if (gTasks[taskID].tState == 0) { gTasks[taskID].tState++; - sub_811D4C8(0, 0, 3, 2, 2); + CreatePhase1Task(0, 0, 3, 2, 2); } else if (sub_811D52C()) DestroyTask(taskID); @@ -499,7 +506,7 @@ static bool8 Phase2_Transition0_Func1(struct Task* task) REG_BG2CNT |= 0x40; REG_BG3CNT |= 0x40; task->tState++; - return 1; + return TRUE; } static bool8 Phase2_Transition0_Func2(struct Task* task) @@ -515,7 +522,7 @@ static bool8 Phase2_Transition0_Func2(struct Task* task) if (task->data[2] > 14) task->tState++; } - return 0; + return FALSE; } static bool8 Phase2_Transition0_Func3(struct Task* task) @@ -525,7 +532,7 @@ static bool8 Phase2_Transition0_Func3(struct Task* task) u8 taskID = FindTaskIdByFunc(Phase2Task_Transition0); DestroyTask(taskID); } - return 0; + return FALSE; } static void Phase2Task_Transition1(u8 taskID) @@ -552,7 +559,7 @@ static bool8 Phase2_Transition1_Func1(struct Task* task) REG_DISPSTAT |= 0x18; task->tState++; - return 0; + return FALSE; } static bool8 Phase2_Transition1_Func2(struct Task* task) @@ -570,7 +577,7 @@ static bool8 Phase2_Transition1_Func2(struct Task* task) } TRANSITION_STRUCT.VBlank_DMA++; - return 0; + return FALSE; } static void VBlankCB_Phase2_Transition1(void) @@ -613,7 +620,7 @@ static bool8 Phase2_Transition2_Func1(struct Task* task) REG_DISPSTAT |= 0x18; task->tState++; - return 0; + return FALSE; } static bool8 Phase2_Transition2_Func2(struct Task* task) @@ -637,7 +644,7 @@ static bool8 Phase2_Transition2_Func2(struct Task* task) DestroyTask(FindTaskIdByFunc(Phase2Task_Transition2)); TRANSITION_STRUCT.VBlank_DMA++; - return 0; + return FALSE; } static void VBlankCB_Phase2_Transition2(void) @@ -692,7 +699,7 @@ static bool8 Phase2_Transition3_Func1(struct Task* task) LoadPalette(gFieldEffectObjectPalette10, 240, 32); task->tState++; - return 0; + return FALSE; } static bool8 Phase2_Transition3_Func2(struct Task* task) @@ -713,7 +720,7 @@ static bool8 Phase2_Transition3_Func2(struct Task* task) sub_811D6E8(gUnknown_03004DE0[0], 0, task->data[4], 132, task->data[5], 160); task->tState++; - return 1; + return TRUE; } static bool8 Phase2_Transition3_Func3(struct Task* task) @@ -733,7 +740,7 @@ static bool8 Phase2_Transition3_Func3(struct Task* task) sub_811D6E8(gUnknown_03004DE0[0], 0, task->data[4], 132, task->data[5] >> 8, 160); TRANSITION_STRUCT.VBlank_DMA++; - return 0; + return FALSE; } static bool8 Phase2_Transition3_Func4(struct Task* task) @@ -753,7 +760,7 @@ static bool8 Phase2_Transition3_Func4(struct Task* task) sub_811D6E8(gUnknown_03004DE0[0], 0, task->data[4], 132, task->data[5] >> 8, 160); TRANSITION_STRUCT.VBlank_DMA++; - return 0; + return FALSE; } static bool8 Phase2_Transition3_Func5(struct Task* task) @@ -773,7 +780,7 @@ static bool8 Phase2_Transition3_Func5(struct Task* task) } TRANSITION_STRUCT.VBlank_DMA++; - return 0; + return FALSE; } static bool8 Phase2_Transition3_Func6(struct Task* task) @@ -801,7 +808,7 @@ static bool8 Phase2_Transition3_Func6(struct Task* task) } TRANSITION_STRUCT.VBlank_DMA++; - return 0; + return FALSE; } static void Transition3_Vblank(void) @@ -844,7 +851,7 @@ static bool8 Phase2_Transition4_Func1(struct Task* task) LoadPalette(gFieldEffectObjectPalette10, 0xF0, 0x20); task->tState++; - return 0; + return FALSE; } static bool8 Phase2_Transition4_Func2(struct Task* task) @@ -867,7 +874,7 @@ static bool8 Phase2_Transition4_Func2(struct Task* task) } task->tState++; - return 0; + return FALSE; } static bool8 Phase2_Transition4_Func3(struct Task* task) @@ -877,7 +884,7 @@ static bool8 Phase2_Transition4_Func3(struct Task* task) sub_811D6D4(); DestroyTask(FindTaskIdByFunc(Phase2Task_Transition4)); } - return 0; + return FALSE; } bool8 FldEff_Pokeball(void) @@ -890,7 +897,7 @@ bool8 FldEff_Pokeball(void) gSprites[spriteID].data2 = -1; InitSpriteAffineAnim(&gSprites[spriteID]); StartSpriteAffineAnim(&gSprites[spriteID], gUnknown_0202FF84[2]); - return 0; + return FALSE; } #define SOME_VRAM_STORE(ptr, posY, posX, toStore) \ @@ -960,7 +967,7 @@ static bool8 Phase2_Transition5_Func1(struct Task* task) TRANSITION_STRUCT.field_2C = 120; task->tState++; - return 1; + return TRUE; } static bool8 Phase2_Transition5_Func2(struct Task* task) @@ -981,7 +988,7 @@ static bool8 Phase2_Transition5_Func2(struct Task* task) } TRANSITION_STRUCT.VBlank_DMA++; - return 0; + return FALSE; } static bool8 Phase2_Transition5_Func3(struct Task* task) @@ -1019,7 +1026,7 @@ static bool8 Phase2_Transition5_Func3(struct Task* task) } TRANSITION_STRUCT.VBlank_DMA++; - return 0; + return FALSE; } static bool8 Phase2_Transition5_Func4(struct Task* task) @@ -1040,7 +1047,7 @@ static bool8 Phase2_Transition5_Func4(struct Task* task) } TRANSITION_STRUCT.VBlank_DMA++; - return 0; + return FALSE; } static bool8 Phase2_Transition5_Func5(struct Task* task) @@ -1079,7 +1086,7 @@ static bool8 Phase2_Transition5_Func5(struct Task* task) } TRANSITION_STRUCT.VBlank_DMA++; - return 0; + return FALSE; } static bool8 Phase2_Transition5_Func6(struct Task* task) @@ -1103,7 +1110,7 @@ static bool8 Phase2_Transition5_Func6(struct Task* task) task->tState++; TRANSITION_STRUCT.VBlank_DMA++; - return 0; + return FALSE; } static bool8 Phase2_Transition5_Func7(struct Task* task) @@ -1111,7 +1118,7 @@ static bool8 Phase2_Transition5_Func7(struct Task* task) DmaStop(0); sub_811D6D4(); DestroyTask(FindTaskIdByFunc(Phase2Task_Transition5)); - return 0; + return FALSE; } static void VBlankCB_Phase2_Transition5(void) @@ -1151,7 +1158,7 @@ static bool8 Phase2_Transition6_Func1(struct Task* task) REG_DISPSTAT |= 0x10; task->tState++; - return 1; + return TRUE; } static bool8 Phase2_Transition6_Func2(struct Task* task) @@ -1188,7 +1195,7 @@ static bool8 Phase2_Transition6_Func2(struct Task* task) DestroyTask(FindTaskIdByFunc(Phase2Task_Transition6)); TRANSITION_STRUCT.VBlank_DMA++; - return 0; + return FALSE; } static void VBlankCB_Phase2_Transition6(void) @@ -1231,7 +1238,7 @@ static bool8 Phase2_Transition7_Func1(struct Task* task) SetVBlankCallback(VBlankCB_Phase2_Transition7); task->tState++; - return 1; + return TRUE; } static bool8 Phase2_Transition7_Func2(struct Task* task) @@ -1261,7 +1268,7 @@ static bool8 Phase2_Transition7_Func2(struct Task* task) task->tState++; TRANSITION_STRUCT.VBlank_DMA++; - return 0; + return FALSE; } static bool8 Phase2_Transition7_Func3(struct Task* task) @@ -1269,7 +1276,7 @@ static bool8 Phase2_Transition7_Func3(struct Task* task) DmaStop(0); sub_811D6D4(); DestroyTask(FindTaskIdByFunc(Phase2Task_Transition7)); - return 0; + return FALSE; } static void VBlankCB_Phase2_Transition7(void) @@ -1346,7 +1353,7 @@ static bool8 Phase2_Mugshot_Func1(struct Task* task) SetVBlankCallback(VBlankCB0_Phase2_Mugshots); task->tState++; - return 0; + return FALSE; } static bool8 Phase2_Mugshot_Func2(struct Task* task) @@ -1373,7 +1380,7 @@ static bool8 Phase2_Mugshot_Func2(struct Task* task) REG_DISPSTAT |= 0x10; SetHBlankCallback(HBlankCB_Phase2_Mugshots); task->tState++; - return 0; + return FALSE; } static bool8 Phase2_Mugshot_Func3(struct Task* task) @@ -1421,7 +1428,7 @@ static bool8 Phase2_Mugshot_Func3(struct Task* task) TRANSITION_STRUCT.field_18 -= 8; TRANSITION_STRUCT.field_1A += 8; TRANSITION_STRUCT.VBlank_DMA++; - return 0; + return FALSE; } static bool8 Phase2_Mugshot_Func4(struct Task* task) @@ -1450,7 +1457,7 @@ static bool8 Phase2_Mugshot_Func4(struct Task* task) PlaySE(SE_BT_START); TRANSITION_STRUCT.VBlank_DMA++; - return 0; + return FALSE; } static bool8 Phase2_Mugshot_Func5(struct Task* task) @@ -1462,7 +1469,7 @@ static bool8 Phase2_Mugshot_Func5(struct Task* task) task->tState++; sub_811CA28(task->tMugshotPlayerID); } - return 0; + return FALSE; } static bool8 Phase2_Mugshot_Func6(struct Task* task) @@ -1484,7 +1491,7 @@ static bool8 Phase2_Mugshot_Func6(struct Task* task) TRANSITION_STRUCT.BLDCNT = 0xBF; SetVBlankCallback(VBlankCB1_Phase2_Mugshots); } - return 0; + return FALSE; } static bool8 Phase2_Mugshot_Func7(struct Task* task) @@ -1525,7 +1532,7 @@ static bool8 Phase2_Mugshot_Func7(struct Task* task) task->tState++; TRANSITION_STRUCT.VBlank_DMA++; - return 0; + return FALSE; } static bool8 Phase2_Mugshot_Func8(struct Task* task) @@ -1536,7 +1543,7 @@ static bool8 Phase2_Mugshot_Func8(struct Task* task) task->data[3] = 0; task->tState++; - return 1; + return TRUE; } static bool8 Phase2_Mugshot_Func9(struct Task* task) @@ -1549,7 +1556,7 @@ static bool8 Phase2_Mugshot_Func9(struct Task* task) task->tState++; TRANSITION_STRUCT.VBlank_DMA++; - return 0; + return FALSE; } static bool8 Phase2_Mugshot_Func10(struct Task* task) @@ -1557,7 +1564,7 @@ static bool8 Phase2_Mugshot_Func10(struct Task* task) DmaStop(0); sub_811D6D4(); DestroyTask(FindTaskIdByFunc(task->func)); - return 0; + return FALSE; } static void VBlankCB0_Phase2_Mugshots(void) @@ -1634,7 +1641,7 @@ void sub_811C90C(struct Sprite* sprite) bool8 sub_811C934(struct Sprite* sprite) { - return 0; + return FALSE; } bool8 sub_811C938(struct Sprite* sprite) @@ -1648,7 +1655,7 @@ bool8 sub_811C938(struct Sprite* sprite) sprite->data0++; sprite->data1 = arr0[sprite->data7]; sprite->data2 = arr1[sprite->data7]; - return 1; + return TRUE; } bool8 sub_811C984(struct Sprite* sprite) @@ -1658,7 +1665,7 @@ bool8 sub_811C984(struct Sprite* sprite) sprite->data0++; else if (!sprite->data7 && sprite->pos1.x > 103) sprite->data0++; - return 0; + return FALSE; } bool8 sub_811C9B8(struct Sprite* sprite) @@ -1671,7 +1678,7 @@ bool8 sub_811C9B8(struct Sprite* sprite) sprite->data2 = -sprite->data2; sprite->data6 = 1; } - return 0; + return FALSE; } bool8 sub_811C9E4(struct Sprite* sprite) @@ -1680,7 +1687,7 @@ bool8 sub_811C9E4(struct Sprite* sprite) sprite->pos1.x += sprite->data1; if (sprite->pos1.x < -31 || sprite->pos1.x > 271) sprite->data0++; - return 0; + return FALSE; } static void sub_811CA10(s16 spriteID, s16 value) @@ -1733,7 +1740,7 @@ static bool8 Phase2_Transition8_Func1(struct Task* task) SetHBlankCallback(HBlankCB_Phase2_Transition8); task->tState++; - return 1; + return TRUE; } static bool8 Phase2_Transition8_Func2(struct Task* task) @@ -1770,7 +1777,7 @@ static bool8 Phase2_Transition8_Func2(struct Task* task) task->tState++; TRANSITION_STRUCT.VBlank_DMA++; - return 0; + return FALSE; } static bool8 Phase2_Transition8_Func3(struct Task* task) @@ -1778,7 +1785,7 @@ static bool8 Phase2_Transition8_Func3(struct Task* task) DmaStop(0); sub_811D6D4(); DestroyTask(FindTaskIdByFunc(Phase2Task_Transition8)); - return 0; + return FALSE; } static void VBlankCB_Phase2_Transition8(void) @@ -1832,7 +1839,7 @@ static bool8 Phase2_Transition9_Func1(struct Task* task) SetVBlankCallback(VBlankCB0_Phase2_Transition9); task->tState++; - return 0; + return FALSE; } static bool8 Phase2_Transition9_Func2(struct Task* task) @@ -1852,7 +1859,7 @@ static bool8 Phase2_Transition9_Func2(struct Task* task) sprite->data6++; task->tState++; - return 0; + return FALSE; } static bool8 Phase2_Transition9_Func3(struct Task* task) @@ -1863,7 +1870,7 @@ static bool8 Phase2_Transition9_Func3(struct Task* task) BlendPalettes(-1, 0x10, 0x7FFF); task->tState++; } - return 0; + return FALSE; } static bool8 Phase2_Transition9_Func4(struct Task* task) @@ -1882,7 +1889,7 @@ static bool8 Phase2_Transition9_Func4(struct Task* task) SetVBlankCallback(VBlankCB1_Phase2_Transition9); task->tState++; - return 0; + return FALSE; } static bool8 Phase2_Transition9_Func5(struct Task* task) @@ -1892,7 +1899,7 @@ static bool8 Phase2_Transition9_Func5(struct Task* task) sub_811D6D4(); DestroyTask(FindTaskIdByFunc(Phase2Task_Transition9)); } - return 0; + return FALSE; } static void VBlankCB0_Phase2_Transition9(void) @@ -1982,7 +1989,7 @@ static bool8 Phase2_Transition10_Func1(struct Task* task) LoadPalette(gFieldEffectObjectPalette10, 0xF0, 0x20); task->tState++; - return 0; + return FALSE; } static bool8 Phase2_Transition10_Func2(struct Task* task) @@ -2003,7 +2010,7 @@ static bool8 Phase2_Transition10_Func2(struct Task* task) } task->data[1]--; - return 0; + return FALSE; } static bool8 Phase2_Transition10_Func3(struct Task* task) @@ -2013,7 +2020,7 @@ static bool8 Phase2_Transition10_Func3(struct Task* task) sub_811D6D4(); DestroyTask(FindTaskIdByFunc(Phase2Task_Transition10)); } - return 0; + return FALSE; } static void Phase2Task_Transition11(u8 taskID) @@ -2041,7 +2048,7 @@ static bool8 Phase2_Transition11_Func1(struct Task* task) SetVBlankCallback(VBlankCB_Phase2_Transition11); task->tState++; - return 1; + return TRUE; } static bool8 Phase2_Transition11_Func2(struct Task* task) @@ -2054,7 +2061,7 @@ static bool8 Phase2_Transition11_Func2(struct Task* task) 1, 1); task->data[2] = gUnknown_083FD8F4[task->data[1]][4]; task->tState++; - return 1; + return TRUE; } static bool8 Phase2_Transition11_Func3(struct Task* task) @@ -2093,7 +2100,7 @@ static bool8 Phase2_Transition11_Func3(struct Task* task) } TRANSITION_STRUCT.VBlank_DMA++; - return 0; + return FALSE; } static bool8 Phase2_Transition11_Func4(struct Task* task) @@ -2102,14 +2109,14 @@ static bool8 Phase2_Transition11_Func4(struct Task* task) { task->tState++; task->data[3] = gUnknown_083FD93A[task->data[1] - 1]; - return 1; + return TRUE; } else { DmaStop(0); sub_811D6D4(); DestroyTask(FindTaskIdByFunc(Phase2Task_Transition11)); - return 0; + return FALSE; } } @@ -2118,10 +2125,10 @@ static bool8 Phase2_Transition11_Func5(struct Task* task) if (--task->data[3] == 0) { task->tState = 1; - return 1; + return TRUE; } else - return 0; + return FALSE; } static void VBlankCB_Phase2_Transition11(void) @@ -2137,9 +2144,9 @@ static void VBlankCB_Phase2_Transition11(void) DmaSet(0, gUnknown_03004DE0[1], ®_WIN0H, 0xA2400001); } -static void sub_811D4C8(s16 a0, s16 a1, s16 a2, s16 a3, s16 a4) +static void CreatePhase1Task(s16 a0, s16 a1, s16 a2, s16 a3, s16 a4) { - u8 taskID = CreateTask(sub_811D54C, 3); + u8 taskID = CreateTask(Phase1_Task_RunFuncs, 3); gTasks[taskID].data[1] = a0; gTasks[taskID].data[2] = a1; gTasks[taskID].data[3] = a2; @@ -2150,13 +2157,175 @@ static void sub_811D4C8(s16 a0, s16 a1, s16 a2, s16 a3, s16 a4) static bool8 sub_811D52C(void) { - if (FindTaskIdByFunc(sub_811D54C) == 0xFF) - return 1; + if (FindTaskIdByFunc(Phase1_Task_RunFuncs) == 0xFF) + return TRUE; else - return 0; + return FALSE; } -void sub_811D54C(u8 taskID) +static void Phase1_Task_RunFuncs(u8 taskID) { - while (gUnknown_083FD948[gTasks[taskID].tState](&gTasks[taskID])); + while (sPhase1_TransitionAll_Funcs[gTasks[taskID].tState](&gTasks[taskID])); +} + +static bool8 Phase1_TransitionAll_Func1(struct Task* task) +{ + if (task->data[6] == 0 || --task->data[6] == 0) + { + task->data[6] = task->data[1]; + task->data[7] += task->data[4]; + if (task->data[7] > 16) + task->data[7] = 16; + BlendPalettes(-1, task->data[7], 0x2D6B); + } + if (task->data[7] > 15) + { + task->tState++; + task->data[6] = task->data[2]; + } + return FALSE; +} + +static bool8 Phase1_TransitionAll_Func2(struct Task* task) +{ + if (task->data[6] == 0 || --task->data[6] == 0) + { + task->data[6] = task->data[2]; + task->data[7] -= task->data[5]; + if (task->data[7] < 0) + task->data[7] = 0; + BlendPalettes(-1, task->data[7], 0x2D6B); + } + if (task->data[7] == 0) + { + if (--task->data[3] == 0) + DestroyTask(FindTaskIdByFunc(Phase1_Task_RunFuncs)); + else + { + task->data[6] = task->data[1]; + task->tState = 0; + } + } + return FALSE; +} + +static void sub_811D658(void) +{ + struct TransitionData* const* dummy = &sTransitionStructPtr; + memset(*dummy, 0, sizeof(struct TransitionData)); + sub_8057B14(&TRANSITION_STRUCT.field_14, &TRANSITION_STRUCT.field_16); +} + +static void VBlankCB_BattleTransition(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +static void sub_811D690(u16** a0) +{ + u16 reg, *vram; + + reg = REG_BG0CNT >> 2; + reg <<= 0xE; + vram = (u16*)(VRAM + reg); + + *a0 = vram; +} + +static void sub_811D6A8(u16** a0, u16** a1) +{ + u16 reg0, reg1, *vram0, *vram1; + + reg0 = REG_BG0CNT >> 8; + reg1 = REG_BG0CNT >> 2; + + reg0 <<= 0xB; + reg1 <<= 0xE; + + vram0 = (u16*)(VRAM + reg0); + *a0 = vram0; + + vram1 = (u16*)(VRAM + reg1); + *a1 = vram1; +} + +static void sub_811D6D4(void) +{ + BlendPalettes(-1, 0x10, 0); +} + +static void sub_811D6E8(s16* array, s16 sinAdd, s16 index, s16 indexIncrementer, s16 amplitude, s16 arrSize) +{ + u8 i; + for (i = 0; arrSize > 0; arrSize--, i++, index += indexIncrementer) + { + array[i] = sinAdd + Sin(0xFF & index, amplitude); + } +} + +void sub_811D764(u16* array, s16 a1, s16 a2, s16 a3) +{ + s16 i; + + memset(array, 0xA, 160 * sizeof(s16)); + for (i = 0; i < 64; i++) + { + s16 sinResult, cosResult, r1, r6, r7, r8; + s16 r2, r3; + s16 j; + + sinResult = Sin(i, a3); + cosResult = Cos(i, a3); + + r1 = a1 - sinResult; + r6 = a1 + sinResult; + r7 = a2 - cosResult; + r8 = a2 + cosResult; + + if (r1 < 0) + r1 = 0; + if (r6 > 0xF0) + r6 = 0xF0; + if (r7 < 0) + r7 = 0; + if (r8 > 0x9F) + r8 = 0x9F; + + r6 |= (r1 << 8); + array[r7] = r6; + array[r8] = r6; + + cosResult = Cos(i + 1, a3); + r3 = a2 - cosResult; + r2 = a2 + cosResult; + + if (r3 < 0) + r3 = 0; + if (r2 > 0x9F) + r2 = 0x9F; + + j = r7; + while (j > r3) + { + array[--j] = r6; + } + j = r7; + while (j < r3) + { + array[++j] = r6; + } + + j = r8; + while (j > r2) + { + array[--j] = r6; + } + j = r8; + while (j < r2) + { + array[++j] = r6; + } + } } -- cgit v1.2.3 From 5adb839124412d5054630cf12020423e18161031 Mon Sep 17 00:00:00 2001 From: Touched Date: Mon, 21 Aug 2017 21:40:28 +0200 Subject: Decompile asm/field_ground_effect.s --- asm/field_ground_effect.s | 1302 --------------------------------------- include/field_effect_helpers.h | 3 + include/field_map_obj_helpers.h | 2 + ld_script.txt | 1 - src/field_ground_effect.c | 712 ++++++++++++++++++++- 5 files changed, 695 insertions(+), 1325 deletions(-) delete mode 100644 asm/field_ground_effect.s diff --git a/asm/field_ground_effect.s b/asm/field_ground_effect.s deleted file mode 100644 index 47c4b4c60..000000000 --- a/asm/field_ground_effect.s +++ /dev/null @@ -1,1302 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start FieldObjectCheckForReflectiveSurface -FieldObjectCheckForReflectiveSurface: @ 8063A44 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - adds r5, r0, 0 - ldrb r0, [r5, 0x5] - bl GetFieldObjectGraphicsInfo - movs r2, 0x8 - ldrsh r1, [r0, r2] - adds r1, 0x8 - lsls r1, 12 - lsrs r1, 16 - str r1, [sp] - movs r1, 0xA - ldrsh r0, [r0, r1] - adds r0, 0x8 - lsls r0, 12 - movs r4, 0 - lsrs r2, r0, 16 - str r2, [sp, 0x4] - asrs r0, 16 - cmp r4, r0 - blt _08063A7A - b _08063B80 -_08063A7A: - movs r0, 0x1 - mov r10, r0 -_08063A7E: - movs r1, 0x10 - ldrsh r0, [r5, r1] - movs r2, 0x12 - ldrsh r1, [r5, r2] - add r1, r10 - lsls r4, 16 - asrs r6, r4, 16 - adds r1, r6 - bl MapGridGetMetatileBehaviorAt - lsls r0, 24 - lsrs r0, 24 - bl GetReflectionTypeByMetatileBehavior - lsls r0, 24 - lsrs r0, 24 - mov r9, r4 - cmp r0, 0 - bne _08063B82 - movs r1, 0x14 - ldrsh r0, [r5, r1] - movs r2, 0x16 - ldrsh r1, [r5, r2] - add r1, r10 - adds r1, r6 - bl MapGridGetMetatileBehaviorAt - lsls r0, 24 - lsrs r0, 24 - bl GetReflectionTypeByMetatileBehavior - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - bne _08063B82 - movs r2, 0x1 - ldr r1, [sp] - lsls r0, r1, 16 - asrs r1, r0, 16 - mov r8, r0 - cmp r2, r1 - bge _08063B6E - movs r0, 0x80 - lsls r0, 9 - asrs r7, r0, 16 -_08063AD8: - movs r1, 0x10 - ldrsh r0, [r5, r1] - lsls r1, r2, 16 - asrs r4, r1, 16 - adds r0, r4 - movs r2, 0x12 - ldrsh r1, [r5, r2] - adds r1, r7 - adds r1, r6 - bl MapGridGetMetatileBehaviorAt - lsls r0, 24 - lsrs r0, 24 - bl GetReflectionTypeByMetatileBehavior - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - bne _08063B82 - movs r1, 0x10 - ldrsh r0, [r5, r1] - subs r0, r4 - movs r2, 0x12 - ldrsh r1, [r5, r2] - adds r1, r7 - adds r1, r6 - bl MapGridGetMetatileBehaviorAt - lsls r0, 24 - lsrs r0, 24 - bl GetReflectionTypeByMetatileBehavior - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - bne _08063B82 - movs r1, 0x14 - ldrsh r0, [r5, r1] - adds r0, r4 - movs r2, 0x16 - ldrsh r1, [r5, r2] - adds r1, r7 - adds r1, r6 - bl MapGridGetMetatileBehaviorAt - lsls r0, 24 - lsrs r0, 24 - bl GetReflectionTypeByMetatileBehavior - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - bne _08063B82 - movs r1, 0x14 - ldrsh r0, [r5, r1] - subs r0, r4 - movs r2, 0x16 - ldrsh r1, [r5, r2] - adds r1, r7 - adds r1, r6 - bl MapGridGetMetatileBehaviorAt - lsls r0, 24 - lsrs r0, 24 - bl GetReflectionTypeByMetatileBehavior - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - bne _08063B82 - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r0, r8 - blt _08063AD8 -_08063B6E: - movs r1, 0x80 - lsls r1, 9 - add r1, r9 - lsrs r4, r1, 16 - ldr r2, [sp, 0x4] - lsls r0, r2, 16 - cmp r1, r0 - bge _08063B80 - b _08063A7E -_08063B80: - movs r0, 0 -_08063B82: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end FieldObjectCheckForReflectiveSurface - - thumb_func_start GetReflectionTypeByMetatileBehavior -GetReflectionTypeByMetatileBehavior: @ 8063B94 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl MetatileBehavior_IsIce - lsls r0, 24 - cmp r0, 0 - beq _08063BAA - movs r0, 0x1 - b _08063BBC -_08063BAA: - adds r0, r4, 0 - bl MetatileBehavior_IsReflective - lsls r0, 24 - cmp r0, 0 - bne _08063BBA - movs r0, 0 - b _08063BBC -_08063BBA: - movs r0, 0x2 -_08063BBC: - pop {r4} - pop {r1} - bx r1 - thumb_func_end GetReflectionTypeByMetatileBehavior - - thumb_func_start GetLedgeJumpDirection -GetLedgeJumpDirection: @ 8063BC4 - push {r4,lr} - lsls r0, 16 - lsrs r3, r0, 16 - lsls r1, 16 - lsrs r1, 16 - lsls r2, 24 - lsrs r4, r2, 24 - cmp r4, 0 - beq _08063C0A - cmp r4, 0x4 - bls _08063BE0 - subs r0, r4, 0x4 - lsls r0, 24 - lsrs r4, r0, 24 -_08063BE0: - subs r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r3, 16 - asrs r0, 16 - lsls r1, 16 - asrs r1, 16 - bl MapGridGetMetatileBehaviorAt - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08063C10 @ =gUnknown_08376040 - lsls r1, r4, 2 - adds r1, r2 - ldr r1, [r1] - bl _call_via_r1 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08063C14 -_08063C0A: - movs r0, 0 - b _08063C1A - .align 2, 0 -_08063C10: .4byte gUnknown_08376040 -_08063C14: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r0, 24 -_08063C1A: - pop {r4} - pop {r1} - bx r1 - thumb_func_end GetLedgeJumpDirection - - thumb_func_start FieldObjectSetSpriteOamTableForLongGrass -FieldObjectSetSpriteOamTableForLongGrass: @ 8063C20 - push {r4-r6,lr} - adds r5, r0, 0 - adds r4, r1, 0 - ldrb r0, [r5] - lsls r0, 27 - cmp r0, 0 - blt _08063C74 - ldrb r0, [r5, 0x1E] - bl MetatileBehavior_IsLongGrass - lsls r0, 24 - cmp r0, 0 - beq _08063C74 - ldrb r0, [r5, 0x1F] - bl MetatileBehavior_IsLongGrass - lsls r0, 24 - cmp r0, 0 - beq _08063C74 - adds r4, 0x42 - ldrb r1, [r4] - movs r6, 0x40 - negs r6, r6 - adds r0, r6, 0 - ands r0, r1 - movs r1, 0x4 - orrs r0, r1 - strb r0, [r4] - ldrb r0, [r5, 0xB] - lsrs r0, 4 - bl ZCoordToPriority - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08063C74 - ldrb r0, [r4] - adds r1, r6, 0 - ands r1, r0 - movs r0, 0x5 - orrs r1, r0 - strb r1, [r4] -_08063C74: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end FieldObjectSetSpriteOamTableForLongGrass - - thumb_func_start IsZCoordMismatchAt -IsZCoordMismatchAt: @ 8063C7C - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 16 - lsrs r0, r1, 16 - lsls r2, 16 - lsrs r1, r2, 16 - cmp r4, 0 - beq _08063CAA - lsls r0, 16 - asrs r0, 16 - lsls r1, 16 - asrs r1, 16 - bl MapGridGetZCoordAt - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _08063CAA - cmp r0, 0xF - beq _08063CAA - cmp r0, r4 - bne _08063CAE -_08063CAA: - movs r0, 0 - b _08063CB0 -_08063CAE: - movs r0, 0x1 -_08063CB0: - pop {r4} - pop {r1} - bx r1 - thumb_func_end IsZCoordMismatchAt - - thumb_func_start FieldObjectUpdateZCoordAndPriority -FieldObjectUpdateZCoordAndPriority: @ 8063CB8 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - ldrb r0, [r4, 0x3] - lsls r0, 29 - cmp r0, 0 - blt _08063D06 - adds r0, r4, 0 - bl FieldObjectUpdateZCoord - ldr r1, _08063D0C @ =gFieldObjectPriorities_08376070 - ldrb r2, [r4, 0xB] - lsls r2, 24 - lsrs r0, r2, 28 - adds r0, r1 - ldrb r0, [r0] - adds r4, r5, 0 - adds r4, 0x42 - movs r1, 0x3F - ands r1, r0 - ldrb r3, [r4] - movs r0, 0x40 - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r4] - ldr r0, _08063D10 @ =gFieldObjectPriorities_08376060 - lsrs r2, 28 - adds r2, r0 - movs r0, 0x3 - ldrb r1, [r2] - ands r1, r0 - lsls r1, 2 - ldrb r2, [r5, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r5, 0x5] -_08063D06: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08063D0C: .4byte gFieldObjectPriorities_08376070 -_08063D10: .4byte gFieldObjectPriorities_08376060 - thumb_func_end FieldObjectUpdateZCoordAndPriority - - thumb_func_start InitObjectPriorityByZCoord -InitObjectPriorityByZCoord: @ 8063D14 - push {r4,lr} - lsls r1, 24 - lsrs r1, 24 - ldr r2, _08063D58 @ =gFieldObjectPriorities_08376070 - adds r2, r1, r2 - ldrb r2, [r2] - movs r3, 0x42 - adds r3, r0 - mov r12, r3 - movs r3, 0x3F - ands r3, r2 - mov r2, r12 - ldrb r4, [r2] - movs r2, 0x40 - negs r2, r2 - ands r2, r4 - orrs r2, r3 - mov r3, r12 - strb r2, [r3] - ldr r2, _08063D5C @ =gFieldObjectPriorities_08376060 - adds r1, r2 - movs r3, 0x3 - ldrb r2, [r1] - ands r2, r3 - lsls r2, 2 - ldrb r3, [r0, 0x5] - movs r1, 0xD - negs r1, r1 - ands r1, r3 - orrs r1, r2 - strb r1, [r0, 0x5] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08063D58: .4byte gFieldObjectPriorities_08376070 -_08063D5C: .4byte gFieldObjectPriorities_08376060 - thumb_func_end InitObjectPriorityByZCoord - - thumb_func_start ZCoordToPriority -ZCoordToPriority: @ 8063D60 - lsls r0, 24 - lsrs r0, 24 - ldr r1, _08063D6C @ =gFieldObjectPriorities_08376060 - adds r0, r1 - ldrb r0, [r0] - bx lr - .align 2, 0 -_08063D6C: .4byte gFieldObjectPriorities_08376060 - thumb_func_end ZCoordToPriority - - thumb_func_start FieldObjectUpdateZCoord -FieldObjectUpdateZCoord: @ 8063D70 - push {r4,r5,lr} - adds r4, r0, 0 - movs r1, 0x10 - ldrsh r0, [r4, r1] - movs r2, 0x12 - ldrsh r1, [r4, r2] - bl MapGridGetZCoordAt - lsls r0, 24 - lsrs r5, r0, 24 - movs r1, 0x14 - ldrsh r0, [r4, r1] - movs r2, 0x16 - ldrsh r1, [r4, r2] - bl MapGridGetZCoordAt - lsls r0, 24 - lsrs r0, 24 - cmp r5, 0xF - beq _08063DBE - cmp r0, 0xF - beq _08063DBE - movs r3, 0xF - adds r0, r5, 0 - ands r0, r3 - ldrb r1, [r4, 0xB] - movs r2, 0x10 - negs r2, r2 - ands r2, r1 - orrs r2, r0 - strb r2, [r4, 0xB] - cmp r5, 0 - beq _08063DBE - cmp r5, 0xF - beq _08063DBE - lsls r0, r5, 4 - ands r2, r3 - orrs r2, r0 - strb r2, [r4, 0xB] -_08063DBE: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end FieldObjectUpdateZCoord - - thumb_func_start SetObjectSubpriorityByZCoord -SetObjectSubpriorityByZCoord: @ 8063DC4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r2, 24 - lsrs r2, 24 - adds r3, r1, 0 - adds r3, 0x29 - movs r5, 0 - ldrsb r5, [r3, r5] - ldrh r4, [r1, 0x22] - ldr r3, _08063E04 @ =gSpriteCoordOffsetY - subs r4, r5 - ldrh r3, [r3] - adds r4, r3 - adds r4, 0x8 - movs r3, 0xFF - ands r4, r3 - lsrs r4, 4 - movs r3, 0x10 - subs r3, r4 - lsls r3, 17 - ldr r4, _08063E08 @ =gUnknown_08376050 - adds r0, r4 - lsrs r3, 16 - ldrb r0, [r0] - adds r3, r0 - adds r2, r3 - adds r1, 0x43 - strb r2, [r1] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08063E04: .4byte gSpriteCoordOffsetY -_08063E08: .4byte gUnknown_08376050 - thumb_func_end SetObjectSubpriorityByZCoord - - thumb_func_start FieldObjectUpdateSubpriority -FieldObjectUpdateSubpriority: @ 8063E0C - push {lr} - adds r2, r0, 0 - ldrb r0, [r2, 0x3] - lsls r0, 29 - cmp r0, 0 - blt _08063E22 - ldrb r0, [r2, 0xB] - lsrs r0, 4 - movs r2, 0x1 - bl SetObjectSubpriorityByZCoord -_08063E22: - pop {r0} - bx r0 - thumb_func_end FieldObjectUpdateSubpriority - - thumb_func_start AreZCoordsCompatible -AreZCoordsCompatible: @ 8063E28 - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - cmp r0, 0 - beq _08063E3E - cmp r1, 0 - beq _08063E3E - cmp r0, r1 - bne _08063E42 -_08063E3E: - movs r0, 0x1 - b _08063E44 -_08063E42: - movs r0, 0 -_08063E44: - pop {r1} - bx r1 - thumb_func_end AreZCoordsCompatible - - thumb_func_start GroundEffect_SpawnOnTallGrass -GroundEffect_SpawnOnTallGrass: @ 8063E48 - push {lr} - ldr r3, _08063E8C @ =gUnknown_0202FF84 - movs r2, 0x10 - ldrsh r1, [r0, r2] - str r1, [r3] - movs r2, 0x12 - ldrsh r1, [r0, r2] - str r1, [r3, 0x4] - ldrb r1, [r0, 0xB] - lsrs r1, 4 - str r1, [r3, 0x8] - movs r1, 0x2 - str r1, [r3, 0xC] - ldrb r1, [r0, 0x8] - lsls r1, 8 - ldrb r2, [r0, 0x9] - orrs r1, r2 - str r1, [r3, 0x10] - ldrb r0, [r0, 0xA] - str r0, [r3, 0x14] - ldr r1, _08063E90 @ =gSaveBlock1 - ldrb r0, [r1, 0x5] - lsls r0, 8 - ldrb r1, [r1, 0x4] - orrs r0, r1 - str r0, [r3, 0x18] - movs r0, 0x1 - str r0, [r3, 0x1C] - movs r0, 0x4 - bl FieldEffectStart - pop {r0} - bx r0 - .align 2, 0 -_08063E8C: .4byte gUnknown_0202FF84 -_08063E90: .4byte gSaveBlock1 - thumb_func_end GroundEffect_SpawnOnTallGrass - - thumb_func_start sub_8063E94 -sub_8063E94: @ 8063E94 - push {lr} - ldr r3, _08063ED8 @ =gUnknown_0202FF84 - movs r2, 0x10 - ldrsh r1, [r0, r2] - str r1, [r3] - movs r2, 0x12 - ldrsh r1, [r0, r2] - str r1, [r3, 0x4] - ldrb r1, [r0, 0xB] - lsrs r1, 4 - str r1, [r3, 0x8] - movs r1, 0x2 - str r1, [r3, 0xC] - ldrb r1, [r0, 0x8] - lsls r1, 8 - ldrb r2, [r0, 0x9] - orrs r1, r2 - str r1, [r3, 0x10] - ldrb r0, [r0, 0xA] - str r0, [r3, 0x14] - ldr r1, _08063EDC @ =gSaveBlock1 - ldrb r0, [r1, 0x5] - lsls r0, 8 - ldrb r1, [r1, 0x4] - orrs r0, r1 - str r0, [r3, 0x18] - movs r0, 0 - str r0, [r3, 0x1C] - movs r0, 0x4 - bl FieldEffectStart - pop {r0} - bx r0 - .align 2, 0 -_08063ED8: .4byte gUnknown_0202FF84 -_08063EDC: .4byte gSaveBlock1 - thumb_func_end sub_8063E94 - - thumb_func_start sub_8063EE0 -sub_8063EE0: @ 8063EE0 - push {lr} - ldr r3, _08063F24 @ =gUnknown_0202FF84 - movs r2, 0x10 - ldrsh r1, [r0, r2] - str r1, [r3] - movs r2, 0x12 - ldrsh r1, [r0, r2] - str r1, [r3, 0x4] - ldrb r1, [r0, 0xB] - lsrs r1, 4 - str r1, [r3, 0x8] - movs r1, 0x2 - str r1, [r3, 0xC] - ldrb r1, [r0, 0x8] - lsls r1, 8 - ldrb r2, [r0, 0x9] - orrs r1, r2 - str r1, [r3, 0x10] - ldrb r0, [r0, 0xA] - str r0, [r3, 0x14] - ldr r1, _08063F28 @ =gSaveBlock1 - ldrb r0, [r1, 0x5] - lsls r0, 8 - ldrb r1, [r1, 0x4] - orrs r0, r1 - str r0, [r3, 0x18] - movs r0, 0x1 - str r0, [r3, 0x1C] - movs r0, 0x11 - bl FieldEffectStart - pop {r0} - bx r0 - .align 2, 0 -_08063F24: .4byte gUnknown_0202FF84 -_08063F28: .4byte gSaveBlock1 - thumb_func_end sub_8063EE0 - - thumb_func_start sub_8063F2C -sub_8063F2C: @ 8063F2C - push {lr} - ldr r3, _08063F70 @ =gUnknown_0202FF84 - movs r2, 0x10 - ldrsh r1, [r0, r2] - str r1, [r3] - movs r2, 0x12 - ldrsh r1, [r0, r2] - str r1, [r3, 0x4] - ldrb r1, [r0, 0xB] - lsrs r1, 4 - str r1, [r3, 0x8] - movs r1, 0x2 - str r1, [r3, 0xC] - ldrb r1, [r0, 0x8] - lsls r1, 8 - ldrb r2, [r0, 0x9] - orrs r1, r2 - str r1, [r3, 0x10] - ldrb r0, [r0, 0xA] - str r0, [r3, 0x14] - ldr r1, _08063F74 @ =gSaveBlock1 - ldrb r0, [r1, 0x5] - lsls r0, 8 - ldrb r1, [r1, 0x4] - orrs r0, r1 - str r0, [r3, 0x18] - movs r0, 0 - str r0, [r3, 0x1C] - movs r0, 0x11 - bl FieldEffectStart - pop {r0} - bx r0 - .align 2, 0 -_08063F70: .4byte gUnknown_0202FF84 -_08063F74: .4byte gSaveBlock1 - thumb_func_end sub_8063F2C - - thumb_func_start GroundEffect_WaterReflection -GroundEffect_WaterReflection: @ 8063F78 - push {lr} - movs r2, 0 - bl SetUpReflection - pop {r0} - bx r0 - thumb_func_end GroundEffect_WaterReflection - - thumb_func_start GroundEffect_IceReflection -GroundEffect_IceReflection: @ 8063F84 - push {lr} - movs r2, 0x1 - bl SetUpReflection - pop {r0} - bx r0 - thumb_func_end GroundEffect_IceReflection - - thumb_func_start GroundEffect_FlowingWater -GroundEffect_FlowingWater: @ 8063F90 - push {lr} - adds r1, r0, 0 - movs r0, 0x22 - bl oe_exec_and_other_stuff - pop {r0} - bx r0 - thumb_func_end GroundEffect_FlowingWater - - thumb_func_start sub_8063FA0 -sub_8063FA0: @ 8063FA0 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - ldrb r0, [r4, 0x5] - bl GetFieldObjectGraphicsInfo - ldr r1, _08063FC8 @ =gUnknown_08376080 - ldrb r0, [r0, 0xD] - lsls r0, 2 - adds r0, r1 - ldr r3, [r0] - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0 - bl _call_via_r3 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08063FC8: .4byte gUnknown_08376080 - thumb_func_end sub_8063FA0 - - thumb_func_start sub_8063FCC -sub_8063FCC: @ 8063FCC - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - ldrb r0, [r4, 0x5] - bl GetFieldObjectGraphicsInfo - ldr r1, _08063FF4 @ =gUnknown_08376080 - ldrb r0, [r0, 0xD] - lsls r0, 2 - adds r0, r1 - ldr r3, [r0] - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0x1 - bl _call_via_r3 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08063FF4: .4byte gUnknown_08376080 - thumb_func_end sub_8063FCC - - thumb_func_start nullsub_50 -nullsub_50: @ 8063FF8 - bx lr - thumb_func_end nullsub_50 - - thumb_func_start DoTracksGroundEffect_Footprints -DoTracksGroundEffect_Footprints: @ 8063FFC - push {r4,r5,lr} - sub sp, 0x4 - adds r5, r0, 0 - lsls r4, r2, 24 - lsrs r4, 24 - ldr r1, _08064044 @ =gSandFootprints_FieldEffectData - mov r0, sp - movs r2, 0x4 - bl memcpy - ldr r1, _08064048 @ =gUnknown_0202FF84 - movs r2, 0x14 - ldrsh r0, [r5, r2] - str r0, [r1] - movs r2, 0x16 - ldrsh r0, [r5, r2] - str r0, [r1, 0x4] - movs r0, 0x95 - str r0, [r1, 0x8] - movs r0, 0x2 - str r0, [r1, 0xC] - ldrb r0, [r5, 0x18] - lsls r0, 28 - lsrs r0, 28 - str r0, [r1, 0x10] - lsls r4, 1 - mov r1, sp - adds r0, r1, r4 - ldrb r0, [r0] - bl FieldEffectStart - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08064044: .4byte gSandFootprints_FieldEffectData -_08064048: .4byte gUnknown_0202FF84 - thumb_func_end DoTracksGroundEffect_Footprints - - thumb_func_start DoTracksGroundEffect_BikeTireTracks -DoTracksGroundEffect_BikeTireTracks: @ 806404C - push {r4,lr} - adds r4, r0, 0 - ldr r1, [r4, 0x10] - ldr r0, [r4, 0x14] - cmp r1, r0 - beq _0806408E - ldr r2, _08064094 @ =gUnknown_0202FF84 - movs r1, 0x14 - ldrsh r0, [r4, r1] - str r0, [r2] - movs r1, 0x16 - ldrsh r0, [r4, r1] - str r0, [r2, 0x4] - movs r0, 0x95 - str r0, [r2, 0x8] - movs r0, 0x2 - str r0, [r2, 0xC] - ldr r3, _08064098 @ =gBikeTireTracks_Transitions - ldrb r1, [r4, 0x18] - lsls r1, 28 - lsrs r1, 28 - adds r0, r4, 0 - adds r0, 0x20 - ldrb r0, [r0] - lsls r0, 2 - subs r0, 0x5 - adds r1, r0 - adds r1, r3 - ldrb r0, [r1] - str r0, [r2, 0x10] - movs r0, 0x23 - bl FieldEffectStart -_0806408E: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08064094: .4byte gUnknown_0202FF84 -_08064098: .4byte gBikeTireTracks_Transitions - thumb_func_end DoTracksGroundEffect_BikeTireTracks - - thumb_func_start GroundEffect_Ripple -GroundEffect_Ripple: @ 806409C - push {lr} - bl DoRippleFieldEffect - pop {r0} - bx r0 - thumb_func_end GroundEffect_Ripple - - thumb_func_start GroundEffect_StepOnPuddle -GroundEffect_StepOnPuddle: @ 80640A8 - push {lr} - adds r1, r0, 0 - movs r0, 0xF - bl oe_exec_and_other_stuff - pop {r0} - bx r0 - thumb_func_end GroundEffect_StepOnPuddle - - thumb_func_start GroundEffect_SandPile -GroundEffect_SandPile: @ 80640B8 - push {lr} - adds r1, r0, 0 - movs r0, 0x27 - bl oe_exec_and_other_stuff - pop {r0} - bx r0 - thumb_func_end GroundEffect_SandPile - - thumb_func_start GroundEffect_JumpOnTallGrass -GroundEffect_JumpOnTallGrass: @ 80640C8 - push {r4-r7,lr} - sub sp, 0x4 - adds r5, r0, 0 - adds r6, r1, 0 - ldr r1, _0806411C @ =gUnknown_0202FF84 - movs r2, 0x10 - ldrsh r0, [r5, r2] - str r0, [r1] - movs r4, 0x12 - ldrsh r0, [r5, r4] - str r0, [r1, 0x4] - ldrb r0, [r5, 0xB] - lsrs r0, 4 - str r0, [r1, 0x8] - movs r0, 0x2 - str r0, [r1, 0xC] - movs r0, 0xC - bl FieldEffectStart - ldrb r0, [r5, 0x8] - ldrb r1, [r5, 0x9] - ldrb r2, [r5, 0xA] - movs r7, 0x10 - ldrsh r3, [r5, r7] - movs r7, 0x12 - ldrsh r4, [r5, r7] - str r4, [sp] - bl sub_8126FF0 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x40 - bne _08064112 - adds r0, r5, 0 - adds r1, r6, 0 - bl GroundEffect_SpawnOnTallGrass -_08064112: - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0806411C: .4byte gUnknown_0202FF84 - thumb_func_end GroundEffect_JumpOnTallGrass - - thumb_func_start GroundEffect_JumpOnLongGrass -GroundEffect_JumpOnLongGrass: @ 8064120 - push {lr} - ldr r2, _08064144 @ =gUnknown_0202FF84 - movs r3, 0x10 - ldrsh r1, [r0, r3] - str r1, [r2] - movs r3, 0x12 - ldrsh r1, [r0, r3] - str r1, [r2, 0x4] - ldrb r0, [r0, 0xB] - lsrs r0, 4 - str r0, [r2, 0x8] - movs r0, 0x2 - str r0, [r2, 0xC] - movs r0, 0x12 - bl FieldEffectStart - pop {r0} - bx r0 - .align 2, 0 -_08064144: .4byte gUnknown_0202FF84 - thumb_func_end GroundEffect_JumpOnLongGrass - - thumb_func_start GroundEffect_JumpOnShallowWater -GroundEffect_JumpOnShallowWater: @ 8064148 - push {r4,lr} - ldr r3, _08064174 @ =gUnknown_0202FF84 - movs r4, 0x10 - ldrsh r2, [r0, r4] - str r2, [r3] - movs r4, 0x12 - ldrsh r2, [r0, r4] - str r2, [r3, 0x4] - ldrb r0, [r0, 0xB] - lsrs r0, 4 - str r0, [r3, 0x8] - ldrb r0, [r1, 0x5] - lsls r0, 28 - lsrs r0, 30 - str r0, [r3, 0xC] - movs r0, 0x10 - bl FieldEffectStart - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08064174: .4byte gUnknown_0202FF84 - thumb_func_end GroundEffect_JumpOnShallowWater - - thumb_func_start GroundEffect_JumpOnWater -GroundEffect_JumpOnWater: @ 8064178 - push {r4,lr} - ldr r3, _080641A4 @ =gUnknown_0202FF84 - movs r4, 0x10 - ldrsh r2, [r0, r4] - str r2, [r3] - movs r4, 0x12 - ldrsh r2, [r0, r4] - str r2, [r3, 0x4] - ldrb r0, [r0, 0xB] - lsrs r0, 4 - str r0, [r3, 0x8] - ldrb r0, [r1, 0x5] - lsls r0, 28 - lsrs r0, 30 - str r0, [r3, 0xC] - movs r0, 0xE - bl FieldEffectStart - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080641A4: .4byte gUnknown_0202FF84 - thumb_func_end GroundEffect_JumpOnWater - - thumb_func_start GroundEffect_JumpLandingDust -GroundEffect_JumpLandingDust: @ 80641A8 - push {r4,lr} - ldr r3, _080641D4 @ =gUnknown_0202FF84 - movs r4, 0x10 - ldrsh r2, [r0, r4] - str r2, [r3] - movs r4, 0x12 - ldrsh r2, [r0, r4] - str r2, [r3, 0x4] - ldrb r0, [r0, 0xB] - lsrs r0, 4 - str r0, [r3, 0x8] - ldrb r0, [r1, 0x5] - lsls r0, 28 - lsrs r0, 30 - str r0, [r3, 0xC] - movs r0, 0xA - bl FieldEffectStart - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080641D4: .4byte gUnknown_0202FF84 - thumb_func_end GroundEffect_JumpLandingDust - - thumb_func_start GroundEffect_ShortGrass -GroundEffect_ShortGrass: @ 80641D8 - push {lr} - adds r1, r0, 0 - movs r0, 0x29 - bl oe_exec_and_other_stuff - pop {r0} - bx r0 - thumb_func_end GroundEffect_ShortGrass - - thumb_func_start GroundEffect_HotSprings -GroundEffect_HotSprings: @ 80641E8 - push {lr} - adds r1, r0, 0 - movs r0, 0x2A - bl oe_exec_and_other_stuff - pop {r0} - bx r0 - thumb_func_end GroundEffect_HotSprings - - thumb_func_start GroundEffect_Seaweed -GroundEffect_Seaweed: @ 80641F8 - push {lr} - ldr r2, _08064214 @ =gUnknown_0202FF84 - movs r3, 0x10 - ldrsh r1, [r0, r3] - str r1, [r2] - movs r1, 0x12 - ldrsh r0, [r0, r1] - str r0, [r2, 0x4] - movs r0, 0x35 - bl FieldEffectStart - pop {r0} - bx r0 - .align 2, 0 -_08064214: .4byte gUnknown_0202FF84 - thumb_func_end GroundEffect_Seaweed - - thumb_func_start sub_8064218 -sub_8064218: @ 8064218 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r7, r0, 0 - adds r6, r1, 0 - adds r5, r2, 0 - movs r4, 0 - ldr r0, _08064258 @ =gUnknown_083760A0 - mov r8, r0 -_0806422A: - movs r0, 0x1 - ands r0, r5 - cmp r0, 0 - beq _08064240 - lsls r0, r4, 2 - add r0, r8 - ldr r2, [r0] - adds r0, r7, 0 - adds r1, r6, 0 - bl _call_via_r2 -_08064240: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - lsrs r5, 1 - cmp r4, 0x13 - bls _0806422A - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08064258: .4byte gUnknown_083760A0 - thumb_func_end sub_8064218 - - thumb_func_start filters_out_some_ground_effects -filters_out_some_ground_effects: @ 806425C - push {lr} - adds r2, r0, 0 - adds r3, r1, 0 - ldrb r0, [r2] - lsls r0, 27 - cmp r0, 0 - bge _0806428A - ldrb r1, [r2, 0x2] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - movs r1, 0x11 - negs r1, r1 - ands r0, r1 - adds r1, 0x8 - ands r0, r1 - subs r1, 0x18 - ands r0, r1 - strb r0, [r2, 0x2] - ldr r0, [r3] - ldr r1, _08064290 @ =0xfff9f7bd - ands r0, r1 - str r0, [r3] -_0806428A: - pop {r0} - bx r0 - .align 2, 0 -_08064290: .4byte 0xfff9f7bd - thumb_func_end filters_out_some_ground_effects - - thumb_func_start FilterOutStepOnPuddleGroundEffectIfJumping -FilterOutStepOnPuddleGroundEffectIfJumping: @ 8064294 - push {lr} - adds r2, r1, 0 - ldrb r0, [r0] - lsls r0, 26 - cmp r0, 0 - bge _080642A8 - ldr r0, [r2] - ldr r1, _080642AC @ =0xfffffbff - ands r0, r1 - str r0, [r2] -_080642A8: - pop {r0} - bx r0 - .align 2, 0 -_080642AC: .4byte 0xfffffbff - thumb_func_end FilterOutStepOnPuddleGroundEffectIfJumping - - thumb_func_start DoGroundEffects_OnSpawn -DoGroundEffects_OnSpawn: @ 80642B0 - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - adds r5, r1, 0 - ldrb r0, [r4] - lsls r0, 29 - cmp r0, 0 - bge _080642F4 - movs r0, 0 - str r0, [sp] - adds r0, r4, 0 - bl FieldObjectUpdateZCoordAndPriority - adds r0, r4, 0 - mov r1, sp - bl GetAllGroundEffectFlags_OnSpawn - adds r0, r4, 0 - adds r1, r5, 0 - bl FieldObjectSetSpriteOamTableForLongGrass - ldr r2, [sp] - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_8064218 - ldrb r1, [r4] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - movs r1, 0x11 - negs r1, r1 - ands r0, r1 - strb r0, [r4] -_080642F4: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end DoGroundEffects_OnSpawn - - thumb_func_start DoGroundEffects_OnBeginStep -DoGroundEffects_OnBeginStep: @ 80642FC - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - adds r5, r1, 0 - ldrb r0, [r4] - lsls r0, 29 - cmp r0, 0 - bge _08064348 - movs r0, 0 - str r0, [sp] - adds r0, r4, 0 - bl FieldObjectUpdateZCoordAndPriority - adds r0, r4, 0 - mov r1, sp - bl GetAllGroundEffectFlags_OnBeginStep - adds r0, r4, 0 - adds r1, r5, 0 - bl FieldObjectSetSpriteOamTableForLongGrass - adds r0, r4, 0 - mov r1, sp - bl filters_out_some_ground_effects - ldr r2, [sp] - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_8064218 - ldrb r1, [r4] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - movs r1, 0x11 - negs r1, r1 - ands r0, r1 - strb r0, [r4] -_08064348: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end DoGroundEffects_OnBeginStep - - thumb_func_start DoGroundEffects_OnFinishStep -DoGroundEffects_OnFinishStep: @ 8064350 - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - adds r5, r1, 0 - ldrb r0, [r4] - lsls r0, 28 - cmp r0, 0 - bge _0806439C - movs r0, 0 - str r0, [sp] - adds r0, r4, 0 - bl FieldObjectUpdateZCoordAndPriority - adds r0, r4, 0 - mov r1, sp - bl GetAllGroundEffectFlags_OnFinishStep - adds r0, r4, 0 - adds r1, r5, 0 - bl FieldObjectSetSpriteOamTableForLongGrass - adds r0, r4, 0 - mov r1, sp - bl FilterOutStepOnPuddleGroundEffectIfJumping - ldr r2, [sp] - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_8064218 - ldrb r1, [r4] - movs r0, 0x9 - negs r0, r0 - ands r0, r1 - movs r1, 0x21 - negs r1, r1 - ands r0, r1 - strb r0, [r4] -_0806439C: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end DoGroundEffects_OnFinishStep - - .align 2, 0 @ Don't pad with nop. diff --git a/include/field_effect_helpers.h b/include/field_effect_helpers.h index a1dd53a2b..11e96254d 100644 --- a/include/field_effect_helpers.h +++ b/include/field_effect_helpers.h @@ -27,5 +27,8 @@ void sub_8127ED0(u8, u8); void sub_8127F28(u8, u8, s16); u8 sub_8128124(u8 id); void ash(s16, s16, u16, u8); +void SetUpReflection(struct MapObject *mapObj, struct Sprite *sprite, u8 a); +u32 oe_exec_and_other_stuff(u8 fieldEffectId, struct MapObject *mapObject); +u8 sub_8126FF0(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y); #endif // GUARD_FIELD_EFFECT_HELPERS_H diff --git a/include/field_map_obj_helpers.h b/include/field_map_obj_helpers.h index fd29a9a7f..f760bf153 100644 --- a/include/field_map_obj_helpers.h +++ b/include/field_map_obj_helpers.h @@ -18,4 +18,6 @@ void DoShadowFieldEffect(struct MapObject *mapObject); u8 sub_8064704(struct Sprite *); u8 sub_806478C(struct Sprite *); void obj_anim_image_set_and_seek(struct Sprite *sprite, u8 a2, u8 a3); +void DoRippleFieldEffect(struct MapObject *mapObj, struct Sprite *sprite); + #endif diff --git a/ld_script.txt b/ld_script.txt index c60aa3729..231951647 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -96,7 +96,6 @@ SECTIONS { asm/field_map_obj.o(.text); src/field_map_obj.o(.text_fmocb2_c); src/field_ground_effect.o(.text); - asm/field_ground_effect.o(.text); src/field_map_obj_helpers.o(.text); src/field_message_box.o(.text); src/map_obj_lock.o(.text); diff --git a/src/field_ground_effect.c b/src/field_ground_effect.c index 42862d0ff..79729471c 100644 --- a/src/field_ground_effect.c +++ b/src/field_ground_effect.c @@ -1,9 +1,22 @@ #include "global.h" #include "field_ground_effect.h" +#include "field_effect.h" +#include "field_effect_helpers.h" +#include "field_map_obj_helpers.h" #include "fieldmap.h" #include "metatile_behavior.h" extern u32 gUnknown_08376008[]; +extern u8 (*gUnknown_08376040[4])(u32 a); +extern const u8 gFieldObjectPriorities_08376070[]; +extern const u8 gFieldObjectPriorities_08376060[]; +extern const u8 gUnknown_08376050[]; +extern void (*gUnknown_08376080[3])(struct MapObject *mapObj, struct Sprite *sprite, u8 a); +extern const u8 gSandFootprints_FieldEffectData[4]; +extern const u8 gBikeTireTracks_Transitions[4][4]; +extern void (*gUnknown_083760A0[0x14])(struct MapObject *mapObj, struct Sprite *sprite); + +#define NUM_GROUND_EFFECTS (sizeof(gUnknown_083760A0) / sizeof(gUnknown_083760A0[0])) void GetAllGroundEffectFlags_OnSpawn(struct MapObject *mapObj, u32 *flags) { @@ -100,8 +113,8 @@ void GetGroundEffectFlags_Tracks(struct MapObject *mapObj, u32 *flags) { *flags |= 0x100; } - else if (MetatileBehavior_IsSandOrDeepSand(mapObj->mapobj_unk_1F) - || MetatileBehavior_IsUnusedFootprintMetatile(mapObj->mapobj_unk_1F)) + else if (MetatileBehavior_IsSandOrDeepSand(mapObj->mapobj_unk_1F) || + MetatileBehavior_IsUnusedFootprintMetatile(mapObj->mapobj_unk_1F)) { *flags |= 0x80; } @@ -109,8 +122,8 @@ void GetGroundEffectFlags_Tracks(struct MapObject *mapObj, u32 *flags) void GetGroundEffectFlags_SandPile(struct MapObject *mapObj, u32 *flags) { - if (MetatileBehavior_IsDeepSand(mapObj->mapobj_unk_1E) - && MetatileBehavior_IsDeepSand(mapObj->mapobj_unk_1F)) + if (MetatileBehavior_IsDeepSand(mapObj->mapobj_unk_1E) && + MetatileBehavior_IsDeepSand(mapObj->mapobj_unk_1F)) { if (!mapObj->mapobj_bit_20) { @@ -127,8 +140,10 @@ void GetGroundEffectFlags_SandPile(struct MapObject *mapObj, u32 *flags) void GetGroundEffectFlags_ShallowFlowingWater(struct MapObject *mapObj, u32 *flags) { - if ((MetatileBehavior_IsShallowFlowingWater(mapObj->mapobj_unk_1E) && MetatileBehavior_IsShallowFlowingWater(mapObj->mapobj_unk_1F)) - || (MetatileBehavior_IsPacifidlogLog(mapObj->mapobj_unk_1E) && MetatileBehavior_IsPacifidlogLog(mapObj->mapobj_unk_1F))) + if ((MetatileBehavior_IsShallowFlowingWater(mapObj->mapobj_unk_1E) && + MetatileBehavior_IsShallowFlowingWater(mapObj->mapobj_unk_1F)) || + (MetatileBehavior_IsPacifidlogLog(mapObj->mapobj_unk_1E) && + MetatileBehavior_IsPacifidlogLog(mapObj->mapobj_unk_1F))) { if (!mapObj->mapobj_bit_19) { @@ -145,8 +160,8 @@ void GetGroundEffectFlags_ShallowFlowingWater(struct MapObject *mapObj, u32 *fla void GetGroundEffectFlags_Puddle(struct MapObject *mapObj, u32 *flags) { - if (MetatileBehavior_IsPuddle(mapObj->mapobj_unk_1E) - && MetatileBehavior_IsPuddle(mapObj->mapobj_unk_1F)) + if (MetatileBehavior_IsPuddle(mapObj->mapobj_unk_1E) && + MetatileBehavior_IsPuddle(mapObj->mapobj_unk_1F)) { *flags |= 0x400; } @@ -160,8 +175,8 @@ void GetGroundEffectFlags_Ripple(struct MapObject *mapObj, u32 *flags) void GetGroundEffectFlags_ShortGrass(struct MapObject *mapObj, u32 *flags) { - if (MetatileBehavior_IsShortGrass(mapObj->mapobj_unk_1E) - && MetatileBehavior_IsShortGrass(mapObj->mapobj_unk_1F)) + if (MetatileBehavior_IsShortGrass(mapObj->mapobj_unk_1E) && + MetatileBehavior_IsShortGrass(mapObj->mapobj_unk_1F)) { if (!mapObj->mapobj_bit_18) { @@ -178,8 +193,8 @@ void GetGroundEffectFlags_ShortGrass(struct MapObject *mapObj, u32 *flags) void GetGroundEffectFlags_HotSprings(struct MapObject *mapObj, u32 *flags) { - if (MetatileBehavior_IsHotSprings(mapObj->mapobj_unk_1E) - && MetatileBehavior_IsHotSprings(mapObj->mapobj_unk_1F)) + if (MetatileBehavior_IsHotSprings(mapObj->mapobj_unk_1E) && + MetatileBehavior_IsHotSprings(mapObj->mapobj_unk_1F)) { if (!mapObj->mapobj_bit_21) { @@ -204,8 +219,7 @@ void GetGroundEffectFlags_JumpLanding(struct MapObject *mapObj, u32 *flags) { typedef bool8 (*MetatileFunc)(u8); - static const MetatileFunc metatileFuncs[] = - { + static const MetatileFunc metatileFuncs[] = { MetatileBehavior_IsTallGrass, MetatileBehavior_IsLongGrass, MetatileBehavior_IsPuddle, @@ -214,14 +228,13 @@ void GetGroundEffectFlags_JumpLanding(struct MapObject *mapObj, u32 *flags) MetatileBehavior_IsATile, }; - static const u32 jumpLandingFlags[] = - { - 0x00001000, // Landing in tall grass - 0x00002000, // Landing in long grass - 0x00004000, // Landing on puddle - 0x00008000, // Landing on surfable water or underwater - 0x00004000, // Landing on shallow flowing water - 0x00010000, // Landing on any other type of ground + static const u32 jumpLandingFlags[] = { + 0x00001000, // Landing in tall grass + 0x00002000, // Landing in long grass + 0x00004000, // Landing on puddle + 0x00008000, // Landing on surfable water or underwater + 0x00004000, // Landing on shallow flowing water + 0x00010000, // Landing on any other type of ground }; if (mapObj->mapobj_bit_5 && !mapObj->mapobj_bit_25) @@ -238,3 +251,658 @@ void GetGroundEffectFlags_JumpLanding(struct MapObject *mapObj, u32 *flags) } } } + +#ifdef NONMATCHING +u8 FieldObjectCheckForReflectiveSurface(struct MapObject *mapObj) +{ + const struct MapObjectGraphicsInfo *info = GetFieldObjectGraphicsInfo(mapObj->graphicsId); + + // ceil div by tile width? + s16 width = (info->width + 8) >> 4; + s16 height = (info->height + 8) >> 4; + s16 i; + s16 j; + u8 result; + u8 b; + register u32 a asm("r10"); + register s32 aa asm("r7"); + + for (i = 0; i < height; i++) + { + a = 1; + b = MapGridGetMetatileBehaviorAt(mapObj->coords2.x, mapObj->coords2.y + a + i); + result = GetReflectionTypeByMetatileBehavior(b); + + if (result) + return result; + + b = MapGridGetMetatileBehaviorAt(mapObj->coords3.x, mapObj->coords3.y + a + i); + result = GetReflectionTypeByMetatileBehavior(b); + + if (result) + return result; + + for (j = 1; j < width; j++) + { + aa = 1; + + b = MapGridGetMetatileBehaviorAt(mapObj->coords2.x + j, mapObj->coords2.y + aa + i); + result = GetReflectionTypeByMetatileBehavior(b); + + if (result) + return result; + + b = MapGridGetMetatileBehaviorAt(mapObj->coords2.x - j, mapObj->coords2.y + aa + i); + result = GetReflectionTypeByMetatileBehavior(b); + + if (result) + return result; + + b = MapGridGetMetatileBehaviorAt(mapObj->coords3.x + j, mapObj->coords3.y + aa + i); + result = GetReflectionTypeByMetatileBehavior(b); + + if (result) + return result; + + b = MapGridGetMetatileBehaviorAt(mapObj->coords3.x - j, mapObj->coords3.y + aa + i); + result = GetReflectionTypeByMetatileBehavior(b); + + if (result) + return result; + } + } + + return 0; +} +#else +__attribute__((naked)) u8 FieldObjectCheckForReflectiveSurface(struct MapObject *mapObj) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x8\n\ + adds r5, r0, 0\n\ + ldrb r0, [r5, 0x5]\n\ + bl GetFieldObjectGraphicsInfo\n\ + movs r2, 0x8\n\ + ldrsh r1, [r0, r2]\n\ + adds r1, 0x8\n\ + lsls r1, 12\n\ + lsrs r1, 16\n\ + str r1, [sp]\n\ + movs r1, 0xA\n\ + ldrsh r0, [r0, r1]\n\ + adds r0, 0x8\n\ + lsls r0, 12\n\ + movs r4, 0\n\ + lsrs r2, r0, 16\n\ + str r2, [sp, 0x4]\n\ + asrs r0, 16\n\ + cmp r4, r0\n\ + blt _08063A7A\n\ + b _08063B80\n\ +_08063A7A:\n\ + movs r0, 0x1\n\ + mov r10, r0\n\ +_08063A7E:\n\ + movs r1, 0x10\n\ + ldrsh r0, [r5, r1]\n\ + movs r2, 0x12\n\ + ldrsh r1, [r5, r2]\n\ + add r1, r10\n\ + lsls r4, 16\n\ + asrs r6, r4, 16\n\ + adds r1, r6\n\ + bl MapGridGetMetatileBehaviorAt\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + bl GetReflectionTypeByMetatileBehavior\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r9, r4\n\ + cmp r0, 0\n\ + bne _08063B82\n\ + movs r1, 0x14\n\ + ldrsh r0, [r5, r1]\n\ + movs r2, 0x16\n\ + ldrsh r1, [r5, r2]\n\ + add r1, r10\n\ + adds r1, r6\n\ + bl MapGridGetMetatileBehaviorAt\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + bl GetReflectionTypeByMetatileBehavior\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0\n\ + bne _08063B82\n\ + movs r2, 0x1\n\ + ldr r1, [sp]\n\ + lsls r0, r1, 16\n\ + asrs r1, r0, 16\n\ + mov r8, r0\n\ + cmp r2, r1\n\ + bge _08063B6E\n\ + movs r0, 0x80\n\ + lsls r0, 9\n\ + asrs r7, r0, 16\n\ +_08063AD8:\n\ + movs r1, 0x10\n\ + ldrsh r0, [r5, r1]\n\ + lsls r1, r2, 16\n\ + asrs r4, r1, 16\n\ + adds r0, r4\n\ + movs r2, 0x12\n\ + ldrsh r1, [r5, r2]\n\ + adds r1, r7\n\ + adds r1, r6\n\ + bl MapGridGetMetatileBehaviorAt\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + bl GetReflectionTypeByMetatileBehavior\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0\n\ + bne _08063B82\n\ + movs r1, 0x10\n\ + ldrsh r0, [r5, r1]\n\ + subs r0, r4\n\ + movs r2, 0x12\n\ + ldrsh r1, [r5, r2]\n\ + adds r1, r7\n\ + adds r1, r6\n\ + bl MapGridGetMetatileBehaviorAt\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + bl GetReflectionTypeByMetatileBehavior\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0\n\ + bne _08063B82\n\ + movs r1, 0x14\n\ + ldrsh r0, [r5, r1]\n\ + adds r0, r4\n\ + movs r2, 0x16\n\ + ldrsh r1, [r5, r2]\n\ + adds r1, r7\n\ + adds r1, r6\n\ + bl MapGridGetMetatileBehaviorAt\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + bl GetReflectionTypeByMetatileBehavior\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0\n\ + bne _08063B82\n\ + movs r1, 0x14\n\ + ldrsh r0, [r5, r1]\n\ + subs r0, r4\n\ + movs r2, 0x16\n\ + ldrsh r1, [r5, r2]\n\ + adds r1, r7\n\ + adds r1, r6\n\ + bl MapGridGetMetatileBehaviorAt\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + bl GetReflectionTypeByMetatileBehavior\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0\n\ + bne _08063B82\n\ + adds r0, r4, 0x1\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + cmp r0, r8\n\ + blt _08063AD8\n\ +_08063B6E:\n\ + movs r1, 0x80\n\ + lsls r1, 9\n\ + add r1, r9\n\ + lsrs r4, r1, 16\n\ + ldr r2, [sp, 0x4]\n\ + lsls r0, r2, 16\n\ + cmp r1, r0\n\ + bge _08063B80\n\ + b _08063A7E\n\ +_08063B80:\n\ + movs r0, 0\n\ +_08063B82:\n\ + add sp, 0x8\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\ +.syntax divided\n"); +} +#endif + +u8 GetReflectionTypeByMetatileBehavior(u32 behavior) +{ + if (MetatileBehavior_IsIce(behavior)) + return 1; + else if (MetatileBehavior_IsReflective(behavior)) + return 2; + else + return 0; +} + +u8 GetLedgeJumpDirection(s16 x, s16 y, u8 z) +{ + u8 b; + u8 index = z; + + if (index == 0) + return 0; + else if (index > 4) + index -= 4; + + index--; + b = MapGridGetMetatileBehaviorAt(x, y); + + if (gUnknown_08376040[index](b) == 1) + return index + 1; + + return 0; +} + +void FieldObjectSetSpriteOamTableForLongGrass(struct MapObject *mapObj, struct Sprite *sprite) +{ + if (mapObj->mapobj_bit_4) + return; + + if (!MetatileBehavior_IsLongGrass(mapObj->mapobj_unk_1E)) + return; + + if (!MetatileBehavior_IsLongGrass(mapObj->mapobj_unk_1F)) + return; + + sprite->subspriteTableNum = 4; + + if (ZCoordToPriority(mapObj->elevation) == 1) + sprite->subspriteTableNum = 5; +} + +bool8 IsZCoordMismatchAt(u8 z, s16 x, s16 y) +{ + u8 mapZ; + + if (z == 0) + return 0; + + mapZ = MapGridGetZCoordAt(x, y); + + if (mapZ == 0 || mapZ == 0xF) + return 0; + + if (mapZ != z) + return 1; + + return 0; +} + +void FieldObjectUpdateZCoordAndPriority(struct MapObject *mapObj, struct Sprite *sprite) +{ + if (mapObj->mapobj_bit_26) + return; + + FieldObjectUpdateZCoord(mapObj); + + sprite->subspriteTableNum = gFieldObjectPriorities_08376070[mapObj->elevation]; + sprite->oam.priority = gFieldObjectPriorities_08376060[mapObj->elevation]; +} + +void InitObjectPriorityByZCoord(struct Sprite *sprite, u8 z) +{ + sprite->subspriteTableNum = gFieldObjectPriorities_08376070[z]; + sprite->oam.priority = gFieldObjectPriorities_08376060[z]; +} + +u8 ZCoordToPriority(u8 z) +{ + return gFieldObjectPriorities_08376060[z]; +} + +void FieldObjectUpdateZCoord(struct MapObject *mapObj) +{ + u8 z = MapGridGetZCoordAt(mapObj->coords2.x, mapObj->coords2.y); + u8 z2 = MapGridGetZCoordAt(mapObj->coords3.x, mapObj->coords3.y); + + if (z == 0xF || z2 == 0xF) + return; + + mapObj->mapobj_unk_0B_0 = z; + + if (z != 0 && z != 0xF) + mapObj->elevation = z; +} + +void SetObjectSubpriorityByZCoord(u8 a, struct Sprite *sprite, u8 b) +{ + s32 tmp = sprite->centerToCornerVecY; + u32 tmpa = *(u16 *)&sprite->pos1.y; + u32 tmpb = *(u16 *)&gSpriteCoordOffsetY; + s32 tmp2 = (tmpa - tmp) + tmpb; + u16 tmp3 = (0x10 - ((((u32)tmp2 + 8) & 0xFF) >> 4)) * 2; + sprite->subpriority = tmp3 + gUnknown_08376050[a] + b; +} + +void FieldObjectUpdateSubpriority(struct MapObject *mapObj, struct Sprite *sprite) +{ + if (mapObj->mapobj_bit_26) + return; + + SetObjectSubpriorityByZCoord(mapObj->elevation, sprite, 1); +} + +bool8 AreZCoordsCompatible(u8 a, u8 b) +{ + if (a == 0 || b == 0) + return TRUE; + + if (a != b) + return FALSE; + + return TRUE; +} + +#define READ8(ptr, s, member) ((ptr)[offsetof(s, member)]) + +void GroundEffect_SpawnOnTallGrass(struct MapObject *mapObj, struct Sprite *sprite) +{ + u8 *ptr; + + gUnknown_0202FF84[0] = mapObj->coords2.x; + gUnknown_0202FF84[1] = mapObj->coords2.y; + gUnknown_0202FF84[2] = mapObj->elevation; + gUnknown_0202FF84[3] = 2; + gUnknown_0202FF84[4] = (mapObj->localId << 8) | mapObj->mapNum; + gUnknown_0202FF84[5] = mapObj->mapGroup; + + ptr = (u8 *)&gSaveBlock1; + gUnknown_0202FF84[6] = READ8(ptr, struct SaveBlock1, location.mapNum) << 8 | + READ8(ptr, struct SaveBlock1, location.mapGroup); + + gUnknown_0202FF84[7] = 1; + FieldEffectStart(4); +} + +void sub_8063E94(struct MapObject *mapObj) +{ + u8 *ptr; + + gUnknown_0202FF84[0] = mapObj->coords2.x; + gUnknown_0202FF84[1] = mapObj->coords2.y; + gUnknown_0202FF84[2] = mapObj->elevation; + gUnknown_0202FF84[3] = 2; + gUnknown_0202FF84[4] = (mapObj->localId << 8) | mapObj->mapNum; + gUnknown_0202FF84[5] = mapObj->mapGroup; + + ptr = (u8 *)&gSaveBlock1; + gUnknown_0202FF84[6] = READ8(ptr, struct SaveBlock1, location.mapNum) << 8 | + READ8(ptr, struct SaveBlock1, location.mapGroup); + + gUnknown_0202FF84[7] = 0; + FieldEffectStart(4); +} + +void sub_8063EE0(struct MapObject *mapObj) +{ + u8 *ptr; + + gUnknown_0202FF84[0] = mapObj->coords2.x; + gUnknown_0202FF84[1] = mapObj->coords2.y; + gUnknown_0202FF84[2] = mapObj->elevation; + gUnknown_0202FF84[3] = 2; + gUnknown_0202FF84[4] = (mapObj->localId << 8) | mapObj->mapNum; + gUnknown_0202FF84[5] = mapObj->mapGroup; + + ptr = (u8 *)&gSaveBlock1; + gUnknown_0202FF84[6] = READ8(ptr, struct SaveBlock1, location.mapNum) << 8 | + READ8(ptr, struct SaveBlock1, location.mapGroup); + + gUnknown_0202FF84[7] = 1; + FieldEffectStart(17); +} + +void sub_8063F2C(struct MapObject *mapObj) +{ + u8 *ptr; + + gUnknown_0202FF84[0] = mapObj->coords2.x; + gUnknown_0202FF84[1] = mapObj->coords2.y; + gUnknown_0202FF84[2] = mapObj->elevation; + gUnknown_0202FF84[3] = 2; + gUnknown_0202FF84[4] = (mapObj->localId << 8) | mapObj->mapNum; + gUnknown_0202FF84[5] = mapObj->mapGroup; + + ptr = (u8 *)&gSaveBlock1; + gUnknown_0202FF84[6] = READ8(ptr, struct SaveBlock1, location.mapNum) << 8 | + READ8(ptr, struct SaveBlock1, location.mapGroup); + + gUnknown_0202FF84[7] = 0; + FieldEffectStart(17); +} + +void GroundEffect_WaterReflection(struct MapObject *mapObj, struct Sprite *sprite) +{ + SetUpReflection(mapObj, sprite, 0); +} + +void GroundEffect_IceReflection(struct MapObject *mapObj, struct Sprite *sprite) +{ + SetUpReflection(mapObj, sprite, 1); +} + +void GroundEffect_FlowingWater(struct MapObject *mapObj) +{ + oe_exec_and_other_stuff(FLDEFF_FEET_IN_FLOWING_WATER, mapObj); +} + +void sub_8063FA0(struct MapObject *mapObj, struct Sprite *sprite) +{ + const struct MapObjectGraphicsInfo *info = GetFieldObjectGraphicsInfo(mapObj->graphicsId); + gUnknown_08376080[info->tracks](mapObj, sprite, 0); +} + +void sub_8063FCC(struct MapObject *mapObj, struct Sprite *sprite) +{ + const struct MapObjectGraphicsInfo *info = GetFieldObjectGraphicsInfo(mapObj->graphicsId); + gUnknown_08376080[info->tracks](mapObj, sprite, 1); +} + +void nullsub_50(struct MapObject *mapObj, struct Sprite *sprite, u8 a) +{ +} + +void DoTracksGroundEffect_Footprints(struct MapObject *mapObj, struct Sprite *sprite, u8 a) +{ + u16 buf[2]; + memcpy(&buf, gSandFootprints_FieldEffectData, sizeof(gSandFootprints_FieldEffectData)); + gUnknown_0202FF84[0] = mapObj->coords3.x; + gUnknown_0202FF84[1] = mapObj->coords3.y; + gUnknown_0202FF84[2] = 149; + gUnknown_0202FF84[3] = 2; + gUnknown_0202FF84[4] = mapObj->mapobj_unk_18; + FieldEffectStart(buf[a]); +} + +void DoTracksGroundEffect_BikeTireTracks(struct MapObject *mapObj, struct Sprite *sprite, u8 a) +{ + if (mapObj->coords2.x != mapObj->coords3.x || mapObj->coords2.y != mapObj->coords3.y) + { + gUnknown_0202FF84[0] = mapObj->coords3.x; + gUnknown_0202FF84[1] = mapObj->coords3.y; + gUnknown_0202FF84[2] = 149; + gUnknown_0202FF84[3] = 2; + gUnknown_0202FF84[4] = + gBikeTireTracks_Transitions[mapObj->mapobj_unk_20][mapObj->mapobj_unk_18 - 5]; + FieldEffectStart(FLDEFF_BIKE_TIRE_TRACKS); + } +} + +void GroundEffect_Ripple(struct MapObject *mapObj, struct Sprite *sprite) +{ + DoRippleFieldEffect(mapObj, sprite); +} + +void GroundEffect_StepOnPuddle(struct MapObject *mapObj, struct Sprite *sprite) +{ + oe_exec_and_other_stuff(FLDEFF_SPLASH, mapObj); +} + +void GroundEffect_SandPile(struct MapObject *mapObj, struct Sprite *sprite) +{ + oe_exec_and_other_stuff(FLDEFF_SAND_PILE, mapObj); +} + +void GroundEffect_JumpOnTallGrass(struct MapObject *mapObj, struct Sprite *sprite) +{ + u8 spriteId; + + gUnknown_0202FF84[0] = mapObj->coords2.x; + gUnknown_0202FF84[1] = mapObj->coords2.y; + gUnknown_0202FF84[2] = mapObj->elevation; + gUnknown_0202FF84[3] = 2; + FieldEffectStart(FLDEFF_JUMP_TALL_GRASS); + + spriteId = sub_8126FF0( + mapObj->localId, mapObj->mapNum, mapObj->mapGroup, mapObj->coords2.x, mapObj->coords2.y); + + if (spriteId == MAX_SPRITES) + GroundEffect_SpawnOnTallGrass(mapObj, sprite); +} + +void GroundEffect_JumpOnLongGrass(struct MapObject *mapObj, struct Sprite *sprite) +{ + gUnknown_0202FF84[0] = mapObj->coords2.x; + gUnknown_0202FF84[1] = mapObj->coords2.y; + gUnknown_0202FF84[2] = mapObj->elevation; + gUnknown_0202FF84[3] = 2; + FieldEffectStart(FLDEFF_JUMP_LONG_GRASS); +} + +void GroundEffect_JumpOnShallowWater(struct MapObject *mapObj, struct Sprite *sprite) +{ + gUnknown_0202FF84[0] = mapObj->coords2.x; + gUnknown_0202FF84[1] = mapObj->coords2.y; + gUnknown_0202FF84[2] = mapObj->elevation; + gUnknown_0202FF84[3] = sprite->oam.priority; + FieldEffectStart(FLDEFF_JUMP_SMALL_SPLASH); +} + +void GroundEffect_JumpOnWater(struct MapObject *mapObj, struct Sprite *sprite) +{ + gUnknown_0202FF84[0] = mapObj->coords2.x; + gUnknown_0202FF84[1] = mapObj->coords2.y; + gUnknown_0202FF84[2] = mapObj->elevation; + gUnknown_0202FF84[3] = sprite->oam.priority; + FieldEffectStart(FLDEFF_JUMP_BIG_SPLASH); +} + +void GroundEffect_JumpLandingDust(struct MapObject *mapObj, struct Sprite *sprite) +{ + gUnknown_0202FF84[0] = mapObj->coords2.x; + gUnknown_0202FF84[1] = mapObj->coords2.y; + gUnknown_0202FF84[2] = mapObj->elevation; + gUnknown_0202FF84[3] = sprite->oam.priority; + FieldEffectStart(FLDEFF_DUST); +} + +void GroundEffect_ShortGrass(struct MapObject *mapObj, struct Sprite *sprite) +{ + oe_exec_and_other_stuff(FLDEFF_SHORT_GRASS, mapObj); +} + +void GroundEffect_HotSprings(struct MapObject *mapObj, struct Sprite *sprite) +{ + oe_exec_and_other_stuff(FLDEFF_HOT_SPRINGS_WATER, mapObj); +} + +void GroundEffect_Seaweed(struct MapObject *mapObj, struct Sprite *sprite) +{ + gUnknown_0202FF84[0] = mapObj->coords2.x; + gUnknown_0202FF84[1] = mapObj->coords2.y; + FieldEffectStart(FLDEFF_BUBBLES); +} + +void sub_8064218(struct MapObject *mapObj, struct Sprite *sprite, u32 flags) +{ + u8 i; + for (i = 0; i < NUM_GROUND_EFFECTS; i++, flags >>= 1) + if (flags & 1) + gUnknown_083760A0[i](mapObj, sprite); +} + +void filters_out_some_ground_effects(struct MapObject *mapObj, u32 *flags) +{ + if (mapObj->mapobj_bit_4) + { + mapObj->mapobj_bit_18 = 0; + mapObj->mapobj_bit_20 = 0; + mapObj->mapobj_bit_19 = 0; + mapObj->mapobj_bit_21 = 0; + *flags &= 0xFFF9F7BD; + } +} + +void FilterOutStepOnPuddleGroundEffectIfJumping(struct MapObject *mapObj, u32 *flags) +{ + if (mapObj->mapobj_bit_5) + *flags &= 0xFFFFFBFF; +} + +void DoGroundEffects_OnSpawn(struct MapObject *mapObj, struct Sprite *sprite) +{ + u32 flags; + + if (mapObj->mapobj_bit_2) + { + flags = 0; + FieldObjectUpdateZCoordAndPriority(mapObj, sprite); + GetAllGroundEffectFlags_OnSpawn(mapObj, &flags); + FieldObjectSetSpriteOamTableForLongGrass(mapObj, sprite); + sub_8064218(mapObj, sprite, flags); + mapObj->mapobj_bit_2 = 0; + mapObj->mapobj_bit_4 = 0; + } +} + +void DoGroundEffects_OnBeginStep(struct MapObject *mapObj, struct Sprite *sprite) +{ + u32 flags; + + if (mapObj->mapobj_bit_2) + { + flags = 0; + FieldObjectUpdateZCoordAndPriority(mapObj, sprite); + GetAllGroundEffectFlags_OnBeginStep(mapObj, &flags); + FieldObjectSetSpriteOamTableForLongGrass(mapObj, sprite); + filters_out_some_ground_effects(mapObj, &flags); + sub_8064218(mapObj, sprite, flags); + mapObj->mapobj_bit_2 = 0; + mapObj->mapobj_bit_4 = 0; + } +} + +void DoGroundEffects_OnFinishStep(struct MapObject *mapObj, struct Sprite *sprite) +{ + u32 flags; + + if (mapObj->mapobj_bit_3) + { + flags = 0; + FieldObjectUpdateZCoordAndPriority(mapObj, sprite); + GetAllGroundEffectFlags_OnFinishStep(mapObj, &flags); + FieldObjectSetSpriteOamTableForLongGrass(mapObj, sprite); + FilterOutStepOnPuddleGroundEffectIfJumping(mapObj, &flags); + sub_8064218(mapObj, sprite, flags); + mapObj->mapobj_bit_3 = 0; + mapObj->mapobj_bit_5 = 0; + } +} -- cgit v1.2.3 From e262fb05fb9a4a1fe1f1c3966e2c7e465b446ea9 Mon Sep 17 00:00:00 2001 From: Touched Date: Tue, 22 Aug 2017 18:15:36 +0200 Subject: Convert data/field_ground_effect.s to C --- data/field_ground_effect.s | 72 ------------------- ld_script.txt | 1 - src/field_ground_effect.c | 169 ++++++++++++++++++++++++++++++++++++--------- 3 files changed, 135 insertions(+), 107 deletions(-) delete mode 100644 data/field_ground_effect.s diff --git a/data/field_ground_effect.s b/data/field_ground_effect.s deleted file mode 100644 index d3dbceedb..000000000 --- a/data/field_ground_effect.s +++ /dev/null @@ -1,72 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - - .align 2 -gUnknown_08376040:: @ 8376040 - .4byte MetatileBehavior_IsJumpSouth - .4byte MetatileBehavior_IsJumpNorth - .4byte MetatileBehavior_IsJumpWest - .4byte MetatileBehavior_IsJumpEast - -gUnknown_08376050:: @ 8376050 - .byte 0x73, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x00, 0x00, 0x73 - -@ Each byte corresponds to a sprite priority for a field object. -@ This is directly the inverse of gFieldObjectPriorities_08376070. -gFieldObjectPriorities_08376060:: @ 8376060 - .byte 2, 2, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 0, 0, 2 - -@ Each byte corresponds to a sprite priority for a field object. -@ This is the inverse of gFieldObjectPriorities_08376060. -@ 1 = Above player sprite -@ 2 = Below player sprite -gFieldObjectPriorities_08376070:: @ 8376070 - .byte 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 0, 0, 1 - - .align 2 -gUnknown_08376080:: @ 8376080 - .4byte nullsub_50 - .4byte DoTracksGroundEffect_Footprints - .4byte DoTracksGroundEffect_BikeTireTracks - -@ First byte is a Field Effect script id. (gFieldEffectScriptPointers) -@ Last three bytes are unknown. -gSandFootprints_FieldEffectData:: @ 837608C - .byte 0xD, 0x0, 0x18, 0x0 - -@ Specifies which bike track shape to show next. -@ For example, when the bike turns from up to right, it will show -@ a track that curves to the right. -@ Each 4-byte row corresponds to the initial direction of the bike, and -@ each byte in that row is for the next direction of the bike in the order -@ of down, up, left, right. -gBikeTireTracks_Transitions:: @ 8376090 - .byte 1, 2, 7, 8 - .byte 1, 2, 6, 5 - .byte 5, 8, 3, 4 - .byte 6, 7, 3, 4 - - .align 2 -gUnknown_083760A0:: @ 83760A0 - .4byte GroundEffect_SpawnOnTallGrass - .4byte sub_8063E94 - .4byte sub_8063EE0 - .4byte sub_8063F2C - .4byte GroundEffect_WaterReflection - .4byte GroundEffect_IceReflection - .4byte GroundEffect_FlowingWater - .4byte sub_8063FA0 - .4byte sub_8063FCC - .4byte GroundEffect_Ripple - .4byte GroundEffect_StepOnPuddle - .4byte GroundEffect_SandPile - .4byte GroundEffect_JumpOnTallGrass - .4byte GroundEffect_JumpOnLongGrass - .4byte GroundEffect_JumpOnShallowWater - .4byte GroundEffect_JumpOnWater - .4byte GroundEffect_JumpLandingDust - .4byte GroundEffect_ShortGrass - .4byte GroundEffect_HotSprings - .4byte GroundEffect_Seaweed diff --git a/ld_script.txt b/ld_script.txt index 231951647..89753bc0e 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -351,7 +351,6 @@ SECTIONS { src/field_player_avatar.o(.rodata); src/field_map_obj.o(.rodata); src/field_ground_effect.o(.rodata); - data/field_ground_effect.o(.rodata); data/field_map_obj_helpers.o(.rodata); data/text_window.o(.rodata); src/script.o(.rodata); diff --git a/src/field_ground_effect.c b/src/field_ground_effect.c index 79729471c..1a06b80f6 100644 --- a/src/field_ground_effect.c +++ b/src/field_ground_effect.c @@ -6,15 +6,122 @@ #include "fieldmap.h" #include "metatile_behavior.h" -extern u32 gUnknown_08376008[]; -extern u8 (*gUnknown_08376040[4])(u32 a); -extern const u8 gFieldObjectPriorities_08376070[]; -extern const u8 gFieldObjectPriorities_08376060[]; -extern const u8 gUnknown_08376050[]; -extern void (*gUnknown_08376080[3])(struct MapObject *mapObj, struct Sprite *sprite, u8 a); -extern const u8 gSandFootprints_FieldEffectData[4]; -extern const u8 gBikeTireTracks_Transitions[4][4]; -extern void (*gUnknown_083760A0[0x14])(struct MapObject *mapObj, struct Sprite *sprite); +void nullsub_50(struct MapObject *mapObj, struct Sprite *sprite, u8); +void DoTracksGroundEffect_Footprints(struct MapObject *mapObj, struct Sprite *sprite, u8); +void DoTracksGroundEffect_BikeTireTracks(struct MapObject *mapObj, struct Sprite *sprite, u8); +void GroundEffect_SpawnOnTallGrass(struct MapObject *mapObj, struct Sprite *sprite); +void sub_8063E94(struct MapObject *mapObj, struct Sprite *sprite); +void sub_8063EE0(struct MapObject *mapObj, struct Sprite *sprite); +void sub_8063F2C(struct MapObject *mapObj, struct Sprite *sprite); +void GroundEffect_WaterReflection(struct MapObject *mapObj, struct Sprite *sprite); +void GroundEffect_IceReflection(struct MapObject *mapObj, struct Sprite *sprite); +void GroundEffect_FlowingWater(struct MapObject *mapObj, struct Sprite *sprite); +void sub_8063FA0(struct MapObject *mapObj, struct Sprite *sprite); +void sub_8063FCC(struct MapObject *mapObj, struct Sprite *sprite); +void GroundEffect_Ripple(struct MapObject *mapObj, struct Sprite *sprite); +void GroundEffect_StepOnPuddle(struct MapObject *mapObj, struct Sprite *sprite); +void GroundEffect_SandPile(struct MapObject *mapObj, struct Sprite *sprite); +void GroundEffect_JumpOnTallGrass(struct MapObject *mapObj, struct Sprite *sprite); +void GroundEffect_JumpOnLongGrass(struct MapObject *mapObj, struct Sprite *sprite); +void GroundEffect_JumpOnShallowWater(struct MapObject *mapObj, struct Sprite *sprite); +void GroundEffect_JumpOnWater(struct MapObject *mapObj, struct Sprite *sprite); +void GroundEffect_JumpLandingDust(struct MapObject *mapObj, struct Sprite *sprite); +void GroundEffect_ShortGrass(struct MapObject *mapObj, struct Sprite *sprite); +void GroundEffect_HotSprings(struct MapObject *mapObj, struct Sprite *sprite); +void GroundEffect_Seaweed(struct MapObject *mapObj, struct Sprite *sprite); + +static const u32 sReflectionFlags[2] = { 0x00000020, 0x00000010 }; + +typedef bool8 (*MetatileFunc)(u8); + +static const MetatileFunc metatileFuncs[] = { + MetatileBehavior_IsTallGrass, + MetatileBehavior_IsLongGrass, + MetatileBehavior_IsPuddle, + MetatileBehavior_IsSurfableWaterOrUnderwater, + MetatileBehavior_IsShallowFlowingWater, + MetatileBehavior_IsATile, +}; + +static const u32 jumpLandingFlags[] = { + 0x00001000, // Landing in tall grass + 0x00002000, // Landing in long grass + 0x00004000, // Landing on puddle + 0x00008000, // Landing on surfable water or underwater + 0x00004000, // Landing on shallow flowing water + 0x00010000, // Landing on any other type of ground +}; + +bool8 (*const gUnknown_08376040[])(u8) = { + MetatileBehavior_IsJumpSouth, + MetatileBehavior_IsJumpNorth, + MetatileBehavior_IsJumpWest, + MetatileBehavior_IsJumpEast, +}; + +const u8 gUnknown_08376050[] = { + 0x73, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x00, 0x00, 0x73 +}; + +// Each byte corresponds to a sprite priority for a field object. +// This is directly the inverse of gFieldObjectPriorities_08376070. +const u8 gFieldObjectPriorities_08376060[] = { + 2, 2, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 0, 0, 2 +}; + +// Each byte corresponds to a sprite priority for a field object. +// This is the inverse of gFieldObjectPriorities_08376060. +// 1 = Above player sprite +// 2 = Below player sprite +const u8 gFieldObjectPriorities_08376070[] = { + 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 0, 0, 1, +}; + +void (*const gUnknown_08376080[3])(struct MapObject *mapObj, struct Sprite *sprite, u8 a) = { + nullsub_50, + DoTracksGroundEffect_Footprints, + DoTracksGroundEffect_BikeTireTracks, +}; + +// First byte is a Field Effect script id. (gFieldEffectScriptPointers) +// Last three bytes are unknown. +const u8 gSandFootprints_FieldEffectData[4] = { 0xD, 0x0, 0x18, 0x0 }; + +// Specifies which bike track shape to show next. +// For example, when the bike turns from up to right, it will show +// a track that curves to the right. +// Each 4-byte row corresponds to the initial direction of the bike, and +// each byte in that row is for the next direction of the bike in the order +// of down, up, left, right. +const u8 gBikeTireTracks_Transitions[4][4] = { + 1, 2, 7, 8, + 1, 2, 6, 5, + 5, 8, 3, 4, + 6, 7, 3, 4, +}; + +void (*const gUnknown_083760A0[0x14])(struct MapObject *mapObj, struct Sprite *sprite) = { + GroundEffect_SpawnOnTallGrass, + sub_8063E94, + sub_8063EE0, + sub_8063F2C, + GroundEffect_WaterReflection, + GroundEffect_IceReflection, + GroundEffect_FlowingWater, + sub_8063FA0, + sub_8063FCC, + GroundEffect_Ripple, + GroundEffect_StepOnPuddle, + GroundEffect_SandPile, + GroundEffect_JumpOnTallGrass, + GroundEffect_JumpOnLongGrass, + GroundEffect_JumpOnShallowWater, + GroundEffect_JumpOnWater, + GroundEffect_JumpLandingDust, + GroundEffect_ShortGrass, + GroundEffect_HotSprings, + GroundEffect_Seaweed +}; #define NUM_GROUND_EFFECTS (sizeof(gUnknown_083760A0) / sizeof(gUnknown_083760A0[0])) @@ -65,8 +172,18 @@ void FieldObjectUpdateMetatileBehaviors(struct MapObject *mapObj) void GetGroundEffectFlags_Reflection(struct MapObject *mapObj, u32 *flags) { - u32 reflectionFlags[2] = { 0x00000020, 0x00000010 }; - u8 type = FieldObjectCheckForReflectiveSurface(mapObj); + u32 reflectionFlags[2]; + u32 a; u32 b; + u8 type; + + // Declaring sReflectionFlags inside the function is a neater match than + // this. + b = sReflectionFlags[1]; + a = sReflectionFlags[0]; + reflectionFlags[0] = a; + reflectionFlags[1] = b; + + type = FieldObjectCheckForReflectiveSurface(mapObj); if (type) { @@ -217,25 +334,7 @@ void GetGroundEffectFlags_Seaweed(struct MapObject *mapObj, u32 *flags) void GetGroundEffectFlags_JumpLanding(struct MapObject *mapObj, u32 *flags) { - typedef bool8 (*MetatileFunc)(u8); - - static const MetatileFunc metatileFuncs[] = { - MetatileBehavior_IsTallGrass, - MetatileBehavior_IsLongGrass, - MetatileBehavior_IsPuddle, - MetatileBehavior_IsSurfableWaterOrUnderwater, - MetatileBehavior_IsShallowFlowingWater, - MetatileBehavior_IsATile, - }; - - static const u32 jumpLandingFlags[] = { - 0x00001000, // Landing in tall grass - 0x00002000, // Landing in long grass - 0x00004000, // Landing on puddle - 0x00008000, // Landing on surfable water or underwater - 0x00004000, // Landing on shallow flowing water - 0x00010000, // Landing on any other type of ground - }; + if (mapObj->mapobj_bit_5 && !mapObj->mapobj_bit_25) { @@ -632,7 +731,7 @@ void GroundEffect_SpawnOnTallGrass(struct MapObject *mapObj, struct Sprite *spri FieldEffectStart(4); } -void sub_8063E94(struct MapObject *mapObj) +void sub_8063E94(struct MapObject *mapObj, struct Sprite *sprite) { u8 *ptr; @@ -651,7 +750,7 @@ void sub_8063E94(struct MapObject *mapObj) FieldEffectStart(4); } -void sub_8063EE0(struct MapObject *mapObj) +void sub_8063EE0(struct MapObject *mapObj, struct Sprite *sprite) { u8 *ptr; @@ -670,7 +769,7 @@ void sub_8063EE0(struct MapObject *mapObj) FieldEffectStart(17); } -void sub_8063F2C(struct MapObject *mapObj) +void sub_8063F2C(struct MapObject *mapObj, struct Sprite *sprite) { u8 *ptr; @@ -699,7 +798,7 @@ void GroundEffect_IceReflection(struct MapObject *mapObj, struct Sprite *sprite) SetUpReflection(mapObj, sprite, 1); } -void GroundEffect_FlowingWater(struct MapObject *mapObj) +void GroundEffect_FlowingWater(struct MapObject *mapObj, struct Sprite *sprite) { oe_exec_and_other_stuff(FLDEFF_FEET_IN_FLOWING_WATER, mapObj); } @@ -906,3 +1005,5 @@ void DoGroundEffects_OnFinishStep(struct MapObject *mapObj, struct Sprite *sprit mapObj->mapobj_bit_5 = 0; } } + + -- cgit v1.2.3 From 8f0198a5e77a9493af0b39ecc64b2d64a0944476 Mon Sep 17 00:00:00 2001 From: Touched Date: Tue, 22 Aug 2017 18:22:54 +0200 Subject: Format src/field_ground_effect.c --- src/field_ground_effect.c | 60 +++++++++++++++++++++-------------------------- 1 file changed, 27 insertions(+), 33 deletions(-) diff --git a/src/field_ground_effect.c b/src/field_ground_effect.c index 1a06b80f6..7aae07996 100644 --- a/src/field_ground_effect.c +++ b/src/field_ground_effect.c @@ -6,9 +6,10 @@ #include "fieldmap.h" #include "metatile_behavior.h" -void nullsub_50(struct MapObject *mapObj, struct Sprite *sprite, u8); -void DoTracksGroundEffect_Footprints(struct MapObject *mapObj, struct Sprite *sprite, u8); -void DoTracksGroundEffect_BikeTireTracks(struct MapObject *mapObj, struct Sprite *sprite, u8); +static void nullsub(struct MapObject *mapObj, struct Sprite *sprite, u8); +static void DoTracksGroundEffect_Footprints(struct MapObject *mapObj, struct Sprite *sprite, u8); +static void DoTracksGroundEffect_BikeTireTracks( + struct MapObject *mapObj, struct Sprite *sprite, u8); void GroundEffect_SpawnOnTallGrass(struct MapObject *mapObj, struct Sprite *sprite); void sub_8063E94(struct MapObject *mapObj, struct Sprite *sprite); void sub_8063EE0(struct MapObject *mapObj, struct Sprite *sprite); @@ -30,7 +31,7 @@ void GroundEffect_ShortGrass(struct MapObject *mapObj, struct Sprite *sprite); void GroundEffect_HotSprings(struct MapObject *mapObj, struct Sprite *sprite); void GroundEffect_Seaweed(struct MapObject *mapObj, struct Sprite *sprite); -static const u32 sReflectionFlags[2] = { 0x00000020, 0x00000010 }; +static const u32 sReflectionFlags[] = { 0x00000020, 0x00000010 }; typedef bool8 (*MetatileFunc)(u8); @@ -52,20 +53,20 @@ static const u32 jumpLandingFlags[] = { 0x00010000, // Landing on any other type of ground }; -bool8 (*const gUnknown_08376040[])(u8) = { +static bool8 (*const gUnknown_08376040[])(u8) = { MetatileBehavior_IsJumpSouth, MetatileBehavior_IsJumpNorth, MetatileBehavior_IsJumpWest, MetatileBehavior_IsJumpEast, }; -const u8 gUnknown_08376050[] = { +static const u8 gUnknown_08376050[] = { 0x73, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x00, 0x00, 0x73 }; // Each byte corresponds to a sprite priority for a field object. // This is directly the inverse of gFieldObjectPriorities_08376070. -const u8 gFieldObjectPriorities_08376060[] = { +static const u8 gFieldObjectPriorities_08376060[] = { 2, 2, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 0, 0, 2 }; @@ -73,19 +74,17 @@ const u8 gFieldObjectPriorities_08376060[] = { // This is the inverse of gFieldObjectPriorities_08376060. // 1 = Above player sprite // 2 = Below player sprite -const u8 gFieldObjectPriorities_08376070[] = { +static const u8 gFieldObjectPriorities_08376070[] = { 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 0, 0, 1, }; -void (*const gUnknown_08376080[3])(struct MapObject *mapObj, struct Sprite *sprite, u8 a) = { - nullsub_50, - DoTracksGroundEffect_Footprints, - DoTracksGroundEffect_BikeTireTracks, +static void (*const gUnknown_08376080[])(struct MapObject *mapObj, struct Sprite *sprite, u8 a) = { + nullsub, DoTracksGroundEffect_Footprints, DoTracksGroundEffect_BikeTireTracks, }; // First byte is a Field Effect script id. (gFieldEffectScriptPointers) // Last three bytes are unknown. -const u8 gSandFootprints_FieldEffectData[4] = { 0xD, 0x0, 0x18, 0x0 }; +static const u8 gSandFootprints_FieldEffectData[] = { 0xD, 0x0, 0x18, 0x0 }; // Specifies which bike track shape to show next. // For example, when the bike turns from up to right, it will show @@ -93,15 +92,12 @@ const u8 gSandFootprints_FieldEffectData[4] = { 0xD, 0x0, 0x18, 0x0 }; // Each 4-byte row corresponds to the initial direction of the bike, and // each byte in that row is for the next direction of the bike in the order // of down, up, left, right. -const u8 gBikeTireTracks_Transitions[4][4] = { - 1, 2, 7, 8, - 1, 2, 6, 5, - 5, 8, 3, 4, - 6, 7, 3, 4, +static const u8 gBikeTireTracks_Transitions[4][4] = { + 1, 2, 7, 8, 1, 2, 6, 5, 5, 8, 3, 4, 6, 7, 3, 4, }; -void (*const gUnknown_083760A0[0x14])(struct MapObject *mapObj, struct Sprite *sprite) = { - GroundEffect_SpawnOnTallGrass, +static void (*const gUnknown_083760A0[])( + struct MapObject *mapObj, struct Sprite *sprite) = { GroundEffect_SpawnOnTallGrass, sub_8063E94, sub_8063EE0, sub_8063F2C, @@ -120,12 +116,11 @@ void (*const gUnknown_083760A0[0x14])(struct MapObject *mapObj, struct Sprite *s GroundEffect_JumpLandingDust, GroundEffect_ShortGrass, GroundEffect_HotSprings, - GroundEffect_Seaweed -}; + GroundEffect_Seaweed }; #define NUM_GROUND_EFFECTS (sizeof(gUnknown_083760A0) / sizeof(gUnknown_083760A0[0])) -void GetAllGroundEffectFlags_OnSpawn(struct MapObject *mapObj, u32 *flags) +static void GetAllGroundEffectFlags_OnSpawn(struct MapObject *mapObj, u32 *flags) { FieldObjectUpdateMetatileBehaviors(mapObj); GetGroundEffectFlags_Reflection(mapObj, flags); @@ -137,7 +132,7 @@ void GetAllGroundEffectFlags_OnSpawn(struct MapObject *mapObj, u32 *flags) GetGroundEffectFlags_HotSprings(mapObj, flags); } -void GetAllGroundEffectFlags_OnBeginStep(struct MapObject *mapObj, u32 *flags) +static void GetAllGroundEffectFlags_OnBeginStep(struct MapObject *mapObj, u32 *flags) { FieldObjectUpdateMetatileBehaviors(mapObj); GetGroundEffectFlags_Reflection(mapObj, flags); @@ -151,7 +146,7 @@ void GetAllGroundEffectFlags_OnBeginStep(struct MapObject *mapObj, u32 *flags) GetGroundEffectFlags_HotSprings(mapObj, flags); } -void GetAllGroundEffectFlags_OnFinishStep(struct MapObject *mapObj, u32 *flags) +static void GetAllGroundEffectFlags_OnFinishStep(struct MapObject *mapObj, u32 *flags) { FieldObjectUpdateMetatileBehaviors(mapObj); GetGroundEffectFlags_ShallowFlowingWater(mapObj, flags); @@ -173,11 +168,12 @@ void FieldObjectUpdateMetatileBehaviors(struct MapObject *mapObj) void GetGroundEffectFlags_Reflection(struct MapObject *mapObj, u32 *flags) { u32 reflectionFlags[2]; - u32 a; u32 b; + u32 a; + u32 b; u8 type; // Declaring sReflectionFlags inside the function is a neater match than - // this. + // this. b = sReflectionFlags[1]; a = sReflectionFlags[0]; reflectionFlags[0] = a; @@ -335,7 +331,6 @@ void GetGroundEffectFlags_Seaweed(struct MapObject *mapObj, u32 *flags) void GetGroundEffectFlags_JumpLanding(struct MapObject *mapObj, u32 *flags) { - if (mapObj->mapobj_bit_5 && !mapObj->mapobj_bit_25) { u8 i; @@ -815,11 +810,11 @@ void sub_8063FCC(struct MapObject *mapObj, struct Sprite *sprite) gUnknown_08376080[info->tracks](mapObj, sprite, 1); } -void nullsub_50(struct MapObject *mapObj, struct Sprite *sprite, u8 a) +static void nullsub(struct MapObject *mapObj, struct Sprite *sprite, u8 a) { } -void DoTracksGroundEffect_Footprints(struct MapObject *mapObj, struct Sprite *sprite, u8 a) +static void DoTracksGroundEffect_Footprints(struct MapObject *mapObj, struct Sprite *sprite, u8 a) { u16 buf[2]; memcpy(&buf, gSandFootprints_FieldEffectData, sizeof(gSandFootprints_FieldEffectData)); @@ -831,7 +826,8 @@ void DoTracksGroundEffect_Footprints(struct MapObject *mapObj, struct Sprite *sp FieldEffectStart(buf[a]); } -void DoTracksGroundEffect_BikeTireTracks(struct MapObject *mapObj, struct Sprite *sprite, u8 a) +static void DoTracksGroundEffect_BikeTireTracks( + struct MapObject *mapObj, struct Sprite *sprite, u8 a) { if (mapObj->coords2.x != mapObj->coords3.x || mapObj->coords2.y != mapObj->coords3.y) { @@ -1005,5 +1001,3 @@ void DoGroundEffects_OnFinishStep(struct MapObject *mapObj, struct Sprite *sprit mapObj->mapobj_bit_5 = 0; } } - - -- cgit v1.2.3 From 92a703333302194b1093788aa3725f1e22c77e52 Mon Sep 17 00:00:00 2001 From: Doesnty Date: Tue, 22 Aug 2017 11:54:28 -0500 Subject: Remove a goto from atk06_typecalc (camthesaxman) --- src/battle_4.c | 112 ++++++++++++++++++++++++++++----------------------------- 1 file changed, 55 insertions(+), 57 deletions(-) diff --git a/src/battle_4.c b/src/battle_4.c index cf77fe81c..71c78a6b9 100644 --- a/src/battle_4.c +++ b/src/battle_4.c @@ -1464,73 +1464,71 @@ static void atk06_typecalc(void) { int i = 0; u8 move_type; - if (gCurrentMove == MOVE_STRUGGLE) {goto END;} - - if (BATTLE_STRUCT->dynamicMoveType) - move_type = BATTLE_STRUCT->dynamicMoveType & 0x3F; - else - move_type = gBattleMoves[gCurrentMove].type; - - //check stab - if (gBattleMons[gBankAttacker].type1 == move_type || gBattleMons[gBankAttacker].type2 == move_type) + if (gCurrentMove != MOVE_STRUGGLE) { - gBattleMoveDamage = gBattleMoveDamage * 15; - gBattleMoveDamage = gBattleMoveDamage / 10; - } + if (BATTLE_STRUCT->dynamicMoveType) + move_type = BATTLE_STRUCT->dynamicMoveType & 0x3F; + else + move_type = gBattleMoves[gCurrentMove].type; - if (gBattleMons[gBankTarget].ability == ABILITY_LEVITATE && move_type == TYPE_GROUND) - { - gLastUsedAbility = gBattleMons[gBankTarget].ability; - gBattleMoveFlags |= (MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED); - gMoveHitWith[gBankTarget] = 0; - gUnknown_02024C44[gBankTarget] = 0; - gBattleCommunication[6] = move_type; - RecordAbilityBattle(gBankTarget, gLastUsedAbility); - } - else - { - while (gTypeEffectiveness[i]!= TYPE_ENDTABLE) + //check stab + if (gBattleMons[gBankAttacker].type1 == move_type || gBattleMons[gBankAttacker].type2 == move_type) { - if (gTypeEffectiveness[i] == TYPE_FORESIGHT) - { - if (gBattleMons[gBankTarget].status2 & STATUS2_FORESIGHT) - break; - i += 3; - continue; - } + gBattleMoveDamage = gBattleMoveDamage * 15; + gBattleMoveDamage = gBattleMoveDamage / 10; + } - else if (gTypeEffectiveness[i] == move_type) + if (gBattleMons[gBankTarget].ability == ABILITY_LEVITATE && move_type == TYPE_GROUND) + { + gLastUsedAbility = gBattleMons[gBankTarget].ability; + gBattleMoveFlags |= (MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED); + gMoveHitWith[gBankTarget] = 0; + gUnknown_02024C44[gBankTarget] = 0; + gBattleCommunication[6] = move_type; + RecordAbilityBattle(gBankTarget, gLastUsedAbility); + } + else + { + while (gTypeEffectiveness[i]!= TYPE_ENDTABLE) { - //check type1 - if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type1) - ModulateDmgByType(gTypeEffectiveness[i + 2]); - //check type2 - if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type2 && - gBattleMons[gBankTarget].type1 != gBattleMons[gBankTarget].type2) - ModulateDmgByType(gTypeEffectiveness[i + 2]); + if (gTypeEffectiveness[i] == TYPE_FORESIGHT) + { + if (gBattleMons[gBankTarget].status2 & STATUS2_FORESIGHT) + break; + i += 3; + continue; + } + + else if (gTypeEffectiveness[i] == move_type) + { + //check type1 + if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type1) + ModulateDmgByType(gTypeEffectiveness[i + 2]); + //check type2 + if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type2 && + gBattleMons[gBankTarget].type1 != gBattleMons[gBankTarget].type2) + ModulateDmgByType(gTypeEffectiveness[i + 2]); + } + i += 3; } - i += 3; } - } - if (gBattleMons[gBankTarget].ability == ABILITY_WONDER_GUARD && AttacksThisTurn(gBankAttacker, gCurrentMove) == 2 - && (!(gBattleMoveFlags & MOVESTATUS_SUPEREFFECTIVE) || ((gBattleMoveFlags & (MOVESTATUS_SUPEREFFECTIVE | MOVESTATUS_NOTVERYEFFECTIVE)) == (MOVESTATUS_SUPEREFFECTIVE | MOVESTATUS_NOTVERYEFFECTIVE))) - && gBattleMoves[gCurrentMove].power) - { - gLastUsedAbility = ABILITY_WONDER_GUARD; - gBattleMoveFlags |= MOVESTATUS_MISSED; - gMoveHitWith[gBankTarget] = 0; - gUnknown_02024C44[gBankTarget] = 0; - gBattleCommunication[6] = 3; - RecordAbilityBattle(gBankTarget, gLastUsedAbility); + if (gBattleMons[gBankTarget].ability == ABILITY_WONDER_GUARD && AttacksThisTurn(gBankAttacker, gCurrentMove) == 2 + && (!(gBattleMoveFlags & MOVESTATUS_SUPEREFFECTIVE) || ((gBattleMoveFlags & (MOVESTATUS_SUPEREFFECTIVE | MOVESTATUS_NOTVERYEFFECTIVE)) == (MOVESTATUS_SUPEREFFECTIVE | MOVESTATUS_NOTVERYEFFECTIVE))) + && gBattleMoves[gCurrentMove].power) + { + gLastUsedAbility = ABILITY_WONDER_GUARD; + gBattleMoveFlags |= MOVESTATUS_MISSED; + gMoveHitWith[gBankTarget] = 0; + gUnknown_02024C44[gBankTarget] = 0; + gBattleCommunication[6] = 3; + RecordAbilityBattle(gBankTarget, gLastUsedAbility); + } + if (gBattleMoveFlags & MOVESTATUS_NOTAFFECTED) + gProtectStructs[gBankAttacker].notEffective = 1; } - if (gBattleMoveFlags & MOVESTATUS_NOTAFFECTED) - gProtectStructs[gBankAttacker].notEffective = 1; - - END: - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr++; } - static void b_wonderguard_and_levitate(void) { u8 flags = 0; -- cgit v1.2.3 From 5487c755f054b464665849bbe5a31ab92ff34574 Mon Sep 17 00:00:00 2001 From: Doesnty Date: Tue, 22 Aug 2017 11:59:10 -0500 Subject: whitespace --- src/battle_4.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_4.c b/src/battle_4.c index 71c78a6b9..ecd7fc34b 100644 --- a/src/battle_4.c +++ b/src/battle_4.c @@ -5373,7 +5373,7 @@ static void atk23_getexp(void) if (GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP)) { - s16 stringID; + s16 stringID; if (BATTLE_STRUCT->sentInPokes & 1) gBattleMoveDamage = *exp; else -- cgit v1.2.3 From 77cfea2ecfdcb28fa286b967c9635b5e10ff99a2 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 22 Aug 2017 19:05:38 +0200 Subject: all functions decompiled --- asm/battle_transition.s | 219 ------------------------------------------ ld_script.txt | 1 - src/battle_transition.c | 248 ++++++++++++++++++++++++++++-------------------- 3 files changed, 145 insertions(+), 323 deletions(-) delete mode 100644 asm/battle_transition.s diff --git a/asm/battle_transition.s b/asm/battle_transition.s deleted file mode 100644 index f99f53fb3..000000000 --- a/asm/battle_transition.s +++ /dev/null @@ -1,219 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - - - thumb_func_start sub_811D8FC -sub_811D8FC: @ 811D8FC - push {r4-r7,lr} - adds r6, r0, 0 - ldr r0, [sp, 0x14] - ldr r5, [sp, 0x18] - ldr r4, [sp, 0x1C] - lsls r1, 16 - lsrs r1, 16 - lsls r2, 16 - lsrs r2, 16 - lsls r3, 16 - lsrs r3, 16 - lsls r0, 16 - lsrs r0, 16 - adds r7, r0, 0 - lsls r5, 16 - lsrs r5, 16 - lsls r4, 16 - lsrs r4, 16 - strh r1, [r6] - strh r2, [r6, 0x2] - strh r1, [r6, 0x4] - strh r2, [r6, 0x6] - strh r3, [r6, 0x8] - strh r7, [r6, 0xA] - strh r5, [r6, 0xC] - strh r4, [r6, 0xE] - lsls r3, 16 - asrs r3, 16 - lsls r1, 16 - asrs r1, 16 - subs r3, r1 - strh r3, [r6, 0x10] - lsls r0, r3, 16 - cmp r0, 0 - bge _0811D94E - negs r0, r3 - strh r0, [r6, 0x10] - lsls r0, r5, 16 - asrs r0, 16 - negs r0, r0 - strh r0, [r6, 0xC] -_0811D94E: - lsls r0, r7, 16 - asrs r0, 16 - lsls r1, r2, 16 - asrs r1, 16 - subs r1, r0, r1 - strh r1, [r6, 0x12] - lsls r0, r1, 16 - cmp r0, 0 - bge _0811D96C - negs r0, r1 - strh r0, [r6, 0x12] - lsls r0, r4, 16 - asrs r0, 16 - negs r0, r0 - strh r0, [r6, 0xE] -_0811D96C: - movs r0, 0 - strh r0, [r6, 0x14] - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_811D8FC - - thumb_func_start sub_811D978 -sub_811D978: @ 811D978 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - adds r3, r0, 0 - lsls r1, 24 - lsrs r1, 24 - mov r9, r1 - lsls r2, 24 - lsrs r2, 24 - mov r10, r2 - ldrh r0, [r3, 0x10] - mov r8, r0 - movs r1, 0x10 - ldrsh r6, [r3, r1] - ldrh r2, [r3, 0x12] - mov r12, r2 - movs r4, 0x12 - ldrsh r5, [r3, r4] - cmp r6, r5 - ble _0811D9C8 - ldrh r0, [r3, 0xC] - ldrh r2, [r3, 0x4] - adds r1, r0, r2 - strh r1, [r3, 0x4] - ldrh r2, [r3, 0x14] - add r2, r12 - strh r2, [r3, 0x14] - lsls r1, r2, 16 - asrs r1, 16 - adds r4, r0, 0 - ldrh r7, [r3, 0xE] - cmp r1, r6 - ble _0811D9EE - ldrh r1, [r3, 0x6] - adds r0, r7, r1 - strh r0, [r3, 0x6] - mov r1, r8 - b _0811D9EA -_0811D9C8: - ldrh r0, [r3, 0xE] - ldrh r2, [r3, 0x6] - adds r1, r0, r2 - strh r1, [r3, 0x6] - ldrh r2, [r3, 0x14] - add r2, r8 - strh r2, [r3, 0x14] - lsls r1, r2, 16 - asrs r1, 16 - ldrh r4, [r3, 0xC] - adds r7, r0, 0 - cmp r1, r5 - ble _0811D9EE - ldrh r1, [r3, 0x4] - adds r0, r4, r1 - strh r0, [r3, 0x4] - mov r1, r12 -_0811D9EA: - subs r0, r2, r1 - strh r0, [r3, 0x14] -_0811D9EE: - movs r5, 0 - lsls r0, r4, 16 - asrs r2, r0, 16 - cmp r2, 0 - ble _0811DA06 - movs r4, 0x4 - ldrsh r1, [r3, r4] - movs r4, 0x8 - ldrsh r0, [r3, r4] - ldrh r4, [r3, 0x8] - cmp r1, r0 - bge _0811DA18 -_0811DA06: - cmp r2, 0 - bge _0811DA26 - movs r0, 0x4 - ldrsh r1, [r3, r0] - movs r2, 0x8 - ldrsh r0, [r3, r2] - ldrh r4, [r3, 0x8] - cmp r1, r0 - bgt _0811DA26 -_0811DA18: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - mov r0, r9 - cmp r0, 0 - beq _0811DA26 - strh r4, [r3, 0x4] -_0811DA26: - lsls r0, r7, 16 - asrs r2, r0, 16 - cmp r2, 0 - ble _0811DA3C - movs r4, 0x6 - ldrsh r1, [r3, r4] - movs r4, 0xA - ldrsh r0, [r3, r4] - ldrh r4, [r3, 0xA] - cmp r1, r0 - bge _0811DA4E -_0811DA3C: - cmp r2, 0 - bge _0811DA5C - movs r0, 0x6 - ldrsh r1, [r3, r0] - movs r2, 0xA - ldrsh r0, [r3, r2] - ldrh r4, [r3, 0xA] - cmp r1, r0 - bgt _0811DA5C -_0811DA4E: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - mov r0, r10 - cmp r0, 0 - beq _0811DA5C - strh r4, [r3, 0x6] -_0811DA5C: - cmp r5, 0x2 - beq _0811DA64 - movs r0, 0 - b _0811DA66 -_0811DA64: - movs r0, 0x1 -_0811DA66: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_811D978 - - .align 2, 0 @ Don't pad with nop. diff --git a/ld_script.txt b/ld_script.txt index 80b882108..3e4a3ea91 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -227,7 +227,6 @@ SECTIONS { src/landmark.o(.text); src/fldeff_strength.o(.text); src/battle_transition.o(.text); - asm/battle_transition.o(.text); src/battle_811DA74.o(.text); asm/battle_message.o(.text); src/choose_party.o(.text); diff --git a/src/battle_transition.c b/src/battle_transition.c index fcf49a7fb..88d3330f9 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -41,18 +41,7 @@ struct TransitionData s16 field_1E; s16 field_20; s16 field_22; - s16 field_24; - s16 field_26; - s16 field_28; - s16 field_2A; - s16 field_2C; - s16 field_2E; - s16 field_30; - s16 field_32; - s16 field_34; - s16 field_36; - s16 field_38; - s16 field_3A; + s16 data[11]; }; #define TRANSITION_STRUCT (*(struct TransitionData *) (ewram + 0xC000)) @@ -178,11 +167,10 @@ static void sub_811D6A8(u16** a0, u16** a1); static void sub_811D690(u16** a0); static void sub_811D6D4(void); static void sub_811D6E8(s16* array, s16 sinAdd, s16 index, s16 indexIncrementer, s16 amplitude, s16 arrSize); - -void sub_811D764(u16* a0, s16 a1, s16 a2, s16 a3); -void sub_811D8FC(s16* a0, s16 a1, s16 a2, s16 a3, s16 a4, s16 a5, s16 a6); -bool8 sub_811D978(s16* a0, bool8 a1, bool8 a2); -void sub_811CFD0(struct Sprite* sprite); +static void sub_811D764(u16* a0, s16 a1, s16 a2, s16 a3); +static void sub_811D8FC(s16* a0, s16 a1, s16 a2, s16 a3, s16 a4, s16 a5, s16 a6); +static bool8 sub_811D978(s16* a0, bool8 a1, bool8 a2); +static void sub_811CFD0(struct Sprite* sprite); // const data @@ -964,7 +952,7 @@ static bool8 Phase2_Transition5_Func1(struct Task* task) } SetVBlankCallback(VBlankCB_Phase2_Transition5); - TRANSITION_STRUCT.field_2C = 120; + TRANSITION_STRUCT.data[4] = 120; task->tState++; return TRUE; @@ -974,16 +962,16 @@ static bool8 Phase2_Transition5_Func2(struct Task* task) { TRANSITION_STRUCT.VBlank_DMA = 0; - sub_811D8FC(&TRANSITION_STRUCT.field_24, 120, 80, TRANSITION_STRUCT.field_2C, -1, 1, 1); + sub_811D8FC(TRANSITION_STRUCT.data, 120, 80, TRANSITION_STRUCT.data[4], -1, 1, 1); do { - gUnknown_03004DE0[0][TRANSITION_STRUCT.field_2A] = (TRANSITION_STRUCT.field_28 + 1) | 0x7800; - } while (!sub_811D978(&TRANSITION_STRUCT.field_24, 1, 1)); + gUnknown_03004DE0[0][TRANSITION_STRUCT.data[3]] = (TRANSITION_STRUCT.data[2] + 1) | 0x7800; + } while (!sub_811D978(TRANSITION_STRUCT.data, 1, 1)); - TRANSITION_STRUCT.field_2C += 16; - if (TRANSITION_STRUCT.field_2C >= 240) + TRANSITION_STRUCT.data[4] += 16; + if (TRANSITION_STRUCT.data[4] >= 240) { - TRANSITION_STRUCT.field_2E = 0; + TRANSITION_STRUCT.data[5] = 0; task->tState++; } @@ -998,30 +986,30 @@ static bool8 Phase2_Transition5_Func3(struct Task* task) TRANSITION_STRUCT.VBlank_DMA = 0; - sub_811D8FC(&TRANSITION_STRUCT.field_24, 120, 80, 240, TRANSITION_STRUCT.field_2E, 1, 1); + sub_811D8FC(TRANSITION_STRUCT.data, 120, 80, 240, TRANSITION_STRUCT.data[5], 1, 1); while (1) { - r1 = 120, r3 = TRANSITION_STRUCT.field_28 + 1; - if (TRANSITION_STRUCT.field_2E >= 80) - r1 = TRANSITION_STRUCT.field_28, r3 = 240; - gUnknown_03004DE0[0][TRANSITION_STRUCT.field_2A] = (r3) | (r1 << 8); + r1 = 120, r3 = TRANSITION_STRUCT.data[2] + 1; + if (TRANSITION_STRUCT.data[5] >= 80) + r1 = TRANSITION_STRUCT.data[2], r3 = 240; + gUnknown_03004DE0[0][TRANSITION_STRUCT.data[3]] = (r3) | (r1 << 8); if (var != 0) break; - var = sub_811D978(&TRANSITION_STRUCT.field_24, 1, 1); + var = sub_811D978(TRANSITION_STRUCT.data, 1, 1); } - TRANSITION_STRUCT.field_2E += 8; - if (TRANSITION_STRUCT.field_2E >= 160) + TRANSITION_STRUCT.data[5] += 8; + if (TRANSITION_STRUCT.data[5] >= 160) { - TRANSITION_STRUCT.field_2C = 240; + TRANSITION_STRUCT.data[4] = 240; task->tState++; } else { - while (TRANSITION_STRUCT.field_2A < TRANSITION_STRUCT.field_2E) + while (TRANSITION_STRUCT.data[3] < TRANSITION_STRUCT.data[5]) { - gUnknown_03004DE0[0][++TRANSITION_STRUCT.field_2A] = (r3) | (r1 << 8); + gUnknown_03004DE0[0][++TRANSITION_STRUCT.data[3]] = (r3) | (r1 << 8); } } @@ -1033,16 +1021,16 @@ static bool8 Phase2_Transition5_Func4(struct Task* task) { TRANSITION_STRUCT.VBlank_DMA = 0; - sub_811D8FC(&TRANSITION_STRUCT.field_24, 120, 80, TRANSITION_STRUCT.field_2C, 160, 1, 1); + sub_811D8FC(TRANSITION_STRUCT.data, 120, 80, TRANSITION_STRUCT.data[4], 160, 1, 1); do { - gUnknown_03004DE0[0][TRANSITION_STRUCT.field_2A] = (TRANSITION_STRUCT.field_28 << 8) | 0xF0; - } while (!sub_811D978(&TRANSITION_STRUCT.field_24, 1, 1)); + gUnknown_03004DE0[0][TRANSITION_STRUCT.data[3]] = (TRANSITION_STRUCT.data[2] << 8) | 0xF0; + } while (!sub_811D978(TRANSITION_STRUCT.data, 1, 1)); - TRANSITION_STRUCT.field_2C -= 16; - if (TRANSITION_STRUCT.field_2C <= 0) + TRANSITION_STRUCT.data[4] -= 16; + if (TRANSITION_STRUCT.data[4] <= 0) { - TRANSITION_STRUCT.field_2E = 160; + TRANSITION_STRUCT.data[5] = 160; task->tState++; } @@ -1057,31 +1045,31 @@ static bool8 Phase2_Transition5_Func5(struct Task* task) TRANSITION_STRUCT.VBlank_DMA = 0; - sub_811D8FC(&TRANSITION_STRUCT.field_24, 120, 80, 0, TRANSITION_STRUCT.field_2E, 1, 1); + sub_811D8FC(TRANSITION_STRUCT.data, 120, 80, 0, TRANSITION_STRUCT.data[5], 1, 1); while (1) { - r1 = gUnknown_03004DE0[0][TRANSITION_STRUCT.field_2A] & 0xFF, r2 = TRANSITION_STRUCT.field_28; - if (TRANSITION_STRUCT.field_2E <= 80) - r2 = 120, r1 = TRANSITION_STRUCT.field_28; - gUnknown_03004DE0[0][TRANSITION_STRUCT.field_2A] = (r1) | (r2 << 8); + r1 = gUnknown_03004DE0[0][TRANSITION_STRUCT.data[3]] & 0xFF, r2 = TRANSITION_STRUCT.data[2]; + if (TRANSITION_STRUCT.data[5] <= 80) + r2 = 120, r1 = TRANSITION_STRUCT.data[2]; + gUnknown_03004DE0[0][TRANSITION_STRUCT.data[3]] = (r1) | (r2 << 8); r3 = 0; if (var != 0) break; - var = sub_811D978(&TRANSITION_STRUCT.field_24, 1, 1); + var = sub_811D978(TRANSITION_STRUCT.data, 1, 1); } - TRANSITION_STRUCT.field_2E -= 8; - if (TRANSITION_STRUCT.field_2E <= 0) + TRANSITION_STRUCT.data[5] -= 8; + if (TRANSITION_STRUCT.data[5] <= 0) { - TRANSITION_STRUCT.field_2C = r3; + TRANSITION_STRUCT.data[4] = r3; task->tState++; } else { - while (TRANSITION_STRUCT.field_2A > TRANSITION_STRUCT.field_2E) + while (TRANSITION_STRUCT.data[3] > TRANSITION_STRUCT.data[5]) { - gUnknown_03004DE0[0][--TRANSITION_STRUCT.field_2A] = (r1) | (r2 << 8); + gUnknown_03004DE0[0][--TRANSITION_STRUCT.data[3]] = (r1) | (r2 << 8); } } @@ -1093,20 +1081,20 @@ static bool8 Phase2_Transition5_Func6(struct Task* task) { TRANSITION_STRUCT.VBlank_DMA = 0; - sub_811D8FC(&TRANSITION_STRUCT.field_24, 120, 80, TRANSITION_STRUCT.field_2C, 0, 1, 1); + sub_811D8FC(TRANSITION_STRUCT.data, 120, 80, TRANSITION_STRUCT.data[4], 0, 1, 1); do { s16 r2, r3; - r2 = 120, r3 = TRANSITION_STRUCT.field_28; - if (TRANSITION_STRUCT.field_28 >= 120) + r2 = 120, r3 = TRANSITION_STRUCT.data[2]; + if (TRANSITION_STRUCT.data[2] >= 120) r2 = 0, r3 = 240; - gUnknown_03004DE0[0][TRANSITION_STRUCT.field_2A] = (r3) | (r2 << 8); + gUnknown_03004DE0[0][TRANSITION_STRUCT.data[3]] = (r3) | (r2 << 8); - } while (!sub_811D978(&TRANSITION_STRUCT.field_24, 1, 1)); + } while (!sub_811D978(TRANSITION_STRUCT.data, 1, 1)); - TRANSITION_STRUCT.field_2C += 16; - if (TRANSITION_STRUCT.field_28 > 120) + TRANSITION_STRUCT.data[4] += 16; + if (TRANSITION_STRUCT.data[2] > 120) task->tState++; TRANSITION_STRUCT.VBlank_DMA++; @@ -1639,12 +1627,12 @@ void sub_811C90C(struct Sprite* sprite) while (gUnknown_083FD880[sprite->data0](sprite)); } -bool8 sub_811C934(struct Sprite* sprite) +static bool8 sub_811C934(struct Sprite* sprite) { return FALSE; } -bool8 sub_811C938(struct Sprite* sprite) +static bool8 sub_811C938(struct Sprite* sprite) { s16 arr0[2]; s16 arr1[2]; @@ -1658,7 +1646,7 @@ bool8 sub_811C938(struct Sprite* sprite) return TRUE; } -bool8 sub_811C984(struct Sprite* sprite) +static bool8 sub_811C984(struct Sprite* sprite) { sprite->pos1.x += sprite->data1; if (sprite->data7 && sprite->pos1.x < 133) @@ -1668,7 +1656,7 @@ bool8 sub_811C984(struct Sprite* sprite) return FALSE; } -bool8 sub_811C9B8(struct Sprite* sprite) +static bool8 sub_811C9B8(struct Sprite* sprite) { sprite->data1 += sprite->data2; sprite->pos1.x += sprite->data1; @@ -1681,7 +1669,7 @@ bool8 sub_811C9B8(struct Sprite* sprite) return FALSE; } -bool8 sub_811C9E4(struct Sprite* sprite) +static bool8 sub_811C9E4(struct Sprite* sprite) { sprite->data1 += sprite->data2; sprite->pos1.x += sprite->data1; @@ -1931,7 +1919,7 @@ static void HBlankCB_Phase2_Transition9(void) REG_BLDY = gUnknown_03004DE0[1][REG_VCOUNT]; } -void sub_811CFD0(struct Sprite* sprite) +static void sub_811CFD0(struct Sprite* sprite) { if (sprite->data5) { @@ -2053,7 +2041,7 @@ static bool8 Phase2_Transition11_Func1(struct Task* task) static bool8 Phase2_Transition11_Func2(struct Task* task) { - sub_811D8FC(&TRANSITION_STRUCT.field_24, + sub_811D8FC(TRANSITION_STRUCT.data, gUnknown_083FD8F4[task->data[1]][0], gUnknown_083FD8F4[task->data[1]][1], gUnknown_083FD8F4[task->data[1]][2], @@ -2073,30 +2061,30 @@ static bool8 Phase2_Transition11_Func3(struct Task* task) for (i = 0, nextFunc = FALSE; i < 16; i++) { - s16 r3 = gUnknown_03004DE0[0][TRANSITION_STRUCT.field_2A] >> 8; - s16 r4 = gUnknown_03004DE0[0][TRANSITION_STRUCT.field_2A] & 0xFF; + s16 r3 = gUnknown_03004DE0[0][TRANSITION_STRUCT.data[3]] >> 8; + s16 r4 = gUnknown_03004DE0[0][TRANSITION_STRUCT.data[3]] & 0xFF; if (task->data[2] == 0) { - if (r3 < TRANSITION_STRUCT.field_28) - r3 = TRANSITION_STRUCT.field_28; + if (r3 < TRANSITION_STRUCT.data[2]) + r3 = TRANSITION_STRUCT.data[2]; if (r3 > r4) r3 = r4; } else { - if (r4 > TRANSITION_STRUCT.field_28) - r4 = TRANSITION_STRUCT.field_28; + if (r4 > TRANSITION_STRUCT.data[2]) + r4 = TRANSITION_STRUCT.data[2]; if (r4 <= r3) r4 = r3; } - gUnknown_03004DE0[0][TRANSITION_STRUCT.field_2A] = (r4) | (r3 << 8); + gUnknown_03004DE0[0][TRANSITION_STRUCT.data[3]] = (r4) | (r3 << 8); if (nextFunc) { task->tState++; break; } else - nextFunc = sub_811D978(&TRANSITION_STRUCT.field_24, 1, 1); + nextFunc = sub_811D978(TRANSITION_STRUCT.data, 1, 1); } TRANSITION_STRUCT.VBlank_DMA++; @@ -2265,37 +2253,36 @@ static void sub_811D6E8(s16* array, s16 sinAdd, s16 index, s16 indexIncrementer, } } -void sub_811D764(u16* array, s16 a1, s16 a2, s16 a3) +static void sub_811D764(u16* array, s16 a1, s16 a2, s16 a3) { s16 i; memset(array, 0xA, 160 * sizeof(s16)); for (i = 0; i < 64; i++) { - s16 sinResult, cosResult, r1, r6, r7, r8; - s16 r2, r3; - s16 j; + s16 sinResult, cosResult; + s16 toStoreOrr, r2, r3, toStore, r7, r8; sinResult = Sin(i, a3); cosResult = Cos(i, a3); - r1 = a1 - sinResult; - r6 = a1 + sinResult; + toStoreOrr = a1 - sinResult; + toStore = a1 + sinResult; r7 = a2 - cosResult; r8 = a2 + cosResult; - if (r1 < 0) - r1 = 0; - if (r6 > 0xF0) - r6 = 0xF0; + if (toStoreOrr < 0) + toStoreOrr = 0; + if (toStore > 0xF0) + toStore = 0xF0; if (r7 < 0) r7 = 0; if (r8 > 0x9F) r8 = 0x9F; - r6 |= (r1 << 8); - array[r7] = r6; - array[r8] = r6; + toStore |= (toStoreOrr << 8); + array[r7] = toStore; + array[r8] = toStore; cosResult = Cos(i + 1, a3); r3 = a2 - cosResult; @@ -2306,26 +2293,81 @@ void sub_811D764(u16* array, s16 a1, s16 a2, s16 a3) if (r2 > 0x9F) r2 = 0x9F; - j = r7; - while (j > r3) - { - array[--j] = r6; - } - j = r7; - while (j < r3) - { - array[++j] = r6; - } + while (r7 > r3) + array[--r7] = toStore; + while (r7 < r3) + array[++r7] = toStore; + + while (r8 > r2) + array[--r8] = toStore; + while (r8 < r2) + array[++r8] = toStore; + } +} + +static void sub_811D8FC(s16* a0, s16 a1, s16 a2, s16 a3, s16 a4, s16 a5, s16 a6) +{ + a0[0] = a1; + a0[1] = a2; + a0[2] = a1; + a0[3] = a2; + a0[4] = a3; + a0[5] = a4; + a0[6] = a5; + a0[7] = a6; + a0[8] = a3 - a1; + if (a0[8] < 0) + { + a0[8] = -a0[8]; + a0[6] = -a5; + } + a0[9] = a4 - a2; + if (a0[9] < 0) + { + a0[9] = -a0[9]; + a0[7] = -a6; + } + a0[10] = 0; +} - j = r8; - while (j > r2) +static bool8 sub_811D978(s16* a0, bool8 a1, bool8 a2) +{ + u8 var; + if (a0[8] > a0[9]) + { + a0[2] += a0[6]; + a0[10] += a0[9]; + if (a0[10] > a0[8]) { - array[--j] = r6; + a0[3] += a0[7]; + a0[10] -= a0[8]; } - j = r8; - while (j < r2) + } + else + { + a0[3] += a0[7]; + a0[10] += a0[8]; + if (a0[10] > a0[9]) { - array[++j] = r6; + a0[2] += a0[6]; + a0[10] -= a0[9]; } } + var = 0; + if ((a0[6] > 0 && a0[2] >= a0[4]) || (a0[6] < 0 && a0[2] <= a0[4])) + { + var++; + if (a1) + a0[2] = a0[4]; + } + if ((a0[7] > 0 && a0[3] >= a0[5]) || (a0[7] < 0 && a0[3] <= a0[5])) + { + var++; + if (a2) + a0[3] = a0[5]; + } + if (var == 2) + return TRUE; + else + return FALSE; } -- cgit v1.2.3 From aa3988cc1ace31f97590b4ac3b33c4fa3a5e13dc Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 22 Aug 2017 20:51:53 +0200 Subject: move all data to C --- data/battle_transition.s | 132 ------------------ include/battle_transition.h | 2 +- ld_script.txt | 1 - src/battle_transition.c | 328 +++++++++++++++++++++++++++++++------------- 4 files changed, 235 insertions(+), 228 deletions(-) delete mode 100644 data/battle_transition.s diff --git a/data/battle_transition.s b/data/battle_transition.s deleted file mode 100644 index 3dd12ef76..000000000 --- a/data/battle_transition.s +++ /dev/null @@ -1,132 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - - -gSpriteImageTable_83FD950:: @ 83FD950 - obj_frame_tiles gSpriteImage_83FC148, 0x200 - - .align 2 -gSpriteAnim_83FD958:: @ 83FD958 - obj_image_anim_frame 0, 1 - obj_image_anim_end - - .align 2 -gSpriteAnimTable_83FD960:: @ 83FD960 - .4byte gSpriteAnim_83FD958 - - .align 2 -gSpriteAffineAnim_83FD964:: @ 83FD964 - obj_rot_scal_anim_frame 0x0, 0x0, -4, 1 - obj_rot_scal_anim_jump 0 - - .align 2 -gSpriteAffineAnim_83FD974:: @ 83FD974 - obj_rot_scal_anim_frame 0x0, 0x0, 4, 1 - obj_rot_scal_anim_jump 0 - - .align 2 -gSpriteAffineAnimTable_83FD984:: @ 83FD984 - .4byte gSpriteAffineAnim_83FD964 - .4byte gSpriteAffineAnim_83FD974 - - .align 2 -gSpriteTemplate_83FD98C:: @ 83FD98C - spr_template 0xFFFF, 4105, gFieldOamData_32x32, gSpriteAnimTable_83FD960, gSpriteImageTable_83FD950, gSpriteAffineAnimTable_83FD984, sub_811B720 - - .align 2 -gOamData_83FD9A4:: @ 83FD9A4 - .2byte 0x0000 - .2byte 0xC000 - .2byte 0x0000 - - .align 2 -gSpriteImageTable_83FD9AC:: @ 83FD9AC - obj_frame_tiles gSpriteImage_83FC528, 0x800 - - .align 2 -gSpriteImageTable_83FD9B4:: @ 83FD9B4 - obj_frame_tiles gSpriteImage_83FCD28, 0x800 - - .align 2 -gSpriteAnim_83FD9BC:: @ 83FD9BC - obj_image_anim_frame 0, 1 - obj_image_anim_end - - .align 2 -gSpriteAnimTable_83FD9C4:: @ 83FD9C4 - .4byte gSpriteAnim_83FD9BC - - .align 2 -gSpriteTemplate_83FD9C8:: @ 83FD9C8 - spr_template 0xFFFF, 4106, gOamData_83FD9A4, gSpriteAnimTable_83FD9C4, gSpriteImageTable_83FD9AC, gDummySpriteAffineAnimTable, sub_811C90C - - .align 2 -gSpriteTemplate_83FD9E0:: @ 83FD9E0 - spr_template 0xFFFF, 4106, gOamData_83FD9A4, gSpriteAnimTable_83FD9C4, gSpriteImageTable_83FD9B4, gDummySpriteAffineAnimTable, sub_811C90C - - .align 2 -gFieldEffectObjectPalette10:: @ 83FD9F8 - .incbin "graphics/field_effect_objects/palettes/10.gbapal" - - .align 2 -gFieldEffectObjectPaletteInfo10:: @ 83FDA18 - obj_pal gFieldEffectObjectPalette10, 0x1009 - - .align 2 -sMugshotPal_Sydney: - .incbin "graphics/battle_transitions/sidney_bg.gbapal" - - .align 2 -sMugshotPal_Phoebe: - .incbin "graphics/battle_transitions/phoebe_bg.gbapal" - - .align 2 -sMugshotPal_Glacia: - .incbin "graphics/battle_transitions/glacia_bg.gbapal" - - .align 2 -sMugshotPal_Drake: - .incbin "graphics/battle_transitions/drake_bg.gbapal" - - .align 2 -sMugshotPal_Steven: - .incbin "graphics/battle_transitions/steven_bg.gbapal" - - .align 2 -sMugshotPal_Brendan: - .incbin "graphics/battle_transitions/brendan_bg.gbapal" - - .align 2 -sMugshotPal_May: - .incbin "graphics/battle_transitions/may_bg.gbapal" - - .align 2 -sOpponentMugshotsPals:: @ 83FDB00 - .4byte sMugshotPal_Sydney - .4byte sMugshotPal_Phoebe - .4byte sMugshotPal_Glacia - .4byte sMugshotPal_Drake - .4byte sMugshotPal_Steven - - .align 2 -sPlayerMugshotsPals:: @ 83FDB14 - .4byte sMugshotPal_Brendan - .4byte sMugshotPal_May - - .align 2 -UnusedTrainerPalette: - .incbin "graphics/battle_transitions/unused_trainer.gbapal" - - .align 2 -gSpritePalette_UnusedTrainer:: @ 83FDB3C - obj_pal UnusedTrainerPalette, 0x100A - - .align 2 -gUnknown_083FDB44:: @ 83FDB44 - .incbin "graphics/battle_transitions/big_pokeball_map.bin" - - .align 2 -gUnknown_083FDFF4:: @ 83FDFF4 - .incbin "graphics/battle_transitions/elite_four_bg_map.bin" diff --git a/include/battle_transition.h b/include/battle_transition.h index 63ea36b67..34a7290fa 100644 --- a/include/battle_transition.h +++ b/include/battle_transition.h @@ -25,7 +25,7 @@ enum // TRANSITION_MUGSHOT #define B_TRANSITION_SWEARL 1 #define B_TRANSITION_SHUFFLE 2 #define B_TRANSITION_BIG_POKEBALL 3 -#define B_TRANSITION_POKEBALLS_WIPEOUT 4 +#define B_TRANSITION_POKEBALLS_TRAIL 4 #define B_TRANSITION_CLOCKWISE_BLACKFADE 5 #define B_TRANSITION_RIPPLE 6 #define B_TRANSITION_WAVE 7 diff --git a/ld_script.txt b/ld_script.txt index 3e4a3ea91..9a3808950 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -444,7 +444,6 @@ SECTIONS { data/pokedex_cry_screen.o(.rodata); data/landmark.o(.rodata); src/battle_transition.o(.rodata); - data/battle_transition.o(.rodata); data/battle_811DA74.o(.rodata); data/battle_message.o(.rodata); src/choose_party.o(.rodata); diff --git a/src/battle_transition.c b/src/battle_transition.c index 88d3330f9..363a52148 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -15,12 +15,13 @@ void sub_807DE10(void); void dp12_8087EA4(void); -void sub_811C90C(struct Sprite* sprite); extern u8 ewram[]; -extern s16 gUnknown_03005560[]; +extern u16 gUnknown_03005560[]; extern u16 gUnknown_03004DE0[][0x3C0]; +extern const struct OamData gFieldOamData_32x32; + struct TransitionData { vs8 VBlank_DMA; @@ -32,15 +33,15 @@ struct TransitionData u16 field_C; u16 BLDCNT; u16 BLDALPHA; - u16 field_12; + u16 BLDY; s16 field_14; s16 field_16; s16 field_18; s16 field_1A; s16 field_1C; - s16 field_1E; + s16 field_1E; // unused s16 field_20; - s16 field_22; + s16 field_22; // unused s16 data[11]; }; @@ -171,16 +172,18 @@ static void sub_811D764(u16* a0, s16 a1, s16 a2, s16 a3); static void sub_811D8FC(s16* a0, s16 a1, s16 a2, s16 a3, s16 a4, s16 a5, s16 a6); static bool8 sub_811D978(s16* a0, bool8 a1, bool8 a2); static void sub_811CFD0(struct Sprite* sprite); +static void sub_811B720(struct Sprite* sprite); +static void sub_811C90C(struct Sprite* sprite); // const data -static const u32 gUnknown_083FBB88[] = INCBIN_U32("graphics/battle_transitions/big_pokeball.4bpp"); -static const u32 gUnknown_083FC108[] = INCBIN_U32("graphics/battle_transitions/pokeball_trail.4bpp"); -const u32 gSpriteImage_83FC148[] = INCBIN_U32("graphics/battle_transitions/pokeball.4bpp"); -static const u32 gUnknown_083FC348[] = INCBIN_U32("graphics/battle_transitions/elite_four_bg.4bpp"); -const u32 gSpriteImage_83FC528[] = INCBIN_U32("graphics/battle_transitions/unused_brendan.4bpp"); -const u32 gSpriteImage_83FCD28[] = INCBIN_U32("graphics/battle_transitions/unused_lass.4bpp"); -const u32 gUnknown_083FD528[] = INCBIN_U32("graphics/battle_transitions/shrinking_box.4bpp"); +static const u32 sBigPokeball_Tileset[] = INCBIN_U32("graphics/battle_transitions/big_pokeball.4bpp"); +static const u32 sPokeballTrail_Tileset[] = INCBIN_U32("graphics/battle_transitions/pokeball_trail.4bpp"); +static const u8 sSpriteImage_83FC148[] = INCBIN_U8("graphics/battle_transitions/pokeball.4bpp"); +static const u32 sUnknown_083FC348[] = INCBIN_U32("graphics/battle_transitions/elite_four_bg.4bpp"); +static const u8 sSpriteImage_83FC528[] = INCBIN_U8("graphics/battle_transitions/unused_brendan.4bpp"); +static const u8 sSpriteImage_83FCD28[] = INCBIN_U8("graphics/battle_transitions/unused_lass.4bpp"); +static const u32 sShrinkingBoxTileset[] = INCBIN_U32("graphics/battle_transitions/shrinking_box.4bpp"); static struct TransitionData * const sTransitionStructPtr = &TRANSITION_STRUCT; @@ -254,9 +257,9 @@ static const TransitionState sPhase2_Transition4_Funcs[] = &Phase2_Transition4_Func3 }; -static const s16 gUnknown_083FD7E4[2] = {-16, 256}; -static const s16 gUnknown_083FD7E8[5] = {0, 32, 64, 18, 48}; -static const s16 gUnknown_083FD7F2[2] = {8, -8}; +static const s16 sUnknown_083FD7E4[2] = {-16, 256}; +static const s16 sUnknown_083FD7E8[5] = {0, 32, 64, 18, 48}; +static const s16 sUnknown_083FD7F2[2] = {8, -8}; static const TransitionState sPhase2_Transition5_Funcs[] = { @@ -314,7 +317,7 @@ static const s16 sMugshotsOpponentCoords[MUGSHOTS_NO][2] = {0, 7}, }; -static const TransitionSpriteCallback gUnknown_083FD880[] = +static const TransitionSpriteCallback sUnknown_083FD880[] = { &sub_811C934, &sub_811C938, @@ -325,8 +328,8 @@ static const TransitionSpriteCallback gUnknown_083FD880[] = &sub_811C934 }; -static const s16 gUnknown_083FD89C[2] = {12, -12}; -static const s16 gUnknown_083FD8A0[2] = {-1, 1}; +static const s16 sUnknown_083FD89C[2] = {12, -12}; +static const s16 sUnknown_083FD8A0[2] = {-1, 1}; static const TransitionState sPhase2_Transition8_Funcs[] = { @@ -344,7 +347,7 @@ static const TransitionState sPhase2_Transition9_Funcs[] = &Phase2_Transition9_Func5 }; -static const s16 gUnknown_083FD8C4[8] = {0, 20, 15, 40, 10, 25, 35, 5}; +static const s16 sUnknown_083FD8C4[8] = {0, 20, 15, 40, 10, 25, 35, 5}; static const TransitionState sPhase2_Transition10_Funcs[] = { @@ -362,7 +365,7 @@ static const TransitionState sPhase2_Transition11_Funcs[] = &Phase2_Transition11_Func5 }; -static const s16 gUnknown_083FD8F4[][5] = +static const s16 sUnknown_083FD8F4[][5] = { {56, 0, 0, 160, 0}, {104, 160, 240, 88, 1}, @@ -373,7 +376,7 @@ static const s16 gUnknown_083FD8F4[][5] = {168, 160, 48, 0, 1}, }; -static const s16 gUnknown_083FD93A[] = {8, 4, 2, 1, 1, 1, 0}; +static const s16 sUnknown_083FD93A[] = {8, 4, 2, 1, 1, 1, 0}; static const TransitionState sPhase1_TransitionAll_Funcs[] = { @@ -381,12 +384,149 @@ static const TransitionState sPhase1_TransitionAll_Funcs[] = &Phase1_TransitionAll_Func2 }; -extern const u16 gFieldEffectObjectPalette10[]; -extern const u16 gUnknown_083FDB44[]; -extern const struct SpriteTemplate gSpriteTemplate_83FD98C; -extern const u16 gUnknown_083FDFF4[]; -extern const u8 * const sOpponentMugshotsPals[]; -extern const u8 * const sPlayerMugshotsPals[2]; +static const struct SpriteFrameImage sSpriteImageTable_83FD950[] = +{ + sSpriteImage_83FC148, 0x200 +}; + +static const union AnimCmd sSpriteAnim_83FD958[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_83FD960[] = +{ + sSpriteAnim_83FD958 +}; + +static const union AffineAnimCmd sSpriteAffineAnim_83FD964[] = +{ + AFFINEANIMCMD_FRAME(0, 0, -4, 1), + AFFINEANIMCMD_JUMP(0) +}; + +static const union AffineAnimCmd sSpriteAffineAnim_83FD974[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 4, 1), + AFFINEANIMCMD_JUMP(0) +}; + +static const union AffineAnimCmd *const sSpriteAffineAnimTable_83FD984[] = +{ + sSpriteAffineAnim_83FD964, + sSpriteAffineAnim_83FD974 +}; + +static const struct SpriteTemplate sSpriteTemplate_83FD98C = +{ + .tileTag = 0xFFFF, + .paletteTag = 4105, + .oam = &gFieldOamData_32x32, + .anims = sSpriteAnimTable_83FD960, + .images = sSpriteImageTable_83FD950, + .affineAnims = sSpriteAffineAnimTable_83FD984, + .callback = sub_811B720 +}; + +static const struct OamData gOamData_83FD9A4 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; + +static const struct SpriteFrameImage sSpriteImageTable_83FD9AC[] = +{ + sSpriteImage_83FC528, 0x800 +}; + +static const struct SpriteFrameImage sSpriteImageTable_83FD9B4[] = +{ + sSpriteImage_83FCD28, 0x800 +}; + +static const union AnimCmd sSpriteAnim_83FD9BC[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_83FD9C4[] = +{ + sSpriteAnim_83FD9BC +}; + +static const struct SpriteTemplate sSpriteTemplate_83FD9C8 = +{ + .tileTag = 0xFFFF, + .paletteTag = 4106, + .oam = &gOamData_83FD9A4, + .anims = sSpriteAnimTable_83FD9C4, + .images = sSpriteImageTable_83FD9AC, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_811C90C +}; + +static const struct SpriteTemplate sSpriteTemplate_83FD9E0 = +{ + .tileTag = 0xFFFF, + .paletteTag = 4106, + .oam = &gOamData_83FD9A4, + .anims = sSpriteAnimTable_83FD9C4, + .images = sSpriteImageTable_83FD9B4, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_811C90C +}; + +static const u16 gFieldEffectObjectPalette10[] = INCBIN_U16("graphics/field_effect_objects/palettes/10.gbapal"); + +const struct SpritePalette gFieldEffectObjectPaletteInfo10 = +{ + gFieldEffectObjectPalette10, 0x1009 +}; + +static const u16 sMugshotPal_Sydney[] = INCBIN_U16("graphics/battle_transitions/sidney_bg.gbapal"); +static const u16 sMugshotPal_Phoebe[] = INCBIN_U16("graphics/battle_transitions/phoebe_bg.gbapal"); +static const u16 sMugshotPal_Glacia[] = INCBIN_U16("graphics/battle_transitions/glacia_bg.gbapal"); +static const u16 sMugshotPal_Drake[] = INCBIN_U16("graphics/battle_transitions/drake_bg.gbapal"); +static const u16 sMugshotPal_Steven[] = INCBIN_U16("graphics/battle_transitions/steven_bg.gbapal"); +static const u16 sMugshotPal_Brendan[] = INCBIN_U16("graphics/battle_transitions/brendan_bg.gbapal"); +static const u16 sMugshotPal_May[] = INCBIN_U16("graphics/battle_transitions/may_bg.gbapal"); + +static const u16 * const sOpponentMugshotsPals[MUGSHOTS_NO] = +{ + sMugshotPal_Sydney, + sMugshotPal_Phoebe, + sMugshotPal_Glacia, + sMugshotPal_Drake, + sMugshotPal_Steven +}; + +static const u16 * const sPlayerMugshotsPals[2] = +{ + sMugshotPal_Brendan, + sMugshotPal_May +}; + +static const u16 sUnusedTrainerPalette[] = INCBIN_U16("graphics/battle_transitions/unused_trainer.gbapal"); +static const struct SpritePalette sSpritePalette_UnusedTrainer = +{ + sUnusedTrainerPalette, 0x100A +}; + +static const u16 sBigPokeball_Tilemap[] = INCBIN_U16("graphics/battle_transitions/big_pokeball_map.bin"); +static const u16 sMugshotsTilemap[] = INCBIN_U16("graphics/battle_transitions/elite_four_bg_map.bin"); // actual code starts here @@ -683,7 +823,7 @@ static bool8 Phase2_Transition3_Func1(struct Task* task) sub_811D6A8(&dst1, & dst2); CpuFill16(0, dst1, 0x800); - CpuSet(gUnknown_083FBB88, dst2, 0x2C0); + CpuSet(sBigPokeball_Tileset, dst2, 0x2C0); LoadPalette(gFieldEffectObjectPalette10, 240, 32); task->tState++; @@ -694,15 +834,15 @@ static bool8 Phase2_Transition3_Func2(struct Task* task) { s16 i, j; u16 *dst1, *dst2; - const u16* var; + const u16* BigPokeballMap; - var = gUnknown_083FDB44; + BigPokeballMap = sBigPokeball_Tilemap; sub_811D6A8(&dst1, &dst2); for (i = 0; i < 20; i++) { - for (j = 0; j < 30; j++, var++) + for (j = 0; j < 30; j++, BigPokeballMap++) { - dst1[i * 32 + j] = *var | 0xF000; + dst1[i * 32 + j] = *BigPokeballMap | 0xF000; } } sub_811D6E8(gUnknown_03004DE0[0], 0, task->data[4], 132, task->data[5], 160); @@ -834,7 +974,7 @@ static bool8 Phase2_Transition4_Func1(struct Task* task) u16 *dst1, *dst2; sub_811D6A8(&dst1, &dst2); - CpuSet(gUnknown_083FC108, dst2, 0x20); + CpuSet(sPokeballTrail_Tileset, dst2, 0x20); CpuFill32(0, dst1, 0x800); LoadPalette(gFieldEffectObjectPalette10, 0xF0, 0x20); @@ -849,8 +989,8 @@ static bool8 Phase2_Transition4_Func2(struct Task* task) s16 arr0[2]; s16 arr1[5]; - memcpy(arr0, gUnknown_083FD7E4, sizeof(gUnknown_083FD7E4)); - memcpy(arr1, gUnknown_083FD7E8, sizeof(gUnknown_083FD7E8)); + memcpy(arr0, sUnknown_083FD7E4, sizeof(sUnknown_083FD7E4)); + memcpy(arr1, sUnknown_083FD7E8, sizeof(sUnknown_083FD7E8)); rand = Random() & 1; for (i = 0; i <= 4; i++, rand ^= 1) { @@ -877,7 +1017,7 @@ static bool8 Phase2_Transition4_Func3(struct Task* task) bool8 FldEff_Pokeball(void) { - u8 spriteID = CreateSpriteAtEnd(&gSpriteTemplate_83FD98C, gUnknown_0202FF84[0], gUnknown_0202FF84[1], 0); + u8 spriteID = CreateSpriteAtEnd(&sSpriteTemplate_83FD98C, gUnknown_0202FF84[0], gUnknown_0202FF84[1], 0); gSprites[spriteID].oam.priority = 0; gSprites[spriteID].oam.affineMode = 1; gSprites[spriteID].data0 = gUnknown_0202FF84[2]; @@ -894,11 +1034,11 @@ bool8 FldEff_Pokeball(void) ptr[index] = toStore; \ } -void sub_811B720(struct Sprite* sprite) +static void sub_811B720(struct Sprite* sprite) { s16 arr0[2]; - memcpy(arr0, gUnknown_083FD7F2, sizeof(gUnknown_083FD7F2)); + memcpy(arr0, sUnknown_083FD7F2, sizeof(sUnknown_083FD7F2)); if (sprite->data1 != 0) sprite->data1--; else @@ -1348,19 +1488,19 @@ static bool8 Phase2_Mugshot_Func2(struct Task* task) { s16 i, j; u16 *dst1, *dst2; - const u16* var; + const u16* MugshotsMap; - var = gUnknown_083FDFF4; + MugshotsMap = sMugshotsTilemap; sub_811D6A8(&dst1, &dst2); - CpuSet(gUnknown_083FC348, dst2, 0xF0); + CpuSet(sUnknown_083FC348, dst2, 0xF0); LoadPalette(sOpponentMugshotsPals[task->tMugshotID], 0xF0, 0x20); LoadPalette(sPlayerMugshotsPals[gSaveBlock2.playerGender], 0xFA, 0xC); for (i = 0; i < 20; i++) { - for (j = 0; j < 32; j++, var++) + for (j = 0; j < 32; j++, MugshotsMap++) { - dst1[i * 32 + j] = *var | 0xF000; + dst1[i * 32 + j] = *MugshotsMap | 0xF000; } } @@ -1622,9 +1762,9 @@ static void Mugshots_CreateOpponentPlayerSprites(struct Task* task) SetOamMatrixRotationScaling(playerSprite->oam.matrixNum, -512, 0x200, 0); } -void sub_811C90C(struct Sprite* sprite) +static void sub_811C90C(struct Sprite* sprite) { - while (gUnknown_083FD880[sprite->data0](sprite)); + while (sUnknown_083FD880[sprite->data0](sprite)); } static bool8 sub_811C934(struct Sprite* sprite) @@ -1637,8 +1777,8 @@ static bool8 sub_811C938(struct Sprite* sprite) s16 arr0[2]; s16 arr1[2]; - memcpy(arr0, gUnknown_083FD89C, sizeof(gUnknown_083FD89C)); - memcpy(arr1, gUnknown_083FD8A0, sizeof(gUnknown_083FD8A0)); + memcpy(arr0, sUnknown_083FD89C, sizeof(sUnknown_083FD89C)); + memcpy(arr1, sUnknown_083FD8A0, sizeof(sUnknown_083FD8A0)); sprite->data0++; sprite->data1 = arr0[sprite->data7]; @@ -1809,7 +1949,7 @@ static bool8 Phase2_Transition9_Func1(struct Task* task) dp12_8087EA4(); TRANSITION_STRUCT.BLDCNT = 0xBF; - TRANSITION_STRUCT.field_12 = 0; + TRANSITION_STRUCT.BLDY = 0; TRANSITION_STRUCT.WININ = 0x1E; TRANSITION_STRUCT.WINOUT = 0x3F; TRANSITION_STRUCT.WIN0V = 0xA0; @@ -1836,7 +1976,7 @@ static bool8 Phase2_Transition9_Func2(struct Task* task) s16 arr1[8]; struct Sprite* sprite; - memcpy(arr1, gUnknown_083FD8C4, sizeof(gUnknown_083FD8C4)); + memcpy(arr1, sUnknown_083FD8C4, sizeof(sUnknown_083FD8C4)); for (i = 0, posY = 0; i < 8; i++, posY += 0x14) { sprite = &gSprites[CreateInvisibleSprite(sub_811CFD0)]; @@ -1870,7 +2010,7 @@ static bool8 Phase2_Transition9_Func4(struct Task* task) SetHBlankCallback(0); TRANSITION_STRUCT.field_6 = 0xF0; - TRANSITION_STRUCT.field_12 = 0; + TRANSITION_STRUCT.BLDY = 0; TRANSITION_STRUCT.BLDCNT = 0xFF; TRANSITION_STRUCT.WININ = 0x3F; @@ -1882,7 +2022,7 @@ static bool8 Phase2_Transition9_Func4(struct Task* task) static bool8 Phase2_Transition9_Func5(struct Task* task) { - if (++TRANSITION_STRUCT.field_12 > 16) + if (++TRANSITION_STRUCT.BLDY > 16) { sub_811D6D4(); DestroyTask(FindTaskIdByFunc(Phase2Task_Transition9)); @@ -1906,7 +2046,7 @@ static void VBlankCB0_Phase2_Transition9(void) static void VBlankCB1_Phase2_Transition9(void) { VBlankCB_BattleTransition(); - REG_BLDY = TRANSITION_STRUCT.field_12; + REG_BLDY = TRANSITION_STRUCT.BLDY; REG_BLDCNT = TRANSITION_STRUCT.BLDCNT; REG_WININ = TRANSITION_STRUCT.WININ; REG_WINOUT = TRANSITION_STRUCT.WINOUT; @@ -1972,7 +2112,7 @@ static bool8 Phase2_Transition10_Func1(struct Task* task) u16 *dst1, *dst2; sub_811D6A8(&dst1, &dst2); - CpuSet(gUnknown_083FD528, dst2, 0x10); + CpuSet(sShrinkingBoxTileset, dst2, 0x10); CpuFill16(0xF000, dst1, 0x800); LoadPalette(gFieldEffectObjectPalette10, 0xF0, 0x20); @@ -1989,7 +2129,7 @@ static bool8 Phase2_Transition10_Func2(struct Task* task) sub_811D690(&dst1); task->data[1] = 3; task->data[2]++; - CpuSet(gUnknown_083FD528 + (task->data[2] * 8), dst1, 0x10); + CpuSet(sShrinkingBoxTileset + (task->data[2] * 8), dst1, 0x10); if (task->data[2] > 0xD) { task->tState++; @@ -2042,12 +2182,12 @@ static bool8 Phase2_Transition11_Func1(struct Task* task) static bool8 Phase2_Transition11_Func2(struct Task* task) { sub_811D8FC(TRANSITION_STRUCT.data, - gUnknown_083FD8F4[task->data[1]][0], - gUnknown_083FD8F4[task->data[1]][1], - gUnknown_083FD8F4[task->data[1]][2], - gUnknown_083FD8F4[task->data[1]][3], + sUnknown_083FD8F4[task->data[1]][0], + sUnknown_083FD8F4[task->data[1]][1], + sUnknown_083FD8F4[task->data[1]][2], + sUnknown_083FD8F4[task->data[1]][3], 1, 1); - task->data[2] = gUnknown_083FD8F4[task->data[1]][4]; + task->data[2] = sUnknown_083FD8F4[task->data[1]][4]; task->tState++; return TRUE; } @@ -2096,7 +2236,7 @@ static bool8 Phase2_Transition11_Func4(struct Task* task) if (++task->data[1] < 7) { task->tState++; - task->data[3] = gUnknown_083FD93A[task->data[1] - 1]; + task->data[3] = sUnknown_083FD93A[task->data[1] - 1]; return TRUE; } else @@ -2305,66 +2445,66 @@ static void sub_811D764(u16* array, s16 a1, s16 a2, s16 a3) } } -static void sub_811D8FC(s16* a0, s16 a1, s16 a2, s16 a3, s16 a4, s16 a5, s16 a6) +static void sub_811D8FC(s16* data, s16 a1, s16 a2, s16 a3, s16 a4, s16 a5, s16 a6) { - a0[0] = a1; - a0[1] = a2; - a0[2] = a1; - a0[3] = a2; - a0[4] = a3; - a0[5] = a4; - a0[6] = a5; - a0[7] = a6; - a0[8] = a3 - a1; - if (a0[8] < 0) + data[0] = a1; + data[1] = a2; + data[2] = a1; + data[3] = a2; + data[4] = a3; + data[5] = a4; + data[6] = a5; + data[7] = a6; + data[8] = a3 - a1; + if (data[8] < 0) { - a0[8] = -a0[8]; - a0[6] = -a5; + data[8] = -data[8]; + data[6] = -a5; } - a0[9] = a4 - a2; - if (a0[9] < 0) + data[9] = a4 - a2; + if (data[9] < 0) { - a0[9] = -a0[9]; - a0[7] = -a6; + data[9] = -data[9]; + data[7] = -a6; } - a0[10] = 0; + data[10] = 0; } -static bool8 sub_811D978(s16* a0, bool8 a1, bool8 a2) +static bool8 sub_811D978(s16* data, bool8 a1, bool8 a2) { u8 var; - if (a0[8] > a0[9]) + if (data[8] > data[9]) { - a0[2] += a0[6]; - a0[10] += a0[9]; - if (a0[10] > a0[8]) + data[2] += data[6]; + data[10] += data[9]; + if (data[10] > data[8]) { - a0[3] += a0[7]; - a0[10] -= a0[8]; + data[3] += data[7]; + data[10] -= data[8]; } } else { - a0[3] += a0[7]; - a0[10] += a0[8]; - if (a0[10] > a0[9]) + data[3] += data[7]; + data[10] += data[8]; + if (data[10] > data[9]) { - a0[2] += a0[6]; - a0[10] -= a0[9]; + data[2] += data[6]; + data[10] -= data[9]; } } var = 0; - if ((a0[6] > 0 && a0[2] >= a0[4]) || (a0[6] < 0 && a0[2] <= a0[4])) + if ((data[6] > 0 && data[2] >= data[4]) || (data[6] < 0 && data[2] <= data[4])) { var++; if (a1) - a0[2] = a0[4]; + data[2] = data[4]; } - if ((a0[7] > 0 && a0[3] >= a0[5]) || (a0[7] < 0 && a0[3] <= a0[5])) + if ((data[7] > 0 && data[3] >= data[5]) || (data[7] < 0 && data[3] <= data[5])) { var++; if (a2) - a0[3] = a0[5]; + data[3] = data[5]; } if (var == 2) return TRUE; -- cgit v1.2.3 From c8d77612267c04444b5318f3e058d0a77859a3db Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 22 Aug 2017 21:19:55 +0200 Subject: meaningful names to transitions given --- include/battle_transition.h | 6 +- src/battle_transition.c | 558 ++++++++++++++++++++++---------------------- 2 files changed, 282 insertions(+), 282 deletions(-) diff --git a/include/battle_transition.h b/include/battle_transition.h index 34a7290fa..ca6869c93 100644 --- a/include/battle_transition.h +++ b/include/battle_transition.h @@ -18,14 +18,14 @@ enum // TRANSITION_MUGSHOT #define MUGSHOTS_NO 5 -// credits for the names go to Dyskinesia, Tetrable and Dizzy Egg +// credits for the names go to Dyskinesia and Tetrable // names are naturally subject to change #define B_TRANSITION_BLUR 0 -#define B_TRANSITION_SWEARL 1 +#define B_TRANSITION_SWIRL 1 #define B_TRANSITION_SHUFFLE 2 #define B_TRANSITION_BIG_POKEBALL 3 -#define B_TRANSITION_POKEBALLS_TRAIL 4 +#define B_TRANSITION_POKEBALLS_TRAIL 4 #define B_TRANSITION_CLOCKWISE_BLACKFADE 5 #define B_TRANSITION_RIPPLE 6 #define B_TRANSITION_WAVE 7 diff --git a/src/battle_transition.c b/src/battle_transition.c index 363a52148..35f001bc7 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -53,18 +53,18 @@ typedef bool8 (*TransitionSpriteCallback)(struct Sprite* sprite); static void LaunchBattleTransitionTask(u8 transitionID); static void Task_BattleTransitionMain(u8 taskID); static void Phase1Task_TransitionAll(u8 taskID); -static void Phase2Task_Transition0(u8 taskID); -static void Phase2Task_Transition1(u8 taskID); -static void Phase2Task_Transition2(u8 taskID); -static void Phase2Task_Transition3(u8 taskID); -static void Phase2Task_Transition4(u8 taskID); -static void Phase2Task_Transition5(u8 taskID); -static void Phase2Task_Transition6(u8 taskID); -static void Phase2Task_Transition7(u8 taskID); -static void Phase2Task_Transition8(u8 taskID); -static void Phase2Task_Transition9(u8 taskID); -static void Phase2Task_Transition10(u8 taskID); -static void Phase2Task_Transition11(u8 taskID); +static void Phase2Task_Transition_Blur(u8 taskID); +static void Phase2Task_Transition_Swirl(u8 taskID); +static void Phase2Task_Transition_Shuffle(u8 taskID); +static void Phase2Task_Transition_BigPokeball(u8 taskID); +static void Phase2Task_Transition_PokeballsTrail(u8 taskID); +static void Phase2Task_Transition_Clockwise_BlackFade(u8 taskID); +static void Phase2Task_Transition_Ripple(u8 taskID); +static void Phase2Task_Transition_Wave(u8 taskID); +static void Phase2Task_Transition_Slice(u8 taskID); +static void Phase2Task_Transition_WhiteFade(u8 taskID); +static void Phase2Task_Transition_GridSquares(u8 taskID); +static void Phase2Task_Transition_Shards(u8 taskID); static void Phase2Task_Transition_Sydney(u8 taskID); static void Phase2Task_Transition_Phoebe(u8 taskID); static void Phase2Task_Transition_Glacia(u8 taskID); @@ -74,69 +74,69 @@ static bool8 Transition_Phase1(struct Task* task); static bool8 Transition_WaitForPhase1(struct Task* task); static bool8 Transition_Phase2(struct Task* task); static bool8 Transition_WaitForPhase2(struct Task* task); -static void VBlankCB_Phase2_Transition1(void); -static void HBlankCB_Phase2_Transition1(void); -static void VBlankCB_Phase2_Transition2(void); -static void HBlankCB_Phase2_Transition2(void); -static void VBlankCB0_Phase2_Transition3(void); -static void VBlankCB1_Phase2_Transition3(void); -static void VBlankCB_Phase2_Transition5(void); -static void VBlankCB_Phase2_Transition6(void); -static void HBlankCB_Phase2_Transition6(void); -static void VBlankCB_Phase2_Transition7(void); -static void VBlankCB_Phase2_Transition8(void); -static void HBlankCB_Phase2_Transition8(void); -static void VBlankCB0_Phase2_Transition9(void); -static void VBlankCB1_Phase2_Transition9(void); -static void HBlankCB_Phase2_Transition9(void); +static void VBlankCB_Phase2_Transition_Swirl(void); +static void HBlankCB_Phase2_Transition_Swirl(void); +static void VBlankCB_Phase2_Transition_Shuffle(void); +static void HBlankCB_Phase2_Transition_Shuffle(void); +static void VBlankCB0_Phase2_Transition_BigPokeball(void); +static void VBlankCB1_Phase2_Transition_BigPokeball(void); +static void VBlankCB_Phase2_Transition_Clockwise_BlackFade(void); +static void VBlankCB_Phase2_Transition_Ripple(void); +static void HBlankCB_Phase2_Transition_Ripple(void); +static void VBlankCB_Phase2_Transition_Wave(void); +static void VBlankCB_Phase2_Transition_Slice(void); +static void HBlankCB_Phase2_Transition_Slice(void); +static void VBlankCB0_Phase2_Transition_WhiteFade(void); +static void VBlankCB1_Phase2_Transition_WhiteFade(void); +static void HBlankCB_Phase2_Transition_WhiteFade(void); static void VBlankCB0_Phase2_Mugshots(void); static void VBlankCB1_Phase2_Mugshots(void); static void HBlankCB_Phase2_Mugshots(void); -static void VBlankCB_Phase2_Transition11(void); -static bool8 Phase2_Transition0_Func1(struct Task* task); -static bool8 Phase2_Transition0_Func2(struct Task* task); -static bool8 Phase2_Transition0_Func3(struct Task* task); -static bool8 Phase2_Transition1_Func1(struct Task* task); -static bool8 Phase2_Transition1_Func2(struct Task* task); -static bool8 Phase2_Transition2_Func1(struct Task* task); -static bool8 Phase2_Transition2_Func2(struct Task* task); -static bool8 Phase2_Transition3_Func1(struct Task* task); -static bool8 Phase2_Transition3_Func2(struct Task* task); -static bool8 Phase2_Transition3_Func3(struct Task* task); -static bool8 Phase2_Transition3_Func4(struct Task* task); -static bool8 Phase2_Transition3_Func5(struct Task* task); -static bool8 Phase2_Transition3_Func6(struct Task* task); -static bool8 Phase2_Transition4_Func1(struct Task* task); -static bool8 Phase2_Transition4_Func2(struct Task* task); -static bool8 Phase2_Transition4_Func3(struct Task* task); -static bool8 Phase2_Transition5_Func1(struct Task* task); -static bool8 Phase2_Transition5_Func2(struct Task* task); -static bool8 Phase2_Transition5_Func3(struct Task* task); -static bool8 Phase2_Transition5_Func4(struct Task* task); -static bool8 Phase2_Transition5_Func5(struct Task* task); -static bool8 Phase2_Transition5_Func6(struct Task* task); -static bool8 Phase2_Transition5_Func7(struct Task* task); -static bool8 Phase2_Transition6_Func1(struct Task* task); -static bool8 Phase2_Transition6_Func2(struct Task* task); -static bool8 Phase2_Transition7_Func1(struct Task* task); -static bool8 Phase2_Transition7_Func2(struct Task* task); -static bool8 Phase2_Transition7_Func3(struct Task* task); -static bool8 Phase2_Transition8_Func1(struct Task* task); -static bool8 Phase2_Transition8_Func2(struct Task* task); -static bool8 Phase2_Transition8_Func3(struct Task* task); -static bool8 Phase2_Transition9_Func1(struct Task* task); -static bool8 Phase2_Transition9_Func2(struct Task* task); -static bool8 Phase2_Transition9_Func3(struct Task* task); -static bool8 Phase2_Transition9_Func4(struct Task* task); -static bool8 Phase2_Transition9_Func5(struct Task* task); -static bool8 Phase2_Transition10_Func1(struct Task* task); -static bool8 Phase2_Transition10_Func2(struct Task* task); -static bool8 Phase2_Transition10_Func3(struct Task* task); -static bool8 Phase2_Transition11_Func1(struct Task* task); -static bool8 Phase2_Transition11_Func2(struct Task* task); -static bool8 Phase2_Transition11_Func3(struct Task* task); -static bool8 Phase2_Transition11_Func4(struct Task* task); -static bool8 Phase2_Transition11_Func5(struct Task* task); +static void VBlankCB_Phase2_Transition_Shards(void); +static bool8 Phase2_Transition_Blur_Func1(struct Task* task); +static bool8 Phase2_Transition_Blur_Func2(struct Task* task); +static bool8 Phase2_Transition_Blur_Func3(struct Task* task); +static bool8 Phase2_Transition_Swirl_Func1(struct Task* task); +static bool8 Phase2_Transition_Swirl_Func2(struct Task* task); +static bool8 Phase2_Transition_Shuffle_Func1(struct Task* task); +static bool8 Phase2_Transition_Shuffle_Func2(struct Task* task); +static bool8 Phase2_Transition_BigPokeball_Func1(struct Task* task); +static bool8 Phase2_Transition_BigPokeball_Func2(struct Task* task); +static bool8 Phase2_Transition_BigPokeball_Func3(struct Task* task); +static bool8 Phase2_Transition_BigPokeball_Func4(struct Task* task); +static bool8 Phase2_Transition_BigPokeball_Func5(struct Task* task); +static bool8 Phase2_Transition_BigPokeball_Func6(struct Task* task); +static bool8 Phase2_Transition_PokeballsTrail_Func1(struct Task* task); +static bool8 Phase2_Transition_PokeballsTrail_Func2(struct Task* task); +static bool8 Phase2_Transition_PokeballsTrail_Func3(struct Task* task); +static bool8 Phase2_Transition_Clockwise_BlackFade_Func1(struct Task* task); +static bool8 Phase2_Transition_Clockwise_BlackFade_Func2(struct Task* task); +static bool8 Phase2_Transition_Clockwise_BlackFade_Func3(struct Task* task); +static bool8 Phase2_Transition_Clockwise_BlackFade_Func4(struct Task* task); +static bool8 Phase2_Transition_Clockwise_BlackFade_Func5(struct Task* task); +static bool8 Phase2_Transition_Clockwise_BlackFade_Func6(struct Task* task); +static bool8 Phase2_Transition_Clockwise_BlackFade_Func7(struct Task* task); +static bool8 Phase2_Transition_Ripple_Func1(struct Task* task); +static bool8 Phase2_Transition_Ripple_Func2(struct Task* task); +static bool8 Phase2_Transition_Wave_Func1(struct Task* task); +static bool8 Phase2_Transition_Wave_Func2(struct Task* task); +static bool8 Phase2_Transition_Wave_Func3(struct Task* task); +static bool8 Phase2_Transition_Slice_Func1(struct Task* task); +static bool8 Phase2_Transition_Slice_Func2(struct Task* task); +static bool8 Phase2_Transition_Slice_Func3(struct Task* task); +static bool8 Phase2_Transition_WhiteFade_Func1(struct Task* task); +static bool8 Phase2_Transition_WhiteFade_Func2(struct Task* task); +static bool8 Phase2_Transition_WhiteFade_Func3(struct Task* task); +static bool8 Phase2_Transition_WhiteFade_Func4(struct Task* task); +static bool8 Phase2_Transition_WhiteFade_Func5(struct Task* task); +static bool8 Phase2_Transition_GridSquares_Func1(struct Task* task); +static bool8 Phase2_Transition_GridSquares_Func2(struct Task* task); +static bool8 Phase2_Transition_GridSquares_Func3(struct Task* task); +static bool8 Phase2_Transition_Shards_Func1(struct Task* task); +static bool8 Phase2_Transition_Shards_Func2(struct Task* task); +static bool8 Phase2_Transition_Shards_Func3(struct Task* task); +static bool8 Phase2_Transition_Shards_Func4(struct Task* task); +static bool8 Phase2_Transition_Shards_Func5(struct Task* task); static bool8 Phase2_Mugshot_Func1(struct Task* task); static bool8 Phase2_Mugshot_Func2(struct Task* task); static bool8 Phase2_Mugshot_Func3(struct Task* task); @@ -194,23 +194,23 @@ static const TaskFunc sPhase1_Tasks[TRANSITIONS_NO] = static const TaskFunc sPhase2_Tasks[TRANSITIONS_NO] = { - &Phase2Task_Transition0, // 0 - &Phase2Task_Transition1, // 1 - &Phase2Task_Transition2, // 2 - &Phase2Task_Transition3, // 3 - &Phase2Task_Transition4, // 4 - &Phase2Task_Transition5, // 5 - &Phase2Task_Transition6, // 6 - &Phase2Task_Transition7, // 7 - &Phase2Task_Transition8, // 8 - &Phase2Task_Transition9, // 9 - &Phase2Task_Transition10, // 10 - &Phase2Task_Transition11, // 11 - &Phase2Task_Transition_Sydney, // 12 - &Phase2Task_Transition_Phoebe, // 13 - &Phase2Task_Transition_Glacia, // 14 - &Phase2Task_Transition_Drake, // 15 - &Phase2Task_Transition_Steven, // 16 + Phase2Task_Transition_Blur, // 0 + Phase2Task_Transition_Swirl, // 1 + Phase2Task_Transition_Shuffle, // 2 + Phase2Task_Transition_BigPokeball, // 3 + Phase2Task_Transition_PokeballsTrail, // 4 + Phase2Task_Transition_Clockwise_BlackFade, // 5 + Phase2Task_Transition_Ripple, // 6 + Phase2Task_Transition_Wave, // 7 + Phase2Task_Transition_Slice, // 8 + Phase2Task_Transition_WhiteFade, // 9 + Phase2Task_Transition_GridSquares, // 10 + Phase2Task_Transition_Shards, // 11 + Phase2Task_Transition_Sydney, // 12 + Phase2Task_Transition_Phoebe, // 13 + Phase2Task_Transition_Glacia, // 14 + Phase2Task_Transition_Drake, // 15 + Phase2Task_Transition_Steven, // 16 }; static const TransitionState sMainTransitionPhases[] = @@ -221,82 +221,82 @@ static const TransitionState sMainTransitionPhases[] = &Transition_WaitForPhase2 }; -static const TransitionState sPhase2_Transition0_Funcs[] = +static const TransitionState sPhase2_Transition_Blur_Funcs[] = { - &Phase2_Transition0_Func1, - &Phase2_Transition0_Func2, - &Phase2_Transition0_Func3 + Phase2_Transition_Blur_Func1, + Phase2_Transition_Blur_Func2, + Phase2_Transition_Blur_Func3 }; -static const TransitionState sPhase2_Transition1_Funcs[] = +static const TransitionState sPhase2_Transition_Swirl_Funcs[] = { - &Phase2_Transition1_Func1, - &Phase2_Transition1_Func2, + Phase2_Transition_Swirl_Func1, + Phase2_Transition_Swirl_Func2, }; -static const TransitionState sPhase2_Transition2_Funcs[] = +static const TransitionState sPhase2_Transition_Shuffle_Funcs[] = { - &Phase2_Transition2_Func1, - &Phase2_Transition2_Func2, + Phase2_Transition_Shuffle_Func1, + Phase2_Transition_Shuffle_Func2, }; -static const TransitionState sPhase2_Transition3_Funcs[] = +static const TransitionState sPhase2_Transition_BigPokeball_Funcs[] = { - &Phase2_Transition3_Func1, - &Phase2_Transition3_Func2, - &Phase2_Transition3_Func3, - &Phase2_Transition3_Func4, - &Phase2_Transition3_Func5, - &Phase2_Transition3_Func6 + Phase2_Transition_BigPokeball_Func1, + Phase2_Transition_BigPokeball_Func2, + Phase2_Transition_BigPokeball_Func3, + Phase2_Transition_BigPokeball_Func4, + Phase2_Transition_BigPokeball_Func5, + Phase2_Transition_BigPokeball_Func6 }; -static const TransitionState sPhase2_Transition4_Funcs[] = +static const TransitionState sPhase2_Transition_PokeballsTrail_Funcs[] = { - &Phase2_Transition4_Func1, - &Phase2_Transition4_Func2, - &Phase2_Transition4_Func3 + Phase2_Transition_PokeballsTrail_Func1, + Phase2_Transition_PokeballsTrail_Func2, + Phase2_Transition_PokeballsTrail_Func3 }; static const s16 sUnknown_083FD7E4[2] = {-16, 256}; static const s16 sUnknown_083FD7E8[5] = {0, 32, 64, 18, 48}; static const s16 sUnknown_083FD7F2[2] = {8, -8}; -static const TransitionState sPhase2_Transition5_Funcs[] = +static const TransitionState sPhase2_Transition_Clockwise_BlackFade_Funcs[] = { - &Phase2_Transition5_Func1, - &Phase2_Transition5_Func2, - &Phase2_Transition5_Func3, - &Phase2_Transition5_Func4, - &Phase2_Transition5_Func5, - &Phase2_Transition5_Func6, - &Phase2_Transition5_Func7 + Phase2_Transition_Clockwise_BlackFade_Func1, + Phase2_Transition_Clockwise_BlackFade_Func2, + Phase2_Transition_Clockwise_BlackFade_Func3, + Phase2_Transition_Clockwise_BlackFade_Func4, + Phase2_Transition_Clockwise_BlackFade_Func5, + Phase2_Transition_Clockwise_BlackFade_Func6, + Phase2_Transition_Clockwise_BlackFade_Func7 }; -static const TransitionState sPhase2_Transition6_Funcs[] = +static const TransitionState sPhase2_Transition_Ripple_Funcs[] = { - &Phase2_Transition6_Func1, - &Phase2_Transition6_Func2 + Phase2_Transition_Ripple_Func1, + Phase2_Transition_Ripple_Func2 }; -static const TransitionState sPhase2_Transition7_Funcs[] = +static const TransitionState sPhase2_Transition_Wave_Funcs[] = { - &Phase2_Transition7_Func1, - &Phase2_Transition7_Func2, - &Phase2_Transition7_Func3 + Phase2_Transition_Wave_Func1, + Phase2_Transition_Wave_Func2, + Phase2_Transition_Wave_Func3 }; static const TransitionState sPhase2_Mugshot_Transition_Funcs[] = { - &Phase2_Mugshot_Func1, - &Phase2_Mugshot_Func2, - &Phase2_Mugshot_Func3, - &Phase2_Mugshot_Func4, - &Phase2_Mugshot_Func5, - &Phase2_Mugshot_Func6, - &Phase2_Mugshot_Func7, - &Phase2_Mugshot_Func8, - &Phase2_Mugshot_Func9, - &Phase2_Mugshot_Func10 + Phase2_Mugshot_Func1, + Phase2_Mugshot_Func2, + Phase2_Mugshot_Func3, + Phase2_Mugshot_Func4, + Phase2_Mugshot_Func5, + Phase2_Mugshot_Func6, + Phase2_Mugshot_Func7, + Phase2_Mugshot_Func8, + Phase2_Mugshot_Func9, + Phase2_Mugshot_Func10 }; static const u8 sMugshotsTrainerPicIDsTable[MUGSHOTS_NO] = {TRAINER_PIC_SIDNEY, TRAINER_PIC_PHOEBE, TRAINER_PIC_GLACIA, TRAINER_PIC_DRAKE, TRAINER_PIC_STEVEN}; @@ -319,50 +319,50 @@ static const s16 sMugshotsOpponentCoords[MUGSHOTS_NO][2] = static const TransitionSpriteCallback sUnknown_083FD880[] = { - &sub_811C934, - &sub_811C938, - &sub_811C984, - &sub_811C9B8, - &sub_811C934, - &sub_811C9E4, - &sub_811C934 + sub_811C934, + sub_811C938, + sub_811C984, + sub_811C9B8, + sub_811C934, + sub_811C9E4, + sub_811C934 }; static const s16 sUnknown_083FD89C[2] = {12, -12}; static const s16 sUnknown_083FD8A0[2] = {-1, 1}; -static const TransitionState sPhase2_Transition8_Funcs[] = +static const TransitionState sPhase2_Transition_Slice_Funcs[] = { - &Phase2_Transition8_Func1, - &Phase2_Transition8_Func2, - &Phase2_Transition8_Func3 + Phase2_Transition_Slice_Func1, + Phase2_Transition_Slice_Func2, + Phase2_Transition_Slice_Func3 }; -static const TransitionState sPhase2_Transition9_Funcs[] = +static const TransitionState sPhase2_Transition_WhiteFade_Funcs[] = { - &Phase2_Transition9_Func1, - &Phase2_Transition9_Func2, - &Phase2_Transition9_Func3, - &Phase2_Transition9_Func4, - &Phase2_Transition9_Func5 + Phase2_Transition_WhiteFade_Func1, + Phase2_Transition_WhiteFade_Func2, + Phase2_Transition_WhiteFade_Func3, + Phase2_Transition_WhiteFade_Func4, + Phase2_Transition_WhiteFade_Func5 }; static const s16 sUnknown_083FD8C4[8] = {0, 20, 15, 40, 10, 25, 35, 5}; -static const TransitionState sPhase2_Transition10_Funcs[] = +static const TransitionState sPhase2_Transition_GridSquares_Funcs[] = { - &Phase2_Transition10_Func1, - &Phase2_Transition10_Func2, - &Phase2_Transition10_Func3 + Phase2_Transition_GridSquares_Func1, + Phase2_Transition_GridSquares_Func2, + Phase2_Transition_GridSquares_Func3 }; -static const TransitionState sPhase2_Transition11_Funcs[] = +static const TransitionState sPhase2_Transition_Shards_Funcs[] = { - &Phase2_Transition11_Func1, - &Phase2_Transition11_Func2, - &Phase2_Transition11_Func3, - &Phase2_Transition11_Func4, - &Phase2_Transition11_Func5 + Phase2_Transition_Shards_Func1, + Phase2_Transition_Shards_Func2, + Phase2_Transition_Shards_Func3, + Phase2_Transition_Shards_Func4, + Phase2_Transition_Shards_Func5 }; static const s16 sUnknown_083FD8F4[][5] = @@ -380,8 +380,8 @@ static const s16 sUnknown_083FD93A[] = {8, 4, 2, 1, 1, 1, 0}; static const TransitionState sPhase1_TransitionAll_Funcs[] = { - &Phase1_TransitionAll_Func1, - &Phase1_TransitionAll_Func2 + Phase1_TransitionAll_Func1, + Phase1_TransitionAll_Func2 }; static const struct SpriteFrameImage sSpriteImageTable_83FD950[] = @@ -622,12 +622,12 @@ static void Phase1Task_TransitionAll(u8 taskID) DestroyTask(taskID); } -static void Phase2Task_Transition0(u8 taskID) +static void Phase2Task_Transition_Blur(u8 taskID) { - while (sPhase2_Transition0_Funcs[gTasks[taskID].tState](&gTasks[taskID])); + while (sPhase2_Transition_Blur_Funcs[gTasks[taskID].tState](&gTasks[taskID])); } -static bool8 Phase2_Transition0_Func1(struct Task* task) +static bool8 Phase2_Transition_Blur_Func1(struct Task* task) { REG_MOSAIC = 0; REG_BG1CNT |= 0x40; @@ -637,7 +637,7 @@ static bool8 Phase2_Transition0_Func1(struct Task* task) return TRUE; } -static bool8 Phase2_Transition0_Func2(struct Task* task) +static bool8 Phase2_Transition_Blur_Func2(struct Task* task) { if (task->data[1] != 0) task->data[1]--; @@ -653,22 +653,22 @@ static bool8 Phase2_Transition0_Func2(struct Task* task) return FALSE; } -static bool8 Phase2_Transition0_Func3(struct Task* task) +static bool8 Phase2_Transition_Blur_Func3(struct Task* task) { if (!gPaletteFade.active) { - u8 taskID = FindTaskIdByFunc(Phase2Task_Transition0); + u8 taskID = FindTaskIdByFunc(Phase2Task_Transition_Blur); DestroyTask(taskID); } return FALSE; } -static void Phase2Task_Transition1(u8 taskID) +static void Phase2Task_Transition_Swirl(u8 taskID) { - while (sPhase2_Transition1_Funcs[gTasks[taskID].tState](&gTasks[taskID])); + while (sPhase2_Transition_Swirl_Funcs[gTasks[taskID].tState](&gTasks[taskID])); } -static bool8 Phase2_Transition1_Func1(struct Task* task) +static bool8 Phase2_Transition_Swirl_Func1(struct Task* task) { u16 savedIME; @@ -677,8 +677,8 @@ static bool8 Phase2_Transition1_Func1(struct Task* task) BeginNormalPaletteFade(-1, 4, 0, 0x10, 0); sub_811D6E8(gUnknown_03005560, TRANSITION_STRUCT.field_14, 0, 2, 0, 160); - SetVBlankCallback(VBlankCB_Phase2_Transition1); - SetHBlankCallback(HBlankCB_Phase2_Transition1); + SetVBlankCallback(VBlankCB_Phase2_Transition_Swirl); + SetHBlankCallback(HBlankCB_Phase2_Transition_Swirl); savedIME = REG_IME; REG_IME = 0; @@ -690,7 +690,7 @@ static bool8 Phase2_Transition1_Func1(struct Task* task) return FALSE; } -static bool8 Phase2_Transition1_Func2(struct Task* task) +static bool8 Phase2_Transition_Swirl_Func2(struct Task* task) { TRANSITION_STRUCT.VBlank_DMA = 0; task->data[1] += 4; @@ -700,7 +700,7 @@ static bool8 Phase2_Transition1_Func2(struct Task* task) if (!gPaletteFade.active) { - u8 taskID = FindTaskIdByFunc(Phase2Task_Transition1); + u8 taskID = FindTaskIdByFunc(Phase2Task_Transition_Swirl); DestroyTask(taskID); } @@ -708,14 +708,14 @@ static bool8 Phase2_Transition1_Func2(struct Task* task) return FALSE; } -static void VBlankCB_Phase2_Transition1(void) +static void VBlankCB_Phase2_Transition_Swirl(void) { VBlankCB_BattleTransition(); if (TRANSITION_STRUCT.VBlank_DMA) DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320); } -static void HBlankCB_Phase2_Transition1(void) +static void HBlankCB_Phase2_Transition_Swirl(void) { u16 var = gUnknown_03004DE0[1][REG_VCOUNT]; REG_BG1HOFS = var; @@ -723,12 +723,12 @@ static void HBlankCB_Phase2_Transition1(void) REG_BG3HOFS = var; } -static void Phase2Task_Transition2(u8 taskID) +static void Phase2Task_Transition_Shuffle(u8 taskID) { - while (sPhase2_Transition2_Funcs[gTasks[taskID].tState](&gTasks[taskID])); + while (sPhase2_Transition_Shuffle_Funcs[gTasks[taskID].tState](&gTasks[taskID])); } -static bool8 Phase2_Transition2_Func1(struct Task* task) +static bool8 Phase2_Transition_Shuffle_Func1(struct Task* task) { u16 savedIME; @@ -738,8 +738,8 @@ static bool8 Phase2_Transition2_Func1(struct Task* task) BeginNormalPaletteFade(-1, 4, 0, 0x10, 0); memset(gUnknown_03005560, TRANSITION_STRUCT.field_16, 0x140); - SetVBlankCallback(VBlankCB_Phase2_Transition2); - SetHBlankCallback(HBlankCB_Phase2_Transition2); + SetVBlankCallback(VBlankCB_Phase2_Transition_Shuffle); + SetHBlankCallback(HBlankCB_Phase2_Transition_Shuffle); savedIME = REG_IME; REG_IME = 0; @@ -751,7 +751,7 @@ static bool8 Phase2_Transition2_Func1(struct Task* task) return FALSE; } -static bool8 Phase2_Transition2_Func2(struct Task* task) +static bool8 Phase2_Transition_Shuffle_Func2(struct Task* task) { u8 i; u16 r3, r4; @@ -769,20 +769,20 @@ static bool8 Phase2_Transition2_Func2(struct Task* task) } if (!gPaletteFade.active) - DestroyTask(FindTaskIdByFunc(Phase2Task_Transition2)); + DestroyTask(FindTaskIdByFunc(Phase2Task_Transition_Shuffle)); TRANSITION_STRUCT.VBlank_DMA++; return FALSE; } -static void VBlankCB_Phase2_Transition2(void) +static void VBlankCB_Phase2_Transition_Shuffle(void) { VBlankCB_BattleTransition(); if (TRANSITION_STRUCT.VBlank_DMA) DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320); } -static void HBlankCB_Phase2_Transition2(void) +static void HBlankCB_Phase2_Transition_Shuffle(void) { u16 var = gUnknown_03004DE0[1][REG_VCOUNT]; REG_BG1VOFS = var; @@ -790,12 +790,12 @@ static void HBlankCB_Phase2_Transition2(void) REG_BG3VOFS = var; } -static void Phase2Task_Transition3(u8 taskID) +static void Phase2Task_Transition_BigPokeball(u8 taskID) { - while (sPhase2_Transition3_Funcs[gTasks[taskID].tState](&gTasks[taskID])); + while (sPhase2_Transition_BigPokeball_Funcs[gTasks[taskID].tState](&gTasks[taskID])); } -static bool8 Phase2_Transition3_Func1(struct Task* task) +static bool8 Phase2_Transition_BigPokeball_Func1(struct Task* task) { u16 i; u16 *dst1, *dst2; @@ -819,7 +819,7 @@ static bool8 Phase2_Transition3_Func1(struct Task* task) gUnknown_03005560[i] = 240; } - SetVBlankCallback(VBlankCB0_Phase2_Transition3); + SetVBlankCallback(VBlankCB0_Phase2_Transition_BigPokeball); sub_811D6A8(&dst1, & dst2); CpuFill16(0, dst1, 0x800); @@ -830,7 +830,7 @@ static bool8 Phase2_Transition3_Func1(struct Task* task) return FALSE; } -static bool8 Phase2_Transition3_Func2(struct Task* task) +static bool8 Phase2_Transition_BigPokeball_Func2(struct Task* task) { s16 i, j; u16 *dst1, *dst2; @@ -851,7 +851,7 @@ static bool8 Phase2_Transition3_Func2(struct Task* task) return TRUE; } -static bool8 Phase2_Transition3_Func3(struct Task* task) +static bool8 Phase2_Transition_BigPokeball_Func3(struct Task* task) { TRANSITION_STRUCT.VBlank_DMA = 0; if (task->data[3] == 0 || --task->data[3] == 0) @@ -871,7 +871,7 @@ static bool8 Phase2_Transition3_Func3(struct Task* task) return FALSE; } -static bool8 Phase2_Transition3_Func4(struct Task* task) +static bool8 Phase2_Transition_BigPokeball_Func4(struct Task* task) { TRANSITION_STRUCT.VBlank_DMA = 0; if (task->data[3] == 0 || --task->data[3] == 0) @@ -891,7 +891,7 @@ static bool8 Phase2_Transition3_Func4(struct Task* task) return FALSE; } -static bool8 Phase2_Transition3_Func5(struct Task* task) +static bool8 Phase2_Transition_BigPokeball_Func5(struct Task* task) { TRANSITION_STRUCT.VBlank_DMA = 0; task->data[4] += 8; @@ -911,7 +911,7 @@ static bool8 Phase2_Transition3_Func5(struct Task* task) return FALSE; } -static bool8 Phase2_Transition3_Func6(struct Task* task) +static bool8 Phase2_Transition_BigPokeball_Func6(struct Task* task) { TRANSITION_STRUCT.VBlank_DMA = 0; if (task->data[2] < 1024) @@ -927,19 +927,19 @@ static bool8 Phase2_Transition3_Func6(struct Task* task) { DmaStop(0); sub_811D6D4(); - DestroyTask(FindTaskIdByFunc(Phase2Task_Transition3)); + DestroyTask(FindTaskIdByFunc(Phase2Task_Transition_BigPokeball)); } if (task->data[3] == 0) { task->data[3]++; - SetVBlankCallback(VBlankCB1_Phase2_Transition3); + SetVBlankCallback(VBlankCB1_Phase2_Transition_BigPokeball); } TRANSITION_STRUCT.VBlank_DMA++; return FALSE; } -static void Transition3_Vblank(void) +static void Transition_BigPokeball_Vblank(void) { DmaStop(0); VBlankCB_BattleTransition(); @@ -952,24 +952,24 @@ static void Transition3_Vblank(void) REG_BLDALPHA = TRANSITION_STRUCT.BLDALPHA; } -static void VBlankCB0_Phase2_Transition3(void) +static void VBlankCB0_Phase2_Transition_BigPokeball(void) { - Transition3_Vblank(); + Transition_BigPokeball_Vblank(); DmaSet(0, gUnknown_03005560, ®_BG0HOFS, 0xA2400001); } -static void VBlankCB1_Phase2_Transition3(void) +static void VBlankCB1_Phase2_Transition_BigPokeball(void) { - Transition3_Vblank(); + Transition_BigPokeball_Vblank(); DmaSet(0, gUnknown_03005560, ®_WIN0H, 0xA2400001); } -static void Phase2Task_Transition4(u8 taskID) +static void Phase2Task_Transition_PokeballsTrail(u8 taskID) { - while (sPhase2_Transition4_Funcs[gTasks[taskID].tState](&gTasks[taskID])); + while (sPhase2_Transition_PokeballsTrail_Funcs[gTasks[taskID].tState](&gTasks[taskID])); } -static bool8 Phase2_Transition4_Func1(struct Task* task) +static bool8 Phase2_Transition_PokeballsTrail_Func1(struct Task* task) { u16 *dst1, *dst2; @@ -982,7 +982,7 @@ static bool8 Phase2_Transition4_Func1(struct Task* task) return FALSE; } -static bool8 Phase2_Transition4_Func2(struct Task* task) +static bool8 Phase2_Transition_PokeballsTrail_Func2(struct Task* task) { s16 i; s16 rand; @@ -1005,12 +1005,12 @@ static bool8 Phase2_Transition4_Func2(struct Task* task) return FALSE; } -static bool8 Phase2_Transition4_Func3(struct Task* task) +static bool8 Phase2_Transition_PokeballsTrail_Func3(struct Task* task) { if (!FieldEffectActiveListContains(FLDEFF_POKEBALL)) { sub_811D6D4(); - DestroyTask(FindTaskIdByFunc(Phase2Task_Transition4)); + DestroyTask(FindTaskIdByFunc(Phase2Task_Transition_PokeballsTrail)); } return FALSE; } @@ -1069,12 +1069,12 @@ static void sub_811B720(struct Sprite* sprite) } } -static void Phase2Task_Transition5(u8 taskID) +static void Phase2Task_Transition_Clockwise_BlackFade(u8 taskID) { - while (sPhase2_Transition5_Funcs[gTasks[taskID].tState](&gTasks[taskID])); + while (sPhase2_Transition_Clockwise_BlackFade_Funcs[gTasks[taskID].tState](&gTasks[taskID])); } -static bool8 Phase2_Transition5_Func1(struct Task* task) +static bool8 Phase2_Transition_Clockwise_BlackFade_Func1(struct Task* task) { u16 i; @@ -1091,14 +1091,14 @@ static bool8 Phase2_Transition5_Func1(struct Task* task) gUnknown_03005560[i] = 0xF3F4; } - SetVBlankCallback(VBlankCB_Phase2_Transition5); + SetVBlankCallback(VBlankCB_Phase2_Transition_Clockwise_BlackFade); TRANSITION_STRUCT.data[4] = 120; task->tState++; return TRUE; } -static bool8 Phase2_Transition5_Func2(struct Task* task) +static bool8 Phase2_Transition_Clockwise_BlackFade_Func2(struct Task* task) { TRANSITION_STRUCT.VBlank_DMA = 0; @@ -1119,7 +1119,7 @@ static bool8 Phase2_Transition5_Func2(struct Task* task) return FALSE; } -static bool8 Phase2_Transition5_Func3(struct Task* task) +static bool8 Phase2_Transition_Clockwise_BlackFade_Func3(struct Task* task) { s16 r1, r3; vu8 var = 0; @@ -1157,7 +1157,7 @@ static bool8 Phase2_Transition5_Func3(struct Task* task) return FALSE; } -static bool8 Phase2_Transition5_Func4(struct Task* task) +static bool8 Phase2_Transition_Clockwise_BlackFade_Func4(struct Task* task) { TRANSITION_STRUCT.VBlank_DMA = 0; @@ -1178,7 +1178,7 @@ static bool8 Phase2_Transition5_Func4(struct Task* task) return FALSE; } -static bool8 Phase2_Transition5_Func5(struct Task* task) +static bool8 Phase2_Transition_Clockwise_BlackFade_Func5(struct Task* task) { s16 r1, r2, r3; vu8 var = 0; @@ -1217,7 +1217,7 @@ static bool8 Phase2_Transition5_Func5(struct Task* task) return FALSE; } -static bool8 Phase2_Transition5_Func6(struct Task* task) +static bool8 Phase2_Transition_Clockwise_BlackFade_Func6(struct Task* task) { TRANSITION_STRUCT.VBlank_DMA = 0; @@ -1241,15 +1241,15 @@ static bool8 Phase2_Transition5_Func6(struct Task* task) return FALSE; } -static bool8 Phase2_Transition5_Func7(struct Task* task) +static bool8 Phase2_Transition_Clockwise_BlackFade_Func7(struct Task* task) { DmaStop(0); sub_811D6D4(); - DestroyTask(FindTaskIdByFunc(Phase2Task_Transition5)); + DestroyTask(FindTaskIdByFunc(Phase2Task_Transition_Clockwise_BlackFade)); return FALSE; } -static void VBlankCB_Phase2_Transition5(void) +static void VBlankCB_Phase2_Transition_Clockwise_BlackFade(void) { DmaStop(0); VBlankCB_BattleTransition(); @@ -1262,12 +1262,12 @@ static void VBlankCB_Phase2_Transition5(void) DmaSet(0, gUnknown_03004DE0[1], ®_WIN0H, 0xA2400001); } -static void Phase2Task_Transition6(u8 taskID) +static void Phase2Task_Transition_Ripple(u8 taskID) { - while (sPhase2_Transition6_Funcs[gTasks[taskID].tState](&gTasks[taskID])); + while (sPhase2_Transition_Ripple_Funcs[gTasks[taskID].tState](&gTasks[taskID])); } -static bool8 Phase2_Transition6_Func1(struct Task* task) +static bool8 Phase2_Transition_Ripple_Func1(struct Task* task) { u8 i; @@ -1279,8 +1279,8 @@ static bool8 Phase2_Transition6_Func1(struct Task* task) gUnknown_03005560[i] = TRANSITION_STRUCT.field_16; } - SetVBlankCallback(VBlankCB_Phase2_Transition6); - SetHBlankCallback(HBlankCB_Phase2_Transition6); + SetVBlankCallback(VBlankCB_Phase2_Transition_Ripple); + SetHBlankCallback(HBlankCB_Phase2_Transition_Ripple); REG_IE |= 2; REG_DISPSTAT |= 0x10; @@ -1289,7 +1289,7 @@ static bool8 Phase2_Transition6_Func1(struct Task* task) return TRUE; } -static bool8 Phase2_Transition6_Func2(struct Task* task) +static bool8 Phase2_Transition_Ripple_Func2(struct Task* task) { u8 i; s16 r3; @@ -1320,20 +1320,20 @@ static bool8 Phase2_Transition6_Func2(struct Task* task) } if (task->data[4] != 0 && !gPaletteFade.active) - DestroyTask(FindTaskIdByFunc(Phase2Task_Transition6)); + DestroyTask(FindTaskIdByFunc(Phase2Task_Transition_Ripple)); TRANSITION_STRUCT.VBlank_DMA++; return FALSE; } -static void VBlankCB_Phase2_Transition6(void) +static void VBlankCB_Phase2_Transition_Ripple(void) { VBlankCB_BattleTransition(); if (TRANSITION_STRUCT.VBlank_DMA) DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320); } -static void HBlankCB_Phase2_Transition6(void) +static void HBlankCB_Phase2_Transition_Ripple(void) { u16 var = gUnknown_03004DE0[1][REG_VCOUNT]; REG_BG1VOFS = var; @@ -1341,12 +1341,12 @@ static void HBlankCB_Phase2_Transition6(void) REG_BG3VOFS = var; } -static void Phase2Task_Transition7(u8 taskID) +static void Phase2Task_Transition_Wave(u8 taskID) { - while (sPhase2_Transition7_Funcs[gTasks[taskID].tState](&gTasks[taskID])); + while (sPhase2_Transition_Wave_Funcs[gTasks[taskID].tState](&gTasks[taskID])); } -static bool8 Phase2_Transition7_Func1(struct Task* task) +static bool8 Phase2_Transition_Wave_Func1(struct Task* task) { u8 i; @@ -1363,13 +1363,13 @@ static bool8 Phase2_Transition7_Func1(struct Task* task) gUnknown_03004DE0[1][i] = 242; } - SetVBlankCallback(VBlankCB_Phase2_Transition7); + SetVBlankCallback(VBlankCB_Phase2_Transition_Wave); task->tState++; return TRUE; } -static bool8 Phase2_Transition7_Func2(struct Task* task) +static bool8 Phase2_Transition_Wave_Func2(struct Task* task) { u8 i, r5; u16* toStore; @@ -1399,15 +1399,15 @@ static bool8 Phase2_Transition7_Func2(struct Task* task) return FALSE; } -static bool8 Phase2_Transition7_Func3(struct Task* task) +static bool8 Phase2_Transition_Wave_Func3(struct Task* task) { DmaStop(0); sub_811D6D4(); - DestroyTask(FindTaskIdByFunc(Phase2Task_Transition7)); + DestroyTask(FindTaskIdByFunc(Phase2Task_Transition_Wave)); return FALSE; } -static void VBlankCB_Phase2_Transition7(void) +static void VBlankCB_Phase2_Transition_Wave(void) { DmaStop(0); VBlankCB_BattleTransition(); @@ -1837,12 +1837,12 @@ static s16 sub_811CA44(s16 spriteID) #undef tMugshotPlayerID #undef tMugshotID -static void Phase2Task_Transition8(u8 taskID) +static void Phase2Task_Transition_Slice(u8 taskID) { - while (sPhase2_Transition8_Funcs[gTasks[taskID].tState](&gTasks[taskID])); + while (sPhase2_Transition_Slice_Funcs[gTasks[taskID].tState](&gTasks[taskID])); } -static bool8 Phase2_Transition8_Func1(struct Task* task) +static bool8 Phase2_Transition_Slice_Func1(struct Task* task) { u16 i; @@ -1864,14 +1864,14 @@ static bool8 Phase2_Transition8_Func1(struct Task* task) REG_IE |= 2; REG_DISPSTAT |= 0x10; - SetVBlankCallback(VBlankCB_Phase2_Transition8); - SetHBlankCallback(HBlankCB_Phase2_Transition8); + SetVBlankCallback(VBlankCB_Phase2_Transition_Slice); + SetHBlankCallback(HBlankCB_Phase2_Transition_Slice); task->tState++; return TRUE; } -static bool8 Phase2_Transition8_Func2(struct Task* task) +static bool8 Phase2_Transition_Slice_Func2(struct Task* task) { u16 i; @@ -1908,15 +1908,15 @@ static bool8 Phase2_Transition8_Func2(struct Task* task) return FALSE; } -static bool8 Phase2_Transition8_Func3(struct Task* task) +static bool8 Phase2_Transition_Slice_Func3(struct Task* task) { DmaStop(0); sub_811D6D4(); - DestroyTask(FindTaskIdByFunc(Phase2Task_Transition8)); + DestroyTask(FindTaskIdByFunc(Phase2Task_Transition_Slice)); return FALSE; } -static void VBlankCB_Phase2_Transition8(void) +static void VBlankCB_Phase2_Transition_Slice(void) { DmaStop(0); VBlankCB_BattleTransition(); @@ -1928,7 +1928,7 @@ static void VBlankCB_Phase2_Transition8(void) DmaSet(0, &gUnknown_03004DE0[1][160], ®_WIN0H, 0xA2400001); } -static void HBlankCB_Phase2_Transition8(void) +static void HBlankCB_Phase2_Transition_Slice(void) { u16 var = gUnknown_03004DE0[1][REG_VCOUNT]; REG_BG1HOFS = var; @@ -1936,12 +1936,12 @@ static void HBlankCB_Phase2_Transition8(void) REG_BG3HOFS = var; } -static void Phase2Task_Transition9(u8 taskID) +static void Phase2Task_Transition_WhiteFade(u8 taskID) { - while (sPhase2_Transition9_Funcs[gTasks[taskID].tState](&gTasks[taskID])); + while (sPhase2_Transition_WhiteFade_Funcs[gTasks[taskID].tState](&gTasks[taskID])); } -static bool8 Phase2_Transition9_Func1(struct Task* task) +static bool8 Phase2_Transition_WhiteFade_Func1(struct Task* task) { u16 i; @@ -1963,14 +1963,14 @@ static bool8 Phase2_Transition9_Func1(struct Task* task) REG_IE |= 2; REG_DISPSTAT |= 0x10; - SetHBlankCallback(HBlankCB_Phase2_Transition9); - SetVBlankCallback(VBlankCB0_Phase2_Transition9); + SetHBlankCallback(HBlankCB_Phase2_Transition_WhiteFade); + SetVBlankCallback(VBlankCB0_Phase2_Transition_WhiteFade); task->tState++; return FALSE; } -static bool8 Phase2_Transition9_Func2(struct Task* task) +static bool8 Phase2_Transition_WhiteFade_Func2(struct Task* task) { s16 i, posY; s16 arr1[8]; @@ -1990,7 +1990,7 @@ static bool8 Phase2_Transition9_Func2(struct Task* task) return FALSE; } -static bool8 Phase2_Transition9_Func3(struct Task* task) +static bool8 Phase2_Transition_WhiteFade_Func3(struct Task* task) { TRANSITION_STRUCT.VBlank_DMA = 0; if (TRANSITION_STRUCT.field_20 > 7) @@ -2001,7 +2001,7 @@ static bool8 Phase2_Transition9_Func3(struct Task* task) return FALSE; } -static bool8 Phase2_Transition9_Func4(struct Task* task) +static bool8 Phase2_Transition_WhiteFade_Func4(struct Task* task) { TRANSITION_STRUCT.VBlank_DMA = 0; @@ -2014,23 +2014,23 @@ static bool8 Phase2_Transition9_Func4(struct Task* task) TRANSITION_STRUCT.BLDCNT = 0xFF; TRANSITION_STRUCT.WININ = 0x3F; - SetVBlankCallback(VBlankCB1_Phase2_Transition9); + SetVBlankCallback(VBlankCB1_Phase2_Transition_WhiteFade); task->tState++; return FALSE; } -static bool8 Phase2_Transition9_Func5(struct Task* task) +static bool8 Phase2_Transition_WhiteFade_Func5(struct Task* task) { if (++TRANSITION_STRUCT.BLDY > 16) { sub_811D6D4(); - DestroyTask(FindTaskIdByFunc(Phase2Task_Transition9)); + DestroyTask(FindTaskIdByFunc(Phase2Task_Transition_WhiteFade)); } return FALSE; } -static void VBlankCB0_Phase2_Transition9(void) +static void VBlankCB0_Phase2_Transition_WhiteFade(void) { DmaStop(0); VBlankCB_BattleTransition(); @@ -2043,7 +2043,7 @@ static void VBlankCB0_Phase2_Transition9(void) DmaSet(0, &gUnknown_03004DE0[1][160], ®_WIN0H, 0xA2400001); } -static void VBlankCB1_Phase2_Transition9(void) +static void VBlankCB1_Phase2_Transition_WhiteFade(void) { VBlankCB_BattleTransition(); REG_BLDY = TRANSITION_STRUCT.BLDY; @@ -2054,7 +2054,7 @@ static void VBlankCB1_Phase2_Transition9(void) REG_WIN0V = TRANSITION_STRUCT.WIN0V; } -static void HBlankCB_Phase2_Transition9(void) +static void HBlankCB_Phase2_Transition_WhiteFade(void) { REG_BLDY = gUnknown_03004DE0[1][REG_VCOUNT]; } @@ -2102,12 +2102,12 @@ static void sub_811CFD0(struct Sprite* sprite) } } -static void Phase2Task_Transition10(u8 taskID) +static void Phase2Task_Transition_GridSquares(u8 taskID) { - while (sPhase2_Transition10_Funcs[gTasks[taskID].tState](&gTasks[taskID])); + while (sPhase2_Transition_GridSquares_Funcs[gTasks[taskID].tState](&gTasks[taskID])); } -static bool8 Phase2_Transition10_Func1(struct Task* task) +static bool8 Phase2_Transition_GridSquares_Func1(struct Task* task) { u16 *dst1, *dst2; @@ -2120,7 +2120,7 @@ static bool8 Phase2_Transition10_Func1(struct Task* task) return FALSE; } -static bool8 Phase2_Transition10_Func2(struct Task* task) +static bool8 Phase2_Transition_GridSquares_Func2(struct Task* task) { u16* dst1; @@ -2141,22 +2141,22 @@ static bool8 Phase2_Transition10_Func2(struct Task* task) return FALSE; } -static bool8 Phase2_Transition10_Func3(struct Task* task) +static bool8 Phase2_Transition_GridSquares_Func3(struct Task* task) { if (--task->data[1] == 0) { sub_811D6D4(); - DestroyTask(FindTaskIdByFunc(Phase2Task_Transition10)); + DestroyTask(FindTaskIdByFunc(Phase2Task_Transition_GridSquares)); } return FALSE; } -static void Phase2Task_Transition11(u8 taskID) +static void Phase2Task_Transition_Shards(u8 taskID) { - while (sPhase2_Transition11_Funcs[gTasks[taskID].tState](&gTasks[taskID])); + while (sPhase2_Transition_Shards_Funcs[gTasks[taskID].tState](&gTasks[taskID])); } -static bool8 Phase2_Transition11_Func1(struct Task* task) +static bool8 Phase2_Transition_Shards_Func1(struct Task* task) { u16 i; @@ -2173,13 +2173,13 @@ static bool8 Phase2_Transition11_Func1(struct Task* task) } CpuSet(gUnknown_03004DE0[0], gUnknown_03004DE0[1], 0xA0); - SetVBlankCallback(VBlankCB_Phase2_Transition11); + SetVBlankCallback(VBlankCB_Phase2_Transition_Shards); task->tState++; return TRUE; } -static bool8 Phase2_Transition11_Func2(struct Task* task) +static bool8 Phase2_Transition_Shards_Func2(struct Task* task) { sub_811D8FC(TRANSITION_STRUCT.data, sUnknown_083FD8F4[task->data[1]][0], @@ -2192,7 +2192,7 @@ static bool8 Phase2_Transition11_Func2(struct Task* task) return TRUE; } -static bool8 Phase2_Transition11_Func3(struct Task* task) +static bool8 Phase2_Transition_Shards_Func3(struct Task* task) { s16 i; bool8 nextFunc; @@ -2231,7 +2231,7 @@ static bool8 Phase2_Transition11_Func3(struct Task* task) return FALSE; } -static bool8 Phase2_Transition11_Func4(struct Task* task) +static bool8 Phase2_Transition_Shards_Func4(struct Task* task) { if (++task->data[1] < 7) { @@ -2243,12 +2243,12 @@ static bool8 Phase2_Transition11_Func4(struct Task* task) { DmaStop(0); sub_811D6D4(); - DestroyTask(FindTaskIdByFunc(Phase2Task_Transition11)); + DestroyTask(FindTaskIdByFunc(Phase2Task_Transition_Shards)); return FALSE; } } -static bool8 Phase2_Transition11_Func5(struct Task* task) +static bool8 Phase2_Transition_Shards_Func5(struct Task* task) { if (--task->data[3] == 0) { @@ -2259,7 +2259,7 @@ static bool8 Phase2_Transition11_Func5(struct Task* task) return FALSE; } -static void VBlankCB_Phase2_Transition11(void) +static void VBlankCB_Phase2_Transition_Shards(void) { DmaStop(0); VBlankCB_BattleTransition(); -- cgit v1.2.3 From 4e90c1c63bf1a246d9f8defb452bdfa185868ed6 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 22 Aug 2017 22:33:25 +0200 Subject: tabs to spaces --- ld_script.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ld_script.txt b/ld_script.txt index c6a269bb2..b127887d2 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -197,7 +197,7 @@ SECTIONS { src/dewford_trend.o(.text); src/heal_location.o(.text); src/region_map.o(.text); - src/cute_sketch.o(.text); + src/cute_sketch.o(.text); asm/cute_sketch.o(.text); src/decoration.o(.text); asm/slot_machine.o(.text); -- cgit v1.2.3 From bfc4b338cbd3e78062c71ff6f72f821631277c1b Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Tue, 22 Aug 2017 17:34:42 -0500 Subject: rename some mauville man stuff --- asm/mauville_old_man.s | 6 +- data/mauville_old_man.s | 23 +- data/scripts/giddy.inc | 2 +- data/specials.inc | 2 +- include/easy_chat_constants.h | 1056 +++++++++++++++++++++++++++++++++++++++++ include/global.h | 52 +- include/mauville_old_man.h | 14 +- include/trader.h | 2 +- ld_script.txt | 1 + src/easy_chat.c | 1 - src/mauville_old_man.c | 179 ++++--- src/new_game.c | 2 +- src/trader.c | 19 +- 13 files changed, 1241 insertions(+), 118 deletions(-) create mode 100644 include/easy_chat_constants.h diff --git a/asm/mauville_old_man.s b/asm/mauville_old_man.s index 726de6fc1..9ba82f2be 100644 --- a/asm/mauville_old_man.s +++ b/asm/mauville_old_man.s @@ -824,8 +824,8 @@ sub_80F83D0: @ 80F83D0 _080F83F4: .4byte 0x00004010 thumb_func_end sub_80F83D0 - thumb_func_start sub_80F83F8 -sub_80F83F8: @ 80F83F8 + thumb_func_start StorytellerSetup +StorytellerSetup: @ 80F83F8 push {r4,lr} ldr r0, _080F8424 @ =gSaveBlock1 + 0x2D94 movs r2, 0 @@ -850,7 +850,7 @@ _080F840C: bx r0 .align 2, 0 _080F8424: .4byte gSaveBlock1 + 0x2D94 - thumb_func_end sub_80F83F8 + thumb_func_end StorytellerSetup thumb_func_start sub_80F8428 sub_80F8428: @ 80F8428 diff --git a/data/mauville_old_man.s b/data/mauville_old_man.s index 5c4bd47b9..f96963d2d 100644 --- a/data/mauville_old_man.s +++ b/data/mauville_old_man.s @@ -3,27 +3,8 @@ .section .rodata - .align 1 -gUnknown_083E537C:: @ 83E537C -.ifdef ENGLISH - ec_word SISTER - ec_word EATS - ec_word SWEETS - ec_word VORACIOUS - ec_word AND - ec_word DROOLING -.else - ec_word SISTER - ec_word MUST_BE - ec_word SWEETS - ec_word VORACIOUS - ec_word DROOLING - ec_word THICK -.endif - - .align 2 -gUnknown_083E5388:: @ 83E5388 +gGiddyAdjectives:: @ 83E5388 .4byte OtherText_SoPretty .4byte OtherText_SoDarling .4byte OtherText_SoRelaxed @@ -34,7 +15,7 @@ gUnknown_083E5388:: @ 83E5388 .4byte OtherText_SoMagical .align 2 -gUnknown_083E53A8:: @ 83E53A8 +gGiddyQuestions:: @ 83E53A8 .4byte OtherText_WantVacationNicePlace .4byte OtherText_BoughtCrayonsIsNice .4byte OtherText_IfWeCouldFloat diff --git a/data/scripts/giddy.inc b/data/scripts/giddy.inc index 263589fe9..bc7b1b8f1 100644 --- a/data/scripts/giddy.inc +++ b/data/scripts/giddy.inc @@ -30,7 +30,7 @@ MauvilleCity_PokemonCenter_1F_EventScript_1B0A40:: @ 81B0A40 end MauvilleCity_PokemonCenter_1F_EventScript_1B0A4E:: @ 81B0A4E - special sub_80F7CF4 + special ScrSpecial_GenerateGiddyLine special ShowFieldMessageStringVar4 waittext yesnobox 20, 8 diff --git a/data/specials.inc b/data/specials.inc index 0eb6b742d..e588a29d3 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -112,7 +112,7 @@ gSpecials:: def_special sub_80F7C90 def_special sub_80F7C54 def_special sub_80F83D0 - def_special sub_80F7CF4 + def_special ScrSpecial_GenerateGiddyLine def_special sub_80F7CC8 def_special sub_80F889C def_special sub_80F8888 diff --git a/include/easy_chat_constants.h b/include/easy_chat_constants.h new file mode 100644 index 000000000..e6dfcf460 --- /dev/null +++ b/include/easy_chat_constants.h @@ -0,0 +1,1056 @@ +#ifndef GUARD_EASY_CHAT_CONSTANTS +#define GUARD_EASY_CHAT_CONSTANTS + +#define EC_GROUP_POKEMON 0x0 +#define EC_GROUP_TRAINER 0x1 +#define EC_GROUP_STATUS 0x2 +#define EC_GROUP_BATTLE 0x3 +#define EC_GROUP_GREETINGS 0x4 +#define EC_GROUP_PEOPLE 0x5 +#define EC_GROUP_VOICES 0x6 +#define EC_GROUP_SPEECH 0x7 +#define EC_GROUP_ENDINGS 0x8 +#define EC_GROUP_FEELINGS 0x9 +#define EC_GROUP_CONDITIONS 0xa +#define EC_GROUP_ACTIONS 0xb +#define EC_GROUP_LIFESTYLE 0xc +#define EC_GROUP_HOBBIES 0xd +#define EC_GROUP_TIME 0xe +#define EC_GROUP_MISC 0xf +#define EC_GROUP_ADJECTIVES 0x10 +#define EC_GROUP_EVENTS 0x11 +#define EC_GROUP_MOVE_1 0x12 +#define EC_GROUP_MOVE_2 0x13 +#define EC_GROUP_TRENDY_SAYING 0x14 +#define EC_GROUP_POKEMON_2 0x15 + +// TRAINER +#define EC_WORD_I_CHOOSE_YOU (EC_GROUP_TRAINER << 9) | 0x0 +#define EC_WORD_GOTCHA (EC_GROUP_TRAINER << 9) | 0x1 +#define EC_WORD_TRADE (EC_GROUP_TRAINER << 9) | 0x2 +#define EC_WORD_SAPPHIRE (EC_GROUP_TRAINER << 9) | 0x3 +#define EC_WORD_EVOLVE (EC_GROUP_TRAINER << 9) | 0x4 +#define EC_WORD_ENCYCLOPEDIA (EC_GROUP_TRAINER << 9) | 0x5 +#define EC_WORD_NATURE (EC_GROUP_TRAINER << 9) | 0x6 +#define EC_WORD_CENTER (EC_GROUP_TRAINER << 9) | 0x7 +#define EC_WORD_EGG (EC_GROUP_TRAINER << 9) | 0x8 +#define EC_WORD_LINK (EC_GROUP_TRAINER << 9) | 0x9 +#define EC_WORD_SP_ABILITY (EC_GROUP_TRAINER << 9) | 0xa +#define EC_WORD_TRAINER (EC_GROUP_TRAINER << 9) | 0xb +#define EC_WORD_VERSION (EC_GROUP_TRAINER << 9) | 0xc +#define EC_WORD_POKENAV (EC_GROUP_TRAINER << 9) | 0xd +#define EC_WORD_POKEMON (EC_GROUP_TRAINER << 9) | 0xe +#define EC_WORD_GET (EC_GROUP_TRAINER << 9) | 0xf +#define EC_WORD_POKEDEX (EC_GROUP_TRAINER << 9) | 0x10 +#define EC_WORD_RUBY (EC_GROUP_TRAINER << 9) | 0x11 +#define EC_WORD_LEVEL (EC_GROUP_TRAINER << 9) | 0x12 + +// STATUS +#define EC_WORD_DARK (EC_GROUP_STATUS << 9) | 0x0 +#define EC_WORD_STENCH (EC_GROUP_STATUS << 9) | 0x1 +#define EC_WORD_THICK_FAT (EC_GROUP_STATUS << 9) | 0x2 +#define EC_WORD_RAIN_DISH (EC_GROUP_STATUS << 9) | 0x3 +#define EC_WORD_DRIZZLE (EC_GROUP_STATUS << 9) | 0x4 +#define EC_WORD_ARENA_TRAP (EC_GROUP_STATUS << 9) | 0x5 +#define EC_WORD_INTIMIDATE (EC_GROUP_STATUS << 9) | 0x6 +#define EC_WORD_ROCK_HEAD (EC_GROUP_STATUS << 9) | 0x7 +#define EC_WORD_COLOR (EC_GROUP_STATUS << 9) | 0x8 +#define EC_WORD_ALT_COLOR (EC_GROUP_STATUS << 9) | 0x9 +#define EC_WORD_ROCK (EC_GROUP_STATUS << 9) | 0xa +#define EC_WORD_BEAUTIFUL (EC_GROUP_STATUS << 9) | 0xb +#define EC_WORD_BEAUTY (EC_GROUP_STATUS << 9) | 0xc +#define EC_WORD_AIR_LOCK (EC_GROUP_STATUS << 9) | 0xd +#define EC_WORD_PSYCHIC (EC_GROUP_STATUS << 9) | 0xe +#define EC_WORD_HYPER_CUTTER (EC_GROUP_STATUS << 9) | 0xf +#define EC_WORD_FIGHTING (EC_GROUP_STATUS << 9) | 0x10 +#define EC_WORD_SHADOW_TAG (EC_GROUP_STATUS << 9) | 0x11 +#define EC_WORD_SMART (EC_GROUP_STATUS << 9) | 0x12 +#define EC_WORD_SMARTNESS (EC_GROUP_STATUS << 9) | 0x13 +#define EC_WORD_SPEED_BOOST (EC_GROUP_STATUS << 9) | 0x14 +#define EC_WORD_COOL (EC_GROUP_STATUS << 9) | 0x15 +#define EC_WORD_COOLNESS (EC_GROUP_STATUS << 9) | 0x16 +#define EC_WORD_BATTLE_ARMOR (EC_GROUP_STATUS << 9) | 0x17 +#define EC_WORD_CUTE (EC_GROUP_STATUS << 9) | 0x18 +#define EC_WORD_CUTENESS (EC_GROUP_STATUS << 9) | 0x19 +#define EC_WORD_STURDY (EC_GROUP_STATUS << 9) | 0x1a +#define EC_WORD_SUCTION_CUPS (EC_GROUP_STATUS << 9) | 0x1b +#define EC_WORD_GRASS (EC_GROUP_STATUS << 9) | 0x1c +#define EC_WORD_CLEAR_BODY (EC_GROUP_STATUS << 9) | 0x1d +#define EC_WORD_TORRENT (EC_GROUP_STATUS << 9) | 0x1e +#define EC_WORD_GHOST (EC_GROUP_STATUS << 9) | 0x1f +#define EC_WORD_ICE (EC_GROUP_STATUS << 9) | 0x20 +#define EC_WORD_GUTS (EC_GROUP_STATUS << 9) | 0x21 +#define EC_WORD_ROUGH_SKIN (EC_GROUP_STATUS << 9) | 0x22 +#define EC_WORD_SHELL_ARMOR (EC_GROUP_STATUS << 9) | 0x23 +#define EC_WORD_NATURAL_CURE (EC_GROUP_STATUS << 9) | 0x24 +#define EC_WORD_DAMP (EC_GROUP_STATUS << 9) | 0x25 +#define EC_WORD_GROUND (EC_GROUP_STATUS << 9) | 0x26 +#define EC_WORD_LIMBER (EC_GROUP_STATUS << 9) | 0x27 +#define EC_WORD_MAGNET_PULL (EC_GROUP_STATUS << 9) | 0x28 +#define EC_WORD_WHITE_SMOKE (EC_GROUP_STATUS << 9) | 0x29 +#define EC_WORD_SYNCHRONIZE (EC_GROUP_STATUS << 9) | 0x2a +#define EC_WORD_OVERGROW (EC_GROUP_STATUS << 9) | 0x2b +#define EC_WORD_SWIFT_SWIM (EC_GROUP_STATUS << 9) | 0x2c +#define EC_WORD_SAND_STREAM (EC_GROUP_STATUS << 9) | 0x2d +#define EC_WORD_SAND_VEIL (EC_GROUP_STATUS << 9) | 0x2e +#define EC_WORD_KEEN_EYE (EC_GROUP_STATUS << 9) | 0x2f +#define EC_WORD_INNER_FOCUS (EC_GROUP_STATUS << 9) | 0x30 +#define EC_WORD_STATIC (EC_GROUP_STATUS << 9) | 0x31 +#define EC_WORD_TYPE (EC_GROUP_STATUS << 9) | 0x32 +#define EC_WORD_TOUGH (EC_GROUP_STATUS << 9) | 0x33 +#define EC_WORD_TOUGHNESS (EC_GROUP_STATUS << 9) | 0x34 +#define EC_WORD_SHED_SKIN (EC_GROUP_STATUS << 9) | 0x35 +#define EC_WORD_HUGE_POWER (EC_GROUP_STATUS << 9) | 0x36 +#define EC_WORD_VOLT_ABSORB (EC_GROUP_STATUS << 9) | 0x37 +#define EC_WORD_WATER_ABSORB (EC_GROUP_STATUS << 9) | 0x38 +#define EC_WORD_ELECTRIC (EC_GROUP_STATUS << 9) | 0x39 +#define EC_WORD_FORECAST (EC_GROUP_STATUS << 9) | 0x3a +#define EC_WORD_SERENE_GRACE (EC_GROUP_STATUS << 9) | 0x3b +#define EC_WORD_POISON (EC_GROUP_STATUS << 9) | 0x3c +#define EC_WORD_POISON_POINT (EC_GROUP_STATUS << 9) | 0x3d +#define EC_WORD_DRAGON (EC_GROUP_STATUS << 9) | 0x3e +#define EC_WORD_TRACE (EC_GROUP_STATUS << 9) | 0x3f +#define EC_WORD_OBLIVIOUS (EC_GROUP_STATUS << 9) | 0x40 +#define EC_WORD_TRUANT (EC_GROUP_STATUS << 9) | 0x41 +#define EC_WORD_RUN_AWAY (EC_GROUP_STATUS << 9) | 0x42 +#define EC_WORD_STICKY_HOLD (EC_GROUP_STATUS << 9) | 0x43 +#define EC_WORD_CLOUD_NINE (EC_GROUP_STATUS << 9) | 0x44 +#define EC_WORD_NORMAL (EC_GROUP_STATUS << 9) | 0x45 +#define EC_WORD_STEEL (EC_GROUP_STATUS << 9) | 0x46 +#define EC_WORD_ILLUMINATE (EC_GROUP_STATUS << 9) | 0x47 +#define EC_WORD_EARLY_BIRD (EC_GROUP_STATUS << 9) | 0x48 +#define EC_WORD_HUSTLE (EC_GROUP_STATUS << 9) | 0x49 +#define EC_WORD_SHINE (EC_GROUP_STATUS << 9) | 0x4a +#define EC_WORD_FLYING (EC_GROUP_STATUS << 9) | 0x4b +#define EC_WORD_DROUGHT (EC_GROUP_STATUS << 9) | 0x4c +#define EC_WORD_LIGHTNINGROD (EC_GROUP_STATUS << 9) | 0x4d +#define EC_WORD_COMPOUNDEYES (EC_GROUP_STATUS << 9) | 0x4e +#define EC_WORD_MARVEL_SCALE (EC_GROUP_STATUS << 9) | 0x4f +#define EC_WORD_WONDER_GUARD (EC_GROUP_STATUS << 9) | 0x50 +#define EC_WORD_INSOMNIA (EC_GROUP_STATUS << 9) | 0x51 +#define EC_WORD_LEVITATE (EC_GROUP_STATUS << 9) | 0x52 +#define EC_WORD_PLUS (EC_GROUP_STATUS << 9) | 0x53 +#define EC_WORD_PRESSURE (EC_GROUP_STATUS << 9) | 0x54 +#define EC_WORD_LIQUID_OOZE (EC_GROUP_STATUS << 9) | 0x55 +#define EC_WORD_COLOR_CHANGE (EC_GROUP_STATUS << 9) | 0x56 +#define EC_WORD_SOUNDPROOF (EC_GROUP_STATUS << 9) | 0x57 +#define EC_WORD_EFFECT_SPORE (EC_GROUP_STATUS << 9) | 0x58 +#define EC_WORD_PKRS (EC_GROUP_STATUS << 9) | 0x59 +#define EC_WORD_FIRE (EC_GROUP_STATUS << 9) | 0x5a +#define EC_WORD_FLAME_BODY (EC_GROUP_STATUS << 9) | 0x5b +#define EC_WORD_MINUS (EC_GROUP_STATUS << 9) | 0x5c +#define EC_WORD_OWN_TEMPO (EC_GROUP_STATUS << 9) | 0x5d +#define EC_WORD_MAGMA_ARMOR (EC_GROUP_STATUS << 9) | 0x5e +#define EC_WORD_WATER (EC_GROUP_STATUS << 9) | 0x5f +#define EC_WORD_WATER_VEIL (EC_GROUP_STATUS << 9) | 0x60 +#define EC_WORD_BUG (EC_GROUP_STATUS << 9) | 0x61 +#define EC_WORD_SWARM (EC_GROUP_STATUS << 9) | 0x62 +#define EC_WORD_CUTE_CHARM (EC_GROUP_STATUS << 9) | 0x63 +#define EC_WORD_IMMUNITY (EC_GROUP_STATUS << 9) | 0x64 +#define EC_WORD_BLAZE (EC_GROUP_STATUS << 9) | 0x65 +#define EC_WORD_PICKUP (EC_GROUP_STATUS << 9) | 0x66 +#define EC_WORD_PATTERN (EC_GROUP_STATUS << 9) | 0x67 +#define EC_WORD_FLASH_FIRE (EC_GROUP_STATUS << 9) | 0x68 +#define EC_WORD_VITAL_SPIRIT (EC_GROUP_STATUS << 9) | 0x69 +#define EC_WORD_CHLOROPHYLL (EC_GROUP_STATUS << 9) | 0x6a +#define EC_WORD_PURE_POWER (EC_GROUP_STATUS << 9) | 0x6b +#define EC_WORD_SHIELD_DUST (EC_GROUP_STATUS << 9) | 0x6c + +// BATTLE +#define EC_WORD_MATCH_UP (EC_GROUP_BATTLE << 9) | 0x0 +#define EC_WORD_GO (EC_GROUP_BATTLE << 9) | 0x1 +#define EC_WORD_NO_1 (EC_GROUP_BATTLE << 9) | 0x2 +#define EC_WORD_DECIDE (EC_GROUP_BATTLE << 9) | 0x3 +#define EC_WORD_LET_ME_WIN (EC_GROUP_BATTLE << 9) | 0x4 +#define EC_WORD_WINS (EC_GROUP_BATTLE << 9) | 0x5 +#define EC_WORD_WIN (EC_GROUP_BATTLE << 9) | 0x6 +#define EC_WORD_WON (EC_GROUP_BATTLE << 9) | 0x7 +#define EC_WORD_IF_I_WIN (EC_GROUP_BATTLE << 9) | 0x8 +#define EC_WORD_WHEN_I_WIN (EC_GROUP_BATTLE << 9) | 0x9 +#define EC_WORD_CAN_T_WIN (EC_GROUP_BATTLE << 9) | 0xa +#define EC_WORD_CAN_WIN (EC_GROUP_BATTLE << 9) | 0xb +#define EC_WORD_NO_MATCH (EC_GROUP_BATTLE << 9) | 0xc +#define EC_WORD_SPIRIT (EC_GROUP_BATTLE << 9) | 0xd +#define EC_WORD_DECIDED (EC_GROUP_BATTLE << 9) | 0xe +#define EC_WORD_TRUMP_CARD (EC_GROUP_BATTLE << 9) | 0xf +#define EC_WORD_TAKE_THAT (EC_GROUP_BATTLE << 9) | 0x10 +#define EC_WORD_COME_ON (EC_GROUP_BATTLE << 9) | 0x11 +#define EC_WORD_ATTACK (EC_GROUP_BATTLE << 9) | 0x12 +#define EC_WORD_SURRENDER (EC_GROUP_BATTLE << 9) | 0x13 +#define EC_WORD_GUTSY (EC_GROUP_BATTLE << 9) | 0x14 +#define EC_WORD_TALENT (EC_GROUP_BATTLE << 9) | 0x15 +#define EC_WORD_STRATEGY (EC_GROUP_BATTLE << 9) | 0x16 +#define EC_WORD_SMITE (EC_GROUP_BATTLE << 9) | 0x17 +#define EC_WORD_MATCH (EC_GROUP_BATTLE << 9) | 0x18 +#define EC_WORD_VICTORY (EC_GROUP_BATTLE << 9) | 0x19 +#define EC_WORD_OFFENSIVE (EC_GROUP_BATTLE << 9) | 0x1a +#define EC_WORD_SENSE (EC_GROUP_BATTLE << 9) | 0x1b +#define EC_WORD_VERSUS (EC_GROUP_BATTLE << 9) | 0x1c +#define EC_WORD_FIGHTS (EC_GROUP_BATTLE << 9) | 0x1d +#define EC_WORD_POWER (EC_GROUP_BATTLE << 9) | 0x1e +#define EC_WORD_CHALLENGE (EC_GROUP_BATTLE << 9) | 0x1f +#define EC_WORD_STRONG (EC_GROUP_BATTLE << 9) | 0x20 +#define EC_WORD_TOO_STRONG (EC_GROUP_BATTLE << 9) | 0x21 +#define EC_WORD_GO_EASY (EC_GROUP_BATTLE << 9) | 0x22 +#define EC_WORD_FOE (EC_GROUP_BATTLE << 9) | 0x23 +#define EC_WORD_GENIUS (EC_GROUP_BATTLE << 9) | 0x24 +#define EC_WORD_LEGEND (EC_GROUP_BATTLE << 9) | 0x25 +#define EC_WORD_ESCAPE (EC_GROUP_BATTLE << 9) | 0x26 +#define EC_WORD_AIM (EC_GROUP_BATTLE << 9) | 0x27 +#define EC_WORD_BATTLE (EC_GROUP_BATTLE << 9) | 0x28 +#define EC_WORD_FIGHT (EC_GROUP_BATTLE << 9) | 0x29 +#define EC_WORD_RESUSCITATE (EC_GROUP_BATTLE << 9) | 0x2a +#define EC_WORD_POINTS (EC_GROUP_BATTLE << 9) | 0x2b +#define EC_WORD_SERIOUS (EC_GROUP_BATTLE << 9) | 0x2c +#define EC_WORD_GIVE_UP (EC_GROUP_BATTLE << 9) | 0x2d +#define EC_WORD_LOSS (EC_GROUP_BATTLE << 9) | 0x2e +#define EC_WORD_IF_I_LOSE (EC_GROUP_BATTLE << 9) | 0x2f +#define EC_WORD_LOST (EC_GROUP_BATTLE << 9) | 0x30 +#define EC_WORD_LOSE (EC_GROUP_BATTLE << 9) | 0x31 +#define EC_WORD_GUARD (EC_GROUP_BATTLE << 9) | 0x32 +#define EC_WORD_PARTNER (EC_GROUP_BATTLE << 9) | 0x33 +#define EC_WORD_REJECT (EC_GROUP_BATTLE << 9) | 0x34 +#define EC_WORD_ACCEPT (EC_GROUP_BATTLE << 9) | 0x35 +#define EC_WORD_INVINCIBLE (EC_GROUP_BATTLE << 9) | 0x36 +#define EC_WORD_RECEIVED (EC_GROUP_BATTLE << 9) | 0x37 +#define EC_WORD_EASY (EC_GROUP_BATTLE << 9) | 0x38 +#define EC_WORD_WEAK (EC_GROUP_BATTLE << 9) | 0x39 +#define EC_WORD_TOO_WEAK (EC_GROUP_BATTLE << 9) | 0x3a +#define EC_WORD_PUSHOVER (EC_GROUP_BATTLE << 9) | 0x3b +#define EC_WORD_LEADER (EC_GROUP_BATTLE << 9) | 0x3c +#define EC_WORD_RULE (EC_GROUP_BATTLE << 9) | 0x3d +#define EC_WORD_MOVE (EC_GROUP_BATTLE << 9) | 0x3e + +// GREETINGS +#define EC_WORD_THANKS (EC_GROUP_GREETINGS << 9) | 0x0 +#define EC_WORD_YES (EC_GROUP_GREETINGS << 9) | 0x1 +#define EC_WORD_HERE_GOES (EC_GROUP_GREETINGS << 9) | 0x2 +#define EC_WORD_HERE_I_COME (EC_GROUP_GREETINGS << 9) | 0x3 +#define EC_WORD_HERE_IT_IS (EC_GROUP_GREETINGS << 9) | 0x4 +#define EC_WORD_YEAH (EC_GROUP_GREETINGS << 9) | 0x5 +#define EC_WORD_WELCOME (EC_GROUP_GREETINGS << 9) | 0x6 +#define EC_WORD_OI (EC_GROUP_GREETINGS << 9) | 0x7 +#define EC_WORD_HOW_DO (EC_GROUP_GREETINGS << 9) | 0x8 +#define EC_WORD_CONGRATS (EC_GROUP_GREETINGS << 9) | 0x9 +#define EC_WORD_GIVE_ME (EC_GROUP_GREETINGS << 9) | 0xa +#define EC_WORD_SORRY (EC_GROUP_GREETINGS << 9) | 0xb +#define EC_WORD_APOLOGIZE (EC_GROUP_GREETINGS << 9) | 0xc +#define EC_WORD_FORGIVE (EC_GROUP_GREETINGS << 9) | 0xd +#define EC_WORD_HEY_THERE (EC_GROUP_GREETINGS << 9) | 0xe +#define EC_WORD_HELLO (EC_GROUP_GREETINGS << 9) | 0xf +#define EC_WORD_GOOD_BYE (EC_GROUP_GREETINGS << 9) | 0x10 +#define EC_WORD_THANK_YOU (EC_GROUP_GREETINGS << 9) | 0x11 +#define EC_WORD_I_VE_ARRIVED (EC_GROUP_GREETINGS << 9) | 0x12 +#define EC_WORD_PARDON (EC_GROUP_GREETINGS << 9) | 0x13 +#define EC_WORD_EXCUSE (EC_GROUP_GREETINGS << 9) | 0x14 +#define EC_WORD_SEE_YA (EC_GROUP_GREETINGS << 9) | 0x15 +#define EC_WORD_EXCUSE_ME (EC_GROUP_GREETINGS << 9) | 0x16 +#define EC_WORD_WELL_THEN (EC_GROUP_GREETINGS << 9) | 0x17 +#define EC_WORD_GO_AHEAD (EC_GROUP_GREETINGS << 9) | 0x18 +#define EC_WORD_APPRECIATE (EC_GROUP_GREETINGS << 9) | 0x19 +#define EC_WORD_HEY_QUES (EC_GROUP_GREETINGS << 9) | 0x1a +#define EC_WORD_WHAT_S_UP_QUES (EC_GROUP_GREETINGS << 9) | 0x1b +#define EC_WORD_HUH_QUES (EC_GROUP_GREETINGS << 9) | 0x1c +#define EC_WORD_NO (EC_GROUP_GREETINGS << 9) | 0x1d +#define EC_WORD_HI (EC_GROUP_GREETINGS << 9) | 0x1e +#define EC_WORD_YEAH_YEAH (EC_GROUP_GREETINGS << 9) | 0x1f +#define EC_WORD_BYE_BYE (EC_GROUP_GREETINGS << 9) | 0x20 +#define EC_WORD_MEET_YOU (EC_GROUP_GREETINGS << 9) | 0x21 +#define EC_WORD_HEY (EC_GROUP_GREETINGS << 9) | 0x22 +#define EC_WORD_SMELL (EC_GROUP_GREETINGS << 9) | 0x23 +#define EC_WORD_LISTENING (EC_GROUP_GREETINGS << 9) | 0x24 +#define EC_WORD_HOO_HAH (EC_GROUP_GREETINGS << 9) | 0x25 +#define EC_WORD_YAHOO (EC_GROUP_GREETINGS << 9) | 0x26 +#define EC_WORD_YO (EC_GROUP_GREETINGS << 9) | 0x27 +#define EC_WORD_COME_OVER (EC_GROUP_GREETINGS << 9) | 0x28 +#define EC_WORD_COUNT_ON (EC_GROUP_GREETINGS << 9) | 0x29 + +// PEOPLE +#define EC_WORD_OPPONENT (EC_GROUP_PEOPLE << 9) | 0x0 +#define EC_WORD_I (EC_GROUP_PEOPLE << 9) | 0x1 +#define EC_WORD_YOU (EC_GROUP_PEOPLE << 9) | 0x2 +#define EC_WORD_YOURS (EC_GROUP_PEOPLE << 9) | 0x3 +#define EC_WORD_SON (EC_GROUP_PEOPLE << 9) | 0x4 +#define EC_WORD_YOUR (EC_GROUP_PEOPLE << 9) | 0x5 +#define EC_WORD_YOU_RE (EC_GROUP_PEOPLE << 9) | 0x6 +#define EC_WORD_YOU_VE (EC_GROUP_PEOPLE << 9) | 0x7 +#define EC_WORD_MOTHER (EC_GROUP_PEOPLE << 9) | 0x8 +#define EC_WORD_GRANDFATHER (EC_GROUP_PEOPLE << 9) | 0x9 +#define EC_WORD_UNCLE (EC_GROUP_PEOPLE << 9) | 0xa +#define EC_WORD_FATHER (EC_GROUP_PEOPLE << 9) | 0xb +#define EC_WORD_BOY (EC_GROUP_PEOPLE << 9) | 0xc +#define EC_WORD_ADULT (EC_GROUP_PEOPLE << 9) | 0xd +#define EC_WORD_BROTHER (EC_GROUP_PEOPLE << 9) | 0xe +#define EC_WORD_SISTER (EC_GROUP_PEOPLE << 9) | 0xf +#define EC_WORD_GRANDMOTHER (EC_GROUP_PEOPLE << 9) | 0x10 +#define EC_WORD_AUNT (EC_GROUP_PEOPLE << 9) | 0x11 +#define EC_WORD_PARENT (EC_GROUP_PEOPLE << 9) | 0x12 +#define EC_WORD_MAN (EC_GROUP_PEOPLE << 9) | 0x13 +#define EC_WORD_ME (EC_GROUP_PEOPLE << 9) | 0x14 +#define EC_WORD_GIRL (EC_GROUP_PEOPLE << 9) | 0x15 +#define EC_WORD_BABE (EC_GROUP_PEOPLE << 9) | 0x16 +#define EC_WORD_FAMILY (EC_GROUP_PEOPLE << 9) | 0x17 +#define EC_WORD_HER (EC_GROUP_PEOPLE << 9) | 0x18 +#define EC_WORD_HIM (EC_GROUP_PEOPLE << 9) | 0x19 +#define EC_WORD_HE (EC_GROUP_PEOPLE << 9) | 0x1a +#define EC_WORD_PLACE (EC_GROUP_PEOPLE << 9) | 0x1b +#define EC_WORD_DAUGHTER (EC_GROUP_PEOPLE << 9) | 0x1c +#define EC_WORD_HIS (EC_GROUP_PEOPLE << 9) | 0x1d +#define EC_WORD_HE_S (EC_GROUP_PEOPLE << 9) | 0x1e +#define EC_WORD_AREN_T (EC_GROUP_PEOPLE << 9) | 0x1f +#define EC_WORD_SIBLINGS (EC_GROUP_PEOPLE << 9) | 0x20 +#define EC_WORD_KID (EC_GROUP_PEOPLE << 9) | 0x21 +#define EC_WORD_CHILDREN (EC_GROUP_PEOPLE << 9) | 0x22 +#define EC_WORD_MR (EC_GROUP_PEOPLE << 9) | 0x23 +#define EC_WORD_MRS (EC_GROUP_PEOPLE << 9) | 0x24 +#define EC_WORD_MYSELF (EC_GROUP_PEOPLE << 9) | 0x25 +#define EC_WORD_I_WAS (EC_GROUP_PEOPLE << 9) | 0x26 +#define EC_WORD_TO_ME (EC_GROUP_PEOPLE << 9) | 0x27 +#define EC_WORD_MY (EC_GROUP_PEOPLE << 9) | 0x28 +#define EC_WORD_I_AM (EC_GROUP_PEOPLE << 9) | 0x29 +#define EC_WORD_I_VE (EC_GROUP_PEOPLE << 9) | 0x2a +#define EC_WORD_WHO (EC_GROUP_PEOPLE << 9) | 0x2b +#define EC_WORD_SOMEONE (EC_GROUP_PEOPLE << 9) | 0x2c +#define EC_WORD_WHO_WAS (EC_GROUP_PEOPLE << 9) | 0x2d +#define EC_WORD_TO_WHOM (EC_GROUP_PEOPLE << 9) | 0x2e +#define EC_WORD_WHOSE (EC_GROUP_PEOPLE << 9) | 0x2f +#define EC_WORD_WHO_IS (EC_GROUP_PEOPLE << 9) | 0x30 +#define EC_WORD_IT_S (EC_GROUP_PEOPLE << 9) | 0x31 +#define EC_WORD_LADY (EC_GROUP_PEOPLE << 9) | 0x32 +#define EC_WORD_FRIEND (EC_GROUP_PEOPLE << 9) | 0x33 +#define EC_WORD_ALLY (EC_GROUP_PEOPLE << 9) | 0x34 +#define EC_WORD_PERSON (EC_GROUP_PEOPLE << 9) | 0x35 +#define EC_WORD_DUDE (EC_GROUP_PEOPLE << 9) | 0x36 +#define EC_WORD_THEY (EC_GROUP_PEOPLE << 9) | 0x37 +#define EC_WORD_THEY_WERE (EC_GROUP_PEOPLE << 9) | 0x38 +#define EC_WORD_TO_THEM (EC_GROUP_PEOPLE << 9) | 0x39 +#define EC_WORD_THEIR (EC_GROUP_PEOPLE << 9) | 0x3a +#define EC_WORD_THEY_RE (EC_GROUP_PEOPLE << 9) | 0x3b +#define EC_WORD_THEY_VE (EC_GROUP_PEOPLE << 9) | 0x3c +#define EC_WORD_WE (EC_GROUP_PEOPLE << 9) | 0x3d +#define EC_WORD_BEEN (EC_GROUP_PEOPLE << 9) | 0x3e +#define EC_WORD_TO_US (EC_GROUP_PEOPLE << 9) | 0x3f +#define EC_WORD_OUR (EC_GROUP_PEOPLE << 9) | 0x40 +#define EC_WORD_WE_RE (EC_GROUP_PEOPLE << 9) | 0x41 +#define EC_WORD_RIVAL (EC_GROUP_PEOPLE << 9) | 0x42 +#define EC_WORD_WE_VE (EC_GROUP_PEOPLE << 9) | 0x43 +#define EC_WORD_WOMAN (EC_GROUP_PEOPLE << 9) | 0x44 +#define EC_WORD_SHE (EC_GROUP_PEOPLE << 9) | 0x45 +#define EC_WORD_SHE_WAS (EC_GROUP_PEOPLE << 9) | 0x46 +#define EC_WORD_TO_HER (EC_GROUP_PEOPLE << 9) | 0x47 +#define EC_WORD_HERS (EC_GROUP_PEOPLE << 9) | 0x48 +#define EC_WORD_SHE_IS (EC_GROUP_PEOPLE << 9) | 0x49 +#define EC_WORD_SOME (EC_GROUP_PEOPLE << 9) | 0x4a + +// VOICES +#define EC_WORD_EXCL (EC_GROUP_VOICES << 9) | 0x0 +#define EC_WORD_EXCL_EXCL (EC_GROUP_VOICES << 9) | 0x1 +#define EC_WORD_QUES_EXCL (EC_GROUP_VOICES << 9) | 0x2 +#define EC_WORD_QUES (EC_GROUP_VOICES << 9) | 0x3 +#define EC_WORD_ELLIPSIS (EC_GROUP_VOICES << 9) | 0x4 +#define EC_WORD_ELLIPSIS_EXCL (EC_GROUP_VOICES << 9) | 0x5 +#define EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS (EC_GROUP_VOICES << 9) | 0x6 +#define EC_WORD_DASH (EC_GROUP_VOICES << 9) | 0x7 +#define EC_WORD_DASH_DASH_DASH (EC_GROUP_VOICES << 9) | 0x8 +#define EC_WORD_UH_OH (EC_GROUP_VOICES << 9) | 0x9 +#define EC_WORD_WAAAH (EC_GROUP_VOICES << 9) | 0xa +#define EC_WORD_AHAHA (EC_GROUP_VOICES << 9) | 0xb +#define EC_WORD_OH_QUES (EC_GROUP_VOICES << 9) | 0xc +#define EC_WORD_NOPE (EC_GROUP_VOICES << 9) | 0xd +#define EC_WORD_URGH (EC_GROUP_VOICES << 9) | 0xe +#define EC_WORD_HMM (EC_GROUP_VOICES << 9) | 0xf +#define EC_WORD_WHOAH (EC_GROUP_VOICES << 9) | 0x10 +#define EC_WORD_WROOOAAR_EXCL (EC_GROUP_VOICES << 9) | 0x11 +#define EC_WORD_WOW (EC_GROUP_VOICES << 9) | 0x12 +#define EC_WORD_GIGGLE (EC_GROUP_VOICES << 9) | 0x13 +#define EC_WORD_SIGH (EC_GROUP_VOICES << 9) | 0x14 +#define EC_WORD_UNBELIEVABLE (EC_GROUP_VOICES << 9) | 0x15 +#define EC_WORD_CRIES (EC_GROUP_VOICES << 9) | 0x16 +#define EC_WORD_AGREE (EC_GROUP_VOICES << 9) | 0x17 +#define EC_WORD_EH_QUES (EC_GROUP_VOICES << 9) | 0x18 +#define EC_WORD_CRY (EC_GROUP_VOICES << 9) | 0x19 +#define EC_WORD_EHEHE (EC_GROUP_VOICES << 9) | 0x1a +#define EC_WORD_OI_OI_OI (EC_GROUP_VOICES << 9) | 0x1b +#define EC_WORD_OH_YEAH (EC_GROUP_VOICES << 9) | 0x1c +#define EC_WORD_OH (EC_GROUP_VOICES << 9) | 0x1d +#define EC_WORD_OOPS (EC_GROUP_VOICES << 9) | 0x1e +#define EC_WORD_SHOCKED (EC_GROUP_VOICES << 9) | 0x1f +#define EC_WORD_EEK (EC_GROUP_VOICES << 9) | 0x20 +#define EC_WORD_GRAAAH (EC_GROUP_VOICES << 9) | 0x21 +#define EC_WORD_GWAHAHAHA (EC_GROUP_VOICES << 9) | 0x22 +#define EC_WORD_WAY (EC_GROUP_VOICES << 9) | 0x23 +#define EC_WORD_TCH (EC_GROUP_VOICES << 9) | 0x24 +#define EC_WORD_HEHE (EC_GROUP_VOICES << 9) | 0x25 +#define EC_WORD_HAH (EC_GROUP_VOICES << 9) | 0x26 +#define EC_WORD_YUP (EC_GROUP_VOICES << 9) | 0x27 +#define EC_WORD_HAHAHA (EC_GROUP_VOICES << 9) | 0x28 +#define EC_WORD_AIYEEH (EC_GROUP_VOICES << 9) | 0x29 +#define EC_WORD_HIYAH (EC_GROUP_VOICES << 9) | 0x2a +#define EC_WORD_FUFUFU (EC_GROUP_VOICES << 9) | 0x2b +#define EC_WORD_LOL (EC_GROUP_VOICES << 9) | 0x2c +#define EC_WORD_SNORT (EC_GROUP_VOICES << 9) | 0x2d +#define EC_WORD_HUMPH (EC_GROUP_VOICES << 9) | 0x2e +#define EC_WORD_HEHEHE (EC_GROUP_VOICES << 9) | 0x2f +#define EC_WORD_HEH (EC_GROUP_VOICES << 9) | 0x30 +#define EC_WORD_HOHOHO (EC_GROUP_VOICES << 9) | 0x31 +#define EC_WORD_UH_HUH (EC_GROUP_VOICES << 9) | 0x32 +#define EC_WORD_OH_DEAR (EC_GROUP_VOICES << 9) | 0x33 +#define EC_WORD_ARRGH (EC_GROUP_VOICES << 9) | 0x34 +#define EC_WORD_MUFUFU (EC_GROUP_VOICES << 9) | 0x35 +#define EC_WORD_MMM (EC_GROUP_VOICES << 9) | 0x36 +#define EC_WORD_OH_KAY (EC_GROUP_VOICES << 9) | 0x37 +#define EC_WORD_OKAY (EC_GROUP_VOICES << 9) | 0x38 +#define EC_WORD_LALALA (EC_GROUP_VOICES << 9) | 0x39 +#define EC_WORD_YAY (EC_GROUP_VOICES << 9) | 0x3a +#define EC_WORD_AWW (EC_GROUP_VOICES << 9) | 0x3b +#define EC_WORD_WOWEE (EC_GROUP_VOICES << 9) | 0x3c +#define EC_WORD_GWAH (EC_GROUP_VOICES << 9) | 0x3d +#define EC_WORD_WAHAHAHA (EC_GROUP_VOICES << 9) | 0x3e + +// SPEECH +#define EC_WORD_LISTEN (EC_GROUP_SPEECH << 9) | 0x0 +#define EC_WORD_NOT_VERY (EC_GROUP_SPEECH << 9) | 0x1 +#define EC_WORD_MEAN (EC_GROUP_SPEECH << 9) | 0x2 +#define EC_WORD_LIE (EC_GROUP_SPEECH << 9) | 0x3 +#define EC_WORD_LAY (EC_GROUP_SPEECH << 9) | 0x4 +#define EC_WORD_RECOMMEND (EC_GROUP_SPEECH << 9) | 0x5 +#define EC_WORD_NITWIT (EC_GROUP_SPEECH << 9) | 0x6 +#define EC_WORD_QUITE (EC_GROUP_SPEECH << 9) | 0x7 +#define EC_WORD_FROM (EC_GROUP_SPEECH << 9) | 0x8 +#define EC_WORD_FEELING (EC_GROUP_SPEECH << 9) | 0x9 +#define EC_WORD_BUT (EC_GROUP_SPEECH << 9) | 0xa +#define EC_WORD_HOWEVER (EC_GROUP_SPEECH << 9) | 0xb +#define EC_WORD_CASE (EC_GROUP_SPEECH << 9) | 0xc +#define EC_WORD_THE (EC_GROUP_SPEECH << 9) | 0xd +#define EC_WORD_MISS (EC_GROUP_SPEECH << 9) | 0xe +#define EC_WORD_HOW (EC_GROUP_SPEECH << 9) | 0xf +#define EC_WORD_HIT (EC_GROUP_SPEECH << 9) | 0x10 +#define EC_WORD_ENOUGH (EC_GROUP_SPEECH << 9) | 0x11 +#define EC_WORD_A_LOT (EC_GROUP_SPEECH << 9) | 0x12 +#define EC_WORD_A_LITTLE (EC_GROUP_SPEECH << 9) | 0x13 +#define EC_WORD_ABSOLUTELY (EC_GROUP_SPEECH << 9) | 0x14 +#define EC_WORD_AND (EC_GROUP_SPEECH << 9) | 0x15 +#define EC_WORD_ONLY (EC_GROUP_SPEECH << 9) | 0x16 +#define EC_WORD_AROUND (EC_GROUP_SPEECH << 9) | 0x17 +#define EC_WORD_PROBABLY (EC_GROUP_SPEECH << 9) | 0x18 +#define EC_WORD_IF (EC_GROUP_SPEECH << 9) | 0x19 +#define EC_WORD_VERY (EC_GROUP_SPEECH << 9) | 0x1a +#define EC_WORD_A_TINY_BIT (EC_GROUP_SPEECH << 9) | 0x1b +#define EC_WORD_WILD (EC_GROUP_SPEECH << 9) | 0x1c +#define EC_WORD_THAT_S (EC_GROUP_SPEECH << 9) | 0x1d +#define EC_WORD_JUST (EC_GROUP_SPEECH << 9) | 0x1e +#define EC_WORD_EVEN_SO (EC_GROUP_SPEECH << 9) | 0x1f +#define EC_WORD_MUST_BE (EC_GROUP_SPEECH << 9) | 0x20 +#define EC_WORD_NATURALLY (EC_GROUP_SPEECH << 9) | 0x21 +#define EC_WORD_FOR_NOW (EC_GROUP_SPEECH << 9) | 0x22 +#define EC_WORD_UNDERSTOOD (EC_GROUP_SPEECH << 9) | 0x23 +#define EC_WORD_JOKING (EC_GROUP_SPEECH << 9) | 0x24 +#define EC_WORD_READY (EC_GROUP_SPEECH << 9) | 0x25 +#define EC_WORD_SOMETHING (EC_GROUP_SPEECH << 9) | 0x26 +#define EC_WORD_SOMEHOW (EC_GROUP_SPEECH << 9) | 0x27 +#define EC_WORD_ALTHOUGH (EC_GROUP_SPEECH << 9) | 0x28 +#define EC_WORD_ALSO (EC_GROUP_SPEECH << 9) | 0x29 +#define EC_WORD_PERFECT (EC_GROUP_SPEECH << 9) | 0x2a +#define EC_WORD_AS_MUCH_AS (EC_GROUP_SPEECH << 9) | 0x2b +#define EC_WORD_REALLY (EC_GROUP_SPEECH << 9) | 0x2c +#define EC_WORD_TRULY (EC_GROUP_SPEECH << 9) | 0x2d +#define EC_WORD_SERIOUSLY (EC_GROUP_SPEECH << 9) | 0x2e +#define EC_WORD_TOTALLY (EC_GROUP_SPEECH << 9) | 0x2f +#define EC_WORD_UNTIL (EC_GROUP_SPEECH << 9) | 0x30 +#define EC_WORD_AS_IF (EC_GROUP_SPEECH << 9) | 0x31 +#define EC_WORD_MOOD (EC_GROUP_SPEECH << 9) | 0x32 +#define EC_WORD_RATHER (EC_GROUP_SPEECH << 9) | 0x33 +#define EC_WORD_AWFULLY (EC_GROUP_SPEECH << 9) | 0x34 +#define EC_WORD_MODE (EC_GROUP_SPEECH << 9) | 0x35 +#define EC_WORD_MORE (EC_GROUP_SPEECH << 9) | 0x36 +#define EC_WORD_TOO_LATE (EC_GROUP_SPEECH << 9) | 0x37 +#define EC_WORD_FINALLY (EC_GROUP_SPEECH << 9) | 0x38 +#define EC_WORD_ANY (EC_GROUP_SPEECH << 9) | 0x39 +#define EC_WORD_INSTEAD (EC_GROUP_SPEECH << 9) | 0x3a +#define EC_WORD_FANTASTIC (EC_GROUP_SPEECH << 9) | 0x3b + +// ENDINGS +#define EC_WORD_WILL (EC_GROUP_ENDINGS << 9) | 0x0 +#define EC_WORD_WILL_BE_HERE (EC_GROUP_ENDINGS << 9) | 0x1 +#define EC_WORD_OR (EC_GROUP_ENDINGS << 9) | 0x2 +#define EC_WORD_TIMES (EC_GROUP_ENDINGS << 9) | 0x3 +#define EC_WORD_WONDER (EC_GROUP_ENDINGS << 9) | 0x4 +#define EC_WORD_IS_IT_QUES (EC_GROUP_ENDINGS << 9) | 0x5 +#define EC_WORD_BE (EC_GROUP_ENDINGS << 9) | 0x6 +#define EC_WORD_GIMME (EC_GROUP_ENDINGS << 9) | 0x7 +#define EC_WORD_COULD (EC_GROUP_ENDINGS << 9) | 0x8 +#define EC_WORD_LIKELY_TO (EC_GROUP_ENDINGS << 9) | 0x9 +#define EC_WORD_WOULD (EC_GROUP_ENDINGS << 9) | 0xa +#define EC_WORD_IS (EC_GROUP_ENDINGS << 9) | 0xb +#define EC_WORD_ISN_T_IT_QUES (EC_GROUP_ENDINGS << 9) | 0xc +#define EC_WORD_LET_S (EC_GROUP_ENDINGS << 9) | 0xd +#define EC_WORD_OTHER (EC_GROUP_ENDINGS << 9) | 0xe +#define EC_WORD_ARE (EC_GROUP_ENDINGS << 9) | 0xf +#define EC_WORD_WAS (EC_GROUP_ENDINGS << 9) | 0x10 +#define EC_WORD_WERE (EC_GROUP_ENDINGS << 9) | 0x11 +#define EC_WORD_THOSE (EC_GROUP_ENDINGS << 9) | 0x12 +#define EC_WORD_ISN_T (EC_GROUP_ENDINGS << 9) | 0x13 +#define EC_WORD_WON_T (EC_GROUP_ENDINGS << 9) | 0x14 +#define EC_WORD_CAN_T (EC_GROUP_ENDINGS << 9) | 0x15 +#define EC_WORD_CAN (EC_GROUP_ENDINGS << 9) | 0x16 +#define EC_WORD_DON_T (EC_GROUP_ENDINGS << 9) | 0x17 +#define EC_WORD_DO (EC_GROUP_ENDINGS << 9) | 0x18 +#define EC_WORD_DOES (EC_GROUP_ENDINGS << 9) | 0x19 +#define EC_WORD_WHOM (EC_GROUP_ENDINGS << 9) | 0x1a +#define EC_WORD_WHICH (EC_GROUP_ENDINGS << 9) | 0x1b +#define EC_WORD_WASN_T (EC_GROUP_ENDINGS << 9) | 0x1c +#define EC_WORD_WEREN_T (EC_GROUP_ENDINGS << 9) | 0x1d +#define EC_WORD_HAVE (EC_GROUP_ENDINGS << 9) | 0x1e +#define EC_WORD_HAVEN_T (EC_GROUP_ENDINGS << 9) | 0x1f +#define EC_WORD_A (EC_GROUP_ENDINGS << 9) | 0x20 +#define EC_WORD_AN (EC_GROUP_ENDINGS << 9) | 0x21 +#define EC_WORD_NOT (EC_GROUP_ENDINGS << 9) | 0x22 +#define EC_WORD_THERE (EC_GROUP_ENDINGS << 9) | 0x23 +#define EC_WORD_OK_QUES (EC_GROUP_ENDINGS << 9) | 0x24 +#define EC_WORD_SO (EC_GROUP_ENDINGS << 9) | 0x25 +#define EC_WORD_MAYBE (EC_GROUP_ENDINGS << 9) | 0x26 +#define EC_WORD_ABOUT (EC_GROUP_ENDINGS << 9) | 0x27 +#define EC_WORD_OVER (EC_GROUP_ENDINGS << 9) | 0x28 +#define EC_WORD_IT (EC_GROUP_ENDINGS << 9) | 0x29 +#define EC_WORD_ALL (EC_GROUP_ENDINGS << 9) | 0x2a +#define EC_WORD_FOR (EC_GROUP_ENDINGS << 9) | 0x2b +#define EC_WORD_ON (EC_GROUP_ENDINGS << 9) | 0x2c +#define EC_WORD_OFF (EC_GROUP_ENDINGS << 9) | 0x2d +#define EC_WORD_AS (EC_GROUP_ENDINGS << 9) | 0x2e +#define EC_WORD_TO (EC_GROUP_ENDINGS << 9) | 0x2f +#define EC_WORD_WITH (EC_GROUP_ENDINGS << 9) | 0x30 +#define EC_WORD_BETTER (EC_GROUP_ENDINGS << 9) | 0x31 +#define EC_WORD_EVER (EC_GROUP_ENDINGS << 9) | 0x32 +#define EC_WORD_SINCE (EC_GROUP_ENDINGS << 9) | 0x33 +#define EC_WORD_OF (EC_GROUP_ENDINGS << 9) | 0x34 +#define EC_WORD_BELONGS_TO (EC_GROUP_ENDINGS << 9) | 0x35 +#define EC_WORD_AT (EC_GROUP_ENDINGS << 9) | 0x36 +#define EC_WORD_IN (EC_GROUP_ENDINGS << 9) | 0x37 +#define EC_WORD_OUT (EC_GROUP_ENDINGS << 9) | 0x38 +#define EC_WORD_TOO (EC_GROUP_ENDINGS << 9) | 0x39 +#define EC_WORD_LIKE (EC_GROUP_ENDINGS << 9) | 0x3a +#define EC_WORD_DID (EC_GROUP_ENDINGS << 9) | 0x3b +#define EC_WORD_DIDN_T (EC_GROUP_ENDINGS << 9) | 0x3c +#define EC_WORD_DOESN_T (EC_GROUP_ENDINGS << 9) | 0x3d +#define EC_WORD_WITHOUT (EC_GROUP_ENDINGS << 9) | 0x3e +#define EC_WORD_AFTER (EC_GROUP_ENDINGS << 9) | 0x3f +#define EC_WORD_BEFORE (EC_GROUP_ENDINGS << 9) | 0x40 +#define EC_WORD_WHILE (EC_GROUP_ENDINGS << 9) | 0x41 +#define EC_WORD_THAN (EC_GROUP_ENDINGS << 9) | 0x42 +#define EC_WORD_ONCE (EC_GROUP_ENDINGS << 9) | 0x43 +#define EC_WORD_ANYWHERE (EC_GROUP_ENDINGS << 9) | 0x44 + +// FEELINGS +#define EC_WORD_MEET (EC_GROUP_FEELINGS << 9) | 0x0 +#define EC_WORD_PLAY (EC_GROUP_FEELINGS << 9) | 0x1 +#define EC_WORD_HURRIED (EC_GROUP_FEELINGS << 9) | 0x2 +#define EC_WORD_GOES (EC_GROUP_FEELINGS << 9) | 0x3 +#define EC_WORD_GIDDY (EC_GROUP_FEELINGS << 9) | 0x4 +#define EC_WORD_HAPPY (EC_GROUP_FEELINGS << 9) | 0x5 +#define EC_WORD_HAPPINESS (EC_GROUP_FEELINGS << 9) | 0x6 +#define EC_WORD_EXCITE (EC_GROUP_FEELINGS << 9) | 0x7 +#define EC_WORD_IMPORTANT (EC_GROUP_FEELINGS << 9) | 0x8 +#define EC_WORD_FUNNY (EC_GROUP_FEELINGS << 9) | 0x9 +#define EC_WORD_GOT (EC_GROUP_FEELINGS << 9) | 0xa +#define EC_WORD_GO_HOME (EC_GROUP_FEELINGS << 9) | 0xb +#define EC_WORD_DISAPPOINTED (EC_GROUP_FEELINGS << 9) | 0xc +#define EC_WORD_DISAPPOINTS (EC_GROUP_FEELINGS << 9) | 0xd +#define EC_WORD_SAD (EC_GROUP_FEELINGS << 9) | 0xe +#define EC_WORD_TRY (EC_GROUP_FEELINGS << 9) | 0xf +#define EC_WORD_TRIES (EC_GROUP_FEELINGS << 9) | 0x10 +#define EC_WORD_HEARS (EC_GROUP_FEELINGS << 9) | 0x11 +#define EC_WORD_THINK (EC_GROUP_FEELINGS << 9) | 0x12 +#define EC_WORD_HEAR (EC_GROUP_FEELINGS << 9) | 0x13 +#define EC_WORD_WANTS (EC_GROUP_FEELINGS << 9) | 0x14 +#define EC_WORD_MISHEARD (EC_GROUP_FEELINGS << 9) | 0x15 +#define EC_WORD_DISLIKE (EC_GROUP_FEELINGS << 9) | 0x16 +#define EC_WORD_ANGRY (EC_GROUP_FEELINGS << 9) | 0x17 +#define EC_WORD_ANGER (EC_GROUP_FEELINGS << 9) | 0x18 +#define EC_WORD_SCARY (EC_GROUP_FEELINGS << 9) | 0x19 +#define EC_WORD_LONESOME (EC_GROUP_FEELINGS << 9) | 0x1a +#define EC_WORD_DISAPPOINT (EC_GROUP_FEELINGS << 9) | 0x1b +#define EC_WORD_JOY (EC_GROUP_FEELINGS << 9) | 0x1c +#define EC_WORD_GETS (EC_GROUP_FEELINGS << 9) | 0x1d +#define EC_WORD_NEVER (EC_GROUP_FEELINGS << 9) | 0x1e +#define EC_WORD_DARN (EC_GROUP_FEELINGS << 9) | 0x1f +#define EC_WORD_DOWNCAST (EC_GROUP_FEELINGS << 9) | 0x20 +#define EC_WORD_INCREDIBLE (EC_GROUP_FEELINGS << 9) | 0x21 +#define EC_WORD_LIKES (EC_GROUP_FEELINGS << 9) | 0x22 +#define EC_WORD_DISLIKES (EC_GROUP_FEELINGS << 9) | 0x23 +#define EC_WORD_BORING (EC_GROUP_FEELINGS << 9) | 0x24 +#define EC_WORD_CARE (EC_GROUP_FEELINGS << 9) | 0x25 +#define EC_WORD_CARES (EC_GROUP_FEELINGS << 9) | 0x26 +#define EC_WORD_ALL_RIGHT (EC_GROUP_FEELINGS << 9) | 0x27 +#define EC_WORD_ADORE (EC_GROUP_FEELINGS << 9) | 0x28 +#define EC_WORD_DISASTER (EC_GROUP_FEELINGS << 9) | 0x29 +#define EC_WORD_ENJOY (EC_GROUP_FEELINGS << 9) | 0x2a +#define EC_WORD_ENJOYS (EC_GROUP_FEELINGS << 9) | 0x2b +#define EC_WORD_EAT (EC_GROUP_FEELINGS << 9) | 0x2c +#define EC_WORD_LACKING (EC_GROUP_FEELINGS << 9) | 0x2d +#define EC_WORD_BAD (EC_GROUP_FEELINGS << 9) | 0x2e +#define EC_WORD_HARD (EC_GROUP_FEELINGS << 9) | 0x2f +#define EC_WORD_TERRIBLE (EC_GROUP_FEELINGS << 9) | 0x30 +#define EC_WORD_SHOULD (EC_GROUP_FEELINGS << 9) | 0x31 +#define EC_WORD_NICE (EC_GROUP_FEELINGS << 9) | 0x32 +#define EC_WORD_DRINK (EC_GROUP_FEELINGS << 9) | 0x33 +#define EC_WORD_SURPRISE (EC_GROUP_FEELINGS << 9) | 0x34 +#define EC_WORD_FEAR (EC_GROUP_FEELINGS << 9) | 0x35 +#define EC_WORD_WANT (EC_GROUP_FEELINGS << 9) | 0x36 +#define EC_WORD_WAIT (EC_GROUP_FEELINGS << 9) | 0x37 +#define EC_WORD_SATISFIED (EC_GROUP_FEELINGS << 9) | 0x38 +#define EC_WORD_SEE (EC_GROUP_FEELINGS << 9) | 0x39 +#define EC_WORD_RARE (EC_GROUP_FEELINGS << 9) | 0x3a +#define EC_WORD_NEGATIVE (EC_GROUP_FEELINGS << 9) | 0x3b +#define EC_WORD_DONE (EC_GROUP_FEELINGS << 9) | 0x3c +#define EC_WORD_DANGER (EC_GROUP_FEELINGS << 9) | 0x3d +#define EC_WORD_DEFEATED (EC_GROUP_FEELINGS << 9) | 0x3e +#define EC_WORD_BEAT (EC_GROUP_FEELINGS << 9) | 0x3f +#define EC_WORD_GREAT (EC_GROUP_FEELINGS << 9) | 0x40 +#define EC_WORD_ROMANTIC (EC_GROUP_FEELINGS << 9) | 0x41 +#define EC_WORD_QUESTION (EC_GROUP_FEELINGS << 9) | 0x42 +#define EC_WORD_UNDERSTAND (EC_GROUP_FEELINGS << 9) | 0x43 +#define EC_WORD_UNDERSTANDS (EC_GROUP_FEELINGS << 9) | 0x44 + +// CONDITIONS +#define EC_WORD_HOT (EC_GROUP_CONDITIONS << 9) | 0x0 +#define EC_WORD_EXISTS (EC_GROUP_CONDITIONS << 9) | 0x1 +#define EC_WORD_EXCESS (EC_GROUP_CONDITIONS << 9) | 0x2 +#define EC_WORD_APPROVED (EC_GROUP_CONDITIONS << 9) | 0x3 +#define EC_WORD_HAS (EC_GROUP_CONDITIONS << 9) | 0x4 +#define EC_WORD_GOOD (EC_GROUP_CONDITIONS << 9) | 0x5 +#define EC_WORD_LESS (EC_GROUP_CONDITIONS << 9) | 0x6 +#define EC_WORD_MOMENTUM (EC_GROUP_CONDITIONS << 9) | 0x7 +#define EC_WORD_GOING (EC_GROUP_CONDITIONS << 9) | 0x8 +#define EC_WORD_WEIRD (EC_GROUP_CONDITIONS << 9) | 0x9 +#define EC_WORD_BUSY (EC_GROUP_CONDITIONS << 9) | 0xa +#define EC_WORD_TOGETHER (EC_GROUP_CONDITIONS << 9) | 0xb +#define EC_WORD_FULL (EC_GROUP_CONDITIONS << 9) | 0xc +#define EC_WORD_ABSENT (EC_GROUP_CONDITIONS << 9) | 0xd +#define EC_WORD_BEING (EC_GROUP_CONDITIONS << 9) | 0xe +#define EC_WORD_NEED (EC_GROUP_CONDITIONS << 9) | 0xf +#define EC_WORD_TASTY (EC_GROUP_CONDITIONS << 9) | 0x10 +#define EC_WORD_SKILLED (EC_GROUP_CONDITIONS << 9) | 0x11 +#define EC_WORD_NOISY (EC_GROUP_CONDITIONS << 9) | 0x12 +#define EC_WORD_BIG (EC_GROUP_CONDITIONS << 9) | 0x13 +#define EC_WORD_LATE (EC_GROUP_CONDITIONS << 9) | 0x14 +#define EC_WORD_CLOSE (EC_GROUP_CONDITIONS << 9) | 0x15 +#define EC_WORD_DOCILE (EC_GROUP_CONDITIONS << 9) | 0x16 +#define EC_WORD_AMUSING (EC_GROUP_CONDITIONS << 9) | 0x17 +#define EC_WORD_ENTERTAINING (EC_GROUP_CONDITIONS << 9) | 0x18 +#define EC_WORD_PERFECTION (EC_GROUP_CONDITIONS << 9) | 0x19 +#define EC_WORD_PRETTY (EC_GROUP_CONDITIONS << 9) | 0x1a +#define EC_WORD_HEALTHY (EC_GROUP_CONDITIONS << 9) | 0x1b +#define EC_WORD_EXCELLENT (EC_GROUP_CONDITIONS << 9) | 0x1c +#define EC_WORD_UPSIDE_DOWN (EC_GROUP_CONDITIONS << 9) | 0x1d +#define EC_WORD_COLD (EC_GROUP_CONDITIONS << 9) | 0x1e +#define EC_WORD_REFRESHING (EC_GROUP_CONDITIONS << 9) | 0x1f +#define EC_WORD_UNAVOIDABLE (EC_GROUP_CONDITIONS << 9) | 0x20 +#define EC_WORD_MUCH (EC_GROUP_CONDITIONS << 9) | 0x21 +#define EC_WORD_OVERWHELMING (EC_GROUP_CONDITIONS << 9) | 0x22 +#define EC_WORD_FABULOUS (EC_GROUP_CONDITIONS << 9) | 0x23 +#define EC_WORD_ELSE (EC_GROUP_CONDITIONS << 9) | 0x24 +#define EC_WORD_EXPENSIVE (EC_GROUP_CONDITIONS << 9) | 0x25 +#define EC_WORD_CORRECT (EC_GROUP_CONDITIONS << 9) | 0x26 +#define EC_WORD_IMPOSSIBLE (EC_GROUP_CONDITIONS << 9) | 0x27 +#define EC_WORD_SMALL (EC_GROUP_CONDITIONS << 9) | 0x28 +#define EC_WORD_DIFFERENT (EC_GROUP_CONDITIONS << 9) | 0x29 +#define EC_WORD_TIRED (EC_GROUP_CONDITIONS << 9) | 0x2a +#define EC_WORD_SKILL (EC_GROUP_CONDITIONS << 9) | 0x2b +#define EC_WORD_TOP (EC_GROUP_CONDITIONS << 9) | 0x2c +#define EC_WORD_NON_STOP (EC_GROUP_CONDITIONS << 9) | 0x2d +#define EC_WORD_PREPOSTEROUS (EC_GROUP_CONDITIONS << 9) | 0x2e +#define EC_WORD_NONE (EC_GROUP_CONDITIONS << 9) | 0x2f +#define EC_WORD_NOTHING (EC_GROUP_CONDITIONS << 9) | 0x30 +#define EC_WORD_NATURAL (EC_GROUP_CONDITIONS << 9) | 0x31 +#define EC_WORD_BECOMES (EC_GROUP_CONDITIONS << 9) | 0x32 +#define EC_WORD_LUKEWARM (EC_GROUP_CONDITIONS << 9) | 0x33 +#define EC_WORD_FAST (EC_GROUP_CONDITIONS << 9) | 0x34 +#define EC_WORD_LOW (EC_GROUP_CONDITIONS << 9) | 0x35 +#define EC_WORD_AWFUL (EC_GROUP_CONDITIONS << 9) | 0x36 +#define EC_WORD_ALONE (EC_GROUP_CONDITIONS << 9) | 0x37 +#define EC_WORD_BORED (EC_GROUP_CONDITIONS << 9) | 0x38 +#define EC_WORD_SECRET (EC_GROUP_CONDITIONS << 9) | 0x39 +#define EC_WORD_MYSTERY (EC_GROUP_CONDITIONS << 9) | 0x3a +#define EC_WORD_LACKS (EC_GROUP_CONDITIONS << 9) | 0x3b +#define EC_WORD_BEST (EC_GROUP_CONDITIONS << 9) | 0x3c +#define EC_WORD_LOUSY (EC_GROUP_CONDITIONS << 9) | 0x3d +#define EC_WORD_MISTAKE (EC_GROUP_CONDITIONS << 9) | 0x3e +#define EC_WORD_KIND (EC_GROUP_CONDITIONS << 9) | 0x3f +#define EC_WORD_WELL (EC_GROUP_CONDITIONS << 9) | 0x40 +#define EC_WORD_WEAKENED (EC_GROUP_CONDITIONS << 9) | 0x41 +#define EC_WORD_SIMPLE (EC_GROUP_CONDITIONS << 9) | 0x42 +#define EC_WORD_SEEMS (EC_GROUP_CONDITIONS << 9) | 0x43 +#define EC_WORD_BADLY (EC_GROUP_CONDITIONS << 9) | 0x44 + +// ACTIONS +#define EC_WORD_MEETS (EC_GROUP_ACTIONS << 9) | 0x0 +#define EC_WORD_CONCEDE (EC_GROUP_ACTIONS << 9) | 0x1 +#define EC_WORD_GIVE (EC_GROUP_ACTIONS << 9) | 0x2 +#define EC_WORD_GIVES (EC_GROUP_ACTIONS << 9) | 0x3 +#define EC_WORD_PLAYED (EC_GROUP_ACTIONS << 9) | 0x4 +#define EC_WORD_PLAYS (EC_GROUP_ACTIONS << 9) | 0x5 +#define EC_WORD_COLLECT (EC_GROUP_ACTIONS << 9) | 0x6 +#define EC_WORD_WALKING (EC_GROUP_ACTIONS << 9) | 0x7 +#define EC_WORD_WALKS (EC_GROUP_ACTIONS << 9) | 0x8 +#define EC_WORD_SAYS (EC_GROUP_ACTIONS << 9) | 0x9 +#define EC_WORD_WENT (EC_GROUP_ACTIONS << 9) | 0xa +#define EC_WORD_SAID (EC_GROUP_ACTIONS << 9) | 0xb +#define EC_WORD_WAKE_UP (EC_GROUP_ACTIONS << 9) | 0xc +#define EC_WORD_WAKES_UP (EC_GROUP_ACTIONS << 9) | 0xd +#define EC_WORD_ANGERS (EC_GROUP_ACTIONS << 9) | 0xe +#define EC_WORD_TEACH (EC_GROUP_ACTIONS << 9) | 0xf +#define EC_WORD_TEACHES (EC_GROUP_ACTIONS << 9) | 0x10 +#define EC_WORD_PLEASE (EC_GROUP_ACTIONS << 9) | 0x11 +#define EC_WORD_LEARN (EC_GROUP_ACTIONS << 9) | 0x12 +#define EC_WORD_CHANGE (EC_GROUP_ACTIONS << 9) | 0x13 +#define EC_WORD_STORY (EC_GROUP_ACTIONS << 9) | 0x14 +#define EC_WORD_TRUST (EC_GROUP_ACTIONS << 9) | 0x15 +#define EC_WORD_LAVISH (EC_GROUP_ACTIONS << 9) | 0x16 +#define EC_WORD_LISTENS (EC_GROUP_ACTIONS << 9) | 0x17 +#define EC_WORD_HEARING (EC_GROUP_ACTIONS << 9) | 0x18 +#define EC_WORD_TRAINS (EC_GROUP_ACTIONS << 9) | 0x19 +#define EC_WORD_CHOOSE (EC_GROUP_ACTIONS << 9) | 0x1a +#define EC_WORD_COME (EC_GROUP_ACTIONS << 9) | 0x1b +#define EC_WORD_CAME (EC_GROUP_ACTIONS << 9) | 0x1c +#define EC_WORD_SEARCH (EC_GROUP_ACTIONS << 9) | 0x1d +#define EC_WORD_MAKE (EC_GROUP_ACTIONS << 9) | 0x1e +#define EC_WORD_CAUSE (EC_GROUP_ACTIONS << 9) | 0x1f +#define EC_WORD_KNOW (EC_GROUP_ACTIONS << 9) | 0x20 +#define EC_WORD_KNOWS (EC_GROUP_ACTIONS << 9) | 0x21 +#define EC_WORD_REFUSE (EC_GROUP_ACTIONS << 9) | 0x22 +#define EC_WORD_STORES (EC_GROUP_ACTIONS << 9) | 0x23 +#define EC_WORD_BRAG (EC_GROUP_ACTIONS << 9) | 0x24 +#define EC_WORD_IGNORANT (EC_GROUP_ACTIONS << 9) | 0x25 +#define EC_WORD_THINKS (EC_GROUP_ACTIONS << 9) | 0x26 +#define EC_WORD_BELIEVE (EC_GROUP_ACTIONS << 9) | 0x27 +#define EC_WORD_SLIDE (EC_GROUP_ACTIONS << 9) | 0x28 +#define EC_WORD_EATS (EC_GROUP_ACTIONS << 9) | 0x29 +#define EC_WORD_USE (EC_GROUP_ACTIONS << 9) | 0x2a +#define EC_WORD_USES (EC_GROUP_ACTIONS << 9) | 0x2b +#define EC_WORD_USING (EC_GROUP_ACTIONS << 9) | 0x2c +#define EC_WORD_COULDN_T (EC_GROUP_ACTIONS << 9) | 0x2d +#define EC_WORD_CAPABLE (EC_GROUP_ACTIONS << 9) | 0x2e +#define EC_WORD_DISAPPEAR (EC_GROUP_ACTIONS << 9) | 0x2f +#define EC_WORD_APPEAR (EC_GROUP_ACTIONS << 9) | 0x30 +#define EC_WORD_THROW (EC_GROUP_ACTIONS << 9) | 0x31 +#define EC_WORD_WORRY (EC_GROUP_ACTIONS << 9) | 0x32 +#define EC_WORD_SLEPT (EC_GROUP_ACTIONS << 9) | 0x33 +#define EC_WORD_SLEEP (EC_GROUP_ACTIONS << 9) | 0x34 +#define EC_WORD_RELEASE (EC_GROUP_ACTIONS << 9) | 0x35 +#define EC_WORD_DRINKS (EC_GROUP_ACTIONS << 9) | 0x36 +#define EC_WORD_RUNS (EC_GROUP_ACTIONS << 9) | 0x37 +#define EC_WORD_RUN (EC_GROUP_ACTIONS << 9) | 0x38 +#define EC_WORD_WORKS (EC_GROUP_ACTIONS << 9) | 0x39 +#define EC_WORD_WORKING (EC_GROUP_ACTIONS << 9) | 0x3a +#define EC_WORD_TALKING (EC_GROUP_ACTIONS << 9) | 0x3b +#define EC_WORD_TALK (EC_GROUP_ACTIONS << 9) | 0x3c +#define EC_WORD_SINK (EC_GROUP_ACTIONS << 9) | 0x3d +#define EC_WORD_SMACK (EC_GROUP_ACTIONS << 9) | 0x3e +#define EC_WORD_PRETEND (EC_GROUP_ACTIONS << 9) | 0x3f +#define EC_WORD_PRAISE (EC_GROUP_ACTIONS << 9) | 0x40 +#define EC_WORD_OVERDO (EC_GROUP_ACTIONS << 9) | 0x41 +#define EC_WORD_SHOW (EC_GROUP_ACTIONS << 9) | 0x42 +#define EC_WORD_LOOKS (EC_GROUP_ACTIONS << 9) | 0x43 +#define EC_WORD_SEES (EC_GROUP_ACTIONS << 9) | 0x44 +#define EC_WORD_SEEK (EC_GROUP_ACTIONS << 9) | 0x45 +#define EC_WORD_OWN (EC_GROUP_ACTIONS << 9) | 0x46 +#define EC_WORD_TAKE (EC_GROUP_ACTIONS << 9) | 0x47 +#define EC_WORD_ALLOW (EC_GROUP_ACTIONS << 9) | 0x48 +#define EC_WORD_FORGET (EC_GROUP_ACTIONS << 9) | 0x49 +#define EC_WORD_FORGETS (EC_GROUP_ACTIONS << 9) | 0x4a +#define EC_WORD_APPEARS (EC_GROUP_ACTIONS << 9) | 0x4b +#define EC_WORD_FAINT (EC_GROUP_ACTIONS << 9) | 0x4c +#define EC_WORD_FAINTED (EC_GROUP_ACTIONS << 9) | 0x4d + +// LIFESTYLE +#define EC_WORD_CHORES (EC_GROUP_LIFESTYLE << 9) | 0x0 +#define EC_WORD_HOME (EC_GROUP_LIFESTYLE << 9) | 0x1 +#define EC_WORD_MONEY (EC_GROUP_LIFESTYLE << 9) | 0x2 +#define EC_WORD_ALLOWANCE (EC_GROUP_LIFESTYLE << 9) | 0x3 +#define EC_WORD_BATH (EC_GROUP_LIFESTYLE << 9) | 0x4 +#define EC_WORD_CONVERSATION (EC_GROUP_LIFESTYLE << 9) | 0x5 +#define EC_WORD_SCHOOL (EC_GROUP_LIFESTYLE << 9) | 0x6 +#define EC_WORD_COMMEMORATE (EC_GROUP_LIFESTYLE << 9) | 0x7 +#define EC_WORD_HABIT (EC_GROUP_LIFESTYLE << 9) | 0x8 +#define EC_WORD_GROUP (EC_GROUP_LIFESTYLE << 9) | 0x9 +#define EC_WORD_WORD (EC_GROUP_LIFESTYLE << 9) | 0xa +#define EC_WORD_STORE (EC_GROUP_LIFESTYLE << 9) | 0xb +#define EC_WORD_SERVICE (EC_GROUP_LIFESTYLE << 9) | 0xc +#define EC_WORD_WORK (EC_GROUP_LIFESTYLE << 9) | 0xd +#define EC_WORD_SYSTEM (EC_GROUP_LIFESTYLE << 9) | 0xe +#define EC_WORD_TRAIN (EC_GROUP_LIFESTYLE << 9) | 0xf +#define EC_WORD_CLASS (EC_GROUP_LIFESTYLE << 9) | 0x10 +#define EC_WORD_LESSONS (EC_GROUP_LIFESTYLE << 9) | 0x11 +#define EC_WORD_INFORMATION (EC_GROUP_LIFESTYLE << 9) | 0x12 +#define EC_WORD_LIVING (EC_GROUP_LIFESTYLE << 9) | 0x13 +#define EC_WORD_TEACHER (EC_GROUP_LIFESTYLE << 9) | 0x14 +#define EC_WORD_TOURNAMENT (EC_GROUP_LIFESTYLE << 9) | 0x15 +#define EC_WORD_LETTER (EC_GROUP_LIFESTYLE << 9) | 0x16 +#define EC_WORD_EVENT (EC_GROUP_LIFESTYLE << 9) | 0x17 +#define EC_WORD_DIGITAL (EC_GROUP_LIFESTYLE << 9) | 0x18 +#define EC_WORD_TEST (EC_GROUP_LIFESTYLE << 9) | 0x19 +#define EC_WORD_DEPT_STORE (EC_GROUP_LIFESTYLE << 9) | 0x1a +#define EC_WORD_TELEVISION (EC_GROUP_LIFESTYLE << 9) | 0x1b +#define EC_WORD_PHONE (EC_GROUP_LIFESTYLE << 9) | 0x1c +#define EC_WORD_ITEM (EC_GROUP_LIFESTYLE << 9) | 0x1d +#define EC_WORD_NAME (EC_GROUP_LIFESTYLE << 9) | 0x1e +#define EC_WORD_NEWS (EC_GROUP_LIFESTYLE << 9) | 0x1f +#define EC_WORD_POPULAR (EC_GROUP_LIFESTYLE << 9) | 0x20 +#define EC_WORD_PARTY (EC_GROUP_LIFESTYLE << 9) | 0x21 +#define EC_WORD_STUDY (EC_GROUP_LIFESTYLE << 9) | 0x22 +#define EC_WORD_MACHINE (EC_GROUP_LIFESTYLE << 9) | 0x23 +#define EC_WORD_MAIL (EC_GROUP_LIFESTYLE << 9) | 0x24 +#define EC_WORD_MESSAGE (EC_GROUP_LIFESTYLE << 9) | 0x25 +#define EC_WORD_PROMISE (EC_GROUP_LIFESTYLE << 9) | 0x26 +#define EC_WORD_DREAM (EC_GROUP_LIFESTYLE << 9) | 0x27 +#define EC_WORD_KINDERGARTEN (EC_GROUP_LIFESTYLE << 9) | 0x28 +#define EC_WORD_LIFE (EC_GROUP_LIFESTYLE << 9) | 0x29 +#define EC_WORD_RADIO (EC_GROUP_LIFESTYLE << 9) | 0x2a +#define EC_WORD_RENTAL (EC_GROUP_LIFESTYLE << 9) | 0x2b +#define EC_WORD_WORLD (EC_GROUP_LIFESTYLE << 9) | 0x2c + +// HOBBIES +#define EC_WORD_IDOL (EC_GROUP_HOBBIES << 9) | 0x0 +#define EC_WORD_ANIME (EC_GROUP_HOBBIES << 9) | 0x1 +#define EC_WORD_SONG (EC_GROUP_HOBBIES << 9) | 0x2 +#define EC_WORD_MOVIE (EC_GROUP_HOBBIES << 9) | 0x3 +#define EC_WORD_SWEETS (EC_GROUP_HOBBIES << 9) | 0x4 +#define EC_WORD_CHAT (EC_GROUP_HOBBIES << 9) | 0x5 +#define EC_WORD_CHILD_S_PLAY (EC_GROUP_HOBBIES << 9) | 0x6 +#define EC_WORD_TOYS (EC_GROUP_HOBBIES << 9) | 0x7 +#define EC_WORD_MUSIC (EC_GROUP_HOBBIES << 9) | 0x8 +#define EC_WORD_CARDS (EC_GROUP_HOBBIES << 9) | 0x9 +#define EC_WORD_SHOPPING (EC_GROUP_HOBBIES << 9) | 0xa +#define EC_WORD_CAMERA (EC_GROUP_HOBBIES << 9) | 0xb +#define EC_WORD_VIEWING (EC_GROUP_HOBBIES << 9) | 0xc +#define EC_WORD_SPECTATOR (EC_GROUP_HOBBIES << 9) | 0xd +#define EC_WORD_GOURMET (EC_GROUP_HOBBIES << 9) | 0xe +#define EC_WORD_GAME (EC_GROUP_HOBBIES << 9) | 0xf +#define EC_WORD_RPG (EC_GROUP_HOBBIES << 9) | 0x10 +#define EC_WORD_COLLECTION (EC_GROUP_HOBBIES << 9) | 0x11 +#define EC_WORD_COMPLETE (EC_GROUP_HOBBIES << 9) | 0x12 +#define EC_WORD_MAGAZINE (EC_GROUP_HOBBIES << 9) | 0x13 +#define EC_WORD_WALK (EC_GROUP_HOBBIES << 9) | 0x14 +#define EC_WORD_BIKE (EC_GROUP_HOBBIES << 9) | 0x15 +#define EC_WORD_HOBBY (EC_GROUP_HOBBIES << 9) | 0x16 +#define EC_WORD_SPORTS (EC_GROUP_HOBBIES << 9) | 0x17 +#define EC_WORD_SOFTWARE (EC_GROUP_HOBBIES << 9) | 0x18 +#define EC_WORD_SONGS (EC_GROUP_HOBBIES << 9) | 0x19 +#define EC_WORD_DIET (EC_GROUP_HOBBIES << 9) | 0x1a +#define EC_WORD_TREASURE (EC_GROUP_HOBBIES << 9) | 0x1b +#define EC_WORD_TRAVEL (EC_GROUP_HOBBIES << 9) | 0x1c +#define EC_WORD_DANCE (EC_GROUP_HOBBIES << 9) | 0x1d +#define EC_WORD_CHANNEL (EC_GROUP_HOBBIES << 9) | 0x1e +#define EC_WORD_MAKING (EC_GROUP_HOBBIES << 9) | 0x1f +#define EC_WORD_FISHING (EC_GROUP_HOBBIES << 9) | 0x20 +#define EC_WORD_DATE (EC_GROUP_HOBBIES << 9) | 0x21 +#define EC_WORD_DESIGN (EC_GROUP_HOBBIES << 9) | 0x22 +#define EC_WORD_LOCOMOTIVE (EC_GROUP_HOBBIES << 9) | 0x23 +#define EC_WORD_PLUSH_DOLL (EC_GROUP_HOBBIES << 9) | 0x24 +#define EC_WORD_PC (EC_GROUP_HOBBIES << 9) | 0x25 +#define EC_WORD_FLOWERS (EC_GROUP_HOBBIES << 9) | 0x26 +#define EC_WORD_HERO (EC_GROUP_HOBBIES << 9) | 0x27 +#define EC_WORD_NAP (EC_GROUP_HOBBIES << 9) | 0x28 +#define EC_WORD_HEROINE (EC_GROUP_HOBBIES << 9) | 0x29 +#define EC_WORD_FASHION (EC_GROUP_HOBBIES << 9) | 0x2a +#define EC_WORD_ADVENTURE (EC_GROUP_HOBBIES << 9) | 0x2b +#define EC_WORD_BOARD (EC_GROUP_HOBBIES << 9) | 0x2c +#define EC_WORD_BALL (EC_GROUP_HOBBIES << 9) | 0x2d +#define EC_WORD_BOOK (EC_GROUP_HOBBIES << 9) | 0x2e +#define EC_WORD_FESTIVAL (EC_GROUP_HOBBIES << 9) | 0x2f +#define EC_WORD_COMICS (EC_GROUP_HOBBIES << 9) | 0x30 +#define EC_WORD_HOLIDAY (EC_GROUP_HOBBIES << 9) | 0x31 +#define EC_WORD_PLANS (EC_GROUP_HOBBIES << 9) | 0x32 +#define EC_WORD_TRENDY (EC_GROUP_HOBBIES << 9) | 0x33 +#define EC_WORD_VACATION (EC_GROUP_HOBBIES << 9) | 0x34 +#define EC_WORD_LOOK (EC_GROUP_HOBBIES << 9) | 0x35 + +// TIME +#define EC_WORD_FALL (EC_GROUP_TIME << 9) | 0x0 +#define EC_WORD_MORNING (EC_GROUP_TIME << 9) | 0x1 +#define EC_WORD_TOMORROW (EC_GROUP_TIME << 9) | 0x2 +#define EC_WORD_LAST (EC_GROUP_TIME << 9) | 0x3 +#define EC_WORD_DAY (EC_GROUP_TIME << 9) | 0x4 +#define EC_WORD_SOMETIME (EC_GROUP_TIME << 9) | 0x5 +#define EC_WORD_ALWAYS (EC_GROUP_TIME << 9) | 0x6 +#define EC_WORD_CURRENT (EC_GROUP_TIME << 9) | 0x7 +#define EC_WORD_FOREVER (EC_GROUP_TIME << 9) | 0x8 +#define EC_WORD_DAYS (EC_GROUP_TIME << 9) | 0x9 +#define EC_WORD_END (EC_GROUP_TIME << 9) | 0xa +#define EC_WORD_TUESDAY (EC_GROUP_TIME << 9) | 0xb +#define EC_WORD_YESTERDAY (EC_GROUP_TIME << 9) | 0xc +#define EC_WORD_TODAY (EC_GROUP_TIME << 9) | 0xd +#define EC_WORD_FRIDAY (EC_GROUP_TIME << 9) | 0xe +#define EC_WORD_MONDAY (EC_GROUP_TIME << 9) | 0xf +#define EC_WORD_LATER (EC_GROUP_TIME << 9) | 0x10 +#define EC_WORD_EARLIER (EC_GROUP_TIME << 9) | 0x11 +#define EC_WORD_ANOTHER (EC_GROUP_TIME << 9) | 0x12 +#define EC_WORD_TIME (EC_GROUP_TIME << 9) | 0x13 +#define EC_WORD_FINISH (EC_GROUP_TIME << 9) | 0x14 +#define EC_WORD_WEDNESDAY (EC_GROUP_TIME << 9) | 0x15 +#define EC_WORD_SOON (EC_GROUP_TIME << 9) | 0x16 +#define EC_WORD_START (EC_GROUP_TIME << 9) | 0x17 +#define EC_WORD_MONTH (EC_GROUP_TIME << 9) | 0x18 +#define EC_WORD_STOP (EC_GROUP_TIME << 9) | 0x19 +#define EC_WORD_NOW (EC_GROUP_TIME << 9) | 0x1a +#define EC_WORD_FINAL (EC_GROUP_TIME << 9) | 0x1b +#define EC_WORD_NEXT (EC_GROUP_TIME << 9) | 0x1c +#define EC_WORD_AGE (EC_GROUP_TIME << 9) | 0x1d +#define EC_WORD_SATURDAY (EC_GROUP_TIME << 9) | 0x1e +#define EC_WORD_SUMMER (EC_GROUP_TIME << 9) | 0x1f +#define EC_WORD_SUNDAY (EC_GROUP_TIME << 9) | 0x20 +#define EC_WORD_BEGINNING (EC_GROUP_TIME << 9) | 0x21 +#define EC_WORD_SPRING (EC_GROUP_TIME << 9) | 0x22 +#define EC_WORD_DAYTIME (EC_GROUP_TIME << 9) | 0x23 +#define EC_WORD_WINTER (EC_GROUP_TIME << 9) | 0x24 +#define EC_WORD_DAILY (EC_GROUP_TIME << 9) | 0x25 +#define EC_WORD_OLDEN (EC_GROUP_TIME << 9) | 0x26 +#define EC_WORD_ALMOST (EC_GROUP_TIME << 9) | 0x27 +#define EC_WORD_NEARLY (EC_GROUP_TIME << 9) | 0x28 +#define EC_WORD_THURSDAY (EC_GROUP_TIME << 9) | 0x29 +#define EC_WORD_NIGHTTIME (EC_GROUP_TIME << 9) | 0x2a +#define EC_WORD_NIGHT (EC_GROUP_TIME << 9) | 0x2b +#define EC_WORD_WEEK (EC_GROUP_TIME << 9) | 0x2c + +// MISC +#define EC_WORD_HIGHS (EC_GROUP_MISC << 9) | 0x0 +#define EC_WORD_LOWS (EC_GROUP_MISC << 9) | 0x1 +#define EC_WORD_UM (EC_GROUP_MISC << 9) | 0x2 +#define EC_WORD_REAR (EC_GROUP_MISC << 9) | 0x3 +#define EC_WORD_THINGS (EC_GROUP_MISC << 9) | 0x4 +#define EC_WORD_THING (EC_GROUP_MISC << 9) | 0x5 +#define EC_WORD_BELOW (EC_GROUP_MISC << 9) | 0x6 +#define EC_WORD_ABOVE (EC_GROUP_MISC << 9) | 0x7 +#define EC_WORD_BACK (EC_GROUP_MISC << 9) | 0x8 +#define EC_WORD_HIGH (EC_GROUP_MISC << 9) | 0x9 +#define EC_WORD_HERE (EC_GROUP_MISC << 9) | 0xa +#define EC_WORD_INSIDE (EC_GROUP_MISC << 9) | 0xb +#define EC_WORD_OUTSIDE (EC_GROUP_MISC << 9) | 0xc +#define EC_WORD_BESIDE (EC_GROUP_MISC << 9) | 0xd +#define EC_WORD_THIS_IS_IT_EXCL (EC_GROUP_MISC << 9) | 0xe +#define EC_WORD_THIS (EC_GROUP_MISC << 9) | 0xf +#define EC_WORD_EVERY (EC_GROUP_MISC << 9) | 0x10 +#define EC_WORD_THESE (EC_GROUP_MISC << 9) | 0x11 +#define EC_WORD_THESE_WERE (EC_GROUP_MISC << 9) | 0x12 +#define EC_WORD_DOWN (EC_GROUP_MISC << 9) | 0x13 +#define EC_WORD_THAT (EC_GROUP_MISC << 9) | 0x14 +#define EC_WORD_THOSE_ARE (EC_GROUP_MISC << 9) | 0x15 +#define EC_WORD_THOSE_WERE (EC_GROUP_MISC << 9) | 0x16 +#define EC_WORD_THAT_S_IT_EXCL (EC_GROUP_MISC << 9) | 0x17 +#define EC_WORD_AM (EC_GROUP_MISC << 9) | 0x18 +#define EC_WORD_THAT_WAS (EC_GROUP_MISC << 9) | 0x19 +#define EC_WORD_FRONT (EC_GROUP_MISC << 9) | 0x1a +#define EC_WORD_UP (EC_GROUP_MISC << 9) | 0x1b +#define EC_WORD_CHOICE (EC_GROUP_MISC << 9) | 0x1c +#define EC_WORD_FAR (EC_GROUP_MISC << 9) | 0x1d +#define EC_WORD_AWAY (EC_GROUP_MISC << 9) | 0x1e +#define EC_WORD_NEAR (EC_GROUP_MISC << 9) | 0x1f +#define EC_WORD_WHERE (EC_GROUP_MISC << 9) | 0x20 +#define EC_WORD_WHEN (EC_GROUP_MISC << 9) | 0x21 +#define EC_WORD_WHAT (EC_GROUP_MISC << 9) | 0x22 +#define EC_WORD_DEEP (EC_GROUP_MISC << 9) | 0x23 +#define EC_WORD_SHALLOW (EC_GROUP_MISC << 9) | 0x24 +#define EC_WORD_WHY (EC_GROUP_MISC << 9) | 0x25 +#define EC_WORD_CONFUSED (EC_GROUP_MISC << 9) | 0x26 +#define EC_WORD_OPPOSITE (EC_GROUP_MISC << 9) | 0x27 +#define EC_WORD_LEFT (EC_GROUP_MISC << 9) | 0x28 +#define EC_WORD_RIGHT (EC_GROUP_MISC << 9) | 0x29 + +// ADJECTIVES +#define EC_WORD_WANDERING (EC_GROUP_ADJECTIVES << 9) | 0x0 +#define EC_WORD_RICKETY (EC_GROUP_ADJECTIVES << 9) | 0x1 +#define EC_WORD_ROCK_SOLID (EC_GROUP_ADJECTIVES << 9) | 0x2 +#define EC_WORD_HUNGRY (EC_GROUP_ADJECTIVES << 9) | 0x3 +#define EC_WORD_TIGHT (EC_GROUP_ADJECTIVES << 9) | 0x4 +#define EC_WORD_TICKLISH (EC_GROUP_ADJECTIVES << 9) | 0x5 +#define EC_WORD_TWIRLING (EC_GROUP_ADJECTIVES << 9) | 0x6 +#define EC_WORD_SPIRALING (EC_GROUP_ADJECTIVES << 9) | 0x7 +#define EC_WORD_THIRSTY (EC_GROUP_ADJECTIVES << 9) | 0x8 +#define EC_WORD_LOLLING (EC_GROUP_ADJECTIVES << 9) | 0x9 +#define EC_WORD_SILKY (EC_GROUP_ADJECTIVES << 9) | 0xa +#define EC_WORD_SADLY (EC_GROUP_ADJECTIVES << 9) | 0xb +#define EC_WORD_HOPELESS (EC_GROUP_ADJECTIVES << 9) | 0xc +#define EC_WORD_USELESS (EC_GROUP_ADJECTIVES << 9) | 0xd +#define EC_WORD_DROOLING (EC_GROUP_ADJECTIVES << 9) | 0xe +#define EC_WORD_EXCITING (EC_GROUP_ADJECTIVES << 9) | 0xf +#define EC_WORD_THICK (EC_GROUP_ADJECTIVES << 9) | 0x10 +#define EC_WORD_SMOOTH (EC_GROUP_ADJECTIVES << 9) | 0x11 +#define EC_WORD_SLIMY (EC_GROUP_ADJECTIVES << 9) | 0x12 +#define EC_WORD_THIN (EC_GROUP_ADJECTIVES << 9) | 0x13 +#define EC_WORD_BREAK (EC_GROUP_ADJECTIVES << 9) | 0x14 +#define EC_WORD_VORACIOUS (EC_GROUP_ADJECTIVES << 9) | 0x15 +#define EC_WORD_SCATTER (EC_GROUP_ADJECTIVES << 9) | 0x16 +#define EC_WORD_AWESOME (EC_GROUP_ADJECTIVES << 9) | 0x17 +#define EC_WORD_WIMPY (EC_GROUP_ADJECTIVES << 9) | 0x18 +#define EC_WORD_WOBBLY (EC_GROUP_ADJECTIVES << 9) | 0x19 +#define EC_WORD_SHAKY (EC_GROUP_ADJECTIVES << 9) | 0x1a +#define EC_WORD_RIPPED (EC_GROUP_ADJECTIVES << 9) | 0x1b +#define EC_WORD_SHREDDED (EC_GROUP_ADJECTIVES << 9) | 0x1c +#define EC_WORD_INCREASING (EC_GROUP_ADJECTIVES << 9) | 0x1d +#define EC_WORD_YET (EC_GROUP_ADJECTIVES << 9) | 0x1e +#define EC_WORD_DESTROYED (EC_GROUP_ADJECTIVES << 9) | 0x1f +#define EC_WORD_FIERY (EC_GROUP_ADJECTIVES << 9) | 0x20 +#define EC_WORD_LOVEY_DOVEY (EC_GROUP_ADJECTIVES << 9) | 0x21 +#define EC_WORD_HAPPILY (EC_GROUP_ADJECTIVES << 9) | 0x22 +#define EC_WORD_ANTICIPATION (EC_GROUP_ADJECTIVES << 9) | 0x23 + +// EVENTS +#define EC_WORD_APPEAL (EC_GROUP_EVENTS << 9) | 0x0 +#define EC_WORD_EVENTS (EC_GROUP_EVENTS << 9) | 0x1 +#define EC_WORD_STAY_AT_HOME (EC_GROUP_EVENTS << 9) | 0x2 +#define EC_WORD_BERRY (EC_GROUP_EVENTS << 9) | 0x3 +#define EC_WORD_CONTEST (EC_GROUP_EVENTS << 9) | 0x4 +#define EC_WORD_MC (EC_GROUP_EVENTS << 9) | 0x5 +#define EC_WORD_JUDGE (EC_GROUP_EVENTS << 9) | 0x6 +#define EC_WORD_SUPER (EC_GROUP_EVENTS << 9) | 0x7 +#define EC_WORD_STAGE (EC_GROUP_EVENTS << 9) | 0x8 +#define EC_WORD_HALL_OF_FAME (EC_GROUP_EVENTS << 9) | 0x9 +#define EC_WORD_EVOLUTION (EC_GROUP_EVENTS << 9) | 0xa +#define EC_WORD_HYPER (EC_GROUP_EVENTS << 9) | 0xb +#define EC_WORD_BATTLE_TOWER (EC_GROUP_EVENTS << 9) | 0xc +#define EC_WORD_LEADERS (EC_GROUP_EVENTS << 9) | 0xd +#define EC_WORD_BATTLE_ROOM (EC_GROUP_EVENTS << 9) | 0xe +#define EC_WORD_HIDDEN (EC_GROUP_EVENTS << 9) | 0xf +#define EC_WORD_SECRET_BASE (EC_GROUP_EVENTS << 9) | 0x10 +#define EC_WORD_BLEND (EC_GROUP_EVENTS << 9) | 0x11 +#define EC_WORD_POKEBLOCK (EC_GROUP_EVENTS << 9) | 0x12 +#define EC_WORD_MASTER (EC_GROUP_EVENTS << 9) | 0x13 +#define EC_WORD_RANK (EC_GROUP_EVENTS << 9) | 0x14 +#define EC_WORD_RIBBON (EC_GROUP_EVENTS << 9) | 0x15 + +// TRENDY_SAYING +#define EC_WORD_KTHX_BYE (EC_GROUP_TRENDY_SAYING << 9) | 0x0 +#define EC_WORD_YES_SIR_EXCL (EC_GROUP_TRENDY_SAYING << 9) | 0x1 +#define EC_WORD_AVANT_GARDE (EC_GROUP_TRENDY_SAYING << 9) | 0x2 +#define EC_WORD_COUPLE (EC_GROUP_TRENDY_SAYING << 9) | 0x3 +#define EC_WORD_MUCH_OBLIGED (EC_GROUP_TRENDY_SAYING << 9) | 0x4 +#define EC_WORD_YEEHAW_EXCL (EC_GROUP_TRENDY_SAYING << 9) | 0x5 +#define EC_WORD_MEGA (EC_GROUP_TRENDY_SAYING << 9) | 0x6 +#define EC_WORD_1_HIT_KO_EXCL (EC_GROUP_TRENDY_SAYING << 9) | 0x7 +#define EC_WORD_DESTINY (EC_GROUP_TRENDY_SAYING << 9) | 0x8 +#define EC_WORD_CANCEL (EC_GROUP_TRENDY_SAYING << 9) | 0x9 +#define EC_WORD_NEW (EC_GROUP_TRENDY_SAYING << 9) | 0xa +#define EC_WORD_FLATTEN (EC_GROUP_TRENDY_SAYING << 9) | 0xb +#define EC_WORD_KIDDING (EC_GROUP_TRENDY_SAYING << 9) | 0xc +#define EC_WORD_LOSER (EC_GROUP_TRENDY_SAYING << 9) | 0xd +#define EC_WORD_LOSING (EC_GROUP_TRENDY_SAYING << 9) | 0xe +#define EC_WORD_HAPPENING (EC_GROUP_TRENDY_SAYING << 9) | 0xf +#define EC_WORD_HIP_AND (EC_GROUP_TRENDY_SAYING << 9) | 0x10 +#define EC_WORD_SHAKE (EC_GROUP_TRENDY_SAYING << 9) | 0x11 +#define EC_WORD_SHADY (EC_GROUP_TRENDY_SAYING << 9) | 0x12 +#define EC_WORD_UPBEAT (EC_GROUP_TRENDY_SAYING << 9) | 0x13 +#define EC_WORD_MODERN (EC_GROUP_TRENDY_SAYING << 9) | 0x14 +#define EC_WORD_SMELL_YA (EC_GROUP_TRENDY_SAYING << 9) | 0x15 +#define EC_WORD_BANG (EC_GROUP_TRENDY_SAYING << 9) | 0x16 +#define EC_WORD_KNOCKOUT (EC_GROUP_TRENDY_SAYING << 9) | 0x17 +#define EC_WORD_HASSLE (EC_GROUP_TRENDY_SAYING << 9) | 0x18 +#define EC_WORD_WINNER (EC_GROUP_TRENDY_SAYING << 9) | 0x19 +#define EC_WORD_FEVER (EC_GROUP_TRENDY_SAYING << 9) | 0x1a +#define EC_WORD_WANNABE (EC_GROUP_TRENDY_SAYING << 9) | 0x1b +#define EC_WORD_BABY (EC_GROUP_TRENDY_SAYING << 9) | 0x1c +#define EC_WORD_HEART (EC_GROUP_TRENDY_SAYING << 9) | 0x1d +#define EC_WORD_OLD (EC_GROUP_TRENDY_SAYING << 9) | 0x1e +#define EC_WORD_YOUNG (EC_GROUP_TRENDY_SAYING << 9) | 0x1f +#define EC_WORD_UGLY (EC_GROUP_TRENDY_SAYING << 9) | 0x20 + +#endif // GUARD_EASY_CHAT_CONSTANTS diff --git a/include/global.h b/include/global.h index f076274cc..bb501ac93 100644 --- a/include/global.h +++ b/include/global.h @@ -447,11 +447,19 @@ struct MailStruct /*0x20*/ u16 itemId; }; -struct UnkMauvilleOldManStruct + +// Mauville Pokemon Center men + +struct MauvilleManCommon +{ + u8 id; +}; + +struct MauvilleManBard { - u8 unk_2D94; + u8 id; u8 unk_2D95; - /*0x2D96*/ u16 mauvilleOldMan_ecArray[6]; + /*0x2D96*/ u16 songLyrics[6]; /*0x2DA2*/ u16 mauvilleOldMan_ecArray2[6]; /*0x2DAE*/ u8 playerName[8]; /*0x2DB6*/ u8 filler_2DB6[0x3]; @@ -459,29 +467,43 @@ struct UnkMauvilleOldManStruct u8 unk_2DBD; }; /*size = 0x2C*/ -struct UnkMauvilleOldManStruct2 +struct MauvilleManHipster { - u8 filler0; + u8 id; u8 unk1; - u8 unk2; - u16 mauvilleOldMan_ecArray[10]; - u8 mauvilleOldMan_ecArray2[12]; - u8 fillerF[0x2]; -}; /*size = 0x2C*/ +}; -struct MauvilleOldManTrader +struct MauvilleManTrader { - u8 unk0; + u8 id; u8 unk1[4]; u8 unk5[4][11]; u8 unk31; }; +struct MauvilleManStoryteller +{ + u8 id; +}; + +struct MauvilleManGiddy +{ + u8 id; + u8 unk1; + u8 unk2; + u16 mauvilleOldMan_ecArray[10]; + u8 mauvilleOldMan_ecArray2[12]; + u8 fillerF[0x2]; +}; /*size = 0x2C*/ + typedef union OldMan { - struct UnkMauvilleOldManStruct oldMan1; - struct UnkMauvilleOldManStruct2 oldMan2; - struct MauvilleOldManTrader trader; + struct MauvilleManCommon common; + struct MauvilleManBard bard; + struct MauvilleManHipster hipster; + struct MauvilleManTrader trader; + struct MauvilleManStoryteller storyteller; + struct MauvilleManGiddy giddy; u8 filler[0x40]; } OldMan; diff --git a/include/mauville_old_man.h b/include/mauville_old_man.h index 473fcf5c8..2fd467029 100644 --- a/include/mauville_old_man.h +++ b/include/mauville_old_man.h @@ -1,11 +1,21 @@ #ifndef GUARD_MAUVILLE_OLD_MAN_H #define GUARD_MAUVILLE_OLD_MAN_H -void SetMauvilleOldMan(void); +// IDs +enum +{ + MAUVILLE_MAN_BARD, + MAUVILLE_MAN_HIPSTER, + MAUVILLE_MAN_TRADER, + MAUVILLE_MAN_STORYTELLER, + MAUVILLE_MAN_GIDDY, +}; + +void SetupMauvilleOldMan(void); void sub_80F7DC0(void); void sub_80F7F30(void); void sub_80F7F80(u8); void sub_80F83D0(void); -void sub_80F83F8(void); +void StorytellerSetup(void); #endif // GUARD_MAUVILLE_OLD_MAN_H diff --git a/include/trader.h b/include/trader.h index 24a9f2a07..e8691be6e 100644 --- a/include/trader.h +++ b/include/trader.h @@ -1,6 +1,6 @@ #ifndef GUARD_TRADER_H #define GUARD_TRADER_H -void sub_81099CC(void); +void TraderSetup(void); #endif // GUARD_TRADER_H diff --git a/ld_script.txt b/ld_script.txt index 75117faa6..4b7d28768 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -421,6 +421,7 @@ SECTIONS { data/easy_chat.o(.rodata); data/pokenav.o(.rodata); data/mon_markings.o(.rodata); + src/mauville_old_man.o(.rodata); data/mauville_old_man.o(.rodata); data/mail.o(.rodata); src/menu_helpers.o(.rodata); diff --git a/src/easy_chat.c b/src/easy_chat.c index cca8c1355..e0073d8d8 100644 --- a/src/easy_chat.c +++ b/src/easy_chat.c @@ -19,7 +19,6 @@ extern const u8 gEasyChatGroupSizes[]; extern u16 gSpecialVar_0x8004; - u8 *sub_80EB3FC(u8 *dst, u16 word) { u16 group; diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index 93684fc60..84c8f740c 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -1,6 +1,7 @@ #include "global.h" #include "mauville_old_man.h" #include "easy_chat.h" +#include "easy_chat_constants.h" #include "menu.h" #include "rng.h" #include "script.h" @@ -11,79 +12,129 @@ extern u16 gScriptResult; extern u16 gSpecialVar_0x8004; -extern u32 gUnknown_083E5388[]; -extern u32 gUnknown_083E53A8[]; +extern const u8 *gGiddyAdjectives[]; +extern const u8 *gGiddyQuestions[]; -extern u16 gUnknown_083E537C[]; - -void sub_80F7A34(void) +const u16 gDefaultBardSongLyrics[] = +{ +#ifdef ENGLISH + EC_WORD_SISTER, + EC_WORD_EATS, + EC_WORD_SWEETS, + EC_WORD_VORACIOUS, + EC_WORD_AND, + EC_WORD_DROOLING, +#else + EC_WORD_SISTER, + EC_WORD_MUST_BE, + EC_WORD_SWEETS, + EC_WORD_VORACIOUS, + EC_WORD_DROOLING, + EC_WORD_THICK, +#endif +}; + +void SetupBard(void) { u16 i; - OldMan *oldMan = &gSaveBlock1.oldMan; + struct MauvilleManBard *bard = &gSaveBlock1.oldMan.bard; - oldMan->oldMan1.unk_2D94 = 0; - oldMan->oldMan1.unk_2DBD = 0; - - for(i = 0; i < 6; i++) - oldMan->oldMan1.mauvilleOldMan_ecArray[i] = gUnknown_083E537C[i]; + bard->id = MAUVILLE_MAN_BARD; + bard->unk_2DBD = 0; + for (i = 0; i < 6; i++) + bard->songLyrics[i] = gDefaultBardSongLyrics[i]; } -void sub_80F7A6C(void) +void SetupHipster(void) { - struct UnkMauvilleOldManStruct *bard = &gSaveBlock1.oldMan.oldMan1; + struct MauvilleManHipster *hipster = &gSaveBlock1.oldMan.hipster; - bard->unk_2D94 = 1; - bard->unk_2D95 = 0; + hipster->id = MAUVILLE_MAN_HIPSTER; + hipster->unk1 = 0; } -void sub_80F7A7C(void) +void SetupStoryteller(void) { - sub_80F83F8(); + StorytellerSetup(); } -void sub_80F7A88(void) +void SetupGiddy(void) { - OldMan *oldMan = &gSaveBlock1.oldMan; + struct MauvilleManGiddy *giddy = &gSaveBlock1.oldMan.giddy; - oldMan->oldMan1.unk_2D94 = 4; - oldMan->oldMan1.unk_2D95 = 0; + giddy->id = MAUVILLE_MAN_GIDDY; + giddy->unk1 = 0; } -void sub_80F7A98(void) +void SetupTrader(void) { - sub_81099CC(); + TraderSetup(); } -void SetMauvilleOldMan(void) +void SetupMauvilleOldMan(void) { - u32 var = ((u16)((gSaveBlock2.playerTrainerId[1] << 8 | gSaveBlock2.playerTrainerId[0])) % 10) / 2; + u16 trainerId = (gSaveBlock2.playerTrainerId[1] << 8) | gSaveBlock2.playerTrainerId[0]; - switch(var) + // Determine man based on the last digit of the player's trainer ID. + switch ((trainerId % 10) / 2) { - case 0: - sub_80F7A34(); + case MAUVILLE_MAN_BARD: + SetupBard(); break; - case 1: - sub_80F7A6C(); + case MAUVILLE_MAN_HIPSTER: + SetupHipster(); break; - case 2: - sub_80F7A98(); + case MAUVILLE_MAN_TRADER: + SetupTrader(); break; - case 3: - sub_80F7A7C(); + case MAUVILLE_MAN_STORYTELLER: + SetupStoryteller(); break; - case 4: - sub_80F7A88(); + case MAUVILLE_MAN_GIDDY: + SetupGiddy(); break; } sub_80F83D0(); } +/* +// Safely changes man to test functionality u8 GetCurrentMauvilleOldMan(void) { - OldMan *oldMan = &gSaveBlock1.oldMan; + u8 newMan = MAUVILLE_MAN_GIDDY; + struct MauvilleManCommon *common = &gSaveBlock1.oldMan.common; + + if (common->id != newMan) + { + switch (newMan) + { + case MAUVILLE_MAN_BARD: + SetupBard(); + break; + case MAUVILLE_MAN_HIPSTER: + SetupHipster(); + break; + case MAUVILLE_MAN_TRADER: + SetupTrader(); + break; + case MAUVILLE_MAN_STORYTELLER: + SetupStoryteller(); + break; + case MAUVILLE_MAN_GIDDY: + SetupGiddy(); + break; + } + sub_80F83D0(); + } + return common->id; +} +*/ + +u8 GetCurrentMauvilleOldMan(void) +{ + struct MauvilleManCommon *common = &gSaveBlock1.oldMan.common; - return oldMan->oldMan1.unk_2D94; + return common->id; } void sub_80F7B14(void) @@ -96,29 +147,28 @@ void sub_80F7B2C(void) u16 *scriptPtr = &gScriptResult; // why?? OldMan *oldMan = &gSaveBlock1.oldMan; - *scriptPtr = oldMan->oldMan1.unk_2DBD; + *scriptPtr = oldMan->bard.unk_2DBD; } void sub_80F7B40(void) { u16 i; - OldMan *oldMan = &gSaveBlock1.oldMan; - //struct UnkMauvilleOldManStruct *oldManStruct = &gSaveBlock1.oldManStruct; + struct MauvilleManBard *bard = &gSaveBlock1.oldMan.bard; - StringCopy(oldMan->oldMan1.playerName, gSaveBlock2.playerName); + StringCopy(bard->playerName, gSaveBlock2.playerName); for(i = 0; i < 4; i++) - oldMan->oldMan1.playerTrainerId[i] = gSaveBlock2.playerTrainerId[i]; + bard->playerTrainerId[i] = gSaveBlock2.playerTrainerId[i]; for(i = 0; i < 6; i++) - oldMan->oldMan1.mauvilleOldMan_ecArray[i] = oldMan->oldMan1.mauvilleOldMan_ecArray2[i]; + bard->songLyrics[i] = bard->mauvilleOldMan_ecArray2[i]; - oldMan->oldMan1.unk_2DBD = 1; + bard->unk_2DBD = 1; } void sub_80F7BA0(void) { - struct UnkMauvilleOldManStruct *oldMan = &gSaveBlock1.oldMan.oldMan1; + struct MauvilleManBard *oldMan = &gSaveBlock1.oldMan.bard; u16 specialVar = gSpecialVar_0x8004; // It's a bit odd to use this temp variable, but it seems needed to match. u16 *r5; u16 i; @@ -127,7 +177,7 @@ void sub_80F7BA0(void) r5 = oldMan->mauvilleOldMan_ecArray2; if (specialVar == 0) - r5 = oldMan->mauvilleOldMan_ecArray; + r5 = oldMan->songLyrics; ptr = gStringVar4; r4 = ptr; for (i = 0; i < 2; i++) @@ -178,14 +228,14 @@ void sub_80F7C70(void) u16 *scriptPtr = &gScriptResult; // again?? OldMan *oldMan = &gSaveBlock1.oldMan; - *scriptPtr = oldMan->oldMan1.unk_2D95; + *scriptPtr = oldMan->bard.unk_2D95; } void sub_80F7C84(void) { OldMan *oldMan = &gSaveBlock1.oldMan; - oldMan->oldMan1.unk_2D95 = 1; + oldMan->bard.unk_2D95 = 1; } void sub_80F7C90(void) @@ -207,41 +257,44 @@ void sub_80F7CC8(void) { OldMan *oldMan = &gSaveBlock1.oldMan; - if(oldMan->oldMan1.unk_2D95 == 10) + if (oldMan->bard.unk_2D95 == 10) { gScriptResult = FALSE; - oldMan->oldMan1.unk_2D95 = 0; + oldMan->bard.unk_2D95 = 0; } else + { gScriptResult = TRUE; + } } -void sub_80F7CF4(void) +void ScrSpecial_GenerateGiddyLine(void) { - struct UnkMauvilleOldManStruct2 *oldMan = &gSaveBlock1.oldMan.oldMan2; + struct MauvilleManGiddy *giddy = &gSaveBlock1.oldMan.giddy; - if(oldMan->unk1 == 0) + if (giddy->unk1 == 0) sub_80F7DC0(); - if(oldMan->mauvilleOldMan_ecArray[oldMan->unk1] != 0xFFFF) // is not the last element of the array? + if (giddy->mauvilleOldMan_ecArray[giddy->unk1] != 0xFFFF) // is not the last element of the array? { u8 *stringPtr; - u32 random = Random(); + u32 adjective = Random(); - random %= 8; - stringPtr = sub_80EB3FC(gStringVar4, oldMan->mauvilleOldMan_ecArray[oldMan->unk1]); + adjective %= 8; + stringPtr = sub_80EB3FC(gStringVar4, giddy->mauvilleOldMan_ecArray[giddy->unk1]); stringPtr = StringCopy(stringPtr, gOtherText_Is); - stringPtr = StringCopy(stringPtr, (u8 *)gUnknown_083E5388[random]); + stringPtr = StringCopy(stringPtr, gGiddyAdjectives[adjective]); StringCopy(stringPtr, gOtherText_DontYouAgree); } else { - StringCopy(gStringVar4, (u8 *)gUnknown_083E53A8[oldMan->mauvilleOldMan_ecArray2[oldMan->unk2++]]); + StringCopy(gStringVar4, gGiddyQuestions[giddy->mauvilleOldMan_ecArray2[giddy->unk2++]]); } - if(!(Random() % 10)) - oldMan->unk1 = 10; + + if (!(Random() % 10)) + giddy->unk1 = 10; else - oldMan->unk1++; + giddy->unk1++; gScriptResult = TRUE; } diff --git a/src/new_game.c b/src/new_game.c index 226ac9bb7..1ef19bd00 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -157,7 +157,7 @@ void NewGameInitData(void) ClearPokeblocks(); ClearDecorationInventories(); InitEasyChatPhrases(); - SetMauvilleOldMan(); + SetupMauvilleOldMan(); InitDewfordTrend(); ResetFanClub(); ResetLotteryCorner(); diff --git a/src/trader.c b/src/trader.c index ea06058e9..9aeefa3d1 100644 --- a/src/trader.c +++ b/src/trader.c @@ -3,6 +3,7 @@ #include "decoration_inventory.h" #include "event_data.h" #include "main.h" +#include "mauville_old_man.h" #include "menu.h" #include "menu_helpers.h" #include "script.h" @@ -36,7 +37,7 @@ void sub_810993C(void) { u8 i, j; u8 buffer[12]; - struct MauvilleOldManTrader *trader = &gSaveBlock1.oldMan.trader; + struct MauvilleManTrader *trader = &gSaveBlock1.oldMan.trader; for (i = 0; i < 3; i++) { @@ -55,12 +56,12 @@ void sub_810993C(void) } } -void sub_81099CC(void) +void TraderSetup(void) { u8 i; - struct MauvilleOldManTrader *trader = &gSaveBlock1.oldMan.trader; + struct MauvilleManTrader *trader = &gSaveBlock1.oldMan.trader; - trader->unk0 = 2; + trader->id = MAUVILLE_MAN_TRADER; trader->unk31 = 0; for (i = 0; i < 4; i++) @@ -74,7 +75,7 @@ void sub_81099CC(void) void sub_8109A20(void) { - struct MauvilleOldManTrader *trader = &gSaveBlock1.oldMan.trader; + struct MauvilleManTrader *trader = &gSaveBlock1.oldMan.trader; trader->unk31 = 0; } @@ -88,7 +89,7 @@ void sub_8109A48(u8 taskId) u8 i; u8 numChoices = 1; u8 numDecorations = 0; - struct MauvilleOldManTrader *trader = &gSaveBlock1.oldMan.trader; + struct MauvilleManTrader *trader = &gSaveBlock1.oldMan.trader; for (i = 0; i < 4; i++) { @@ -141,7 +142,7 @@ void sub_8109B34(u8 taskId, u8 decorationId) void sub_8109B7C(u8 taskId) { - struct MauvilleOldManTrader *trader = &gSaveBlock1.oldMan.trader; + struct MauvilleManTrader *trader = &gSaveBlock1.oldMan.trader; if (gMain.newKeys & DPAD_UP) { @@ -176,7 +177,7 @@ void sub_8109B7C(u8 taskId) void sub_8109C44(void) { - struct MauvilleOldManTrader *trader = &gSaveBlock1.oldMan.trader; + struct MauvilleManTrader *trader = &gSaveBlock1.oldMan.trader; gScriptResult = trader->unk31; } @@ -244,7 +245,7 @@ void sub_8109DAC(u8 taskId) void sub_8109DE0(void) { - struct MauvilleOldManTrader *trader = &gSaveBlock1.oldMan.trader; + struct MauvilleManTrader *trader = &gSaveBlock1.oldMan.trader; sub_81340A8(gSpecialVar_0x8006); IsThereStorageSpaceForDecoration(gSpecialVar_0x8004); -- cgit v1.2.3 From 9ac913c5270c7cc5fc245c2cce6b9e64e848f7e9 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 23 Aug 2017 19:36:25 +0200 Subject: start working on reshow battle screen --- asm/battle_anim_81258BC.s | 2 +- asm/reshow_battle_screen.s | 483 --------------------------------------------- include/battle.h | 4 +- ld_script.txt | 1 + src/battle_10.c | 6 +- src/battle_6.c | 16 +- src/battle_7.c | 132 ++++++------- src/battle_8.c | 6 +- src/battle_811DA74.c | 12 +- src/battle_anim_8137220.c | 6 +- src/reshow_battle_screen.c | 262 ++++++++++++++++++++++++ 11 files changed, 355 insertions(+), 575 deletions(-) create mode 100644 src/reshow_battle_screen.c diff --git a/asm/battle_anim_81258BC.s b/asm/battle_anim_81258BC.s index a50b089db..8dbb9b1c2 100644 --- a/asm/battle_anim_81258BC.s +++ b/asm/battle_anim_81258BC.s @@ -1310,7 +1310,7 @@ sub_812B8B8: @ 812B8B8 ldrb r0, [r4, 0x8] ldr r5, _0812B970 @ =gActiveBank ldrb r1, [r5] - bl sub_8031AF4 + bl LoadPlayerTrainerBankSprite ldrb r6, [r4, 0x8] ldrb r0, [r5] bl GetBankIdentity diff --git a/asm/reshow_battle_screen.s b/asm/reshow_battle_screen.s index 59b08dd01..2b7345366 100644 --- a/asm/reshow_battle_screen.s +++ b/asm/reshow_battle_screen.s @@ -6,491 +6,8 @@ .text - thumb_func_start nullsub_14 -nullsub_14: @ 807AD54 - bx lr - thumb_func_end nullsub_14 - thumb_func_start ReshowBattleScreenAfterMenu -ReshowBattleScreenAfterMenu: @ 807AD58 - push {lr} - ldr r2, _0807AD90 @ =gPaletteFade - ldrb r0, [r2, 0x8] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2, 0x8] - movs r0, 0 - bl SetHBlankCallback - movs r0, 0 - bl SetVBlankCallback - ldr r0, _0807AD94 @ =REG_MOSAIC - movs r2, 0 - strh r2, [r0] - ldr r0, _0807AD98 @ =0x02000000 - ldr r3, _0807AD9C @ =0x0001ffff - adds r1, r0, r3 - strb r2, [r1] - ldr r1, _0807ADA0 @ =0x0001fffe - adds r0, r1 - strb r2, [r0] - ldr r0, _0807ADA4 @ =CB2_ReshowBattleScreenAfterMenu - bl SetMainCallback2 - pop {r0} - bx r0 - .align 2, 0 -_0807AD90: .4byte gPaletteFade -_0807AD94: .4byte REG_MOSAIC -_0807AD98: .4byte 0x02000000 -_0807AD9C: .4byte 0x0001ffff -_0807ADA0: .4byte 0x0001fffe -_0807ADA4: .4byte CB2_ReshowBattleScreenAfterMenu - thumb_func_end ReshowBattleScreenAfterMenu - thumb_func_start CB2_ReshowBattleScreenAfterMenu -CB2_ReshowBattleScreenAfterMenu: @ 807ADA8 - push {r4-r7,lr} - sub sp, 0x8 - ldr r0, _0807ADC4 @ =0x02000000 - ldr r1, _0807ADC8 @ =0x0001ffff - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x13 - bls _0807ADBA - b _0807B010 -_0807ADBA: - lsls r0, 2 - ldr r1, _0807ADCC @ =_0807ADD0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0807ADC4: .4byte 0x02000000 -_0807ADC8: .4byte 0x0001ffff -_0807ADCC: .4byte _0807ADD0 - .align 2, 0 -_0807ADD0: - .4byte _0807AE20 - .4byte _0807AE84 - .4byte _0807AE9C - .4byte _0807AEC8 - .4byte _0807AECE - .4byte _0807AEE0 - .4byte _0807AEE6 - .4byte _0807AF18 - .4byte _0807AF1C - .4byte _0807AF20 - .4byte _0807AF24 - .4byte _0807AF48 - .4byte _0807AF50 - .4byte _0807AF58 - .4byte _0807AF60 - .4byte _0807AF68 - .4byte _0807AF70 - .4byte _0807AF78 - .4byte _0807AF80 - .4byte _0807AF88 -_0807AE20: - bl dp12_8087EA4 - ldr r4, _0807AE5C @ =gWindowConfig_81E6C58 - adds r0, r4, 0 - bl SetUpWindowConfig - bl ResetPaletteFade - ldr r0, _0807AE60 @ =gUnknown_03004210 - adds r1, r4, 0 - bl InitWindowFromConfig - ldr r0, _0807AE64 @ =gUnknown_030042A4 - movs r1, 0 - strh r1, [r0] - ldr r0, _0807AE68 @ =gUnknown_030042A0 - strh r1, [r0] - ldr r0, _0807AE6C @ =gUnknown_030042C0 - strh r1, [r0] - ldr r0, _0807AE70 @ =gUnknown_030041B4 - strh r1, [r0] - ldr r0, _0807AE74 @ =gUnknown_03004288 - strh r1, [r0] - ldr r0, _0807AE78 @ =gUnknown_03004280 - strh r1, [r0] - ldr r0, _0807AE7C @ =gUnknown_030041B0 - strh r1, [r0] - ldr r0, _0807AE80 @ =gUnknown_030041B8 - strh r1, [r0] - b _0807B040 - .align 2, 0 -_0807AE5C: .4byte gWindowConfig_81E6C58 -_0807AE60: .4byte gUnknown_03004210 -_0807AE64: .4byte gUnknown_030042A4 -_0807AE68: .4byte gUnknown_030042A0 -_0807AE6C: .4byte gUnknown_030042C0 -_0807AE70: .4byte gUnknown_030041B4 -_0807AE74: .4byte gUnknown_03004288 -_0807AE78: .4byte gUnknown_03004280 -_0807AE7C: .4byte gUnknown_030041B0 -_0807AE80: .4byte gUnknown_030041B8 -_0807AE84: - movs r0, 0 - str r0, [sp, 0x4] - movs r1, 0xC0 - lsls r1, 19 - ldr r2, _0807AE98 @ =0x01006000 - add r0, sp, 0x4 - bl CpuFastSet - b _0807B040 - .align 2, 0 -_0807AE98: .4byte 0x01006000 -_0807AE9C: - ldr r5, _0807AEBC @ =0x02000000 - ldr r0, _0807AEC0 @ =0x0001fffe - adds r4, r5, r0 - ldrb r0, [r4] - bl sub_800E414 - lsls r0, 24 - cmp r0, 0 - bne _0807AEF8 - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - ldr r0, _0807AEC4 @ =0x0001ffff - adds r1, r5, r0 - b _0807AF38 - .align 2, 0 -_0807AEBC: .4byte 0x02000000 -_0807AEC0: .4byte 0x0001fffe -_0807AEC4: .4byte 0x0001ffff -_0807AEC8: - bl ResetSpriteData - b _0807B040 -_0807AECE: - bl FreeAllSpritePalettes - ldr r1, _0807AEDC @ =gReservedSpritePaletteCount - movs r0, 0x4 - strb r0, [r1] - b _0807B040 - .align 2, 0 -_0807AEDC: .4byte gReservedSpritePaletteCount -_0807AEE0: - bl sub_8031EE8 - b _0807B040 -_0807AEE6: - ldr r5, _0807AF00 @ =0x02000000 - ldr r1, _0807AF04 @ =0x0001fffe - adds r4, r5, r1 - ldrb r0, [r4] - bl sub_8031C30 - lsls r0, 24 - cmp r0, 0 - beq _0807AF08 -_0807AEF8: - movs r0, 0 - strb r0, [r4] - b _0807B040 - .align 2, 0 -_0807AF00: .4byte 0x02000000 -_0807AF04: .4byte 0x0001fffe -_0807AF08: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - ldr r0, _0807AF14 @ =0x0001ffff - adds r1, r5, r0 - b _0807AF38 - .align 2, 0 -_0807AF14: .4byte 0x0001ffff -_0807AF18: - movs r0, 0 - b _0807AF26 -_0807AF1C: - movs r0, 0x1 - b _0807AF26 -_0807AF20: - movs r0, 0x2 - b _0807AF26 -_0807AF24: - movs r0, 0x3 -_0807AF26: - bl sub_807B094 - lsls r0, 24 - cmp r0, 0 - beq _0807AF32 - b _0807B040 -_0807AF32: - ldr r1, _0807AF40 @ =0x02000000 - ldr r0, _0807AF44 @ =0x0001ffff - adds r1, r0 -_0807AF38: - ldrb r0, [r1] - subs r0, 0x1 - strb r0, [r1] - b _0807B040 - .align 2, 0 -_0807AF40: .4byte 0x02000000 -_0807AF44: .4byte 0x0001ffff -_0807AF48: - movs r0, 0 - bl sub_807B184 - b _0807B040 -_0807AF50: - movs r0, 0x1 - bl sub_807B184 - b _0807B040 -_0807AF58: - movs r0, 0x2 - bl sub_807B184 - b _0807B040 -_0807AF60: - movs r0, 0x3 - bl sub_807B184 - b _0807B040 -_0807AF68: - movs r0, 0 - bl sub_807B508 - b _0807B040 -_0807AF70: - movs r0, 0x1 - bl sub_807B508 - b _0807B040 -_0807AF78: - movs r0, 0x2 - bl sub_807B508 - b _0807B040 -_0807AF80: - movs r0, 0x3 - bl sub_807B508 - b _0807B040 -_0807AF88: - bl sub_80327CC - movs r0, 0x1 - bl GetBankByPlayerAI - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r7, _0807B000 @ =gBattlePartyID - lsls r0, r4, 1 - adds r0, r7 - ldrh r0, [r0] - movs r6, 0x64 - muls r0, r6 - ldr r5, _0807B004 @ =gEnemyParty - adds r0, r5 - movs r1, 0xB - bl GetMonData - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - adds r0, r4, 0 - bl sub_8032984 - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - beq _0807AFEC - movs r0, 0x3 - bl GetBankByPlayerAI - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r0, r4, 1 - adds r0, r7 - ldrh r0, [r0] - muls r0, r6 - adds r0, r5 - movs r1, 0xB - bl GetMonData - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - adds r0, r4, 0 - bl sub_8032984 -_0807AFEC: - ldr r1, _0807B008 @ =gActionSelectionCursor - ldr r0, _0807B00C @ =gBankInMenu - ldrb r0, [r0] - adds r0, r1 - ldrb r0, [r0] - movs r1, 0 - bl sub_802E3E4 - b _0807B040 - .align 2, 0 -_0807B000: .4byte gBattlePartyID -_0807B004: .4byte gEnemyParty -_0807B008: .4byte gActionSelectionCursor -_0807B00C: .4byte gBankInMenu -_0807B010: - ldr r0, _0807B054 @ =sub_800FCD4 - bl SetHBlankCallback - ldr r0, _0807B058 @ =sub_800FCFC - bl SetVBlankCallback - bl sub_807B06C - movs r0, 0x1 - str r0, [sp] - movs r0, 0xFF - movs r1, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginHardwarePaletteFade - ldr r2, _0807B05C @ =gPaletteFade - ldrb r1, [r2, 0x8] - movs r0, 0x7F - ands r0, r1 - strb r0, [r2, 0x8] - ldr r0, _0807B060 @ =sub_800F808 - bl SetMainCallback2 -_0807B040: - ldr r1, _0807B064 @ =0x02000000 - ldr r0, _0807B068 @ =0x0001ffff - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - add sp, 0x8 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0807B054: .4byte sub_800FCD4 -_0807B058: .4byte sub_800FCFC -_0807B05C: .4byte gPaletteFade -_0807B060: .4byte sub_800F808 -_0807B064: .4byte 0x02000000 -_0807B068: .4byte 0x0001ffff - thumb_func_end CB2_ReshowBattleScreenAfterMenu - - thumb_func_start sub_807B06C -sub_807B06C: @ 807B06C - push {lr} - bl sub_800D6D4 - ldr r3, _0807B08C @ =REG_BG1CNT - ldrb r2, [r3] - movs r1, 0xD - negs r1, r1 - adds r0, r1, 0 - ands r0, r2 - strb r0, [r3] - ldr r2, _0807B090 @ =REG_BG2CNT - ldrb r0, [r2] - ands r1, r0 - strb r1, [r2] - pop {r0} - bx r0 - .align 2, 0 -_0807B08C: .4byte REG_BG1CNT -_0807B090: .4byte REG_BG2CNT - thumb_func_end sub_807B06C - - thumb_func_start sub_807B094 -sub_807B094: @ 807B094 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0807B0D8 @ =gNoOfAllBanks - ldrb r0, [r0] - cmp r4, r0 - bcs _0807B172 - adds r0, r4, 0 - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - beq _0807B0F2 - lsls r0, r4, 2 - ldr r1, _0807B0DC @ =0x02017800 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - bne _0807B0E8 - ldr r1, _0807B0E0 @ =gBattlePartyID - lsls r0, r4, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0807B0E4 @ =gEnemyParty - adds r0, r1 - adds r1, r4, 0 - bl sub_8031794 - b _0807B168 - .align 2, 0 -_0807B0D8: .4byte gNoOfAllBanks -_0807B0DC: .4byte 0x02017800 -_0807B0E0: .4byte gBattlePartyID -_0807B0E4: .4byte gEnemyParty -_0807B0E8: - adds r0, r4, 0 - movs r1, 0 - bl sub_8032350 - b _0807B168 -_0807B0F2: - ldr r2, _0807B108 @ =gBattleTypeFlags - ldrh r1, [r2] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0807B110 - cmp r4, 0 - bne _0807B110 - ldr r0, _0807B10C @ =gSaveBlock2 - ldrb r0, [r0, 0x8] - b _0807B122 - .align 2, 0 -_0807B108: .4byte gBattleTypeFlags -_0807B10C: .4byte gSaveBlock2 -_0807B110: - ldrh r1, [r2] - movs r0, 0x80 - lsls r0, 2 - ands r0, r1 - cmp r0, 0 - beq _0807B12A - cmp r4, 0 - bne _0807B12A - movs r0, 0x2 -_0807B122: - movs r1, 0 - bl sub_8031AF4 - b _0807B168 -_0807B12A: - lsls r0, r4, 2 - ldr r1, _0807B154 @ =0x02017800 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - bne _0807B160 - ldr r1, _0807B158 @ =gBattlePartyID - lsls r0, r4, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0807B15C @ =gPlayerParty - adds r0, r1 - adds r1, r4, 0 - bl sub_80318FC - b _0807B168 - .align 2, 0 -_0807B154: .4byte 0x02017800 -_0807B158: .4byte gBattlePartyID -_0807B15C: .4byte gPlayerParty -_0807B160: - adds r0, r4, 0 - movs r1, 0 - bl sub_8032350 -_0807B168: - ldr r0, _0807B17C @ =0x02000000 - ldr r1, _0807B180 @ =0x0001fffe - adds r0, r1 - movs r1, 0 - strb r1, [r0] -_0807B172: - movs r0, 0x1 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0807B17C: .4byte 0x02000000 -_0807B180: .4byte 0x0001fffe - thumb_func_end sub_807B094 thumb_func_start sub_807B184 sub_807B184: @ 807B184 diff --git a/include/battle.h b/include/battle.h index 9d8092197..d948dfa7d 100644 --- a/include/battle.h +++ b/include/battle.h @@ -522,10 +522,10 @@ struct Struct2017800 { u8 unk0_0:1; u8 unk0_1:1; - u8 unk0_2:1; + u8 substituteSprite:1; u8 unk0_3:1; u8 unk0_4:1; - u16 unk2; + u16 transformedSpecies; }; struct Struct2017810 diff --git a/ld_script.txt b/ld_script.txt index c60aa3729..28254eba9 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -120,6 +120,7 @@ SECTIONS { src/battle_anim.o(.text); src/rom_8077ABC.o(.text); src/task.o(.text); + src/reshow_battle_screen.o(.text); asm/reshow_battle_screen.o(.text); src/battle_anim_807B69C.o(.text); src/title_screen.o(.text); diff --git a/src/battle_10.c b/src/battle_10.c index 0237bab4b..c2053a5d1 100644 --- a/src/battle_10.c +++ b/src/battle_10.c @@ -52,7 +52,7 @@ extern u8 gUnknown_0300434C[]; extern u8 sub_8077F68(); extern u8 sub_8079E90(); extern u8 GetBankIdentity(u8); -extern void sub_8031794(struct Pokemon *, u8); +extern void BattleLoadOpponentMonSprite(struct Pokemon *, u8); extern void sub_8037A74(void); extern void sub_8032984(u8, u16); extern void sub_8037E30(void); @@ -696,7 +696,7 @@ void sub_8039294(void) { u16 species = GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES); - sub_8031794(&gEnemyParty[gBattlePartyID[gActiveBank]], gActiveBank); + BattleLoadOpponentMonSprite(&gEnemyParty[gBattlePartyID[gActiveBank]], gActiveBank); GetMonSpriteTemplate_803C56C(species, GetBankIdentity(gActiveBank)); gObjectBankIDs[gActiveBank] = CreateSprite( &gUnknown_02024E8C, @@ -726,7 +726,7 @@ void sub_8039430(u8 a, u8 b) gBattlePartyID[a] = gBattleBufferA[a][1]; species = GetMonData(&gEnemyParty[gBattlePartyID[a]], MON_DATA_SPECIES); gUnknown_0300434C[a] = CreateInvisibleSpriteWithCallback(sub_80312F0); - sub_8031794(&gEnemyParty[gBattlePartyID[a]], a); + BattleLoadOpponentMonSprite(&gEnemyParty[gBattlePartyID[a]], a); GetMonSpriteTemplate_803C56C(species, GetBankIdentity(a)); gObjectBankIDs[a] = CreateSprite( &gUnknown_02024E8C, diff --git a/src/battle_6.c b/src/battle_6.c index c833aef5e..6fa0e3948 100644 --- a/src/battle_6.c +++ b/src/battle_6.c @@ -98,7 +98,7 @@ extern void sub_80E43C0(); extern void oamt_add_pos2_onto_pos1(); extern void sub_8078B34(struct Sprite *); extern void oamt_set_x3A_32(); -extern void sub_80318FC(); +extern void BattleLoadPlayerMonSprite(); extern bool8 IsDoubleBattle(void); extern void sub_802D500(void); extern void dp11b_obj_free(); @@ -121,7 +121,7 @@ extern void sub_80105EC(struct Sprite *); extern void sub_802D274(void); extern void sub_802D23C(void); extern u8 GetBankIdentity(u8); -extern void sub_8031AF4(); +extern void LoadPlayerTrainerBankSprite(); extern void sub_80313A0(struct Sprite *); extern void sub_802D204(void); extern u8 sub_8079E90(); @@ -739,7 +739,7 @@ void sub_802F7CC(void) void PlayerHandleLoadPokeSprite(void) { - sub_80318FC(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + BattleLoadPlayerMonSprite(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank; gBattleBankFunc[gActiveBank] = bx_0802E404; } @@ -748,7 +748,7 @@ void PlayerHandleSendOutPoke(void) { sub_8032AA8(gActiveBank, gBattleBufferA[gActiveBank][2]); gBattlePartyID[gActiveBank] = gBattleBufferA[gActiveBank][1]; - sub_80318FC(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + BattleLoadPlayerMonSprite(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); gActionSelectionCursor[gActiveBank] = 0; gMoveSelectionCursor[gActiveBank] = 0; sub_802F934(gActiveBank, gBattleBufferA[gActiveBank][2]); @@ -829,7 +829,7 @@ void PlayerHandleTrainerThrow(void) { r7 = 0; } - sub_8031AF4(gSaveBlock2.playerGender, gActiveBank); + LoadPlayerTrainerBankSprite(gSaveBlock2.playerGender, gActiveBank); GetMonSpriteTemplate_803C5A0(gSaveBlock2.playerGender, GetBankIdentity(gActiveBank)); gObjectBankIDs[gActiveBank] = CreateSprite( &gUnknown_02024E8C, @@ -845,7 +845,7 @@ void PlayerHandleTrainerThrow(void) void PlayerHandleTrainerSlide(void) { - sub_8031AF4(gSaveBlock2.playerGender, gActiveBank); + LoadPlayerTrainerBankSprite(gSaveBlock2.playerGender, gActiveBank); GetMonSpriteTemplate_803C5A0(gSaveBlock2.playerGender, GetBankIdentity(gActiveBank)); gObjectBankIDs[gActiveBank] = CreateSprite( &gUnknown_02024E8C, @@ -1357,7 +1357,7 @@ void sub_8030E38(struct Sprite *sprite) FreeSpriteOamMatrix(sprite); FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum)); DestroySprite(sprite); - sub_80318FC(&gPlayerParty[gBattlePartyID[r4]], r4); + BattleLoadPlayerMonSprite(&gPlayerParty[gBattlePartyID[r4]], r4); StartSpriteAnim(&gSprites[gObjectBankIDs[r4]], 0); } @@ -1383,7 +1383,7 @@ void task05_08033660(u8 taskId) sub_802F934(gActiveBank, 0); gActiveBank ^= 2; gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; - sub_80318FC(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + BattleLoadPlayerMonSprite(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); sub_802F934(gActiveBank, 0); gActiveBank ^= 2; } diff --git a/src/battle_7.c b/src/battle_7.c index f2838467e..8c5f5f45d 100644 --- a/src/battle_7.c +++ b/src/battle_7.c @@ -182,9 +182,9 @@ bool8 move_anim_start_t3(u8 a, u8 b, u8 c, u8 d, u16 e) gBattleMonForms[a] = e & 0x7F; return TRUE; } - if (ewram17800[a].unk0_2 && sub_803163C(d) == 0) + if (ewram17800[a].substituteSprite && sub_803163C(d) == 0) return TRUE; - if (ewram17800[a].unk0_2 && d == 2 && gSprites[gObjectBankIDs[a]].invisible) + if (ewram17800[a].substituteSprite && d == 2 && gSprites[gObjectBankIDs[a]].invisible) { refresh_graphics_maybe(a, 1, gObjectBankIDs[a]); sub_80324E0(a); @@ -273,29 +273,29 @@ bool8 mplay_80342A4(u8 a) return TRUE; } -void sub_8031794(struct Pokemon *pkmn, u8 b) +void BattleLoadOpponentMonSprite(struct Pokemon *pkmn, u8 bank) { u32 personalityValue; u16 species; - u32 r7; + u32 transformPersonality; u32 otId; u8 var; u16 paletteOffset; const u8 *lzPaletteData; personalityValue = GetMonData(pkmn, MON_DATA_PERSONALITY); - if (ewram17800[b].unk2 == 0) + if (ewram17800[bank].transformedSpecies == 0) { species = GetMonData(pkmn, MON_DATA_SPECIES); - r7 = personalityValue; + transformPersonality = personalityValue; } else { - species = ewram17800[b].unk2; - r7 = gPID_perBank[b]; + species = ewram17800[bank].transformedSpecies; + transformPersonality = gPID_perBank[bank]; } otId = GetMonData(pkmn, MON_DATA_OT_ID); - var = GetBankIdentity(b); + var = GetBankIdentity(bank); HandleLoadSpecialPokePic( &gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, @@ -303,29 +303,29 @@ void sub_8031794(struct Pokemon *pkmn, u8 b) 0x02000000, gUnknown_081FAF4C[var], species, - r7); - paletteOffset = 0x100 + b * 16; - if (ewram17800[b].unk2 == 0) + transformPersonality); + paletteOffset = 0x100 + bank * 16; + if (ewram17800[bank].transformedSpecies == 0) lzPaletteData = pokemon_get_pal(pkmn); else lzPaletteData = species_and_otid_get_pal(species, otId, personalityValue); sub_800D238(lzPaletteData, ewram); LoadPalette(ewram, paletteOffset, 0x20); - LoadPalette(ewram, 0x80 + b * 16, 0x20); + LoadPalette(ewram, 0x80 + bank * 16, 0x20); if (species == SPECIES_CASTFORM) { - paletteOffset = 0x100 + b * 16; + paletteOffset = 0x100 + bank * 16; sub_800D238(lzPaletteData, ewram + 0x16400); - LoadPalette(ewram + 0x16400 + gBattleMonForms[b] * 32, paletteOffset, 0x20); + LoadPalette(ewram + 0x16400 + gBattleMonForms[bank] * 32, paletteOffset, 0x20); } - if (ewram17800[b].unk2 != 0) + if (ewram17800[bank].transformedSpecies != 0) { BlendPalette(paletteOffset, 16, 6, 0x7FFF); CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); } } -void sub_80318FC(struct Pokemon *pkmn, u8 b) +void BattleLoadPlayerMonSprite(struct Pokemon *pkmn, u8 bank) { u32 personalityValue; u16 species; @@ -336,18 +336,18 @@ void sub_80318FC(struct Pokemon *pkmn, u8 b) const u8 *lzPaletteData; personalityValue = GetMonData(pkmn, MON_DATA_PERSONALITY); - if (ewram17800[b].unk2 == 0) + if (ewram17800[bank].transformedSpecies == 0) { species = GetMonData(pkmn, MON_DATA_SPECIES); r7 = personalityValue; } else { - species = ewram17800[b].unk2; - r7 = gPID_perBank[b]; + species = ewram17800[bank].transformedSpecies; + r7 = gPID_perBank[bank]; } otId = GetMonData(pkmn, MON_DATA_OT_ID); - var = GetBankIdentity(b); + var = GetBankIdentity(bank); HandleLoadSpecialPokePic( &gMonBackPicTable[species], gMonBackPicCoords[species].coords, @@ -356,21 +356,21 @@ void sub_80318FC(struct Pokemon *pkmn, u8 b) gUnknown_081FAF4C[var], species, r7); - paletteOffset = 0x100 + b * 16; - if (ewram17800[b].unk2 == 0) + paletteOffset = 0x100 + bank * 16; + if (ewram17800[bank].transformedSpecies == 0) lzPaletteData = pokemon_get_pal(pkmn); else lzPaletteData = species_and_otid_get_pal(species, otId, personalityValue); sub_800D238(lzPaletteData, ewram); LoadPalette(ewram, paletteOffset, 0x20); - LoadPalette(ewram, 0x80 + b * 16, 0x20); + LoadPalette(ewram, 0x80 + bank * 16, 0x20); if (species == SPECIES_CASTFORM) { - paletteOffset = 0x100 + b * 16; + paletteOffset = 0x100 + bank * 16; sub_800D238(lzPaletteData, ewram + 0x16400); - LoadPalette(ewram + 0x16400 + gBattleMonForms[b] * 32, paletteOffset, 0x20); + LoadPalette(ewram + 0x16400 + gBattleMonForms[bank] * 32, paletteOffset, 0x20); } - if (ewram17800[b].unk2 != 0) + if (ewram17800[bank].transformedSpecies != 0) { BlendPalette(paletteOffset, 16, 6, 0x7FFF); CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); @@ -405,11 +405,11 @@ void sub_8031A6C(u16 a, u8 b) LoadCompressedObjectPalette(&gTrainerFrontPicPaletteTable[a]); } -void sub_8031AF4(u16 a, u8 b) +void LoadPlayerTrainerBankSprite(u16 a, u8 bank) { u8 status; - status = GetBankIdentity(b); + status = GetBankIdentity(bank); DecompressPicFromTable_2( &gTrainerBackPicTable[a], gTrainerBackPicCoords[a].coords, @@ -417,7 +417,7 @@ void sub_8031AF4(u16 a, u8 b) (void *)0x02000000, gUnknown_081FAF4C[status], 0); - LoadCompressedPalette(gTrainerBackPicPaletteTable[a].data, 0x100 + b * 16, 32); + LoadCompressedPalette(gTrainerBackPicPaletteTable[a].data, 0x100 + bank * 16, 32); } void nullsub_10(int unused) @@ -615,7 +615,7 @@ void sub_8031F88(u8 a) ewram17800[a].unk0_0 = gSprites[gObjectBankIDs[a]].invisible; } -void sub_8031FC4(u8 a, u8 b, bool8 c) +void sub_8031FC4(u8 bank1, u8 bank2, bool8 c) { u16 paletteOffset; u16 species; @@ -626,16 +626,16 @@ void sub_8031FC4(u8 a, u8 b, bool8 c) if (c) { - StartSpriteAnim(&gSprites[gObjectBankIDs[a]], ewram17840.unk0); - paletteOffset = 0x100 + a * 16; + StartSpriteAnim(&gSprites[gObjectBankIDs[bank1]], ewram17840.unk0); + paletteOffset = 0x100 + bank1 * 16; LoadPalette(ewram + 0x16400 + ewram17840.unk0 * 32, paletteOffset, 32); - gBattleMonForms[a] = ewram17840.unk0; - if (ewram17800[a].unk2 != 0) + gBattleMonForms[bank1] = ewram17840.unk0; + if (ewram17800[bank1].transformedSpecies != 0) { BlendPalette(paletteOffset, 16, 6, 0x7FFF); CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); } - gSprites[gObjectBankIDs[a]].pos1.y = sub_8077F68(a); + gSprites[gObjectBankIDs[bank1]].pos1.y = sub_8077F68(bank1); } else { @@ -659,15 +659,15 @@ void sub_8031FC4(u8 a, u8 b, bool8 c) } else { - r10 = GetBankIdentity(a); - if (GetBankSide(b) == 1) - species = GetMonData(&gEnemyParty[gBattlePartyID[b]], MON_DATA_SPECIES); + r10 = GetBankIdentity(bank1); + if (GetBankSide(bank2) == 1) + species = GetMonData(&gEnemyParty[gBattlePartyID[bank2]], MON_DATA_SPECIES); else - species = GetMonData(&gPlayerParty[gBattlePartyID[b]], MON_DATA_SPECIES); - if (GetBankSide(a) == 0) + species = GetMonData(&gPlayerParty[gBattlePartyID[bank2]], MON_DATA_SPECIES); + if (GetBankSide(bank1) == 0) { - personalityValue = GetMonData(&gPlayerParty[gBattlePartyID[a]], MON_DATA_PERSONALITY); - otId = GetMonData(&gPlayerParty[gBattlePartyID[a]], MON_DATA_OT_ID); + personalityValue = GetMonData(&gPlayerParty[gBattlePartyID[bank1]], MON_DATA_PERSONALITY); + otId = GetMonData(&gPlayerParty[gBattlePartyID[bank1]], MON_DATA_OT_ID); HandleLoadSpecialPokePic( &gMonBackPicTable[species], gMonBackPicCoords[species].coords, @@ -675,12 +675,12 @@ void sub_8031FC4(u8 a, u8 b, bool8 c) 0x02000000, gUnknown_081FAF4C[r10], species, - gPID_perBank[a]); + gPID_perBank[bank1]); } else { - personalityValue = GetMonData(&gEnemyParty[gBattlePartyID[a]], MON_DATA_PERSONALITY); - otId = GetMonData(&gEnemyParty[gBattlePartyID[a]], MON_DATA_OT_ID); + personalityValue = GetMonData(&gEnemyParty[gBattlePartyID[bank1]], MON_DATA_PERSONALITY); + otId = GetMonData(&gEnemyParty[gBattlePartyID[bank1]], MON_DATA_OT_ID); HandleLoadSpecialPokePic( &gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, @@ -688,13 +688,13 @@ void sub_8031FC4(u8 a, u8 b, bool8 c) 0x02000000, gUnknown_081FAF4C[r10], species, - gPID_perBank[a]); + gPID_perBank[bank1]); } } src = gUnknown_081FAF4C[r10]; - dst = (void *)(VRAM + 0x10000 + gSprites[gObjectBankIDs[a]].oam.tileNum * 32); + dst = (void *)(VRAM + 0x10000 + gSprites[gObjectBankIDs[bank1]].oam.tileNum * 32); DmaCopy32(3, src, dst, 0x800); - paletteOffset = 0x100 + a * 16; + paletteOffset = 0x100 + bank1 * 16; lzPaletteData = species_and_otid_get_pal(species, otId, personalityValue); sub_800D238(lzPaletteData, ewram); LoadPalette(ewram, paletteOffset, 32); @@ -703,21 +703,21 @@ void sub_8031FC4(u8 a, u8 b, bool8 c) u16 *paletteSrc = (u16 *)(ewram + 0x16400); sub_800D238(lzPaletteData, paletteSrc); - LoadPalette(paletteSrc + gBattleMonForms[b] * 16, paletteOffset, 32); + LoadPalette(paletteSrc + gBattleMonForms[bank2] * 16, paletteOffset, 32); } BlendPalette(paletteOffset, 16, 6, 0x7FFF); CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); if (!IsContest()) { - ewram17800[a].unk2 = species; - gBattleMonForms[a] = gBattleMonForms[b]; + ewram17800[bank1].transformedSpecies = species; + gBattleMonForms[bank1] = gBattleMonForms[bank2]; } - gSprites[gObjectBankIDs[a]].pos1.y = sub_8077F68(a); - StartSpriteAnim(&gSprites[gObjectBankIDs[a]], gBattleMonForms[a]); + gSprites[gObjectBankIDs[bank1]].pos1.y = sub_8077F68(bank1); + StartSpriteAnim(&gSprites[gObjectBankIDs[bank1]], gBattleMonForms[bank1]); } } -void sub_8032350(u8 a, u8 b) +void BattleLoadSubstituteSprite(u8 a, u8 b) { u8 r4; u16 foo; @@ -750,16 +750,16 @@ void sub_8032350(u8 a, u8 b) if (!IsContest()) { if (GetBankSide(a) != 0) - sub_8031794(&gEnemyParty[gBattlePartyID[a]], a); + BattleLoadOpponentMonSprite(&gEnemyParty[gBattlePartyID[a]], a); else - sub_80318FC(&gPlayerParty[gBattlePartyID[a]], a); + BattleLoadPlayerMonSprite(&gPlayerParty[gBattlePartyID[a]], a); } } } void refresh_graphics_maybe(u8 a, u8 b, u8 spriteId) { - sub_8032350(a, b); + BattleLoadSubstituteSprite(a, b); StartSpriteAnim(&gSprites[spriteId], gBattleMonForms[a]); if (b == 0) gSprites[spriteId].pos1.y = sub_8077F7C(a); @@ -770,12 +770,12 @@ void refresh_graphics_maybe(u8 a, u8 b, u8 spriteId) void sub_80324BC(u8 a, u16 b) { if (b == 0xA4) - ewram17800[a].unk0_2 = 1; + ewram17800[a].substituteSprite = 1; } void sub_80324E0(u8 a) { - ewram17800[a].unk0_2 = 0; + ewram17800[a].substituteSprite = 0; } void sub_80324F8(struct Pokemon *pkmn, u8 b) @@ -896,9 +896,9 @@ void sub_80328A4(struct Sprite *sprite) } if (gAnimScriptActive || r7->invisible) invisible = TRUE; - else if (ewram17800[r4].unk2 != 0 && gEnemyMonElevation[ewram17800[r4].unk2] == 0) + else if (ewram17800[r4].transformedSpecies != 0 && gEnemyMonElevation[ewram17800[r4].transformedSpecies] == 0) invisible = TRUE; - if (ewram17800[r4].unk0_2) + if (ewram17800[r4].substituteSprite) invisible = TRUE; sprite->pos1.x = r7->pos1.x; sprite->pos2.x = r7->pos2.x; @@ -914,8 +914,8 @@ void sub_8032984(u8 a, u16 b) { if (GetBankSide(a) != 0) { - if (ewram17800[a].unk2 != 0) - b = ewram17800[a].unk2; + if (ewram17800[a].transformedSpecies != 0) + b = ewram17800[a].transformedSpecies; if (gEnemyMonElevation[b] != 0) gSprites[ewram17810[a].unk7].callback = sub_80328A4; else @@ -953,7 +953,7 @@ void sub_8032A38(void) void sub_8032AA8(u8 a, u8 b) { - ewram17800[a].unk2 = 0; + ewram17800[a].transformedSpecies = 0; gBattleMonForms[a] = 0; if (b == 0) sub_80324E0(a); @@ -1168,7 +1168,7 @@ void sub_8033264(void) { if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy) { - if (ewram17800[gActiveBank].unk0_2) + if (ewram17800[gActiveBank].substituteSprite) move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); gBattleBankFunc[gActiveBank] = sub_80332D0; } diff --git a/src/battle_8.c b/src/battle_8.c index 75f10c4b1..6d17ecd28 100644 --- a/src/battle_8.c +++ b/src/battle_8.c @@ -58,7 +58,7 @@ extern u8 sub_8077ABC(); extern u8 sub_8077F68(); extern u8 sub_8079E90(); extern void sub_8033018(void); -extern void sub_8031794(); +extern void BattleLoadOpponentMonSprite(); extern u8 GetBankIdentity(u8); extern void sub_8032984(u8, u16); extern void sub_80333D4(void); @@ -714,7 +714,7 @@ void OpponentHandleLoadPokeSprite(void) { u16 species = GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES); - sub_8031794(&gEnemyParty[gBattlePartyID[gActiveBank]], gActiveBank); + BattleLoadOpponentMonSprite(&gEnemyParty[gBattlePartyID[gActiveBank]], gActiveBank); GetMonSpriteTemplate_803C56C(species, GetBankIdentity(gActiveBank)); gObjectBankIDs[gActiveBank] = CreateSprite( &gUnknown_02024E8C, @@ -746,7 +746,7 @@ void sub_803495C(u8 a, u8 b) gBattlePartyID[a] = gBattleBufferA[a][1]; species = GetMonData(&gEnemyParty[gBattlePartyID[a]], MON_DATA_SPECIES); gUnknown_0300434C[a] = CreateInvisibleSpriteWithCallback(sub_80312F0); - sub_8031794(&gEnemyParty[gBattlePartyID[a]], a); + BattleLoadOpponentMonSprite(&gEnemyParty[gBattlePartyID[a]], a); GetMonSpriteTemplate_803C56C(species, GetBankIdentity(a)); gObjectBankIDs[a] = CreateSprite( &gUnknown_02024E8C, diff --git a/src/battle_811DA74.c b/src/battle_811DA74.c index 36a287efc..47ae8246f 100644 --- a/src/battle_811DA74.c +++ b/src/battle_811DA74.c @@ -87,12 +87,12 @@ extern void oamt_set_x3A_32(); extern void sub_8078B34(struct Sprite *); extern void sub_80105EC(struct Sprite *); extern s32 sub_803FC34(u16); -extern void sub_8031AF4(); +extern void LoadPlayerTrainerBankSprite(); extern void sub_80313A0(struct Sprite *); extern u8 sub_8046400(); extern void sub_80312F0(struct Sprite *); extern u8 CreateInvisibleSpriteWithCallback(); -extern void sub_80318FC(); +extern void BattleLoadPlayerMonSprite(); extern u8 sub_8077ABC(); extern u8 sub_8077F68(); extern u8 sub_8079E90(); @@ -989,7 +989,7 @@ void sub_811F664(void) void sub_811F6D8(void) { - sub_80318FC(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + BattleLoadPlayerMonSprite(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); GetMonSpriteTemplate_803C56C( GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES), GetBankIdentity(gActiveBank)); @@ -1009,7 +1009,7 @@ void sub_811F7F4(void) { sub_8032AA8(gActiveBank, gBattleBufferA[gActiveBank][2]); gBattlePartyID[gActiveBank] = gBattleBufferA[gActiveBank][1]; - sub_80318FC(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + BattleLoadPlayerMonSprite(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); sub_811F864(gActiveBank, gBattleBufferA[gActiveBank][2]); gBattleBankFunc[gActiveBank] = sub_811E1BC; } @@ -1092,7 +1092,7 @@ void sub_811FAE4(void) xOffset = 0; gender = gLinkPlayers[GetMultiplayerId() ^ 1].gender; } - sub_8031AF4(gender, gActiveBank); + LoadPlayerTrainerBankSprite(gender, gActiveBank); GetMonSpriteTemplate_803C5A0(gender, GetBankIdentity(gActiveBank)); gObjectBankIDs[gActiveBank] = CreateSprite( &gUnknown_02024E8C, @@ -1508,7 +1508,7 @@ void sub_812071C(u8 taskId) sub_811F864(gActiveBank, 0); gActiveBank ^= 2; gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; - sub_80318FC(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + BattleLoadPlayerMonSprite(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); sub_811F864(gActiveBank, 0); gActiveBank ^= 2; } diff --git a/src/battle_anim_8137220.c b/src/battle_anim_8137220.c index bb181d5fb..8d323736a 100644 --- a/src/battle_anim_8137220.c +++ b/src/battle_anim_8137220.c @@ -73,7 +73,7 @@ extern void sub_8043DFC(); extern bool8 IsDoubleBattle(void); extern void c3_0802FDF4(u8); extern void sub_802ECF0(void); -extern void sub_8031AF4(); +extern void LoadPlayerTrainerBankSprite(); extern u8 GetBankIdentity(u8); extern void sub_80313A0(struct Sprite *); extern u8 GetBankByPlayerAI(u8); @@ -981,7 +981,7 @@ void sub_8138CB4(void) void sub_8138D38(void) { - sub_8031AF4(2, gActiveBank); + LoadPlayerTrainerBankSprite(2, gActiveBank); GetMonSpriteTemplate_803C5A0(2, GetBankIdentity(gActiveBank)); gObjectBankIDs[gActiveBank] = CreateSprite( &gUnknown_02024E8C, @@ -996,7 +996,7 @@ void sub_8138D38(void) void sub_8138E04(void) { - sub_8031AF4(2, gActiveBank); + LoadPlayerTrainerBankSprite(2, gActiveBank); GetMonSpriteTemplate_803C5A0(2, GetBankIdentity(gActiveBank)); gObjectBankIDs[gActiveBank] = CreateSprite( &gUnknown_02024E8C, diff --git a/src/reshow_battle_screen.c b/src/reshow_battle_screen.c new file mode 100644 index 000000000..6643ba4b2 --- /dev/null +++ b/src/reshow_battle_screen.c @@ -0,0 +1,262 @@ +#include "global.h" +#include "battle.h" +#include "palette.h" +#include "main.h" +#include "unknown_task.h" +#include "text.h" +#include "rom_8077ABC.h" + +extern struct Window gUnknown_03004210; +extern u16 gUnknown_03004280; +extern u16 gUnknown_03004288; +extern u16 gUnknown_030042A4; +extern u16 gUnknown_030042C0; +extern u16 gUnknown_030041B0; +extern u16 gUnknown_030041B4; +extern u16 gUnknown_030041B8; +extern u16 gUnknown_030042A0; +extern u8 gReservedSpritePaletteCount; +extern u8 gActionSelectionCursor[4]; +extern u8 gBankInMenu; +extern u16 gBattlePartyID[4]; +extern u8 gNoOfAllBanks; +extern u16 gBattleTypeFlags; +extern u8 gObjectBankIDs[4]; + +bool8 sub_800E414(u8 a0); +bool8 sub_8031C30(u8 a0); +void sub_8031EE8(void); +void sub_80327CC(void); +void sub_8032984(u8 a, u16 b); +void sub_800FCD4(void); +void BattleLoadOpponentMonSprite(struct Pokemon *, u8 bank); +void BattleLoadPlayerMonSprite(struct Pokemon *, u8 bank); +void BattleLoadSubstituteSprite(u8 bank, u8 b); +void LoadPlayerTrainerBankSprite(u16 a0, u8 bank); +u8 sub_8077F7C(u8 bank); +u8 sub_8077F68(u8 bank); + +// this file's functions +static void CB2_ReshowBattleScreenAfterMenu(void); +static bool8 LoadAppropiateBankSprite(u8 bank); +void sub_807B184(u8 bank); +void sub_807B508(u8 bank); +void sub_807B06C(void); + +#define RESHOW_STATE 0x1FFFF +#define HELPER_STATE 0x1FFFE + +struct BGCNT +{ + u16 priority : 2; + u16 charBaseBlock : 2; + u16 reserved : 2; + u16 mosaic : 1; + u16 colors : 1; + u16 screenBaseBlock : 5; + u16 screenSize : 2; +}; + +void nullsub_14(void) +{ + +} + +void ReshowBattleScreenAfterMenu(void) +{ + gPaletteFade.bufferTransferDisabled = 1; + SetHBlankCallback(0); + SetVBlankCallback(0); + REG_MOSAIC = 0; + ewram[RESHOW_STATE] = 0; + ewram[HELPER_STATE] = 0; + SetMainCallback2(CB2_ReshowBattleScreenAfterMenu); +} + +static void CB2_ReshowBattleScreenAfterMenu(void) +{ + switch (ewram[RESHOW_STATE]) + { + case 0: + dp12_8087EA4(); + SetUpWindowConfig(&gWindowConfig_81E6C58); + ResetPaletteFade(); + InitWindowFromConfig(&gUnknown_03004210, &gWindowConfig_81E6C58); + gUnknown_030042A4 = 0; + gUnknown_030042A0 = 0; + gUnknown_030042C0 = 0; + gUnknown_030041B4 = 0; + gUnknown_03004288 = 0; + gUnknown_03004280 = 0; + gUnknown_030041B0 = 0; + gUnknown_030041B8 = 0; + break; + case 1: + { + const u32 zero = 0; + CpuFastSet(&zero, (void*) VRAM, 0x1006000); + } + break; + case 2: + if (!sub_800E414(ewram[HELPER_STATE])) + { + ewram[HELPER_STATE]++; + ewram[RESHOW_STATE]--; + } + else + ewram[HELPER_STATE] = 0; + break; + case 3: + ResetSpriteData(); + break; + case 4: + FreeAllSpritePalettes(); + gReservedSpritePaletteCount = 4; + break; + case 5: + sub_8031EE8(); + break; + case 6: + if (sub_8031C30(ewram[HELPER_STATE])) + ewram[HELPER_STATE] = 0; + else + { + ewram[HELPER_STATE]++; + ewram[RESHOW_STATE]--; + } + break; + case 7: + if (!LoadAppropiateBankSprite(0)) + ewram[RESHOW_STATE]--; + break; + case 8: + if (!LoadAppropiateBankSprite(1)) + ewram[RESHOW_STATE]--; + break; + case 9: + if (!LoadAppropiateBankSprite(2)) + ewram[RESHOW_STATE]--; + break; + case 10: + if (!LoadAppropiateBankSprite(3)) + ewram[RESHOW_STATE]--; + break; + case 11: + sub_807B184(0); + break; + case 12: + sub_807B184(1); + break; + case 13: + sub_807B184(2); + break; + case 14: + sub_807B184(3); + break; + case 15: + sub_807B508(0); + break; + case 16: + sub_807B508(1); + break; + case 17: + sub_807B508(2); + break; + case 18: + sub_807B508(3); + break; + case 19: + { + u8 opponentBank; + u16 species; + + sub_80327CC(); + + opponentBank = GetBankByPlayerAI(1); + species = GetMonData(&gEnemyParty[gBattlePartyID[opponentBank]], MON_DATA_SPECIES); + sub_8032984(opponentBank, species); + + if (IsDoubleBattle()) + { + opponentBank = GetBankByPlayerAI(3); + species = GetMonData(&gEnemyParty[gBattlePartyID[opponentBank]], MON_DATA_SPECIES); + sub_8032984(opponentBank, species); + } + sub_802E3E4(gActionSelectionCursor[gBankInMenu], 0); + } + break; + default: + SetHBlankCallback(sub_800FCD4); + SetVBlankCallback(sub_800FCFC); + sub_807B06C(); + BeginHardwarePaletteFade(0xFF, 0, 0x10, 0, 1); + gPaletteFade.bufferTransferDisabled = 0; + SetMainCallback2(sub_800F808); + break; + } + ewram[RESHOW_STATE]++; +} + +void sub_807B06C(void) +{ + struct BGCNT *regBgcnt1, *regBgcnt2; + + sub_800D6D4(); + + regBgcnt1 = (void*)(®_BG1CNT); + regBgcnt1->charBaseBlock = 0; + + regBgcnt2 = (void*)(®_BG2CNT); + regBgcnt2->charBaseBlock = 0; +} + +static bool8 LoadAppropiateBankSprite(u8 bank) +{ + if (bank < gNoOfAllBanks) + { + if (GetBankSide(bank)) + { + if (!ewram17800[bank].substituteSprite) + BattleLoadOpponentMonSprite(&gEnemyParty[gBattlePartyID[bank]], bank); + else + BattleLoadSubstituteSprite(bank, 0); + } + else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI && bank == 0) + LoadPlayerTrainerBankSprite(gSaveBlock2.playerGender, 0); + else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL && bank == 0) + LoadPlayerTrainerBankSprite(2, 0); + else if (!ewram17800[bank].substituteSprite) + BattleLoadPlayerMonSprite(&gPlayerParty[gBattlePartyID[bank]], bank); + else + BattleLoadSubstituteSprite(bank, 0); + + ewram[HELPER_STATE] = 0; + } + return 1; +} + +void sub_807B184(u8 bank) +{ + if (bank < gNoOfAllBanks) + { + u16 species; + s16 posX, posY; + u8 subpriority; + + if (ewram17800[bank].substituteSprite) + posY = sub_8077F7C(); + else + posY = sub_8077F68(); + if (GetBankSide(bank)) + { + if (GetMonData(&gEnemyParty[gBattlePartyID[bank]], MON_DATA_HP)) + { + species = GetMonData(&gEnemyParty[gBattlePartyID[bank]], MON_DATA_SPECIES); + GetMonSpriteTemplate_803C56C(species, GetBankIdentity(bank)); + posX = sub_8077ABC(bank); + subpriority = sub_8079E90(bank); + gObjectBankIDs[] = todo; + } + } + } +} -- cgit v1.2.3 From 78027fb38d7a9cd25bbbb765b88915d7b63f4839 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 23 Aug 2017 23:04:00 +0200 Subject: reshow battle screen is decompiled --- asm/reshow_battle_screen.s | 614 --------------------------------------------- include/battle.h | 2 +- ld_script.txt | 1 - src/battle_10.c | 8 +- src/battle_2.c | 4 +- src/battle_6.c | 8 +- src/battle_7.c | 4 +- src/battle_8.c | 8 +- src/battle_811DA74.c | 10 +- src/battle_anim_8137220.c | 6 +- src/reshow_battle_screen.c | 106 +++++++- 11 files changed, 118 insertions(+), 653 deletions(-) delete mode 100644 asm/reshow_battle_screen.s diff --git a/asm/reshow_battle_screen.s b/asm/reshow_battle_screen.s deleted file mode 100644 index 2b7345366..000000000 --- a/asm/reshow_battle_screen.s +++ /dev/null @@ -1,614 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - - - - thumb_func_start sub_807B184 -sub_807B184: @ 807B184 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r7, r0, 24 - ldr r0, _0807B1B8 @ =gNoOfAllBanks - ldrb r0, [r0] - cmp r7, r0 - bcc _0807B19E - b _0807B4D8 -_0807B19E: - lsls r2, r7, 2 - ldr r0, _0807B1BC @ =0x02017800 - adds r0, r2, r0 - ldrb r1, [r0] - movs r0, 0x4 - ands r0, r1 - str r2, [sp] - cmp r0, 0 - beq _0807B1C0 - adds r0, r7, 0 - bl sub_8077F7C - b _0807B1C6 - .align 2, 0 -_0807B1B8: .4byte gNoOfAllBanks -_0807B1BC: .4byte 0x02017800 -_0807B1C0: - adds r0, r7, 0 - bl sub_8077F68 -_0807B1C6: - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - adds r0, r7, 0 - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _0807B1DA - b _0807B2D8 -_0807B1DA: - ldr r1, _0807B2BC @ =gBattlePartyID - lsls r0, r7, 1 - adds r6, r0, r1 - ldrh r0, [r6] - movs r1, 0x64 - mov r10, r1 - mov r1, r10 - muls r1, r0 - adds r0, r1, 0 - ldr r1, _0807B2C0 @ =gEnemyParty - mov r9, r1 - add r0, r9 - movs r1, 0x39 - bl GetMonData - cmp r0, 0 - bne _0807B1FE - b _0807B4D8 -_0807B1FE: - ldrh r0, [r6] - mov r1, r10 - muls r1, r0 - adds r0, r1, 0 - add r0, r9 - movs r1, 0xB - bl GetMonData - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - adds r0, r7, 0 - bl GetBankIdentity - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl GetMonSpriteTemplate_803C56C - ldr r5, _0807B2C4 @ =gUnknown_02024E8C - adds r0, r7, 0 - movs r1, 0x2 - bl sub_8077ABC - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r7, 0 - bl sub_8079E90 - adds r3, r0, 0 - lsls r3, 24 - lsrs r3, 24 - adds r0, r5, 0 - adds r1, r4, 0 - mov r2, r8 - bl CreateSprite - ldr r4, _0807B2C8 @ =gObjectBankIDs - adds r4, r7, r4 - strb r0, [r4] - ldr r5, _0807B2CC @ =gSprites - ldrb r0, [r4] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - lsls r3, r7, 4 - ldrb r2, [r1, 0x5] - movs r0, 0xF - ands r0, r2 - orrs r0, r3 - strb r0, [r1, 0x5] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r5, 0 - adds r1, 0x1C - adds r0, r1 - ldr r1, _0807B2D0 @ =SpriteCallbackDummy - str r1, [r0] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - strh r7, [r0, 0x2E] - ldrh r0, [r6] - mov r1, r10 - muls r1, r0 - adds r0, r1, 0 - add r0, r9 - movs r1, 0xB - bl GetMonData - ldrb r2, [r4] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r5 - strh r0, [r1, 0x32] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldr r1, _0807B2D4 @ =gBattleMonForms - adds r1, r7, r1 - ldrb r1, [r1] - bl StartSpriteAnim - b _0807B4AC - .align 2, 0 -_0807B2BC: .4byte gBattlePartyID -_0807B2C0: .4byte gEnemyParty -_0807B2C4: .4byte gUnknown_02024E8C -_0807B2C8: .4byte gObjectBankIDs -_0807B2CC: .4byte gSprites -_0807B2D0: .4byte SpriteCallbackDummy -_0807B2D4: .4byte gBattleMonForms -_0807B2D8: - ldr r2, _0807B328 @ =gBattleTypeFlags - ldrh r1, [r2] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0807B338 - cmp r7, 0 - bne _0807B338 - ldr r5, _0807B32C @ =gSaveBlock2 - ldrb r4, [r5, 0x8] - movs r0, 0 - bl GetBankIdentity - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl GetMonSpriteTemplate_803C5A0 - ldr r6, _0807B330 @ =gUnknown_02024E8C - ldr r1, _0807B334 @ =gTrainerBackPicCoords - ldrb r0, [r5, 0x8] - lsls r0, 2 - adds r0, r1 - ldrb r0, [r0] - movs r4, 0x8 - subs r4, r0 - lsls r4, 18 - movs r0, 0xA0 - lsls r0, 15 - adds r4, r0 - asrs r4, 16 - movs r0, 0 - bl sub_8079E90 - adds r3, r0, 0 - lsls r3, 24 - lsrs r3, 24 - adds r0, r6, 0 - b _0807B37C - .align 2, 0 -_0807B328: .4byte gBattleTypeFlags -_0807B32C: .4byte gSaveBlock2 -_0807B330: .4byte gUnknown_02024E8C -_0807B334: .4byte gTrainerBackPicCoords -_0807B338: - ldrh r1, [r2] - movs r0, 0x80 - lsls r0, 2 - ands r0, r1 - cmp r0, 0 - beq _0807B3D0 - cmp r7, 0 - bne _0807B3D0 - movs r0, 0 - bl GetBankIdentity - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - movs r0, 0x2 - bl GetMonSpriteTemplate_803C5A0 - ldr r5, _0807B3BC @ =gUnknown_02024E8C - ldr r0, _0807B3C0 @ =gTrainerBackPicCoords - ldrb r0, [r0, 0x8] - movs r4, 0x8 - subs r4, r0 - lsls r4, 18 - movs r1, 0xA0 - lsls r1, 15 - adds r4, r1 - asrs r4, 16 - movs r0, 0 - bl sub_8079E90 - adds r3, r0, 0 - lsls r3, 24 - lsrs r3, 24 - adds r0, r5, 0 -_0807B37C: - movs r1, 0x50 - adds r2, r4, 0 - bl CreateSprite - ldr r3, _0807B3C4 @ =gObjectBankIDs - strb r0, [r3] - ldr r4, _0807B3C8 @ =gSprites - ldrb r0, [r3] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - ldrb r2, [r1, 0x5] - movs r0, 0xF - ands r0, r2 - strb r0, [r1, 0x5] - ldrb r1, [r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r4, 0 - adds r1, 0x1C - adds r0, r1 - ldr r1, _0807B3CC @ =SpriteCallbackDummy - str r1, [r0] - ldrb r1, [r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - strh r7, [r0, 0x2E] - b _0807B4AC - .align 2, 0 -_0807B3BC: .4byte gUnknown_02024E8C -_0807B3C0: .4byte gTrainerBackPicCoords -_0807B3C4: .4byte gObjectBankIDs -_0807B3C8: .4byte gSprites -_0807B3CC: .4byte SpriteCallbackDummy -_0807B3D0: - ldr r1, _0807B4E8 @ =gBattlePartyID - lsls r0, r7, 1 - adds r6, r0, r1 - ldrh r0, [r6] - movs r1, 0x64 - mov r10, r1 - mov r1, r10 - muls r1, r0 - adds r0, r1, 0 - ldr r1, _0807B4EC @ =gPlayerParty - mov r9, r1 - add r0, r9 - movs r1, 0x39 - bl GetMonData - cmp r0, 0 - beq _0807B4D8 - ldrh r0, [r6] - mov r1, r10 - muls r1, r0 - adds r0, r1, 0 - add r0, r9 - movs r1, 0xB - bl GetMonData - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - adds r0, r7, 0 - bl GetBankIdentity - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl GetMonSpriteTemplate_803C56C - ldr r5, _0807B4F0 @ =gUnknown_02024E8C - adds r0, r7, 0 - movs r1, 0x2 - bl sub_8077ABC - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r7, 0 - bl sub_8079E90 - adds r3, r0, 0 - lsls r3, 24 - lsrs r3, 24 - adds r0, r5, 0 - adds r1, r4, 0 - mov r2, r8 - bl CreateSprite - ldr r4, _0807B4F4 @ =gObjectBankIDs - adds r4, r7, r4 - strb r0, [r4] - ldr r5, _0807B4F8 @ =gSprites - ldrb r0, [r4] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - lsls r3, r7, 4 - ldrb r2, [r1, 0x5] - movs r0, 0xF - ands r0, r2 - orrs r0, r3 - strb r0, [r1, 0x5] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r5, 0 - adds r1, 0x1C - adds r0, r1 - ldr r1, _0807B4FC @ =SpriteCallbackDummy - str r1, [r0] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - strh r7, [r0, 0x2E] - ldrh r0, [r6] - mov r1, r10 - muls r1, r0 - adds r0, r1, 0 - add r0, r9 - movs r1, 0xB - bl GetMonData - ldrb r2, [r4] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r5 - strh r0, [r1, 0x32] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldr r1, _0807B500 @ =gBattleMonForms - adds r1, r7, r1 - ldrb r1, [r1] - bl StartSpriteAnim -_0807B4AC: - ldr r1, _0807B4F8 @ =gSprites - ldr r0, _0807B4F4 @ =gObjectBankIDs - adds r0, r7, r0 - ldrb r0, [r0] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r1 - ldr r0, _0807B504 @ =0x02017800 - ldr r1, [sp] - adds r0, r1, r0 - ldr r1, [r0] - lsls r1, 31 - adds r2, 0x3E - lsrs r1, 31 - lsls r1, 2 - ldrb r3, [r2] - movs r0, 0x5 - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2] -_0807B4D8: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0807B4E8: .4byte gBattlePartyID -_0807B4EC: .4byte gPlayerParty -_0807B4F0: .4byte gUnknown_02024E8C -_0807B4F4: .4byte gObjectBankIDs -_0807B4F8: .4byte gSprites -_0807B4FC: .4byte SpriteCallbackDummy -_0807B500: .4byte gBattleMonForms -_0807B504: .4byte 0x02017800 - thumb_func_end sub_807B184 - - thumb_func_start sub_807B508 -sub_807B508: @ 807B508 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _0807B530 @ =gNoOfAllBanks - ldrb r0, [r0] - cmp r5, r0 - bcc _0807B518 - b _0807B68A -_0807B518: - ldr r2, _0807B534 @ =gBattleTypeFlags - ldrh r1, [r2] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0807B538 - cmp r5, 0 - bne _0807B538 - bl battle_make_oam_safari_battle - b _0807B550 - .align 2, 0 -_0807B530: .4byte gNoOfAllBanks -_0807B534: .4byte gBattleTypeFlags -_0807B538: - ldrh r1, [r2] - movs r0, 0x80 - lsls r0, 2 - ands r0, r1 - cmp r0, 0 - beq _0807B54A - cmp r5, 0 - bne _0807B54A - b _0807B68A -_0807B54A: - adds r0, r5, 0 - bl battle_make_oam_normal_battle -_0807B550: - lsls r0, 24 - lsrs r6, r0, 24 - ldr r0, _0807B58C @ =gHealthboxIDs - adds r4, r5, r0 - strb r6, [r4] - adds r0, r5, 0 - bl sub_8043F44 - adds r0, r6, 0 - bl sub_8043DFC - adds r0, r5, 0 - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - beq _0807B598 - ldrb r0, [r4] - ldr r1, _0807B590 @ =gBattlePartyID - lsls r4, r5, 1 - adds r1, r4, r1 - ldrh r2, [r1] - movs r1, 0x64 - muls r1, r2 - ldr r2, _0807B594 @ =gEnemyParty - adds r1, r2 - movs r2, 0 - bl sub_8045A5C - b _0807B5E4 - .align 2, 0 -_0807B58C: .4byte gHealthboxIDs -_0807B590: .4byte gBattlePartyID -_0807B594: .4byte gEnemyParty -_0807B598: - ldr r0, _0807B5C0 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0807B5CC - ldrb r0, [r4] - ldr r1, _0807B5C4 @ =gBattlePartyID - lsls r4, r5, 1 - adds r1, r4, r1 - ldrh r2, [r1] - movs r1, 0x64 - muls r1, r2 - ldr r2, _0807B5C8 @ =gPlayerParty - adds r1, r2 - movs r2, 0xA - bl sub_8045A5C - b _0807B5E4 - .align 2, 0 -_0807B5C0: .4byte gBattleTypeFlags -_0807B5C4: .4byte gBattlePartyID -_0807B5C8: .4byte gPlayerParty -_0807B5CC: - ldrb r0, [r4] - ldr r1, _0807B610 @ =gBattlePartyID - lsls r4, r5, 1 - adds r1, r4, r1 - ldrh r2, [r1] - movs r1, 0x64 - muls r1, r2 - ldr r2, _0807B614 @ =gPlayerParty - adds r1, r2 - movs r2, 0 - bl sub_8045A5C -_0807B5E4: - adds r0, r5, 0 - bl GetBankIdentity - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - beq _0807B600 - adds r0, r5, 0 - bl GetBankIdentity - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bne _0807B61C -_0807B600: - ldr r0, _0807B618 @ =gHealthboxIDs - adds r0, r5, r0 - ldrb r0, [r0] - movs r1, 0x1 - bl nullsub_11 - b _0807B628 - .align 2, 0 -_0807B610: .4byte gBattlePartyID -_0807B614: .4byte gPlayerParty -_0807B618: .4byte gHealthboxIDs -_0807B61C: - ldr r0, _0807B654 @ =gHealthboxIDs - adds r0, r5, r0 - ldrb r0, [r0] - movs r1, 0 - bl nullsub_11 -_0807B628: - adds r0, r5, 0 - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - beq _0807B660 - ldr r0, _0807B658 @ =gBattlePartyID - adds r0, r4, r0 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0807B65C @ =gEnemyParty - adds r0, r1 - movs r1, 0x39 - bl GetMonData - cmp r0, 0 - bne _0807B68A - adds r0, r6, 0 - bl sub_8043DB0 - b _0807B68A - .align 2, 0 -_0807B654: .4byte gHealthboxIDs -_0807B658: .4byte gBattlePartyID -_0807B65C: .4byte gEnemyParty -_0807B660: - ldr r0, _0807B690 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0807B68A - ldr r0, _0807B694 @ =gBattlePartyID - adds r0, r4, r0 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0807B698 @ =gPlayerParty - adds r0, r1 - movs r1, 0x39 - bl GetMonData - cmp r0, 0 - bne _0807B68A - adds r0, r6, 0 - bl sub_8043DB0 -_0807B68A: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0807B690: .4byte gBattleTypeFlags -_0807B694: .4byte gBattlePartyID -_0807B698: .4byte gPlayerParty - thumb_func_end sub_807B508 - - .align 2, 0 @ Don't pad with nop. diff --git a/include/battle.h b/include/battle.h index d948dfa7d..08ed5cf58 100644 --- a/include/battle.h +++ b/include/battle.h @@ -520,7 +520,7 @@ struct BattleResults struct Struct2017800 { - u8 unk0_0:1; + u8 invisible:1; u8 unk0_1:1; u8 substituteSprite:1; u8 unk0_3:1; diff --git a/ld_script.txt b/ld_script.txt index 28254eba9..3afb9759a 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -121,7 +121,6 @@ SECTIONS { src/rom_8077ABC.o(.text); src/task.o(.text); src/reshow_battle_screen.o(.text); - asm/reshow_battle_screen.o(.text); src/battle_anim_807B69C.o(.text); src/title_screen.o(.text); src/field_weather.o(.text); diff --git a/src/battle_10.c b/src/battle_10.c index c2053a5d1..1a01e5383 100644 --- a/src/battle_10.c +++ b/src/battle_10.c @@ -765,7 +765,7 @@ void sub_8039648(void) switch (ewram17810[gActiveBank].unk4) { case 0: - if (ewram17800[gActiveBank].unk0_2) + if (ewram17800[gActiveBank].substituteSprite) move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); ewram17810[gActiveBank].unk4 = 1; break; @@ -834,7 +834,7 @@ void sub_803995C(void) { if (ewram17810[gActiveBank].unk4 == 0) { - if (ewram17800[gActiveBank].unk0_2) + if (ewram17800[gActiveBank].substituteSprite) move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); ewram17810[gActiveBank].unk4++; } @@ -909,7 +909,7 @@ void sub_8039B64(void) switch (ewram17810[gActiveBank].unk4) { case 0: - if (ewram17800[gActiveBank].unk0_2 && !ewram17800[gActiveBank].unk0_3) + if (ewram17800[gActiveBank].substituteSprite && !ewram17800[gActiveBank].unk0_3) { ewram17800[gActiveBank].unk0_3 = 1; move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); @@ -929,7 +929,7 @@ void sub_8039B64(void) if (!gAnimScriptActive) { sub_80326EC(1); - if ((ewram17800[gActiveBank].unk0_2) && r7 <= 1) + if ((ewram17800[gActiveBank].substituteSprite) && r7 <= 1) { move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); ewram17800[gActiveBank].unk0_3 = 0; diff --git a/src/battle_2.c b/src/battle_2.c index 7772444d7..bdd908ea5 100644 --- a/src/battle_2.c +++ b/src/battle_2.c @@ -1347,8 +1347,8 @@ void sub_8010384(struct Sprite *sprite) u16 species; u8 yOffset; - if (ewram17800[r6].unk2 != 0) - species = ewram17800[r6].unk2; + if (ewram17800[r6].transformedSpecies != 0) + species = ewram17800[r6].transformedSpecies; else species = sprite->data2; diff --git a/src/battle_6.c b/src/battle_6.c index 6fa0e3948..e7f152a4b 100644 --- a/src/battle_6.c +++ b/src/battle_6.c @@ -800,7 +800,7 @@ void sub_802FB2C(void) switch (ewram17810[gActiveBank].unk4) { case 0: - if (ewram17800[gActiveBank].unk0_2) + if (ewram17800[gActiveBank].substituteSprite) move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); ewram17810[gActiveBank].unk4 = 1; break; @@ -875,7 +875,7 @@ void sub_802FE7C(void) { if (ewram17810[gActiveBank].unk4 == 0) { - if (ewram17800[gActiveBank].unk0_2) + if (ewram17800[gActiveBank].substituteSprite) move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); ewram17810[gActiveBank].unk4++; } @@ -963,7 +963,7 @@ void sub_8030190(void) switch (ewram17810[gActiveBank].unk4) { case 0: - if (ewram17800[gActiveBank].unk0_2 == 1 && ewram17800[gActiveBank].unk0_3 == 0) + if (ewram17800[gActiveBank].substituteSprite == 1 && ewram17800[gActiveBank].unk0_3 == 0) { ewram17800[gActiveBank].unk0_3 = 1; move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); @@ -983,7 +983,7 @@ void sub_8030190(void) if (!gAnimScriptActive) { sub_80326EC(1); - if (ewram17800[gActiveBank].unk0_2 == 1 && r7 < 2) + if (ewram17800[gActiveBank].substituteSprite == 1 && r7 < 2) { move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); ewram17800[gActiveBank].unk0_3 = 0; diff --git a/src/battle_7.c b/src/battle_7.c index 8c5f5f45d..0c4b118b4 100644 --- a/src/battle_7.c +++ b/src/battle_7.c @@ -607,12 +607,12 @@ void sub_8031F24(void) s32 i; for (i = 0; i < gNoOfAllBanks; i++) - ewram17800[i].unk0_0 = gSprites[gObjectBankIDs[i]].invisible; + ewram17800[i].invisible = gSprites[gObjectBankIDs[i]].invisible; } void sub_8031F88(u8 a) { - ewram17800[a].unk0_0 = gSprites[gObjectBankIDs[a]].invisible; + ewram17800[a].invisible = gSprites[gObjectBankIDs[a]].invisible; } void sub_8031FC4(u8 bank1, u8 bank2, bool8 c) diff --git a/src/battle_8.c b/src/battle_8.c index 6d17ecd28..44e42d0d6 100644 --- a/src/battle_8.c +++ b/src/battle_8.c @@ -785,7 +785,7 @@ void sub_8034B74(void) switch (ewram17810[gActiveBank].unk4) { case 0: - if (ewram17800[gActiveBank].unk0_2) + if (ewram17800[gActiveBank].substituteSprite) move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); ewram17810[gActiveBank].unk4 = 1; break; @@ -876,7 +876,7 @@ void sub_8035030(void) { if (ewram17810[gActiveBank].unk4 == 0) { - if (ewram17800[gActiveBank].unk0_2) + if (ewram17800[gActiveBank].substituteSprite) move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); ewram17810[gActiveBank].unk4++; } @@ -951,7 +951,7 @@ void sub_8035238(void) switch (ewram17810[gActiveBank].unk4) { case 0: - if (ewram17800[gActiveBank].unk0_2 && !ewram17800[gActiveBank].unk0_3) + if (ewram17800[gActiveBank].substituteSprite && !ewram17800[gActiveBank].unk0_3) { ewram17800[gActiveBank].unk0_3 = 1; move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); @@ -971,7 +971,7 @@ void sub_8035238(void) if (!gAnimScriptActive) { sub_80326EC(1); - if ((ewram17800[gActiveBank].unk0_2) && r7 <= 1) + if ((ewram17800[gActiveBank].substituteSprite) && r7 <= 1) { move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); ewram17800[gActiveBank].unk0_3 = 0; diff --git a/src/battle_811DA74.c b/src/battle_811DA74.c index 47ae8246f..14f547b82 100644 --- a/src/battle_811DA74.c +++ b/src/battle_811DA74.c @@ -298,7 +298,7 @@ void sub_811E034(void) { if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy) { - if (ewram17800[gActiveBank].unk0_2) + if (ewram17800[gActiveBank].substituteSprite) move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); gBattleBankFunc[gActiveBank] = sub_811E0A0; } @@ -1059,7 +1059,7 @@ void sub_811FA5C(void) switch (ewram17810[gActiveBank].unk4) { case 0: - if (ewram17800[gActiveBank].unk0_2) + if (ewram17800[gActiveBank].substituteSprite) move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); ewram17810[gActiveBank].unk4 = 1; break; @@ -1125,7 +1125,7 @@ void sub_811FCE8(void) { if (ewram17810[gActiveBank].unk4 == 0) { - if (ewram17800[gActiveBank].unk0_2) + if (ewram17800[gActiveBank].substituteSprite) move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); ewram17810[gActiveBank].unk4++; } @@ -1200,7 +1200,7 @@ void sub_811FF30(void) switch (ewram17810[gActiveBank].unk4) { case 0: - if (ewram17800[gActiveBank].unk0_2 && !ewram17800[gActiveBank].unk0_3) + if (ewram17800[gActiveBank].substituteSprite && !ewram17800[gActiveBank].unk0_3) { ewram17800[gActiveBank].unk0_3 = 1; move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); @@ -1220,7 +1220,7 @@ void sub_811FF30(void) if (!gAnimScriptActive) { sub_80326EC(1); - if ((ewram17800[gActiveBank].unk0_2) && r7 <= 1) + if ((ewram17800[gActiveBank].substituteSprite) && r7 <= 1) { move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); ewram17800[gActiveBank].unk0_3 = 0; diff --git a/src/battle_anim_8137220.c b/src/battle_anim_8137220.c index 8d323736a..af2b86c17 100644 --- a/src/battle_anim_8137220.c +++ b/src/battle_anim_8137220.c @@ -1081,7 +1081,7 @@ void sub_81390D0(void) switch (ewram17810[gActiveBank].unk4) { case 0: - if (ewram17800[gActiveBank].unk0_2 == 1) + if (ewram17800[gActiveBank].substituteSprite == 1) move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); ewram17810[gActiveBank].unk4 = 1; break; @@ -1098,7 +1098,7 @@ void sub_81390D0(void) if (!gAnimScriptActive) { sub_80326EC(1); - if (ewram17800[gActiveBank].unk0_2 == 1) + if (ewram17800[gActiveBank].substituteSprite == 1) move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); ewram17810[gActiveBank].unk4 = 3; } @@ -1382,7 +1382,7 @@ void sub_81398BC(u8 bank) { u16 species; - ewram17800[bank].unk2 = 0; + ewram17800[bank].transformedSpecies = 0; gBattlePartyID[bank] = gBattleBufferA[bank][1]; species = GetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_SPECIES); gUnknown_0300434C[bank] = CreateInvisibleSpriteWithCallback(sub_80312F0); diff --git a/src/reshow_battle_screen.c b/src/reshow_battle_screen.c index 6643ba4b2..1ed5da7d3 100644 --- a/src/reshow_battle_screen.c +++ b/src/reshow_battle_screen.c @@ -5,7 +5,9 @@ #include "unknown_task.h" #include "text.h" #include "rom_8077ABC.h" +#include "data2.h" +extern struct SpriteTemplate gUnknown_02024E8C; extern struct Window gUnknown_03004210; extern u16 gUnknown_03004280; extern u16 gUnknown_03004288; @@ -22,6 +24,8 @@ extern u16 gBattlePartyID[4]; extern u8 gNoOfAllBanks; extern u16 gBattleTypeFlags; extern u8 gObjectBankIDs[4]; +extern u8 gBattleMonForms[4]; +extern u8 gHealthboxIDs[4]; bool8 sub_800E414(u8 a0); bool8 sub_8031C30(u8 a0); @@ -35,6 +39,13 @@ void BattleLoadSubstituteSprite(u8 bank, u8 b); void LoadPlayerTrainerBankSprite(u16 a0, u8 bank); u8 sub_8077F7C(u8 bank); u8 sub_8077F68(u8 bank); +void nullsub_11(u8 healthboxID, u8 a1); +void sub_8043DB0(u8 bank); +u8 battle_make_oam_normal_battle(u8 bank); +u8 battle_make_oam_safari_battle(void); +void sub_8045A5C(u8 healthboxID, struct Pokemon*, u8); +void sub_8043F44(u8 bank); +void sub_8043DFC(u8 healthboxID); // this file's functions static void CB2_ReshowBattleScreenAfterMenu(void); @@ -239,24 +250,93 @@ void sub_807B184(u8 bank) { if (bank < gNoOfAllBanks) { - u16 species; - s16 posX, posY; - u8 subpriority; + u8 posY; if (ewram17800[bank].substituteSprite) - posY = sub_8077F7C(); + posY = sub_8077F7C(bank); else - posY = sub_8077F68(); + posY = sub_8077F68(bank); if (GetBankSide(bank)) { - if (GetMonData(&gEnemyParty[gBattlePartyID[bank]], MON_DATA_HP)) - { - species = GetMonData(&gEnemyParty[gBattlePartyID[bank]], MON_DATA_SPECIES); - GetMonSpriteTemplate_803C56C(species, GetBankIdentity(bank)); - posX = sub_8077ABC(bank); - subpriority = sub_8079E90(bank); - gObjectBankIDs[] = todo; - } + if (GetMonData(&gEnemyParty[gBattlePartyID[bank]], MON_DATA_HP) == 0) + return; + GetMonSpriteTemplate_803C56C(GetMonData(&gEnemyParty[gBattlePartyID[bank]], MON_DATA_SPECIES), GetBankIdentity(bank)); + gObjectBankIDs[bank] = CreateSprite(&gUnknown_02024E8C, sub_8077ABC(bank, 2), posY, sub_8079E90(bank)); + gSprites[gObjectBankIDs[bank]].oam.paletteNum = bank; + gSprites[gObjectBankIDs[bank]].callback = SpriteCallbackDummy; + gSprites[gObjectBankIDs[bank]].data0 = bank; + gSprites[gObjectBankIDs[bank]].data2 = GetMonData(&gEnemyParty[gBattlePartyID[bank]], MON_DATA_SPECIES); + StartSpriteAnim(&gSprites[gObjectBankIDs[bank]], gBattleMonForms[bank]); + } + else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI && bank == 0) + { + GetMonSpriteTemplate_803C5A0(gSaveBlock2.playerGender, GetBankIdentity(0)); + gObjectBankIDs[bank] = CreateSprite(&gUnknown_02024E8C, 0x50, + (8 - gTrainerBackPicCoords[gSaveBlock2.playerGender].coords) * 4 + 80, + sub_8079E90(0)); + gSprites[gObjectBankIDs[bank]].oam.paletteNum = bank; + gSprites[gObjectBankIDs[bank]].callback = SpriteCallbackDummy; + gSprites[gObjectBankIDs[bank]].data0 = bank; + } + else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL && bank == 0) + { + GetMonSpriteTemplate_803C5A0(2, GetBankIdentity(0)); + gObjectBankIDs[bank] = CreateSprite(&gUnknown_02024E8C, 0x50, + (8 - gTrainerBackPicCoords[2].coords) * 4 + 80, + sub_8079E90(0)); + gSprites[gObjectBankIDs[bank]].oam.paletteNum = bank; + gSprites[gObjectBankIDs[bank]].callback = SpriteCallbackDummy; + gSprites[gObjectBankIDs[bank]].data0 = bank; + } + else + { + if (GetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_HP) == 0) + return; + GetMonSpriteTemplate_803C56C(GetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_SPECIES), GetBankIdentity(bank)); + gObjectBankIDs[bank] = CreateSprite(&gUnknown_02024E8C, sub_8077ABC(bank, 2), posY, sub_8079E90(bank)); + gSprites[gObjectBankIDs[bank]].oam.paletteNum = bank; + gSprites[gObjectBankIDs[bank]].callback = SpriteCallbackDummy; + gSprites[gObjectBankIDs[bank]].data0 = bank; + gSprites[gObjectBankIDs[bank]].data2 = GetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_SPECIES); + StartSpriteAnim(&gSprites[gObjectBankIDs[bank]], gBattleMonForms[bank]); + } + gSprites[gObjectBankIDs[bank]].invisible = ewram17800[bank].invisible; + } +} + +void sub_807B508(u8 bank) +{ + if (bank < gNoOfAllBanks) + { + u8 healthboxID; + if (gBattleTypeFlags & BATTLE_TYPE_SAFARI && bank == 0) + healthboxID = battle_make_oam_safari_battle(); + else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL && bank == 0) + return; + else + healthboxID = battle_make_oam_normal_battle(bank); + gHealthboxIDs[bank] = healthboxID; + sub_8043F44(bank); + sub_8043DFC(healthboxID); + if (GetBankSide(bank)) + sub_8045A5C(gHealthboxIDs[bank], &gEnemyParty[gBattlePartyID[bank]], 0); + else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) + sub_8045A5C(gHealthboxIDs[bank], &gPlayerParty[gBattlePartyID[bank]], 10); + else + sub_8045A5C(gHealthboxIDs[bank], &gPlayerParty[gBattlePartyID[bank]], 0); + if (GetBankIdentity(bank) == 3 || GetBankIdentity(bank) == 2) + nullsub_11(gHealthboxIDs[bank], 1); + else + nullsub_11(gHealthboxIDs[bank], 0); + if (GetBankSide(bank)) + { + if (GetMonData(&gEnemyParty[gBattlePartyID[bank]], MON_DATA_HP) == 0) + sub_8043DB0(healthboxID); + } + else if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI)) + { + if (GetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_HP) == 0) + sub_8043DB0(healthboxID); } } } -- cgit v1.2.3 From 79ae2bac1e970ddc5828092f7f9ffee094b50220 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 23 Aug 2017 23:23:06 +0200 Subject: reuse struct, static and make it compile --- src/battle_5.c | 2 +- src/reshow_battle_screen.c | 26 ++++++++------------------ 2 files changed, 9 insertions(+), 19 deletions(-) diff --git a/src/battle_5.c b/src/battle_5.c index c54caae92..5972c0cb1 100644 --- a/src/battle_5.c +++ b/src/battle_5.c @@ -943,7 +943,7 @@ void sub_802D680(void) ewram17810[gActiveBank].unk1_0 = 0; FreeSpriteTilesByTag(0x27F9); FreeSpritePaletteByTag(0x27F9); - if (ewram17800[gActiveBank].unk0_2) + if (ewram17800[gActiveBank].substituteSprite) move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); gBattleBankFunc[gActiveBank] = sub_802D730; } diff --git a/src/reshow_battle_screen.c b/src/reshow_battle_screen.c index 1ed5da7d3..202431ae9 100644 --- a/src/reshow_battle_screen.c +++ b/src/reshow_battle_screen.c @@ -1,5 +1,6 @@ #include "global.h" #include "battle.h" +#include "battle_anim.h" #include "palette.h" #include "main.h" #include "unknown_task.h" @@ -50,24 +51,13 @@ void sub_8043DFC(u8 healthboxID); // this file's functions static void CB2_ReshowBattleScreenAfterMenu(void); static bool8 LoadAppropiateBankSprite(u8 bank); -void sub_807B184(u8 bank); -void sub_807B508(u8 bank); -void sub_807B06C(void); +static void sub_807B184(u8 bank); +static void sub_807B508(u8 bank); +static void sub_807B06C(void); #define RESHOW_STATE 0x1FFFF #define HELPER_STATE 0x1FFFE -struct BGCNT -{ - u16 priority : 2; - u16 charBaseBlock : 2; - u16 reserved : 2; - u16 mosaic : 1; - u16 colors : 1; - u16 screenBaseBlock : 5; - u16 screenSize : 2; -}; - void nullsub_14(void) { @@ -208,9 +198,9 @@ static void CB2_ReshowBattleScreenAfterMenu(void) ewram[RESHOW_STATE]++; } -void sub_807B06C(void) +static void sub_807B06C(void) { - struct BGCNT *regBgcnt1, *regBgcnt2; + struct BGCntrlBitfield *regBgcnt1, *regBgcnt2; sub_800D6D4(); @@ -246,7 +236,7 @@ static bool8 LoadAppropiateBankSprite(u8 bank) return 1; } -void sub_807B184(u8 bank) +static void sub_807B184(u8 bank) { if (bank < gNoOfAllBanks) { @@ -304,7 +294,7 @@ void sub_807B184(u8 bank) } } -void sub_807B508(u8 bank) +static void sub_807B508(u8 bank) { if (bank < gNoOfAllBanks) { -- cgit v1.2.3 From 988f5a685a36d3591d07f71ca778d988fb26720a Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Thu, 24 Aug 2017 01:10:30 -0500 Subject: decompile up to sub_80F8598 --- asm/mauville_old_man.s | 1111 -------------------------------------------- data/mauville_old_man.s | 33 -- include/bard_music.h | 43 ++ include/gba/m4a_internal.h | 4 - include/global.h | 34 +- include/m4a.h | 5 + include/trader.h | 1 + src/bard_music.c | 36 +- src/m4a_4.c | 2 +- src/mauville_old_man.c | 726 ++++++++++++++++++++++++++++- 10 files changed, 794 insertions(+), 1201 deletions(-) create mode 100644 include/bard_music.h diff --git a/asm/mauville_old_man.s b/asm/mauville_old_man.s index 9ba82f2be..8fc7f90f8 100644 --- a/asm/mauville_old_man.s +++ b/asm/mauville_old_man.s @@ -6,1117 +6,6 @@ .text - thumb_func_start sub_80F7DC0 -sub_80F7DC0: @ 80F7DC0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x18 - ldr r1, _080F7E84 @ =gUnknown_083E53C8 - mov r0, sp - movs r2, 0x18 - bl memcpy - movs r5, 0 - movs r0, 0x2 - add r0, sp - mov r8, r0 - ldr r1, _080F7E88 @ =gSaveBlock1 + 0x2D94 - adds r1, 0x18 - adds r3, r1, 0 -_080F7DE4: - adds r0, r3, r5 - strb r5, [r0] - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0x7 - bls _080F7DE4 - movs r5, 0 - ldr r2, _080F7E88 @ =gSaveBlock1 + 0x2D94 - adds r2, 0x4 - mov r9, r2 - adds r6, r1, 0 -_080F7DFC: - bl Random - lsls r0, 16 - lsrs r0, 16 - adds r4, r5, 0x1 - adds r1, r4, 0 - bl __modsi3 - lsls r0, 16 - lsrs r1, r0, 16 - adds r2, r6, r5 - ldrb r7, [r2] - adds r1, r6, r1 - ldrb r0, [r1] - strb r0, [r2] - strb r7, [r1] - lsls r4, 16 - lsrs r5, r4, 16 - cmp r5, 0x7 - bls _080F7DFC - movs r3, 0 - mov r10, r3 - movs r5, 0 -_080F7E2A: - lsls r4, r5, 2 - mov r1, sp - adds r0, r1, r4 - ldrb r0, [r0] - bl sub_80EAE88 - add r4, r8 - strh r0, [r4] - add r0, r10 - lsls r0, 16 - lsrs r0, 16 - mov r10, r0 - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0x5 - bls _080F7E2A - movs r0, 0 - ldr r2, _080F7E88 @ =gSaveBlock1 + 0x2D94 - strb r0, [r2, 0x2] - movs r7, 0 - movs r5, 0 -_080F7E56: - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0xA - bl __umodsi3 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0x2 - bhi _080F7E90 - cmp r7, 0x7 - bhi _080F7E90 - lsls r0, r5, 1 - add r0, r9 - ldr r1, _080F7E8C @ =0x0000ffff - strh r1, [r0] - adds r0, r7, 0x1 - lsls r0, 16 - lsrs r7, r0, 16 - adds r4, r5, 0x1 - b _080F7EE2 - .align 2, 0 -_080F7E84: .4byte gUnknown_083E53C8 -_080F7E88: .4byte gSaveBlock1 + 0x2D94 -_080F7E8C: .4byte 0x0000ffff -_080F7E90: - bl Random - lsls r0, 16 - lsrs r0, 16 - mov r1, r10 - bl __umodsi3 - lsls r0, 16 - lsrs r2, r0, 16 - movs r1, 0 - adds r4, r5, 0x1 - lsls r6, r5, 1 - cmp r5, 0x5 - bhi _080F7ECC - mov r3, r8 - ldrh r0, [r3] - b _080F7EC2 -_080F7EB2: - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r5, 0x5 - bhi _080F7ECC - lsls r0, r1, 2 - adds r0, r3, r0 - ldrh r0, [r0] -_080F7EC2: - subs r0, r2, r0 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r0, 0 - bgt _080F7EB2 -_080F7ECC: - cmp r1, 0x6 - bne _080F7ED2 - movs r1, 0 -_080F7ED2: - lsls r0, r1, 2 - add r0, sp - ldrh r0, [r0] - bl sub_80EB784 - mov r2, r9 - adds r1, r2, r6 - strh r0, [r1] -_080F7EE2: - lsls r0, r4, 16 - lsrs r5, r0, 16 - cmp r5, 0x9 - bls _080F7E56 - add sp, 0x18 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80F7DC0 - - thumb_func_start sub_80F7EFC -sub_80F7EFC: @ 80F7EFC - ldr r0, _080F7F08 @ =gSaveBlock1 + 0x2D94 - adds r0, 0x29 - movs r1, 0 - strb r1, [r0] - bx lr - .align 2, 0 -_080F7F08: .4byte gSaveBlock1 + 0x2D94 - thumb_func_end sub_80F7EFC - - thumb_func_start sub_80F7F0C -sub_80F7F0C: @ 80F7F0C - ldr r1, _080F7F14 @ =gSaveBlock1 + 0x2D94 - movs r0, 0 - strb r0, [r1, 0x1] - bx lr - .align 2, 0 -_080F7F14: .4byte gSaveBlock1 + 0x2D94 - thumb_func_end sub_80F7F0C - - thumb_func_start sub_80F7F18 -sub_80F7F18: @ 80F7F18 - push {lr} - bl sub_8109A20 - pop {r0} - bx r0 - thumb_func_end sub_80F7F18 - - thumb_func_start sub_80F7F24 -sub_80F7F24: @ 80F7F24 - push {lr} - bl sub_80F8428 - pop {r0} - bx r0 - thumb_func_end sub_80F7F24 - - thumb_func_start sub_80F7F30 -sub_80F7F30: @ 80F7F30 - push {lr} - bl GetCurrentMauvilleOldMan - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - bhi _080F7F76 - lsls r0, 2 - ldr r1, _080F7F48 @ =_080F7F4C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080F7F48: .4byte _080F7F4C - .align 2, 0 -_080F7F4C: - .4byte _080F7F60 - .4byte _080F7F66 - .4byte _080F7F72 - .4byte _080F7F6C - .4byte _080F7F76 -_080F7F60: - bl sub_80F7EFC - b _080F7F76 -_080F7F66: - bl sub_80F7F0C - b _080F7F76 -_080F7F6C: - bl sub_80F7F24 - b _080F7F76 -_080F7F72: - bl sub_80F7F18 -_080F7F76: - bl sub_80F83D0 - pop {r0} - bx r0 - thumb_func_end sub_80F7F30 - - thumb_func_start sub_80F7F80 -sub_80F7F80: @ 80F7F80 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _080F7FA8 @ =sub_80F8184 - movs r1, 0x50 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080F7FAC @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - strh r4, [r1, 0x12] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080F7FA8: .4byte sub_80F8184 -_080F7FAC: .4byte gTasks - thumb_func_end sub_80F7F80 - - thumb_func_start sub_80F7FB0 -sub_80F7FB0: @ 80F7FB0 - push {r4-r7,lr} - adds r6, r1, 0 - movs r1, 0x8 - ldrsh r0, [r0, r1] - cmp r0, 0x5 - bls _080F7FBE - b _080F817A -_080F7FBE: - lsls r0, 2 - ldr r1, _080F7FC8 @ =_080F7FCC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080F7FC8: .4byte _080F7FCC - .align 2, 0 -_080F7FCC: - .4byte _080F7FE4 - .4byte _080F817A - .4byte _080F8040 - .4byte _080F8074 - .4byte _080F8074 - .4byte _080F817A -_080F7FE4: - ldr r2, _080F8034 @ =gSaveBlock1 + 0x2D94 - ldr r0, _080F8038 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - adds r1, r2, 0 - adds r1, 0xE - cmp r0, 0 - bne _080F7FF4 - adds r1, r2, 0x2 -_080F7FF4: - adds r2, r1, 0 - adds r1, r6, 0 - adds r1, 0xC - movs r3, 0x5 -_080F7FFC: - ldrh r0, [r2] - strh r0, [r1] - adds r2, 0x2 - adds r1, 0x2 - subs r3, 0x1 - cmp r3, 0 - bge _080F7FFC - ldr r2, _080F803C @ =0x0000ffff - adds r4, r2, 0 - movs r2, 0 - adds r1, r6, 0 - adds r1, 0x18 - movs r3, 0x5 -_080F8016: - ldrh r0, [r1] - orrs r0, r4 - strh r0, [r1] - strh r2, [r1, 0x2] - strh r2, [r1, 0x4] - strh r2, [r1, 0x6] - adds r1, 0x8 - subs r3, 0x1 - cmp r3, 0 - bge _080F8016 - movs r0, 0 - strb r0, [r6] - strb r0, [r6, 0x1] - strh r0, [r6, 0x4] - b _080F817A - .align 2, 0 -_080F8034: .4byte gSaveBlock1 + 0x2D94 -_080F8038: .4byte gSpecialVar_0x8004 -_080F803C: .4byte 0x0000ffff -_080F8040: - ldrb r1, [r6] - lsls r1, 1 - adds r0, r6, 0 - adds r0, 0xC - adds r0, r1 - ldrh r4, [r0] - lsrs r0, r4, 9 - ldr r1, _080F8070 @ =0x000001ff - ands r1, r4 - bl sub_814A2D0 - adds r1, r0, 0 - movs r0, 0 - strh r0, [r6, 0x4] - movs r2, 0x3 - ands r2, r4 - lsrs r4, 3 - movs r0, 0x1 - ands r4, r0 - adds r2, r4 - adds r0, r6, 0 - bl sub_814A2EC - b _080F817A - .align 2, 0 -_080F8070: .4byte 0x000001ff -_080F8074: - ldrb r1, [r6, 0x1] - lsls r0, r1, 3 - adds r0, 0x18 - adds r7, r6, r0 - ldrb r0, [r6, 0x3] - cmp r0, 0x1 - beq _080F8124 - cmp r0, 0x1 - bgt _080F808C - cmp r0, 0 - beq _080F8092 - b _080F817A -_080F808C: - cmp r0, 0xFE - beq _080F8170 - b _080F817A -_080F8092: - ldrb r0, [r6, 0x2] - cmp r0, 0 - bne _080F80D0 - cmp r1, 0x6 - beq _080F80A2 - ldrh r0, [r7] - cmp r0, 0xFF - bne _080F80A6 -_080F80A2: - movs r0, 0xFE - b _080F8178 -_080F80A6: - ldrh r0, [r7, 0x2] - strb r0, [r6, 0x2] - ldrh r0, [r7] - cmp r0, 0x32 - bhi _080F80CA - movs r1, 0x3 - bl __udivsi3 - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - lsls r0, r1, 1 - adds r0, r1 - adds r0, 0xF9 - lsls r0, 16 - lsrs r0, 16 - bl m4aSongNumStart -_080F80CA: - movs r0, 0x1 - strb r0, [r6, 0x3] - b _080F8114 -_080F80D0: - ldrh r1, [r6, 0xA] - movs r2, 0xA - ldrsh r0, [r6, r2] - cmp r0, 0xA - ble _080F80E0 - ldrh r0, [r6, 0x6] - subs r0, 0x2 - strh r0, [r6, 0x6] -_080F80E0: - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080F80EE - ldrh r0, [r6, 0x8] - adds r0, 0x40 - b _080F80F2 -_080F80EE: - ldrh r0, [r6, 0x8] - subs r0, 0x40 -_080F80F2: - strh r0, [r6, 0x8] - ldr r4, _080F811C @ =gMPlay_SE2 - ldr r5, _080F8120 @ =0x0000ffff - ldrh r2, [r6, 0x6] - adds r0, r4, 0 - adds r1, r5, 0 - bl m4aMPlayVolumeControl - movs r0, 0x8 - ldrsh r2, [r6, r0] - adds r0, r4, 0 - adds r1, r5, 0 - bl m4aMPlayPitchControl - ldrh r0, [r6, 0xA] - adds r0, 0x1 - strh r0, [r6, 0xA] -_080F8114: - ldrb r0, [r6, 0x2] - subs r0, 0x1 - strb r0, [r6, 0x2] - b _080F817A - .align 2, 0 -_080F811C: .4byte gMPlay_SE2 -_080F8120: .4byte 0x0000ffff -_080F8124: - adds r0, r1, 0x1 - movs r1, 0 - strb r0, [r6, 0x1] - strb r1, [r6, 0x3] - ldrh r0, [r7] - cmp r0, 0x32 - bhi _080F817A - ldrh r0, [r7, 0x6] - lsls r0, 4 - movs r1, 0x80 - lsls r1, 1 - adds r0, r1 - strh r0, [r6, 0x6] - ldr r4, _080F8168 @ =gMPlay_SE2 - ldr r5, _080F816C @ =0x0000ffff - ldrh r2, [r6, 0x6] - adds r0, r4, 0 - adds r1, r5, 0 - bl m4aMPlayVolumeControl - movs r2, 0x80 - lsls r2, 2 - adds r0, r2, 0 - ldrh r7, [r7, 0x4] - adds r0, r7 - strh r0, [r6, 0x8] - movs r0, 0x8 - ldrsh r2, [r6, r0] - adds r0, r4, 0 - adds r1, r5, 0 - bl m4aMPlayPitchControl - b _080F817A - .align 2, 0 -_080F8168: .4byte gMPlay_SE2 -_080F816C: .4byte 0x0000ffff -_080F8170: - ldr r0, _080F8180 @ =gMPlay_SE2 - bl m4aMPlayStop - movs r0, 0xFF -_080F8178: - strb r0, [r6, 0x3] -_080F817A: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080F8180: .4byte gMPlay_SE2 - thumb_func_end sub_80F7FB0 - - thumb_func_start sub_80F8184 -sub_80F8184: @ 80F8184 - push {r4-r7,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r6, r0, 24 - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - ldr r1, _080F81B4 @ =gTasks - adds r5, r0, r1 - ldr r1, _080F81B8 @ =gUnknown_03005DA0 - adds r0, r5, 0 - bl sub_80F7FB0 - movs r1, 0x8 - ldrsh r0, [r5, r1] - cmp r0, 0x5 - bls _080F81A8 - b _080F83C8 -_080F81A8: - lsls r0, 2 - ldr r1, _080F81BC @ =_080F81C0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080F81B4: .4byte gTasks -_080F81B8: .4byte gUnknown_03005DA0 -_080F81BC: .4byte _080F81C0 - .align 2, 0 -_080F81C0: - .4byte _080F81D8 - .4byte _080F8218 - .4byte _080F8228 - .4byte _080F82D8 - .4byte _080F83B8 - .4byte _080F82C6 -_080F81D8: - bl sub_80F7BA0 - ldr r4, _080F820C @ =gMenuWindowPtr - ldr r0, [r4] - ldr r1, _080F8210 @ =gWindowConfig_81E6CE4 - bl InitWindowFromConfig - ldr r0, [r4] - ldr r1, _080F8214 @ =gStringVar4 - movs r2, 0xF - str r2, [sp] - movs r2, 0x2 - movs r3, 0x4 - bl sub_8002EB0 - movs r0, 0 - strh r0, [r5, 0xA] - strh r0, [r5, 0xC] - strh r0, [r5, 0xE] - strh r0, [r5, 0x10] - movs r0, 0x4 - bl FadeOutBGMTemporarily - movs r0, 0x1 - b _080F83C6 - .align 2, 0 -_080F820C: .4byte gMenuWindowPtr -_080F8210: .4byte gWindowConfig_81E6CE4 -_080F8214: .4byte gStringVar4 -_080F8218: - bl IsBGMPausedOrStopped - lsls r0, 24 - cmp r0, 0 - bne _080F8224 - b _080F83C8 -_080F8224: - movs r0, 0x2 - b _080F83C6 -_080F8228: - ldr r4, _080F8240 @ =gSaveBlock1 + 0x2D94 - movs r2, 0xE - ldrsh r1, [r5, r2] - ldr r0, _080F8244 @ =gStringVar4 - adds r1, r0 - movs r3, 0 - ldrb r0, [r1] - ldr r7, _080F8248 @ =gUnknown_03005DA0 - ldrh r2, [r5, 0x12] - ldr r6, _080F824C @ =gUnknown_020388BC - b _080F825A - .align 2, 0 -_080F8240: .4byte gSaveBlock1 + 0x2D94 -_080F8244: .4byte gStringVar4 -_080F8248: .4byte gUnknown_03005DA0 -_080F824C: .4byte gUnknown_020388BC -_080F8250: - adds r1, 0x1 - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - ldrb r0, [r1] -_080F825A: - cmp r0, 0 - beq _080F826A - cmp r0, 0xFE - beq _080F826A - cmp r0, 0xFC - beq _080F826A - cmp r0, 0xFF - bne _080F8250 -_080F826A: - cmp r2, 0 - bne _080F8278 - movs r0, 0x10 - ldrsh r1, [r5, r0] - lsls r1, 1 - adds r0, r4, 0x2 - b _080F8282 -_080F8278: - movs r2, 0x10 - ldrsh r1, [r5, r2] - lsls r1, 1 - adds r0, r4, 0 - adds r0, 0xE -_080F8282: - adds r0, r1 - ldrh r0, [r0] - movs r1, 0x3 - ands r1, r0 - lsrs r0, 3 - movs r2, 0x1 - ands r0, r2 - adds r1, r0 - strh r1, [r6] - movs r1, 0x4 - ldrsh r0, [r7, r1] - adds r1, r3, 0 - bl __divsi3 - movs r1, 0 - strh r0, [r7, 0x4] - lsls r0, 16 - cmp r0, 0 - bgt _080F82AC - movs r0, 0x1 - strh r0, [r7, 0x4] -_080F82AC: - ldrh r0, [r5, 0x10] - adds r0, 0x1 - strh r0, [r5, 0x10] - movs r2, 0xC - ldrsh r0, [r5, r2] - cmp r0, 0 - bne _080F82BE - movs r0, 0x3 - b _080F82C0 -_080F82BE: - movs r0, 0x5 -_080F82C0: - strh r0, [r5, 0x8] - strh r1, [r5, 0xA] - b _080F83C8 -_080F82C6: - ldrh r1, [r5, 0xC] - movs r2, 0xC - ldrsh r0, [r5, r2] - cmp r0, 0 - bne _080F82D2 - b _080F83C4 -_080F82D2: - subs r0, r1, 0x1 - strh r0, [r5, 0xC] - b _080F83C8 -_080F82D8: - ldr r1, _080F8304 @ =gStringVar4 - movs r2, 0xE - ldrsh r0, [r5, r2] - adds r0, r1 - ldrb r4, [r0] - cmp r4, 0xFF - bne _080F830C - movs r0, 0xC8 - lsls r0, 1 - movs r1, 0x6 - bl FadeInNewBGM - ldr r0, _080F8308 @ =gMPlay_SE2 - movs r1, 0x2 - bl m4aMPlayFadeOutTemporarily - bl EnableBothScriptContexts - adds r0, r6, 0 - bl DestroyTask - b _080F83C8 - .align 2, 0 -_080F8304: .4byte gStringVar4 -_080F8308: .4byte gMPlay_SE2 -_080F830C: - cmp r4, 0 - bne _080F832C - ldr r0, _080F8328 @ =gMenuWindowPtr - ldr r0, [r0] - bl sub_8003418 - ldrh r0, [r5, 0xE] - adds r0, 0x1 - strh r0, [r5, 0xE] - movs r0, 0x2 - strh r0, [r5, 0x8] - strh r4, [r5, 0xC] - b _080F83C8 - .align 2, 0 -_080F8328: .4byte gMenuWindowPtr -_080F832C: - cmp r4, 0xFE - bne _080F8340 - ldrh r0, [r5, 0xE] - adds r0, 0x1 - movs r1, 0 - strh r0, [r5, 0xE] - movs r0, 0x2 - strh r0, [r5, 0x8] - strh r1, [r5, 0xC] - b _080F83C8 -_080F8340: - cmp r4, 0xFC - bne _080F8354 - ldrh r0, [r5, 0xE] - adds r0, 0x2 - strh r0, [r5, 0xE] - movs r0, 0x2 - strh r0, [r5, 0x8] - movs r0, 0x8 - strh r0, [r5, 0xC] - b _080F83C8 -_080F8354: - cmp r4, 0x37 - bne _080F8374 - movs r4, 0 - strb r4, [r0] - ldr r0, _080F8370 @ =gMenuWindowPtr - ldr r0, [r0] - bl sub_8003418 - ldrh r0, [r5, 0xE] - adds r0, 0x1 - strh r0, [r5, 0xE] - strh r4, [r5, 0xC] - b _080F83C8 - .align 2, 0 -_080F8370: .4byte gMenuWindowPtr -_080F8374: - movs r1, 0xA - ldrsh r0, [r5, r1] - cmp r0, 0x1 - beq _080F8394 - cmp r0, 0x1 - bgt _080F8386 - cmp r0, 0 - beq _080F838C - b _080F83C8 -_080F8386: - cmp r0, 0x2 - beq _080F83A0 - b _080F83C8 -_080F838C: - ldr r0, _080F839C @ =gMenuWindowPtr - ldr r0, [r0] - bl sub_8003418 -_080F8394: - ldrh r0, [r5, 0xA] - adds r0, 0x1 - strh r0, [r5, 0xA] - b _080F83C8 - .align 2, 0 -_080F839C: .4byte gMenuWindowPtr -_080F83A0: - ldrh r0, [r5, 0xE] - adds r0, 0x1 - movs r1, 0 - strh r0, [r5, 0xE] - strh r1, [r5, 0xA] - ldr r0, _080F83B4 @ =gUnknown_03005DA0 - ldrh r0, [r0, 0x4] - strh r0, [r5, 0xC] - movs r0, 0x4 - b _080F83C6 - .align 2, 0 -_080F83B4: .4byte gUnknown_03005DA0 -_080F83B8: - ldrh r0, [r5, 0xC] - subs r0, 0x1 - strh r0, [r5, 0xC] - lsls r0, 16 - cmp r0, 0 - bne _080F83C8 -_080F83C4: - movs r0, 0x3 -_080F83C6: - strh r0, [r5, 0x8] -_080F83C8: - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80F8184 - - thumb_func_start sub_80F83D0 -sub_80F83D0: @ 80F83D0 - push {r4,lr} - ldr r4, _080F83F4 @ =0x00004010 - bl GetCurrentMauvilleOldMan - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 8 - movs r0, 0x8A - lsls r0, 15 - adds r1, r0 - lsrs r1, 16 - adds r0, r4, 0 - bl VarSet - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080F83F4: .4byte 0x00004010 - thumb_func_end sub_80F83D0 - - thumb_func_start StorytellerSetup -StorytellerSetup: @ 80F83F8 - push {r4,lr} - ldr r0, _080F8424 @ =gSaveBlock1 + 0x2D94 - movs r2, 0 - movs r1, 0x3 - strb r1, [r0] - strb r2, [r0, 0x1] - movs r4, 0 - movs r3, 0xFF - adds r1, r0, 0x4 - movs r2, 0x3 -_080F840C: - strb r4, [r1] - ldrb r0, [r1, 0x4] - orrs r0, r3 - strb r0, [r1, 0x4] - adds r1, 0x1 - subs r2, 0x1 - cmp r2, 0 - bge _080F840C - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080F8424: .4byte gSaveBlock1 + 0x2D94 - thumb_func_end StorytellerSetup - - thumb_func_start sub_80F8428 -sub_80F8428: @ 80F8428 - ldr r0, _080F8434 @ =gSaveBlock1 + 0x2D94 - movs r2, 0 - movs r1, 0x3 - strb r1, [r0] - strb r2, [r0, 0x1] - bx lr - .align 2, 0 -_080F8434: .4byte gSaveBlock1 + 0x2D94 - thumb_func_end sub_80F8428 - - thumb_func_start sub_80F8438 -sub_80F8438: @ 80F8438 - push {lr} - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x32 - bne _080F8444 - movs r0, 0 -_080F8444: - bl GetGameStat - pop {r1} - bx r1 - thumb_func_end sub_80F8438 - - thumb_func_start sub_80F844C -sub_80F844C: @ 80F844C - push {lr} - adds r3, r0, 0 - movs r2, 0 - ldr r1, _080F8460 @ =gUnknown_083E53E0 -_080F8454: - ldrb r0, [r1] - cmp r0, r3 - bne _080F8464 - adds r0, r1, 0 - b _080F846E - .align 2, 0 -_080F8460: .4byte gUnknown_083E53E0 -_080F8464: - adds r1, 0x10 - adds r2, 0x1 - cmp r2, 0x23 - ble _080F8454 - ldr r0, _080F8474 @ =gUnknown_083E5610 -_080F846E: - pop {r1} - bx r1 - .align 2, 0 -_080F8474: .4byte gUnknown_083E5610 - thumb_func_end sub_80F844C - - thumb_func_start sub_80F8478 -sub_80F8478: @ 80F8478 - push {lr} - bl sub_80F844C - ldr r0, [r0, 0x4] - pop {r1} - bx r1 - thumb_func_end sub_80F8478 - - thumb_func_start sub_80F8484 -sub_80F8484: @ 80F8484 - push {lr} - bl sub_80F844C - ldr r0, [r0, 0xC] - pop {r1} - bx r1 - thumb_func_end sub_80F8484 - - thumb_func_start sub_80F8490 -sub_80F8490: @ 80F8490 - push {lr} - bl sub_80F844C - ldr r0, [r0, 0x8] - pop {r1} - bx r1 - thumb_func_end sub_80F8490 - - thumb_func_start sub_80F849C -sub_80F849C: @ 80F849C - push {lr} - movs r1, 0 - ldr r2, _080F84C4 @ =gSaveBlock1 + 0x2D94 - ldrb r0, [r2, 0x4] - cmp r0, 0 - beq _080F84BC - adds r2, 0x4 -_080F84AA: - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x3 - bhi _080F84BC - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0 - bne _080F84AA -_080F84BC: - adds r0, r1, 0 - pop {r1} - bx r1 - .align 2, 0 -_080F84C4: .4byte gSaveBlock1 + 0x2D94 - thumb_func_end sub_80F849C - - thumb_func_start sub_80F84C8 -sub_80F84C8: @ 80F84C8 - lsls r0, 2 - ldr r1, _080F84E8 @ =gSaveBlock1 + 0x2DB8 - adds r0, r1 - ldrb r2, [r0] - ldrb r1, [r0, 0x1] - lsls r1, 8 - orrs r2, r1 - ldrb r1, [r0, 0x2] - lsls r1, 16 - orrs r2, r1 - ldrb r0, [r0, 0x3] - lsls r0, 24 - orrs r2, r0 - adds r0, r2, 0 - bx lr - .align 2, 0 -_080F84E8: .4byte gSaveBlock1 + 0x2DB8 - thumb_func_end sub_80F84C8 - - thumb_func_start sub_80F84EC -sub_80F84EC: @ 80F84EC - lsls r0, 2 - ldr r2, _080F8504 @ =gSaveBlock1 + 0x2DB8 - adds r0, r2 - strb r1, [r0] - lsrs r2, r1, 8 - strb r2, [r0, 0x1] - lsrs r2, r1, 16 - strb r2, [r0, 0x2] - lsrs r1, 24 - strb r1, [r0, 0x3] - bx lr - .align 2, 0 -_080F8504: .4byte gSaveBlock1 + 0x2DB8 - thumb_func_end sub_80F84EC - - thumb_func_start sub_80F8508 -sub_80F8508: @ 80F8508 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r0, _080F8528 @ =gSaveBlock1 + 0x2D94 - adds r0, 0x4 - adds r0, r5, r0 - ldrb r0, [r0] - bl sub_80F8438 - adds r4, r0, 0 - adds r0, r5, 0 - bl sub_80F84C8 - cmp r4, r0 - bhi _080F852C - movs r0, 0 - b _080F852E - .align 2, 0 -_080F8528: .4byte gSaveBlock1 + 0x2D94 -_080F852C: - movs r0, 0x1 -_080F852E: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80F8508 - - thumb_func_start sub_80F8534 -sub_80F8534: @ 80F8534 - push {r4,r5,lr} - adds r5, r1, 0 - lsls r4, r0, 3 - subs r4, r0 - ldr r0, _080F855C @ =gSaveBlock1 + 0x2D9C - adds r4, r0 - adds r0, r5, 0 - movs r1, 0xFF - movs r2, 0x8 - bl memset - adds r0, r5, 0 - adds r1, r4, 0 - movs r2, 0x7 - bl memcpy - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080F855C: .4byte gSaveBlock1 + 0x2D9C - thumb_func_end sub_80F8534 - - thumb_func_start sub_80F8560 -sub_80F8560: @ 80F8560 - push {r4-r6,lr} - adds r6, r1, 0 - lsls r5, r0, 3 - subs r5, r0 - ldr r0, _080F8594 @ =gSaveBlock1 + 0x2D9C - adds r5, r0 - adds r0, r6, 0 - bl StringLength - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r5, 0 - movs r1, 0xFF - movs r2, 0x7 - bl memset - adds r0, r5, 0 - adds r1, r6, 0 - adds r2, r4, 0 - bl StringCopyN - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080F8594: .4byte gSaveBlock1 + 0x2D9C - thumb_func_end sub_80F8560 - - thumb_func_start sub_80F8598 -sub_80F8598: @ 80F8598 - push {r4-r6,lr} - adds r5, r0, 0 - adds r6, r1, 0 - ldr r0, _080F85EC @ =gSaveBlock1 + 0x2D94 - adds r0, 0x4 - adds r0, r5, r0 - strb r6, [r0] - ldr r1, _080F85F0 @ =gSaveBlock2 - adds r0, r5, 0 - bl sub_80F8560 - lsls r4, r6, 24 - lsrs r4, 24 - adds r0, r4, 0 - bl sub_80F8438 - adds r1, r0, 0 - adds r0, r5, 0 - bl sub_80F84EC - ldr r5, _080F85F4 @ =gStringVar1 - adds r0, r4, 0 - bl sub_80F8438 - adds r1, r0, 0 - adds r0, r5, 0 - movs r2, 0 - movs r3, 0xA - bl ConvertIntToDecimalStringN - ldr r4, _080F85F8 @ =gStringVar2 - adds r0, r6, 0 - bl sub_80F8490 - adds r1, r0, 0 - adds r0, r4, 0 - bl StringCopy - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080F85EC: .4byte gSaveBlock1 + 0x2D94 -_080F85F0: .4byte gSaveBlock2 -_080F85F4: .4byte gStringVar1 -_080F85F8: .4byte gStringVar2 - thumb_func_end sub_80F8598 - thumb_func_start sub_80F85FC sub_80F85FC: @ 80F85FC push {r4-r7,lr} diff --git a/data/mauville_old_man.s b/data/mauville_old_man.s index f96963d2d..4ccec0db3 100644 --- a/data/mauville_old_man.s +++ b/data/mauville_old_man.s @@ -3,37 +3,6 @@ .section .rodata - .align 2 -gGiddyAdjectives:: @ 83E5388 - .4byte OtherText_SoPretty - .4byte OtherText_SoDarling - .4byte OtherText_SoRelaxed - .4byte OtherText_SoSunny - .4byte OtherText_SoDesirable - .4byte OtherText_SoExciting - .4byte OtherText_SoAmusing - .4byte OtherText_SoMagical - - .align 2 -gGiddyQuestions:: @ 83E53A8 - .4byte OtherText_WantVacationNicePlace - .4byte OtherText_BoughtCrayonsIsNice - .4byte OtherText_IfWeCouldFloat - .4byte OtherText_SandWashesAwayMakeSad - .4byte OtherText_WhatsBottomSeaLike - .4byte OtherText_SeeSettingSun - .4byte OtherText_LyingInGreenGrass - .4byte OtherText_SecretBasesWonderful - - .align 1 -gUnknown_083E53C8:: @ 83E53C8 - .2byte 0x0, 0 - .2byte 0xC, 0 - .2byte 0xD, 0 - .2byte 0x12, 0 - .2byte 0x13, 0 - .2byte 0x15, 0 - .align 2 gUnknown_083E53E0:: @ 83E53E0 .4byte 0x132, UnknownString_81AEFFC, UnknownString_81AF013, UnknownString_81AF022 @@ -71,8 +40,6 @@ gUnknown_083E53E0:: @ 83E53E0 .4byte 0x12e, UnknownString_81B0523, UnknownString_81B053E, UnknownString_81B0554 .4byte 0x12f, UnknownString_81B05D8, UnknownString_81B05F3, UnknownString_81B0610 .4byte 0x130, UnknownString_81B06A9, UnknownString_81B06C6, UnknownString_81B06D9 - -gUnknown_083E5610:: @ 83E5610 .4byte 0x131, UnknownString_81B0763, UnknownString_81B0781, UnknownString_81B0797 .align 2 diff --git a/include/bard_music.h b/include/bard_music.h new file mode 100644 index 000000000..8b547ff39 --- /dev/null +++ b/include/bard_music.h @@ -0,0 +1,43 @@ +#ifndef GUARD_BARD_MUSIC_H +#define GUARD_BARD_MUSIC_H + +struct BardSound +{ + u8 pad_00[48]; +}; + +struct UnkBard +{ + /*0x00*/ u8 var00; + /*0x01*/ s8 var01; + /*0x02*/ u16 var02; + /*0x04*/ u16 var04; + /*0x06*/ u16 var06; +}; + +struct UnkBard3 +{ + /*0x00*/ u16 var00; + /*0x02*/ u16 var02; + /*0x04*/ s16 var04; + /*0x06*/ u16 var06; +}; + +struct UnkBard2 +{ + /*0x00*/ u8 var00; + /*0x01*/ u8 var01; + /*0x02*/ u8 var02; + /*0x03*/ u8 var03; + /*0x04*/ s16 var04; + /*0x06*/ u16 volume; + /*0x08*/ s16 pitch; + /*0x0A*/ s16 var0A; + /*0x0C*/ u16 var0C[6]; + /*0x18*/ struct UnkBard3 var18[6]; +}; + +struct BardSound *sub_814A2D0(u16 arg0, u16 arg1); +s32 sub_814A2EC(struct UnkBard2 *dest, struct UnkBard *src, u16 arg2); + +#endif // GUARD_BARD_MUSIC_H diff --git a/include/gba/m4a_internal.h b/include/gba/m4a_internal.h index 572b77711..ff92fcc40 100644 --- a/include/gba/m4a_internal.h +++ b/include/gba/m4a_internal.h @@ -404,10 +404,6 @@ void SampleFreqSet(u32 freq); void m4aSoundVSyncOn(void); void m4aSoundVSyncOff(void); -void m4aMPlayTempoControl(struct MusicPlayerInfo *mplayInfo, u16 tempo); -void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 volume); -void m4aMPlayPitchControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 pitch); -void m4aMPlayPanpotControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s8 pan); void ClearModM(struct MusicPlayerTrack *track); void m4aMPlayModDepthSet(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u8 modDepth); void m4aMPlayLFOSpeedSet(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u8 lfoSpeed); diff --git a/include/global.h b/include/global.h index bb501ac93..67039d50e 100644 --- a/include/global.h +++ b/include/global.h @@ -457,14 +457,14 @@ struct MauvilleManCommon struct MauvilleManBard { - u8 id; - u8 unk_2D95; - /*0x2D96*/ u16 songLyrics[6]; - /*0x2DA2*/ u16 mauvilleOldMan_ecArray2[6]; - /*0x2DAE*/ u8 playerName[8]; - /*0x2DB6*/ u8 filler_2DB6[0x3]; - /*0x2DB9*/ u8 playerTrainerId[4]; - u8 unk_2DBD; + /*0x00*/ u8 id; + /*0x01*/ u8 unk_2D95; + /*0x02*/ u16 songLyrics[6]; + /*0x0E*/ u16 mauvilleOldMan_ecArray2[6]; + /*0x1A*/ u8 playerName[8]; + /*0x22*/ u8 filler_2DB6[0x3]; + /*0x25*/ u8 playerTrainerId[4]; + /*0x29*/ u8 unk_2DBD; }; /*size = 0x2C*/ struct MauvilleManHipster @@ -484,18 +484,24 @@ struct MauvilleManTrader struct MauvilleManStoryteller { u8 id; + u8 unk1; + u8 filler2[2]; + u8 unk4[4]; + u8 unk8[4][7]; + u8 unk24[2][4]; // unknown length }; struct MauvilleManGiddy { - u8 id; - u8 unk1; - u8 unk2; - u16 mauvilleOldMan_ecArray[10]; - u8 mauvilleOldMan_ecArray2[12]; - u8 fillerF[0x2]; + /*0x00*/ u8 id; + /*0x01*/ u8 unk1; + /*0x02*/ u8 questionNum; + /*0x04*/ u16 mauvilleOldMan_ecArray[10]; + /*0x18*/ u8 questionList[12]; + /*0x24*/ u8 fillerF[0x2]; }; /*size = 0x2C*/ + typedef union OldMan { struct MauvilleManCommon common; diff --git a/include/m4a.h b/include/m4a.h index b6c8f9072..7d016c98b 100644 --- a/include/m4a.h +++ b/include/m4a.h @@ -16,4 +16,9 @@ void m4aMPlayFadeOutTemporarily(struct MusicPlayerInfo *mplayInfo, u16 speed); void m4aMPlayFadeIn(struct MusicPlayerInfo *mplayInfo, u16 speed); void m4aMPlayImmInit(struct MusicPlayerInfo *mplayInfo); +void m4aMPlayTempoControl(struct MusicPlayerInfo *mplayInfo, u16 tempo); +void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 volume); +void m4aMPlayPitchControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s16 pitch); +void m4aMPlayPanpotControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s8 pan); + #endif //GUARD_M4A_H diff --git a/include/trader.h b/include/trader.h index e8691be6e..832a04b65 100644 --- a/include/trader.h +++ b/include/trader.h @@ -2,5 +2,6 @@ #define GUARD_TRADER_H void TraderSetup(void); +void sub_8109A20(void); #endif // GUARD_TRADER_H diff --git a/src/bard_music.c b/src/bard_music.c index a31568475..ce2a1e9ec 100644 --- a/src/bard_music.c +++ b/src/bard_music.c @@ -1,41 +1,7 @@ #include "global.h" +#include "bard_music.h" #include "easy_chat.h" -struct BardSound -{ - u8 pad_00[48]; -}; - -struct UnkBard -{ - /*0x00*/ u8 var00; - /*0x01*/ s8 var01; - /*0x02*/ u16 var02; - /*0x04*/ u16 var04; - /*0x06*/ u16 var06; -}; - -struct UnkBard3 -{ - /*0x00*/ u16 var00; - /*0x02*/ u16 var02; - /*0x04*/ s16 var04; - /*0x06*/ u16 var06; -}; - -struct UnkBard2 -{ - /*0x00*/ u8 var00; - /*0x01*/ u8 var01; - /*0x02*/ u8 var02; - /*0x03*/ u8 var03; - /*0x04*/ u16 var04; - u8 pad06[4]; - /*0x0A*/ u16 var0A; - u8 pad0C[12]; - /*0x18*/ struct UnkBard3 var18[6]; -}; - extern struct BardSound *gBardMusicTable[]; extern s16 *gUnknown_08417068[]; extern u32 gUnknown_084170F4[]; diff --git a/src/m4a_4.c b/src/m4a_4.c index 99195ec00..2e1d140b4 100644 --- a/src/m4a_4.c +++ b/src/m4a_4.c @@ -45,7 +45,7 @@ void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 mplayInfo->ident = ID_NUMBER; } -void m4aMPlayPitchControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 pitch) +void m4aMPlayPitchControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s16 pitch) { s32 i; u32 bit; diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index 84c8f740c..87bc87e3b 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -1,19 +1,30 @@ #include "global.h" +#include "bard_music.h" #include "mauville_old_man.h" #include "easy_chat.h" #include "easy_chat_constants.h" +#include "event_data.h" +#include "m4a.h" #include "menu.h" +#include "rom4.h" #include "rng.h" #include "script.h" +#include "songs.h" +#include "sound.h" #include "string_util.h" #include "strings.h" +#include "task.h" #include "trader.h" +#define MACRO1(a) (((a) % 4) + (((a) / 8) & 1)) + +extern struct MusicPlayerInfo gMPlay_SE2; + extern u16 gScriptResult; extern u16 gSpecialVar_0x8004; +extern struct UnkBard2 gUnknown_03005DA0; -extern const u8 *gGiddyAdjectives[]; -extern const u8 *gGiddyQuestions[]; +extern u16 gUnknown_020388BC; // set but not used? const u16 gDefaultBardSongLyrics[] = { @@ -34,6 +45,33 @@ const u16 gDefaultBardSongLyrics[] = #endif }; +const u8 *const gGiddyAdjectives[] = +{ + OtherText_SoPretty, + OtherText_SoDarling, + OtherText_SoRelaxed, + OtherText_SoSunny, + OtherText_SoDesirable, + OtherText_SoExciting, + OtherText_SoAmusing, + OtherText_SoMagical, +}; + +const u8 *const gGiddyQuestions[] = +{ + OtherText_WantVacationNicePlace, + OtherText_BoughtCrayonsIsNice, + OtherText_IfWeCouldFloat, + OtherText_SandWashesAwayMakeSad, + OtherText_WhatsBottomSeaLike, + OtherText_SeeSettingSun, + OtherText_LyingInGreenGrass, + OtherText_SecretBasesWonderful, +}; + +void sub_80F8184(u8); +void sub_80F8428(void); + void SetupBard(void) { u16 i; @@ -288,7 +326,7 @@ void ScrSpecial_GenerateGiddyLine(void) } else { - StringCopy(gStringVar4, gGiddyQuestions[giddy->mauvilleOldMan_ecArray2[giddy->unk2++]]); + StringCopy(gStringVar4, gGiddyQuestions[giddy->questionList[giddy->questionNum++]]); } if (!(Random() % 10)) @@ -298,3 +336,685 @@ void ScrSpecial_GenerateGiddyLine(void) gScriptResult = TRUE; } + +#ifdef NONMATCHING +void sub_80F7DC0(void) +{ + u16 arr[][2] = + { + { 0x0, 0}, + { 0xC, 0}, + { 0xD, 0}, + {0x12, 0}, + {0x13, 0}, + {0x15, 0}, + }; + u16 i; + u16 r10; + u16 r7; + + for (i = 0; i < 8; i++) + { + struct MauvilleManGiddy *giddy = &gSaveBlock1.oldMan.giddy; + + //gSaveBlock1.oldMan.giddy.questionList[i] = i; + giddy->questionList[i] = i; + } + + // Scramble questions + for (i = 0; i < 8; i++) + { + struct MauvilleManGiddy *giddy = &gSaveBlock1.oldMan.giddy; + + /* + u16 r1 = Random() % (i + 1); + u8 r7 = gSaveBlock1.oldMan.giddy.questionList[i]; + gSaveBlock1.oldMan.giddy.questionList[i] = gSaveBlock1.oldMan.giddy.questionList[r1]; + gSaveBlock1.oldMan.giddy.questionList[r1] = r7; + */ + u16 r1 = Random() % (i + 1); + u8 r7 = giddy->questionList[i]; + giddy->questionList[i] = giddy->questionList[r1]; + giddy->questionList[r1] = r7; + } + + r10 = 0; + for (i = 0; i < 6; i++) + { + arr[i][1] = sub_80EAE88(arr[i][0]); + r10 += arr[i][1]; + } + + { + struct MauvilleManGiddy *giddy = &gSaveBlock1.oldMan.giddy; + giddy->questionNum = 0; + } + //gSaveBlock1.oldMan.giddy.questionNum = 0; + + r7 = 0; + for (i = 0; i < 10; i++) + { + struct MauvilleManGiddy *giddy = &gSaveBlock1.oldMan.giddy; + + u16 var = Random() % 10; + if (var < 3 && r7 < 8) + { + //gSaveBlock1.oldMan.giddy.mauvilleOldMan_ecArray[i] = 0xFFFF; + giddy->mauvilleOldMan_ecArray[i] = 0xFFFF; + r7++; + } + //_080F7E90 + else + { + s16 r2 = Random() % r10; + + u16 r1 = 0; + + while (i < 6) // comparing the wrong variable + { + r2 = arr[r1][1] - r2; + if (r2 <= 0) + break; + r1++; + } + + if (r1 == 6) + r1 = 0; + //gSaveBlock1.oldMan.giddy.mauvilleOldMan_ecArray[i] = sub_80EB784(arr[r1][0]); + giddy->mauvilleOldMan_ecArray[i] = sub_80EB784(arr[r1][0]); + } + } +} +#else + +const u16 gUnknown_083E53C8[][2] = +{ + { 0x0, 0}, + { 0xC, 0}, + { 0xD, 0}, + {0x12, 0}, + {0x13, 0}, + {0x15, 0}, +}; + +__attribute__((naked)) +void sub_80F7DC0(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\ + sub sp, 0x18\n\ + ldr r1, _080F7E84 @ =gUnknown_083E53C8\n\ + mov r0, sp\n\ + movs r2, 0x18\n\ + bl memcpy\n\ + movs r5, 0\n\ + movs r0, 0x2\n\ + add r0, sp\n\ + mov r8, r0\n\ + ldr r1, _080F7E88 @ =gSaveBlock1 + 0x2D94\n\ + adds r1, 0x18\n\ + adds r3, r1, 0\n\ +_080F7DE4:\n\ + adds r0, r3, r5\n\ + strb r5, [r0]\n\ + adds r0, r5, 0x1\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + cmp r5, 0x7\n\ + bls _080F7DE4\n\ + movs r5, 0\n\ + ldr r2, _080F7E88 @ =gSaveBlock1 + 0x2D94\n\ + adds r2, 0x4\n\ + mov r9, r2\n\ + adds r6, r1, 0\n\ +_080F7DFC:\n\ + bl Random\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + adds r4, r5, 0x1\n\ + adds r1, r4, 0\n\ + bl __modsi3\n\ + lsls r0, 16\n\ + lsrs r1, r0, 16\n\ + adds r2, r6, r5\n\ + ldrb r7, [r2]\n\ + adds r1, r6, r1\n\ + ldrb r0, [r1]\n\ + strb r0, [r2]\n\ + strb r7, [r1]\n\ + lsls r4, 16\n\ + lsrs r5, r4, 16\n\ + cmp r5, 0x7\n\ + bls _080F7DFC\n\ + movs r3, 0\n\ + mov r10, r3\n\ + movs r5, 0\n\ +_080F7E2A:\n\ + lsls r4, r5, 2\n\ + mov r1, sp\n\ + adds r0, r1, r4\n\ + ldrb r0, [r0]\n\ + bl sub_80EAE88\n\ + add r4, r8\n\ + strh r0, [r4]\n\ + add r0, r10\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + mov r10, r0\n\ + adds r0, r5, 0x1\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + cmp r5, 0x5\n\ + bls _080F7E2A\n\ + movs r0, 0\n\ + ldr r2, _080F7E88 @ =gSaveBlock1 + 0x2D94\n\ + strb r0, [r2, 0x2]\n\ + movs r7, 0\n\ + movs r5, 0\n\ +_080F7E56:\n\ + bl Random\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0xA\n\ + bl __umodsi3\n\ + lsls r0, 16\n\ + lsrs r1, r0, 16\n\ + cmp r1, 0x2\n\ + bhi _080F7E90\n\ + cmp r7, 0x7\n\ + bhi _080F7E90\n\ + lsls r0, r5, 1\n\ + add r0, r9\n\ + ldr r1, _080F7E8C @ =0x0000ffff\n\ + strh r1, [r0]\n\ + adds r0, r7, 0x1\n\ + lsls r0, 16\n\ + lsrs r7, r0, 16\n\ + adds r4, r5, 0x1\n\ + b _080F7EE2\n\ + .align 2, 0\n\ +_080F7E84: .4byte gUnknown_083E53C8\n\ +_080F7E88: .4byte gSaveBlock1 + 0x2D94\n\ +_080F7E8C: .4byte 0x0000ffff\n\ +_080F7E90:\n\ + bl Random\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + mov r1, r10\n\ + bl __umodsi3\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + movs r1, 0\n\ + adds r4, r5, 0x1\n\ + lsls r6, r5, 1\n\ + cmp r5, 0x5\n\ + bhi _080F7ECC\n\ + mov r3, r8\n\ + ldrh r0, [r3]\n\ + b _080F7EC2\n\ +_080F7EB2:\n\ + adds r0, r1, 0x1\n\ + lsls r0, 16\n\ + lsrs r1, r0, 16\n\ + cmp r5, 0x5\n\ + bhi _080F7ECC\n\ + lsls r0, r1, 2\n\ + adds r0, r3, r0\n\ + ldrh r0, [r0]\n\ +_080F7EC2:\n\ + subs r0, r2, r0\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + cmp r0, 0\n\ + bgt _080F7EB2\n\ +_080F7ECC:\n\ + cmp r1, 0x6\n\ + bne _080F7ED2\n\ + movs r1, 0\n\ +_080F7ED2:\n\ + lsls r0, r1, 2\n\ + add r0, sp\n\ + ldrh r0, [r0]\n\ + bl sub_80EB784\n\ + mov r2, r9\n\ + adds r1, r2, r6\n\ + strh r0, [r1]\n\ +_080F7EE2:\n\ + lsls r0, r4, 16\n\ + lsrs r5, r0, 16\n\ + cmp r5, 0x9\n\ + bls _080F7E56\n\ + add sp, 0x18\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\ + .syntax divided\n"); +} +#endif + +void sub_80F7EFC(void) +{ + struct MauvilleManBard *bard = &gSaveBlock1.oldMan.bard; + + bard->unk_2DBD = 0; +} + +void sub_80F7F0C(void) +{ + struct MauvilleManHipster *hipster = &gSaveBlock1.oldMan.hipster; + + hipster->unk1 = 0; +} + +void sub_80F7F18(void) +{ + sub_8109A20(); +} + +void sub_80F7F24(void) +{ + sub_80F8428(); +} + +void sub_80F7F30(void) +{ + switch (GetCurrentMauvilleOldMan()) + { + case MAUVILLE_MAN_BARD: + sub_80F7EFC(); + break; + case MAUVILLE_MAN_HIPSTER: + sub_80F7F0C(); + break; + case MAUVILLE_MAN_STORYTELLER: + sub_80F7F24(); + break; + case MAUVILLE_MAN_TRADER: + sub_80F7F18(); + break; + case MAUVILLE_MAN_GIDDY: + break; + } + sub_80F83D0(); +} + +void sub_80F7F80(u8 a) +{ + u8 taskId = CreateTask(sub_80F8184, 0x50); + + gTasks[taskId].data[5] = a; +} + +void BardSingWord(struct Task *task, struct UnkBard2 *b) +{ + switch (task->data[0]) + { + case 0: + { + struct MauvilleManBard *bard = &gSaveBlock1.oldMan.bard; + u16 *r2; + s32 i; + + if (gSpecialVar_0x8004 == 0) + r2 = bard->songLyrics; + else + r2 = bard->mauvilleOldMan_ecArray2; + for (i = 0; i < 6; i++) + b->var0C[i] = r2[i]; + for (i = 0; i < 6; i++) + { + b->var18[i].var00 = 0xFFFF; + b->var18[i].var02 = 0; + b->var18[i].var04 = 0; + b->var18[i].var06 = 0; + } + b->var00 = 0; + b->var01 = 0; + b->var04 = 0; + } + break; + case 1: + break; + case 2: + { + u16 r4 = b->var0C[b->var00]; + // TODO: fix this return type + struct UnkBard *r1 = (struct UnkBard *)sub_814A2D0(r4 / 0x200, r4 % 0x200); + + b->var04 = 0; + sub_814A2EC(b, r1, (r4 % 4) + ((r4 / 8) & 1)); + } + break; + case 3: + case 4: + { + struct UnkBard3 *r7 = &b->var18[b->var01]; + + switch (b->var03) + { + case 0: + if (b->var02 == 0) + { + if (b->var01 == 6 || r7->var00 == 0xFF) + { + b->var03 = 0xFE; + break; + } + b->var02 = r7->var02; + if (r7->var00 <= 50) + { + u16 r1 = r7->var00 / 3; + + m4aSongNumStart(249 + r1 * 3); + } + b->var03 = 1; + } + else + { + if (b->var0A > 10) + b->volume -= 2; + if (b->var0A & 1) + b->pitch += 64; + else + b->pitch -= 64; + m4aMPlayVolumeControl(&gMPlay_SE2, 0xFFFF, b->volume); + m4aMPlayPitchControl(&gMPlay_SE2, 0xFFFF, b->pitch); + b->var0A++; + } + b->var02--; + break; + case 1: + b->var01++; + b->var03 = 0; + if (r7->var00 <= 50) + { + b->volume = 0x100 + r7->var06 * 16; + m4aMPlayVolumeControl(&gMPlay_SE2, 0xFFFF, b->volume); + b->pitch = 0x200 + r7->var04; + m4aMPlayPitchControl(&gMPlay_SE2, 0xFFFF, b->pitch); + } + break; + case 0xFE: + m4aMPlayStop(&gMPlay_SE2); + b->var03 = 0xFF; + break; + } + } + break; + case 5: + break; + } +} + +void sub_80F8184(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; // r5 + + BardSingWord(task, &gUnknown_03005DA0); + switch (task->data[0]) + { + case 0: + sub_80F7BA0(); + InitWindowFromConfig(gMenuWindowPtr, &gWindowConfig_81E6CE4); + sub_8002EB0(gMenuWindowPtr, gStringVar4, 2, 4, 15); + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + task->data[4] = 0; + FadeOutBGMTemporarily(4); + task->data[0] = 1; + break; + case 1: + if (IsBGMPausedOrStopped()) + task->data[0] = 2; + break; + case 2: + { + struct MauvilleManBard *bard = &gSaveBlock1.oldMan.bard; + u8 *string = gStringVar4 + task->data[3]; + u16 wordLen = 0; + // Can't get it to match without hacking + u32 temp; + register s16 zero asm("r1"); + + while (*string != CHAR_SPACE + && *string != CHAR_NEWLINE + && *string != EXT_CTRL_CODE_BEGIN + && *string != EOS) + { + string++; + wordLen++; + } + if (task->data[5] == 0) + gUnknown_020388BC = MACRO1(bard->songLyrics[task->data[4]]); + else + gUnknown_020388BC = MACRO1(bard->mauvilleOldMan_ecArray2[task->data[4]]); + temp = gUnknown_03005DA0.var04 / wordLen; + zero = 0; + gUnknown_03005DA0.var04 = temp; + if (gUnknown_03005DA0.var04 <= 0) + gUnknown_03005DA0.var04 = 1; + task->data[4]++; + if (task->data[2] == 0) + task->data[0] = 3; + else + task->data[0] = 5; + task->data[1] = zero; + } + break; + case 5: + if (task->data[2] == 0) + task->data[0] = 3; + else + task->data[2]--; + break; + case 3: + if (gStringVar4[task->data[3]] == EOS) + { + FadeInNewBGM(BGM_POKECEN, 6); + m4aMPlayFadeOutTemporarily(&gMPlay_SE2, 2); + EnableBothScriptContexts(); + DestroyTask(taskId); + } + else if (gStringVar4[task->data[3]] == CHAR_SPACE) + { + sub_8003418(gMenuWindowPtr); + task->data[3]++; + task->data[0] = 2; + task->data[2] = 0; + } + else if (gStringVar4[task->data[3]] == CHAR_NEWLINE) + { + task->data[3]++; + task->data[0] = 2; + task->data[2] = 0; + } + else if (gStringVar4[task->data[3]] == EXT_CTRL_CODE_BEGIN) + { + task->data[3] += 2; // skip over control codes + task->data[0] = 2; + task->data[2] = 8; + } + else if (gStringVar4[task->data[3]] == 0x37) // What is 0x37 supposed to be? + { + gStringVar4[task->data[3]] = 0; + sub_8003418(gMenuWindowPtr); + task->data[3]++; + task->data[2] = 0; + } + else + { + switch (task->data[1]) + { + case 0: + sub_8003418(gMenuWindowPtr); + task->data[1]++; + break; + case 1: + task->data[1]++; + break; + case 2: + task->data[3]++; + task->data[1] = 0; + task->data[2] = gUnknown_03005DA0.var04; + task->data[0] = 4; + break; + } + } + break; + case 4: + task->data[2]--; + if (task->data[2] == 0) + task->data[0] = 3; + break; + } +} + +void sub_80F83D0(void) +{ + VarSet(0x4010, 0x45 + GetCurrentMauvilleOldMan()); +} + +void StorytellerSetup(void) +{ + struct MauvilleManStoryteller *storyteller = &gSaveBlock1.oldMan.storyteller; + s32 i; + + storyteller->id = MAUVILLE_MAN_STORYTELLER; + storyteller->unk1 = 0; + for (i = 0; i < 4; i++) + { + storyteller->unk4[i] = 0; + storyteller->unk8[0][i] = EOS; // Maybe they meant storyteller->unk8[i][0] instead? + } +} + +void sub_80F8428(void) +{ + struct MauvilleManStoryteller *storyteller = &gSaveBlock1.oldMan.storyteller; + + storyteller->id = MAUVILLE_MAN_STORYTELLER; + storyteller->unk1 = 0; +} + +u32 sub_80F8438(u8 stat) +{ + if (stat == 50) + stat = 0; + GetGameStat(stat); +} + +struct UnknownStruct1 +{ + u8 unk0; + u8 unk1; + const u8 *unk4; + const u8 *unk8; + const u8 *unkC; +}; + +extern const struct UnknownStruct1 gUnknown_083E53E0[]; + +const struct UnknownStruct1 *sub_80F844C(u32 a) +{ + s32 i; + + for (i = 0; i < 36; i++) + { + if (gUnknown_083E53E0[i].unk0 == a) + return &gUnknown_083E53E0[i]; + } + return &gUnknown_083E53E0[35]; +} + +const u8 *sub_80F8478(u32 a) +{ + return sub_80F844C(a)->unk4; +} + +const u8 *sub_80F8484(u32 a) +{ + return sub_80F844C(a)->unkC; +} + +const u8 *sub_80F8490(u32 a) +{ + return sub_80F844C(a)->unk8; +} + +u8 sub_80F849C(void) +{ + u8 i; + + for (i = 0; i < 4; i++) + { + struct MauvilleManStoryteller *storyteller = &gSaveBlock1.oldMan.storyteller; + + if (storyteller->unk4[i] == 0) + break; + } + return i; +} + +u32 sub_80F84C8(u32 a) +{ + u8 *ptr = gSaveBlock1.oldMan.storyteller.unk24[a]; + + return ptr[0] | (ptr[1] << 8) | (ptr[2] << 16) | (ptr[3] << 24); +} + +void sub_80F84EC(u32 a, u32 b) +{ + u8 *ptr = gSaveBlock1.oldMan.storyteller.unk24[a]; + + ptr[0] = b; + ptr[1] = b >> 8; + ptr[2] = b >> 16; + ptr[3] = b >> 24; +} + +bool8 sub_80F8508(u32 a) +{ + struct MauvilleManStoryteller *storyteller = &gSaveBlock1.oldMan.storyteller; + + if (sub_80F8438(storyteller->unk4[a]) > sub_80F84C8(a)) + return TRUE; + else + return FALSE; +} + +void sub_80F8534(u32 a, void *b) +{ + u8 *ptr = gSaveBlock1.oldMan.storyteller.unk8[a]; + + memset(b, 0xFF, 8); + memcpy(b, ptr, 7); +} + +void sub_80F8560(u32 a, const u8 *b) +{ + u8 *ptr = gSaveBlock1.oldMan.storyteller.unk8[a]; + u8 len = StringLength(b); + + memset(ptr, 0xFF, 7); + StringCopyN(ptr, b, len); +} + +void sub_80F8598(u32 a, u32 b) +{ + struct MauvilleManStoryteller *storyteller = &gSaveBlock1.oldMan.storyteller; + + storyteller->unk4[a] = b; + sub_80F8560(a, gSaveBlock2.playerName); + sub_80F84EC(a, sub_80F8438(b)); + ConvertIntToDecimalStringN(gStringVar1, sub_80F8438(b), 0, 10); + StringCopy(gStringVar2, sub_80F8490(b)); +} -- cgit v1.2.3 From f325f2d9ca2c40ed5a728fa4bea585e3bd71ca81 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Thu, 24 Aug 2017 02:13:07 -0400 Subject: decompile up to sub_80B3A70 --- asm/shop.s | 344 ++++---------------------------------------------------- include/money.h | 2 +- src/money.c | 2 +- src/shop.c | 179 ++++++++++++++++++++++------- sym_bss.txt | 2 +- 5 files changed, 162 insertions(+), 367 deletions(-) diff --git a/asm/shop.s b/asm/shop.s index 4c284fc4e..adbd68a2f 100644 --- a/asm/shop.s +++ b/asm/shop.s @@ -6,310 +6,6 @@ .text - thumb_func_start sub_80B389C -sub_80B389C: @ 80B389C - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - mov r8, r2 - lsls r0, 16 - lsrs r2, r0, 16 - mov r9, r2 - lsls r1, 24 - lsrs r4, r1, 24 - ldr r5, _080B392C @ =gStringVar1 - mov r0, r8 - cmp r0, 0 - beq _080B38C8 - movs r0, 0xFC - strb r0, [r5] - movs r0, 0x1 - strb r0, [r5, 0x1] - movs r0, 0x2 - strb r0, [r5, 0x2] - adds r5, 0x3 -_080B38C8: - adds r0, r2, 0 - adds r1, r5, 0 - bl CopyItemName - ldr r6, _080B392C @ =gStringVar1 - lsls r7, r4, 3 - movs r0, 0x1 - str r0, [sp] - adds r0, r6, 0 - movs r1, 0x70 - adds r2, r7, 0 - movs r3, 0x58 - bl sub_8072A18 - adds r5, r6, 0 - mov r0, r8 - cmp r0, 0 - beq _080B38EE - adds r5, r6, 0x3 -_080B38EE: - mov r0, r9 - bl ItemId_GetPrice - adds r4, r0, 0 - movs r0, 0x1 - bl GetPriceReduction - lsls r4, 16 - lsrs r4, 16 - lsls r0, 24 - lsrs r0, 24 - asrs r4, r0 - adds r0, r5, 0 - adds r1, r4, 0 - movs r2, 0x4 - bl sub_80B79F8 - adds r0, r6, 0 - movs r1, 0xCA - adds r2, r7, 0 - movs r3, 0x1 - bl MenuPrint_PixelCoords - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B392C: .4byte gStringVar1 - thumb_func_end sub_80B389C - - thumb_func_start sub_80B3930 -sub_80B3930: @ 80B3930 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - adds r4, r2, 0 - lsls r0, 16 - lsrs r3, r0, 16 - lsls r1, 24 - lsrs r1, 24 - mov r9, r1 - ldr r2, _080B39A0 @ =gStringVar1 - cmp r4, 0 - beq _080B395A - movs r0, 0xFC - strb r0, [r2] - movs r0, 0x1 - strb r0, [r2, 0x1] - movs r0, 0x2 - strb r0, [r2, 0x2] - adds r2, 0x3 -_080B395A: - lsls r6, r3, 5 - ldr r0, _080B39A4 @ =gDecorations + 0x1 - mov r8, r0 - adds r1, r6, r0 - adds r0, r2, 0 - bl StringCopy - ldr r5, _080B39A0 @ =gStringVar1 - mov r0, r9 - lsls r7, r0, 3 - movs r0, 0x1 - str r0, [sp] - adds r0, r5, 0 - movs r1, 0x70 - adds r2, r7, 0 - movs r3, 0x58 - bl sub_8072A18 - adds r2, r5, 0 - cmp r4, 0 - beq _080B3986 - adds r2, r5, 0x3 -_080B3986: - mov r0, r8 - subs r0, 0x1 - adds r3, r6, r0 - ldrh r1, [r3, 0x14] - ldr r0, _080B39A8 @ =0x00002710 - cmp r1, r0 - bne _080B39AC - movs r0, 0x19 - mov r1, r9 - adds r2, r4, 0 - bl sub_80B7B34 - b _080B39C2 - .align 2, 0 -_080B39A0: .4byte gStringVar1 -_080B39A4: .4byte gDecorations + 0x1 -_080B39A8: .4byte 0x00002710 -_080B39AC: - ldrh r1, [r3, 0x14] - adds r0, r2, 0 - movs r2, 0x4 - bl sub_80B79F8 - adds r0, r5, 0 - movs r1, 0xCA - adds r2, r7, 0 - movs r3, 0x1 - bl MenuPrint_PixelCoords -_080B39C2: - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80B3930 - - thumb_func_start sub_80B39D0 -sub_80B39D0: @ 80B39D0 - push {r4-r6,lr} - adds r6, r1, 0 - adds r5, r2, 0 - b _080B3A1A -_080B39D8: - ldrb r0, [r1, 0xC] - cmp r0, 0 - bne _080B39FC - ldrb r0, [r1, 0xB] - adds r0, r4 - ldr r1, [r1, 0x4] - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - lsls r1, r4, 25 - movs r2, 0x80 - lsls r2, 18 - adds r1, r2 - lsrs r1, 24 - adds r2, r5, 0 - bl sub_80B389C - b _080B3A18 -_080B39FC: - ldrb r0, [r1, 0xB] - adds r0, r4 - ldr r1, [r1, 0x4] - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - lsls r1, r4, 25 - movs r2, 0x80 - lsls r2, 18 - adds r1, r2 - lsrs r1, 24 - adds r2, r5, 0 - bl sub_80B3930 -_080B3A18: - adds r0, r4, 0x1 -_080B3A1A: - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, r6 - bgt _080B3A2E - ldr r1, _080B3A68 @ =gUnknown_03000708 - ldrb r0, [r1, 0xB] - adds r0, r4 - ldrb r2, [r1, 0x8] - cmp r0, r2 - blt _080B39D8 -_080B3A2E: - cmp r4, 0x8 - beq _080B3A60 - ldr r1, _080B3A68 @ =gUnknown_03000708 - ldrb r0, [r1, 0xB] - adds r0, r4 - ldrb r1, [r1, 0x8] - cmp r0, r1 - bne _080B3A60 - lsls r3, r4, 1 - adds r4, r3, 0x2 - lsls r4, 24 - lsrs r4, 24 - adds r3, 0x3 - lsls r3, 24 - lsrs r3, 24 - movs r0, 0xE - adds r1, r4, 0 - movs r2, 0x1C - bl MenuFillWindowRectWithBlankTile - ldr r0, _080B3A6C @ =gOtherText_CancelNoTerminator - movs r1, 0xE - adds r2, r4, 0 - bl MenuPrint -_080B3A60: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B3A68: .4byte gUnknown_03000708 -_080B3A6C: .4byte gOtherText_CancelNoTerminator - thumb_func_end sub_80B39D0 - - thumb_func_start sub_80B3A70 -sub_80B3A70: @ 80B3A70 - push {r4,lr} - sub sp, 0x8 - ldr r2, _080B3A9C @ =gUnknown_03000708 - ldrb r1, [r2, 0xB] - ldrb r0, [r2, 0x9] - adds r0, r1, r0 - ldrb r1, [r2, 0x8] - cmp r0, r1 - beq _080B3ACC - ldrb r4, [r2, 0xC] - cmp r4, 0 - bne _080B3AA0 - ldr r1, [r2, 0x4] - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - bl ItemId_GetDescription - movs r1, 0x30 - str r1, [sp] - str r4, [sp, 0x4] - b _080B3ABA - .align 2, 0 -_080B3A9C: .4byte gUnknown_03000708 -_080B3AA0: - ldr r1, _080B3AC8 @ =gDecorations - ldr r2, [r2, 0x4] - lsls r0, 1 - adds r0, r2 - ldrh r0, [r0] - lsls r0, 5 - adds r1, 0x18 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x30 - str r1, [sp] - movs r1, 0 - str r1, [sp, 0x4] -_080B3ABA: - movs r1, 0x4 - movs r2, 0x68 - movs r3, 0x68 - bl sub_8072AB0 - b _080B3AE0 - .align 2, 0 -_080B3AC8: .4byte gDecorations -_080B3ACC: - ldr r0, _080B3AE8 @ =gOtherText_QuitShopping - movs r1, 0x30 - str r1, [sp] - movs r1, 0 - str r1, [sp, 0x4] - movs r1, 0x4 - movs r2, 0x68 - movs r3, 0x68 - bl sub_8072AB0 -_080B3AE0: - add sp, 0x8 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B3AE8: .4byte gOtherText_QuitShopping - thumb_func_end sub_80B3A70 - thumb_func_start sub_80B3AEC sub_80B3AEC: @ 80B3AEC push {r4,r5,lr} @@ -326,7 +22,7 @@ sub_80B3AEC: @ 80B3AEC cmp r0, 0 beq _080B3B7A _080B3B06: - ldr r4, _080B3B60 @ =gUnknown_03000708 + ldr r4, _080B3B60 @ =gMartInfo ldrb r1, [r4, 0x9] adds r0, r1, 0 movs r2, 0 @@ -366,7 +62,7 @@ _080B3B06: b _080B3B7A .align 2, 0 _080B3B5C: .4byte gMain -_080B3B60: .4byte gUnknown_03000708 +_080B3B60: .4byte gMartInfo _080B3B64: .4byte gTasks _080B3B68: .4byte gOtherText_FreePremierBall _080B3B6C: .4byte sub_80B4378 @@ -422,7 +118,7 @@ sub_80B3BD0: @ 80B3BD0 adds r4, r0, 0 lsls r4, 24 lsrs r4, 24 - ldr r0, _080B3BF0 @ =gUnknown_03000708 + ldr r0, _080B3BF0 @ =gMartInfo ldrb r1, [r0, 0x9] adds r0, r1, 0 movs r2, 0 @@ -433,7 +129,7 @@ sub_80B3BD0: @ 80B3BD0 pop {r0} bx r0 .align 2, 0 -_080B3BF0: .4byte gUnknown_03000708 +_080B3BF0: .4byte gMartInfo thumb_func_end sub_80B3BD0 thumb_func_start sub_80B3BF4 @@ -469,7 +165,7 @@ sub_80B3BF4: @ 80B3BF4 lsls r0, 24 cmp r0, 0 beq _080B3D18 - ldr r4, _080B3C88 @ =gUnknown_03000708 + ldr r4, _080B3C88 @ =gMartInfo ldrb r0, [r4, 0xC] cmp r0, 0 bne _080B3CAC @@ -502,7 +198,7 @@ sub_80B3BF4: @ 80B3BF4 _080B3C7C: .4byte gBGTilemapBuffers + 0x800 _080B3C80: .4byte gSaveBlock1 _080B3C84: .4byte gUnknown_020386A0 -_080B3C88: .4byte gUnknown_03000708 +_080B3C88: .4byte gMartInfo _080B3C8C: .4byte gTasks _080B3C90: .4byte gOtherText_HereYouGo _080B3C94: .4byte sub_80B3B80 @@ -619,7 +315,7 @@ sub_80B3D7C: @ 80B3D7C adds r4, r0, 0 lsls r4, 24 lsrs r4, 24 - ldr r0, _080B3DC0 @ =gUnknown_03000708 + ldr r0, _080B3DC0 @ =gMartInfo ldrb r1, [r0, 0x9] adds r0, r1, 0 movs r2, 0 @@ -645,7 +341,7 @@ sub_80B3D7C: @ 80B3D7C pop {r0} bx r0 .align 2, 0 -_080B3DC0: .4byte gUnknown_03000708 +_080B3DC0: .4byte gMartInfo _080B3DC4: .4byte gBGTilemapBuffers + 0x800 thumb_func_end sub_80B3D7C @@ -658,7 +354,7 @@ sub_80B3DC8: @ 80B3DC8 lsls r0, 24 lsrs r6, r0, 24 adds r4, r6, 0 - ldr r7, _080B3EA8 @ =gUnknown_03000708 + ldr r7, _080B3EA8 @ =gMartInfo ldrb r1, [r7, 0xD] adds r0, r6, 0 bl sub_80A52C4 @@ -751,7 +447,7 @@ _080B3DEE: bl DisplayItemMessageOnField b _080B3EF0 .align 2, 0 -_080B3EA8: .4byte gUnknown_03000708 +_080B3EA8: .4byte gMartInfo _080B3EAC: .4byte gMain _080B3EB0: .4byte gUnknown_020386A0 _080B3EB4: .4byte gTasks @@ -802,7 +498,7 @@ sub_80B3EFC: @ 80B3EFC bl MenuDrawTextWindow adds r0, r5, 0 bl sub_80B37F8 - ldr r6, _080B3F7C @ =gUnknown_03000708 + ldr r6, _080B3F7C @ =gMartInfo ldrb r0, [r6, 0xB] ldrb r1, [r6, 0x9] adds r0, r1 @@ -845,7 +541,7 @@ _080B3F62: bx r0 .align 2, 0 _080B3F78: .4byte gTasks -_080B3F7C: .4byte gUnknown_03000708 +_080B3F7C: .4byte gMartInfo _080B3F80: .4byte gSaveBlock1 _080B3F84: .4byte sub_80B3DC8 thumb_func_end sub_80B3EFC @@ -1053,7 +749,7 @@ _080B4102: ands r1, r0 cmp r1, 0x40 bne _080B414C - ldr r4, _080B413C @ =gUnknown_03000708 + ldr r4, _080B413C @ =gMartInfo ldrb r0, [r4, 0x9] cmp r0, 0 bne _080B4140 @@ -1074,7 +770,7 @@ _080B411E: .align 2, 0 _080B4134: .4byte gPaletteFade _080B4138: .4byte gMain -_080B413C: .4byte gUnknown_03000708 +_080B413C: .4byte gMartInfo _080B4140: movs r0, 0x5 bl PlaySE @@ -1084,7 +780,7 @@ _080B4140: _080B414C: cmp r1, 0x80 bne _080B41AC - ldr r4, _080B418C @ =gUnknown_03000708 + ldr r4, _080B418C @ =gMartInfo ldrb r0, [r4, 0x9] cmp r0, 0x7 bne _080B4190 @@ -1111,7 +807,7 @@ _080B417A: bl sub_80B32A4 b _080B436C .align 2, 0 -_080B418C: .4byte gUnknown_03000708 +_080B418C: .4byte gMartInfo _080B4190: ldrb r2, [r4, 0x8] cmp r0, r2 @@ -1136,7 +832,7 @@ _080B41AC: _080B41B8: movs r0, 0x5 bl PlaySE - ldr r6, _080B426C @ =gUnknown_03000708 + ldr r6, _080B426C @ =gMartInfo ldrb r0, [r6, 0xB] ldrb r1, [r6, 0x9] adds r0, r1 @@ -1213,7 +909,7 @@ _080B41CE: bl DisplayItemMessageOnField b _080B436C .align 2, 0 -_080B426C: .4byte gUnknown_03000708 +_080B426C: .4byte gMartInfo _080B4270: .4byte gUnknown_020386A0 _080B4274: .4byte gSaveBlock1 _080B4278: .4byte gStringVar1 @@ -1452,7 +1148,7 @@ sub_80B4470: @ 80B4470 movs r2, 0 ldr r0, _080B44C8 @ =gUnknown_02038724 mov r12, r0 - ldr r6, _080B44CC @ =gUnknown_03000708 + ldr r6, _080B44CC @ =gMartInfo mov r8, r12 adds r4, r6, 0 ldr r1, _080B44D0 @ =gTasks @@ -1490,7 +1186,7 @@ _080B4492: b _080B451E .align 2, 0 _080B44C8: .4byte gUnknown_02038724 -_080B44CC: .4byte gUnknown_03000708 +_080B44CC: .4byte gMartInfo _080B44D0: .4byte gTasks _080B44D4: ldrh r0, [r1, 0xA] diff --git a/include/money.h b/include/money.h index 49015ee19..06ac00e92 100644 --- a/include/money.h +++ b/include/money.h @@ -7,7 +7,7 @@ void sub_80B79E0(u32 *, u32); void sub_80B79F8(u8 *buffer, u32 arg1, u8 arg2); void sub_80B7A94(u32 arg0, u8 arg1, u8 x, u8 y); void sub_80B7AEC(u32, u8 left, u8 top); -void sub_80B7B34(void); +void sub_80B7B34(u8, u8, int); void sub_80B7BEC(u32, u8, u8); void sub_80B7C14(u32, u8, u8); void RemoveMoneyLabelObject(u8, u8); diff --git a/src/money.c b/src/money.c index 5d9d0b689..67b7eb03f 100644 --- a/src/money.c +++ b/src/money.c @@ -148,7 +148,7 @@ void sub_80B7AEC(u32 arg0, u8 left, u8 top) } __attribute__((naked)) -void sub_80B7B34(void) +void sub_80B7B34(u8 var1, u8 var2, int var3) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ diff --git a/src/shop.c b/src/shop.c index aca48cc2e..91d84363e 100644 --- a/src/shop.c +++ b/src/shop.c @@ -20,23 +20,27 @@ #include "field_player_avatar.h" #include "fieldmap.h" #include "item.h" +#include "decoration.h" -extern void sub_80B39D0(int, int, int); -extern void sub_80B3A70(void); +enum +{ + MART_TYPE_0, // normal mart + MART_TYPE_1, + MART_TYPE_2, +}; -struct UnknownShopStruct +struct MartInfo { /* 0x0 */ void (* callback) (void); /* 0x4 */ u16 *itemList; /* 0x8 */ u8 itemCount; /* 0x9 */ u8 cursor; - /* 0xA */ u8 unkA; - /* 0xB */ u8 unkB; - /* 0xC */ bool8 unkC; - // unknown size + /* 0xA */ u8 numChoices; + /* 0xB */ u8 choicesAbove; + /* 0xC */ u8 martType; }; -extern struct UnknownShopStruct gUnknown_03000708; +extern struct MartInfo gMartInfo; extern struct MenuAction gUnknown_083CC6D0[]; extern u8 ewram[]; @@ -63,44 +67,47 @@ extern u16 gBuyMenuFrame_Tilemap[]; extern u16 gMenuMoneyPal[16]; extern u16 gUnknown_083CC710[2]; -u8 CreateShopMenu(bool8 var) +void sub_80B39D0(int var1, int var2, bool32 hasControlCode); +void sub_80B3A70(void); + +u8 CreateShopMenu(u8 martType) { ScriptContext2_Enable(); - gUnknown_03000708.unkC = var; - gUnknown_03000708.cursor = 0; + gMartInfo.martType = martType; + gMartInfo.cursor = 0; - if(var == FALSE) + if(martType == MART_TYPE_0) { - gUnknown_03000708.unkA = 2; + gMartInfo.numChoices = 2; MenuDrawTextWindow(0, 0, 10, 7); PrintMenuItemsReordered(1, 1, 3, gUnknown_083CC6D0, (u8 *)gUnknown_083CC6E8); } else { - gUnknown_03000708.unkA = 1; + gMartInfo.numChoices = 1; MenuDrawTextWindow(0, 0, 10, 5); PrintMenuItemsReordered(1, 1, 2, gUnknown_083CC6D0, (u8 *)gUnknown_083CC6EB); } - InitMenu(0, 1, 1, gUnknown_03000708.unkA + 1, 0, 9); + InitMenu(0, 1, 1, gMartInfo.numChoices + 1, 0, 9); // add 1 for cancel return CreateTask(sub_80B2E38, 8); } void SetShopMenuCallback(void *callbackPtr) { - gUnknown_03000708.callback = callbackPtr; + gMartInfo.callback = callbackPtr; } void SetShopItemsForSale(u16 *items) { u16 i = 0; - gUnknown_03000708.itemList = items; - gUnknown_03000708.itemCount = 0; + gMartInfo.itemList = items; + gMartInfo.itemCount = 0; - while (gUnknown_03000708.itemList[i]) + while (gMartInfo.itemList[i]) { - gUnknown_03000708.itemCount++; + gMartInfo.itemCount++; i++; } } @@ -111,30 +118,30 @@ void sub_80B2E38(u8 var) if(gMain.newAndRepeatedKeys & DPAD_UP) { - if(gUnknown_03000708.cursor) // can move cursor up? + if(gMartInfo.cursor) // can move cursor up? { PlaySE(0x5); - gUnknown_03000708.cursor = MoveMenuCursor(-1); + gMartInfo.cursor = MoveMenuCursor(-1); } } else if(gMain.newAndRepeatedKeys & DPAD_DOWN) { - if(gUnknown_03000708.cursor != gUnknown_03000708.unkA) // can move cursor down? + if(gMartInfo.cursor != gMartInfo.numChoices) // can move cursor down? { PlaySE(0x5); - gUnknown_03000708.cursor = MoveMenuCursor(1); + gMartInfo.cursor = MoveMenuCursor(1); } } else if (gMain.newKeys & A_BUTTON) { PlaySE(0x5); - if(!gUnknown_03000708.unkC) + if(gMartInfo.martType == MART_TYPE_0) { - gUnknown_083CC6D0[gUnknown_083CC6E8[gUnknown_03000708.cursor]].func(local); + gUnknown_083CC6D0[gUnknown_083CC6E8[gMartInfo.cursor]].func(local); } else { - gUnknown_083CC6D0[gUnknown_083CC6EB[gUnknown_03000708.cursor]].func(local); + gUnknown_083CC6D0[gUnknown_083CC6EB[gMartInfo.cursor]].func(local); } } else if(gMain.newKeys & B_BUTTON) @@ -164,12 +171,12 @@ void HandleShopMenuQuit(u8 taskId) { HandleDestroyMenuCursors(); MenuZeroFillWindowRect(0, 0, 11, 8); - sub_80BE3BC(); // in tv.s? + sub_80BE3BC(); ScriptContext2_Disable(); DestroyTask(taskId); - if(gUnknown_03000708.callback) - gUnknown_03000708.callback(); // run the callback if it exists. + if(gMartInfo.callback) + gMartInfo.callback(); // run the callback if it exists. } void sub_80B2FA0(u8 taskId) @@ -183,7 +190,7 @@ void sub_80B2FA0(u8 taskId) void ReturnToShopMenuAfterExitingSellMenu(u8 taskId) { - CreateShopMenu(gUnknown_03000708.unkC); + CreateShopMenu(gMartInfo.martType); DestroyTask(taskId); } @@ -191,7 +198,7 @@ void Task_ExitSellMenu(u8 taskId) { if(sub_807D770() == 1) { - if(gUnknown_03000708.unkC == 2) + if(gMartInfo.martType == MART_TYPE_2) DisplayItemMessageOnField(taskId, gOtherText_CanIHelpYou, ReturnToShopMenuAfterExitingSellMenu, 0); else DisplayItemMessageOnField(taskId, gOtherText_AnythingElse, ReturnToShopMenuAfterExitingSellMenu, 0); @@ -276,8 +283,8 @@ void BuyMenuDrawGraphics(void) SetUpWindowConfig(&gWindowConfig_81E6DFC); InitMenuWindow(&gWindowConfig_81E6DFC); BuyMenuDrawMapGraphics(); - gUnknown_03000708.cursor = zero; - gUnknown_03000708.unkB = zero2; + gMartInfo.cursor = zero; + gMartInfo.choicesAbove = zero2; MenuZeroFillWindowRect(0, 0, 0x20, 0x20); sub_80B7C14(gSaveBlock1.money, 0, 0); sub_80B3764(0, 7); @@ -306,7 +313,7 @@ void sub_80B3270(void) { sub_80F944C(); - if(gUnknown_03000708.itemCount > 7) + if(gMartInfo.itemCount > 7) { CreateVerticalScrollIndicators(0, 172, 12); CreateVerticalScrollIndicators(1, 172, 148); @@ -316,12 +323,12 @@ void sub_80B3270(void) void sub_80B32A4(void) { - if(gUnknown_03000708.unkB == 0) + if(gMartInfo.choicesAbove == 0) sub_80F979C(0, 1); else sub_80F979C(0, 0); - if(gUnknown_03000708.unkB + 7 >= gUnknown_03000708.itemCount) + if(gMartInfo.choicesAbove + 7 >= gMartInfo.itemCount) sub_80F979C(1, 1); else sub_80F979C(1, 0); @@ -493,7 +500,7 @@ void sub_80B3764(int var1, int var2) { sub_80B3720(); sub_80B39D0(var1, var2, 0); - InitMenu(0, 0xE, 0x2, 0x8, gUnknown_03000708.cursor, 0xF); + InitMenu(0, 0xE, 0x2, 0x8, gMartInfo.cursor, 0xF); } void sub_80B379C(void) @@ -512,8 +519,8 @@ void sub_80B37EC(void) void sub_80B37F8(u8 taskId) { - u16 itemListIndex = gUnknown_03000708.unkB + gUnknown_03000708.cursor; - u16 itemId = *(gUnknown_03000708.itemList + itemListIndex); + u16 itemListIndex = gMartInfo.choicesAbove + gMartInfo.cursor; + u16 itemId = *(gMartInfo.itemList + itemListIndex); u32 price = (ItemId_GetPrice(itemId) >> GetPriceReduction(1)); sub_80B7A94(gTasks[taskId].data[1] * price, 6, 6, 11); @@ -524,3 +531,95 @@ void sub_80B37F8(u8 taskId) MenuPrint(gOtherText_xString1, 1, 11); sub_80A3FA0(gBGTilemapBuffers[1], 1, 11, 12, 2, 0xC3E1); } + +void sub_80B389C(u16 itemId, u8 var2, bool32 hasControlCode) +{ + u8 *stringPtr = gStringVar1; + + if(hasControlCode != FALSE) + { + stringPtr[0] = EXT_CTRL_CODE_BEGIN; + stringPtr[1] = 0x1; + stringPtr[2] = 0x2; + stringPtr += 3; + } + + CopyItemName(itemId, stringPtr); + + sub_8072A18(&gStringVar1[0], 0x70, var2 << 3, 0x58, 0x1); + stringPtr = gStringVar1; + + if(hasControlCode != FALSE) + stringPtr = &gStringVar1[3]; + + sub_80B79F8(stringPtr, (ItemId_GetPrice(itemId) >> GetPriceReduction(1)), 0x4); + MenuPrint_PixelCoords(&gStringVar1[0], 0xCA, var2 << 3, 1); +} + +void sub_80B3930(u16 itemId, u8 var2, bool32 hasControlCode) +{ + u8 *stringPtr = gStringVar1; + + if(hasControlCode != FALSE) + { + stringPtr[0] = EXT_CTRL_CODE_BEGIN; + stringPtr[1] = 0x1; + stringPtr[2] = 0x2; + stringPtr += 3; + } + + StringCopy(stringPtr, gDecorations[itemId].name); + sub_8072A18(&gStringVar1[0], 0x70, var2 << 3, 0x58, 0x1); + stringPtr = gStringVar1; + + if(hasControlCode != FALSE) + stringPtr = &gStringVar1[3]; + + if(gDecorations[itemId].price == 10000) + { + sub_80B7B34(0x19, var2, hasControlCode); // huh??? + } + else + { + sub_80B79F8(stringPtr, gDecorations[itemId].price, 0x4); + MenuPrint_PixelCoords(&gStringVar1[0], 0xCA, var2 << 3, 0x1); + } +} + +void sub_80B39D0(int var1, int var2, bool32 hasControlCode) +{ + u8 i; + + for(i = var1; i <= var2 && gMartInfo.choicesAbove + i < gMartInfo.itemCount; i++) + { + if(gMartInfo.martType == MART_TYPE_0) + sub_80B389C(gMartInfo.itemList[gMartInfo.choicesAbove + i], (i << 1) + 2, hasControlCode); + else + sub_80B3930(gMartInfo.itemList[gMartInfo.choicesAbove + i], (i << 1) + 2, hasControlCode); + } + + if(i != 8 && gMartInfo.choicesAbove + i == gMartInfo.itemCount) + { + MenuFillWindowRectWithBlankTile(0xE, (i << 1) + 2, 0x1C, (i << 1) + 3); + MenuPrint(gOtherText_CancelNoTerminator, 0xE, (i << 1) + 2); + } +} + +void sub_80B3A70(void) +{ + if(gMartInfo.choicesAbove + gMartInfo.cursor != gMartInfo.itemCount) + { + if(gMartInfo.martType == MART_TYPE_0) + { + sub_8072AB0(ItemId_GetDescription(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]), + 0x4, 0x68, 0x68, 0x30, MART_TYPE_0); + } + else + sub_8072AB0(gDecorations[gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]].description, // doesn't consider choicesAbove? + 0x4, 0x68, 0x68, 0x30, MART_TYPE_0); // huh?? + } + else + { + sub_8072AB0(gOtherText_QuitShopping, 0x4, 0x68, 0x68, 0x30, MART_TYPE_0); + } +} diff --git a/sym_bss.txt b/sym_bss.txt index a6eaeefe1..03737bdf3 100644 --- a/sym_bss.txt +++ b/sym_bss.txt @@ -81,7 +81,7 @@ gUnknown_030006DC: @ 30006DC @ shop -gUnknown_03000708: @ 3000708 +gMartInfo: @ 3000708 .space 0x10 .include "src/record_mixing.o" -- cgit v1.2.3 From a8432ea708c0e2cf5443ba4286ddece562999ebb Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Thu, 24 Aug 2017 02:25:21 -0400 Subject: whatever cam --- src/shop.c | 62 +++++++++++++++++++++++++++++++------------------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/src/shop.c b/src/shop.c index 91d84363e..17cebfee6 100644 --- a/src/shop.c +++ b/src/shop.c @@ -76,7 +76,7 @@ u8 CreateShopMenu(u8 martType) gMartInfo.martType = martType; gMartInfo.cursor = 0; - if(martType == MART_TYPE_0) + if (martType == MART_TYPE_0) { gMartInfo.numChoices = 2; MenuDrawTextWindow(0, 0, 10, 7); @@ -116,17 +116,17 @@ void sub_80B2E38(u8 var) { const u8 local = var; - if(gMain.newAndRepeatedKeys & DPAD_UP) + if (gMain.newAndRepeatedKeys & DPAD_UP) { - if(gMartInfo.cursor) // can move cursor up? + if (gMartInfo.cursor) // can move cursor up? { PlaySE(0x5); gMartInfo.cursor = MoveMenuCursor(-1); } } - else if(gMain.newAndRepeatedKeys & DPAD_DOWN) + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) { - if(gMartInfo.cursor != gMartInfo.numChoices) // can move cursor down? + if (gMartInfo.cursor != gMartInfo.numChoices) // can move cursor down? { PlaySE(0x5); gMartInfo.cursor = MoveMenuCursor(1); @@ -135,7 +135,7 @@ void sub_80B2E38(u8 var) else if (gMain.newKeys & A_BUTTON) { PlaySE(0x5); - if(gMartInfo.martType == MART_TYPE_0) + if (gMartInfo.martType == MART_TYPE_0) { gUnknown_083CC6D0[gUnknown_083CC6E8[gMartInfo.cursor]].func(local); } @@ -144,7 +144,7 @@ void sub_80B2E38(u8 var) gUnknown_083CC6D0[gUnknown_083CC6EB[gMartInfo.cursor]].func(local); } } - else if(gMain.newKeys & B_BUTTON) + else if (gMain.newKeys & B_BUTTON) { PlaySE(0x5); HandleShopMenuQuit(local); @@ -175,13 +175,13 @@ void HandleShopMenuQuit(u8 taskId) ScriptContext2_Disable(); DestroyTask(taskId); - if(gMartInfo.callback) + if (gMartInfo.callback) gMartInfo.callback(); // run the callback if it exists. } void sub_80B2FA0(u8 taskId) { - if(!gPaletteFade.active) + if (!gPaletteFade.active) { SetMainCallback2((void *)((u16)gTasks[taskId].data[8] << 16 | (u16)gTasks[taskId].data[9])); DestroyTask(taskId); @@ -196,9 +196,9 @@ void ReturnToShopMenuAfterExitingSellMenu(u8 taskId) void Task_ExitSellMenu(u8 taskId) { - if(sub_807D770() == 1) + if (sub_807D770() == 1) { - if(gMartInfo.martType == MART_TYPE_2) + if (gMartInfo.martType == MART_TYPE_2) DisplayItemMessageOnField(taskId, gOtherText_CanIHelpYou, ReturnToShopMenuAfterExitingSellMenu, 0); else DisplayItemMessageOnField(taskId, gOtherText_AnythingElse, ReturnToShopMenuAfterExitingSellMenu, 0); @@ -313,7 +313,7 @@ void sub_80B3270(void) { sub_80F944C(); - if(gMartInfo.itemCount > 7) + if (gMartInfo.itemCount > 7) { CreateVerticalScrollIndicators(0, 172, 12); CreateVerticalScrollIndicators(1, 172, 148); @@ -323,12 +323,12 @@ void sub_80B3270(void) void sub_80B32A4(void) { - if(gMartInfo.choicesAbove == 0) + if (gMartInfo.choicesAbove == 0) sub_80F979C(0, 1); else sub_80F979C(0, 0); - if(gMartInfo.choicesAbove + 7 >= gMartInfo.itemCount) + if (gMartInfo.choicesAbove + 7 >= gMartInfo.itemCount) sub_80F979C(1, 1); else sub_80F979C(1, 0); @@ -354,7 +354,7 @@ void BuyMenuDrawMapMetatile(int var1, int var2, u16 *var3, s32 var4) s16 offset1 = var1 * 2; s16 offset2 = (var2 * 0x40) + 0x40; - switch(tempVar4) + switch (tempVar4) { case 0: // _080B335C BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[2], offset1, offset2, var3); @@ -470,9 +470,9 @@ void sub_80B368C(void) { u8 i; - for(i = 0; i < 16; i++) // max objects? + for (i = 0; i < 16; i++) // max objects? { - if(gUnknown_020386A4[i][MAP_OBJ_ID] == 16) + if (gUnknown_020386A4[i][MAP_OBJ_ID] == 16) continue; StartSpriteAnim(&gSprites[AddPseudoFieldObject( @@ -507,8 +507,8 @@ void sub_80B379C(void) { u16 i, j; - for(i = 0; i < 8; i++) - for(j = 0; j < 14; j++) + for (i = 0; i < 8; i++) + for (j = 0; j < 14; j++) gBGTilemapBuffers[1][32 * (i + 12) + j] = ewram18300[32 * i + j] + 0xC3E0; } @@ -536,7 +536,7 @@ void sub_80B389C(u16 itemId, u8 var2, bool32 hasControlCode) { u8 *stringPtr = gStringVar1; - if(hasControlCode != FALSE) + if (hasControlCode != FALSE) { stringPtr[0] = EXT_CTRL_CODE_BEGIN; stringPtr[1] = 0x1; @@ -549,7 +549,7 @@ void sub_80B389C(u16 itemId, u8 var2, bool32 hasControlCode) sub_8072A18(&gStringVar1[0], 0x70, var2 << 3, 0x58, 0x1); stringPtr = gStringVar1; - if(hasControlCode != FALSE) + if (hasControlCode != FALSE) stringPtr = &gStringVar1[3]; sub_80B79F8(stringPtr, (ItemId_GetPrice(itemId) >> GetPriceReduction(1)), 0x4); @@ -560,7 +560,7 @@ void sub_80B3930(u16 itemId, u8 var2, bool32 hasControlCode) { u8 *stringPtr = gStringVar1; - if(hasControlCode != FALSE) + if (hasControlCode != FALSE) { stringPtr[0] = EXT_CTRL_CODE_BEGIN; stringPtr[1] = 0x1; @@ -572,10 +572,10 @@ void sub_80B3930(u16 itemId, u8 var2, bool32 hasControlCode) sub_8072A18(&gStringVar1[0], 0x70, var2 << 3, 0x58, 0x1); stringPtr = gStringVar1; - if(hasControlCode != FALSE) + if (hasControlCode != FALSE) stringPtr = &gStringVar1[3]; - if(gDecorations[itemId].price == 10000) + if (gDecorations[itemId].price == 10000) { sub_80B7B34(0x19, var2, hasControlCode); // huh??? } @@ -590,15 +590,15 @@ void sub_80B39D0(int var1, int var2, bool32 hasControlCode) { u8 i; - for(i = var1; i <= var2 && gMartInfo.choicesAbove + i < gMartInfo.itemCount; i++) + for (i = var1; i <= var2 && gMartInfo.choicesAbove + i < gMartInfo.itemCount; i++) { - if(gMartInfo.martType == MART_TYPE_0) + if (gMartInfo.martType == MART_TYPE_0) sub_80B389C(gMartInfo.itemList[gMartInfo.choicesAbove + i], (i << 1) + 2, hasControlCode); else sub_80B3930(gMartInfo.itemList[gMartInfo.choicesAbove + i], (i << 1) + 2, hasControlCode); } - if(i != 8 && gMartInfo.choicesAbove + i == gMartInfo.itemCount) + if (i != 8 && gMartInfo.choicesAbove + i == gMartInfo.itemCount) { MenuFillWindowRectWithBlankTile(0xE, (i << 1) + 2, 0x1C, (i << 1) + 3); MenuPrint(gOtherText_CancelNoTerminator, 0xE, (i << 1) + 2); @@ -607,16 +607,16 @@ void sub_80B39D0(int var1, int var2, bool32 hasControlCode) void sub_80B3A70(void) { - if(gMartInfo.choicesAbove + gMartInfo.cursor != gMartInfo.itemCount) + if (gMartInfo.choicesAbove + gMartInfo.cursor != gMartInfo.itemCount) { - if(gMartInfo.martType == MART_TYPE_0) + if (gMartInfo.martType == MART_TYPE_0) { sub_8072AB0(ItemId_GetDescription(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]), 0x4, 0x68, 0x68, 0x30, MART_TYPE_0); } else - sub_8072AB0(gDecorations[gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]].description, // doesn't consider choicesAbove? - 0x4, 0x68, 0x68, 0x30, MART_TYPE_0); // huh?? + sub_8072AB0(gDecorations[gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]].description, + 0x4, 0x68, 0x68, 0x30, MART_TYPE_0); // huh?? if mart type isnt 0, why assume it? } else { -- cgit v1.2.3 From d87b8b03f19002705e27e08dfcbd1beaed0cb005 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 24 Aug 2017 10:48:29 +0200 Subject: change ewram defines --- src/reshow_battle_screen.c | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/src/reshow_battle_screen.c b/src/reshow_battle_screen.c index 202431ae9..343c8f183 100644 --- a/src/reshow_battle_screen.c +++ b/src/reshow_battle_screen.c @@ -55,8 +55,8 @@ static void sub_807B184(u8 bank); static void sub_807B508(u8 bank); static void sub_807B06C(void); -#define RESHOW_STATE 0x1FFFF -#define HELPER_STATE 0x1FFFE +#define gReshowState ewram[0x1FFFF] +#define gHelperState ewram[0x1FFFE] void nullsub_14(void) { @@ -69,14 +69,14 @@ void ReshowBattleScreenAfterMenu(void) SetHBlankCallback(0); SetVBlankCallback(0); REG_MOSAIC = 0; - ewram[RESHOW_STATE] = 0; - ewram[HELPER_STATE] = 0; + gReshowState = 0; + gHelperState = 0; SetMainCallback2(CB2_ReshowBattleScreenAfterMenu); } static void CB2_ReshowBattleScreenAfterMenu(void) { - switch (ewram[RESHOW_STATE]) + switch (gReshowState) { case 0: dp12_8087EA4(); @@ -99,13 +99,13 @@ static void CB2_ReshowBattleScreenAfterMenu(void) } break; case 2: - if (!sub_800E414(ewram[HELPER_STATE])) + if (!sub_800E414(gHelperState)) { - ewram[HELPER_STATE]++; - ewram[RESHOW_STATE]--; + gHelperState++; + gReshowState--; } else - ewram[HELPER_STATE] = 0; + gHelperState = 0; break; case 3: ResetSpriteData(); @@ -118,29 +118,29 @@ static void CB2_ReshowBattleScreenAfterMenu(void) sub_8031EE8(); break; case 6: - if (sub_8031C30(ewram[HELPER_STATE])) - ewram[HELPER_STATE] = 0; + if (sub_8031C30(gHelperState)) + gHelperState = 0; else { - ewram[HELPER_STATE]++; - ewram[RESHOW_STATE]--; + gHelperState++; + gReshowState--; } break; case 7: if (!LoadAppropiateBankSprite(0)) - ewram[RESHOW_STATE]--; + gReshowState--; break; case 8: if (!LoadAppropiateBankSprite(1)) - ewram[RESHOW_STATE]--; + gReshowState--; break; case 9: if (!LoadAppropiateBankSprite(2)) - ewram[RESHOW_STATE]--; + gReshowState--; break; case 10: if (!LoadAppropiateBankSprite(3)) - ewram[RESHOW_STATE]--; + gReshowState--; break; case 11: sub_807B184(0); @@ -195,7 +195,7 @@ static void CB2_ReshowBattleScreenAfterMenu(void) SetMainCallback2(sub_800F808); break; } - ewram[RESHOW_STATE]++; + gReshowState++; } static void sub_807B06C(void) @@ -231,7 +231,7 @@ static bool8 LoadAppropiateBankSprite(u8 bank) else BattleLoadSubstituteSprite(bank, 0); - ewram[HELPER_STATE] = 0; + gHelperState = 0; } return 1; } -- cgit v1.2.3 From a277e60789d9ea78fe03a4bcded2edf7b91e548e Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Thu, 24 Aug 2017 13:40:03 -0500 Subject: finish decompiling mauville_old_man --- asm/mauville_old_man.s | 402 --------------------------------------------- include/global.h | 2 +- include/mauville_old_man.h | 1 - src/mauville_old_man.c | 168 ++++++++++++++++++- 4 files changed, 166 insertions(+), 407 deletions(-) diff --git a/asm/mauville_old_man.s b/asm/mauville_old_man.s index 8fc7f90f8..ef4d313d4 100644 --- a/asm/mauville_old_man.s +++ b/asm/mauville_old_man.s @@ -6,406 +6,4 @@ .text - thumb_func_start sub_80F85FC -sub_80F85FC: @ 80F85FC - push {r4-r7,lr} - adds r7, r0, 0 - adds r6, r1, 0 - movs r5, 0 - cmp r5, r6 - bge _080F8612 -_080F8608: - adds r0, r7, r5 - strb r5, [r0] - adds r5, 0x1 - cmp r5, r6 - blt _080F8608 -_080F8612: - cmp r6, 0 - ble _080F8648 - adds r5, r6, 0 -_080F8618: - bl Random - lsls r0, 16 - lsrs r0, 16 - adds r1, r6, 0 - bl __modsi3 - adds r4, r0, 0 - bl Random - lsls r0, 16 - lsrs r0, 16 - adds r1, r6, 0 - bl __modsi3 - adds r4, r7, r4 - ldrb r2, [r4] - adds r0, r7, r0 - ldrb r1, [r0] - strb r1, [r4] - strb r2, [r0] - subs r5, 0x1 - cmp r5, 0 - bne _080F8618 -_080F8648: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80F85FC - - thumb_func_start sub_80F8650 -sub_80F8650: @ 80F8650 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - mov r7, sp - mov r10, sp - ldr r0, _080F86D4 @ =gUnknown_083E5620 - ldr r0, [r0] - lsls r0, 3 - lsrs r0, 3 - adds r0, 0x3 - lsrs r0, 2 - lsls r0, 2 - mov r1, sp - subs r1, r0 - mov sp, r1 - mov r8, sp - mov r0, sp - movs r1, 0x24 - bl sub_80F85FC - movs r5, 0 - ldr r0, _080F86D8 @ =gUnknown_083E53E0 - mov r9, r0 - ldr r3, _080F86DC @ =gSaveBlock1 + 0x2D94 -_080F8686: - mov r1, r8 - adds r0, r1, r5 - ldrb r0, [r0] - lsls r0, 4 - add r0, r9 - ldrb r4, [r0] - ldrb r6, [r0, 0x1] - movs r1, 0 - ldrb r0, [r3, 0x4] - cmp r0, r4 - beq _080F86AC - ldr r2, _080F86E0 @ =gSaveBlock1 + 0x2D98 -_080F869E: - adds r1, 0x1 - cmp r1, 0x3 - bgt _080F86AC - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, r4 - bne _080F869E -_080F86AC: - cmp r1, 0x4 - bne _080F86E4 - adds r0, r4, 0 - str r3, [r7] - bl sub_80F8438 - ldr r3, [r7] - cmp r0, r6 - bcc _080F86E4 - movs r0, 0x1 - strb r0, [r3, 0x1] - bl sub_80F849C - lsls r0, 24 - lsrs r0, 24 - adds r1, r4, 0 - bl sub_80F8598 - movs r0, 0x1 - b _080F86EC - .align 2, 0 -_080F86D4: .4byte gUnknown_083E5620 -_080F86D8: .4byte gUnknown_083E53E0 -_080F86DC: .4byte gSaveBlock1 + 0x2D94 -_080F86E0: .4byte gSaveBlock1 + 0x2D98 -_080F86E4: - adds r5, 0x1 - cmp r5, 0x23 - ble _080F8686 - movs r0, 0 -_080F86EC: - mov sp, r10 - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80F8650 - - thumb_func_start sub_80F8700 -sub_80F8700: @ 80F8700 - push {r4-r6,lr} - adds r5, r0, 0 - ldr r0, _080F8748 @ =gSaveBlock1 + 0x2D94 - adds r0, 0x4 - adds r0, r5, r0 - ldrb r6, [r0] - ldr r4, _080F874C @ =gStringVar1 - adds r0, r5, 0 - bl sub_80F84C8 - adds r1, r0, 0 - adds r0, r4, 0 - movs r2, 0 - movs r3, 0xA - bl ConvertIntToDecimalStringN - ldr r4, _080F8750 @ =gStringVar2 - adds r0, r6, 0 - bl sub_80F8490 - adds r1, r0, 0 - adds r0, r4, 0 - bl StringCopy - ldr r1, _080F8754 @ =gStringVar3 - adds r0, r5, 0 - bl sub_80F8534 - adds r0, r6, 0 - bl sub_80F8484 - bl ShowFieldMessage - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080F8748: .4byte gSaveBlock1 + 0x2D94 -_080F874C: .4byte gStringVar1 -_080F8750: .4byte gStringVar2 -_080F8754: .4byte gStringVar3 - thumb_func_end sub_80F8700 - - thumb_func_start sub_80F8758 -sub_80F8758: @ 80F8758 - push {r4-r6,lr} - bl sub_80F849C - adds r3, r0, 0 - lsls r3, 25 - movs r0, 0x80 - lsls r0, 19 - adds r3, r0 - lsrs r3, 24 - movs r0, 0 - movs r1, 0 - movs r2, 0x19 - bl MenuDrawTextWindow - movs r4, 0 - ldr r1, _080F87BC @ =gSaveBlock1 + 0x2D94 - ldrb r0, [r1, 0x4] - cmp r0, 0 - beq _080F87A4 - adds r6, r1, 0x4 - movs r5, 0x80 - lsls r5, 18 -_080F8784: - bl sub_80F8478 - lsrs r2, r5, 24 - movs r1, 0x1 - bl MenuPrint - movs r1, 0x80 - lsls r1, 18 - adds r5, r1 - adds r4, 0x1 - cmp r4, 0x3 - bgt _080F87A4 - adds r0, r4, r6 - ldrb r0, [r0] - cmp r0, 0 - bne _080F8784 -_080F87A4: - ldr r0, _080F87C0 @ =gPCText_Cancel - lsls r2, r4, 25 - movs r1, 0x80 - lsls r1, 18 - adds r2, r1 - lsrs r2, 24 - movs r1, 0x1 - bl MenuPrint - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080F87BC: .4byte gSaveBlock1 + 0x2D94 -_080F87C0: .4byte gPCText_Cancel - thumb_func_end sub_80F8758 - - thumb_func_start sub_80F87C4 -sub_80F87C4: @ 80F87C4 - push {r4-r6,lr} - sub sp, 0x8 - lsls r0, 24 - lsrs r6, r0, 24 - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - ldr r1, _080F87E4 @ =gTasks - adds r4, r0, r1 - movs r0, 0x8 - ldrsh r5, [r4, r0] - cmp r5, 0 - beq _080F87E8 - cmp r5, 0x1 - beq _080F8810 - b _080F8862 - .align 2, 0 -_080F87E4: .4byte gTasks -_080F87E8: - bl sub_80F8758 - bl sub_80F849C - adds r3, r0, 0 - adds r3, 0x1 - lsls r3, 24 - lsrs r3, 24 - str r5, [sp] - movs r0, 0x18 - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0x1 - movs r2, 0x2 - bl InitMenu - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _080F8862 -_080F8810: - bl ProcessMenuInput - lsls r0, 24 - asrs r4, r0, 24 - movs r0, 0x2 - negs r0, r0 - cmp r4, r0 - beq _080F8862 - adds r0, 0x1 - cmp r4, r0 - beq _080F8832 - bl sub_80F849C - lsls r0, 24 - lsrs r0, 24 - cmp r4, r0 - bne _080F8840 -_080F8832: - ldr r1, _080F883C @ =gScriptResult - movs r0, 0 - strh r0, [r1] - b _080F8848 - .align 2, 0 -_080F883C: .4byte gScriptResult -_080F8840: - ldr r0, _080F886C @ =gScriptResult - strh r5, [r0] - ldr r0, _080F8870 @ =gUnknown_03000748 - strb r4, [r0] -_080F8848: - bl HandleDestroyMenuCursors - movs r0, 0 - movs r1, 0 - movs r2, 0x19 - movs r3, 0xC - bl MenuZeroFillWindowRect - adds r0, r6, 0 - bl DestroyTask - bl EnableBothScriptContexts -_080F8862: - add sp, 0x8 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080F886C: .4byte gScriptResult -_080F8870: .4byte gUnknown_03000748 - thumb_func_end sub_80F87C4 - - thumb_func_start sub_80F8874 -sub_80F8874: @ 80F8874 - push {lr} - ldr r0, _080F8884 @ =sub_80F87C4 - movs r1, 0x50 - bl CreateTask - pop {r0} - bx r0 - .align 2, 0 -_080F8884: .4byte sub_80F87C4 - thumb_func_end sub_80F8874 - - thumb_func_start sub_80F8888 -sub_80F8888: @ 80F8888 - push {lr} - ldr r0, _080F8898 @ =gUnknown_03000748 - ldrb r0, [r0] - bl sub_80F8700 - pop {r0} - bx r0 - .align 2, 0 -_080F8898: .4byte gUnknown_03000748 - thumb_func_end sub_80F8888 - - thumb_func_start sub_80F889C -sub_80F889C: @ 80F889C - push {lr} - bl sub_80F849C - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - thumb_func_end sub_80F889C - - thumb_func_start sub_80F88AC -sub_80F88AC: @ 80F88AC - push {r4,r5,lr} - ldr r1, _080F88C8 @ =gSaveBlock1 + 0x2D94 - ldr r5, _080F88CC @ =gUnknown_03000748 - ldrb r0, [r5] - adds r1, 0x4 - adds r1, r0, r1 - ldrb r4, [r1] - bl sub_80F8508 - cmp r0, 0x1 - beq _080F88D0 - movs r0, 0 - b _080F88DA - .align 2, 0 -_080F88C8: .4byte gSaveBlock1 + 0x2D94 -_080F88CC: .4byte gUnknown_03000748 -_080F88D0: - ldrb r0, [r5] - adds r1, r4, 0 - bl sub_80F8598 - movs r0, 0x1 -_080F88DA: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80F88AC - - thumb_func_start sub_80F88E0 -sub_80F88E0: @ 80F88E0 - push {lr} - ldr r0, _080F88F0 @ =gSaveBlock1 + 0x2D94 - ldrb r0, [r0, 0x1] - cmp r0, 0 - beq _080F88F4 - movs r0, 0x1 - b _080F88F6 - .align 2, 0 -_080F88F0: .4byte gSaveBlock1 + 0x2D94 -_080F88F4: - movs r0, 0 -_080F88F6: - pop {r1} - bx r1 - thumb_func_end sub_80F88E0 - - thumb_func_start sub_80F88FC -sub_80F88FC: @ 80F88FC - push {lr} - bl sub_80F8650 - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - thumb_func_end sub_80F88FC - .align 2, 0 @ Don't pad with nop. diff --git a/include/global.h b/include/global.h index 67039d50e..f172c12a3 100644 --- a/include/global.h +++ b/include/global.h @@ -484,7 +484,7 @@ struct MauvilleManTrader struct MauvilleManStoryteller { u8 id; - u8 unk1; + bool8 unk1; u8 filler2[2]; u8 unk4[4]; u8 unk8[4][7]; diff --git a/include/mauville_old_man.h b/include/mauville_old_man.h index 2fd467029..43bf3e093 100644 --- a/include/mauville_old_man.h +++ b/include/mauville_old_man.h @@ -16,6 +16,5 @@ void sub_80F7DC0(void); void sub_80F7F30(void); void sub_80F7F80(u8); void sub_80F83D0(void); -void StorytellerSetup(void); #endif // GUARD_MAUVILLE_OLD_MAN_H diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index 87bc87e3b..9400dfc32 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -4,6 +4,7 @@ #include "easy_chat.h" #include "easy_chat_constants.h" #include "event_data.h" +#include "field_message_box.h" #include "m4a.h" #include "menu.h" #include "rom4.h" @@ -70,6 +71,7 @@ const u8 *const gGiddyQuestions[] = }; void sub_80F8184(u8); +void StorytellerSetup(void); void sub_80F8428(void); void SetupBard(void) @@ -889,7 +891,7 @@ void StorytellerSetup(void) s32 i; storyteller->id = MAUVILLE_MAN_STORYTELLER; - storyteller->unk1 = 0; + storyteller->unk1 = FALSE; for (i = 0; i < 4; i++) { storyteller->unk4[i] = 0; @@ -902,7 +904,7 @@ void sub_80F8428(void) struct MauvilleManStoryteller *storyteller = &gSaveBlock1.oldMan.storyteller; storyteller->id = MAUVILLE_MAN_STORYTELLER; - storyteller->unk1 = 0; + storyteller->unk1 = FALSE; } u32 sub_80F8438(u8 stat) @@ -981,7 +983,7 @@ void sub_80F84EC(u32 a, u32 b) ptr[3] = b >> 24; } -bool8 sub_80F8508(u32 a) +bool32 sub_80F8508(u32 a) { struct MauvilleManStoryteller *storyteller = &gSaveBlock1.oldMan.storyteller; @@ -1018,3 +1020,163 @@ void sub_80F8598(u32 a, u32 b) ConvertIntToDecimalStringN(gStringVar1, sub_80F8438(b), 0, 10); StringCopy(gStringVar2, sub_80F8490(b)); } + +void sub_80F85FC(u8 *arr, s32 count) +{ + s32 i; + + for (i = 0; i < count; i++) + arr[i] = i; + for (i = 0; i < count; i++) + { + u32 a = Random() % count; + u32 b = Random() % count; + u8 temp = arr[a]; + arr[a] = arr[b]; + arr[b] = temp; + } +} + +extern const struct {u32 unk0; struct MauvilleManStoryteller *unk4; u32 unk8;} gUnknown_083E5620; +/* +static const struct {u32 unk0; struct MauvilleManStoryteller *unk4; u32 unk8;} gUnknown_083E5620 = +{ + 36, + &gSaveBlock1.oldMan.storyteller, + 12, +}; +*/ + +bool8 sub_80F8650(void) +{ + u8 arr[gUnknown_083E5620.unk0]; + s32 i; + s32 j; + + sub_80F85FC(arr, 36); + for (i = 0; i < 36; i++) + { + u8 r4 = gUnknown_083E53E0[arr[i]].unk0; + u8 r6 = gUnknown_083E53E0[arr[i]].unk1; + struct MauvilleManStoryteller *storyteller = &gSaveBlock1.oldMan.storyteller; + + for (j = 0; j < 4; j++) + { + if (gSaveBlock1.oldMan.storyteller.unk4[j] == r4) + break; + } + if (j == 4 && sub_80F8438(r4) >= r6) + { + storyteller->unk1 = TRUE; + sub_80F8598(sub_80F849C(), r4); + return TRUE; + } + } + return FALSE; +} + +void sub_80F8700(u32 a) +{ + struct MauvilleManStoryteller *storyteller = &gSaveBlock1.oldMan.storyteller; + u8 r6 = storyteller->unk4[a]; + + ConvertIntToDecimalStringN(gStringVar1, sub_80F84C8(a), 0, 10); + StringCopy(gStringVar2, sub_80F8490(r6)); + sub_80F8534(a, gStringVar3); + ShowFieldMessage(sub_80F8484(r6)); +} + +void sub_80F8758(void) +{ + s32 i; + + MenuDrawTextWindow(0, 0, 25, 4 + sub_80F849C() * 2); + for (i = 0; i < 4; i++) + { + struct MauvilleManStoryteller *storyteller = &gSaveBlock1.oldMan.storyteller; + u8 r0 = storyteller->unk4[i]; + + if (r0 == 0) + break; + MenuPrint(sub_80F8478(r0), 1, 2 + i * 2); + } + MenuPrint(gPCText_Cancel, 1, 2 + i * 2); +} + +extern u8 gUnknown_03000748; + +void sub_80F87C4(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + s32 selection; + + switch (task->data[0]) + { + case 0: + sub_80F8758(); + InitMenu(0, 1, 2, sub_80F849C() + 1, 0, 24); + task->data[0]++; + break; + case 1: + selection = ProcessMenuInput(); + if (selection == -2) + break; + if (selection == -1 || selection == sub_80F849C()) + { + gScriptResult = 0; + } + else + { + gScriptResult = 1; + gUnknown_03000748 = selection; + } + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(0, 0, 25, 12); + DestroyTask(taskId); + EnableBothScriptContexts(); + break; + } +} + +void sub_80F8874(void) +{ + CreateTask(sub_80F87C4, 0x50); +} + +void sub_80F8888(void) +{ + sub_80F8700(gUnknown_03000748); +} + +u8 sub_80F889C(void) +{ + return sub_80F849C(); +} + +bool8 sub_80F88AC(void) +{ + struct MauvilleManStoryteller *storyteller = &gSaveBlock1.oldMan.storyteller; + u8 r4 = storyteller->unk4[gUnknown_03000748]; + + if (sub_80F8508(gUnknown_03000748) == TRUE) + { + sub_80F8598(gUnknown_03000748, r4); + return TRUE; + } + return FALSE; +} + +bool8 sub_80F88E0(void) +{ + struct MauvilleManStoryteller *storyteller = &gSaveBlock1.oldMan.storyteller; + + if (storyteller->unk1 == FALSE) + return FALSE; + else + return TRUE; +} + +bool8 sub_80F88FC(void) +{ + return sub_80F8650(); +} -- cgit v1.2.3 From 8bd3b74b8dcce8b18a3310f61a07ecd4d98ec0a5 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 24 Aug 2017 21:40:41 +0200 Subject: code review changes --- src/battle_transition.c | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/battle_transition.c b/src/battle_transition.c index 35f001bc7..395a38df1 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -243,11 +243,11 @@ static const TransitionState sPhase2_Transition_Shuffle_Funcs[] = static const TransitionState sPhase2_Transition_BigPokeball_Funcs[] = { Phase2_Transition_BigPokeball_Func1, - Phase2_Transition_BigPokeball_Func2, - Phase2_Transition_BigPokeball_Func3, - Phase2_Transition_BigPokeball_Func4, - Phase2_Transition_BigPokeball_Func5, - Phase2_Transition_BigPokeball_Func6 + Phase2_Transition_BigPokeball_Func2, + Phase2_Transition_BigPokeball_Func3, + Phase2_Transition_BigPokeball_Func4, + Phase2_Transition_BigPokeball_Func5, + Phase2_Transition_BigPokeball_Func6 }; static const TransitionState sPhase2_Transition_PokeballsTrail_Funcs[] = @@ -571,7 +571,7 @@ static void Task_BattleTransitionMain(u8 taskID) static bool8 Transition_Phase1(struct Task* task) { sub_807DE10(); - CpuSet(gPlttBufferFaded, gPlttBufferUnfaded, 0x4000100); + CpuCopy32(gPlttBufferFaded, gPlttBufferUnfaded, 0x400); if (sPhase1_Tasks[task->tTransitionID] != NULL) { CreateTask(sPhase1_Tasks[task->tTransitionID], 4); @@ -630,9 +630,9 @@ static void Phase2Task_Transition_Blur(u8 taskID) static bool8 Phase2_Transition_Blur_Func1(struct Task* task) { REG_MOSAIC = 0; - REG_BG1CNT |= 0x40; - REG_BG2CNT |= 0x40; - REG_BG3CNT |= 0x40; + REG_BG1CNT |= BGCNT_MOSAIC; + REG_BG2CNT |= BGCNT_MOSAIC; + REG_BG3CNT |= BGCNT_MOSAIC; task->tState++; return TRUE; } @@ -682,9 +682,9 @@ static bool8 Phase2_Transition_Swirl_Func1(struct Task* task) savedIME = REG_IME; REG_IME = 0; - REG_IE |= 3; + REG_IE |= (INTR_FLAG_VBLANK | INTR_FLAG_HBLANK); REG_IME = savedIME; - REG_DISPSTAT |= 0x18; + REG_DISPSTAT |= (DISPSTAT_VBLANK_INTR | DISPSTAT_HBLANK_INTR); task->tState++; return FALSE; @@ -743,9 +743,9 @@ static bool8 Phase2_Transition_Shuffle_Func1(struct Task* task) savedIME = REG_IME; REG_IME = 0; - REG_IE |= 3; + REG_IE |= (INTR_FLAG_VBLANK | INTR_FLAG_HBLANK); REG_IME = savedIME; - REG_DISPSTAT |= 0x18; + REG_DISPSTAT |= (DISPSTAT_VBLANK_INTR | DISPSTAT_HBLANK_INTR); task->tState++; return FALSE; @@ -1282,8 +1282,8 @@ static bool8 Phase2_Transition_Ripple_Func1(struct Task* task) SetVBlankCallback(VBlankCB_Phase2_Transition_Ripple); SetHBlankCallback(HBlankCB_Phase2_Transition_Ripple); - REG_IE |= 2; - REG_DISPSTAT |= 0x10; + REG_IE |= INTR_FLAG_HBLANK; + REG_DISPSTAT |= DISPSTAT_HBLANK_INTR; task->tState++; return TRUE; @@ -1504,8 +1504,8 @@ static bool8 Phase2_Mugshot_Func2(struct Task* task) } } - REG_IE |= 2; - REG_DISPSTAT |= 0x10; + REG_IE |= INTR_FLAG_HBLANK; + REG_DISPSTAT |= DISPSTAT_HBLANK_INTR; SetHBlankCallback(HBlankCB_Phase2_Mugshots); task->tState++; return FALSE; @@ -1861,8 +1861,8 @@ static bool8 Phase2_Transition_Slice_Func1(struct Task* task) gUnknown_03004DE0[1][160 + i] = 0xF0; } - REG_IE |= 2; - REG_DISPSTAT |= 0x10; + REG_IE |= INTR_FLAG_HBLANK; + REG_DISPSTAT |= DISPSTAT_HBLANK_INTR; SetVBlankCallback(VBlankCB_Phase2_Transition_Slice); SetHBlankCallback(HBlankCB_Phase2_Transition_Slice); @@ -1960,8 +1960,8 @@ static bool8 Phase2_Transition_WhiteFade_Func1(struct Task* task) gUnknown_03004DE0[1][i + 160] = 0xF0; } - REG_IE |= 2; - REG_DISPSTAT |= 0x10; + REG_IE |= INTR_FLAG_HBLANK; + REG_DISPSTAT |= DISPSTAT_HBLANK_INTR; SetHBlankCallback(HBlankCB_Phase2_Transition_WhiteFade); SetVBlankCallback(VBlankCB0_Phase2_Transition_WhiteFade); -- cgit v1.2.3 From 1ae38be0a46d1d901a2d9e5bb22938a0cecf6b7f Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Thu, 24 Aug 2017 15:19:55 -0500 Subject: do some renaming and reorganizing --- asm/macros/event.inc | 6 + asm/mauville_old_man.s | 9 -- data/event_scripts.s | 11 +- data/mauville_old_man.s | 49 ------ data/scripts/bard.inc | 67 -------- data/scripts/giddy.inc | 51 ------ data/scripts/hipster.inc | 25 --- data/scripts/mauville_man.inc | 350 ++++++++++++++++++++++++++++++++++++++++++ data/scripts/storyteller.inc | 82 ---------- data/scripts/trader.inc | 88 ----------- data/specials.inc | 10 +- data/text/bard.inc | 18 +-- include/global.h | 8 +- include/mauville_old_man.h | 1 - ld_script.txt | 2 - src/mauville_old_man.c | 337 ++++++++++++++++++++++++++++------------ src/record_mixing.c | 2 +- src/trader.c | 14 +- 18 files changed, 625 insertions(+), 505 deletions(-) delete mode 100644 asm/mauville_old_man.s delete mode 100644 data/mauville_old_man.s delete mode 100644 data/scripts/bard.inc delete mode 100644 data/scripts/giddy.inc delete mode 100644 data/scripts/hipster.inc create mode 100644 data/scripts/mauville_man.inc delete mode 100644 data/scripts/storyteller.inc delete mode 100644 data/scripts/trader.inc diff --git a/asm/macros/event.inc b/asm/macros/event.inc index cd2927c66..9fddd9194 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -1493,6 +1493,12 @@ callstd \type .endm + @ Message box types + MSGBOX_YESNO = 5 + + YES = 1 + NO = 0 + .macro giveitem item, amount=1, function=0 setorcopyvar 0x8000, \item setorcopyvar 0x8001, \amount diff --git a/asm/mauville_old_man.s b/asm/mauville_old_man.s deleted file mode 100644 index ef4d313d4..000000000 --- a/asm/mauville_old_man.s +++ /dev/null @@ -1,9 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - .align 2, 0 @ Don't pad with nop. diff --git a/data/event_scripts.s b/data/event_scripts.s index d6702745a..33bb39308 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -4744,16 +4744,7 @@ BattleTower_Lobby_EventScript_1AE30F:: @ 81AE30F .include "data/scripts/gabby_and_ty.inc" - .include "data/scripts/bard.inc" - .include "data/scripts/hipster.inc" - .include "data/text/trader.inc" - .include "data/scripts/trader.inc" - .include "data/text/storyteller.inc" - .include "data/scripts/storyteller.inc" - .include "data/text/giddy.inc" - .include "data/scripts/giddy.inc" - .include "data/text/bard.inc" - .include "data/text/hipster.inc" + .include "data/scripts/mauville_man.inc" .include "data/field_move_scripts.inc" .include "data/item_ball_scripts.inc" diff --git a/data/mauville_old_man.s b/data/mauville_old_man.s deleted file mode 100644 index 4ccec0db3..000000000 --- a/data/mauville_old_man.s +++ /dev/null @@ -1,49 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - - .align 2 -gUnknown_083E53E0:: @ 83E53E0 - .4byte 0x132, UnknownString_81AEFFC, UnknownString_81AF013, UnknownString_81AF022 - .4byte 0x102, UnknownString_81AF0A3, UnknownString_81AF0BB, UnknownString_81AF0CA - .4byte 0x103, UnknownString_81AF149, UnknownString_81AF164, UnknownString_81AF174 - .4byte 0x104, UnknownString_81AF1E5, UnknownString_81AF1FD, UnknownString_81AF20A - .4byte 0x106, UnknownString_81AF281, UnknownString_81AF299, UnknownString_81AF2A9 - .4byte 0x109, UnknownString_81AF32C, UnknownString_81AF345, UnknownString_81AF34D - .4byte 0x10b, UnknownString_81AF3D0, UnknownString_81AF3ED, UnknownString_81AF3FC - .4byte 0x10c, UnknownString_81AF46D, UnknownString_81AF481, UnknownString_81AF49B - .4byte 0x10d, UnknownString_81AF511, UnknownString_81AF529, UnknownString_81AF536 - .4byte 0x10e, UnknownString_81AF5A9, UnknownString_81AF5BD, UnknownString_81AF5CD - .4byte 0x10f, UnknownString_81AF63F, UnknownString_81AF661, UnknownString_81AF676 - .4byte 0x110, UnknownString_81AF711, UnknownString_81AF726, UnknownString_81AF73D - .4byte 0x111, UnknownString_81AF7BF, UnknownString_81AF7D9, UnknownString_81AF7F1 - .4byte 0x112, UnknownString_81AF88A, UnknownString_81AF8A1, UnknownString_81AF8AA - .4byte 0x113, UnknownString_81AF91B, UnknownString_81AF935, UnknownString_81AF943 - .4byte 0x114, UnknownString_81AF9C8, UnknownString_81AF9E0, UnknownString_81AF9F6 - .4byte 0x11a, UnknownString_81AFA79, UnknownString_81AFA92, UnknownString_81AFA9E - .4byte 0x11b, UnknownString_81AFB17, UnknownString_81AFB2D, UnknownString_81AFB48 - .4byte 0x11c, UnknownString_81AFBD8, UnknownString_81AFBE7, UnknownString_81AFC04 - .4byte 0x21d, UnknownString_81AFC8A, UnknownString_81AFC9D, UnknownString_81AFCBE - .4byte 0x11e, UnknownString_81AFD44, UnknownString_81AFD60, UnknownString_81AFD80 - .4byte 0x121, UnknownString_81AFE1D, UnknownString_81AFE36, UnknownString_81AFE42 - .4byte 0x124, UnknownString_81AFEC2, UnknownString_81AFEDD, UnknownString_81AFEEE - .4byte 0x125, UnknownString_81AFF68, UnknownString_81AFF7B, UnknownString_81AFF88 - .4byte 0x126, UnknownString_81AFFFB, UnknownString_81B000D, UnknownString_81B0015 - .4byte 0x127, UnknownString_81B009D, UnknownString_81B00B6, UnknownString_81B00C9 - .4byte 0x128, UnknownString_81B014D, UnknownString_81B0165, UnknownString_81B0173 - .4byte 0x129, UnknownString_81B01E9, UnknownString_81B0201, UnknownString_81B0213 - .4byte 0x12a, UnknownString_81B0290, UnknownString_81B02A5, UnknownString_81B02B6 - .4byte 0x12b, UnknownString_81B0337, UnknownString_81B0351, UnknownString_81B0364 - .4byte 0x12c, UnknownString_81B03E9, UnknownString_81B0401, UnknownString_81B040C - .4byte 0x12d, UnknownString_81B046E, UnknownString_81B0489, UnknownString_81B049A - .4byte 0x12e, UnknownString_81B0523, UnknownString_81B053E, UnknownString_81B0554 - .4byte 0x12f, UnknownString_81B05D8, UnknownString_81B05F3, UnknownString_81B0610 - .4byte 0x130, UnknownString_81B06A9, UnknownString_81B06C6, UnknownString_81B06D9 - .4byte 0x131, UnknownString_81B0763, UnknownString_81B0781, UnknownString_81B0797 - - .align 2 -gUnknown_083E5620:: @ 83E5620 - .4byte 0x24 - .4byte gSaveBlock1 + 0x2D94 - .4byte 0xC diff --git a/data/scripts/bard.inc b/data/scripts/bard.inc deleted file mode 100644 index 3f25b100f..000000000 --- a/data/scripts/bard.inc +++ /dev/null @@ -1,67 +0,0 @@ -MauvilleCity_PokemonCenter_1F_EventScript_1AE744:: @ 81AE744 - special sub_80F7B14 - switch RESULT - case 0, MauvilleCity_PokemonCenter_1F_EventScript_1AE784 - case 1, MauvilleCity_PokemonCenter_1F_EventScript_1AE845 - case 2, MauvilleCity_PokemonCenter_1F_EventScript_1AEBAB - case 3, MauvilleCity_PokemonCenter_1F_EventScript_1B0816 - case 4, MauvilleCity_PokemonCenter_1F_EventScript_1B09EB - end - -MauvilleCity_PokemonCenter_1F_EventScript_1AE784:: @ 81AE784 - lock - faceplayer - msgbox MauvilleCity_PokemonCenter_1F_Text_1B0A91, 5 - compare RESULT, 1 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AE7A5 - compare RESULT, 0 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AE7C8 - end - -MauvilleCity_PokemonCenter_1F_EventScript_1AE7A5:: @ 81AE7A5 - setvar 0x8004, 0 - special sub_80F7C54 - pause 60 - special sub_80F7B2C - compare RESULT, 0 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AE7D2 - msgbox MauvilleCity_PokemonCenter_1F_Text_1B0AED, 4 - release - end - -MauvilleCity_PokemonCenter_1F_EventScript_1AE7C8:: @ 81AE7C8 - msgbox MauvilleCity_PokemonCenter_1F_Text_1B0AC3, 4 - release - end - -MauvilleCity_PokemonCenter_1F_EventScript_1AE7D2:: @ 81AE7D2 - msgbox MauvilleCity_PokemonCenter_1F_Text_1B0B2C, 5 - compare RESULT, 1 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AE7F1 - compare RESULT, 0 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AE83B - end - -MauvilleCity_PokemonCenter_1F_EventScript_1AE7F1:: @ 81AE7F1 - setvar 0x8004, 6 - call MauvilleCity_PokemonCenter_1F_EventScript_1A00F3 - lock - faceplayer - compare RESULT, 0 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AE83B - msgbox MauvilleCity_PokemonCenter_1F_Text_1B0BD0, 4 - setvar 0x8004, 1 - special sub_80F7C54 - pause 60 - msgbox MauvilleCity_PokemonCenter_1F_Text_1B0BFA, 5 - compare RESULT, 0 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AE7F1 - special sub_80F7B40 - msgbox MauvilleCity_PokemonCenter_1F_Text_1B0C23, 4 - release - end - -MauvilleCity_PokemonCenter_1F_EventScript_1AE83B:: @ 81AE83B - msgbox MauvilleCity_PokemonCenter_1F_Text_1B0BA6, 4 - release - end diff --git a/data/scripts/giddy.inc b/data/scripts/giddy.inc deleted file mode 100644 index bc7b1b8f1..000000000 --- a/data/scripts/giddy.inc +++ /dev/null @@ -1,51 +0,0 @@ -MauvilleCity_PokemonCenter_1F_EventScript_1B09EB:: @ 81B09EB - lock - faceplayer - msgbox MauvilleCity_PokemonCenter_1F_Text_1B092A, 5 - compare RESULT, 1 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0A0C - compare RESULT, 0 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0A6F - end - -MauvilleCity_PokemonCenter_1F_EventScript_1B0A0C:: @ 81B0A0C - special sub_80F7CC8 - compare RESULT, 1 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0A4E - compare RESULT, 0 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0A79 - end - -MauvilleCity_PokemonCenter_1F_EventScript_1B0A26:: @ 81B0A26 - special sub_80F7CC8 - compare RESULT, 1 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0A40 - compare RESULT, 0 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0A79 - end - -MauvilleCity_PokemonCenter_1F_EventScript_1B0A40:: @ 81B0A40 - msgbox MauvilleCity_PokemonCenter_1F_Text_1B0998, 4 - jump MauvilleCity_PokemonCenter_1F_EventScript_1B0A4E - end - -MauvilleCity_PokemonCenter_1F_EventScript_1B0A4E:: @ 81B0A4E - special ScrSpecial_GenerateGiddyLine - special ShowFieldMessageStringVar4 - waittext - yesnobox 20, 8 - compare RESULT, 1 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0A26 - compare RESULT, 0 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0A26 - end - -MauvilleCity_PokemonCenter_1F_EventScript_1B0A6F:: @ 81B0A6F - msgbox MauvilleCity_PokemonCenter_1F_Text_1B097C, 4 - release - end - -MauvilleCity_PokemonCenter_1F_EventScript_1B0A79:: @ 81B0A79 - msgbox MauvilleCity_PokemonCenter_1F_Text_1B09B0, 4 - release - end diff --git a/data/scripts/hipster.inc b/data/scripts/hipster.inc deleted file mode 100644 index 3e24e4868..000000000 --- a/data/scripts/hipster.inc +++ /dev/null @@ -1,25 +0,0 @@ -MauvilleCity_PokemonCenter_1F_EventScript_1AE845:: @ 81AE845 - lock - faceplayer - setflag 2054 - msgbox MauvilleCity_PokemonCenter_1F_Text_1B0C5B, 4 - special sub_80F7C70 - compare RESULT, 0 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AE86A - msgbox MauvilleCity_PokemonCenter_1F_Text_1B0CA7, 4 - release - end - -MauvilleCity_PokemonCenter_1F_EventScript_1AE86A:: @ 81AE86A - special sub_80F7C90 - compare RESULT, 1 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AE882 - msgbox MauvilleCity_PokemonCenter_1F_Text_1B0D11, 4 - release - end - -MauvilleCity_PokemonCenter_1F_EventScript_1AE882:: @ 81AE882 - msgbox MauvilleCity_PokemonCenter_1F_Text_1B0D75, 4 - special sub_80F7C84 - release - end diff --git a/data/scripts/mauville_man.inc b/data/scripts/mauville_man.inc new file mode 100644 index 000000000..f406d33fe --- /dev/null +++ b/data/scripts/mauville_man.inc @@ -0,0 +1,350 @@ +@ From mauville_old_man.h +@ TODO: Put these in a header + +MAUVILLE_MAN_BARD = 0 +MAUVILLE_MAN_HIPSTER = 1 +MAUVILLE_MAN_TRADER = 2 +MAUVILLE_MAN_STORYTELLER = 3 +MAUVILLE_MAN_GIDDY = 4 + +MauvilleCity_PokemonCenter_1F_EventScript_1AE744:: @ 81AE744 + special ScrSpecial_GetCurrentMauvilleMan + switch RESULT + case MAUVILLE_MAN_BARD, speak_to_bard + case MAUVILLE_MAN_HIPSTER, speak_to_hipster + case MAUVILLE_MAN_TRADER, speak_to_trader + case MAUVILLE_MAN_STORYTELLER, speak_to_storyteller + case MAUVILLE_MAN_GIDDY, MauvilleCity_PokemonCenter_1F_EventScript_1B09EB + end + +@------------------------------------------------------------------------------- +@ Bard +@------------------------------------------------------------------------------- + +speak_to_bard: + lock + faceplayer + msgbox gTextBard_HiImTheBard, MSGBOX_YESNO + compare RESULT, YES + jumpeq yes_hear_song + compare RESULT, NO + jumpeq dont_hear_song + end +yes_hear_song: + setvar 0x8004, 0 + special ScrSpecial_PlayBardSong + pause 60 + special ScrSpecial_HasBardSongBeenChanged + compare RESULT, FALSE + jumpeq prompt_write_lyrics @ Prompt new lyrics only if song hasn't been changed + msgbox gTextBard_OhWhatAMovingSong, 4 + release + end +dont_hear_song: + msgbox gTextBard_OhYouveLeftMe, 4 + release + end +prompt_write_lyrics: + msgbox gTextBard_SoHowDoYouLikeMySong, MSGBOX_YESNO + compare RESULT, YES + jumpeq write_lyrics + compare RESULT, NO + jumpeq dont_write_lyrics + end +write_lyrics: + setvar 0x8004, 6 + call MauvilleCity_PokemonCenter_1F_EventScript_1A00F3 + lock + faceplayer + compare RESULT, NO + jumpeq dont_write_lyrics + msgbox gTextBard_ThankYouKindly, 4 + setvar 0x8004, 1 + special ScrSpecial_PlayBardSong + pause 60 + msgbox gTextBard_WasThatHowYouWanted, MSGBOX_YESNO + compare RESULT, NO + jumpeq write_lyrics @ Keep looping until player responds YES + special ScrSpecial_SaveBardSongLyrics + msgbox gTextBard_OkayThatsIt, 4 + release + end +dont_write_lyrics: + msgbox gTextBard_OhYouveLeftMe2, 4 + release + end + +@------------------------------------------------------------------------------- +@ Hipster +@------------------------------------------------------------------------------- + +speak_to_hipster:: @ 81AE845 + lock + faceplayer + setflag 2054 + msgbox MauvilleCity_PokemonCenter_1F_Text_1B0C5B, 4 + special sub_80F7C70 + compare RESULT, 0 + jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AE86A + msgbox MauvilleCity_PokemonCenter_1F_Text_1B0CA7, 4 + release + end + +MauvilleCity_PokemonCenter_1F_EventScript_1AE86A:: @ 81AE86A + special sub_80F7C90 + compare RESULT, 1 + jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AE882 + msgbox MauvilleCity_PokemonCenter_1F_Text_1B0D11, 4 + release + end + +MauvilleCity_PokemonCenter_1F_EventScript_1AE882:: @ 81AE882 + msgbox MauvilleCity_PokemonCenter_1F_Text_1B0D75, 4 + special ScrSpecial_SetHipsterSpokenFlag + release + end + +@------------------------------------------------------------------------------- +@ Trader +@------------------------------------------------------------------------------- + + .include "data/text/trader.inc" + +speak_to_trader:: @ 81AEBAB + lock + faceplayer + msgbox MauvilleCity_PokemonCenter_1F_Text_1AE88F, 5 + compare RESULT, 0 + jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AEBDA + special sub_8109C44 + compare RESULT, 1 + jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AEBE3 + message MauvilleCity_PokemonCenter_1F_Text_1AE910 + waittext + jump MauvilleCity_PokemonCenter_1F_EventScript_1AEBEC + end + +MauvilleCity_PokemonCenter_1F_EventScript_1AEBDA:: @ 81AEBDA + msgbox MauvilleCity_PokemonCenter_1F_Text_1AE8C6, 2 + end + +MauvilleCity_PokemonCenter_1F_EventScript_1AEBE3:: @ 81AEBE3 + msgbox MauvilleCity_PokemonCenter_1F_Text_1AE8DF, 2 + end + +MauvilleCity_PokemonCenter_1F_EventScript_1AEBEC:: @ 81AEBEC + special sub_8109E34 + waitstate + compare 0x8004, 0 + jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AEC2D + compare 0x8004, 65535 + jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AEC36 + msgbox MauvilleCity_PokemonCenter_1F_Text_1AE97C, 5 + compare RESULT, 0 + jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AEC42 + special sub_8109C58 + compare RESULT, 1 + jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AEC4E + jump MauvilleCity_PokemonCenter_1F_EventScript_1AEC57 + end + +MauvilleCity_PokemonCenter_1F_EventScript_1AEC2D:: @ 81AEC2D + msgbox MauvilleCity_PokemonCenter_1F_Text_1AE950, 2 + end + +MauvilleCity_PokemonCenter_1F_EventScript_1AEC36:: @ 81AEC36 + message MauvilleCity_PokemonCenter_1F_Text_1AEB31 + waittext + jump MauvilleCity_PokemonCenter_1F_EventScript_1AEBEC + end + +MauvilleCity_PokemonCenter_1F_EventScript_1AEC42:: @ 81AEC42 + message MauvilleCity_PokemonCenter_1F_Text_1AE910 + waittext + jump MauvilleCity_PokemonCenter_1F_EventScript_1AEBEC + end + +MauvilleCity_PokemonCenter_1F_EventScript_1AEC4E:: @ 81AEC4E + msgbox MauvilleCity_PokemonCenter_1F_Text_1AE9B6, 2 + end + +MauvilleCity_PokemonCenter_1F_EventScript_1AEC57:: @ 81AEC57 + msgbox MauvilleCity_PokemonCenter_1F_Text_1AE9F8, 4 + special sub_8109CF0 + waitstate + compare 0x8006, 0 + jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AECA6 + compare 0x8006, 65535 + jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AECAF + special sub_8109C90 + compare RESULT, 1 + jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AECBD + msgbox MauvilleCity_PokemonCenter_1F_Text_1AEA9B, 5 + compare RESULT, 0 + jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AEC57 + special sub_8109DE0 + msgbox MauvilleCity_PokemonCenter_1F_Text_1AEAFB, 2 + end + +MauvilleCity_PokemonCenter_1F_EventScript_1AECA6:: @ 81AECA6 + msgbox MauvilleCity_PokemonCenter_1F_Text_1AEA2B, 2 + end + +MauvilleCity_PokemonCenter_1F_EventScript_1AECAF:: @ 81AECAF + msgbox MauvilleCity_PokemonCenter_1F_Text_1AEAC3, 4 + jump MauvilleCity_PokemonCenter_1F_EventScript_1AEC57 + end + +MauvilleCity_PokemonCenter_1F_EventScript_1AECBD:: @ 81AECBD + msgbox MauvilleCity_PokemonCenter_1F_Text_1AEA57, 2 + end + +@------------------------------------------------------------------------------- +@ Storyteller +@------------------------------------------------------------------------------- + + .include "data/text/storyteller.inc" + +speak_to_storyteller:: @ 81B0816 + setvar 0x8008, 0 + setvar 0x8009, 0 + setvar 0x800a, 0 + setvar 0x800b, 0 + lock + faceplayer + msgbox MauvilleCity_PokemonCenter_1F_Text_1AECC6, 5 + compare RESULT, 0 + jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0914 + specialval RESULT, sub_80F889C + compare RESULT, 0 + jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B08D3 + +MauvilleCity_PokemonCenter_1F_EventScript_1B084F:: @ 81B084F + message MauvilleCity_PokemonCenter_1F_Text_1AED35 + waittext + special sub_80F8874 + waitstate + compare RESULT, 0 + jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0883 + setvar 0x8008, 1 + special sub_80F8888 + waittext + waitbutton + specialval RESULT, sub_80F88AC + compare RESULT, 0 + jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0893 + jump MauvilleCity_PokemonCenter_1F_EventScript_1B0909 + +MauvilleCity_PokemonCenter_1F_EventScript_1B0883:: @ 81B0883 + compare 0x8008, 0 + jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0914 + jump MauvilleCity_PokemonCenter_1F_EventScript_1B08AE + +MauvilleCity_PokemonCenter_1F_EventScript_1B0893:: @ 81B0893 + msgbox MauvilleCity_PokemonCenter_1F_Text_1AEE50, 4 + msgbox MauvilleCity_PokemonCenter_1F_Text_1AEF0A, 5 + compare RESULT, 1 + jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B084F + +MauvilleCity_PokemonCenter_1F_EventScript_1B08AE:: @ 81B08AE + specialval RESULT, sub_80F88E0 + compare RESULT, 1 + jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B091F + specialval RESULT, sub_80F889C + compare RESULT, 4 + jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B091F + jump MauvilleCity_PokemonCenter_1F_EventScript_1B08DB + +MauvilleCity_PokemonCenter_1F_EventScript_1B08D3:: @ 81B08D3 + msgbox MauvilleCity_PokemonCenter_1F_Text_1AED70, 4 + +MauvilleCity_PokemonCenter_1F_EventScript_1B08DB:: @ 81B08DB + msgbox MauvilleCity_PokemonCenter_1F_Text_1AEEB4, 5 + compare RESULT, 0 + jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0914 + specialval RESULT, sub_80F88FC + compare RESULT, 1 + jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0909 + msgbox MauvilleCity_PokemonCenter_1F_Text_1AEF49, 4 + closebutton + release + end + +MauvilleCity_PokemonCenter_1F_EventScript_1B0909:: @ 81B0909 + msgbox MauvilleCity_PokemonCenter_1F_Text_1AEDE8, 4 + closebutton + release + end + +MauvilleCity_PokemonCenter_1F_EventScript_1B0914:: @ 81B0914 + msgbox MauvilleCity_PokemonCenter_1F_Text_1AED1D, 4 + closebutton + release + end + +MauvilleCity_PokemonCenter_1F_EventScript_1B091F:: @ 81B091F + msgbox MauvilleCity_PokemonCenter_1F_Text_1AEFA5, 4 + closebutton + release + end + +@------------------------------------------------------------------------------- +@ Giddy +@------------------------------------------------------------------------------- + + .include "data/text/giddy.inc" + +MauvilleCity_PokemonCenter_1F_EventScript_1B09EB:: @ 81B09EB + lock + faceplayer + msgbox MauvilleCity_PokemonCenter_1F_Text_1B092A, 5 + compare RESULT, 1 + jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0A0C + compare RESULT, 0 + jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0A6F + end + +MauvilleCity_PokemonCenter_1F_EventScript_1B0A0C:: @ 81B0A0C + special sub_80F7CC8 + compare RESULT, 1 + jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0A4E + compare RESULT, 0 + jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0A79 + end + +MauvilleCity_PokemonCenter_1F_EventScript_1B0A26:: @ 81B0A26 + special sub_80F7CC8 + compare RESULT, 1 + jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0A40 + compare RESULT, 0 + jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0A79 + end + +MauvilleCity_PokemonCenter_1F_EventScript_1B0A40:: @ 81B0A40 + msgbox MauvilleCity_PokemonCenter_1F_Text_1B0998, 4 + jump MauvilleCity_PokemonCenter_1F_EventScript_1B0A4E + end + +MauvilleCity_PokemonCenter_1F_EventScript_1B0A4E:: @ 81B0A4E + special ScrSpecial_GenerateGiddyLine + special ShowFieldMessageStringVar4 + waittext + yesnobox 20, 8 + compare RESULT, 1 + jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0A26 + compare RESULT, 0 + jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0A26 + end + +MauvilleCity_PokemonCenter_1F_EventScript_1B0A6F:: @ 81B0A6F + msgbox MauvilleCity_PokemonCenter_1F_Text_1B097C, 4 + release + end + +MauvilleCity_PokemonCenter_1F_EventScript_1B0A79:: @ 81B0A79 + msgbox MauvilleCity_PokemonCenter_1F_Text_1B09B0, 4 + release + end + + .include "data/text/bard.inc" + .include "data/text/hipster.inc" \ No newline at end of file diff --git a/data/scripts/storyteller.inc b/data/scripts/storyteller.inc deleted file mode 100644 index eba94e698..000000000 --- a/data/scripts/storyteller.inc +++ /dev/null @@ -1,82 +0,0 @@ -MauvilleCity_PokemonCenter_1F_EventScript_1B0816:: @ 81B0816 - setvar 0x8008, 0 - setvar 0x8009, 0 - setvar 0x800a, 0 - setvar 0x800b, 0 - lock - faceplayer - msgbox MauvilleCity_PokemonCenter_1F_Text_1AECC6, 5 - compare RESULT, 0 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0914 - specialval RESULT, sub_80F889C - compare RESULT, 0 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B08D3 - -MauvilleCity_PokemonCenter_1F_EventScript_1B084F:: @ 81B084F - message MauvilleCity_PokemonCenter_1F_Text_1AED35 - waittext - special sub_80F8874 - waitstate - compare RESULT, 0 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0883 - setvar 0x8008, 1 - special sub_80F8888 - waittext - waitbutton - specialval RESULT, sub_80F88AC - compare RESULT, 0 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0893 - jump MauvilleCity_PokemonCenter_1F_EventScript_1B0909 - -MauvilleCity_PokemonCenter_1F_EventScript_1B0883:: @ 81B0883 - compare 0x8008, 0 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0914 - jump MauvilleCity_PokemonCenter_1F_EventScript_1B08AE - -MauvilleCity_PokemonCenter_1F_EventScript_1B0893:: @ 81B0893 - msgbox MauvilleCity_PokemonCenter_1F_Text_1AEE50, 4 - msgbox MauvilleCity_PokemonCenter_1F_Text_1AEF0A, 5 - compare RESULT, 1 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B084F - -MauvilleCity_PokemonCenter_1F_EventScript_1B08AE:: @ 81B08AE - specialval RESULT, sub_80F88E0 - compare RESULT, 1 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B091F - specialval RESULT, sub_80F889C - compare RESULT, 4 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B091F - jump MauvilleCity_PokemonCenter_1F_EventScript_1B08DB - -MauvilleCity_PokemonCenter_1F_EventScript_1B08D3:: @ 81B08D3 - msgbox MauvilleCity_PokemonCenter_1F_Text_1AED70, 4 - -MauvilleCity_PokemonCenter_1F_EventScript_1B08DB:: @ 81B08DB - msgbox MauvilleCity_PokemonCenter_1F_Text_1AEEB4, 5 - compare RESULT, 0 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0914 - specialval RESULT, sub_80F88FC - compare RESULT, 1 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0909 - msgbox MauvilleCity_PokemonCenter_1F_Text_1AEF49, 4 - closebutton - release - end - -MauvilleCity_PokemonCenter_1F_EventScript_1B0909:: @ 81B0909 - msgbox MauvilleCity_PokemonCenter_1F_Text_1AEDE8, 4 - closebutton - release - end - -MauvilleCity_PokemonCenter_1F_EventScript_1B0914:: @ 81B0914 - msgbox MauvilleCity_PokemonCenter_1F_Text_1AED1D, 4 - closebutton - release - end - -MauvilleCity_PokemonCenter_1F_EventScript_1B091F:: @ 81B091F - msgbox MauvilleCity_PokemonCenter_1F_Text_1AEFA5, 4 - closebutton - release - end diff --git a/data/scripts/trader.inc b/data/scripts/trader.inc deleted file mode 100644 index b52c8a2dc..000000000 --- a/data/scripts/trader.inc +++ /dev/null @@ -1,88 +0,0 @@ -MauvilleCity_PokemonCenter_1F_EventScript_1AEBAB:: @ 81AEBAB - lock - faceplayer - msgbox MauvilleCity_PokemonCenter_1F_Text_1AE88F, 5 - compare RESULT, 0 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AEBDA - special sub_8109C44 - compare RESULT, 1 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AEBE3 - message MauvilleCity_PokemonCenter_1F_Text_1AE910 - waittext - jump MauvilleCity_PokemonCenter_1F_EventScript_1AEBEC - end - -MauvilleCity_PokemonCenter_1F_EventScript_1AEBDA:: @ 81AEBDA - msgbox MauvilleCity_PokemonCenter_1F_Text_1AE8C6, 2 - end - -MauvilleCity_PokemonCenter_1F_EventScript_1AEBE3:: @ 81AEBE3 - msgbox MauvilleCity_PokemonCenter_1F_Text_1AE8DF, 2 - end - -MauvilleCity_PokemonCenter_1F_EventScript_1AEBEC:: @ 81AEBEC - special sub_8109E34 - waitstate - compare 0x8004, 0 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AEC2D - compare 0x8004, 65535 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AEC36 - msgbox MauvilleCity_PokemonCenter_1F_Text_1AE97C, 5 - compare RESULT, 0 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AEC42 - special sub_8109C58 - compare RESULT, 1 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AEC4E - jump MauvilleCity_PokemonCenter_1F_EventScript_1AEC57 - end - -MauvilleCity_PokemonCenter_1F_EventScript_1AEC2D:: @ 81AEC2D - msgbox MauvilleCity_PokemonCenter_1F_Text_1AE950, 2 - end - -MauvilleCity_PokemonCenter_1F_EventScript_1AEC36:: @ 81AEC36 - message MauvilleCity_PokemonCenter_1F_Text_1AEB31 - waittext - jump MauvilleCity_PokemonCenter_1F_EventScript_1AEBEC - end - -MauvilleCity_PokemonCenter_1F_EventScript_1AEC42:: @ 81AEC42 - message MauvilleCity_PokemonCenter_1F_Text_1AE910 - waittext - jump MauvilleCity_PokemonCenter_1F_EventScript_1AEBEC - end - -MauvilleCity_PokemonCenter_1F_EventScript_1AEC4E:: @ 81AEC4E - msgbox MauvilleCity_PokemonCenter_1F_Text_1AE9B6, 2 - end - -MauvilleCity_PokemonCenter_1F_EventScript_1AEC57:: @ 81AEC57 - msgbox MauvilleCity_PokemonCenter_1F_Text_1AE9F8, 4 - special sub_8109CF0 - waitstate - compare 0x8006, 0 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AECA6 - compare 0x8006, 65535 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AECAF - special sub_8109C90 - compare RESULT, 1 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AECBD - msgbox MauvilleCity_PokemonCenter_1F_Text_1AEA9B, 5 - compare RESULT, 0 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AEC57 - special sub_8109DE0 - msgbox MauvilleCity_PokemonCenter_1F_Text_1AEAFB, 2 - end - -MauvilleCity_PokemonCenter_1F_EventScript_1AECA6:: @ 81AECA6 - msgbox MauvilleCity_PokemonCenter_1F_Text_1AEA2B, 2 - end - -MauvilleCity_PokemonCenter_1F_EventScript_1AECAF:: @ 81AECAF - msgbox MauvilleCity_PokemonCenter_1F_Text_1AEAC3, 4 - jump MauvilleCity_PokemonCenter_1F_EventScript_1AEC57 - end - -MauvilleCity_PokemonCenter_1F_EventScript_1AECBD:: @ 81AECBD - msgbox MauvilleCity_PokemonCenter_1F_Text_1AEA57, 2 - end diff --git a/data/specials.inc b/data/specials.inc index e588a29d3..06ba22a23 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -104,13 +104,13 @@ gSpecials:: def_special DoWateringBerryTreeAnim def_special sub_80E60D8 def_special sub_80EB7C4 - def_special sub_80F7B14 - def_special sub_80F7B2C - def_special sub_80F7B40 + def_special ScrSpecial_GetCurrentMauvilleMan + def_special ScrSpecial_HasBardSongBeenChanged + def_special ScrSpecial_SaveBardSongLyrics def_special sub_80F7C70 - def_special sub_80F7C84 + def_special ScrSpecial_SetHipsterSpokenFlag def_special sub_80F7C90 - def_special sub_80F7C54 + def_special ScrSpecial_PlayBardSong def_special sub_80F83D0 def_special ScrSpecial_GenerateGiddyLine def_special sub_80F7CC8 diff --git a/data/text/bard.inc b/data/text/bard.inc index edf4942f6..bd22c97a3 100644 --- a/data/text/bard.inc +++ b/data/text/bard.inc @@ -1,19 +1,19 @@ -UnknownString_81B0A83: @ 81B0A83 +gTextBard_BardTesting: @ 81B0A83 .string "BARD testing!$" -MauvilleCity_PokemonCenter_1F_Text_1B0A91:: @ 81B0A91 +gTextBard_HiImTheBard:: @ 81B0A91 .string "Hi, I’m the BARD.\n" .string "Would you like to hear my song?$" -MauvilleCity_PokemonCenter_1F_Text_1B0AC3:: @ 81B0AC3 +gTextBard_OhYouveLeftMe:: @ 81B0AC3 .string "Oh...\n" .string "You’ve left me feeling the blues...$" -MauvilleCity_PokemonCenter_1F_Text_1B0AED:: @ 81B0AED +gTextBard_OhWhatAMovingSong:: @ 81B0AED .string "Oh, what a moving song...\n" .string "I wish I could play it for others...$" -MauvilleCity_PokemonCenter_1F_Text_1B0B2C:: @ 81B0B2C +gTextBard_SoHowDoYouLikeMySong:: @ 81B0B2C .string "So?\n" .string "How do you like my song?\p" .string "But I’m none too happy about the\n" @@ -21,18 +21,18 @@ MauvilleCity_PokemonCenter_1F_Text_1B0B2C:: @ 81B0B2C .string "How would you like to write some new\n" .string "lyrics for me?$" -MauvilleCity_PokemonCenter_1F_Text_1B0BA6:: @ 81B0BA6 +gTextBard_OhYouveLeftMe2:: @ 81B0BA6 .string "Oh...\n" .string "You’ve left me feeling the blues...$" -MauvilleCity_PokemonCenter_1F_Text_1B0BD0:: @ 81B0BD0 +gTextBard_ThankYouKindly:: @ 81B0BD0 .string "Thank you kindly!\n" .string "Let me sing it for you.$" -MauvilleCity_PokemonCenter_1F_Text_1B0BFA:: @ 81B0BFA +gTextBard_WasThatHowYouWanted:: @ 81B0BFA .string "Was that how you wanted your song\n" .string "to go?$" -MauvilleCity_PokemonCenter_1F_Text_1B0C23:: @ 81B0C23 +gTextBard_OkayThatsIt:: @ 81B0C23 .string "Okay! That’s it, then.\n" .string "I’ll sing this song for a while.$" diff --git a/include/global.h b/include/global.h index f172c12a3..32a6beb2b 100644 --- a/include/global.h +++ b/include/global.h @@ -464,7 +464,7 @@ struct MauvilleManBard /*0x1A*/ u8 playerName[8]; /*0x22*/ u8 filler_2DB6[0x3]; /*0x25*/ u8 playerTrainerId[4]; - /*0x29*/ u8 unk_2DBD; + /*0x29*/ bool8 hasChangedSong; }; /*size = 0x2C*/ struct MauvilleManHipster @@ -502,7 +502,7 @@ struct MauvilleManGiddy }; /*size = 0x2C*/ -typedef union OldMan +union MauvilleMan { struct MauvilleManCommon common; struct MauvilleManBard bard; @@ -511,7 +511,7 @@ typedef union OldMan struct MauvilleManStoryteller storyteller; struct MauvilleManGiddy giddy; u8 filler[0x40]; -} OldMan; +}; struct Unk_SB_Access_Struct1 { @@ -668,7 +668,7 @@ struct SaveBlock1 /* 0x02025734 */ /*0x2B4C*/ struct MailStruct mail[16]; /*0x2D8C*/ u8 unk2D8C[4]; /*0x2D90*/ u8 filler_2D90[0x4]; - /*0x2D94*/ OldMan oldMan; + /*0x2D94*/ union MauvilleMan mauvilleMan; /*0x2DD4*/ struct EasyChatPair easyChatPairs[5]; //Dewford trend [0] and some other stuff /*0x2DFC*/ u8 filler_2DFC[0x8]; /*0x2E04*/ SB_Struct sbStruct; diff --git a/include/mauville_old_man.h b/include/mauville_old_man.h index 43bf3e093..277e5fbe6 100644 --- a/include/mauville_old_man.h +++ b/include/mauville_old_man.h @@ -14,7 +14,6 @@ enum void SetupMauvilleOldMan(void); void sub_80F7DC0(void); void sub_80F7F30(void); -void sub_80F7F80(u8); void sub_80F83D0(void); #endif // GUARD_MAUVILLE_OLD_MAN_H diff --git a/ld_script.txt b/ld_script.txt index 4b7d28768..5e604b480 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -190,7 +190,6 @@ SECTIONS { asm/pokenav.o(.text_80F708C); src/mon_markings.o(.text); src/mauville_old_man.o(.text); - asm/mauville_old_man.o(.text); src/mail.o(.text); src/menu_helpers.o(.text); src/script_pokemon_util_80F99CC.o(.text); @@ -422,7 +421,6 @@ SECTIONS { data/pokenav.o(.rodata); data/mon_markings.o(.rodata); src/mauville_old_man.o(.rodata); - data/mauville_old_man.o(.rodata); data/mail.o(.rodata); src/menu_helpers.o(.rodata); src/heal_location.o(.rodata); diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index 9400dfc32..3bf682ca0 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -23,11 +23,121 @@ extern struct MusicPlayerInfo gMPlay_SE2; extern u16 gScriptResult; extern u16 gSpecialVar_0x8004; + +extern const u8 UnknownString_81AEFFC[]; +extern const u8 UnknownString_81AF013[]; +extern const u8 UnknownString_81AF022[]; +extern const u8 UnknownString_81AF0A3[]; +extern const u8 UnknownString_81AF0BB[]; +extern const u8 UnknownString_81AF0CA[]; +extern const u8 UnknownString_81AF149[]; +extern const u8 UnknownString_81AF164[]; +extern const u8 UnknownString_81AF174[]; +extern const u8 UnknownString_81AF1E5[]; +extern const u8 UnknownString_81AF1FD[]; +extern const u8 UnknownString_81AF20A[]; +extern const u8 UnknownString_81AF281[]; +extern const u8 UnknownString_81AF299[]; +extern const u8 UnknownString_81AF2A9[]; +extern const u8 UnknownString_81AF32C[]; +extern const u8 UnknownString_81AF345[]; +extern const u8 UnknownString_81AF34D[]; +extern const u8 UnknownString_81AF3D0[]; +extern const u8 UnknownString_81AF3ED[]; +extern const u8 UnknownString_81AF3FC[]; +extern const u8 UnknownString_81AF46D[]; +extern const u8 UnknownString_81AF481[]; +extern const u8 UnknownString_81AF49B[]; +extern const u8 UnknownString_81AF511[]; +extern const u8 UnknownString_81AF529[]; +extern const u8 UnknownString_81AF536[]; +extern const u8 UnknownString_81AF5A9[]; +extern const u8 UnknownString_81AF5BD[]; +extern const u8 UnknownString_81AF5CD[]; +extern const u8 UnknownString_81AF63F[]; +extern const u8 UnknownString_81AF661[]; +extern const u8 UnknownString_81AF676[]; +extern const u8 UnknownString_81AF711[]; +extern const u8 UnknownString_81AF726[]; +extern const u8 UnknownString_81AF73D[]; +extern const u8 UnknownString_81AF7BF[]; +extern const u8 UnknownString_81AF7D9[]; +extern const u8 UnknownString_81AF7F1[]; +extern const u8 UnknownString_81AF88A[]; +extern const u8 UnknownString_81AF8A1[]; +extern const u8 UnknownString_81AF8AA[]; +extern const u8 UnknownString_81AF91B[]; +extern const u8 UnknownString_81AF935[]; +extern const u8 UnknownString_81AF943[]; +extern const u8 UnknownString_81AF9C8[]; +extern const u8 UnknownString_81AF9E0[]; +extern const u8 UnknownString_81AF9F6[]; +extern const u8 UnknownString_81AFA79[]; +extern const u8 UnknownString_81AFA92[]; +extern const u8 UnknownString_81AFA9E[]; +extern const u8 UnknownString_81AFB17[]; +extern const u8 UnknownString_81AFB2D[]; +extern const u8 UnknownString_81AFB48[]; +extern const u8 UnknownString_81AFBD8[]; +extern const u8 UnknownString_81AFBE7[]; +extern const u8 UnknownString_81AFC04[]; +extern const u8 UnknownString_81AFC8A[]; +extern const u8 UnknownString_81AFC9D[]; +extern const u8 UnknownString_81AFCBE[]; +extern const u8 UnknownString_81AFD44[]; +extern const u8 UnknownString_81AFD60[]; +extern const u8 UnknownString_81AFD80[]; +extern const u8 UnknownString_81AFE1D[]; +extern const u8 UnknownString_81AFE36[]; +extern const u8 UnknownString_81AFE42[]; +extern const u8 UnknownString_81AFEC2[]; +extern const u8 UnknownString_81AFEDD[]; +extern const u8 UnknownString_81AFEEE[]; +extern const u8 UnknownString_81AFF68[]; +extern const u8 UnknownString_81AFF7B[]; +extern const u8 UnknownString_81AFF88[]; +extern const u8 UnknownString_81AFFFB[]; +extern const u8 UnknownString_81B000D[]; +extern const u8 UnknownString_81B0015[]; +extern const u8 UnknownString_81B009D[]; +extern const u8 UnknownString_81B00B6[]; +extern const u8 UnknownString_81B00C9[]; +extern const u8 UnknownString_81B014D[]; +extern const u8 UnknownString_81B0165[]; +extern const u8 UnknownString_81B0173[]; +extern const u8 UnknownString_81B01E9[]; +extern const u8 UnknownString_81B0201[]; +extern const u8 UnknownString_81B0213[]; +extern const u8 UnknownString_81B0290[]; +extern const u8 UnknownString_81B02A5[]; +extern const u8 UnknownString_81B02B6[]; +extern const u8 UnknownString_81B0337[]; +extern const u8 UnknownString_81B0351[]; +extern const u8 UnknownString_81B0364[]; +extern const u8 UnknownString_81B03E9[]; +extern const u8 UnknownString_81B0401[]; +extern const u8 UnknownString_81B040C[]; +extern const u8 UnknownString_81B046E[]; +extern const u8 UnknownString_81B0489[]; +extern const u8 UnknownString_81B049A[]; +extern const u8 UnknownString_81B0523[]; +extern const u8 UnknownString_81B053E[]; +extern const u8 UnknownString_81B0554[]; +extern const u8 UnknownString_81B05D8[]; +extern const u8 UnknownString_81B05F3[]; +extern const u8 UnknownString_81B0610[]; +extern const u8 UnknownString_81B06A9[]; +extern const u8 UnknownString_81B06C6[]; +extern const u8 UnknownString_81B06D9[]; +extern const u8 UnknownString_81B0763[]; +extern const u8 UnknownString_81B0781[]; +extern const u8 UnknownString_81B0797[]; + extern struct UnkBard2 gUnknown_03005DA0; extern u16 gUnknown_020388BC; // set but not used? -const u16 gDefaultBardSongLyrics[] = +static const u16 gDefaultBardSongLyrics[] = { #ifdef ENGLISH EC_WORD_SISTER, @@ -46,7 +156,7 @@ const u16 gDefaultBardSongLyrics[] = #endif }; -const u8 *const gGiddyAdjectives[] = +static const u8 *const gGiddyAdjectives[] = { OtherText_SoPretty, OtherText_SoDarling, @@ -58,7 +168,7 @@ const u8 *const gGiddyAdjectives[] = OtherText_SoMagical, }; -const u8 *const gGiddyQuestions[] = +static const u8 *const gGiddyQuestions[] = { OtherText_WantVacationNicePlace, OtherText_BoughtCrayonsIsNice, @@ -70,24 +180,25 @@ const u8 *const gGiddyQuestions[] = OtherText_SecretBasesWonderful, }; -void sub_80F8184(u8); +void Task_BardSong(u8); +void StartBardSong(u8); void StorytellerSetup(void); void sub_80F8428(void); void SetupBard(void) { u16 i; - struct MauvilleManBard *bard = &gSaveBlock1.oldMan.bard; + struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard; bard->id = MAUVILLE_MAN_BARD; - bard->unk_2DBD = 0; + bard->hasChangedSong = FALSE; for (i = 0; i < 6; i++) bard->songLyrics[i] = gDefaultBardSongLyrics[i]; } void SetupHipster(void) { - struct MauvilleManHipster *hipster = &gSaveBlock1.oldMan.hipster; + struct MauvilleManHipster *hipster = &gSaveBlock1.mauvilleMan.hipster; hipster->id = MAUVILLE_MAN_HIPSTER; hipster->unk1 = 0; @@ -100,7 +211,7 @@ void SetupStoryteller(void) void SetupGiddy(void) { - struct MauvilleManGiddy *giddy = &gSaveBlock1.oldMan.giddy; + struct MauvilleManGiddy *giddy = &gSaveBlock1.mauvilleMan.giddy; giddy->id = MAUVILLE_MAN_GIDDY; giddy->unk1 = 0; @@ -137,12 +248,14 @@ void SetupMauvilleOldMan(void) sub_80F83D0(); } -/* +//#define TEST MAUVILLE_MAN_BARD + +#ifdef TEST // Safely changes man to test functionality u8 GetCurrentMauvilleOldMan(void) { - u8 newMan = MAUVILLE_MAN_GIDDY; - struct MauvilleManCommon *common = &gSaveBlock1.oldMan.common; + u8 newMan = TEST; + struct MauvilleManCommon *common = &gSaveBlock1.mauvilleMan.common; if (common->id != newMan) { @@ -168,56 +281,56 @@ u8 GetCurrentMauvilleOldMan(void) } return common->id; } -*/ - +#else u8 GetCurrentMauvilleOldMan(void) { - struct MauvilleManCommon *common = &gSaveBlock1.oldMan.common; + struct MauvilleManCommon *common = &gSaveBlock1.mauvilleMan.common; return common->id; } +#endif -void sub_80F7B14(void) +void ScrSpecial_GetCurrentMauvilleMan(void) { gScriptResult = GetCurrentMauvilleOldMan(); } -void sub_80F7B2C(void) +void ScrSpecial_HasBardSongBeenChanged(void) { - u16 *scriptPtr = &gScriptResult; // why?? - OldMan *oldMan = &gSaveBlock1.oldMan; + u16 *scriptResult = &gScriptResult; // why?? + struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard; - *scriptPtr = oldMan->bard.unk_2DBD; + *scriptResult = bard->hasChangedSong; } -void sub_80F7B40(void) +void ScrSpecial_SaveBardSongLyrics(void) { u16 i; - struct MauvilleManBard *bard = &gSaveBlock1.oldMan.bard; + struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard; StringCopy(bard->playerName, gSaveBlock2.playerName); - for(i = 0; i < 4; i++) + for (i = 0; i < 4; i++) bard->playerTrainerId[i] = gSaveBlock2.playerTrainerId[i]; - for(i = 0; i < 6; i++) + for (i = 0; i < 6; i++) bard->songLyrics[i] = bard->mauvilleOldMan_ecArray2[i]; - bard->unk_2DBD = 1; + bard->hasChangedSong = TRUE; } void sub_80F7BA0(void) { - struct MauvilleManBard *oldMan = &gSaveBlock1.oldMan.bard; + struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard; u16 specialVar = gSpecialVar_0x8004; // It's a bit odd to use this temp variable, but it seems needed to match. u16 *r5; u16 i; u8 *ptr; u8 *r4; - r5 = oldMan->mauvilleOldMan_ecArray2; + r5 = bard->mauvilleOldMan_ecArray2; if (specialVar == 0) - r5 = oldMan->songLyrics; + r5 = bard->songLyrics; ptr = gStringVar4; r4 = ptr; for (i = 0; i < 2; i++) @@ -230,7 +343,7 @@ void sub_80F7BA0(void) r4++; } r4++; - *(ptr++) = 0; + *(ptr++) = CHAR_SPACE; ptr = sub_80EB3FC(ptr, *(r5++)); while (ptr != r4) { @@ -239,7 +352,7 @@ void sub_80F7BA0(void) r4++; } r4++; - *(ptr++) = 0xFE; + *(ptr++) = CHAR_NEWLINE; ptr = sub_80EB3FC(ptr, *(r5++)); while (ptr != r4) { @@ -247,7 +360,6 @@ void sub_80F7BA0(void) *r4 = 0x37; r4++; } - //_080F7C2A if (i == 0) { *(ptr++) = EXT_CTRL_CODE_BEGIN; @@ -256,33 +368,33 @@ void sub_80F7BA0(void) } } -void sub_80F7C54(void) +void ScrSpecial_PlayBardSong(void) { - sub_80F7F80(gSpecialVar_0x8004); + StartBardSong(gSpecialVar_0x8004); MenuDisplayMessageBox(); ScriptContext1_Stop(); } void sub_80F7C70(void) { - u16 *scriptPtr = &gScriptResult; // again?? - OldMan *oldMan = &gSaveBlock1.oldMan; + u16 *scriptResult = &gScriptResult; // again?? + struct MauvilleManHipster *hipster = &gSaveBlock1.mauvilleMan.hipster; - *scriptPtr = oldMan->bard.unk_2D95; + *scriptResult = hipster->unk1; } -void sub_80F7C84(void) +void ScrSpecial_SetHipsterSpokenFlag(void) { - OldMan *oldMan = &gSaveBlock1.oldMan; + struct MauvilleManHipster *hipster = &gSaveBlock1.mauvilleMan.hipster; - oldMan->bard.unk_2D95 = 1; + hipster->unk1 = 1; } void sub_80F7C90(void) { u16 var = sub_80EB8EC(); - if(var == 0xFFFF) + if (var == 0xFFFF) { gScriptResult = FALSE; } @@ -295,12 +407,12 @@ void sub_80F7C90(void) void sub_80F7CC8(void) { - OldMan *oldMan = &gSaveBlock1.oldMan; + struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard; - if (oldMan->bard.unk_2D95 == 10) + if (bard->unk_2D95 == 10) { gScriptResult = FALSE; - oldMan->bard.unk_2D95 = 0; + bard->unk_2D95 = 0; } else { @@ -310,7 +422,7 @@ void sub_80F7CC8(void) void ScrSpecial_GenerateGiddyLine(void) { - struct MauvilleManGiddy *giddy = &gSaveBlock1.oldMan.giddy; + struct MauvilleManGiddy *giddy = &gSaveBlock1.mauvilleMan.giddy; if (giddy->unk1 == 0) sub_80F7DC0(); @@ -357,22 +469,22 @@ void sub_80F7DC0(void) for (i = 0; i < 8; i++) { - struct MauvilleManGiddy *giddy = &gSaveBlock1.oldMan.giddy; + struct MauvilleManGiddy *giddy = &gSaveBlock1.mauvilleMan.giddy; - //gSaveBlock1.oldMan.giddy.questionList[i] = i; + //gSaveBlock1.mauvilleMan.giddy.questionList[i] = i; giddy->questionList[i] = i; } // Scramble questions for (i = 0; i < 8; i++) { - struct MauvilleManGiddy *giddy = &gSaveBlock1.oldMan.giddy; + struct MauvilleManGiddy *giddy = &gSaveBlock1.mauvilleMan.giddy; /* u16 r1 = Random() % (i + 1); - u8 r7 = gSaveBlock1.oldMan.giddy.questionList[i]; - gSaveBlock1.oldMan.giddy.questionList[i] = gSaveBlock1.oldMan.giddy.questionList[r1]; - gSaveBlock1.oldMan.giddy.questionList[r1] = r7; + u8 r7 = gSaveBlock1.mauvilleMan.giddy.questionList[i]; + gSaveBlock1.mauvilleMan.giddy.questionList[i] = gSaveBlock1.mauvilleMan.giddy.questionList[r1]; + gSaveBlock1.mauvilleMan.giddy.questionList[r1] = r7; */ u16 r1 = Random() % (i + 1); u8 r7 = giddy->questionList[i]; @@ -388,20 +500,20 @@ void sub_80F7DC0(void) } { - struct MauvilleManGiddy *giddy = &gSaveBlock1.oldMan.giddy; + struct MauvilleManGiddy *giddy = &gSaveBlock1.mauvilleMan.giddy; giddy->questionNum = 0; } - //gSaveBlock1.oldMan.giddy.questionNum = 0; + //gSaveBlock1.mauvilleMan.giddy.questionNum = 0; r7 = 0; for (i = 0; i < 10; i++) { - struct MauvilleManGiddy *giddy = &gSaveBlock1.oldMan.giddy; + struct MauvilleManGiddy *giddy = &gSaveBlock1.mauvilleMan.giddy; u16 var = Random() % 10; if (var < 3 && r7 < 8) { - //gSaveBlock1.oldMan.giddy.mauvilleOldMan_ecArray[i] = 0xFFFF; + //gSaveBlock1.mauvilleMan.giddy.mauvilleOldMan_ecArray[i] = 0xFFFF; giddy->mauvilleOldMan_ecArray[i] = 0xFFFF; r7++; } @@ -422,7 +534,7 @@ void sub_80F7DC0(void) if (r1 == 6) r1 = 0; - //gSaveBlock1.oldMan.giddy.mauvilleOldMan_ecArray[i] = sub_80EB784(arr[r1][0]); + //gSaveBlock1.mauvilleMan.giddy.mauvilleOldMan_ecArray[i] = sub_80EB784(arr[r1][0]); giddy->mauvilleOldMan_ecArray[i] = sub_80EB784(arr[r1][0]); } } @@ -604,14 +716,14 @@ _080F7EE2:\n\ void sub_80F7EFC(void) { - struct MauvilleManBard *bard = &gSaveBlock1.oldMan.bard; + struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard; - bard->unk_2DBD = 0; + bard->hasChangedSong = FALSE; } void sub_80F7F0C(void) { - struct MauvilleManHipster *hipster = &gSaveBlock1.oldMan.hipster; + struct MauvilleManHipster *hipster = &gSaveBlock1.mauvilleMan.hipster; hipster->unk1 = 0; } @@ -648,9 +760,9 @@ void sub_80F7F30(void) sub_80F83D0(); } -void sub_80F7F80(u8 a) +void StartBardSong(u8 a) { - u8 taskId = CreateTask(sub_80F8184, 0x50); + u8 taskId = CreateTask(Task_BardSong, 0x50); gTasks[taskId].data[5] = a; } @@ -661,7 +773,7 @@ void BardSingWord(struct Task *task, struct UnkBard2 *b) { case 0: { - struct MauvilleManBard *bard = &gSaveBlock1.oldMan.bard; + struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard; u16 *r2; s32 i; @@ -756,7 +868,7 @@ void BardSingWord(struct Task *task, struct UnkBard2 *b) } } -void sub_80F8184(u8 taskId) +void Task_BardSong(u8 taskId) { struct Task *task = &gTasks[taskId]; // r5 @@ -780,7 +892,7 @@ void sub_80F8184(u8 taskId) break; case 2: { - struct MauvilleManBard *bard = &gSaveBlock1.oldMan.bard; + struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard; u8 *string = gStringVar4 + task->data[3]; u16 wordLen = 0; // Can't get it to match without hacking @@ -885,9 +997,58 @@ void sub_80F83D0(void) VarSet(0x4010, 0x45 + GetCurrentMauvilleOldMan()); } +struct UnknownStruct1 +{ + u8 unk0; + u8 unk1; + const u8 *unk4; + const u8 *unk8; + const u8 *unkC; +}; + +static const struct UnknownStruct1 gUnknown_083E53E0[] = +{ + {0x32, 1, UnknownString_81AEFFC, UnknownString_81AF013, UnknownString_81AF022}, + {0x02, 1, UnknownString_81AF0A3, UnknownString_81AF0BB, UnknownString_81AF0CA}, + {0x03, 1, UnknownString_81AF149, UnknownString_81AF164, UnknownString_81AF174}, + {0x04, 1, UnknownString_81AF1E5, UnknownString_81AF1FD, UnknownString_81AF20A}, + {0x06, 1, UnknownString_81AF281, UnknownString_81AF299, UnknownString_81AF2A9}, + {0x09, 1, UnknownString_81AF32C, UnknownString_81AF345, UnknownString_81AF34D}, + {0x0B, 1, UnknownString_81AF3D0, UnknownString_81AF3ED, UnknownString_81AF3FC}, + {0x0C, 1, UnknownString_81AF46D, UnknownString_81AF481, UnknownString_81AF49B}, + {0x0D, 1, UnknownString_81AF511, UnknownString_81AF529, UnknownString_81AF536}, + {0x0E, 1, UnknownString_81AF5A9, UnknownString_81AF5BD, UnknownString_81AF5CD}, + {0x0F, 1, UnknownString_81AF63F, UnknownString_81AF661, UnknownString_81AF676}, + {0x10, 1, UnknownString_81AF711, UnknownString_81AF726, UnknownString_81AF73D}, + {0x11, 1, UnknownString_81AF7BF, UnknownString_81AF7D9, UnknownString_81AF7F1}, + {0x12, 1, UnknownString_81AF88A, UnknownString_81AF8A1, UnknownString_81AF8AA}, + {0x13, 1, UnknownString_81AF91B, UnknownString_81AF935, UnknownString_81AF943}, + {0x14, 1, UnknownString_81AF9C8, UnknownString_81AF9E0, UnknownString_81AF9F6}, + {0x1A, 1, UnknownString_81AFA79, UnknownString_81AFA92, UnknownString_81AFA9E}, + {0x1B, 1, UnknownString_81AFB17, UnknownString_81AFB2D, UnknownString_81AFB48}, + {0x1C, 1, UnknownString_81AFBD8, UnknownString_81AFBE7, UnknownString_81AFC04}, + {0x1D, 2, UnknownString_81AFC8A, UnknownString_81AFC9D, UnknownString_81AFCBE}, + {0x1E, 1, UnknownString_81AFD44, UnknownString_81AFD60, UnknownString_81AFD80}, + {0x21, 1, UnknownString_81AFE1D, UnknownString_81AFE36, UnknownString_81AFE42}, + {0x24, 1, UnknownString_81AFEC2, UnknownString_81AFEDD, UnknownString_81AFEEE}, + {0x25, 1, UnknownString_81AFF68, UnknownString_81AFF7B, UnknownString_81AFF88}, + {0x26, 1, UnknownString_81AFFFB, UnknownString_81B000D, UnknownString_81B0015}, + {0x27, 1, UnknownString_81B009D, UnknownString_81B00B6, UnknownString_81B00C9}, + {0x28, 1, UnknownString_81B014D, UnknownString_81B0165, UnknownString_81B0173}, + {0x29, 1, UnknownString_81B01E9, UnknownString_81B0201, UnknownString_81B0213}, + {0x2A, 1, UnknownString_81B0290, UnknownString_81B02A5, UnknownString_81B02B6}, + {0x2B, 1, UnknownString_81B0337, UnknownString_81B0351, UnknownString_81B0364}, + {0x2C, 1, UnknownString_81B03E9, UnknownString_81B0401, UnknownString_81B040C}, + {0x2D, 1, UnknownString_81B046E, UnknownString_81B0489, UnknownString_81B049A}, + {0x2E, 1, UnknownString_81B0523, UnknownString_81B053E, UnknownString_81B0554}, + {0x2F, 1, UnknownString_81B05D8, UnknownString_81B05F3, UnknownString_81B0610}, + {0x30, 1, UnknownString_81B06A9, UnknownString_81B06C6, UnknownString_81B06D9}, + {0x31, 1, UnknownString_81B0763, UnknownString_81B0781, UnknownString_81B0797}, +}; + void StorytellerSetup(void) { - struct MauvilleManStoryteller *storyteller = &gSaveBlock1.oldMan.storyteller; + struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; s32 i; storyteller->id = MAUVILLE_MAN_STORYTELLER; @@ -901,7 +1062,7 @@ void StorytellerSetup(void) void sub_80F8428(void) { - struct MauvilleManStoryteller *storyteller = &gSaveBlock1.oldMan.storyteller; + struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; storyteller->id = MAUVILLE_MAN_STORYTELLER; storyteller->unk1 = FALSE; @@ -914,17 +1075,6 @@ u32 sub_80F8438(u8 stat) GetGameStat(stat); } -struct UnknownStruct1 -{ - u8 unk0; - u8 unk1; - const u8 *unk4; - const u8 *unk8; - const u8 *unkC; -}; - -extern const struct UnknownStruct1 gUnknown_083E53E0[]; - const struct UnknownStruct1 *sub_80F844C(u32 a) { s32 i; @@ -958,7 +1108,7 @@ u8 sub_80F849C(void) for (i = 0; i < 4; i++) { - struct MauvilleManStoryteller *storyteller = &gSaveBlock1.oldMan.storyteller; + struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; if (storyteller->unk4[i] == 0) break; @@ -968,14 +1118,14 @@ u8 sub_80F849C(void) u32 sub_80F84C8(u32 a) { - u8 *ptr = gSaveBlock1.oldMan.storyteller.unk24[a]; + u8 *ptr = gSaveBlock1.mauvilleMan.storyteller.unk24[a]; return ptr[0] | (ptr[1] << 8) | (ptr[2] << 16) | (ptr[3] << 24); } void sub_80F84EC(u32 a, u32 b) { - u8 *ptr = gSaveBlock1.oldMan.storyteller.unk24[a]; + u8 *ptr = gSaveBlock1.mauvilleMan.storyteller.unk24[a]; ptr[0] = b; ptr[1] = b >> 8; @@ -985,7 +1135,7 @@ void sub_80F84EC(u32 a, u32 b) bool32 sub_80F8508(u32 a) { - struct MauvilleManStoryteller *storyteller = &gSaveBlock1.oldMan.storyteller; + struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; if (sub_80F8438(storyteller->unk4[a]) > sub_80F84C8(a)) return TRUE; @@ -995,7 +1145,7 @@ bool32 sub_80F8508(u32 a) void sub_80F8534(u32 a, void *b) { - u8 *ptr = gSaveBlock1.oldMan.storyteller.unk8[a]; + u8 *ptr = gSaveBlock1.mauvilleMan.storyteller.unk8[a]; memset(b, 0xFF, 8); memcpy(b, ptr, 7); @@ -1003,7 +1153,7 @@ void sub_80F8534(u32 a, void *b) void sub_80F8560(u32 a, const u8 *b) { - u8 *ptr = gSaveBlock1.oldMan.storyteller.unk8[a]; + u8 *ptr = gSaveBlock1.mauvilleMan.storyteller.unk8[a]; u8 len = StringLength(b); memset(ptr, 0xFF, 7); @@ -1012,7 +1162,7 @@ void sub_80F8560(u32 a, const u8 *b) void sub_80F8598(u32 a, u32 b) { - struct MauvilleManStoryteller *storyteller = &gSaveBlock1.oldMan.storyteller; + struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; storyteller->unk4[a] = b; sub_80F8560(a, gSaveBlock2.playerName); @@ -1037,19 +1187,16 @@ void sub_80F85FC(u8 *arr, s32 count) } } -extern const struct {u32 unk0; struct MauvilleManStoryteller *unk4; u32 unk8;} gUnknown_083E5620; -/* -static const struct {u32 unk0; struct MauvilleManStoryteller *unk4; u32 unk8;} gUnknown_083E5620 = +static const struct {u32 length; struct MauvilleManStoryteller *unused1; u32 unused2;} gUnknown_083E5620 = { 36, - &gSaveBlock1.oldMan.storyteller, - 12, + &gSaveBlock1.mauvilleMan.storyteller, // unused + 12, // unused }; -*/ bool8 sub_80F8650(void) { - u8 arr[gUnknown_083E5620.unk0]; + u8 arr[gUnknown_083E5620.length]; s32 i; s32 j; @@ -1058,11 +1205,11 @@ bool8 sub_80F8650(void) { u8 r4 = gUnknown_083E53E0[arr[i]].unk0; u8 r6 = gUnknown_083E53E0[arr[i]].unk1; - struct MauvilleManStoryteller *storyteller = &gSaveBlock1.oldMan.storyteller; + struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; for (j = 0; j < 4; j++) { - if (gSaveBlock1.oldMan.storyteller.unk4[j] == r4) + if (gSaveBlock1.mauvilleMan.storyteller.unk4[j] == r4) break; } if (j == 4 && sub_80F8438(r4) >= r6) @@ -1077,7 +1224,7 @@ bool8 sub_80F8650(void) void sub_80F8700(u32 a) { - struct MauvilleManStoryteller *storyteller = &gSaveBlock1.oldMan.storyteller; + struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; u8 r6 = storyteller->unk4[a]; ConvertIntToDecimalStringN(gStringVar1, sub_80F84C8(a), 0, 10); @@ -1093,7 +1240,7 @@ void sub_80F8758(void) MenuDrawTextWindow(0, 0, 25, 4 + sub_80F849C() * 2); for (i = 0; i < 4; i++) { - struct MauvilleManStoryteller *storyteller = &gSaveBlock1.oldMan.storyteller; + struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; u8 r0 = storyteller->unk4[i]; if (r0 == 0) @@ -1155,7 +1302,7 @@ u8 sub_80F889C(void) bool8 sub_80F88AC(void) { - struct MauvilleManStoryteller *storyteller = &gSaveBlock1.oldMan.storyteller; + struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; u8 r4 = storyteller->unk4[gUnknown_03000748]; if (sub_80F8508(gUnknown_03000748) == TRUE) @@ -1168,7 +1315,7 @@ bool8 sub_80F88AC(void) bool8 sub_80F88E0(void) { - struct MauvilleManStoryteller *storyteller = &gSaveBlock1.oldMan.storyteller; + struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; if (storyteller->unk1 == FALSE) return FALSE; diff --git a/src/record_mixing.c b/src/record_mixing.c index d1083910c..e5f892d20 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -40,7 +40,7 @@ static u8 gUnknown_0300071C[4]; void *recordMixingSecretBases = &gSaveBlock1.secretBases; void *recordMixingTvShows = &gSaveBlock1.tvShows; void *gUnknown_083D0274 = &gSaveBlock1.unknown_2ABC; -void *gUnknown_083D0278 = &gSaveBlock1.oldMan; +void *gUnknown_083D0278 = &gSaveBlock1.mauvilleMan; void *recordMixingEasyChatPairs = &gSaveBlock1.easyChatPairs; struct RecordMixing_UnknownStruct *gUnknown_083D0280 = &gUnknown_02038738; void *gUnknown_083D0284 = &gSaveBlock2.filler_A8; diff --git a/src/trader.c b/src/trader.c index 9aeefa3d1..d289f72a8 100644 --- a/src/trader.c +++ b/src/trader.c @@ -37,7 +37,7 @@ void sub_810993C(void) { u8 i, j; u8 buffer[12]; - struct MauvilleManTrader *trader = &gSaveBlock1.oldMan.trader; + struct MauvilleManTrader *trader = &gSaveBlock1.mauvilleMan.trader; for (i = 0; i < 3; i++) { @@ -59,7 +59,7 @@ void sub_810993C(void) void TraderSetup(void) { u8 i; - struct MauvilleManTrader *trader = &gSaveBlock1.oldMan.trader; + struct MauvilleManTrader *trader = &gSaveBlock1.mauvilleMan.trader; trader->id = MAUVILLE_MAN_TRADER; trader->unk31 = 0; @@ -75,7 +75,7 @@ void TraderSetup(void) void sub_8109A20(void) { - struct MauvilleManTrader *trader = &gSaveBlock1.oldMan.trader; + struct MauvilleManTrader *trader = &gSaveBlock1.mauvilleMan.trader; trader->unk31 = 0; } @@ -89,7 +89,7 @@ void sub_8109A48(u8 taskId) u8 i; u8 numChoices = 1; u8 numDecorations = 0; - struct MauvilleManTrader *trader = &gSaveBlock1.oldMan.trader; + struct MauvilleManTrader *trader = &gSaveBlock1.mauvilleMan.trader; for (i = 0; i < 4; i++) { @@ -142,7 +142,7 @@ void sub_8109B34(u8 taskId, u8 decorationId) void sub_8109B7C(u8 taskId) { - struct MauvilleManTrader *trader = &gSaveBlock1.oldMan.trader; + struct MauvilleManTrader *trader = &gSaveBlock1.mauvilleMan.trader; if (gMain.newKeys & DPAD_UP) { @@ -177,7 +177,7 @@ void sub_8109B7C(u8 taskId) void sub_8109C44(void) { - struct MauvilleManTrader *trader = &gSaveBlock1.oldMan.trader; + struct MauvilleManTrader *trader = &gSaveBlock1.mauvilleMan.trader; gScriptResult = trader->unk31; } @@ -245,7 +245,7 @@ void sub_8109DAC(u8 taskId) void sub_8109DE0(void) { - struct MauvilleManTrader *trader = &gSaveBlock1.oldMan.trader; + struct MauvilleManTrader *trader = &gSaveBlock1.mauvilleMan.trader; sub_81340A8(gSpecialVar_0x8006); IsThereStorageSpaceForDecoration(gSpecialVar_0x8004); -- cgit v1.2.3 From 4a583141ba483dcd49f49760a29c403c5d259efb Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Thu, 24 Aug 2017 15:33:07 -0500 Subject: more labeling and fix German build --- data-de/event_scripts.s | 11 +------- data-de/text/bard.inc | 18 ++++++------- include/global.h | 2 +- src/mauville_old_man.c | 70 ++++++++++++++++++++++++++----------------------- 4 files changed, 48 insertions(+), 53 deletions(-) diff --git a/data-de/event_scripts.s b/data-de/event_scripts.s index 4d809241c..a6bb9e015 100644 --- a/data-de/event_scripts.s +++ b/data-de/event_scripts.s @@ -4771,16 +4771,7 @@ BattleTower_Lobby_EventScript_1AE30F:: @ 81AE30F .include "data/scripts/gabby_and_ty.inc" - .include "data/scripts/bard.inc" - .include "data/scripts/hipster.inc" - .include "data/text/trader.inc" - .include "data/scripts/trader.inc" - .include "data/text/storyteller.inc" - .include "data/scripts/storyteller.inc" - .include "data/text/giddy.inc" - .include "data/scripts/giddy.inc" - .include "data/text/bard.inc" - .include "data/text/hipster.inc" + .include "data/scripts/mauville_man.inc" .include "data/field_move_scripts.inc" .include "data/item_ball_scripts.inc" diff --git a/data-de/text/bard.inc b/data-de/text/bard.inc index 089741d00..dbfb7d400 100644 --- a/data-de/text/bard.inc +++ b/data-de/text/bard.inc @@ -1,20 +1,20 @@ -UnknownString_81B0A83: @ 81B0A83 +gTextBard_BardTesting: @ 81B0A83 .string "BARDEN Test.$" -MauvilleCity_PokemonCenter_1F_Text_1B0A91:: @ 81B0A91 +gTextBard_HiImTheBard:: @ 81B0A91 .string "Hallo, ich bin der BARDE.\n" .string "Möchtest du meinem Lied lauschen?$" -MauvilleCity_PokemonCenter_1F_Text_1B0AC3:: @ 81B0AC3 +gTextBard_OhYouveLeftMe:: @ 81B0AC3 .string "Oh...\n" .string "Du überlässt mich meinem Blues?$" -MauvilleCity_PokemonCenter_1F_Text_1B0AED:: @ 81B0AED +gTextBard_OhWhatAMovingSong:: @ 81B0AED .string "Hach, was für ein bewegendes Lied...\n" .string "Ich wünschte, ich könnte es für\l" .string "andere spielen...$" -MauvilleCity_PokemonCenter_1F_Text_1B0B2C:: @ 81B0B2C +gTextBard_SoHowDoYouLikeMySong:: @ 81B0B2C .string "So?\n" .string "Wie fandest du mein Lied?\p" .string "Ich bin noch nicht ganz zufrieden mit\n" @@ -22,17 +22,17 @@ MauvilleCity_PokemonCenter_1F_Text_1B0B2C:: @ 81B0B2C .string "Hast du nicht Lust, den Text für mich\n" .string "neu zu schreiben?$" -MauvilleCity_PokemonCenter_1F_Text_1B0BA6:: @ 81B0BA6 +gTextBard_OhYouveLeftMe2:: @ 81B0BA6 .string "Oh... Und wieder werde ich meinem\n" .string "Blues überlassen.$" -MauvilleCity_PokemonCenter_1F_Text_1B0BD0:: @ 81B0BD0 +gTextBard_ThankYouKindly:: @ 81B0BD0 .string "Vielen herzlichen Dank!\n" .string "Ich möchte für dich singen.$" -MauvilleCity_PokemonCenter_1F_Text_1B0BFA:: @ 81B0BFA +gTextBard_WasThatHowYouWanted:: @ 81B0BFA .string "Hast du dir dein Lied so vorgestellt?$" -MauvilleCity_PokemonCenter_1F_Text_1B0C23:: @ 81B0C23 +gTextBard_OkayThatsIt:: @ 81B0C23 .string "Okay! Das ist es! Dieses Lied werde\n" .string "ich nun für eine Weile singen.$" diff --git a/include/global.h b/include/global.h index 32a6beb2b..6c0fc28ef 100644 --- a/include/global.h +++ b/include/global.h @@ -460,7 +460,7 @@ struct MauvilleManBard /*0x00*/ u8 id; /*0x01*/ u8 unk_2D95; /*0x02*/ u16 songLyrics[6]; - /*0x0E*/ u16 mauvilleOldMan_ecArray2[6]; + /*0x0E*/ u16 temporaryLyrics[6]; /*0x1A*/ u8 playerName[8]; /*0x22*/ u8 filler_2DB6[0x3]; /*0x25*/ u8 playerTrainerId[4]; diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index 3bf682ca0..4edcb1417 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -314,28 +314,29 @@ void ScrSpecial_SaveBardSongLyrics(void) bard->playerTrainerId[i] = gSaveBlock2.playerTrainerId[i]; for (i = 0; i < 6; i++) - bard->songLyrics[i] = bard->mauvilleOldMan_ecArray2[i]; + bard->songLyrics[i] = bard->temporaryLyrics[i]; bard->hasChangedSong = TRUE; } +// prepare song? void sub_80F7BA0(void) { struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard; u16 specialVar = gSpecialVar_0x8004; // It's a bit odd to use this temp variable, but it seems needed to match. - u16 *r5; + u16 *lyrics; u16 i; u8 *ptr; u8 *r4; - r5 = bard->mauvilleOldMan_ecArray2; + lyrics = bard->temporaryLyrics; if (specialVar == 0) - r5 = bard->songLyrics; + lyrics = bard->songLyrics; ptr = gStringVar4; r4 = ptr; for (i = 0; i < 2; i++) { - ptr = sub_80EB3FC(ptr, *(r5++)); + ptr = sub_80EB3FC(ptr, *(lyrics++)); while (ptr != r4) { if (*r4 == 0) @@ -344,7 +345,7 @@ void sub_80F7BA0(void) } r4++; *(ptr++) = CHAR_SPACE; - ptr = sub_80EB3FC(ptr, *(r5++)); + ptr = sub_80EB3FC(ptr, *(lyrics++)); while (ptr != r4) { if (*r4 == 0) @@ -353,7 +354,7 @@ void sub_80F7BA0(void) } r4++; *(ptr++) = CHAR_NEWLINE; - ptr = sub_80EB3FC(ptr, *(r5++)); + ptr = sub_80EB3FC(ptr, *(lyrics++)); while (ptr != r4) { if (*r4 == 0) @@ -780,7 +781,7 @@ void BardSingWord(struct Task *task, struct UnkBard2 *b) if (gSpecialVar_0x8004 == 0) r2 = bard->songLyrics; else - r2 = bard->mauvilleOldMan_ecArray2; + r2 = bard->temporaryLyrics; for (i = 0; i < 6; i++) b->var0C[i] = r2[i]; for (i = 0; i < 6; i++) @@ -868,12 +869,15 @@ void BardSingWord(struct Task *task, struct UnkBard2 *b) } } +#define tState data[0] +#define tCharIndex data[3] + void Task_BardSong(u8 taskId) { struct Task *task = &gTasks[taskId]; // r5 BardSingWord(task, &gUnknown_03005DA0); - switch (task->data[0]) + switch (task->tState) { case 0: sub_80F7BA0(); @@ -881,19 +885,19 @@ void Task_BardSong(u8 taskId) sub_8002EB0(gMenuWindowPtr, gStringVar4, 2, 4, 15); task->data[1] = 0; task->data[2] = 0; - task->data[3] = 0; + task->tCharIndex = 0; task->data[4] = 0; FadeOutBGMTemporarily(4); - task->data[0] = 1; + task->tState = 1; break; case 1: if (IsBGMPausedOrStopped()) - task->data[0] = 2; + task->tState = 2; break; case 2: { struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard; - u8 *string = gStringVar4 + task->data[3]; + u8 *string = gStringVar4 + task->tCharIndex; u16 wordLen = 0; // Can't get it to match without hacking u32 temp; @@ -910,7 +914,7 @@ void Task_BardSong(u8 taskId) if (task->data[5] == 0) gUnknown_020388BC = MACRO1(bard->songLyrics[task->data[4]]); else - gUnknown_020388BC = MACRO1(bard->mauvilleOldMan_ecArray2[task->data[4]]); + gUnknown_020388BC = MACRO1(bard->temporaryLyrics[task->data[4]]); temp = gUnknown_03005DA0.var04 / wordLen; zero = 0; gUnknown_03005DA0.var04 = temp; @@ -918,50 +922,50 @@ void Task_BardSong(u8 taskId) gUnknown_03005DA0.var04 = 1; task->data[4]++; if (task->data[2] == 0) - task->data[0] = 3; + task->tState = 3; else - task->data[0] = 5; + task->tState = 5; task->data[1] = zero; } break; case 5: if (task->data[2] == 0) - task->data[0] = 3; + task->tState = 3; else task->data[2]--; break; case 3: - if (gStringVar4[task->data[3]] == EOS) + if (gStringVar4[task->tCharIndex] == EOS) { FadeInNewBGM(BGM_POKECEN, 6); m4aMPlayFadeOutTemporarily(&gMPlay_SE2, 2); EnableBothScriptContexts(); DestroyTask(taskId); } - else if (gStringVar4[task->data[3]] == CHAR_SPACE) + else if (gStringVar4[task->tCharIndex] == CHAR_SPACE) { sub_8003418(gMenuWindowPtr); - task->data[3]++; - task->data[0] = 2; + task->tCharIndex++; + task->tState = 2; task->data[2] = 0; } - else if (gStringVar4[task->data[3]] == CHAR_NEWLINE) + else if (gStringVar4[task->tCharIndex] == CHAR_NEWLINE) { - task->data[3]++; - task->data[0] = 2; + task->tCharIndex++; + task->tState = 2; task->data[2] = 0; } - else if (gStringVar4[task->data[3]] == EXT_CTRL_CODE_BEGIN) + else if (gStringVar4[task->tCharIndex] == EXT_CTRL_CODE_BEGIN) { - task->data[3] += 2; // skip over control codes - task->data[0] = 2; + task->tCharIndex += 2; // skip over control codes + task->tState = 2; task->data[2] = 8; } - else if (gStringVar4[task->data[3]] == 0x37) // What is 0x37 supposed to be? + else if (gStringVar4[task->tCharIndex] == 0x37) // What is 0x37 supposed to be? { - gStringVar4[task->data[3]] = 0; + gStringVar4[task->tCharIndex] = CHAR_SPACE; sub_8003418(gMenuWindowPtr); - task->data[3]++; + task->tCharIndex++; task->data[2] = 0; } else @@ -976,10 +980,10 @@ void Task_BardSong(u8 taskId) task->data[1]++; break; case 2: - task->data[3]++; + task->tCharIndex++; task->data[1] = 0; task->data[2] = gUnknown_03005DA0.var04; - task->data[0] = 4; + task->tState = 4; break; } } @@ -987,7 +991,7 @@ void Task_BardSong(u8 taskId) case 4: task->data[2]--; if (task->data[2] == 0) - task->data[0] = 3; + task->tState = 3; break; } } -- cgit v1.2.3 From e427c657f2f44f06a0dd085a79d2e91c4045f0f0 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Thu, 24 Aug 2017 17:30:42 -0400 Subject: decompile up to sub_80B3BF4 --- asm/shop.s | 281 ++-------------------------------------------------------- src/shop.c | 77 ++++++++++++++++ sym_ewram.txt | 2 +- 3 files changed, 84 insertions(+), 276 deletions(-) diff --git a/asm/shop.s b/asm/shop.s index adbd68a2f..b45ee4d62 100644 --- a/asm/shop.s +++ b/asm/shop.s @@ -6,275 +6,6 @@ .text - thumb_func_start sub_80B3AEC -sub_80B3AEC: @ 80B3AEC - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _080B3B5C @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _080B3B06 - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080B3B7A -_080B3B06: - ldr r4, _080B3B60 @ =gMartInfo - ldrb r1, [r4, 0x9] - adds r0, r1, 0 - movs r2, 0 - bl sub_80B39D0 - movs r0, 0x5 - bl PlaySE - ldrb r0, [r4, 0xB] - ldrb r1, [r4, 0x9] - adds r0, r1 - ldr r1, [r4, 0x4] - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - cmp r0, 0x4 - bne _080B3B74 - ldr r0, _080B3B64 @ =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r0 - movs r2, 0xA - ldrsh r0, [r1, r2] - cmp r0, 0x9 - ble _080B3B74 - movs r0, 0xC - movs r1, 0x1 - bl AddBagItem - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080B3B74 - ldr r1, _080B3B68 @ =gOtherText_FreePremierBall - ldr r2, _080B3B6C @ =sub_80B4378 - ldr r3, _080B3B70 @ =0x0000c3e1 - adds r0, r5, 0 - bl DisplayItemMessageOnField - b _080B3B7A - .align 2, 0 -_080B3B5C: .4byte gMain -_080B3B60: .4byte gMartInfo -_080B3B64: .4byte gTasks -_080B3B68: .4byte gOtherText_FreePremierBall -_080B3B6C: .4byte sub_80B4378 -_080B3B70: .4byte 0x0000c3e1 -_080B3B74: - adds r0, r5, 0 - bl sub_80B4378 -_080B3B7A: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80B3AEC - - thumb_func_start sub_80B3B80 -sub_80B3B80: @ 80B3B80 - push {r4,r5,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x26 - bl IncrementGameStat - ldr r5, _080B3BC0 @ =gSaveBlock1 + 0x490 - ldr r0, _080B3BC4 @ =gUnknown_020386A0 - ldr r1, [r0] - adds r0, r5, 0 - bl sub_80B79E0 - movs r0, 0x5F - bl PlaySE - ldr r0, [r5] - movs r1, 0 - movs r2, 0 - bl sub_80B7BEC - ldr r1, _080B3BC8 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _080B3BCC @ =sub_80B3AEC - str r1, [r0] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B3BC0: .4byte gSaveBlock1 + 0x490 -_080B3BC4: .4byte gUnknown_020386A0 -_080B3BC8: .4byte gTasks -_080B3BCC: .4byte sub_80B3AEC - thumb_func_end sub_80B3B80 - - thumb_func_start sub_80B3BD0 -sub_80B3BD0: @ 80B3BD0 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _080B3BF0 @ =gMartInfo - ldrb r1, [r0, 0x9] - adds r0, r1, 0 - movs r2, 0 - bl sub_80B39D0 - adds r0, r4, 0 - bl sub_80B4378 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B3BF0: .4byte gMartInfo - thumb_func_end sub_80B3BD0 - - thumb_func_start sub_80B3BF4 -sub_80B3BF4: @ 80B3BF4 - push {r4,r5,lr} - sub sp, 0x8 - lsls r0, 24 - lsrs r5, r0, 24 - movs r0, 0x7 - movs r1, 0x8 - movs r2, 0xD - movs r3, 0xD - bl MenuZeroFillWindowRect - ldr r0, _080B3C7C @ =gBGTilemapBuffers + 0x800 - movs r1, 0x4 - str r1, [sp] - movs r1, 0 - str r1, [sp, 0x4] - movs r1, 0x8 - movs r2, 0x9 - movs r3, 0x4 - bl sub_80A3FA0 - bl sub_80B379C - bl sub_80B3420 - ldr r0, _080B3C80 @ =gSaveBlock1 - movs r1, 0x92 - lsls r1, 3 - adds r0, r1 - ldr r0, [r0] - ldr r1, _080B3C84 @ =gUnknown_020386A0 - ldr r1, [r1] - bl IsEnoughMoney - lsls r0, 24 - cmp r0, 0 - beq _080B3D18 - ldr r4, _080B3C88 @ =gMartInfo - ldrb r0, [r4, 0xC] - cmp r0, 0 - bne _080B3CAC - ldrb r0, [r4, 0xB] - ldrb r1, [r4, 0x9] - adds r0, r1 - ldr r1, [r4, 0x4] - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - ldr r2, _080B3C8C @ =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r2 - ldrh r1, [r1, 0xA] - bl AddBagItem - lsls r0, 24 - cmp r0, 0 - beq _080B3C9C - ldr r1, _080B3C90 @ =gOtherText_HereYouGo - ldr r2, _080B3C94 @ =sub_80B3B80 - ldr r3, _080B3C98 @ =0x0000c3e1 - adds r0, r5, 0 - bl DisplayItemMessageOnField - adds r0, r5, 0 - bl sub_80B4470 - b _080B3D24 - .align 2, 0 -_080B3C7C: .4byte gBGTilemapBuffers + 0x800 -_080B3C80: .4byte gSaveBlock1 -_080B3C84: .4byte gUnknown_020386A0 -_080B3C88: .4byte gMartInfo -_080B3C8C: .4byte gTasks -_080B3C90: .4byte gOtherText_HereYouGo -_080B3C94: .4byte sub_80B3B80 -_080B3C98: .4byte 0x0000c3e1 -_080B3C9C: - ldr r1, _080B3CA4 @ =gOtherText_NoRoomFor - ldr r2, _080B3CA8 @ =sub_80B3BD0 - b _080B3CD8 - .align 2, 0 -_080B3CA4: .4byte gOtherText_NoRoomFor -_080B3CA8: .4byte sub_80B3BD0 -_080B3CAC: - ldrb r0, [r4, 0xB] - ldrb r1, [r4, 0x9] - adds r0, r1 - ldr r1, [r4, 0x4] - lsls r0, 1 - adds r0, r1 - ldrb r0, [r0] - bl IsThereStorageSpaceForDecoration - lsls r0, 24 - cmp r0, 0 - beq _080B3CF0 - ldrb r0, [r4, 0xC] - cmp r0, 0x1 - bne _080B3CD4 - ldr r1, _080B3CD0 @ =gOtherText_HereYouGo2 - b _080B3CD6 - .align 2, 0 -_080B3CD0: .4byte gOtherText_HereYouGo2 -_080B3CD4: - ldr r1, _080B3CE4 @ =gOtherText_HereYouGo3 -_080B3CD6: - ldr r2, _080B3CE8 @ =sub_80B3B80 -_080B3CD8: - ldr r3, _080B3CEC @ =0x0000c3e1 - adds r0, r5, 0 - bl DisplayItemMessageOnField - b _080B3D24 - .align 2, 0 -_080B3CE4: .4byte gOtherText_HereYouGo3 -_080B3CE8: .4byte sub_80B3B80 -_080B3CEC: .4byte 0x0000c3e1 -_080B3CF0: - ldr r4, _080B3D08 @ =gStringVar4 - ldr r1, _080B3D0C @ =gOtherText_SpaceForIsFull - adds r0, r4, 0 - bl StringExpandPlaceholders - ldr r2, _080B3D10 @ =sub_80B3BD0 - ldr r3, _080B3D14 @ =0x0000c3e1 - adds r0, r5, 0 - adds r1, r4, 0 - bl DisplayItemMessageOnField - b _080B3D24 - .align 2, 0 -_080B3D08: .4byte gStringVar4 -_080B3D0C: .4byte gOtherText_SpaceForIsFull -_080B3D10: .4byte sub_80B3BD0 -_080B3D14: .4byte 0x0000c3e1 -_080B3D18: - ldr r1, _080B3D2C @ =gOtherText_NotEnoughMoney - ldr r2, _080B3D30 @ =sub_80B3BD0 - ldr r3, _080B3D34 @ =0x0000c3e1 - adds r0, r5, 0 - bl DisplayItemMessageOnField -_080B3D24: - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B3D2C: .4byte gOtherText_NotEnoughMoney -_080B3D30: .4byte sub_80B3BD0 -_080B3D34: .4byte 0x0000c3e1 - thumb_func_end sub_80B3BF4 - thumb_func_start sub_80B3D38 sub_80B3D38: @ 80B3D38 push {r4,lr} @@ -371,7 +102,7 @@ _080B3DEE: ands r0, r1 cmp r0, 0 beq _080B3ED8 - ldr r0, _080B3EB0 @ =gUnknown_020386A0 + ldr r0, _080B3EB0 @ =gMartTotalCost mov r8, r0 ldrb r0, [r7, 0xB] ldrb r1, [r7, 0x9] @@ -449,7 +180,7 @@ _080B3DEE: .align 2, 0 _080B3EA8: .4byte gMartInfo _080B3EAC: .4byte gMain -_080B3EB0: .4byte gUnknown_020386A0 +_080B3EB0: .4byte gMartTotalCost _080B3EB4: .4byte gTasks _080B3EB8: .4byte gBGTilemapBuffers + 0x800 _080B3EBC: .4byte gStringVar1 @@ -861,7 +592,7 @@ _080B41CE: ldrb r0, [r6, 0xC] cmp r0, 0 bne _080B428C - ldr r5, _080B4270 @ =gUnknown_020386A0 + ldr r5, _080B4270 @ =gMartTotalCost ldrb r0, [r6, 0xB] ldrb r1, [r6, 0x9] adds r0, r1 @@ -910,7 +641,7 @@ _080B41CE: b _080B436C .align 2, 0 _080B426C: .4byte gMartInfo -_080B4270: .4byte gUnknown_020386A0 +_080B4270: .4byte gMartTotalCost _080B4274: .4byte gSaveBlock1 _080B4278: .4byte gStringVar1 _080B427C: .4byte gStringVar4 @@ -918,7 +649,7 @@ _080B4280: .4byte gOtherText_HowManyYouWant _080B4284: .4byte sub_80B3EFC _080B4288: .4byte 0x0000c3e1 _080B428C: - ldr r5, _080B42C8 @ =gUnknown_020386A0 + ldr r5, _080B42C8 @ =gMartTotalCost ldr r4, _080B42CC @ =gDecorations ldrb r0, [r6, 0xB] ldrb r1, [r6, 0x9] @@ -948,7 +679,7 @@ _080B42BA: bl DisplayItemMessageOnField b _080B436C .align 2, 0 -_080B42C8: .4byte gUnknown_020386A0 +_080B42C8: .4byte gMartTotalCost _080B42CC: .4byte gDecorations _080B42D0: .4byte gSaveBlock1 _080B42D4: .4byte gOtherText_NotEnoughMoney diff --git a/src/shop.c b/src/shop.c index 17cebfee6..6150d1b78 100644 --- a/src/shop.c +++ b/src/shop.c @@ -21,6 +21,13 @@ #include "fieldmap.h" #include "item.h" #include "decoration.h" +#include "items.h" +#include "songs.h" +#include "rom4.h" +#include "decoration_inventory.h" + +extern void sub_80B4378(u8); +extern void sub_80B4470(u8); enum { @@ -43,6 +50,8 @@ struct MartInfo extern struct MartInfo gMartInfo; extern struct MenuAction gUnknown_083CC6D0[]; +extern u32 gMartTotalCost; // the total cost of a purchase before checking out. + extern u8 ewram[]; extern u8 gUnknown_083CC6E8[]; @@ -623,3 +632,71 @@ void sub_80B3A70(void) sub_8072AB0(gOtherText_QuitShopping, 0x4, 0x68, 0x68, 0x30, MART_TYPE_0); } } + +void sub_80B3AEC(u8 taskId) +{ + if(gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) + { + sub_80B39D0(gMartInfo.cursor, gMartInfo.cursor, 0); // huh??? + PlaySE(SE_SELECT); + + if(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor] == ITEM_POKE_BALL && gTasks[taskId].data[1] >= 10 && AddBagItem(ITEM_PREMIER_BALL, 1) == TRUE) + DisplayItemMessageOnField(taskId, gOtherText_FreePremierBall, sub_80B4378, 0xC3E1); + else + sub_80B4378(taskId); + } +} + +void sub_80B3B80(u8 taskId) +{ + IncrementGameStat(0x26); + sub_80B79E0(&gSaveBlock1.money, gMartTotalCost); + PlaySE(0x5F); + sub_80B7BEC(gSaveBlock1.money, 0, 0); + gTasks[taskId].func = sub_80B3AEC; +} + +void sub_80B3BD0(u8 taskId) +{ + sub_80B39D0(gMartInfo.cursor, gMartInfo.cursor, 0); // same thing as above? + sub_80B4378(taskId); +} + +void sub_80B3BF4(u8 taskId) +{ + MenuZeroFillWindowRect(0x7, 0x8, 0xD, 0xD); + sub_80A3FA0(gBGTilemapBuffers[1], 8, 9, 4, 4, 0); + sub_80B379C(); + sub_80B3420(); + + if(IsEnoughMoney(gSaveBlock1.money, gMartTotalCost)) + { + if(gMartInfo.martType == MART_TYPE_0) + { + if(AddBagItem(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor], gTasks[taskId].data[1])) + { + DisplayItemMessageOnField(taskId, gOtherText_HereYouGo, sub_80B3B80, 0xC3E1); + sub_80B4470(taskId); + } + else + DisplayItemMessageOnField(taskId, gOtherText_NoRoomFor, sub_80B3BD0, 0xC3E1); + } + else // a normal mart is only type 0, so types 1 and 2 are decoration marts. + { + if(IsThereStorageSpaceForDecoration(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor])) + { + if(gMartInfo.martType == MART_TYPE_1) + DisplayItemMessageOnField(taskId, gOtherText_HereYouGo2, sub_80B3B80, 0xC3E1); + else + DisplayItemMessageOnField(taskId, gOtherText_HereYouGo3, sub_80B3B80, 0xC3E1); + } + else + { + StringExpandPlaceholders(gStringVar4, gOtherText_SpaceForIsFull); + DisplayItemMessageOnField(taskId, gStringVar4, sub_80B3BD0, 0xC3E1); + } + } + } + else + DisplayItemMessageOnField(taskId, gOtherText_NotEnoughMoney, sub_80B3BD0, 0xC3E1); +} diff --git a/sym_ewram.txt b/sym_ewram.txt index fd19dca9b..5cfd772be 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -525,7 +525,7 @@ gScriptContestRank: @ 203869E @ shop -gUnknown_020386A0: @ 20386A0 +gMartTotalCost: @ 20386A0 .space 0x4 gUnknown_020386A4: @ 20386A4 -- cgit v1.2.3 From 1b715eb7ba38ff408acf5e5e0a9ea88642f912bb Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Thu, 24 Aug 2017 16:52:49 -0500 Subject: more Mauville man labeling --- data-de/text/hipster.inc | 8 +- data-de/text/storyteller.inc | 218 ++++++++++++------------- data-de/text/trader.inc | 28 ++-- data/scripts/mauville_man.inc | 160 +++++++++---------- data/specials.inc | 16 +- data/text/hipster.inc | 8 +- data/text/storyteller.inc | 218 ++++++++++++------------- data/text/trader.inc | 28 ++-- include/global.h | 4 +- src/mauville_old_man.c | 360 +++++++++++++++++++++--------------------- src/trader.c | 28 ++-- 11 files changed, 533 insertions(+), 543 deletions(-) diff --git a/data-de/text/hipster.inc b/data-de/text/hipster.inc index c315b523d..8801b05fd 100644 --- a/data-de/text/hipster.inc +++ b/data-de/text/hipster.inc @@ -1,18 +1,18 @@ -MauvilleCity_PokemonCenter_1F_Text_1B0C5B:: @ 81B0C5B +gTextHipster_TheyCallMeTheHipster:: @ 81B0C5B .string "Hey, yo! Man nennt mich TRENDWIG. Ich\n" .string "zeige dir, was hip ist und abgeht.$" -MauvilleCity_PokemonCenter_1F_Text_1B0CA7:: @ 81B0CA7 +gTextHipster_TaughtYouAlready:: @ 81B0CA7 .string "Aber, hey, ich habe dir doch schon ge-\n" .string "zeigt, was hip ist und abgeht.\p" .string "Ich will das auch anderen mitteilen.$" -MauvilleCity_PokemonCenter_1F_Text_1B0D11:: @ 81B0D11 +gTextHipster_YouAlreadyKnowALot:: @ 81B0D11 .string "Aber, hey, ich habe dir doch schon ge-\n" .string "zeigt, was hip ist und abgeht.\p" .string "Ich habe nichts mehr in petto.$" -MauvilleCity_PokemonCenter_1F_Text_1B0D75:: @ 81B0D75 +gTextHipster_HaveYouHeardAbout:: @ 81B0D75 .string "Hast du schon von\n" .string "“{STR_VAR_1}” gehört?\p" .string "Was das heißt? Ähäm...\n" diff --git a/data-de/text/storyteller.inc b/data-de/text/storyteller.inc index ee2068766..5a07d73cc 100644 --- a/data-de/text/storyteller.inc +++ b/data-de/text/storyteller.inc @@ -1,4 +1,4 @@ -MauvilleCity_PokemonCenter_1F_Text_1AECC6:: @ 81AECC6 +gTextStoryteller_Introduction:: @ 81AECC6 .string "Ich bin der GESCHICHTENERZÄHLER.\n" .string "Ich erzähle dir die Geschichten von\l" .string "legendären TRAINERN.\p" @@ -53,13 +53,13 @@ MauvilleCity_PokemonCenter_1F_Text_1AEFA5:: @ 81AEFA5 .string "meine epischen Geschichten über\l" .string "legendäre TRAINER interessieren.$" -UnknownString_81AEFFC:: @ 81AEFFC +gTextStoryteller_Story1Title:: @ 81AEFFC .string "Der speicherfreudige TRAINER$" -UnknownString_81AF013:: @ 81AF013 +gTextStoryteller_Story1Action:: @ 81AF013 .string "Hast das Spiel gespeichert?$" -UnknownString_81AF022:: @ 81AF022 +gTextStoryteller_Story1Text:: @ 81AF022 .string "Dies ist die Geschichte eines TRAINERS\n" .string "namens {STR_VAR_3}.\p" .string "Dieser TRAINER hat das Spiel\n" @@ -67,13 +67,13 @@ UnknownString_81AF022:: @ 81AF022 .string "Einen vorsichtigeren TRAINER als\n" .string "{STR_VAR_3} wird man nicht finden!$" -UnknownString_81AF0A3:: @ 81AF0A3 +gTextStoryteller_Story2Title:: @ 81AF0A3 .string "Der TRAINER als Trendsetter$" -UnknownString_81AF0BB:: @ 81AF0BB +gTextStoryteller_Story2Action:: @ 81AF0BB .string "Hast Trends gesetzt?$" -UnknownString_81AF0CA:: @ 81AF0CA +gTextStoryteller_Story2Text:: @ 81AF0CA .string "Dies ist die Geschichte eines TRAINERS\n" .string "namens {STR_VAR_3}.\p" .string "Dieser TRAINER hat {STR_VAR_1}-mal\n" @@ -81,13 +81,13 @@ UnknownString_81AF0CA:: @ 81AF0CA .string "{STR_VAR_3} setzt den Trend für alle - in\n" .string "der ganzen HOENN-Region!$" -UnknownString_81AF149:: @ 81AF149 +gTextStoryteller_Story3Title:: @ 81AF149 .string "Der BEEREN pflanzende TRAINER$" -UnknownString_81AF164:: @ 81AF164 +gTextStoryteller_Story3Action:: @ 81AF164 .string "Hast BEEREN gepflanzt?$" -UnknownString_81AF174:: @ 81AF174 +gTextStoryteller_Story3Text:: @ 81AF174 .string "Dies ist die Geschichte eines TRAINERS\n" .string "namens {STR_VAR_3}.\p" .string "Dieser TRAINER hat {STR_VAR_1}-mal\n" @@ -95,13 +95,13 @@ UnknownString_81AF174:: @ 81AF174 .string "{STR_VAR_3} ist ein legendärer Lieb-\n" .string "haber von BEEREN!$" -UnknownString_81AF1E5:: @ 81AF1E5 +gTextStoryteller_Story4Title:: @ 81AF1E5 .string "Der RAD verrückte TRAINER$" -UnknownString_81AF1FD:: @ 81AF1FD +gTextStoryteller_Story4Action:: @ 81AF1FD .string "Hast RÄDER getauscht?$" -UnknownString_81AF20A:: @ 81AF20A +gTextStoryteller_Story4Text:: @ 81AF20A .string "Dies ist die Geschichte eines TRAINERS\n" .string "namens {STR_VAR_3}.\p" .string "Dieser TRAINER hat {STR_VAR_1}-mal\n" @@ -109,13 +109,13 @@ UnknownString_81AF20A:: @ 81AF20A .string "{STR_VAR_3} ist ein TRAINER, dessen\n" .string "Passion das RADfahren ist!$" -UnknownString_81AF281:: @ 81AF281 +gTextStoryteller_Story5Title:: @ 81AF281 .string "Der Interviews gebende TRAINER$" -UnknownString_81AF299:: @ 81AF299 +gTextStoryteller_Story5Action:: @ 81AF299 .string "Hast Interviews gegeben?$" -UnknownString_81AF2A9:: @ 81AF2A9 +gTextStoryteller_Story5Text:: @ 81AF2A9 .string "Dies ist die Geschichte eines TRAINERS\n" .string "namens {STR_VAR_3}.\p" .string "Dieser TRAINER wurde {STR_VAR_1}-mal\n" @@ -123,13 +123,13 @@ UnknownString_81AF2A9:: @ 81AF2A9 .string "{STR_VAR_3} ist ein TRAINER, der überall\n" .string "Aufmerksamkeit erregt!$" -UnknownString_81AF32C:: @ 81AF32C +gTextStoryteller_Story6Title:: @ 81AF32C .string "Der kampfliebende TRAINER$" -UnknownString_81AF345:: @ 81AF345 +gTextStoryteller_Story6Action:: @ 81AF345 .string "Hast oft gekämpft?$" -UnknownString_81AF34D:: @ 81AF34D +gTextStoryteller_Story6Text:: @ 81AF34D .string "Dies ist die Geschichte eines TRAINERS\n" .string "namens {STR_VAR_3}.\p" .string "Dieser TRAINER hat {STR_VAR_1}-mal\n" @@ -137,13 +137,13 @@ UnknownString_81AF34D:: @ 81AF34D .string "{STR_VAR_3} ist ein TRAINER, der zu\n" .string "einem Kampf nicht nein sagt!$" -UnknownString_81AF3D0:: @ 81AF3D0 +gTextStoryteller_Story7Title:: @ 81AF3D0 .string "Der POKéMON fangende TRAINER$" -UnknownString_81AF3ED:: @ 81AF3ED +gTextStoryteller_Story7Action:: @ 81AF3ED .string "Hast POKéMON gefangen?$" -UnknownString_81AF3FC:: @ 81AF3FC +gTextStoryteller_Story7Text:: @ 81AF3FC .string "Dies ist die Geschichte eines TRAINERS\n" .string "namens {STR_VAR_3}.\p" .string "Dieser TRAINER hat {STR_VAR_1}\n" @@ -151,13 +151,13 @@ UnknownString_81AF3FC:: @ 81AF3FC .string "{STR_VAR_3} ist ein legendärer Fänger\n" .string "von POKéMON!$" -UnknownString_81AF46D:: @ 81AF46D +gTextStoryteller_Story8Title:: @ 81AF46D .string "Der angelnde TRAINER$" -UnknownString_81AF481:: @ 81AF481 +gTextStoryteller_Story8Action:: @ 81AF481 .string "Hast POKéMON mit einer ANGEL gefangen?$" -UnknownString_81AF49B:: @ 81AF49B +gTextStoryteller_Story8Text:: @ 81AF49B .string "Dies ist die Geschichte eines TRAINERS\n" .string "namens {STR_VAR_3}.\p" .string "Dieser TRAINER hat {STR_VAR_1}\n" @@ -165,13 +165,13 @@ UnknownString_81AF49B:: @ 81AF49B .string "{STR_VAR_3} ist ein legendärer Angel-\n" .string "experte!$" -UnknownString_81AF511:: @ 81AF511 +gTextStoryteller_Story9Title:: @ 81AF511 .string "Der EIER wärmende TRAINER$" -UnknownString_81AF529:: @ 81AF529 +gTextStoryteller_Story9Action:: @ 81AF529 .string "Hast EIER ausgebrütet?$" -UnknownString_81AF536:: @ 81AF536 +gTextStoryteller_Story9Text:: @ 81AF536 .string "Dies ist die Geschichte eines TRAINERS\n" .string "namens {STR_VAR_3}.\p" .string "Es passierte {STR_VAR_1}-mal, dass der TRAINER\n" @@ -179,13 +179,13 @@ UnknownString_81AF536:: @ 81AF536 .string "{STR_VAR_3} ist ein legendärer Pfleger\n" .string "von EIERN!$" -UnknownString_81AF5A9:: @ 81AF5A9 +gTextStoryteller_Story10Title:: @ 81AF5A9 .string "Der TRAINER der Entwicklungen$" -UnknownString_81AF5BD:: @ 81AF5BD +gTextStoryteller_Story10Action:: @ 81AF5BD .string "Hast POKéMON sich entwickeln lassen?$" -UnknownString_81AF5CD:: @ 81AF5CD +gTextStoryteller_Story10Text:: @ 81AF5CD .string "Dies ist die Geschichte eines TRAINERS\n" .string "namens {STR_VAR_3}.\p" .string "Dieser TRAINER hat {STR_VAR_1}\n" @@ -193,13 +193,13 @@ UnknownString_81AF5CD:: @ 81AF5CD .string "{STR_VAR_3} ist der ultimative Ent-\n" .string "wickler von POKéMON!$" -UnknownString_81AF63F:: @ 81AF63F +gTextStoryteller_Story11Title:: @ 81AF63F .string "Der PKMN-CENTER liebende TRAINER$" -UnknownString_81AF661:: @ 81AF661 +gTextStoryteller_Story11Action:: @ 81AF661 .string "Gingst in ein POKéMON-CENTER?$" -UnknownString_81AF676:: @ 81AF676 +gTextStoryteller_Story11Text:: @ 81AF676 .string "Dies ist die Geschichte eines TRAINERS\n" .string "namens {STR_VAR_3}.\p" .string "Dieser TRAINER hat POKéMON\n" @@ -208,13 +208,13 @@ UnknownString_81AF676:: @ 81AF676 .string "Es gibt keinen größeren Fan der\n" .string "POKéMON-CENTER als {STR_VAR_3}!$" -UnknownString_81AF711:: @ 81AF711 +gTextStoryteller_Story12Title:: @ 81AF711 .string "Der gastfreundliche TRAINER$" -UnknownString_81AF726:: @ 81AF726 +gTextStoryteller_Story12Action:: @ 81AF726 .string "POKéMON haben sich bei dir erholt?$" -UnknownString_81AF73D:: @ 81AF73D +gTextStoryteller_Story12Text:: @ 81AF73D .string "Dies ist die Geschichte eines TRAINERS\n" .string "namens {STR_VAR_3}.\p" .string "Dieser TRAINER hat POKéMON\n" @@ -223,13 +223,13 @@ UnknownString_81AF73D:: @ 81AF73D .string "Kein TRAINER ist so gastfreundlich\n" .string "wie {STR_VAR_3}!$" -UnknownString_81AF7BF:: @ 81AF7BF +gTextStoryteller_Story13Title:: @ 81AF7BF .string "Der SAFARI liebende TRAINER$" -UnknownString_81AF7D9:: @ 81AF7D9 +gTextStoryteller_Story13Action:: @ 81AF7D9 .string "Bist in die SAFARI-ZONE gegangen?$" -UnknownString_81AF7F1:: @ 81AF7F1 +gTextStoryteller_Story13Text:: @ 81AF7F1 .string "Dies ist die Geschichte eines TRAINERS\n" .string "namens {STR_VAR_3}.\p" .string "Dieser TRAINER ist {STR_VAR_1}-mal in die\n" @@ -238,13 +238,13 @@ UnknownString_81AF7F1:: @ 81AF7F1 .string "wilde Seite in der SAFARI-ZONE zum\l" .string "Vorschein kommt!$" -UnknownString_81AF88A:: @ 81AF88A +gTextStoryteller_Story14Title:: @ 81AF88A .string "Der TRAINER als ZERSCHNEIDER$" -UnknownString_81AF8A1:: @ 81AF8A1 +gTextStoryteller_Story14Action:: @ 81AF8A1 .string "Hast ZERSCHNEIDER eingesetzt?$" -UnknownString_81AF8AA:: @ 81AF8AA +gTextStoryteller_Story14Text:: @ 81AF8AA .string "Dies ist die Geschichte eines TRAINERS\n" .string "namens {STR_VAR_3}.\p" .string "Dieser TRAINER hat {STR_VAR_1}-mal\n" @@ -252,13 +252,13 @@ UnknownString_81AF8AA:: @ 81AF8AA .string "{STR_VAR_3} ist ein TRAINER, der es\n" .string "liebt, etwas zu ZERSCHNEIDEN.$" -UnknownString_81AF91B:: @ 81AF91B +gTextStoryteller_Story15Title:: @ 81AF91B .string "Der TRAINER als ZERTRÜMMERER$" -UnknownString_81AF935:: @ 81AF935 +gTextStoryteller_Story15Action:: @ 81AF935 .string "Hast Felsen ZERTRÜMMERT?$" -UnknownString_81AF943:: @ 81AF943 +gTextStoryteller_Story15Text:: @ 81AF943 .string "Dies ist die Geschichte eines TRAINERS\n" .string "namens {STR_VAR_3}.\p" .string "Dieser TRAINER hat {STR_VAR_1}-mal\n" @@ -266,13 +266,13 @@ UnknownString_81AF943:: @ 81AF943 .string "{STR_VAR_3} ist ein TRAINER, der keinen\n" .string "Felsen unbeschädigt lassen kann.$" -UnknownString_81AF9C8:: @ 81AF9C8 +gTextStoryteller_Story16Title:: @ 81AF9C8 .string "Der Umzüge liebende TRAINER$" -UnknownString_81AF9E0:: @ 81AF9E0 +gTextStoryteller_Story16Action:: @ 81AF9E0 .string "Bist du mit der GEHEIMBASIS umgezogen?$" -UnknownString_81AF9F6:: @ 81AF9F6 +gTextStoryteller_Story16Text:: @ 81AF9F6 .string "Dies ist die Geschichte eines TRAINERS\n" .string "namens {STR_VAR_3}.\p" .string "Dieser TRAINER ist {STR_VAR_1}-mal mit\n" @@ -280,13 +280,13 @@ UnknownString_81AF9F6:: @ 81AF9F6 .string "{STR_VAR_3} ist ein TRAINER, der es\n" .string "liebt, sich ein neues Haus einzurichten.$" -UnknownString_81AFA79:: @ 81AFA79 +gTextStoryteller_Story17Title:: @ 81AFA79 .string "Der PLATSCHER des TRAINERS$" -UnknownString_81AFA92:: @ 81AFA92 +gTextStoryteller_Story17Action:: @ 81AFA92 .string "Hast PLATSCHER eingesetzt?$" -UnknownString_81AFA9E:: @ 81AFA9E +gTextStoryteller_Story17Text:: @ 81AFA9E .string "Dies ist die Geschichte eines TRAINERS\n" .string "namens {STR_VAR_3}.\p" .string "Dieser TRAINER hat {STR_VAR_1}-mal\n" @@ -294,13 +294,13 @@ UnknownString_81AFA9E:: @ 81AFA9E .string "{STR_VAR_3} ist ein TRAINER, der es\n" .string "liebt, zu PLATSCHEN.$" -UnknownString_81AFB17:: @ 81AFB17 +gTextStoryteller_Story18Title:: @ 81AFB17 .string "Der verbissene TRAINER$" -UnknownString_81AFB2D:: @ 81AFB2D +gTextStoryteller_Story18Action:: @ 81AFB2D .string "Hast VERZWEIFLER angewendet?$" -UnknownString_81AFB48:: @ 81AFB48 +gTextStoryteller_Story18Text:: @ 81AFB48 .string "Dies ist die Geschichte eines TRAINERS\n" .string "namens {STR_VAR_3}.\p" .string "Dieser TRAINER hat sich {STR_VAR_1}-mal\n" @@ -308,13 +308,13 @@ UnknownString_81AFB48:: @ 81AFB48 .string "{STR_VAR_3}... Ein verbissener TRAINER,\n" .string "der auch in der Not nicht aufgibt.$" -UnknownString_81AFBD8:: @ 81AFBD8 +gTextStoryteller_Story19Title:: @ 81AFBD8 .string "Der König der EINARMIGEN BANDITEN$" -UnknownString_81AFBE7:: @ 81AFBE7 +gTextStoryteller_Story19Action:: @ 81AFBE7 .string "Hast den EINARMIGEN BANDITEN besiegt?$" -UnknownString_81AFC04:: @ 81AFC04 +gTextStoryteller_Story19Text:: @ 81AFC04 .string "Dies ist die Geschichte eines TRAINERS\n" .string "namens {STR_VAR_3}.\p" .string "Dieser TRAINER hat {STR_VAR_1}-mal\n" @@ -322,13 +322,13 @@ UnknownString_81AFC04:: @ 81AFC04 .string "{STR_VAR_3}... Ein TRAINER, der am\n" .string "EINARMIGEN BANDITEN Glück hat.$" -UnknownString_81AFC8A:: @ 81AFC8A +gTextStoryteller_Story20Title:: @ 81AFC8A .string "Der König des ROULETTES$" -UnknownString_81AFC9D:: @ 81AFC9D +gTextStoryteller_Story20Action:: @ 81AFC9D .string "Hast in Folge beim ROULETTE gewonnen,$" -UnknownString_81AFCBE:: @ 81AFCBE +gTextStoryteller_Story20Text:: @ 81AFCBE .string "Dies ist die Geschichte eines TRAINERS\n" .string "namens {STR_VAR_3}.\p" .string "Dieser TRAINER hat {STR_VAR_1}-mal in Folge\n" @@ -336,13 +336,13 @@ UnknownString_81AFCBE:: @ 81AFCBE .string "{STR_VAR_3}... Ein TRAINER, dem die Kugel\n" .string "beim ROULETTE gehorcht.$" -UnknownString_81AFD44:: @ 81AFD44 +gTextStoryteller_Story21Title:: @ 81AFD44 .string "Der Herausforderer im DUELLTURM$" -UnknownString_81AFD60:: @ 81AFD60 +gTextStoryteller_Story21Action:: @ 81AFD60 .string "Hast Gegner im DUELLTURM gefordert?$" -UnknownString_81AFD80:: @ 81AFD80 +gTextStoryteller_Story21Text:: @ 81AFD80 .string "Dies ist die Geschichte eines TRAINERS\n" .string "namens {STR_VAR_3}.\p" .string "Dieser TRAINER hat {STR_VAR_1}-mal Gegner\n" @@ -350,13 +350,13 @@ UnknownString_81AFD80:: @ 81AFD80 .string "{STR_VAR_3}... Ein TRAINER, der im DUELL-\n" .string "TURM nach Perfektion strebt.$" -UnknownString_81AFE1D:: @ 81AFE1D +gTextStoryteller_Story22Title:: @ 81AFE1D .string "Der mixende TRAINER$" -UnknownString_81AFE36:: @ 81AFE36 +gTextStoryteller_Story22Action:: @ 81AFE36 .string "Hast {POKEBLOCK} hergestellt?$" -UnknownString_81AFE42:: @ 81AFE42 +gTextStoryteller_Story22Text:: @ 81AFE42 .string "Dies ist die Geschichte eines TRAINERS\n" .string "namens {STR_VAR_3}.\p" .string "Dieser TRAINER hat {STR_VAR_1}-mal\n" @@ -364,13 +364,13 @@ UnknownString_81AFE42:: @ 81AFE42 .string "Niemand bedient den BEERENMIXER\n" .string "besser als {STR_VAR_3}.$" -UnknownString_81AFEC2:: @ 81AFEC2 +gTextStoryteller_Story23Title:: @ 81AFEC2 .string "Der Fan der WETTBEWERBE$" -UnknownString_81AFEDD:: @ 81AFEDD +gTextStoryteller_Story23Action:: @ 81AFEDD .string "Hast an WETTBEWERBEN teilgenommen?$" -UnknownString_81AFEEE:: @ 81AFEEE +gTextStoryteller_Story23Text:: @ 81AFEEE .string "Dies ist die Geschichte eines TRAINERS\n" .string "namens {STR_VAR_3}.\p" .string "Dieser TRAINER hat {STR_VAR_1}-mal\n" @@ -378,13 +378,13 @@ UnknownString_81AFEEE:: @ 81AFEEE .string "{STR_VAR_3} liebt es, anderen seine\n" .string "POKéMON zu zeigen.$" -UnknownString_81AFF68:: @ 81AFF68 +gTextStoryteller_Story24Title:: @ 81AFF68 .string "Der Meister der WETTBEWERBE$" -UnknownString_81AFF7B:: @ 81AFF7B +gTextStoryteller_Story24Action:: @ 81AFF7B .string "Hast WETTBEWERBE gewonnen?$" -UnknownString_81AFF88:: @ 81AFF88 +gTextStoryteller_Story24Text:: @ 81AFF88 .string "Dies ist die Geschichte eines TRAINERS\n" .string "namens {STR_VAR_3}.\p" .string "Dieser TRAINER hat {STR_VAR_1}-mal\n" @@ -392,26 +392,26 @@ UnknownString_81AFF88:: @ 81AFF88 .string "{STR_VAR_3} ist ein unvergleichlicher\n" .string "Meister der WETTBEWERBE.$" -UnknownString_81AFFFB:: @ 81AFFFB +gTextStoryteller_Story25Title:: @ 81AFFFB .string "Der glückliche Einkäufer$" -UnknownString_81B000D:: @ 81B000D +gTextStoryteller_Story25Action:: @ 81B000D .string "Bist einkaufen gegangen?$" -UnknownString_81B0015:: @ 81B0015 +gTextStoryteller_Story25Text:: @ 81B0015 .string "Dies ist die Geschichte eines TRAINERS\n" .string "namens {STR_VAR_3}.\p" .string "Dieser TRAINER hat {STR_VAR_1}-mal\n" .string "in einem Geschäft Items gekauft!\p" .string "{STR_VAR_3} ein geborener Einkäufer.$" -UnknownString_81B009D:: @ 81B009D +gTextStoryteller_Story26Title:: @ 81B009D .string "Der TRAINER, der Items findet$" -UnknownString_81B00B6:: @ 81B00B6 +gTextStoryteller_Story26Action:: @ 81B00B6 .string "Hast den DETEKTOR eingesetzt?$" -UnknownString_81B00C9:: @ 81B00C9 +gTextStoryteller_Story26Text:: @ 81B00C9 .string "Dies ist die Geschichte eines TRAINERS\n" .string "namens {STR_VAR_3}.\p" .string "Dieser TRAINER hat {STR_VAR_1}-mal\n" @@ -419,13 +419,13 @@ UnknownString_81B00C9:: @ 81B00C9 .string "{STR_VAR_3} liebt es, den Boden nach\n" .string "verborgenen Items abzusuchen.$" -UnknownString_81B014D:: @ 81B014D +gTextStoryteller_Story27Title:: @ 81B014D .string "Der regennasse TRAINER$" -UnknownString_81B0165:: @ 81B0165 +gTextStoryteller_Story27Action:: @ 81B0165 .string "Wurdest nass geregnet?$" -UnknownString_81B0173:: @ 81B0173 +gTextStoryteller_Story27Text:: @ 81B0173 .string "Dies ist die Geschichte eines TRAINERS\n" .string "namens {STR_VAR_3}.\p" .string "Dieser TRAINER wurde {STR_VAR_1}-mal\n" @@ -433,13 +433,13 @@ UnknownString_81B0173:: @ 81B0173 .string "Das Charisma von {STR_VAR_3} zieht\n" .string "sogar den Regen an.$" -UnknownString_81B01E9:: @ 81B01E9 +gTextStoryteller_Story28Title:: @ 81B01E9 .string "Der passionierte POKéDEX-Leser$" -UnknownString_81B0201:: @ 81B0201 +gTextStoryteller_Story28Action:: @ 81B0201 .string "Hast im POKéDEX nachgeschlagen?$" -UnknownString_81B0213:: @ 81B0213 +gTextStoryteller_Story28Text:: @ 81B0213 .string "Dies ist die Geschichte eines TRAINERS\n" .string "namens {STR_VAR_3}.\p" .string "Dieser TRAINER hat {STR_VAR_1}-mal\n" @@ -447,13 +447,13 @@ UnknownString_81B0213:: @ 81B0213 .string "{STR_VAR_3} liebt es, alles über\n" .string "POKéMON im POKéDEX nachzulesen.$" -UnknownString_81B0290:: @ 81B0290 +gTextStoryteller_Story29Title:: @ 81B0290 .string "Der Sammler der BÄNDER$" -UnknownString_81B02A5:: @ 81B02A5 +gTextStoryteller_Story29Action:: @ 81B02A5 .string "Hast BÄNDER erhalten?$" -UnknownString_81B02B6:: @ 81B02B6 +gTextStoryteller_Story29Text:: @ 81B02B6 .string "Dies ist die Geschichte eines TRAINERS\n" .string "namens {STR_VAR_3}.\p" .string "Dieser TRAINER hat {STR_VAR_1}\n" @@ -461,13 +461,13 @@ UnknownString_81B02B6:: @ 81B02B6 .string "{STR_VAR_3} ist ein TRAINER, der es\n" .string "liebt, BÄNDER zu sammeln.$" -UnknownString_81B0337:: @ 81B0337 +gTextStoryteller_Story30Title:: @ 81B0337 .string "Der springende TRAINER$" -UnknownString_81B0351:: @ 81B0351 +gTextStoryteller_Story30Action:: @ 81B0351 .string "Bist Absätze heruntergesprungen?$" -UnknownString_81B0364:: @ 81B0364 +gTextStoryteller_Story30Text:: @ 81B0364 .string "Dies ist die Geschichte eines TRAINERS\n" .string "namens {STR_VAR_3}.\p" .string "Dieser TRAINER ist {STR_VAR_1}-mal\n" @@ -476,26 +476,26 @@ UnknownString_81B0364:: @ 81B0364 .string "TRAINER {STR_VAR_3} einfach hinab-\l" .string "springen.$" -UnknownString_81B03E9:: @ 81B03E9 +gTextStoryteller_Story31Title:: @ 81B03E9 .string "Der legendäre Fernsehzuschauer$" -UnknownString_81B0401:: @ 81B0401 +gTextStoryteller_Story31Action:: @ 81B0401 .string "Hast ferngeschaut?$" -UnknownString_81B040C:: @ 81B040C +gTextStoryteller_Story31Text:: @ 81B040C .string "Dies ist die Geschichte eines TRAINERS\n" .string "namens {STR_VAR_3}.\p" .string "Dieser TRAINER hat {STR_VAR_1}-mal\n" .string "Fernsehen geschaut!\p" .string "{STR_VAR_3} liebt es, fernzusehen.$" -UnknownString_81B046E:: @ 81B046E +gTextStoryteller_Story32Title:: @ 81B046E .string "Der zeitbewusste TRAINER$" -UnknownString_81B0489:: @ 81B0489 +gTextStoryteller_Story32Action:: @ 81B0489 .string "Hast nach der Uhrzeit gesehen?$" -UnknownString_81B049A:: @ 81B049A +gTextStoryteller_Story32Text:: @ 81B049A .string "Dies ist die Geschichte eines TRAINERS\n" .string "namens {STR_VAR_3}.\p" .string "Dieser TRAINER hat {STR_VAR_1}-mal\n" @@ -503,13 +503,13 @@ UnknownString_81B049A:: @ 81B049A .string "{STR_VAR_3} ist ein pünktlicher\n" .string "TRAINER, der sich der Zeit bewusst ist.$" -UnknownString_81B0523:: @ 81B0523 +gTextStoryteller_Story33Title:: @ 81B0523 .string "Der Zauberer der POKéMON-LOTTERIE$" -UnknownString_81B053E:: @ 81B053E +gTextStoryteller_Story33Action:: @ 81B053E .string "Hast in der LOTTERIE gewonnen?$" -UnknownString_81B0554:: @ 81B0554 +gTextStoryteller_Story33Text:: @ 81B0554 .string "Dies ist die Geschichte eines TRAINERS\n" .string "namens {STR_VAR_3}.\p" .string "Dieser TRAINER hat {STR_VAR_1}-mal\n" @@ -517,13 +517,13 @@ UnknownString_81B0554:: @ 81B0554 .string "TRAINER {STR_VAR_3} hat viele Freunde,\n" .string "die mit ihm POKéMON tauschen.$" -UnknownString_81B05D8:: @ 81B05D8 +gTextStoryteller_Story34Title:: @ 81B05D8 .string "Der TRAINER und die PENSION$" -UnknownString_81B05F3:: @ 81B05F3 +gTextStoryteller_Story34Action:: @ 81B05F3 .string "Hast POKéMON in die PENSION gebracht?$" -UnknownString_81B0610:: @ 81B0610 +gTextStoryteller_Story34Text:: @ 81B0610 .string "Dies ist die Geschichte eines TRAINERS\n" .string "namens {STR_VAR_3}.\p" .string "Dieser TRAINER hat {STR_VAR_1}-mal\n" @@ -532,13 +532,13 @@ UnknownString_81B0610:: @ 81B0610 .string "alles für die Entwicklung seiner\l" .string "POKéMON tut.$" -UnknownString_81B06A9:: @ 81B06A9 +gTextStoryteller_Story35Title:: @ 81B06A9 .string "Der SEILBAHN verrückte TRAINER$" -UnknownString_81B06C6:: @ 81B06C6 +gTextStoryteller_Story35Action:: @ 81B06C6 .string "Bist mit der SEILBAHN gefahren?$" -UnknownString_81B06D9:: @ 81B06D9 +gTextStoryteller_Story35Text:: @ 81B06D9 .string "Dies ist die Geschichte eines TRAINERS\n" .string "namens {STR_VAR_3}.\p" .string "Dieser TRAINER ist {STR_VAR_1}-mal\n" @@ -547,13 +547,13 @@ UnknownString_81B06D9:: @ 81B06D9 .string "TRAINER, der ständig rauf und runter\l" .string "fährt.$" -UnknownString_81B0763:: @ 81B0763 +gTextStoryteller_Story36Title:: @ 81B0763 .string "Der Liebhaber der Heißen Quellen$" -UnknownString_81B0781:: @ 81B0781 +gTextStoryteller_Story36Action:: @ 81B0781 .string "Hast in den Heißen Quellen gebadet?$" -UnknownString_81B0797:: @ 81B0797 +gTextStoryteller_Story36Text:: @ 81B0797 .string "Dies ist die Geschichte eines TRAINERS\n" .string "namens {STR_VAR_3}.\p" .string "Dieser TRAINER hat {STR_VAR_1}-mal\n" diff --git a/data-de/text/trader.inc b/data-de/text/trader.inc index adf5d3aeb..dae453e8b 100644 --- a/data-de/text/trader.inc +++ b/data-de/text/trader.inc @@ -1,58 +1,58 @@ -MauvilleCity_PokemonCenter_1F_Text_1AE88F:: @ 81AE88F +gTextTrader_Introduction:: @ 81AE88F .string "Hallo! Ich bin der HÄNDLER. Möchtest\n" .string "du Dekorationen mit mir tauschen?$" -MauvilleCity_PokemonCenter_1F_Text_1AE8C6:: @ 81AE8C6 +gTextTrader_FeelUnwanted1:: @ 81AE8C6 .string "Oh...\n" .string "Ich fühle mich überflüssig...$" -MauvilleCity_PokemonCenter_1F_Text_1AE8DF:: @ 81AE8DF +gTextTrader_TradedAlready:: @ 81AE8DF .string "Aber wir beide haben doch bereits\n" .string "Dekorationen ausgetauscht.$" -MauvilleCity_PokemonCenter_1F_Text_1AE910:: @ 81AE910 +gTextTrader_MenuPrompt:: @ 81AE910 .string "Wenn du etwas Dekoratives siehst, das\n" .string "du haben möchtest, lass es mich wissen.$" -MauvilleCity_PokemonCenter_1F_Text_1AE950:: @ 81AE950 +gTextTrader_DontWantAnything:: @ 81AE950 .string "Du möchtest nichts haben?\n" .string "Ich fühle mich so überflüssig...$" -MauvilleCity_PokemonCenter_1F_Text_1AE97C:: @ 81AE97C +gTextTrader_ItemOnceBelongedTo:: @ 81AE97C .string "Das dekorative Item gehörte einst\n" .string "{STR_VAR_1}.\p" .string "Möchtest du es haben?$" -MauvilleCity_PokemonCenter_1F_Text_1AE9B6:: @ 81AE9B6 +gTextTrader_YouDontHaveDecorations:: @ 81AE9B6 .string "Äh... Warte eine Sekunde. Du hast über-\n" .string "haupt kein dekoratives Item!$" -MauvilleCity_PokemonCenter_1F_Text_1AE9F8:: @ 81AE9F8 +gTextTrader_PickDecorationYoullTrade:: @ 81AE9F8 .string "Okay, wähle die Dekoration aus, die du\n" .string "mit mir tauschen willst.$" -MauvilleCity_PokemonCenter_1F_Text_1AEA2B:: @ 81AEA2B +gTextTrader_FeelUnwanted2:: @ 81AEA2B .string "Du willst nicht mit mir tauschen?\n" .string "Ich fühle mich überflüssig...$" -MauvilleCity_PokemonCenter_1F_Text_1AEA57:: @ 81AEA57 +gTextTrader_NoRoomForThis:: @ 81AEA57 .string "Du hast keinen Platz mehr für eine/n\n" .string "{STR_VAR_2}.$" -MauvilleCity_PokemonCenter_1F_Text_1AEA9B:: @ 81AEA9B +gTextTrader_SoWellTrade:: @ 81AEA9B .string "Okay, dann lass uns tauschen:\n" .string "{STR_VAR_3} gegen\l" .string "{STR_VAR_2}!$" -MauvilleCity_PokemonCenter_1F_Text_1AEAC3:: @ 81AEAC3 +gTextTrader_InUseYouCantTradeIt:: @ 81AEAC3 .string "Dieses Dekorationsstück ist im Ge-\n" .string "brauch. Das kannst du nicht tauschen.$" -MauvilleCity_PokemonCenter_1F_Text_1AEAFB:: @ 81AEAFB +gTextTrader_ThenWellTrade:: @ 81AEAFB .string "Dann lass uns tauschen! Ich werde meine\n" .string "Dekorationen auf deinen PC senden.$" -MauvilleCity_PokemonCenter_1F_Text_1AEB31:: @ 81AEB31 +gTextTrader_ICantTradeThatOneAway:: @ 81AEB31 .string "Huups! Tut mir Leid!\n" .string "Das ist ein ganz seltenes Stück!\l" .string "Das kann ich nicht tauschen!\p" diff --git a/data/scripts/mauville_man.inc b/data/scripts/mauville_man.inc index f406d33fe..780017442 100644 --- a/data/scripts/mauville_man.inc +++ b/data/scripts/mauville_man.inc @@ -32,11 +32,13 @@ speak_to_bard: end yes_hear_song: setvar 0x8004, 0 + @ Give the player ear rape special ScrSpecial_PlayBardSong pause 60 special ScrSpecial_HasBardSongBeenChanged compare RESULT, FALSE - jumpeq prompt_write_lyrics @ Prompt new lyrics only if song hasn't been changed + @ Prompt new lyrics only if song hasn't been changed + jumpeq prompt_write_lyrics msgbox gTextBard_OhWhatAMovingSong, 4 release end @@ -60,6 +62,7 @@ write_lyrics: jumpeq dont_write_lyrics msgbox gTextBard_ThankYouKindly, 4 setvar 0x8004, 1 + @ Give the player ear rape again special ScrSpecial_PlayBardSong pause 60 msgbox gTextBard_WasThatHowYouWanted, MSGBOX_YESNO @@ -78,28 +81,26 @@ dont_write_lyrics: @ Hipster @------------------------------------------------------------------------------- -speak_to_hipster:: @ 81AE845 +speak_to_hipster: lock faceplayer setflag 2054 - msgbox MauvilleCity_PokemonCenter_1F_Text_1B0C5B, 4 - special sub_80F7C70 - compare RESULT, 0 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AE86A - msgbox MauvilleCity_PokemonCenter_1F_Text_1B0CA7, 4 + msgbox gTextHipster_TheyCallMeTheHipster, 4 + special ScrSpecial_GetHipsterSpokenFlag + compare RESULT, FALSE + jumpeq hipster_first_time + msgbox gTextHipster_TaughtYouAlready, 4 release end - -MauvilleCity_PokemonCenter_1F_EventScript_1AE86A:: @ 81AE86A - special sub_80F7C90 - compare RESULT, 1 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AE882 - msgbox MauvilleCity_PokemonCenter_1F_Text_1B0D11, 4 +hipster_first_time: + special ScrSpecial_HipsterTeachWord + compare RESULT, TRUE @ TRUE if player learned a new word + jumpeq teach_new_word + msgbox gTextHipster_YouAlreadyKnowALot, 4 release end - -MauvilleCity_PokemonCenter_1F_EventScript_1AE882:: @ 81AE882 - msgbox MauvilleCity_PokemonCenter_1F_Text_1B0D75, 4 +teach_new_word: + msgbox gTextHipster_HaveYouHeardAbout, 4 special ScrSpecial_SetHipsterSpokenFlag release end @@ -110,93 +111,82 @@ MauvilleCity_PokemonCenter_1F_EventScript_1AE882:: @ 81AE882 .include "data/text/trader.inc" -speak_to_trader:: @ 81AEBAB +speak_to_trader: lock faceplayer - msgbox MauvilleCity_PokemonCenter_1F_Text_1AE88F, 5 - compare RESULT, 0 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AEBDA - special sub_8109C44 - compare RESULT, 1 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AEBE3 - message MauvilleCity_PokemonCenter_1F_Text_1AE910 + msgbox gTextTrader_Introduction, MSGBOX_YESNO + compare RESULT, NO + jumpeq dont_want_to_trade + special ScrSpecial_GetTraderTradedFlag + compare RESULT, TRUE + jumpeq already_traded + message gTextTrader_MenuPrompt waittext - jump MauvilleCity_PokemonCenter_1F_EventScript_1AEBEC + jump do_trader_menu_get end - -MauvilleCity_PokemonCenter_1F_EventScript_1AEBDA:: @ 81AEBDA - msgbox MauvilleCity_PokemonCenter_1F_Text_1AE8C6, 2 +dont_want_to_trade: + msgbox gTextTrader_FeelUnwanted1, 2 end - -MauvilleCity_PokemonCenter_1F_EventScript_1AEBE3:: @ 81AEBE3 - msgbox MauvilleCity_PokemonCenter_1F_Text_1AE8DF, 2 +already_traded: + msgbox gTextTrader_TradedAlready, 2 end - -MauvilleCity_PokemonCenter_1F_EventScript_1AEBEC:: @ 81AEBEC - special sub_8109E34 +do_trader_menu_get: + special ScrSpecial_TraderMenuGetDecoration waitstate compare 0x8004, 0 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AEC2D + jumpeq cancelled_get_menu compare 0x8004, 65535 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AEC36 - msgbox MauvilleCity_PokemonCenter_1F_Text_1AE97C, 5 - compare RESULT, 0 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AEC42 - special sub_8109C58 - compare RESULT, 1 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AEC4E - jump MauvilleCity_PokemonCenter_1F_EventScript_1AEC57 + jumpeq rare_item_cant_trade_away + msgbox gTextTrader_ItemOnceBelongedTo, MSGBOX_YESNO + compare RESULT, NO + jumpeq dont_want_item + special ScrSpecial_DoesPlayerHaveNoDecorations + compare RESULT, TRUE + jumpeq player_has_no_decorations + jump do_trader_menu_give end - -MauvilleCity_PokemonCenter_1F_EventScript_1AEC2D:: @ 81AEC2D - msgbox MauvilleCity_PokemonCenter_1F_Text_1AE950, 2 +cancelled_get_menu:: @ 81AEC2D + msgbox gTextTrader_DontWantAnything, 2 end - -MauvilleCity_PokemonCenter_1F_EventScript_1AEC36:: @ 81AEC36 - message MauvilleCity_PokemonCenter_1F_Text_1AEB31 +rare_item_cant_trade_away:: @ 81AEC36 + message gTextTrader_ICantTradeThatOneAway waittext - jump MauvilleCity_PokemonCenter_1F_EventScript_1AEBEC + jump do_trader_menu_get end - -MauvilleCity_PokemonCenter_1F_EventScript_1AEC42:: @ 81AEC42 - message MauvilleCity_PokemonCenter_1F_Text_1AE910 +dont_want_item: + message gTextTrader_MenuPrompt waittext - jump MauvilleCity_PokemonCenter_1F_EventScript_1AEBEC + jump do_trader_menu_get end - -MauvilleCity_PokemonCenter_1F_EventScript_1AEC4E:: @ 81AEC4E - msgbox MauvilleCity_PokemonCenter_1F_Text_1AE9B6, 2 +player_has_no_decorations:: @ 81AEC4E + msgbox gTextTrader_YouDontHaveDecorations, 2 end - -MauvilleCity_PokemonCenter_1F_EventScript_1AEC57:: @ 81AEC57 - msgbox MauvilleCity_PokemonCenter_1F_Text_1AE9F8, 4 - special sub_8109CF0 +do_trader_menu_give:: @ 81AEC57 + msgbox gTextTrader_PickDecorationYoullTrade, 4 + special ScrSpecial_TraderMenuGiveDecoration waitstate compare 0x8006, 0 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AECA6 + jumpeq cancelled_give_menu compare 0x8006, 65535 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AECAF - special sub_8109C90 + jumpeq decoration_is_in_use + special ScrSpecial_IsDecorationFull compare RESULT, 1 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AECBD - msgbox MauvilleCity_PokemonCenter_1F_Text_1AEA9B, 5 - compare RESULT, 0 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AEC57 - special sub_8109DE0 - msgbox MauvilleCity_PokemonCenter_1F_Text_1AEAFB, 2 + jumpeq decorations_full + msgbox gTextTrader_SoWellTrade, MSGBOX_YESNO + compare RESULT, NO + jumpeq do_trader_menu_give + special ScrSpecial_TraderDoDecorationTrade + msgbox gTextTrader_ThenWellTrade, 2 end - -MauvilleCity_PokemonCenter_1F_EventScript_1AECA6:: @ 81AECA6 - msgbox MauvilleCity_PokemonCenter_1F_Text_1AEA2B, 2 +cancelled_give_menu:: @ 81AECA6 + msgbox gTextTrader_FeelUnwanted2, 2 end - -MauvilleCity_PokemonCenter_1F_EventScript_1AECAF:: @ 81AECAF - msgbox MauvilleCity_PokemonCenter_1F_Text_1AEAC3, 4 - jump MauvilleCity_PokemonCenter_1F_EventScript_1AEC57 +decoration_is_in_use:: @ 81AECAF + msgbox gTextTrader_InUseYouCantTradeIt, 4 + jump do_trader_menu_give end - -MauvilleCity_PokemonCenter_1F_EventScript_1AECBD:: @ 81AECBD - msgbox MauvilleCity_PokemonCenter_1F_Text_1AEA57, 2 +decorations_full:: @ 81AECBD + msgbox gTextTrader_NoRoomForThis, 2 end @------------------------------------------------------------------------------- @@ -212,8 +202,8 @@ speak_to_storyteller:: @ 81B0816 setvar 0x800b, 0 lock faceplayer - msgbox MauvilleCity_PokemonCenter_1F_Text_1AECC6, 5 - compare RESULT, 0 + msgbox gTextStoryteller_Introduction, MSGBOX_YESNO + compare RESULT, NO jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0914 specialval RESULT, sub_80F889C compare RESULT, 0 @@ -242,7 +232,7 @@ MauvilleCity_PokemonCenter_1F_EventScript_1B0883:: @ 81B0883 MauvilleCity_PokemonCenter_1F_EventScript_1B0893:: @ 81B0893 msgbox MauvilleCity_PokemonCenter_1F_Text_1AEE50, 4 - msgbox MauvilleCity_PokemonCenter_1F_Text_1AEF0A, 5 + msgbox MauvilleCity_PokemonCenter_1F_Text_1AEF0A, MSGBOX_YESNO compare RESULT, 1 jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B084F @@ -259,7 +249,7 @@ MauvilleCity_PokemonCenter_1F_EventScript_1B08D3:: @ 81B08D3 msgbox MauvilleCity_PokemonCenter_1F_Text_1AED70, 4 MauvilleCity_PokemonCenter_1F_EventScript_1B08DB:: @ 81B08DB - msgbox MauvilleCity_PokemonCenter_1F_Text_1AEEB4, 5 + msgbox MauvilleCity_PokemonCenter_1F_Text_1AEEB4, MSGBOX_YESNO compare RESULT, 0 jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0914 specialval RESULT, sub_80F88FC @@ -297,7 +287,7 @@ MauvilleCity_PokemonCenter_1F_EventScript_1B091F:: @ 81B091F MauvilleCity_PokemonCenter_1F_EventScript_1B09EB:: @ 81B09EB lock faceplayer - msgbox MauvilleCity_PokemonCenter_1F_Text_1B092A, 5 + msgbox MauvilleCity_PokemonCenter_1F_Text_1B092A, MSGBOX_YESNO compare RESULT, 1 jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0A0C compare RESULT, 0 diff --git a/data/specials.inc b/data/specials.inc index 06ba22a23..cff97f455 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -107,9 +107,9 @@ gSpecials:: def_special ScrSpecial_GetCurrentMauvilleMan def_special ScrSpecial_HasBardSongBeenChanged def_special ScrSpecial_SaveBardSongLyrics - def_special sub_80F7C70 + def_special ScrSpecial_GetHipsterSpokenFlag def_special ScrSpecial_SetHipsterSpokenFlag - def_special sub_80F7C90 + def_special ScrSpecial_HipsterTeachWord def_special ScrSpecial_PlayBardSong def_special sub_80F83D0 def_special ScrSpecial_GenerateGiddyLine @@ -120,12 +120,12 @@ gSpecials:: def_special sub_80F88AC def_special sub_80F88FC def_special sub_80F88E0 - def_special sub_8109E34 - def_special sub_8109C44 - def_special sub_8109C58 - def_special sub_8109C90 - def_special sub_8109CF0 - def_special sub_8109DE0 + def_special ScrSpecial_TraderMenuGetDecoration + def_special ScrSpecial_GetTraderTradedFlag + def_special ScrSpecial_DoesPlayerHaveNoDecorations + def_special ScrSpecial_IsDecorationFull + def_special ScrSpecial_TraderMenuGiveDecoration + def_special ScrSpecial_TraderDoDecorationTrade def_special GetShroomishSizeRecordInfo def_special CompareShroomishSize def_special GetBarboachSizeRecordInfo diff --git a/data/text/hipster.inc b/data/text/hipster.inc index a30943d3a..630db02b2 100644 --- a/data/text/hipster.inc +++ b/data/text/hipster.inc @@ -1,19 +1,19 @@ -MauvilleCity_PokemonCenter_1F_Text_1B0C5B:: @ 81B0C5B +gTextHipster_TheyCallMeTheHipster:: @ 81B0C5B .string "Hey, yo! They call me the HIPSTER.\n" .string "I’ll teach you what’s hip and happening.$" -MauvilleCity_PokemonCenter_1F_Text_1B0CA7:: @ 81B0CA7 +gTextHipster_TaughtYouAlready:: @ 81B0CA7 .string "But, hey, I taught you what’s hip and\n" .string "happening already.\p" .string "I’d like to spread the good word to\n" .string "other folks.$" -MauvilleCity_PokemonCenter_1F_Text_1B0D11:: @ 81B0D11 +gTextHipster_YouAlreadyKnowALot:: @ 81B0D11 .string "But, hey, you already know a lot about\n" .string "what’s hip and happening.\p" .string "I’ve got nothing new to teach you!$" -MauvilleCity_PokemonCenter_1F_Text_1B0D75:: @ 81B0D75 +gTextHipster_HaveYouHeardAbout:: @ 81B0D75 .string "Hey, have you heard about\n" .string "“{STR_VAR_1}”?\p" .string "What’s it mean? Well...\n" diff --git a/data/text/storyteller.inc b/data/text/storyteller.inc index 3cfa8a698..ad131ec54 100644 --- a/data/text/storyteller.inc +++ b/data/text/storyteller.inc @@ -1,4 +1,4 @@ -MauvilleCity_PokemonCenter_1F_Text_1AECC6:: @ 81AECC6 +gTextStoryteller_Introduction:: @ 81AECC6 .string "I’m the STORYTELLER.\n" .string "I’ll tell you tales of legendary\l" .string "TRAINERS.\p" @@ -51,13 +51,13 @@ MauvilleCity_PokemonCenter_1F_Text_1AEFA5:: @ 81AEFA5 .string "in hearing my epic tales of legendary\l" .string "TRAINERS.$" -UnknownString_81AEFFC:: @ 81AEFFC +gTextStoryteller_Story1Title:: @ 81AEFFC .string "The Save-Happy TRAINER$" -UnknownString_81AF013:: @ 81AF013 +gTextStoryteller_Story1Action:: @ 81AF013 .string "Saved the game$" -UnknownString_81AF022:: @ 81AF022 +gTextStoryteller_Story1Text:: @ 81AF022 .string "This is a tale of a TRAINER\n" .string "named {STR_VAR_3}.\p" .string "This TRAINER saved the game\n" @@ -65,13 +65,13 @@ UnknownString_81AF022:: @ 81AF022 .string "A more cautious TRAINER than\n" .string "{STR_VAR_3} one will never find!$" -UnknownString_81AF0A3:: @ 81AF0A3 +gTextStoryteller_Story2Title:: @ 81AF0A3 .string "The Trendsetter TRAINER$" -UnknownString_81AF0BB:: @ 81AF0BB +gTextStoryteller_Story2Action:: @ 81AF0BB .string "Started trends$" -UnknownString_81AF0CA:: @ 81AF0CA +gTextStoryteller_Story2Text:: @ 81AF0CA .string "This is a tale of a TRAINER\n" .string "named {STR_VAR_3}.\p" .string "This TRAINER started new trends\n" @@ -79,13 +79,13 @@ UnknownString_81AF0CA:: @ 81AF0CA .string "{STR_VAR_3} is setting trends for all\n" .string "the HOENN region!$" -UnknownString_81AF149:: @ 81AF149 +gTextStoryteller_Story3Title:: @ 81AF149 .string "The BERRY-Planting TRAINER$" -UnknownString_81AF164:: @ 81AF164 +gTextStoryteller_Story3Action:: @ 81AF164 .string "Planted BERRIES$" -UnknownString_81AF174:: @ 81AF174 +gTextStoryteller_Story3Text:: @ 81AF174 .string "This is a tale of a TRAINER\n" .string "named {STR_VAR_3}.\p" .string "This TRAINER planted BERRIES\n" @@ -93,13 +93,13 @@ UnknownString_81AF174:: @ 81AF174 .string "{STR_VAR_3} is a legendary lover of\n" .string "BERRIES!$" -UnknownString_81AF1E5:: @ 81AF1E5 +gTextStoryteller_Story4Title:: @ 81AF1E5 .string "The BIKE-Loving TRAINER$" -UnknownString_81AF1FD:: @ 81AF1FD +gTextStoryteller_Story4Action:: @ 81AF1FD .string "Traded BIKES$" -UnknownString_81AF20A:: @ 81AF20A +gTextStoryteller_Story4Text:: @ 81AF20A .string "This is a tale of a TRAINER\n" .string "named {STR_VAR_3}.\p" .string "This TRAINER swapped BIKES\n" @@ -107,13 +107,13 @@ UnknownString_81AF20A:: @ 81AF20A .string "{STR_VAR_3} must love BIKES deeply\n" .string "and passionately!$" -UnknownString_81AF281:: @ 81AF281 +gTextStoryteller_Story5Title:: @ 81AF281 .string "The Interviewed TRAINER$" -UnknownString_81AF299:: @ 81AF299 +gTextStoryteller_Story5Action:: @ 81AF299 .string "Got interviewed$" -UnknownString_81AF2A9:: @ 81AF2A9 +gTextStoryteller_Story5Text:: @ 81AF2A9 .string "This is a tale of a TRAINER\n" .string "named {STR_VAR_3}.\p" .string "This TRAINER got interviewed\n" @@ -121,26 +121,26 @@ UnknownString_81AF2A9:: @ 81AF2A9 .string "{STR_VAR_3} must be a TRAINER who’s\n" .string "attracting much attention!$" -UnknownString_81AF32C:: @ 81AF32C +gTextStoryteller_Story6Title:: @ 81AF32C .string "The Battle-Happy TRAINER$" -UnknownString_81AF345:: @ 81AF345 +gTextStoryteller_Story6Action:: @ 81AF345 .string "Battled$" -UnknownString_81AF34D:: @ 81AF34D +gTextStoryteller_Story6Text:: @ 81AF34D .string "This is a tale of a TRAINER\n" .string "named {STR_VAR_3}.\p" .string "This TRAINER battled {STR_VAR_1} times!\p" .string "{STR_VAR_3} must be a TRAINER who can\n" .string "never refuse a chance to battle!$" -UnknownString_81AF3D0:: @ 81AF3D0 +gTextStoryteller_Story7Title:: @ 81AF3D0 .string "The POKéMON-Catching TRAINER$" -UnknownString_81AF3ED:: @ 81AF3ED +gTextStoryteller_Story7Action:: @ 81AF3ED .string "Caught POKéMON$" -UnknownString_81AF3FC:: @ 81AF3FC +gTextStoryteller_Story7Text:: @ 81AF3FC .string "This is a tale of a TRAINER\n" .string "named {STR_VAR_3}.\p" .string "This TRAINER caught\n" @@ -148,13 +148,13 @@ UnknownString_81AF3FC:: @ 81AF3FC .string "{STR_VAR_3} is a legendary catcher of\n" .string "wild POKéMON!$" -UnknownString_81AF46D:: @ 81AF46D +gTextStoryteller_Story8Title:: @ 81AF46D .string "The Fishing TRAINER$" -UnknownString_81AF481:: @ 81AF481 +gTextStoryteller_Story8Action:: @ 81AF481 .string "Caught POKéMON with a ROD$" -UnknownString_81AF49B:: @ 81AF49B +gTextStoryteller_Story8Text:: @ 81AF49B .string "This is a tale of a TRAINER\n" .string "named {STR_VAR_3}.\p" .string "This TRAINER caught\n" @@ -162,13 +162,13 @@ UnknownString_81AF49B:: @ 81AF49B .string "{STR_VAR_3} is a legendary fishing\n" .string "expert!$" -UnknownString_81AF511:: @ 81AF511 +gTextStoryteller_Story9Title:: @ 81AF511 .string "The EGG-Warming TRAINER$" -UnknownString_81AF529:: @ 81AF529 +gTextStoryteller_Story9Action:: @ 81AF529 .string "Hatched EGGS$" -UnknownString_81AF536:: @ 81AF536 +gTextStoryteller_Story9Text:: @ 81AF536 .string "This is a tale of a TRAINER\n" .string "named {STR_VAR_3}.\p" .string "This TRAINER hatched {STR_VAR_1} POKéMON\n" @@ -176,13 +176,13 @@ UnknownString_81AF536:: @ 81AF536 .string "{STR_VAR_3} is a legendary warmer\n" .string "of EGGS!$" -UnknownString_81AF5A9:: @ 81AF5A9 +gTextStoryteller_Story10Title:: @ 81AF5A9 .string "The Evolver TRAINER$" -UnknownString_81AF5BD:: @ 81AF5BD +gTextStoryteller_Story10Action:: @ 81AF5BD .string "Evolved POKéMON$" -UnknownString_81AF5CD:: @ 81AF5CD +gTextStoryteller_Story10Text:: @ 81AF5CD .string "This is a tale of a TRAINER\n" .string "named {STR_VAR_3}.\p" .string "This TRAINER made {STR_VAR_1} POKéMON\n" @@ -190,13 +190,13 @@ UnknownString_81AF5CD:: @ 81AF5CD .string "{STR_VAR_3} is the ultimate evolver\n" .string "of POKéMON!$" -UnknownString_81AF63F:: @ 81AF63F +gTextStoryteller_Story11Title:: @ 81AF63F .string "The POKéMON CENTER-Loving TRAINER$" -UnknownString_81AF661:: @ 81AF661 +gTextStoryteller_Story11Action:: @ 81AF661 .string "Used POKéMON CENTERS$" -UnknownString_81AF676:: @ 81AF676 +gTextStoryteller_Story11Text:: @ 81AF676 .string "This is a tale of a TRAINER\n" .string "named {STR_VAR_3}.\p" .string "This TRAINER healed POKéMON\n" @@ -204,13 +204,13 @@ UnknownString_81AF676:: @ 81AF676 .string "There could be no greater lover of\n" .string "POKéMON CENTERS than {STR_VAR_3}!$" -UnknownString_81AF711:: @ 81AF711 +gTextStoryteller_Story12Title:: @ 81AF711 .string "The Homebody TRAINER$" -UnknownString_81AF726:: @ 81AF726 +gTextStoryteller_Story12Action:: @ 81AF726 .string "Rested POKéMON at home$" -UnknownString_81AF73D:: @ 81AF73D +gTextStoryteller_Story12Text:: @ 81AF73D .string "This is a tale of a TRAINER\n" .string "named {STR_VAR_3}.\p" .string "This TRAINER healed POKéMON\n" @@ -218,13 +218,13 @@ UnknownString_81AF73D:: @ 81AF73D .string "There could be no more of a homebody\n" .string "than {STR_VAR_3}!$" -UnknownString_81AF7BF:: @ 81AF7BF +gTextStoryteller_Story13Title:: @ 81AF7BF .string "The SAFARI-Loving TRAINER$" -UnknownString_81AF7D9:: @ 81AF7D9 +gTextStoryteller_Story13Action:: @ 81AF7D9 .string "Entered the SAFARI ZONE$" -UnknownString_81AF7F1:: @ 81AF7F1 +gTextStoryteller_Story13Text:: @ 81AF7F1 .string "This is a tale of a TRAINER\n" .string "named {STR_VAR_3}.\p" .string "This TRAINER went into the SAFARI ZONE\n" @@ -232,13 +232,13 @@ UnknownString_81AF7F1:: @ 81AF7F1 .string "{STR_VAR_3} is a TRAINER whose wild side\n" .string "must come out in the SAFARI ZONE!$" -UnknownString_81AF88A:: @ 81AF88A +gTextStoryteller_Story14Title:: @ 81AF88A .string "The CUT-Frenzy TRAINER$" -UnknownString_81AF8A1:: @ 81AF8A1 +gTextStoryteller_Story14Action:: @ 81AF8A1 .string "Used CUT$" -UnknownString_81AF8AA:: @ 81AF8AA +gTextStoryteller_Story14Text:: @ 81AF8AA .string "This is a tale of a TRAINER\n" .string "named {STR_VAR_3}.\p" .string "This TRAINER used CUT\n" @@ -246,13 +246,13 @@ UnknownString_81AF8AA:: @ 81AF8AA .string "{STR_VAR_3} is a TRAINER who just must\n" .string "love to CUT!$" -UnknownString_81AF91B:: @ 81AF91B +gTextStoryteller_Story15Title:: @ 81AF91B .string "The ROCK-SMASHING TRAINER$" -UnknownString_81AF935:: @ 81AF935 +gTextStoryteller_Story15Action:: @ 81AF935 .string "Smashed rocks$" -UnknownString_81AF943:: @ 81AF943 +gTextStoryteller_Story15Text:: @ 81AF943 .string "This is a tale of a TRAINER\n" .string "named {STR_VAR_3}.\p" .string "This TRAINER used ROCK SMASH\n" @@ -260,13 +260,13 @@ UnknownString_81AF943:: @ 81AF943 .string "{STR_VAR_3} must be a TRAINER who\n" .string "can’t leave a stone unsmashed!$" -UnknownString_81AF9C8:: @ 81AF9C8 +gTextStoryteller_Story16Title:: @ 81AF9C8 .string "The Move-Loving TRAINER$" -UnknownString_81AF9E0:: @ 81AF9E0 +gTextStoryteller_Story16Action:: @ 81AF9E0 .string "Moved the SECRET BASE$" -UnknownString_81AF9F6:: @ 81AF9F6 +gTextStoryteller_Story16Text:: @ 81AF9F6 .string "This is a tale of a TRAINER\n" .string "named {STR_VAR_3}.\p" .string "This TRAINER moved the SECRET BASE\n" @@ -274,13 +274,13 @@ UnknownString_81AF9F6:: @ 81AF9F6 .string "{STR_VAR_3} is a TRAINER who loves\n" .string "to move houses often!$" -UnknownString_81AFA79:: @ 81AFA79 +gTextStoryteller_Story17Title:: @ 81AFA79 .string "The SPLASH-Happy TRAINER$" -UnknownString_81AFA92:: @ 81AFA92 +gTextStoryteller_Story17Action:: @ 81AFA92 .string "Used SPLASH$" -UnknownString_81AFA9E:: @ 81AFA9E +gTextStoryteller_Story17Text:: @ 81AFA9E .string "This is a tale of a TRAINER\n" .string "named {STR_VAR_3}.\p" .string "This TRAINER used SPLASH\n" @@ -288,13 +288,13 @@ UnknownString_81AFA9E:: @ 81AFA9E .string "{STR_VAR_3} is a TRAINER who must love\n" .string "SPLASHING around!$" -UnknownString_81AFB17:: @ 81AFB17 +gTextStoryteller_Story18Title:: @ 81AFB17 .string "The Tenacious TRAINER$" -UnknownString_81AFB2D:: @ 81AFB2D +gTextStoryteller_Story18Action:: @ 81AFB2D .string "Resorted to using STRUGGLE$" -UnknownString_81AFB48:: @ 81AFB48 +gTextStoryteller_Story18Text:: @ 81AFB48 .string "This is a tale of a TRAINER\n" .string "named {STR_VAR_3}.\p" .string "This TRAINER had to rely on STRUGGLE\n" @@ -302,13 +302,13 @@ UnknownString_81AFB48:: @ 81AFB48 .string "{STR_VAR_3} is a tenacious TRAINER\n" .string "who never gives in to adversity!$" -UnknownString_81AFBD8:: @ 81AFBD8 +gTextStoryteller_Story19Title:: @ 81AFBD8 .string "The SLOT Champ$" -UnknownString_81AFBE7:: @ 81AFBE7 +gTextStoryteller_Story19Action:: @ 81AFBE7 .string "Won the jackpot on the SLOTS$" -UnknownString_81AFC04:: @ 81AFC04 +gTextStoryteller_Story19Text:: @ 81AFC04 .string "This is a tale of a TRAINER\n" .string "named {STR_VAR_3}.\p" .string "This TRAINER won the jackpot on\n" @@ -316,13 +316,13 @@ UnknownString_81AFC04:: @ 81AFC04 .string "{STR_VAR_3} is a TRAINER who was lucky\n" .string "on the SLOTS!$" -UnknownString_81AFC8A:: @ 81AFC8A +gTextStoryteller_Story20Title:: @ 81AFC8A .string "The ROULETTE Champ$" -UnknownString_81AFC9D:: @ 81AFC9D +gTextStoryteller_Story20Action:: @ 81AFC9D .string "Had consecutive ROULETTE wins of$" -UnknownString_81AFCBE:: @ 81AFCBE +gTextStoryteller_Story20Text:: @ 81AFCBE .string "This is a tale of a TRAINER\n" .string "named {STR_VAR_3}.\p" .string "This TRAINER won in ROULETTE\n" @@ -330,13 +330,13 @@ UnknownString_81AFCBE:: @ 81AFCBE .string "{STR_VAR_3} was lucky when the ball\n" .string "bounced in ROULETTE!$" -UnknownString_81AFD44:: @ 81AFD44 +gTextStoryteller_Story21Title:: @ 81AFD44 .string "The BATTLE TOWER Challenger$" -UnknownString_81AFD60:: @ 81AFD60 +gTextStoryteller_Story21Action:: @ 81AFD60 .string "Took the BATTLE TOWER challenge$" -UnknownString_81AFD80:: @ 81AFD80 +gTextStoryteller_Story21Text:: @ 81AFD80 .string "This is a tale of a TRAINER\n" .string "named {STR_VAR_3}.\p" .string "This TRAINER took the BATTLE TOWER\n" @@ -344,13 +344,13 @@ UnknownString_81AFD80:: @ 81AFD80 .string "{STR_VAR_3} is a TRAINER who aspires\n" .string "for excellence in the BATTLE TOWER!$" -UnknownString_81AFE1D:: @ 81AFE1D +gTextStoryteller_Story22Title:: @ 81AFE1D .string "The Blend-Loving TRAINER$" -UnknownString_81AFE36:: @ 81AFE36 +gTextStoryteller_Story22Action:: @ 81AFE36 .string "Made {POKEBLOCK}S$" -UnknownString_81AFE42:: @ 81AFE42 +gTextStoryteller_Story22Text:: @ 81AFE42 .string "This is a tale of a TRAINER\n" .string "named {STR_VAR_3}.\p" .string "This TRAINER made {POKEBLOCK}S\n" @@ -358,13 +358,13 @@ UnknownString_81AFE42:: @ 81AFE42 .string "There is none better at using a BERRY\n" .string "BLENDER than {STR_VAR_3}!$" -UnknownString_81AFEC2:: @ 81AFEC2 +gTextStoryteller_Story23Title:: @ 81AFEC2 .string "The CONTEST-Loving TRAINER$" -UnknownString_81AFEDD:: @ 81AFEDD +gTextStoryteller_Story23Action:: @ 81AFEDD .string "Entered CONTESTS$" -UnknownString_81AFEEE:: @ 81AFEEE +gTextStoryteller_Story23Text:: @ 81AFEEE .string "This is a tale of a TRAINER\n" .string "named {STR_VAR_3}.\p" .string "This TRAINER entered CONTESTS\n" @@ -372,13 +372,13 @@ UnknownString_81AFEEE:: @ 81AFEEE .string "{STR_VAR_3} must love showing off\n" .string "POKéMON to others!$" -UnknownString_81AFF68:: @ 81AFF68 +gTextStoryteller_Story24Title:: @ 81AFF68 .string "The CONTEST Master$" -UnknownString_81AFF7B:: @ 81AFF7B +gTextStoryteller_Story24Action:: @ 81AFF7B .string "Won CONTESTS$" -UnknownString_81AFF88:: @ 81AFF88 +gTextStoryteller_Story24Text:: @ 81AFF88 .string "This is a tale of a TRAINER\n" .string "named {STR_VAR_3}.\p" .string "This TRAINER won CONTESTS\n" @@ -386,13 +386,13 @@ UnknownString_81AFF88:: @ 81AFF88 .string "{STR_VAR_3} must be an incredible\n" .string "CONTEST master!$" -UnknownString_81AFFFB:: @ 81AFFFB +gTextStoryteller_Story25Title:: @ 81AFFFB .string "The Happy Shopper$" -UnknownString_81B000D:: @ 81B000D +gTextStoryteller_Story25Action:: @ 81B000D .string "Shopped$" -UnknownString_81B0015:: @ 81B0015 +gTextStoryteller_Story25Text:: @ 81B0015 .string "This is a tale of a TRAINER\n" .string "named {STR_VAR_3}.\p" .string "This TRAINER bought items in shops\n" @@ -400,13 +400,13 @@ UnknownString_81B0015:: @ 81B0015 .string "{STR_VAR_3} must be one of those\n" .string "people who are born to shop.$" -UnknownString_81B009D:: @ 81B009D +gTextStoryteller_Story26Title:: @ 81B009D .string "The Item-Finding TRAINER$" -UnknownString_81B00B6:: @ 81B00B6 +gTextStoryteller_Story26Action:: @ 81B00B6 .string "Used an ITEMFINDER$" -UnknownString_81B00C9:: @ 81B00C9 +gTextStoryteller_Story26Text:: @ 81B00C9 .string "This is a tale of a TRAINER\n" .string "named {STR_VAR_3}.\p" .string "This TRAINER used an ITEMFINDER\n" @@ -414,13 +414,13 @@ UnknownString_81B00C9:: @ 81B00C9 .string "{STR_VAR_3} must enjoy scouring the\n" .string "ground for hidden items!$" -UnknownString_81B014D:: @ 81B014D +gTextStoryteller_Story27Title:: @ 81B014D .string "The Rain-Soaked TRAINER$" -UnknownString_81B0165:: @ 81B0165 +gTextStoryteller_Story27Action:: @ 81B0165 .string "Got rained on$" -UnknownString_81B0173:: @ 81B0173 +gTextStoryteller_Story27Text:: @ 81B0173 .string "This is a tale of a TRAINER\n" .string "named {STR_VAR_3}.\p" .string "This TRAINER got soaked by rain\n" @@ -428,13 +428,13 @@ UnknownString_81B0173:: @ 81B0173 .string "{STR_VAR_3}’s charisma must even\n" .string "attract rain!$" -UnknownString_81B01E9:: @ 81B01E9 +gTextStoryteller_Story28Title:: @ 81B01E9 .string "The Avid POKéDEX Reader$" -UnknownString_81B0201:: @ 81B0201 +gTextStoryteller_Story28Action:: @ 81B0201 .string "Checked a POKéDEX$" -UnknownString_81B0213:: @ 81B0213 +gTextStoryteller_Story28Text:: @ 81B0213 .string "This is a tale of a TRAINER\n" .string "named {STR_VAR_3}.\p" .string "This TRAINER checked a POKéDEX\n" @@ -442,13 +442,13 @@ UnknownString_81B0213:: @ 81B0213 .string "{STR_VAR_3} must love inspecting\n" .string "POKéMON in a POKéDEX!$" -UnknownString_81B0290:: @ 81B0290 +gTextStoryteller_Story29Title:: @ 81B0290 .string "The RIBBON Collector$" -UnknownString_81B02A5:: @ 81B02A5 +gTextStoryteller_Story29Action:: @ 81B02A5 .string "Received RIBBONS$" -UnknownString_81B02B6:: @ 81B02B6 +gTextStoryteller_Story29Text:: @ 81B02B6 .string "This is a tale of a TRAINER\n" .string "named {STR_VAR_3}.\p" .string "This TRAINER received RIBBONS\n" @@ -456,13 +456,13 @@ UnknownString_81B02B6:: @ 81B02B6 .string "{STR_VAR_3} must be a TRAINER who\n" .string "loves to collect RIBBONS!$" -UnknownString_81B0337:: @ 81B0337 +gTextStoryteller_Story30Title:: @ 81B0337 .string "The Ledge-Jumping TRAINER$" -UnknownString_81B0351:: @ 81B0351 +gTextStoryteller_Story30Action:: @ 81B0351 .string "Jumped down ledges$" -UnknownString_81B0364:: @ 81B0364 +gTextStoryteller_Story30Text:: @ 81B0364 .string "This is a tale of a TRAINER\n" .string "named {STR_VAR_3}.\p" .string "This TRAINER jumped down ledges\n" @@ -470,26 +470,26 @@ UnknownString_81B0364:: @ 81B0364 .string "If there’s a ledge to be jumped,\n" .string "{STR_VAR_3} can’t ignore it!$" -UnknownString_81B03E9:: @ 81B03E9 +gTextStoryteller_Story31Title:: @ 81B03E9 .string "The Legendary TV Viewer$" -UnknownString_81B0401:: @ 81B0401 +gTextStoryteller_Story31Action:: @ 81B0401 .string "Watched TV$" -UnknownString_81B040C:: @ 81B040C +gTextStoryteller_Story31Text:: @ 81B040C .string "This is a tale of a TRAINER\n" .string "named {STR_VAR_3}.\p" .string "This TRAINER watched TV\n" .string "{STR_VAR_1} times!\p" .string "{STR_VAR_3} must love watching TV!$" -UnknownString_81B046E:: @ 81B046E +gTextStoryteller_Story32Title:: @ 81B046E .string "The Time-Conscious TRAINER$" -UnknownString_81B0489:: @ 81B0489 +gTextStoryteller_Story32Action:: @ 81B0489 .string "Checked the time$" -UnknownString_81B049A:: @ 81B049A +gTextStoryteller_Story32Text:: @ 81B049A .string "This is a tale of a TRAINER\n" .string "named {STR_VAR_3}.\p" .string "This TRAINER checked the time\n" @@ -497,13 +497,13 @@ UnknownString_81B049A:: @ 81B049A .string "{STR_VAR_3} must be a punctual TRAINER\n" .string "who’s conscious of the time.$" -UnknownString_81B0523:: @ 81B0523 +gTextStoryteller_Story33Title:: @ 81B0523 .string "The POKéMON LOTTERY Wizard$" -UnknownString_81B053E:: @ 81B053E +gTextStoryteller_Story33Action:: @ 81B053E .string "Won POKéMON LOTTERIES$" -UnknownString_81B0554:: @ 81B0554 +gTextStoryteller_Story33Text:: @ 81B0554 .string "This is a tale of a TRAINER\n" .string "named {STR_VAR_3}.\p" .string "This TRAINER won POKéMON LOTTERIES\n" @@ -511,13 +511,13 @@ UnknownString_81B0554:: @ 81B0554 .string "{STR_VAR_3} must have many friends\n" .string "to trade POKéMON with!$" -UnknownString_81B05D8:: @ 81B05D8 +gTextStoryteller_Story34Title:: @ 81B05D8 .string "The DAY CARE-Using Trainer$" -UnknownString_81B05F3:: @ 81B05F3 +gTextStoryteller_Story34Action:: @ 81B05F3 .string "Left POKéMON at the DAY CARE$" -UnknownString_81B0610:: @ 81B0610 +gTextStoryteller_Story34Text:: @ 81B0610 .string "This is a tale of a TRAINER\n" .string "named {STR_VAR_3}.\p" .string "This TRAINER left POKéMON with the\n" @@ -525,13 +525,13 @@ UnknownString_81B0610:: @ 81B0610 .string "{STR_VAR_3} must be a real go-getter\n" .string "who raises POKéMON aggressively!$" -UnknownString_81B06A9:: @ 81B06A9 +gTextStoryteller_Story35Title:: @ 81B06A9 .string "The CABLE CAR-Loving TRAINER$" -UnknownString_81B06C6:: @ 81B06C6 +gTextStoryteller_Story35Action:: @ 81B06C6 .string "Rode the CABLE CAR$" -UnknownString_81B06D9:: @ 81B06D9 +gTextStoryteller_Story35Text:: @ 81B06D9 .string "This is a tale of a TRAINER\n" .string "named {STR_VAR_3}.\p" .string "This TRAINER rode the CABLE CAR\n" @@ -539,13 +539,13 @@ UnknownString_81B06D9:: @ 81B06D9 .string "{STR_VAR_3} must be a busy TRAINER\n" .string "who’s up and down all the time!$" -UnknownString_81B0763:: @ 81B0763 +gTextStoryteller_Story36Title:: @ 81B0763 .string "The Hot Spring-Loving TRAINER$" -UnknownString_81B0781:: @ 81B0781 +gTextStoryteller_Story36Action:: @ 81B0781 .string "Bathed in hot springs$" -UnknownString_81B0797:: @ 81B0797 +gTextStoryteller_Story36Text:: @ 81B0797 .string "This is a tale of a TRAINER\n" .string "named {STR_VAR_3}.\p" .string "This TRAINER bathed in hot springs\n" diff --git a/data/text/trader.inc b/data/text/trader.inc index dba63bcf8..599344091 100644 --- a/data/text/trader.inc +++ b/data/text/trader.inc @@ -1,57 +1,57 @@ -MauvilleCity_PokemonCenter_1F_Text_1AE88F:: @ 81AE88F +gTextTrader_Introduction:: @ 81AE88F .string "Hi, I’m the TRADER.\n" .string "Want to trade decorations with me?$" -MauvilleCity_PokemonCenter_1F_Text_1AE8C6:: @ 81AE8C6 +gTextTrader_FeelUnwanted1:: @ 81AE8C6 .string "Oh...\n" .string "I feel unwanted...$" -MauvilleCity_PokemonCenter_1F_Text_1AE8DF:: @ 81AE8DF +gTextTrader_TradedAlready:: @ 81AE8DF .string "But we’ve traded decorations already,\n" .string "you and I.$" -MauvilleCity_PokemonCenter_1F_Text_1AE910:: @ 81AE910 +gTextTrader_MenuPrompt:: @ 81AE910 .string "If you see any decorative item that\n" .string "you want of mine, speak up.$" -MauvilleCity_PokemonCenter_1F_Text_1AE950:: @ 81AE950 +gTextTrader_DontWantAnything:: @ 81AE950 .string "You don’t want anything?\n" .string "I feel unwanted...$" -MauvilleCity_PokemonCenter_1F_Text_1AE97C:: @ 81AE97C +gTextTrader_ItemOnceBelongedTo:: @ 81AE97C .string "That decorative item once belonged\n" .string "to {STR_VAR_1}.\p" .string "Do you want it?$" -MauvilleCity_PokemonCenter_1F_Text_1AE9B6:: @ 81AE9B6 +gTextTrader_YouDontHaveDecorations:: @ 81AE9B6 .string "Uh... Wait a second. You don’t have a\n" .string "single piece of decoration!$" -MauvilleCity_PokemonCenter_1F_Text_1AE9F8:: @ 81AE9F8 +gTextTrader_PickDecorationYoullTrade:: @ 81AE9F8 .string "Okay, pick the decoration that you’ll\n" .string "trade to me.$" -MauvilleCity_PokemonCenter_1F_Text_1AEA2B:: @ 81AEA2B +gTextTrader_FeelUnwanted2:: @ 81AEA2B .string "You won’t trade with me?\n" .string "I feel unwanted...$" -MauvilleCity_PokemonCenter_1F_Text_1AEA57:: @ 81AEA57 +gTextTrader_NoRoomForThis:: @ 81AEA57 .string "You’ve got all the {STR_VAR_2}S that can\n" .string "be stored. You’ve no room for this.$" -MauvilleCity_PokemonCenter_1F_Text_1AEA9B:: @ 81AEA9B +gTextTrader_SoWellTrade:: @ 81AEA9B .string "Okay, so we’ll trade my {STR_VAR_3}\n" .string "for your {STR_VAR_2}?$" -MauvilleCity_PokemonCenter_1F_Text_1AEAC3:: @ 81AEAC3 +gTextTrader_InUseYouCantTradeIt:: @ 81AEAC3 .string "That piece of decoration is in use.\n" .string "You can’t trade it.$" -MauvilleCity_PokemonCenter_1F_Text_1AEAFB:: @ 81AEAFB +gTextTrader_ThenWellTrade:: @ 81AEAFB .string "Then we’ll trade!\n" .string "I’ll send my decoration to your PC.$" -MauvilleCity_PokemonCenter_1F_Text_1AEB31:: @ 81AEB31 +gTextTrader_ICantTradeThatOneAway:: @ 81AEB31 .string "Oops! Sorry!\n" .string "That’s a really rare piece of decoration.\l" .string "I can’t trade that one away!\p" diff --git a/include/global.h b/include/global.h index 6c0fc28ef..0e0c29045 100644 --- a/include/global.h +++ b/include/global.h @@ -478,7 +478,7 @@ struct MauvilleManTrader u8 id; u8 unk1[4]; u8 unk5[4][11]; - u8 unk31; + bool8 alreadyTraded; }; struct MauvilleManStoryteller @@ -487,7 +487,7 @@ struct MauvilleManStoryteller bool8 unk1; u8 filler2[2]; u8 unk4[4]; - u8 unk8[4][7]; + u8 playerNames[4][7]; u8 unk24[2][4]; // unknown length }; diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index 4edcb1417..e5d661e4a 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -24,114 +24,114 @@ extern struct MusicPlayerInfo gMPlay_SE2; extern u16 gScriptResult; extern u16 gSpecialVar_0x8004; -extern const u8 UnknownString_81AEFFC[]; -extern const u8 UnknownString_81AF013[]; -extern const u8 UnknownString_81AF022[]; -extern const u8 UnknownString_81AF0A3[]; -extern const u8 UnknownString_81AF0BB[]; -extern const u8 UnknownString_81AF0CA[]; -extern const u8 UnknownString_81AF149[]; -extern const u8 UnknownString_81AF164[]; -extern const u8 UnknownString_81AF174[]; -extern const u8 UnknownString_81AF1E5[]; -extern const u8 UnknownString_81AF1FD[]; -extern const u8 UnknownString_81AF20A[]; -extern const u8 UnknownString_81AF281[]; -extern const u8 UnknownString_81AF299[]; -extern const u8 UnknownString_81AF2A9[]; -extern const u8 UnknownString_81AF32C[]; -extern const u8 UnknownString_81AF345[]; -extern const u8 UnknownString_81AF34D[]; -extern const u8 UnknownString_81AF3D0[]; -extern const u8 UnknownString_81AF3ED[]; -extern const u8 UnknownString_81AF3FC[]; -extern const u8 UnknownString_81AF46D[]; -extern const u8 UnknownString_81AF481[]; -extern const u8 UnknownString_81AF49B[]; -extern const u8 UnknownString_81AF511[]; -extern const u8 UnknownString_81AF529[]; -extern const u8 UnknownString_81AF536[]; -extern const u8 UnknownString_81AF5A9[]; -extern const u8 UnknownString_81AF5BD[]; -extern const u8 UnknownString_81AF5CD[]; -extern const u8 UnknownString_81AF63F[]; -extern const u8 UnknownString_81AF661[]; -extern const u8 UnknownString_81AF676[]; -extern const u8 UnknownString_81AF711[]; -extern const u8 UnknownString_81AF726[]; -extern const u8 UnknownString_81AF73D[]; -extern const u8 UnknownString_81AF7BF[]; -extern const u8 UnknownString_81AF7D9[]; -extern const u8 UnknownString_81AF7F1[]; -extern const u8 UnknownString_81AF88A[]; -extern const u8 UnknownString_81AF8A1[]; -extern const u8 UnknownString_81AF8AA[]; -extern const u8 UnknownString_81AF91B[]; -extern const u8 UnknownString_81AF935[]; -extern const u8 UnknownString_81AF943[]; -extern const u8 UnknownString_81AF9C8[]; -extern const u8 UnknownString_81AF9E0[]; -extern const u8 UnknownString_81AF9F6[]; -extern const u8 UnknownString_81AFA79[]; -extern const u8 UnknownString_81AFA92[]; -extern const u8 UnknownString_81AFA9E[]; -extern const u8 UnknownString_81AFB17[]; -extern const u8 UnknownString_81AFB2D[]; -extern const u8 UnknownString_81AFB48[]; -extern const u8 UnknownString_81AFBD8[]; -extern const u8 UnknownString_81AFBE7[]; -extern const u8 UnknownString_81AFC04[]; -extern const u8 UnknownString_81AFC8A[]; -extern const u8 UnknownString_81AFC9D[]; -extern const u8 UnknownString_81AFCBE[]; -extern const u8 UnknownString_81AFD44[]; -extern const u8 UnknownString_81AFD60[]; -extern const u8 UnknownString_81AFD80[]; -extern const u8 UnknownString_81AFE1D[]; -extern const u8 UnknownString_81AFE36[]; -extern const u8 UnknownString_81AFE42[]; -extern const u8 UnknownString_81AFEC2[]; -extern const u8 UnknownString_81AFEDD[]; -extern const u8 UnknownString_81AFEEE[]; -extern const u8 UnknownString_81AFF68[]; -extern const u8 UnknownString_81AFF7B[]; -extern const u8 UnknownString_81AFF88[]; -extern const u8 UnknownString_81AFFFB[]; -extern const u8 UnknownString_81B000D[]; -extern const u8 UnknownString_81B0015[]; -extern const u8 UnknownString_81B009D[]; -extern const u8 UnknownString_81B00B6[]; -extern const u8 UnknownString_81B00C9[]; -extern const u8 UnknownString_81B014D[]; -extern const u8 UnknownString_81B0165[]; -extern const u8 UnknownString_81B0173[]; -extern const u8 UnknownString_81B01E9[]; -extern const u8 UnknownString_81B0201[]; -extern const u8 UnknownString_81B0213[]; -extern const u8 UnknownString_81B0290[]; -extern const u8 UnknownString_81B02A5[]; -extern const u8 UnknownString_81B02B6[]; -extern const u8 UnknownString_81B0337[]; -extern const u8 UnknownString_81B0351[]; -extern const u8 UnknownString_81B0364[]; -extern const u8 UnknownString_81B03E9[]; -extern const u8 UnknownString_81B0401[]; -extern const u8 UnknownString_81B040C[]; -extern const u8 UnknownString_81B046E[]; -extern const u8 UnknownString_81B0489[]; -extern const u8 UnknownString_81B049A[]; -extern const u8 UnknownString_81B0523[]; -extern const u8 UnknownString_81B053E[]; -extern const u8 UnknownString_81B0554[]; -extern const u8 UnknownString_81B05D8[]; -extern const u8 UnknownString_81B05F3[]; -extern const u8 UnknownString_81B0610[]; -extern const u8 UnknownString_81B06A9[]; -extern const u8 UnknownString_81B06C6[]; -extern const u8 UnknownString_81B06D9[]; -extern const u8 UnknownString_81B0763[]; -extern const u8 UnknownString_81B0781[]; -extern const u8 UnknownString_81B0797[]; +extern const u8 gTextStoryteller_Story1Title[]; +extern const u8 gTextStoryteller_Story1Action[]; +extern const u8 gTextStoryteller_Story1Text[]; +extern const u8 gTextStoryteller_Story2Title[]; +extern const u8 gTextStoryteller_Story2Action[]; +extern const u8 gTextStoryteller_Story2Text[]; +extern const u8 gTextStoryteller_Story3Title[]; +extern const u8 gTextStoryteller_Story3Action[]; +extern const u8 gTextStoryteller_Story3Text[]; +extern const u8 gTextStoryteller_Story4Title[]; +extern const u8 gTextStoryteller_Story4Action[]; +extern const u8 gTextStoryteller_Story4Text[]; +extern const u8 gTextStoryteller_Story5Title[]; +extern const u8 gTextStoryteller_Story5Action[]; +extern const u8 gTextStoryteller_Story5Text[]; +extern const u8 gTextStoryteller_Story6Title[]; +extern const u8 gTextStoryteller_Story6Action[]; +extern const u8 gTextStoryteller_Story6Text[]; +extern const u8 gTextStoryteller_Story7Title[]; +extern const u8 gTextStoryteller_Story7Action[]; +extern const u8 gTextStoryteller_Story7Text[]; +extern const u8 gTextStoryteller_Story8Title[]; +extern const u8 gTextStoryteller_Story8Action[]; +extern const u8 gTextStoryteller_Story8Text[]; +extern const u8 gTextStoryteller_Story9Title[]; +extern const u8 gTextStoryteller_Story9Action[]; +extern const u8 gTextStoryteller_Story9Text[]; +extern const u8 gTextStoryteller_Story10Title[]; +extern const u8 gTextStoryteller_Story10Action[]; +extern const u8 gTextStoryteller_Story10Text[]; +extern const u8 gTextStoryteller_Story11Title[]; +extern const u8 gTextStoryteller_Story11Action[]; +extern const u8 gTextStoryteller_Story11Text[]; +extern const u8 gTextStoryteller_Story12Title[]; +extern const u8 gTextStoryteller_Story12Action[]; +extern const u8 gTextStoryteller_Story12Text[]; +extern const u8 gTextStoryteller_Story13Title[]; +extern const u8 gTextStoryteller_Story13Action[]; +extern const u8 gTextStoryteller_Story13Text[]; +extern const u8 gTextStoryteller_Story14Title[]; +extern const u8 gTextStoryteller_Story14Action[]; +extern const u8 gTextStoryteller_Story14Text[]; +extern const u8 gTextStoryteller_Story15Title[]; +extern const u8 gTextStoryteller_Story15Action[]; +extern const u8 gTextStoryteller_Story15Text[]; +extern const u8 gTextStoryteller_Story16Title[]; +extern const u8 gTextStoryteller_Story16Action[]; +extern const u8 gTextStoryteller_Story16Text[]; +extern const u8 gTextStoryteller_Story17Title[]; +extern const u8 gTextStoryteller_Story17Action[]; +extern const u8 gTextStoryteller_Story17Text[]; +extern const u8 gTextStoryteller_Story18Title[]; +extern const u8 gTextStoryteller_Story18Action[]; +extern const u8 gTextStoryteller_Story18Text[]; +extern const u8 gTextStoryteller_Story19Title[]; +extern const u8 gTextStoryteller_Story19Action[]; +extern const u8 gTextStoryteller_Story19Text[]; +extern const u8 gTextStoryteller_Story20Title[]; +extern const u8 gTextStoryteller_Story20Action[]; +extern const u8 gTextStoryteller_Story20Text[]; +extern const u8 gTextStoryteller_Story21Title[]; +extern const u8 gTextStoryteller_Story21Action[]; +extern const u8 gTextStoryteller_Story21Text[]; +extern const u8 gTextStoryteller_Story22Title[]; +extern const u8 gTextStoryteller_Story22Action[]; +extern const u8 gTextStoryteller_Story22Text[]; +extern const u8 gTextStoryteller_Story23Title[]; +extern const u8 gTextStoryteller_Story23Action[]; +extern const u8 gTextStoryteller_Story23Text[]; +extern const u8 gTextStoryteller_Story24Title[]; +extern const u8 gTextStoryteller_Story24Action[]; +extern const u8 gTextStoryteller_Story24Text[]; +extern const u8 gTextStoryteller_Story25Title[]; +extern const u8 gTextStoryteller_Story25Action[]; +extern const u8 gTextStoryteller_Story25Text[]; +extern const u8 gTextStoryteller_Story26Title[]; +extern const u8 gTextStoryteller_Story26Action[]; +extern const u8 gTextStoryteller_Story26Text[]; +extern const u8 gTextStoryteller_Story27Title[]; +extern const u8 gTextStoryteller_Story27Action[]; +extern const u8 gTextStoryteller_Story27Text[]; +extern const u8 gTextStoryteller_Story28Title[]; +extern const u8 gTextStoryteller_Story28Action[]; +extern const u8 gTextStoryteller_Story28Text[]; +extern const u8 gTextStoryteller_Story29Title[]; +extern const u8 gTextStoryteller_Story29Action[]; +extern const u8 gTextStoryteller_Story29Text[]; +extern const u8 gTextStoryteller_Story30Title[]; +extern const u8 gTextStoryteller_Story30Action[]; +extern const u8 gTextStoryteller_Story30Text[]; +extern const u8 gTextStoryteller_Story31Title[]; +extern const u8 gTextStoryteller_Story31Action[]; +extern const u8 gTextStoryteller_Story31Text[]; +extern const u8 gTextStoryteller_Story32Title[]; +extern const u8 gTextStoryteller_Story32Action[]; +extern const u8 gTextStoryteller_Story32Text[]; +extern const u8 gTextStoryteller_Story33Title[]; +extern const u8 gTextStoryteller_Story33Action[]; +extern const u8 gTextStoryteller_Story33Text[]; +extern const u8 gTextStoryteller_Story34Title[]; +extern const u8 gTextStoryteller_Story34Action[]; +extern const u8 gTextStoryteller_Story34Text[]; +extern const u8 gTextStoryteller_Story35Title[]; +extern const u8 gTextStoryteller_Story35Action[]; +extern const u8 gTextStoryteller_Story35Text[]; +extern const u8 gTextStoryteller_Story36Title[]; +extern const u8 gTextStoryteller_Story36Action[]; +extern const u8 gTextStoryteller_Story36Text[]; extern struct UnkBard2 gUnknown_03005DA0; @@ -248,7 +248,7 @@ void SetupMauvilleOldMan(void) sub_80F83D0(); } -//#define TEST MAUVILLE_MAN_BARD +//#define TEST MAUVILLE_MAN_STORYTELLER #ifdef TEST // Safely changes man to test functionality @@ -376,7 +376,7 @@ void ScrSpecial_PlayBardSong(void) ScriptContext1_Stop(); } -void sub_80F7C70(void) +void ScrSpecial_GetHipsterSpokenFlag(void) { u16 *scriptResult = &gScriptResult; // again?? struct MauvilleManHipster *hipster = &gSaveBlock1.mauvilleMan.hipster; @@ -391,7 +391,7 @@ void ScrSpecial_SetHipsterSpokenFlag(void) hipster->unk1 = 1; } -void sub_80F7C90(void) +void ScrSpecial_HipsterTeachWord(void) { u16 var = sub_80EB8EC(); @@ -1001,53 +1001,53 @@ void sub_80F83D0(void) VarSet(0x4010, 0x45 + GetCurrentMauvilleOldMan()); } -struct UnknownStruct1 +struct Story { u8 unk0; u8 unk1; - const u8 *unk4; - const u8 *unk8; - const u8 *unkC; + const u8 *title; + const u8 *action; + const u8 *fullText; }; -static const struct UnknownStruct1 gUnknown_083E53E0[] = +static const struct Story sStorytellerStories[] = { - {0x32, 1, UnknownString_81AEFFC, UnknownString_81AF013, UnknownString_81AF022}, - {0x02, 1, UnknownString_81AF0A3, UnknownString_81AF0BB, UnknownString_81AF0CA}, - {0x03, 1, UnknownString_81AF149, UnknownString_81AF164, UnknownString_81AF174}, - {0x04, 1, UnknownString_81AF1E5, UnknownString_81AF1FD, UnknownString_81AF20A}, - {0x06, 1, UnknownString_81AF281, UnknownString_81AF299, UnknownString_81AF2A9}, - {0x09, 1, UnknownString_81AF32C, UnknownString_81AF345, UnknownString_81AF34D}, - {0x0B, 1, UnknownString_81AF3D0, UnknownString_81AF3ED, UnknownString_81AF3FC}, - {0x0C, 1, UnknownString_81AF46D, UnknownString_81AF481, UnknownString_81AF49B}, - {0x0D, 1, UnknownString_81AF511, UnknownString_81AF529, UnknownString_81AF536}, - {0x0E, 1, UnknownString_81AF5A9, UnknownString_81AF5BD, UnknownString_81AF5CD}, - {0x0F, 1, UnknownString_81AF63F, UnknownString_81AF661, UnknownString_81AF676}, - {0x10, 1, UnknownString_81AF711, UnknownString_81AF726, UnknownString_81AF73D}, - {0x11, 1, UnknownString_81AF7BF, UnknownString_81AF7D9, UnknownString_81AF7F1}, - {0x12, 1, UnknownString_81AF88A, UnknownString_81AF8A1, UnknownString_81AF8AA}, - {0x13, 1, UnknownString_81AF91B, UnknownString_81AF935, UnknownString_81AF943}, - {0x14, 1, UnknownString_81AF9C8, UnknownString_81AF9E0, UnknownString_81AF9F6}, - {0x1A, 1, UnknownString_81AFA79, UnknownString_81AFA92, UnknownString_81AFA9E}, - {0x1B, 1, UnknownString_81AFB17, UnknownString_81AFB2D, UnknownString_81AFB48}, - {0x1C, 1, UnknownString_81AFBD8, UnknownString_81AFBE7, UnknownString_81AFC04}, - {0x1D, 2, UnknownString_81AFC8A, UnknownString_81AFC9D, UnknownString_81AFCBE}, - {0x1E, 1, UnknownString_81AFD44, UnknownString_81AFD60, UnknownString_81AFD80}, - {0x21, 1, UnknownString_81AFE1D, UnknownString_81AFE36, UnknownString_81AFE42}, - {0x24, 1, UnknownString_81AFEC2, UnknownString_81AFEDD, UnknownString_81AFEEE}, - {0x25, 1, UnknownString_81AFF68, UnknownString_81AFF7B, UnknownString_81AFF88}, - {0x26, 1, UnknownString_81AFFFB, UnknownString_81B000D, UnknownString_81B0015}, - {0x27, 1, UnknownString_81B009D, UnknownString_81B00B6, UnknownString_81B00C9}, - {0x28, 1, UnknownString_81B014D, UnknownString_81B0165, UnknownString_81B0173}, - {0x29, 1, UnknownString_81B01E9, UnknownString_81B0201, UnknownString_81B0213}, - {0x2A, 1, UnknownString_81B0290, UnknownString_81B02A5, UnknownString_81B02B6}, - {0x2B, 1, UnknownString_81B0337, UnknownString_81B0351, UnknownString_81B0364}, - {0x2C, 1, UnknownString_81B03E9, UnknownString_81B0401, UnknownString_81B040C}, - {0x2D, 1, UnknownString_81B046E, UnknownString_81B0489, UnknownString_81B049A}, - {0x2E, 1, UnknownString_81B0523, UnknownString_81B053E, UnknownString_81B0554}, - {0x2F, 1, UnknownString_81B05D8, UnknownString_81B05F3, UnknownString_81B0610}, - {0x30, 1, UnknownString_81B06A9, UnknownString_81B06C6, UnknownString_81B06D9}, - {0x31, 1, UnknownString_81B0763, UnknownString_81B0781, UnknownString_81B0797}, + {0x32, 1, gTextStoryteller_Story1Title, gTextStoryteller_Story1Action, gTextStoryteller_Story1Text}, + {0x02, 1, gTextStoryteller_Story2Title, gTextStoryteller_Story2Action, gTextStoryteller_Story2Text}, + {0x03, 1, gTextStoryteller_Story3Title, gTextStoryteller_Story3Action, gTextStoryteller_Story3Text}, + {0x04, 1, gTextStoryteller_Story4Title, gTextStoryteller_Story4Action, gTextStoryteller_Story4Text}, + {0x06, 1, gTextStoryteller_Story5Title, gTextStoryteller_Story5Action, gTextStoryteller_Story5Text}, + {0x09, 1, gTextStoryteller_Story6Title, gTextStoryteller_Story6Action, gTextStoryteller_Story6Text}, + {0x0B, 1, gTextStoryteller_Story7Title, gTextStoryteller_Story7Action, gTextStoryteller_Story7Text}, + {0x0C, 1, gTextStoryteller_Story8Title, gTextStoryteller_Story8Action, gTextStoryteller_Story8Text}, + {0x0D, 1, gTextStoryteller_Story9Title, gTextStoryteller_Story9Action, gTextStoryteller_Story9Text}, + {0x0E, 1, gTextStoryteller_Story10Title, gTextStoryteller_Story10Action, gTextStoryteller_Story10Text}, + {0x0F, 1, gTextStoryteller_Story11Title, gTextStoryteller_Story11Action, gTextStoryteller_Story11Text}, + {0x10, 1, gTextStoryteller_Story12Title, gTextStoryteller_Story12Action, gTextStoryteller_Story12Text}, + {0x11, 1, gTextStoryteller_Story13Title, gTextStoryteller_Story13Action, gTextStoryteller_Story13Text}, + {0x12, 1, gTextStoryteller_Story14Title, gTextStoryteller_Story14Action, gTextStoryteller_Story14Text}, + {0x13, 1, gTextStoryteller_Story15Title, gTextStoryteller_Story15Action, gTextStoryteller_Story15Text}, + {0x14, 1, gTextStoryteller_Story16Title, gTextStoryteller_Story16Action, gTextStoryteller_Story16Text}, + {0x1A, 1, gTextStoryteller_Story17Title, gTextStoryteller_Story17Action, gTextStoryteller_Story17Text}, + {0x1B, 1, gTextStoryteller_Story18Title, gTextStoryteller_Story18Action, gTextStoryteller_Story18Text}, + {0x1C, 1, gTextStoryteller_Story19Title, gTextStoryteller_Story19Action, gTextStoryteller_Story19Text}, + {0x1D, 2, gTextStoryteller_Story20Title, gTextStoryteller_Story20Action, gTextStoryteller_Story20Text}, + {0x1E, 1, gTextStoryteller_Story21Title, gTextStoryteller_Story21Action, gTextStoryteller_Story21Text}, + {0x21, 1, gTextStoryteller_Story22Title, gTextStoryteller_Story22Action, gTextStoryteller_Story22Text}, + {0x24, 1, gTextStoryteller_Story23Title, gTextStoryteller_Story23Action, gTextStoryteller_Story23Text}, + {0x25, 1, gTextStoryteller_Story24Title, gTextStoryteller_Story24Action, gTextStoryteller_Story24Text}, + {0x26, 1, gTextStoryteller_Story25Title, gTextStoryteller_Story25Action, gTextStoryteller_Story25Text}, + {0x27, 1, gTextStoryteller_Story26Title, gTextStoryteller_Story26Action, gTextStoryteller_Story26Text}, + {0x28, 1, gTextStoryteller_Story27Title, gTextStoryteller_Story27Action, gTextStoryteller_Story27Text}, + {0x29, 1, gTextStoryteller_Story28Title, gTextStoryteller_Story28Action, gTextStoryteller_Story28Text}, + {0x2A, 1, gTextStoryteller_Story29Title, gTextStoryteller_Story29Action, gTextStoryteller_Story29Text}, + {0x2B, 1, gTextStoryteller_Story30Title, gTextStoryteller_Story30Action, gTextStoryteller_Story30Text}, + {0x2C, 1, gTextStoryteller_Story31Title, gTextStoryteller_Story31Action, gTextStoryteller_Story31Text}, + {0x2D, 1, gTextStoryteller_Story32Title, gTextStoryteller_Story32Action, gTextStoryteller_Story32Text}, + {0x2E, 1, gTextStoryteller_Story33Title, gTextStoryteller_Story33Action, gTextStoryteller_Story33Text}, + {0x2F, 1, gTextStoryteller_Story34Title, gTextStoryteller_Story34Action, gTextStoryteller_Story34Text}, + {0x30, 1, gTextStoryteller_Story35Title, gTextStoryteller_Story35Action, gTextStoryteller_Story35Text}, + {0x31, 1, gTextStoryteller_Story36Title, gTextStoryteller_Story36Action, gTextStoryteller_Story36Text}, }; void StorytellerSetup(void) @@ -1060,7 +1060,7 @@ void StorytellerSetup(void) for (i = 0; i < 4; i++) { storyteller->unk4[i] = 0; - storyteller->unk8[0][i] = EOS; // Maybe they meant storyteller->unk8[i][0] instead? + storyteller->playerNames[0][i] = EOS; // Maybe they meant storyteller->playerNames[i][0] instead? } } @@ -1076,34 +1076,34 @@ u32 sub_80F8438(u8 stat) { if (stat == 50) stat = 0; - GetGameStat(stat); + return GetGameStat(stat); } -const struct UnknownStruct1 *sub_80F844C(u32 a) +const struct Story *GetStory(u32 a) { s32 i; for (i = 0; i < 36; i++) { - if (gUnknown_083E53E0[i].unk0 == a) - return &gUnknown_083E53E0[i]; + if (sStorytellerStories[i].unk0 == a) + return &sStorytellerStories[i]; } - return &gUnknown_083E53E0[35]; + return &sStorytellerStories[35]; } const u8 *sub_80F8478(u32 a) { - return sub_80F844C(a)->unk4; + return GetStory(a)->title; } const u8 *sub_80F8484(u32 a) { - return sub_80F844C(a)->unkC; + return GetStory(a)->fullText; } const u8 *sub_80F8490(u32 a) { - return sub_80F844C(a)->unk8; + return GetStory(a)->action; } u8 sub_80F849C(void) @@ -1147,30 +1147,30 @@ bool32 sub_80F8508(u32 a) return FALSE; } -void sub_80F8534(u32 a, void *b) +void GetStorytellerPlayerName(u32 player, void *dst) { - u8 *ptr = gSaveBlock1.mauvilleMan.storyteller.unk8[a]; + u8 *name = gSaveBlock1.mauvilleMan.storyteller.playerNames[player]; - memset(b, 0xFF, 8); - memcpy(b, ptr, 7); + memset(dst, EOS, 8); + memcpy(dst, name, 7); } -void sub_80F8560(u32 a, const u8 *b) +void SetStorytellerPlayerName(u32 player, const u8 *dst) { - u8 *ptr = gSaveBlock1.mauvilleMan.storyteller.unk8[a]; - u8 len = StringLength(b); + u8 *name = gSaveBlock1.mauvilleMan.storyteller.playerNames[player]; + u8 len = StringLength(dst); - memset(ptr, 0xFF, 7); - StringCopyN(ptr, b, len); + memset(name, EOS, 7); + StringCopyN(name, dst, len); } -void sub_80F8598(u32 a, u32 b) +void sub_80F8598(u32 player, u32 b) { struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; - storyteller->unk4[a] = b; - sub_80F8560(a, gSaveBlock2.playerName); - sub_80F84EC(a, sub_80F8438(b)); + storyteller->unk4[player] = b; + SetStorytellerPlayerName(player, gSaveBlock2.playerName); + sub_80F84EC(player, sub_80F8438(b)); ConvertIntToDecimalStringN(gStringVar1, sub_80F8438(b), 0, 10); StringCopy(gStringVar2, sub_80F8490(b)); } @@ -1207,8 +1207,8 @@ bool8 sub_80F8650(void) sub_80F85FC(arr, 36); for (i = 0; i < 36; i++) { - u8 r4 = gUnknown_083E53E0[arr[i]].unk0; - u8 r6 = gUnknown_083E53E0[arr[i]].unk1; + u8 r4 = sStorytellerStories[arr[i]].unk0; + u8 r6 = sStorytellerStories[arr[i]].unk1; struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; for (j = 0; j < 4; j++) @@ -1226,14 +1226,14 @@ bool8 sub_80F8650(void) return FALSE; } -void sub_80F8700(u32 a) +void sub_80F8700(u32 player) { struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; - u8 r6 = storyteller->unk4[a]; + u8 r6 = storyteller->unk4[player]; - ConvertIntToDecimalStringN(gStringVar1, sub_80F84C8(a), 0, 10); + ConvertIntToDecimalStringN(gStringVar1, sub_80F84C8(player), 0, 10); StringCopy(gStringVar2, sub_80F8490(r6)); - sub_80F8534(a, gStringVar3); + GetStorytellerPlayerName(player, gStringVar3); ShowFieldMessage(sub_80F8484(r6)); } diff --git a/src/trader.c b/src/trader.c index d289f72a8..4274d38de 100644 --- a/src/trader.c +++ b/src/trader.c @@ -62,7 +62,7 @@ void TraderSetup(void) struct MauvilleManTrader *trader = &gSaveBlock1.mauvilleMan.trader; trader->id = MAUVILLE_MAN_TRADER; - trader->unk31 = 0; + trader->alreadyTraded = FALSE; for (i = 0; i < 4; i++) { @@ -76,7 +76,7 @@ void TraderSetup(void) void sub_8109A20(void) { struct MauvilleManTrader *trader = &gSaveBlock1.mauvilleMan.trader; - trader->unk31 = 0; + trader->alreadyTraded = FALSE; } void sub_8109A30(u8 value) @@ -84,7 +84,7 @@ void sub_8109A30(u8 value) VarSet(VAR_RECYCLE_GOODS, value); } -void sub_8109A48(u8 taskId) +void CreateAvailableDecorationsMenu(u8 taskId) { u8 i; u8 numChoices = 1; @@ -140,7 +140,7 @@ void sub_8109B34(u8 taskId, u8 decorationId) EnableBothScriptContexts(); } -void sub_8109B7C(u8 taskId) +void Task_HandleGetDecorationMenuInput(u8 taskId) { struct MauvilleManTrader *trader = &gSaveBlock1.mauvilleMan.trader; @@ -175,13 +175,13 @@ void sub_8109B7C(u8 taskId) } } -void sub_8109C44(void) +void ScrSpecial_GetTraderTradedFlag(void) { struct MauvilleManTrader *trader = &gSaveBlock1.mauvilleMan.trader; - gScriptResult = trader->unk31; + gScriptResult = trader->alreadyTraded; } -void sub_8109C58(void) +void ScrSpecial_DoesPlayerHaveNoDecorations(void) { u8 i; @@ -196,7 +196,7 @@ void sub_8109C58(void) gScriptResult = TRUE; } -void sub_8109C90(void) +void ScrSpecial_IsDecorationFull(void) { gScriptResult = FALSE; if (gDecorations[gSpecialVar_0x8004].category != gDecorations[gSpecialVar_0x8006].category @@ -207,7 +207,7 @@ void sub_8109C90(void) } } -void sub_8109CF0(void) +void ScrSpecial_TraderMenuGiveDecoration(void) { CreateTask(sub_80FE7A8, 0); } @@ -243,7 +243,7 @@ void sub_8109DAC(u8 taskId) EnableBothScriptContexts(); } -void sub_8109DE0(void) +void ScrSpecial_TraderDoDecorationTrade(void) { struct MauvilleManTrader *trader = &gSaveBlock1.mauvilleMan.trader; @@ -252,11 +252,11 @@ void sub_8109DE0(void) StringCopy(trader->unk5[gSpecialVar_0x8005], gSaveBlock2.playerName); trader->unk1[gSpecialVar_0x8005] = gSpecialVar_0x8006; sub_810993C(); - trader->unk31 = 1; + trader->alreadyTraded = TRUE; } -void sub_8109E34(void) +void ScrSpecial_TraderMenuGetDecoration(void) { - u8 taskId = CreateTask(sub_8109B7C, 0); - sub_8109A48(taskId); + u8 taskId = CreateTask(Task_HandleGetDecorationMenuInput, 0); + CreateAvailableDecorationsMenu(taskId); } -- cgit v1.2.3 From 8eb47079f9c339f43f4b7d8dee494b495f799de1 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Fri, 25 Aug 2017 00:38:49 +0200 Subject: code review changes --- src/pokeblock_feed.c | 121 ++++++++++++++++++++++++++------------------------- 1 file changed, 62 insertions(+), 59 deletions(-) diff --git a/src/pokeblock_feed.c b/src/pokeblock_feed.c index 69917bf5d..8dc2f47de 100644 --- a/src/pokeblock_feed.c +++ b/src/pokeblock_feed.c @@ -92,30 +92,30 @@ s16 gUnknown_03005FA0[24]; static const u8 sNatureToMonPokeblockAnim[][2] = { { 0, 0 }, // HARDY - { 3, 0 }, // LONELY - { 4, 1 }, // BRAVE - { 5, 0 }, // ADAMANT - { 10, 0 }, // NAUGHTY - { 13, 0 }, // BOLD - { 15, 0 }, // DOCILE - { 16, 2 }, // RELAXED - { 18, 0 }, // IMPISH - { 19, 0 }, // LAX - { 20, 0 }, // TIMID - { 25, 0 }, // HASTY - { 27, 3 }, // SERIOUS - { 28, 0 }, // JOLLY - { 29, 0 }, // NAIVE - { 33, 4 }, // MODEST - { 36, 0 }, // MILD - { 37, 0 }, // QUIET - { 39, 0 }, // BASHFUL - { 42, 0 }, // RASH - { 45, 0 }, // CALM - { 46, 5 }, // GENTLE - { 47, 6 }, // SASSY - { 48, 0 }, // CAREFUL - { 53, 0 }, // QUIRKY + { 3, 0 }, // LONELY + { 4, 1 }, // BRAVE + { 5, 0 }, // ADAMANT + { 10, 0 }, // NAUGHTY + { 13, 0 }, // BOLD + { 15, 0 }, // DOCILE + { 16, 2 }, // RELAXED + { 18, 0 }, // IMPISH + { 19, 0 }, // LAX + { 20, 0 }, // TIMID + { 25, 0 }, // HASTY + { 27, 3 }, // SERIOUS + { 28, 0 }, // JOLLY + { 29, 0 }, // NAIVE + { 33, 4 }, // MODEST + { 36, 0 }, // MILD + { 37, 0 }, // QUIET + { 39, 0 }, // BASHFUL + { 42, 0 }, // RASH + { 45, 0 }, // CALM + { 46, 5 }, // GENTLE + { 47, 6 }, // SASSY + { 48, 0 }, // CAREFUL + { 53, 0 }, // QUIRKY }; static const s16 sMonPokeblockAnims[][10] = @@ -228,7 +228,7 @@ static const s16 sMonPokeblockAnims[][10] = static const union AffineAnimCmd sSpriteAffineAnim_8411E90[] = { - AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), AFFINEANIMCMD_END }; @@ -242,7 +242,7 @@ static const union AffineAnimCmd sSpriteAffineAnim_8411EA0[] = static const union AffineAnimCmd sSpriteAffineAnim_8411EC0[] = { - AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), AFFINEANIMCMD_FRAME(0, 0, 12, 1), AFFINEANIMCMD_FRAME(0, 0, 0, 28), AFFINEANIMCMD_FRAME(0, 0, -4, 3), @@ -259,7 +259,7 @@ static const union AffineAnimCmd sSpriteAffineAnim_8411EE8[] = static const union AffineAnimCmd sSpriteAffineAnim_8411F08[] = { - AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 16), AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 32), AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 16), @@ -276,7 +276,7 @@ static const union AffineAnimCmd sSpriteAffineAnim_8411F30[] = static const union AffineAnimCmd sSpriteAffineAnim_8411F50[] = { - AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 8), AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 16), AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 8), @@ -293,7 +293,7 @@ static const union AffineAnimCmd sSpriteAffineAnim_8411F78[] = static const union AffineAnimCmd sSpriteAffineAnim_8411F98[] = { - AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 8), AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 32), AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 8), @@ -310,7 +310,7 @@ static const union AffineAnimCmd sSpriteAffineAnim_8411FC0[] = static const union AffineAnimCmd sSpriteAffineAnim_8411FE0[] = { - AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 4), AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 24), AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 4), @@ -327,7 +327,7 @@ static const union AffineAnimCmd sSpriteAffineAnim_8412008[] = static const union AffineAnimCmd sSpriteAffineAnim_8412028[] = { - AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 24), AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 16), AFFINEANIMCMD_FRAME(0x0, 0x0, -12, 2), @@ -379,7 +379,7 @@ static const u8* const sPokeblocksPals[] = static const union AffineAnimCmd sSpriteAffineAnim_84120DC[] = { - AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), AFFINEANIMCMD_END }; @@ -390,7 +390,7 @@ static const union AffineAnimCmd *const sSpriteAffineAnimTable_84120EC[] = static const union AffineAnimCmd sSpriteAffineAnim_84120F0[] = { - AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 1), AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 1), AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 1), @@ -399,13 +399,13 @@ static const union AffineAnimCmd sSpriteAffineAnim_84120F0[] = AFFINEANIMCMD_FRAME(0x0, 0x0, 16, 1), AFFINEANIMCMD_FRAME(0x0, 0x0, 16, 1), AFFINEANIMCMD_FRAME(0x0, 0x0, 16, 1), - AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), AFFINEANIMCMD_END }; static const union AffineAnimCmd sSpriteAffineAnim_8412148[] = { - AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 1), AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 1), AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 1), @@ -414,7 +414,7 @@ static const union AffineAnimCmd sSpriteAffineAnim_8412148[] = AFFINEANIMCMD_FRAME(0x0, 0x0, -16, 1), AFFINEANIMCMD_FRAME(0x0, 0x0, -16, 1), AFFINEANIMCMD_FRAME(0x0, 0x0, -16, 1), - AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), AFFINEANIMCMD_END }; @@ -464,7 +464,7 @@ static const union AnimCmd *const sThrownPokeblockAnimTable[] = static const union AffineAnimCmd sSpriteAffineAnim_84121C0[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), - AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 1), + AFFINEANIMCMD_FRAME(-8, -8, 0, 1), AFFINEANIMCMD_JUMP(1) }; @@ -582,9 +582,9 @@ static bool8 TransitionToPokeblockFeedScene(void) BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); gPaletteFade.bufferTransferDisabled = 0; SetMainCallback2(CB2_PokeblockFeed); - return 1; + return TRUE; } - return 0; + return FALSE; } void CB2_PreparePokeblockFeedScene(void) @@ -660,9 +660,9 @@ static bool8 sub_8147B20(struct Pokemon* mon) case 8: LoadCompressedPalette(gBattleTerrainPalette_BattleTower, 0x20, 0x60); ewram[0x1FFFF] = 0; - return 1; + return TRUE; } - return 0; + return FALSE; } static void SetPokeblockFeedSpritePal(u8 pkbID) @@ -912,7 +912,7 @@ static bool8 sub_8148540(void) for (i = 0; i < 10; i++) gUnknown_03005FA0[i] = sMonPokeblockAnims[gUnknown_03005F40][i]; if (gUnknown_03005FA0[4] == 0) - return 1; + return TRUE; else { gUnknown_03005FA0[10] = Sin(gUnknown_03005FA0[0], gUnknown_03005FA0[2]); @@ -924,27 +924,30 @@ static bool8 sub_8148540(void) gUnknown_03005FA0[4] = gUnknown_03005FA0[12]; sub_814862C(); gUnknown_03005FA0[4] = gUnknown_03005FA0[12]; - return 0; + return FALSE; } } +#define ewram1D000 ((u16 *)(ewram + 0x1D000)) +#define ewram1D400 ((u16 *)(ewram + 0x1D400)) + static bool8 sub_81485CC(void) { u16 var = gUnknown_03005FA0[12] - gUnknown_03005FA0[4]; - gPokeblockFeedPokeSprite->pos2.x = (*((u16*)(&ewram[0x1D000]) + var)); - gPokeblockFeedPokeSprite->pos2.y = (*((u16*)(&ewram[0x1D400]) + var)); + gPokeblockFeedPokeSprite->pos2.x = ewram1D000[var]; + gPokeblockFeedPokeSprite->pos2.y = ewram1D400[var]; if (--gUnknown_03005FA0[4] == 0) - return 1; + return TRUE; else - return 0; + return FALSE; } static bool8 FreePokeSpriteMatrix(void) { FreeSpriteOamMatrix(gPokeblockFeedPokeSprite); - return 0; + return FALSE; } static void sub_814862C(void) @@ -957,23 +960,23 @@ static void sub_814862C(void) for (i = 0; i < r7 - 1; i++) { - s16* r3 = (((u16*)(&ewram[0x1D000]) + (r8 + i))); + s16* r3 = &ewram1D000[r8 + i]; s16 r1 = *r3 - (var3); - s16* r5 = (((u16*)(&ewram[0x1D400]) + (r8 + i))); + s16* r5 = &ewram1D400[r8 + i]; s16 r4 = *r5 - r9; *r3 -= r1 * (i + 1) / r7; *r5 -= r4 * (i + 1) / r7; } - *((u16*)(&ewram[0x1CFFE]) + (r8 + r7)) = var3; - *((u16*)(&ewram[0x1D3FE]) + (r8 + r7)) = r9; + ewram1D000[(r8 + r7) - 1] = var3; + ewram1D400[(r8 + r7) - 1] = r9; } void sub_8148710(void) { - bool8 var_24 = 0; + bool8 var_24 = FALSE; s16 r8 = gUnknown_03005FA0[13] - gUnknown_03005FA0[10]; s16 r7 = gUnknown_03005FA0[14] - gUnknown_03005FA0[11]; while (1) @@ -987,22 +990,22 @@ void sub_8148710(void) gUnknown_03005FA0[3] = r5; if (gUnknown_03005FA0[2] < 0) - var_24 = 1; + var_24 = TRUE; r4 = gUnknown_03005FA0[12] - gUnknown_03005FA0[4]; if (gUnknown_03005FA0[4] == 0) break; - if (var_24 == 0) + if (!var_24) { - *((u16*)(&ewram[0x1D000]) + r4) = Sin(gUnknown_03005FA0[0], gUnknown_03005FA0[2] + r5 / 256) + r8; - *((u16*)(&ewram[0x1D400]) + r4) = Cos(gUnknown_03005FA0[0], gUnknown_03005FA0[3] + r5 / 256) + r7; + ewram1D000[r4] = Sin(gUnknown_03005FA0[0], gUnknown_03005FA0[2] + r5 / 256) + r8; + ewram1D400[r4] = Cos(gUnknown_03005FA0[0], gUnknown_03005FA0[3] + r5 / 256) + r7; } else { - *((u16*)(&ewram[0x1D000]) + r4) = Sin(gUnknown_03005FA0[0], gUnknown_03005FA0[2] - r5 / 256) + r8; - *((u16*)(&ewram[0x1D400]) + r4) = Cos(gUnknown_03005FA0[0], gUnknown_03005FA0[3] - r5 / 256) + r7; + ewram1D000[r4] = Sin(gUnknown_03005FA0[0], gUnknown_03005FA0[2] - r5 / 256) + r8; + ewram1D400[r4] = Cos(gUnknown_03005FA0[0], gUnknown_03005FA0[3] - r5 / 256) + r7; } gUnknown_03005FA0[0] += gUnknown_03005FA0[1]; -- cgit v1.2.3 From ded9b4a8d0a59dab3882ab3fe43817bc38bca834 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Thu, 24 Aug 2017 19:13:29 -0500 Subject: more labeling --- include/bard_music.h | 32 ++++---- include/easy_chat.h | 4 +- include/text.h | 1 + src/bard_music.c | 47 +++++------ src/easy_chat.c | 25 +++--- src/mail.c | 2 +- src/mauville_old_man.c | 214 ++++++++++++++++++++++++++----------------------- src/trainer_card.c | 2 +- src/tv.c | 22 ++--- 9 files changed, 180 insertions(+), 169 deletions(-) diff --git a/include/bard_music.h b/include/bard_music.h index 8b547ff39..d0cb49ace 100644 --- a/include/bard_music.h +++ b/include/bard_music.h @@ -11,33 +11,33 @@ struct UnkBard /*0x00*/ u8 var00; /*0x01*/ s8 var01; /*0x02*/ u16 var02; - /*0x04*/ u16 var04; + /*0x04*/ u16 volume; /*0x06*/ u16 var06; }; -struct UnkBard3 +struct BardPhoneme { - /*0x00*/ u16 var00; - /*0x02*/ u16 var02; - /*0x04*/ s16 var04; - /*0x06*/ u16 var06; + /*0x00*/ u16 sound; + /*0x02*/ u16 length; + /*0x04*/ s16 pitch; + /*0x06*/ u16 volume; }; -struct UnkBard2 +struct BardSong { - /*0x00*/ u8 var00; - /*0x01*/ u8 var01; - /*0x02*/ u8 var02; - /*0x03*/ u8 var03; + /*0x00*/ u8 currWord; + /*0x01*/ u8 currPhoneme; + /*0x02*/ u8 phonemeTimer; + /*0x03*/ u8 state; /*0x04*/ s16 var04; /*0x06*/ u16 volume; /*0x08*/ s16 pitch; - /*0x0A*/ s16 var0A; - /*0x0C*/ u16 var0C[6]; - /*0x18*/ struct UnkBard3 var18[6]; + /*0x0A*/ s16 voiceInflection; + /*0x0C*/ u16 lyrics[6]; + /*0x18*/ struct BardPhoneme phonemes[6]; }; -struct BardSound *sub_814A2D0(u16 arg0, u16 arg1); -s32 sub_814A2EC(struct UnkBard2 *dest, struct UnkBard *src, u16 arg2); +struct UnkBard *GetWordSoundInfo(u16 arg0, u16 arg1); +s32 GetWordPhonemes(struct BardSong *dest, struct UnkBard *src, u16 arg2); #endif // GUARD_BARD_MUSIC_H diff --git a/include/easy_chat.h b/include/easy_chat.h index 03e9bb737..614dce50d 100644 --- a/include/easy_chat.h +++ b/include/easy_chat.h @@ -26,6 +26,8 @@ enum { EC_GROUP_POKEMON_2, }; +#define EC_GROUP(word) ((word) >> 9) +#define EC_INDEX(word) ((word) & 0x1FF) u16 sub_80EB72C(u16 group); void sub_80EB6FC(u16 *, u16); @@ -33,7 +35,7 @@ void InitEasyChatPhrases(void); u8 sub_80EAD7C(u8 group); u16 sub_80EAE88(u8); u8 sub_80EB37C(u16); -u8* sub_80EB3FC(u8 *, u16); +u8* EasyChat_GetWordText(u8 *, u16); u8 *ConvertEasyChatWordsToString(u8 *dst, u16 *words, u16, u16); u16 sub_80EB784(u16 group); u8 sub_80EB868(u8); diff --git a/include/text.h b/include/text.h index 99987d2c3..022c65fb9 100644 --- a/include/text.h +++ b/include/text.h @@ -2,6 +2,7 @@ #define GUARD_TEXT_H #define CHAR_SPACE 0x00 +#define CHAR_SONG_WORD_SEPARATOR 0x37 // separates words in the bard song. Not sure if it's used for anything else #define CHAR_0 0xA1 #define CHAR_QUESTION_MARK 0xAC #define CHAR_PERIOD 0xAD diff --git a/src/bard_music.c b/src/bard_music.c index ce2a1e9ec..593376f35 100644 --- a/src/bard_music.c +++ b/src/bard_music.c @@ -2,36 +2,33 @@ #include "bard_music.h" #include "easy_chat.h" -extern struct BardSound *gBardMusicTable[]; +extern struct UnkBard (*gBardMusicTable[])[][6]; extern s16 *gUnknown_08417068[]; extern u32 gUnknown_084170F4[]; -static s16 sub_814A2B8(u32 arg0, u32 arg1) +static s16 CalcWordPitch(u32 arg0, u32 songPos) { - return gUnknown_08417068[arg0][arg1]; + return gUnknown_08417068[arg0][songPos]; } #if ENGLISH -struct BardSound *sub_814A2D0(u16 arg0, u16 arg1) +struct UnkBard *GetWordSoundInfo(u16 group, u16 word) { - struct BardSound *sounds = gBardMusicTable[arg0]; + struct UnkBard (*sounds)[][6] = gBardMusicTable[group]; - return &sounds[arg1]; + return (*sounds)[word]; } #elif GERMAN -struct BardSound *sub_814A2D0(u16 arg0, u16 arg1) +struct UnkBard *GetWordSoundInfo(u16 group, u16 word) { - u32 index; - struct BardSound *sounds; + struct UnkBard (*sounds)[][6] = gBardMusicTable[group]; + u32 index = de_sub_80EB748(group, word); - sounds = gBardMusicTable[arg0]; - index = de_sub_80EB748(arg0, arg1); - - return &sounds[index]; + return (*sounds)[index]; } #endif -s32 sub_814A2EC(struct UnkBard2 *dest, struct UnkBard *src, u16 arg2) +s32 GetWordPhonemes(struct BardSong *song, struct UnkBard *src, u16 arg2) { s32 i; s32 j; @@ -39,25 +36,25 @@ s32 sub_814A2EC(struct UnkBard2 *dest, struct UnkBard *src, u16 arg2) for (i = 0; i < 6; i++) { - dest->var18[i].var00 = src[i].var00; + song->phonemes[i].sound = src[i].var00; if (src[i].var00 != 0xFF) { - s32 r1 = src[i].var01 +gUnknown_084170F4[src[i].var00]; + s32 r1 = src[i].var01 + gUnknown_084170F4[src[i].var00]; - dest->var18[i].var02 = r1; - dest->var18[i].var06 = src[i].var04; - dest->var04 += r1; + song->phonemes[i].length = r1; + song->phonemes[i].volume = src[i].volume; + song->var04 += r1; } } for (j = 0, thirty = 30; j < i; j++) - dest->var18[j].var04 = sub_814A2B8(thirty + arg2, j); + song->phonemes[j].pitch = CalcWordPitch(thirty + arg2, j); - dest->var00++; - dest->var01 = 0; - dest->var02 = 0; - dest->var03 = 0; - dest->var0A = 0; + song->currWord++; + song->currPhoneme = 0; + song->phonemeTimer = 0; + song->state = 0; + song->voiceInflection = 0; //warning: no return statement in function returning non-void } diff --git a/src/easy_chat.c b/src/easy_chat.c index e0073d8d8..8fae62872 100644 --- a/src/easy_chat.c +++ b/src/easy_chat.c @@ -19,7 +19,8 @@ extern const u8 gEasyChatGroupSizes[]; extern u16 gSpecialVar_0x8004; -u8 *sub_80EB3FC(u8 *dst, u16 word) +// returns the end of the destination buffer text +u8 *EasyChat_GetWordText(u8 *dst, u16 word) { u16 group; u16 wordIndex; @@ -31,13 +32,13 @@ u8 *sub_80EB3FC(u8 *dst, u16 word) if (word == 0xFFFF) { - dst[0] = EOS; + *dst = EOS; return dst; } else { - group = word >> 9; - wordIndex = word & 0x1FF; + group = EC_GROUP(word); + wordIndex = EC_INDEX(word); switch (group) { case EC_GROUP_POKEMON: // 0 @@ -58,7 +59,7 @@ u8 *sub_80EB3FC(u8 *dst, u16 word) dst = StringCopy(dst, src); break; } - dst[0] = EOS; + *dst = EOS; return dst; } } @@ -76,7 +77,7 @@ u8 *ConvertEasyChatWordsToString(u8 *dst, u16 *words, u16 arg2, u16 arg3) for (n = 0; n < i1; n++) { - dst = sub_80EB3FC(dst, words[0]); + dst = EasyChat_GetWordText(dst, words[0]); if (words[0] != 0xFFFF) { @@ -89,7 +90,7 @@ u8 *ConvertEasyChatWordsToString(u8 *dst, u16 *words, u16 arg2, u16 arg3) word = words[0]; words++; - dst = sub_80EB3FC(dst, word); + dst = EasyChat_GetWordText(dst, word); dst[0] = CHAR_NEWLINE; dst++; @@ -114,7 +115,7 @@ u8 *sub_80EB544(u8 *dst, u16 *words, u16 arg2, u16 arg3) for (n = 0; n < i1; n++) { - dst = sub_80EB3FC(dst, words[0]); + dst = EasyChat_GetWordText(dst, words[0]); if (words[0] != 0xFFFF) { @@ -127,7 +128,7 @@ u8 *sub_80EB544(u8 *dst, u16 *words, u16 arg2, u16 arg3) word = words[0]; words++; - dst = sub_80EB3FC(dst, word); + dst = EasyChat_GetWordText(dst, word); // Only difference with ConvertEasyChatWordsToString dst[0] = (i == 0) ? CHAR_NEWLINE : CHAR_PROMPT_SCROLL; @@ -152,8 +153,8 @@ u16 unref_sub_80EB5E0(u16 arg0) if (arg0 == 0xFFFF) return 0; - group = arg0 >> 9; - word = arg0 & 0x1FF; + group = EC_GROUP(arg0); + word = EC_INDEX(arg0); switch (group) { case EC_GROUP_POKEMON: // 0 @@ -320,7 +321,7 @@ void sub_80EB83C(void) group = EC_GROUP_LIFESTYLE; local2 = sub_80EB784(group); - sub_80EB3FC(gStringVar2, local2); + EasyChat_GetWordText(gStringVar2, local2); } u8 sub_80EB868(u8 arg0) diff --git a/src/mail.c b/src/mail.c index 658d37976..fb9251a5d 100644 --- a/src/mail.c +++ b/src/mail.c @@ -92,7 +92,7 @@ void HandleReadMail(struct MailStruct *arg0, MainCallback arg1, bool8 arg2) ewram0.varFF = GAME_LANGUAGE; ewram0.var100 = 1; - ewram0.var104 = (MainCallback)sub_80EB3FC; + ewram0.var104 = (MainCallback)EasyChat_GetWordText; ewram0.var108 = (MainCallback)ConvertEasyChatWordsToString; mailDesign = arg0->itemId - ITEM_ORANGE_MAIL; diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index e5d661e4a..3cf5265c0 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -133,7 +133,7 @@ extern const u8 gTextStoryteller_Story36Title[]; extern const u8 gTextStoryteller_Story36Action[]; extern const u8 gTextStoryteller_Story36Text[]; -extern struct UnkBard2 gUnknown_03005DA0; +extern struct BardSong gUnknown_03005DA0; extern u16 gUnknown_020388BC; // set but not used? @@ -248,7 +248,7 @@ void SetupMauvilleOldMan(void) sub_80F83D0(); } -//#define TEST MAUVILLE_MAN_STORYTELLER +//#define TEST MAUVILLE_MAN_BARD #ifdef TEST // Safely changes man to test functionality @@ -319,52 +319,58 @@ void ScrSpecial_SaveBardSongLyrics(void) bard->hasChangedSong = TRUE; } -// prepare song? -void sub_80F7BA0(void) +// Copies lyrics into gStringVar4 +void PrepareSongText(void) { struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard; u16 specialVar = gSpecialVar_0x8004; // It's a bit odd to use this temp variable, but it seems needed to match. u16 *lyrics; - u16 i; - u8 *ptr; - u8 *r4; + u16 lineNum; + u8 *wordEnd; + u8 *str; lyrics = bard->temporaryLyrics; if (specialVar == 0) lyrics = bard->songLyrics; - ptr = gStringVar4; - r4 = ptr; - for (i = 0; i < 2; i++) + wordEnd = gStringVar4; + str = wordEnd; + // Put three words on each line + for (lineNum = 0; lineNum < 2; lineNum++) { - ptr = sub_80EB3FC(ptr, *(lyrics++)); - while (ptr != r4) + wordEnd = EasyChat_GetWordText(wordEnd, *(lyrics++)); + while (wordEnd != str) { - if (*r4 == 0) - *r4 = 0x37; - r4++; + if (*str == CHAR_SPACE) + *str = CHAR_SONG_WORD_SEPARATOR; + str++; } - r4++; - *(ptr++) = CHAR_SPACE; - ptr = sub_80EB3FC(ptr, *(lyrics++)); - while (ptr != r4) + + str++; + *(wordEnd++) = CHAR_SPACE; + + wordEnd = EasyChat_GetWordText(wordEnd, *(lyrics++)); + while (wordEnd != str) { - if (*r4 == 0) - *r4 = 0x37; - r4++; + if (*str == CHAR_SPACE) + *str = CHAR_SONG_WORD_SEPARATOR; + str++; } - r4++; - *(ptr++) = CHAR_NEWLINE; - ptr = sub_80EB3FC(ptr, *(lyrics++)); - while (ptr != r4) + + str++; + *(wordEnd++) = CHAR_NEWLINE; + + wordEnd = EasyChat_GetWordText(wordEnd, *(lyrics++)); + while (wordEnd != str) { - if (*r4 == 0) - *r4 = 0x37; - r4++; + if (*str == CHAR_SPACE) + *str = CHAR_SONG_WORD_SEPARATOR; + str++; } - if (i == 0) + + if (lineNum == 0) { - *(ptr++) = EXT_CTRL_CODE_BEGIN; - *(ptr++) = 0xF; + *(wordEnd++) = EXT_CTRL_CODE_BEGIN; + *(wordEnd++) = 15; } } } @@ -401,7 +407,7 @@ void ScrSpecial_HipsterTeachWord(void) } else { - sub_80EB3FC(gStringVar1, var); + EasyChat_GetWordText(gStringVar1, var); gScriptResult = TRUE; } } @@ -434,7 +440,7 @@ void ScrSpecial_GenerateGiddyLine(void) u32 adjective = Random(); adjective %= 8; - stringPtr = sub_80EB3FC(gStringVar4, giddy->mauvilleOldMan_ecArray[giddy->unk1]); + stringPtr = EasyChat_GetWordText(gStringVar4, giddy->mauvilleOldMan_ecArray[giddy->unk1]); stringPtr = StringCopy(stringPtr, gOtherText_Is); stringPtr = StringCopy(stringPtr, gGiddyAdjectives[adjective]); StringCopy(stringPtr, gOtherText_DontYouAgree); @@ -761,105 +767,112 @@ void sub_80F7F30(void) sub_80F83D0(); } -void StartBardSong(u8 a) +#define tState data[0] +#define tCharIndex data[3] +#define tCurrWord data[4] +#define tUseTemporaryLyrics data[5] + +void StartBardSong(bool8 useTemporaryLyrics) { u8 taskId = CreateTask(Task_BardSong, 0x50); - gTasks[taskId].data[5] = a; + gTasks[taskId].tUseTemporaryLyrics = useTemporaryLyrics; } -void BardSingWord(struct Task *task, struct UnkBard2 *b) +void BardSingWord(struct Task *task, struct BardSong *song) { - switch (task->data[0]) + switch (task->tState) { - case 0: + case 0: // Initialize song { struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard; - u16 *r2; + u16 *lyrics; s32 i; + // Copy lyrics if (gSpecialVar_0x8004 == 0) - r2 = bard->songLyrics; + lyrics = bard->songLyrics; else - r2 = bard->temporaryLyrics; + lyrics = bard->temporaryLyrics; for (i = 0; i < 6; i++) - b->var0C[i] = r2[i]; + song->lyrics[i] = lyrics[i]; + for (i = 0; i < 6; i++) { - b->var18[i].var00 = 0xFFFF; - b->var18[i].var02 = 0; - b->var18[i].var04 = 0; - b->var18[i].var06 = 0; + song->phonemes[i].sound = 0xFFFF; + song->phonemes[i].length = 0; + song->phonemes[i].pitch = 0; + song->phonemes[i].volume = 0; } - b->var00 = 0; - b->var01 = 0; - b->var04 = 0; + song->currWord = 0; + song->currPhoneme = 0; + song->var04 = 0; } break; - case 1: + case 1: // Wait for BGM to end break; - case 2: + case 2: // Initialize word { - u16 r4 = b->var0C[b->var00]; + u16 word = song->lyrics[song->currWord]; // TODO: fix this return type - struct UnkBard *r1 = (struct UnkBard *)sub_814A2D0(r4 / 0x200, r4 % 0x200); + struct UnkBard *sounds = GetWordSoundInfo(EC_GROUP(word), EC_INDEX(word)); - b->var04 = 0; - sub_814A2EC(b, r1, (r4 % 4) + ((r4 / 8) & 1)); + song->var04 = 0; + GetWordPhonemes(song, r1, MACRO1(word)); } break; case 3: case 4: { - struct UnkBard3 *r7 = &b->var18[b->var01]; + struct BardPhoneme *phoneme = &song->phonemes[song->currPhoneme]; - switch (b->var03) + switch (song->state) { case 0: - if (b->var02 == 0) + if (song->phonemeTimer == 0) // Timer has expired. Move to next phoneme { - if (b->var01 == 6 || r7->var00 == 0xFF) + if (song->currPhoneme == 6 || phoneme->sound == 0xFF) { - b->var03 = 0xFE; + song->state = 0xFE; break; } - b->var02 = r7->var02; - if (r7->var00 <= 50) + song->phonemeTimer = phoneme->length; + if (phoneme->sound <= 50) { - u16 r1 = r7->var00 / 3; + u16 num = phoneme->sound / 3; - m4aSongNumStart(249 + r1 * 3); + m4aSongNumStart(249 + num * 3); } - b->var03 = 1; + song->state = 1; } else { - if (b->var0A > 10) - b->volume -= 2; - if (b->var0A & 1) - b->pitch += 64; + if (song->voiceInflection > 10) + song->volume -= 2; + if (song->voiceInflection & 1) + song->pitch += 64; else - b->pitch -= 64; - m4aMPlayVolumeControl(&gMPlay_SE2, 0xFFFF, b->volume); - m4aMPlayPitchControl(&gMPlay_SE2, 0xFFFF, b->pitch); - b->var0A++; + song->pitch -= 64; + m4aMPlayVolumeControl(&gMPlay_SE2, 0xFFFF, song->volume); + m4aMPlayPitchControl(&gMPlay_SE2, 0xFFFF, song->pitch); + song->voiceInflection++; } - b->var02--; + song->phonemeTimer--; break; case 1: - b->var01++; - b->var03 = 0; - if (r7->var00 <= 50) + song->currPhoneme++; + song->state = 0; + if (phoneme->sound <= 50) { - b->volume = 0x100 + r7->var06 * 16; - m4aMPlayVolumeControl(&gMPlay_SE2, 0xFFFF, b->volume); - b->pitch = 0x200 + r7->var04; - m4aMPlayPitchControl(&gMPlay_SE2, 0xFFFF, b->pitch); + song->volume = 0x100 + phoneme->volume * 16; + m4aMPlayVolumeControl(&gMPlay_SE2, 0xFFFF, song->volume); + song->pitch = 0x200 + phoneme->pitch; + m4aMPlayPitchControl(&gMPlay_SE2, 0xFFFF, song->pitch); } break; case 0xFE: m4aMPlayStop(&gMPlay_SE2); - b->var03 = 0xFF; + song->state = 0xFF; break; } } @@ -869,9 +882,6 @@ void BardSingWord(struct Task *task, struct UnkBard2 *b) } } -#define tState data[0] -#define tCharIndex data[3] - void Task_BardSong(u8 taskId) { struct Task *task = &gTasks[taskId]; // r5 @@ -879,48 +889,48 @@ void Task_BardSong(u8 taskId) BardSingWord(task, &gUnknown_03005DA0); switch (task->tState) { - case 0: - sub_80F7BA0(); + case 0: // Initialize song + PrepareSongText(); InitWindowFromConfig(gMenuWindowPtr, &gWindowConfig_81E6CE4); sub_8002EB0(gMenuWindowPtr, gStringVar4, 2, 4, 15); task->data[1] = 0; task->data[2] = 0; task->tCharIndex = 0; - task->data[4] = 0; + task->tCurrWord = 0; FadeOutBGMTemporarily(4); task->tState = 1; break; - case 1: + case 1: // Wait for BGM to end if (IsBGMPausedOrStopped()) task->tState = 2; break; - case 2: + case 2: // Initialize word { struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard; - u8 *string = gStringVar4 + task->tCharIndex; + u8 *str = gStringVar4 + task->tCharIndex; u16 wordLen = 0; // Can't get it to match without hacking u32 temp; register s16 zero asm("r1"); - while (*string != CHAR_SPACE - && *string != CHAR_NEWLINE - && *string != EXT_CTRL_CODE_BEGIN - && *string != EOS) + while (*str != CHAR_SPACE + && *str != CHAR_NEWLINE + && *str != EXT_CTRL_CODE_BEGIN + && *str != EOS) { - string++; + str++; wordLen++; } - if (task->data[5] == 0) - gUnknown_020388BC = MACRO1(bard->songLyrics[task->data[4]]); + if (!task->tUseTemporaryLyrics) + gUnknown_020388BC = MACRO1(bard->songLyrics[task->tCurrWord]); else - gUnknown_020388BC = MACRO1(bard->temporaryLyrics[task->data[4]]); + gUnknown_020388BC = MACRO1(bard->temporaryLyrics[task->tCurrWord]); temp = gUnknown_03005DA0.var04 / wordLen; zero = 0; gUnknown_03005DA0.var04 = temp; if (gUnknown_03005DA0.var04 <= 0) gUnknown_03005DA0.var04 = 1; - task->data[4]++; + task->tCurrWord++; if (task->data[2] == 0) task->tState = 3; else @@ -961,7 +971,7 @@ void Task_BardSong(u8 taskId) task->tState = 2; task->data[2] = 8; } - else if (gStringVar4[task->tCharIndex] == 0x37) // What is 0x37 supposed to be? + else if (gStringVar4[task->tCharIndex] == CHAR_SONG_WORD_SEPARATOR) { gStringVar4[task->tCharIndex] = CHAR_SPACE; sub_8003418(gMenuWindowPtr); diff --git a/src/trainer_card.c b/src/trainer_card.c index 626c5a7bf..e64ec1c86 100644 --- a/src/trainer_card.c +++ b/src/trainer_card.c @@ -509,7 +509,7 @@ static void sub_8093688(void) ewram0.var_5 = 0; ewram0.var_6 = 0; for (i = 0; i < 4; i++) - sub_80EB3FC(ewram0.var_20[i], ewram0.var_64.var_28[i]); + EasyChat_GetWordText(ewram0.var_20[i], ewram0.var_64.var_28[i]); sub_80936D4(); } diff --git a/src/tv.c b/src/tv.c index a254bcd5f..996709209 100644 --- a/src/tv.c +++ b/src/tv.c @@ -388,7 +388,7 @@ bool8 GabbyAndTyGetLastQuote(void) if (gSaveBlock1.gabbyAndTyData.quote == 0xffff) return FALSE; - sub_80EB3FC(gStringVar1, gSaveBlock1.gabbyAndTyData.quote); + EasyChat_GetWordText(gStringVar1, gSaveBlock1.gabbyAndTyData.quote); gSaveBlock1.gabbyAndTyData.quote |= 0xffff; return TRUE; } @@ -1624,7 +1624,7 @@ void sub_80BF79C(TVShow *arg0) break; i++; } - sub_80EB3FC(gStringVar3, arg0->recentHappenings.var04[i]); + EasyChat_GetWordText(gStringVar3, arg0->recentHappenings.var04[i]); } u8 sub_80BF7E8(struct TVShowNameRaterShow *arg0) @@ -2575,20 +2575,20 @@ void DoTVShowBravoTrainerPokemonProfile(void) break; case 3: TVShowConvertInternationalString(gStringVar1, bravoTrainer->playerName, bravoTrainer->language); - sub_80EB3FC(gStringVar2, bravoTrainer->var04[0]); + EasyChat_GetWordText(gStringVar2, bravoTrainer->var04[0]); sub_80BF088(2, bravoTrainer->contestResult + 1); gUnknown_020387E8 = 5; break; case 4: TVShowConvertInternationalString(gStringVar1, bravoTrainer->playerName, bravoTrainer->language); - sub_80EB3FC(gStringVar2, bravoTrainer->var04[0]); + EasyChat_GetWordText(gStringVar2, bravoTrainer->var04[0]); sub_80BF088(2, bravoTrainer->contestResult + 1); gUnknown_020387E8 = 5; break; case 5: TVShowConvertInternationalString(gStringVar1, bravoTrainer->playerName, bravoTrainer->language); CopyContestCategoryToStringVar(1, bravoTrainer->contestCategory); - sub_80EB3FC(gStringVar3, bravoTrainer->var04[1]); + EasyChat_GetWordText(gStringVar3, bravoTrainer->var04[1]); if (bravoTrainer->var14) gUnknown_020387E8 = 6; else @@ -2597,7 +2597,7 @@ void DoTVShowBravoTrainerPokemonProfile(void) case 6: StringCopy(gStringVar1, gSpeciesNames[bravoTrainer->species]); StringCopy(gStringVar2, gMoveNames[bravoTrainer->var14]); - sub_80EB3FC(gStringVar3, bravoTrainer->var04[1]); + EasyChat_GetWordText(gStringVar3, bravoTrainer->var04[1]); gUnknown_020387E8 = 7; break; case 7: @@ -2680,7 +2680,7 @@ void DoTVShowBravoTrainerBattleTowerProfile(void) gUnknown_020387E8 = 11; break; case 11: - sub_80EB3FC(gStringVar1, bravoTrainerTower->var18[0]); + EasyChat_GetWordText(gStringVar1, bravoTrainerTower->var18[0]); if (bravoTrainerTower->var1b == 0) gUnknown_020387E8 = 12; else @@ -2688,7 +2688,7 @@ void DoTVShowBravoTrainerBattleTowerProfile(void) break; case 12: case 13: - sub_80EB3FC(gStringVar1, bravoTrainerTower->var18[0]); + EasyChat_GetWordText(gStringVar1, bravoTrainerTower->var18[0]); TVShowConvertInternationalString(gStringVar2, bravoTrainerTower->trainerName, bravoTrainerTower->language); TVShowConvertInternationalString(gStringVar3, bravoTrainerTower->pokemonName, bravoTrainerTower->language); gUnknown_020387E8 = 14; @@ -3106,12 +3106,12 @@ void DoTVShowPokemonFanClubOpinions(void) case 3: TVShowConvertInternationalString(gStringVar1, fanclubOpinions->playerName, fanclubOpinions->language); StringCopy(gStringVar2, gSpeciesNames[fanclubOpinions->var02]); - sub_80EB3FC(gStringVar3, fanclubOpinions->var1C[0]); + EasyChat_GetWordText(gStringVar3, fanclubOpinions->var1C[0]); gUnknown_020387E8 = 4; break; case 4: TVShowConvertInternationalString(gStringVar1, fanclubOpinions->playerName, fanclubOpinions->language); - sub_80EB3FC(gStringVar3, fanclubOpinions->var1C[1]); + EasyChat_GetWordText(gStringVar3, fanclubOpinions->var1C[1]); TVShowDone(); break; } @@ -3176,7 +3176,7 @@ void DoTVShowInSearchOfTrainers(void) gUnknown_020387E8 = 8; break; case 8: - sub_80EB3FC(gStringVar1, gSaveBlock1.gabbyAndTyData.quote); + EasyChat_GetWordText(gStringVar1, gSaveBlock1.gabbyAndTyData.quote); StringCopy(gStringVar2, gSpeciesNames[gSaveBlock1.gabbyAndTyData.mon1]); StringCopy(gStringVar3, gSpeciesNames[gSaveBlock1.gabbyAndTyData.mon2]); gScriptResult = 1; -- cgit v1.2.3 From df6720ea01ab251c3d90885d75847fc39cc862c9 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Thu, 24 Aug 2017 19:26:19 -0500 Subject: fix build --- include/bard_music.h | 18 +++--------------- src/bard_music.c | 27 ++++++++++++++++++--------- src/mauville_old_man.c | 4 ++-- 3 files changed, 23 insertions(+), 26 deletions(-) diff --git a/include/bard_music.h b/include/bard_music.h index d0cb49ace..529fd50f8 100644 --- a/include/bard_music.h +++ b/include/bard_music.h @@ -1,19 +1,7 @@ #ifndef GUARD_BARD_MUSIC_H #define GUARD_BARD_MUSIC_H -struct BardSound -{ - u8 pad_00[48]; -}; - -struct UnkBard -{ - /*0x00*/ u8 var00; - /*0x01*/ s8 var01; - /*0x02*/ u16 var02; - /*0x04*/ u16 volume; - /*0x06*/ u16 var06; -}; +struct BardSound; struct BardPhoneme { @@ -37,7 +25,7 @@ struct BardSong /*0x18*/ struct BardPhoneme phonemes[6]; }; -struct UnkBard *GetWordSoundInfo(u16 arg0, u16 arg1); -s32 GetWordPhonemes(struct BardSong *dest, struct UnkBard *src, u16 arg2); +const struct BardSound *GetWordSounds(u16 arg0, u16 arg1); +s32 GetWordPhonemes(struct BardSong *dest, const struct BardSound *src, u16 arg2); #endif // GUARD_BARD_MUSIC_H diff --git a/src/bard_music.c b/src/bard_music.c index 593376f35..5b7419735 100644 --- a/src/bard_music.c +++ b/src/bard_music.c @@ -2,7 +2,16 @@ #include "bard_music.h" #include "easy_chat.h" -extern struct UnkBard (*gBardMusicTable[])[][6]; +struct BardSound +{ + /*0x00*/ u8 var00; + /*0x01*/ s8 var01; + /*0x02*/ u16 var02; + /*0x04*/ u16 volume; + /*0x06*/ u16 var06; +}; + +extern const struct BardSound (*const gBardMusicTable[])[][6]; extern s16 *gUnknown_08417068[]; extern u32 gUnknown_084170F4[]; @@ -12,23 +21,23 @@ static s16 CalcWordPitch(u32 arg0, u32 songPos) } #if ENGLISH -struct UnkBard *GetWordSoundInfo(u16 group, u16 word) +const struct BardSound *GetWordSounds(u16 group, u16 word) { - struct UnkBard (*sounds)[][6] = gBardMusicTable[group]; + const struct BardSound (*sounds)[][6] = gBardMusicTable[group]; return (*sounds)[word]; } #elif GERMAN -struct UnkBard *GetWordSoundInfo(u16 group, u16 word) +struct BardSound *GetWordSounds(u16 group, u16 word) { - struct UnkBard (*sounds)[][6] = gBardMusicTable[group]; + struct BardSound (*sounds)[][6] = gBardMusicTable[group]; u32 index = de_sub_80EB748(group, word); return (*sounds)[index]; } #endif -s32 GetWordPhonemes(struct BardSong *song, struct UnkBard *src, u16 arg2) +s32 GetWordPhonemes(struct BardSong *song, struct BardSound *src, u16 arg2) { s32 i; s32 j; @@ -39,11 +48,11 @@ s32 GetWordPhonemes(struct BardSong *song, struct UnkBard *src, u16 arg2) song->phonemes[i].sound = src[i].var00; if (src[i].var00 != 0xFF) { - s32 r1 = src[i].var01 + gUnknown_084170F4[src[i].var00]; + s32 length = src[i].var01 + gUnknown_084170F4[src[i].var00]; - song->phonemes[i].length = r1; + song->phonemes[i].length = length; song->phonemes[i].volume = src[i].volume; - song->var04 += r1; + song->var04 += length; } } diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index 3cf5265c0..c8bbf8c86 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -815,10 +815,10 @@ void BardSingWord(struct Task *task, struct BardSong *song) { u16 word = song->lyrics[song->currWord]; // TODO: fix this return type - struct UnkBard *sounds = GetWordSoundInfo(EC_GROUP(word), EC_INDEX(word)); + const struct BardSound *sounds = GetWordSounds(EC_GROUP(word), EC_INDEX(word)); song->var04 = 0; - GetWordPhonemes(song, r1, MACRO1(word)); + GetWordPhonemes(song, sounds, MACRO1(word)); } break; case 3: -- cgit v1.2.3 From 19e06e09c9579c8230c66d6d0d267c5b722637e5 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Thu, 24 Aug 2017 19:37:36 -0500 Subject: actually fix build --- data-de/text/storyteller.inc | 18 +++++++++--------- data/scripts/mauville_man.inc | 26 +++++++++++++------------- data/text/storyteller.inc | 18 +++++++++--------- src/bard_music.c | 2 +- src/mauville_old_man.c | 4 ++-- 5 files changed, 34 insertions(+), 34 deletions(-) diff --git a/data-de/text/storyteller.inc b/data-de/text/storyteller.inc index 5a07d73cc..abcc8a4a8 100644 --- a/data-de/text/storyteller.inc +++ b/data-de/text/storyteller.inc @@ -4,22 +4,22 @@ gTextStoryteller_Introduction:: @ 81AECC6 .string "legendären TRAINERN.\p" .string "Soll ich dir etwas erzählen?$" -MauvilleCity_PokemonCenter_1F_Text_1AED1D:: @ 81AED1D +gTextStoryteller_OhIFeelStifled:: @ 81AED1D .string "Oh...\n" .string "Keiner mag mich...$" -MauvilleCity_PokemonCenter_1F_Text_1AED35:: @ 81AED35 +gTextStoryteller_WhichTale:: @ 81AED35 .string "Ich kenne viele dieser Legenden.\n" .string "Welche möchtest du hören?$" -MauvilleCity_PokemonCenter_1F_Text_1AED70:: @ 81AED70 +gTextStoryteller_ButIKnowOfNoLegendaryTrainers:: @ 81AED70 .string "Aber ich weiß nichts über legendäre\n" .string "TRAINER. Also habe ich keine Ge-\l" .string "schichte auf Lager.\p" .string "Wo findet man wohl einen TRAINER, der\n" .string "einer lebenden Legende gleicht?$" -MauvilleCity_PokemonCenter_1F_Text_1AEDE8:: @ 81AEDE8 +gTextStoryteller_BirthOfANewLegend:: @ 81AEDE8 .string "Was ist?\n" .string "Du... Du...\p" .string "{STR_VAR_2}\n" @@ -27,28 +27,28 @@ MauvilleCity_PokemonCenter_1F_Text_1AEDE8:: @ 81AEDE8 .string "Das ist einfach großartig!\n" .string "Die Geburt einer neuen Legende!$" -MauvilleCity_PokemonCenter_1F_Text_1AEE50:: @ 81AEE50 +gTextStoryteller_CouldThereBeOtherTrainers:: @ 81AEE50 .string "Ich überlege, ob es nicht noch andere\n" .string "TRAINER gibt, die mir beeindruckende\l" .string "Geschichten erzählen können.$" -MauvilleCity_PokemonCenter_1F_Text_1AEEB4:: @ 81AEEB4 +gTextStoryteller_HaveYouAnyTales:: @ 81AEEB4 .string "Bist du ein TRAINER?\p" .string "Dann sag mir, ob du Geschichten\n" .string "für mich hast, die legendär sind?$" -MauvilleCity_PokemonCenter_1F_Text_1AEF0A:: @ 81AEF0A +gTextStoryteller_HearAnotherLegendaryTale:: @ 81AEF0A .string "Übrigens... Möchtest du eine weitere\n" .string "legendäre Geschichte hören?$" -MauvilleCity_PokemonCenter_1F_Text_1AEF49:: @ 81AEF49 +gTextStoryteller_ImNotSatisfied:: @ 81AEF49 .string "Hmm...\n" .string "Ich bin nicht zufrieden...\p" .string "Ich wünschte, du würdest mir Neuig-\n" .string "keiten erzählen, die den Titel Legende\l" .string "verdienen.$" -MauvilleCity_PokemonCenter_1F_Text_1AEFA5:: @ 81AEFA5 +gTextStoryteller_WishMorePeopleWould:: @ 81AEFA5 .string "Ich wollte, mehr Leute würden sich für\n" .string "meine epischen Geschichten über\l" .string "legendäre TRAINER interessieren.$" diff --git a/data/scripts/mauville_man.inc b/data/scripts/mauville_man.inc index 780017442..6a8f5f051 100644 --- a/data/scripts/mauville_man.inc +++ b/data/scripts/mauville_man.inc @@ -204,13 +204,13 @@ speak_to_storyteller:: @ 81B0816 faceplayer msgbox gTextStoryteller_Introduction, MSGBOX_YESNO compare RESULT, NO - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0914 + jumpeq dont_hear_tale specialval RESULT, sub_80F889C compare RESULT, 0 jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B08D3 MauvilleCity_PokemonCenter_1F_EventScript_1B084F:: @ 81B084F - message MauvilleCity_PokemonCenter_1F_Text_1AED35 + message gTextStoryteller_WhichTale waittext special sub_80F8874 waitstate @@ -227,12 +227,12 @@ MauvilleCity_PokemonCenter_1F_EventScript_1B084F:: @ 81B084F MauvilleCity_PokemonCenter_1F_EventScript_1B0883:: @ 81B0883 compare 0x8008, 0 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0914 + jumpeq dont_hear_tale jump MauvilleCity_PokemonCenter_1F_EventScript_1B08AE MauvilleCity_PokemonCenter_1F_EventScript_1B0893:: @ 81B0893 - msgbox MauvilleCity_PokemonCenter_1F_Text_1AEE50, 4 - msgbox MauvilleCity_PokemonCenter_1F_Text_1AEF0A, MSGBOX_YESNO + msgbox gTextStoryteller_CouldThereBeOtherTrainers, 4 + msgbox gTextStoryteller_HearAnotherLegendaryTale, MSGBOX_YESNO compare RESULT, 1 jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B084F @@ -246,34 +246,34 @@ MauvilleCity_PokemonCenter_1F_EventScript_1B08AE:: @ 81B08AE jump MauvilleCity_PokemonCenter_1F_EventScript_1B08DB MauvilleCity_PokemonCenter_1F_EventScript_1B08D3:: @ 81B08D3 - msgbox MauvilleCity_PokemonCenter_1F_Text_1AED70, 4 + msgbox gTextStoryteller_ButIKnowOfNoLegendaryTrainers, 4 MauvilleCity_PokemonCenter_1F_EventScript_1B08DB:: @ 81B08DB - msgbox MauvilleCity_PokemonCenter_1F_Text_1AEEB4, MSGBOX_YESNO + msgbox gTextStoryteller_HaveYouAnyTales, MSGBOX_YESNO compare RESULT, 0 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0914 + jumpeq dont_hear_tale specialval RESULT, sub_80F88FC compare RESULT, 1 jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0909 - msgbox MauvilleCity_PokemonCenter_1F_Text_1AEF49, 4 + msgbox gTextStoryteller_ImNotSatisfied, 4 closebutton release end MauvilleCity_PokemonCenter_1F_EventScript_1B0909:: @ 81B0909 - msgbox MauvilleCity_PokemonCenter_1F_Text_1AEDE8, 4 + msgbox gTextStoryteller_BirthOfANewLegend, 4 closebutton release end -MauvilleCity_PokemonCenter_1F_EventScript_1B0914:: @ 81B0914 - msgbox MauvilleCity_PokemonCenter_1F_Text_1AED1D, 4 +dont_hear_tale:: @ 81B0914 + msgbox gTextStoryteller_OhIFeelStifled, 4 closebutton release end MauvilleCity_PokemonCenter_1F_EventScript_1B091F:: @ 81B091F - msgbox MauvilleCity_PokemonCenter_1F_Text_1AEFA5, 4 + msgbox gTextStoryteller_WishMorePeopleWould, 4 closebutton release end diff --git a/data/text/storyteller.inc b/data/text/storyteller.inc index ad131ec54..437a1fa21 100644 --- a/data/text/storyteller.inc +++ b/data/text/storyteller.inc @@ -4,21 +4,21 @@ gTextStoryteller_Introduction:: @ 81AECC6 .string "TRAINERS.\p" .string "Will you hear my tale?$" -MauvilleCity_PokemonCenter_1F_Text_1AED1D:: @ 81AED1D +gTextStoryteller_OhIFeelStifled:: @ 81AED1D .string "Oh...\n" .string "I feel stifled...$" -MauvilleCity_PokemonCenter_1F_Text_1AED35:: @ 81AED35 +gTextStoryteller_WhichTale:: @ 81AED35 .string "I know of these legends.\n" .string "Which tale will you have me tell?$" -MauvilleCity_PokemonCenter_1F_Text_1AED70:: @ 81AED70 +gTextStoryteller_ButIKnowOfNoLegendaryTrainers:: @ 81AED70 .string "But, I know of no legendary TRAINERS.\n" .string "Hence, I know no tales.\p" .string "Where does one find a TRAINER worthy\n" .string "of a legendary tale?$" -MauvilleCity_PokemonCenter_1F_Text_1AEDE8:: @ 81AEDE8 +gTextStoryteller_BirthOfANewLegend:: @ 81AEDE8 .string "What’s that?!\n" .string "You... You...\p" .string "{STR_VAR_2}\n" @@ -26,27 +26,27 @@ MauvilleCity_PokemonCenter_1F_Text_1AEDE8:: @ 81AEDE8 .string "That is indeed magnificent!\n" .string "It’s the birth of a new legend!$" -MauvilleCity_PokemonCenter_1F_Text_1AEE50:: @ 81AEE50 +gTextStoryteller_CouldThereBeOtherTrainers:: @ 81AEE50 .string "It gets me thinking, could there be\n" .string "other TRAINERS with more impressive\l" .string "legends awaiting discovery?$" -MauvilleCity_PokemonCenter_1F_Text_1AEEB4:: @ 81AEEB4 +gTextStoryteller_HaveYouAnyTales:: @ 81AEEB4 .string "Are you a TRAINER?\p" .string "Then tell me, have you any tales that\n" .string "are even remotely legendary?$" -MauvilleCity_PokemonCenter_1F_Text_1AEF0A:: @ 81AEF0A +gTextStoryteller_HearAnotherLegendaryTale:: @ 81AEF0A .string "Incidentally... Would you care to hear\n" .string "another legendary tale?$" -MauvilleCity_PokemonCenter_1F_Text_1AEF49:: @ 81AEF49 +gTextStoryteller_ImNotSatisfied:: @ 81AEF49 .string "Hmm...\n" .string "I’m not satisfied...\p" .string "I wish you would bring me news worthy\n" .string "of being called a legend.$" -MauvilleCity_PokemonCenter_1F_Text_1AEFA5:: @ 81AEFA5 +gTextStoryteller_WishMorePeopleWould:: @ 81AEFA5 .string "I wish more people would be interested\n" .string "in hearing my epic tales of legendary\l" .string "TRAINERS.$" diff --git a/src/bard_music.c b/src/bard_music.c index 5b7419735..da628867b 100644 --- a/src/bard_music.c +++ b/src/bard_music.c @@ -37,7 +37,7 @@ struct BardSound *GetWordSounds(u16 group, u16 word) } #endif -s32 GetWordPhonemes(struct BardSong *song, struct BardSound *src, u16 arg2) +s32 GetWordPhonemes(struct BardSong *song, const struct BardSound *src, u16 arg2) { s32 i; s32 j; diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index c8bbf8c86..9e392a65a 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -797,6 +797,7 @@ void BardSingWord(struct Task *task, struct BardSong *song) for (i = 0; i < 6; i++) song->lyrics[i] = lyrics[i]; + // Clear phonemes for (i = 0; i < 6; i++) { song->phonemes[i].sound = 0xFFFF; @@ -814,7 +815,6 @@ void BardSingWord(struct Task *task, struct BardSong *song) case 2: // Initialize word { u16 word = song->lyrics[song->currWord]; - // TODO: fix this return type const struct BardSound *sounds = GetWordSounds(EC_GROUP(word), EC_INDEX(word)); song->var04 = 0; @@ -973,7 +973,7 @@ void Task_BardSong(u8 taskId) } else if (gStringVar4[task->tCharIndex] == CHAR_SONG_WORD_SEPARATOR) { - gStringVar4[task->tCharIndex] = CHAR_SPACE; + gStringVar4[task->tCharIndex] = CHAR_SPACE; // restore it back to a space sub_8003418(gMenuWindowPtr); task->tCharIndex++; task->data[2] = 0; -- cgit v1.2.3 From 670255f950a98f8a5cc636a20682b9ed42a31b21 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Thu, 24 Aug 2017 19:54:39 -0500 Subject: fix build for real this time --- include/global.h | 6 ++-- src/bard_music.c | 4 +-- src/mauville_old_man.c | 82 +++++++++++++++++++++++++------------------------- 3 files changed, 46 insertions(+), 46 deletions(-) diff --git a/include/global.h b/include/global.h index 0e0c29045..875ea7815 100644 --- a/include/global.h +++ b/include/global.h @@ -486,9 +486,9 @@ struct MauvilleManStoryteller u8 id; bool8 unk1; u8 filler2[2]; - u8 unk4[4]; - u8 playerNames[4][7]; - u8 unk24[2][4]; // unknown length + u8 gameStatIDs[4]; + u8 trainerNames[4][7]; + u8 unk24[4][4]; }; struct MauvilleManGiddy diff --git a/src/bard_music.c b/src/bard_music.c index da628867b..daf003233 100644 --- a/src/bard_music.c +++ b/src/bard_music.c @@ -28,9 +28,9 @@ const struct BardSound *GetWordSounds(u16 group, u16 word) return (*sounds)[word]; } #elif GERMAN -struct BardSound *GetWordSounds(u16 group, u16 word) +const struct BardSound *GetWordSounds(u16 group, u16 word) { - struct BardSound (*sounds)[][6] = gBardMusicTable[group]; + const struct BardSound (*sounds)[][6] = gBardMusicTable[group]; u32 index = de_sub_80EB748(group, word); return (*sounds)[index]; diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index 9e392a65a..a5b5cb914 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -1013,8 +1013,8 @@ void sub_80F83D0(void) struct Story { - u8 unk0; - u8 unk1; + u8 stat; + u8 minVal; const u8 *title; const u8 *action; const u8 *fullText; @@ -1069,8 +1069,8 @@ void StorytellerSetup(void) storyteller->unk1 = FALSE; for (i = 0; i < 4; i++) { - storyteller->unk4[i] = 0; - storyteller->playerNames[0][i] = EOS; // Maybe they meant storyteller->playerNames[i][0] instead? + storyteller->gameStatIDs[i] = 0; + storyteller->trainerNames[0][i] = EOS; // Maybe they meant storyteller->trainerNames[i][0] instead? } } @@ -1082,36 +1082,36 @@ void sub_80F8428(void) storyteller->unk1 = FALSE; } -u32 sub_80F8438(u8 stat) +u32 StorytellerGetGameStat(u8 stat) { - if (stat == 50) + if (stat == NUM_GAME_STATS) stat = 0; return GetGameStat(stat); } -const struct Story *GetStory(u32 a) +const struct Story *GetStory(u32 stat) { s32 i; for (i = 0; i < 36; i++) { - if (sStorytellerStories[i].unk0 == a) + if (sStorytellerStories[i].stat == stat) return &sStorytellerStories[i]; } return &sStorytellerStories[35]; } -const u8 *sub_80F8478(u32 a) +const u8 *GetStoryTitle(u32 a) { return GetStory(a)->title; } -const u8 *sub_80F8484(u32 a) +const u8 *GetStoryText(u32 a) { return GetStory(a)->fullText; } -const u8 *sub_80F8490(u32 a) +const u8 *GetStoryAction(u32 a) { return GetStory(a)->action; } @@ -1124,34 +1124,34 @@ u8 sub_80F849C(void) { struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; - if (storyteller->unk4[i] == 0) + if (storyteller->gameStatIDs[i] == 0) break; } return i; } -u32 sub_80F84C8(u32 a) +u32 StorytellerGetRecordedTrainerStat(u32 trainer) { - u8 *ptr = gSaveBlock1.mauvilleMan.storyteller.unk24[a]; + u8 *ptr = gSaveBlock1.mauvilleMan.storyteller.unk24[trainer]; return ptr[0] | (ptr[1] << 8) | (ptr[2] << 16) | (ptr[3] << 24); } -void sub_80F84EC(u32 a, u32 b) +void StorytellerSetRecordedTrainerStat(u32 trainer, u32 val) { - u8 *ptr = gSaveBlock1.mauvilleMan.storyteller.unk24[a]; + u8 *ptr = gSaveBlock1.mauvilleMan.storyteller.unk24[trainer]; - ptr[0] = b; - ptr[1] = b >> 8; - ptr[2] = b >> 16; - ptr[3] = b >> 24; + ptr[0] = val; + ptr[1] = val >> 8; + ptr[2] = val >> 16; + ptr[3] = val >> 24; } -bool32 sub_80F8508(u32 a) +bool32 sub_80F8508(u32 trainer) { struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; - if (sub_80F8438(storyteller->unk4[a]) > sub_80F84C8(a)) + if (StorytellerGetGameStat(storyteller->gameStatIDs[trainer]) > StorytellerGetRecordedTrainerStat(trainer)) return TRUE; else return FALSE; @@ -1159,7 +1159,7 @@ bool32 sub_80F8508(u32 a) void GetStorytellerPlayerName(u32 player, void *dst) { - u8 *name = gSaveBlock1.mauvilleMan.storyteller.playerNames[player]; + u8 *name = gSaveBlock1.mauvilleMan.storyteller.trainerNames[player]; memset(dst, EOS, 8); memcpy(dst, name, 7); @@ -1167,22 +1167,22 @@ void GetStorytellerPlayerName(u32 player, void *dst) void SetStorytellerPlayerName(u32 player, const u8 *dst) { - u8 *name = gSaveBlock1.mauvilleMan.storyteller.playerNames[player]; + u8 *name = gSaveBlock1.mauvilleMan.storyteller.trainerNames[player]; u8 len = StringLength(dst); memset(name, EOS, 7); StringCopyN(name, dst, len); } -void sub_80F8598(u32 player, u32 b) +void sub_80F8598(u32 player, u32 stat) { struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; - storyteller->unk4[player] = b; + storyteller->gameStatIDs[player] = stat; SetStorytellerPlayerName(player, gSaveBlock2.playerName); - sub_80F84EC(player, sub_80F8438(b)); - ConvertIntToDecimalStringN(gStringVar1, sub_80F8438(b), 0, 10); - StringCopy(gStringVar2, sub_80F8490(b)); + StorytellerSetRecordedTrainerStat(player, StorytellerGetGameStat(stat)); + ConvertIntToDecimalStringN(gStringVar1, StorytellerGetGameStat(stat), 0, 10); + StringCopy(gStringVar2, GetStoryAction(stat)); } void sub_80F85FC(u8 *arr, s32 count) @@ -1217,19 +1217,19 @@ bool8 sub_80F8650(void) sub_80F85FC(arr, 36); for (i = 0; i < 36; i++) { - u8 r4 = sStorytellerStories[arr[i]].unk0; - u8 r6 = sStorytellerStories[arr[i]].unk1; + u8 stat = sStorytellerStories[arr[i]].stat; + u8 minVal = sStorytellerStories[arr[i]].minVal; struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; for (j = 0; j < 4; j++) { - if (gSaveBlock1.mauvilleMan.storyteller.unk4[j] == r4) + if (gSaveBlock1.mauvilleMan.storyteller.gameStatIDs[j] == stat) break; } - if (j == 4 && sub_80F8438(r4) >= r6) + if (j == 4 && StorytellerGetGameStat(stat) >= minVal) { storyteller->unk1 = TRUE; - sub_80F8598(sub_80F849C(), r4); + sub_80F8598(sub_80F849C(), stat); return TRUE; } } @@ -1239,12 +1239,12 @@ bool8 sub_80F8650(void) void sub_80F8700(u32 player) { struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; - u8 r6 = storyteller->unk4[player]; + u8 r6 = storyteller->gameStatIDs[player]; - ConvertIntToDecimalStringN(gStringVar1, sub_80F84C8(player), 0, 10); - StringCopy(gStringVar2, sub_80F8490(r6)); + ConvertIntToDecimalStringN(gStringVar1, StorytellerGetRecordedTrainerStat(player), 0, 10); + StringCopy(gStringVar2, GetStoryAction(r6)); GetStorytellerPlayerName(player, gStringVar3); - ShowFieldMessage(sub_80F8484(r6)); + ShowFieldMessage(GetStoryText(r6)); } void sub_80F8758(void) @@ -1255,11 +1255,11 @@ void sub_80F8758(void) for (i = 0; i < 4; i++) { struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; - u8 r0 = storyteller->unk4[i]; + u8 r0 = storyteller->gameStatIDs[i]; if (r0 == 0) break; - MenuPrint(sub_80F8478(r0), 1, 2 + i * 2); + MenuPrint(GetStoryTitle(r0), 1, 2 + i * 2); } MenuPrint(gPCText_Cancel, 1, 2 + i * 2); } @@ -1317,7 +1317,7 @@ u8 sub_80F889C(void) bool8 sub_80F88AC(void) { struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; - u8 r4 = storyteller->unk4[gUnknown_03000748]; + u8 r4 = storyteller->gameStatIDs[gUnknown_03000748]; if (sub_80F8508(gUnknown_03000748) == TRUE) { -- cgit v1.2.3 From 8c57ef0fad270bc795d0b64a75d96fafc0f63513 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Thu, 24 Aug 2017 20:50:39 -0500 Subject: finish labeling script --- data-de/text/giddy.inc | 8 +-- data/scripts/mauville_man.inc | 161 +++++++++++++++++++----------------------- data/specials.inc | 14 ++-- data/text/giddy.inc | 8 +-- include/global.h | 5 +- src/mauville_old_man.c | 143 +++++++++++++++++++------------------ 6 files changed, 163 insertions(+), 176 deletions(-) diff --git a/data-de/text/giddy.inc b/data-de/text/giddy.inc index 6e1a46883..8bc5bebda 100644 --- a/data-de/text/giddy.inc +++ b/data-de/text/giddy.inc @@ -1,16 +1,16 @@ -MauvilleCity_PokemonCenter_1F_Text_1B092A:: @ 81B092A +gTextGiddy_Introduction:: @ 81B092A .string "Ich bin MÄRCHEN-MAN! Ich habe eine sehr\n" .string "geistreiche Geschichte für dich!\p" .string "Soll ich sie dir erzählen?$" -MauvilleCity_PokemonCenter_1F_Text_1B097C:: @ 81B097C +gTextGiddy_YouveDeflatedMe:: @ 81B097C .string "Oh...\n" .string "Du hast mir die Luft rausgelassen...$" -MauvilleCity_PokemonCenter_1F_Text_1B0998:: @ 81B0998 +gTextGiddy_AlsoIWasThinking:: @ 81B0998 .string "Und ich war in Gedanken vertieft...$" -MauvilleCity_PokemonCenter_1F_Text_1B09B0:: @ 81B09B0 +gTextGiddy_ByeBye:: @ 81B09B0 .string "Das wäre alles, glaube ich...\p" .string "Wir sollten bald wieder ein Schwätzchen\n" .string "halten! Tschüss!$" diff --git a/data/scripts/mauville_man.inc b/data/scripts/mauville_man.inc index 6a8f5f051..239c360dc 100644 --- a/data/scripts/mauville_man.inc +++ b/data/scripts/mauville_man.inc @@ -14,7 +14,7 @@ MauvilleCity_PokemonCenter_1F_EventScript_1AE744:: @ 81AE744 case MAUVILLE_MAN_HIPSTER, speak_to_hipster case MAUVILLE_MAN_TRADER, speak_to_trader case MAUVILLE_MAN_STORYTELLER, speak_to_storyteller - case MAUVILLE_MAN_GIDDY, MauvilleCity_PokemonCenter_1F_EventScript_1B09EB + case MAUVILLE_MAN_GIDDY, speak_to_giddy end @------------------------------------------------------------------------------- @@ -145,10 +145,10 @@ do_trader_menu_get: jumpeq player_has_no_decorations jump do_trader_menu_give end -cancelled_get_menu:: @ 81AEC2D +cancelled_get_menu: msgbox gTextTrader_DontWantAnything, 2 end -rare_item_cant_trade_away:: @ 81AEC36 +rare_item_cant_trade_away: message gTextTrader_ICantTradeThatOneAway waittext jump do_trader_menu_get @@ -158,10 +158,10 @@ dont_want_item: waittext jump do_trader_menu_get end -player_has_no_decorations:: @ 81AEC4E +player_has_no_decorations: msgbox gTextTrader_YouDontHaveDecorations, 2 end -do_trader_menu_give:: @ 81AEC57 +do_trader_menu_give: msgbox gTextTrader_PickDecorationYoullTrade, 4 special ScrSpecial_TraderMenuGiveDecoration waitstate @@ -178,14 +178,14 @@ do_trader_menu_give:: @ 81AEC57 special ScrSpecial_TraderDoDecorationTrade msgbox gTextTrader_ThenWellTrade, 2 end -cancelled_give_menu:: @ 81AECA6 +cancelled_give_menu: msgbox gTextTrader_FeelUnwanted2, 2 end -decoration_is_in_use:: @ 81AECAF +decoration_is_in_use: msgbox gTextTrader_InUseYouCantTradeIt, 4 jump do_trader_menu_give end -decorations_full:: @ 81AECBD +decorations_full: msgbox gTextTrader_NoRoomForThis, 2 end @@ -195,7 +195,7 @@ decorations_full:: @ 81AECBD .include "data/text/storyteller.inc" -speak_to_storyteller:: @ 81B0816 +speak_to_storyteller: setvar 0x8008, 0 setvar 0x8009, 0 setvar 0x800a, 0 @@ -204,75 +204,66 @@ speak_to_storyteller:: @ 81B0816 faceplayer msgbox gTextStoryteller_Introduction, MSGBOX_YESNO compare RESULT, NO - jumpeq dont_hear_tale - specialval RESULT, sub_80F889C - compare RESULT, 0 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B08D3 - -MauvilleCity_PokemonCenter_1F_EventScript_1B084F:: @ 81B084F + jumpeq dont_hear_story + specialval RESULT, ScrSpecial_StorytellerGetFreeStorySlot + compare RESULT, 0 @ If slot is 0, then the list is empty + jumpeq no_stories_recorded +choose_story: message gTextStoryteller_WhichTale waittext - special sub_80F8874 + special ScrSpecial_StorytellerStoryListMenu waitstate - compare RESULT, 0 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0883 + compare RESULT, FALSE + jumpeq cancel_story_menu setvar 0x8008, 1 - special sub_80F8888 + special ScrSpecial_StorytellerDisplayStory waittext waitbutton - specialval RESULT, sub_80F88AC - compare RESULT, 0 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0893 - jump MauvilleCity_PokemonCenter_1F_EventScript_1B0909 - -MauvilleCity_PokemonCenter_1F_EventScript_1B0883:: @ 81B0883 + specialval RESULT, ScrSpecial_StorytellerUpdateStat + compare RESULT, FALSE + jumpeq no_stat_update + jump stat_update +cancel_story_menu: compare 0x8008, 0 - jumpeq dont_hear_tale - jump MauvilleCity_PokemonCenter_1F_EventScript_1B08AE - -MauvilleCity_PokemonCenter_1F_EventScript_1B0893:: @ 81B0893 + jumpeq dont_hear_story + jump yes_hear_story +no_stat_update: msgbox gTextStoryteller_CouldThereBeOtherTrainers, 4 msgbox gTextStoryteller_HearAnotherLegendaryTale, MSGBOX_YESNO - compare RESULT, 1 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B084F - -MauvilleCity_PokemonCenter_1F_EventScript_1B08AE:: @ 81B08AE - specialval RESULT, sub_80F88E0 - compare RESULT, 1 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B091F - specialval RESULT, sub_80F889C + compare RESULT, YES + jumpeq choose_story +yes_hear_story: + specialval RESULT, ScrSpecial_HasStorytellerAlreadyRecorded + compare RESULT, TRUE + jumpeq cant_record_story @ already recorded story + specialval RESULT, ScrSpecial_StorytellerGetFreeStorySlot compare RESULT, 4 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B091F - jump MauvilleCity_PokemonCenter_1F_EventScript_1B08DB - -MauvilleCity_PokemonCenter_1F_EventScript_1B08D3:: @ 81B08D3 + jumpeq cant_record_story @ story list is full + jump prompt_record_story +no_stories_recorded: msgbox gTextStoryteller_ButIKnowOfNoLegendaryTrainers, 4 - -MauvilleCity_PokemonCenter_1F_EventScript_1B08DB:: @ 81B08DB +prompt_record_story: msgbox gTextStoryteller_HaveYouAnyTales, MSGBOX_YESNO - compare RESULT, 0 - jumpeq dont_hear_tale - specialval RESULT, sub_80F88FC - compare RESULT, 1 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0909 + compare RESULT, NO + jumpeq dont_hear_story + specialval RESULT, ScrSpecial_StorytellerInitializeRandomStat + compare RESULT, TRUE + jumpeq stat_update msgbox gTextStoryteller_ImNotSatisfied, 4 closebutton release end - -MauvilleCity_PokemonCenter_1F_EventScript_1B0909:: @ 81B0909 +stat_update: msgbox gTextStoryteller_BirthOfANewLegend, 4 closebutton release end - -dont_hear_tale:: @ 81B0914 +dont_hear_story: msgbox gTextStoryteller_OhIFeelStifled, 4 closebutton release end - -MauvilleCity_PokemonCenter_1F_EventScript_1B091F:: @ 81B091F +cant_record_story: msgbox gTextStoryteller_WishMorePeopleWould, 4 closebutton release @@ -284,55 +275,49 @@ MauvilleCity_PokemonCenter_1F_EventScript_1B091F:: @ 81B091F .include "data/text/giddy.inc" -MauvilleCity_PokemonCenter_1F_EventScript_1B09EB:: @ 81B09EB +speak_to_giddy: lock faceplayer - msgbox MauvilleCity_PokemonCenter_1F_Text_1B092A, MSGBOX_YESNO - compare RESULT, 1 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0A0C - compare RESULT, 0 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0A6F + msgbox gTextGiddy_Introduction, MSGBOX_YESNO + compare RESULT, YES + jumpeq yes_hear_giddy + compare RESULT, NO + jumpeq dont_hear_giddy end - -MauvilleCity_PokemonCenter_1F_EventScript_1B0A0C:: @ 81B0A0C - special sub_80F7CC8 - compare RESULT, 1 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0A4E - compare RESULT, 0 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0A79 +yes_hear_giddy: + special ScrSpecial_GiddyShouldTellAnotherTale + compare RESULT, TRUE + jumpeq tell_giddy_tale + compare RESULT, FALSE + jumpeq bye_bye end - -MauvilleCity_PokemonCenter_1F_EventScript_1B0A26:: @ 81B0A26 - special sub_80F7CC8 - compare RESULT, 1 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0A40 - compare RESULT, 0 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0A79 +tell_another_giddy_tale: + special ScrSpecial_GiddyShouldTellAnotherTale + compare RESULT, TRUE + jumpeq also_i_was_thinking + compare RESULT, FALSE + jumpeq bye_bye end - -MauvilleCity_PokemonCenter_1F_EventScript_1B0A40:: @ 81B0A40 - msgbox MauvilleCity_PokemonCenter_1F_Text_1B0998, 4 - jump MauvilleCity_PokemonCenter_1F_EventScript_1B0A4E +also_i_was_thinking: + msgbox gTextGiddy_AlsoIWasThinking, 4 + jump tell_giddy_tale end - -MauvilleCity_PokemonCenter_1F_EventScript_1B0A4E:: @ 81B0A4E +tell_giddy_tale: special ScrSpecial_GenerateGiddyLine special ShowFieldMessageStringVar4 waittext yesnobox 20, 8 compare RESULT, 1 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0A26 + jumpeq tell_another_giddy_tale compare RESULT, 0 - jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0A26 + jumpeq tell_another_giddy_tale end - -MauvilleCity_PokemonCenter_1F_EventScript_1B0A6F:: @ 81B0A6F - msgbox MauvilleCity_PokemonCenter_1F_Text_1B097C, 4 +dont_hear_giddy: + msgbox gTextGiddy_YouveDeflatedMe, 4 release end - -MauvilleCity_PokemonCenter_1F_EventScript_1B0A79:: @ 81B0A79 - msgbox MauvilleCity_PokemonCenter_1F_Text_1B09B0, 4 +bye_bye: + msgbox gTextGiddy_ByeBye, 4 release end diff --git a/data/specials.inc b/data/specials.inc index cff97f455..a17bc943a 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -113,13 +113,13 @@ gSpecials:: def_special ScrSpecial_PlayBardSong def_special sub_80F83D0 def_special ScrSpecial_GenerateGiddyLine - def_special sub_80F7CC8 - def_special sub_80F889C - def_special sub_80F8888 - def_special sub_80F8874 - def_special sub_80F88AC - def_special sub_80F88FC - def_special sub_80F88E0 + def_special ScrSpecial_GiddyShouldTellAnotherTale + def_special ScrSpecial_StorytellerGetFreeStorySlot + def_special ScrSpecial_StorytellerDisplayStory + def_special ScrSpecial_StorytellerStoryListMenu + def_special ScrSpecial_StorytellerUpdateStat + def_special ScrSpecial_StorytellerInitializeRandomStat + def_special ScrSpecial_HasStorytellerAlreadyRecorded def_special ScrSpecial_TraderMenuGetDecoration def_special ScrSpecial_GetTraderTradedFlag def_special ScrSpecial_DoesPlayerHaveNoDecorations diff --git a/data/text/giddy.inc b/data/text/giddy.inc index 040ef2ae5..a763776bf 100644 --- a/data/text/giddy.inc +++ b/data/text/giddy.inc @@ -1,16 +1,16 @@ -MauvilleCity_PokemonCenter_1F_Text_1B092A:: @ 81B092A +gTextGiddy_Introduction:: @ 81B092A .string "I’m GIDDY!\n" .string "I have a scintillating story for you!\p" .string "Would you like to hear my story?$" -MauvilleCity_PokemonCenter_1F_Text_1B097C:: @ 81B097C +gTextGiddy_YouveDeflatedMe:: @ 81B097C .string "Oh...\n" .string "You’ve deflated me...$" -MauvilleCity_PokemonCenter_1F_Text_1B0998:: @ 81B0998 +gTextGiddy_AlsoIWasThinking:: @ 81B0998 .string "Also, I was thinking...$" -MauvilleCity_PokemonCenter_1F_Text_1B09B0:: @ 81B09B0 +gTextGiddy_ByeBye:: @ 81B09B0 .string "That’s about it, I think...\p" .string "We should chat again!\n" .string "Bye-bye!$" diff --git a/include/global.h b/include/global.h index 875ea7815..7c673f13e 100644 --- a/include/global.h +++ b/include/global.h @@ -494,11 +494,10 @@ struct MauvilleManStoryteller struct MauvilleManGiddy { /*0x00*/ u8 id; - /*0x01*/ u8 unk1; + /*0x01*/ u8 taleCounter; /*0x02*/ u8 questionNum; - /*0x04*/ u16 mauvilleOldMan_ecArray[10]; + /*0x04*/ u16 randomWords[10]; /*0x18*/ u8 questionList[12]; - /*0x24*/ u8 fillerF[0x2]; }; /*size = 0x2C*/ diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index a5b5cb914..6feee5184 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -214,7 +214,7 @@ void SetupGiddy(void) struct MauvilleManGiddy *giddy = &gSaveBlock1.mauvilleMan.giddy; giddy->id = MAUVILLE_MAN_GIDDY; - giddy->unk1 = 0; + giddy->taleCounter = 0; } void SetupTrader(void) @@ -248,7 +248,7 @@ void SetupMauvilleOldMan(void) sub_80F83D0(); } -//#define TEST MAUVILLE_MAN_BARD +//#define TEST MAUVILLE_MAN_STORYTELLER #ifdef TEST // Safely changes man to test functionality @@ -344,10 +344,10 @@ void PrepareSongText(void) *str = CHAR_SONG_WORD_SEPARATOR; str++; } - + str++; *(wordEnd++) = CHAR_SPACE; - + wordEnd = EasyChat_GetWordText(wordEnd, *(lyrics++)); while (wordEnd != str) { @@ -355,10 +355,10 @@ void PrepareSongText(void) *str = CHAR_SONG_WORD_SEPARATOR; str++; } - + str++; *(wordEnd++) = CHAR_NEWLINE; - + wordEnd = EasyChat_GetWordText(wordEnd, *(lyrics++)); while (wordEnd != str) { @@ -366,7 +366,7 @@ void PrepareSongText(void) *str = CHAR_SONG_WORD_SEPARATOR; str++; } - + if (lineNum == 0) { *(wordEnd++) = EXT_CTRL_CODE_BEGIN; @@ -412,14 +412,14 @@ void ScrSpecial_HipsterTeachWord(void) } } -void sub_80F7CC8(void) +void ScrSpecial_GiddyShouldTellAnotherTale(void) { - struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard; + struct MauvilleManGiddy *giddy = &gSaveBlock1.mauvilleMan.giddy; - if (bard->unk_2D95 == 10) + if (giddy->taleCounter == 10) { gScriptResult = FALSE; - bard->unk_2D95 = 0; + giddy->taleCounter = 0; } else { @@ -431,16 +431,16 @@ void ScrSpecial_GenerateGiddyLine(void) { struct MauvilleManGiddy *giddy = &gSaveBlock1.mauvilleMan.giddy; - if (giddy->unk1 == 0) + if (giddy->taleCounter == 0) sub_80F7DC0(); - if (giddy->mauvilleOldMan_ecArray[giddy->unk1] != 0xFFFF) // is not the last element of the array? + if (giddy->randomWords[giddy->taleCounter] != 0xFFFF) // is not the last element of the array? { u8 *stringPtr; u32 adjective = Random(); adjective %= 8; - stringPtr = EasyChat_GetWordText(gStringVar4, giddy->mauvilleOldMan_ecArray[giddy->unk1]); + stringPtr = EasyChat_GetWordText(gStringVar4, giddy->randomWords[giddy->taleCounter]); stringPtr = StringCopy(stringPtr, gOtherText_Is); stringPtr = StringCopy(stringPtr, gGiddyAdjectives[adjective]); StringCopy(stringPtr, gOtherText_DontYouAgree); @@ -451,9 +451,9 @@ void ScrSpecial_GenerateGiddyLine(void) } if (!(Random() % 10)) - giddy->unk1 = 10; + giddy->taleCounter = 10; else - giddy->unk1++; + giddy->taleCounter++; gScriptResult = TRUE; } @@ -520,8 +520,8 @@ void sub_80F7DC0(void) u16 var = Random() % 10; if (var < 3 && r7 < 8) { - //gSaveBlock1.mauvilleMan.giddy.mauvilleOldMan_ecArray[i] = 0xFFFF; - giddy->mauvilleOldMan_ecArray[i] = 0xFFFF; + //gSaveBlock1.mauvilleMan.giddy.randomWords[i] = 0xFFFF; + giddy->randomWords[i] = 0xFFFF; r7++; } //_080F7E90 @@ -541,8 +541,8 @@ void sub_80F7DC0(void) if (r1 == 6) r1 = 0; - //gSaveBlock1.mauvilleMan.giddy.mauvilleOldMan_ecArray[i] = sub_80EB784(arr[r1][0]); - giddy->mauvilleOldMan_ecArray[i] = sub_80EB784(arr[r1][0]); + //gSaveBlock1.mauvilleMan.giddy.randomWords[i] = sub_80EB784(arr[r1][0]); + giddy->randomWords[i] = sub_80EB784(arr[r1][0]); } } } @@ -796,7 +796,7 @@ void BardSingWord(struct Task *task, struct BardSong *song) lyrics = bard->temporaryLyrics; for (i = 0; i < 6; i++) song->lyrics[i] = lyrics[i]; - + // Clear phonemes for (i = 0; i < 6; i++) { @@ -1089,7 +1089,7 @@ u32 StorytellerGetGameStat(u8 stat) return GetGameStat(stat); } -const struct Story *GetStory(u32 stat) +const struct Story *GetStoryByStat(u32 stat) { s32 i; @@ -1101,22 +1101,22 @@ const struct Story *GetStory(u32 stat) return &sStorytellerStories[35]; } -const u8 *GetStoryTitle(u32 a) +const u8 *GetStoryTitleByStat(u32 stat) { - return GetStory(a)->title; + return GetStoryByStat(stat)->title; } -const u8 *GetStoryText(u32 a) +const u8 *GetStoryTextByStat(u32 stat) { - return GetStory(a)->fullText; + return GetStoryByStat(stat)->fullText; } -const u8 *GetStoryAction(u32 a) +const u8 *GetStoryActionByStat(u32 stat) { - return GetStory(a)->action; + return GetStoryByStat(stat)->action; } -u8 sub_80F849C(void) +u8 GetFreeStorySlot(void) { u8 i; @@ -1147,7 +1147,7 @@ void StorytellerSetRecordedTrainerStat(u32 trainer, u32 val) ptr[3] = val >> 24; } -bool32 sub_80F8508(u32 trainer) +bool32 HasTrainerStatIncreased(u32 trainer) { struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; @@ -1157,7 +1157,7 @@ bool32 sub_80F8508(u32 trainer) return FALSE; } -void GetStorytellerPlayerName(u32 player, void *dst) +void GetStoryByStattellerPlayerName(u32 player, void *dst) { u8 *name = gSaveBlock1.mauvilleMan.storyteller.trainerNames[player]; @@ -1165,27 +1165,27 @@ void GetStorytellerPlayerName(u32 player, void *dst) memcpy(dst, name, 7); } -void SetStorytellerPlayerName(u32 player, const u8 *dst) +void StorytellerSetPlayerName(u32 player, const u8 *src) { u8 *name = gSaveBlock1.mauvilleMan.storyteller.trainerNames[player]; - u8 len = StringLength(dst); + u8 len = StringLength(src); memset(name, EOS, 7); - StringCopyN(name, dst, len); + StringCopyN(name, src, len); } -void sub_80F8598(u32 player, u32 stat) +void StorytellerRecordNewStat(u32 player, u32 stat) { struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; storyteller->gameStatIDs[player] = stat; - SetStorytellerPlayerName(player, gSaveBlock2.playerName); + StorytellerSetPlayerName(player, gSaveBlock2.playerName); StorytellerSetRecordedTrainerStat(player, StorytellerGetGameStat(stat)); ConvertIntToDecimalStringN(gStringVar1, StorytellerGetGameStat(stat), 0, 10); - StringCopy(gStringVar2, GetStoryAction(stat)); + StringCopy(gStringVar2, GetStoryActionByStat(stat)); } -void sub_80F85FC(u8 *arr, s32 count) +void ScrambleStatList(u8 *arr, s32 count) { s32 i; @@ -1201,20 +1201,21 @@ void sub_80F85FC(u8 *arr, s32 count) } } -static const struct {u32 length; struct MauvilleManStoryteller *unused1; u32 unused2;} gUnknown_083E5620 = +// What purpose does this struct even serve? Only the length field is used. +static const struct {u32 length; struct MauvilleManStoryteller *unused1; u32 unused2;} sStorytellerStuff = { 36, &gSaveBlock1.mauvilleMan.storyteller, // unused - 12, // unused + 12, // unused }; -bool8 sub_80F8650(void) +bool8 StorytellerInitializeRandomStat(void) { - u8 arr[gUnknown_083E5620.length]; + u8 arr[sStorytellerStuff.length]; s32 i; s32 j; - sub_80F85FC(arr, 36); + ScrambleStatList(arr, 36); for (i = 0; i < 36; i++) { u8 stat = sStorytellerStories[arr[i]].stat; @@ -1229,44 +1230,44 @@ bool8 sub_80F8650(void) if (j == 4 && StorytellerGetGameStat(stat) >= minVal) { storyteller->unk1 = TRUE; - sub_80F8598(sub_80F849C(), stat); + StorytellerRecordNewStat(GetFreeStorySlot(), stat); return TRUE; } } return FALSE; } -void sub_80F8700(u32 player) +void StorytellerDisplayStory(u32 player) { struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; - u8 r6 = storyteller->gameStatIDs[player]; + u8 stat = storyteller->gameStatIDs[player]; ConvertIntToDecimalStringN(gStringVar1, StorytellerGetRecordedTrainerStat(player), 0, 10); - StringCopy(gStringVar2, GetStoryAction(r6)); - GetStorytellerPlayerName(player, gStringVar3); - ShowFieldMessage(GetStoryText(r6)); + StringCopy(gStringVar2, GetStoryActionByStat(stat)); + GetStoryByStattellerPlayerName(player, gStringVar3); + ShowFieldMessage(GetStoryTextByStat(stat)); } -void sub_80F8758(void) +void PrintStoryList(void) { s32 i; - MenuDrawTextWindow(0, 0, 25, 4 + sub_80F849C() * 2); + MenuDrawTextWindow(0, 0, 25, 4 + GetFreeStorySlot() * 2); for (i = 0; i < 4; i++) { struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; - u8 r0 = storyteller->gameStatIDs[i]; + u8 stat = storyteller->gameStatIDs[i]; - if (r0 == 0) + if (stat == 0) break; - MenuPrint(GetStoryTitle(r0), 1, 2 + i * 2); + MenuPrint(GetStoryTitleByStat(stat), 1, 2 + i * 2); } MenuPrint(gPCText_Cancel, 1, 2 + i * 2); } extern u8 gUnknown_03000748; -void sub_80F87C4(u8 taskId) +void Task_StoryListMenu(u8 taskId) { struct Task *task = &gTasks[taskId]; s32 selection; @@ -1274,15 +1275,15 @@ void sub_80F87C4(u8 taskId) switch (task->data[0]) { case 0: - sub_80F8758(); - InitMenu(0, 1, 2, sub_80F849C() + 1, 0, 24); + PrintStoryList(); + InitMenu(0, 1, 2, GetFreeStorySlot() + 1, 0, 24); task->data[0]++; break; case 1: selection = ProcessMenuInput(); if (selection == -2) break; - if (selection == -1 || selection == sub_80F849C()) + if (selection == -1 || selection == GetFreeStorySlot()) { gScriptResult = 0; } @@ -1299,35 +1300,37 @@ void sub_80F87C4(u8 taskId) } } -void sub_80F8874(void) +// Sets gScriptResult to TRUE if player selected a story +void ScrSpecial_StorytellerStoryListMenu(void) { - CreateTask(sub_80F87C4, 0x50); + CreateTask(Task_StoryListMenu, 0x50); } -void sub_80F8888(void) +void ScrSpecial_StorytellerDisplayStory(void) { - sub_80F8700(gUnknown_03000748); + StorytellerDisplayStory(gUnknown_03000748); } -u8 sub_80F889C(void) +u8 ScrSpecial_StorytellerGetFreeStorySlot(void) { - return sub_80F849C(); + return GetFreeStorySlot(); } -bool8 sub_80F88AC(void) +// Returns TRUE if stat has increased +bool8 ScrSpecial_StorytellerUpdateStat(void) { struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; u8 r4 = storyteller->gameStatIDs[gUnknown_03000748]; - if (sub_80F8508(gUnknown_03000748) == TRUE) + if (HasTrainerStatIncreased(gUnknown_03000748) == TRUE) { - sub_80F8598(gUnknown_03000748, r4); + StorytellerRecordNewStat(gUnknown_03000748, r4); return TRUE; } return FALSE; } -bool8 sub_80F88E0(void) +bool8 ScrSpecial_HasStorytellerAlreadyRecorded(void) { struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; @@ -1337,7 +1340,7 @@ bool8 sub_80F88E0(void) return TRUE; } -bool8 sub_80F88FC(void) +bool8 ScrSpecial_StorytellerInitializeRandomStat(void) { - return sub_80F8650(); + return StorytellerInitializeRandomStat(); } -- cgit v1.2.3 From b6ea4d9a77cdb6b416d3dd94eef68ce8a56cd4eb Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Thu, 24 Aug 2017 21:18:07 -0500 Subject: label more stuff in mauville_old_man.c --- data/scripts/mauville_man.inc | 2 +- include/global.h | 9 ++- include/mauville_old_man.h | 1 - src/mauville_old_man.c | 150 ++++++++++++++++-------------------------- sym_ewram.txt | 8 +-- 5 files changed, 64 insertions(+), 106 deletions(-) diff --git a/data/scripts/mauville_man.inc b/data/scripts/mauville_man.inc index 239c360dc..159d729f6 100644 --- a/data/scripts/mauville_man.inc +++ b/data/scripts/mauville_man.inc @@ -322,4 +322,4 @@ bye_bye: end .include "data/text/bard.inc" - .include "data/text/hipster.inc" \ No newline at end of file + .include "data/text/hipster.inc" diff --git a/include/global.h b/include/global.h index 7c673f13e..ab7d43955 100644 --- a/include/global.h +++ b/include/global.h @@ -458,7 +458,6 @@ struct MauvilleManCommon struct MauvilleManBard { /*0x00*/ u8 id; - /*0x01*/ u8 unk_2D95; /*0x02*/ u16 songLyrics[6]; /*0x0E*/ u16 temporaryLyrics[6]; /*0x1A*/ u8 playerName[8]; @@ -470,7 +469,7 @@ struct MauvilleManBard struct MauvilleManHipster { u8 id; - u8 unk1; + bool8 alreadySpoken; }; struct MauvilleManTrader @@ -484,11 +483,11 @@ struct MauvilleManTrader struct MauvilleManStoryteller { u8 id; - bool8 unk1; + bool8 alreadyRecorded; u8 filler2[2]; u8 gameStatIDs[4]; u8 trainerNames[4][7]; - u8 unk24[4][4]; + u8 statValues[4][4]; }; struct MauvilleManGiddy @@ -509,7 +508,7 @@ union MauvilleMan struct MauvilleManTrader trader; struct MauvilleManStoryteller storyteller; struct MauvilleManGiddy giddy; - u8 filler[0x40]; + u8 filler[0x40]; // needed to pad out the struct }; struct Unk_SB_Access_Struct1 diff --git a/include/mauville_old_man.h b/include/mauville_old_man.h index 277e5fbe6..2b8f139f2 100644 --- a/include/mauville_old_man.h +++ b/include/mauville_old_man.h @@ -12,7 +12,6 @@ enum }; void SetupMauvilleOldMan(void); -void sub_80F7DC0(void); void sub_80F7F30(void); void sub_80F83D0(void); diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index 6feee5184..2f58e65fc 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -135,9 +135,9 @@ extern const u8 gTextStoryteller_Story36Text[]; extern struct BardSong gUnknown_03005DA0; -extern u16 gUnknown_020388BC; // set but not used? +EWRAM_DATA static u16 gUnknown_020388BC = 0; // set but not used? -static const u16 gDefaultBardSongLyrics[] = +static const u16 sDefaultBardSongLyrics[] = { #ifdef ENGLISH EC_WORD_SISTER, @@ -156,7 +156,7 @@ static const u16 gDefaultBardSongLyrics[] = #endif }; -static const u8 *const gGiddyAdjectives[] = +static const u8 *const sGiddyAdjectives[] = { OtherText_SoPretty, OtherText_SoDarling, @@ -168,7 +168,7 @@ static const u8 *const gGiddyAdjectives[] = OtherText_SoMagical, }; -static const u8 *const gGiddyQuestions[] = +static const u8 *const sGiddyQuestions[] = { OtherText_WantVacationNicePlace, OtherText_BoughtCrayonsIsNice, @@ -180,12 +180,13 @@ static const u8 *const gGiddyQuestions[] = OtherText_SecretBasesWonderful, }; -void Task_BardSong(u8); -void StartBardSong(u8); -void StorytellerSetup(void); -void sub_80F8428(void); +static void sub_80F7DC0(void); +static void Task_BardSong(u8); +static void StartBardSong(u8); +static void StorytellerSetup(void); +static void sub_80F8428(void); -void SetupBard(void) +static void SetupBard(void) { u16 i; struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard; @@ -193,23 +194,23 @@ void SetupBard(void) bard->id = MAUVILLE_MAN_BARD; bard->hasChangedSong = FALSE; for (i = 0; i < 6; i++) - bard->songLyrics[i] = gDefaultBardSongLyrics[i]; + bard->songLyrics[i] = sDefaultBardSongLyrics[i]; } -void SetupHipster(void) +static void SetupHipster(void) { struct MauvilleManHipster *hipster = &gSaveBlock1.mauvilleMan.hipster; hipster->id = MAUVILLE_MAN_HIPSTER; - hipster->unk1 = 0; + hipster->alreadySpoken = FALSE; } -void SetupStoryteller(void) +static void SetupStoryteller(void) { StorytellerSetup(); } -void SetupGiddy(void) +static void SetupGiddy(void) { struct MauvilleManGiddy *giddy = &gSaveBlock1.mauvilleMan.giddy; @@ -217,7 +218,7 @@ void SetupGiddy(void) giddy->taleCounter = 0; } -void SetupTrader(void) +static void SetupTrader(void) { TraderSetup(); } @@ -248,47 +249,12 @@ void SetupMauvilleOldMan(void) sub_80F83D0(); } -//#define TEST MAUVILLE_MAN_STORYTELLER - -#ifdef TEST -// Safely changes man to test functionality -u8 GetCurrentMauvilleOldMan(void) -{ - u8 newMan = TEST; - struct MauvilleManCommon *common = &gSaveBlock1.mauvilleMan.common; - - if (common->id != newMan) - { - switch (newMan) - { - case MAUVILLE_MAN_BARD: - SetupBard(); - break; - case MAUVILLE_MAN_HIPSTER: - SetupHipster(); - break; - case MAUVILLE_MAN_TRADER: - SetupTrader(); - break; - case MAUVILLE_MAN_STORYTELLER: - SetupStoryteller(); - break; - case MAUVILLE_MAN_GIDDY: - SetupGiddy(); - break; - } - sub_80F83D0(); - } - return common->id; -} -#else -u8 GetCurrentMauvilleOldMan(void) +static u8 GetCurrentMauvilleOldMan(void) { struct MauvilleManCommon *common = &gSaveBlock1.mauvilleMan.common; return common->id; } -#endif void ScrSpecial_GetCurrentMauvilleMan(void) { @@ -387,14 +353,14 @@ void ScrSpecial_GetHipsterSpokenFlag(void) u16 *scriptResult = &gScriptResult; // again?? struct MauvilleManHipster *hipster = &gSaveBlock1.mauvilleMan.hipster; - *scriptResult = hipster->unk1; + *scriptResult = hipster->alreadySpoken; } void ScrSpecial_SetHipsterSpokenFlag(void) { struct MauvilleManHipster *hipster = &gSaveBlock1.mauvilleMan.hipster; - hipster->unk1 = 1; + hipster->alreadySpoken = TRUE; } void ScrSpecial_HipsterTeachWord(void) @@ -442,12 +408,12 @@ void ScrSpecial_GenerateGiddyLine(void) adjective %= 8; stringPtr = EasyChat_GetWordText(gStringVar4, giddy->randomWords[giddy->taleCounter]); stringPtr = StringCopy(stringPtr, gOtherText_Is); - stringPtr = StringCopy(stringPtr, gGiddyAdjectives[adjective]); + stringPtr = StringCopy(stringPtr, sGiddyAdjectives[adjective]); StringCopy(stringPtr, gOtherText_DontYouAgree); } else { - StringCopy(gStringVar4, gGiddyQuestions[giddy->questionList[giddy->questionNum++]]); + StringCopy(gStringVar4, sGiddyQuestions[giddy->questionList[giddy->questionNum++]]); } if (!(Random() % 10)) @@ -459,7 +425,7 @@ void ScrSpecial_GenerateGiddyLine(void) } #ifdef NONMATCHING -void sub_80F7DC0(void) +static void sub_80F7DC0(void) { u16 arr[][2] = { @@ -548,7 +514,7 @@ void sub_80F7DC0(void) } #else -const u16 gUnknown_083E53C8[][2] = +static const u16 gUnknown_083E53C8[][2] = { { 0x0, 0}, { 0xC, 0}, @@ -559,7 +525,7 @@ const u16 gUnknown_083E53C8[][2] = }; __attribute__((naked)) -void sub_80F7DC0(void) +static void sub_80F7DC0(void) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ @@ -721,26 +687,26 @@ _080F7EE2:\n\ } #endif -void sub_80F7EFC(void) +static void sub_80F7EFC(void) { struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard; bard->hasChangedSong = FALSE; } -void sub_80F7F0C(void) +static void sub_80F7F0C(void) { struct MauvilleManHipster *hipster = &gSaveBlock1.mauvilleMan.hipster; - hipster->unk1 = 0; + hipster->alreadySpoken = FALSE; } -void sub_80F7F18(void) +static void sub_80F7F18(void) { sub_8109A20(); } -void sub_80F7F24(void) +static void sub_80F7F24(void) { sub_80F8428(); } @@ -772,14 +738,14 @@ void sub_80F7F30(void) #define tCurrWord data[4] #define tUseTemporaryLyrics data[5] -void StartBardSong(bool8 useTemporaryLyrics) +static void StartBardSong(bool8 useTemporaryLyrics) { u8 taskId = CreateTask(Task_BardSong, 0x50); gTasks[taskId].tUseTemporaryLyrics = useTemporaryLyrics; } -void BardSingWord(struct Task *task, struct BardSong *song) +static void BardSing(struct Task *task, struct BardSong *song) { switch (task->tState) { @@ -882,11 +848,11 @@ void BardSingWord(struct Task *task, struct BardSong *song) } } -void Task_BardSong(u8 taskId) +static void Task_BardSong(u8 taskId) { struct Task *task = &gTasks[taskId]; // r5 - BardSingWord(task, &gUnknown_03005DA0); + BardSing(task, &gUnknown_03005DA0); switch (task->tState) { case 0: // Initialize song @@ -1060,13 +1026,13 @@ static const struct Story sStorytellerStories[] = {0x31, 1, gTextStoryteller_Story36Title, gTextStoryteller_Story36Action, gTextStoryteller_Story36Text}, }; -void StorytellerSetup(void) +static void StorytellerSetup(void) { struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; s32 i; storyteller->id = MAUVILLE_MAN_STORYTELLER; - storyteller->unk1 = FALSE; + storyteller->alreadyRecorded = FALSE; for (i = 0; i < 4; i++) { storyteller->gameStatIDs[i] = 0; @@ -1074,22 +1040,22 @@ void StorytellerSetup(void) } } -void sub_80F8428(void) +static void sub_80F8428(void) { struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; storyteller->id = MAUVILLE_MAN_STORYTELLER; - storyteller->unk1 = FALSE; + storyteller->alreadyRecorded = FALSE; } -u32 StorytellerGetGameStat(u8 stat) +static u32 StorytellerGetGameStat(u8 stat) { if (stat == NUM_GAME_STATS) stat = 0; return GetGameStat(stat); } -const struct Story *GetStoryByStat(u32 stat) +static const struct Story *GetStoryByStat(u32 stat) { s32 i; @@ -1101,22 +1067,22 @@ const struct Story *GetStoryByStat(u32 stat) return &sStorytellerStories[35]; } -const u8 *GetStoryTitleByStat(u32 stat) +static const u8 *GetStoryTitleByStat(u32 stat) { return GetStoryByStat(stat)->title; } -const u8 *GetStoryTextByStat(u32 stat) +static const u8 *GetStoryTextByStat(u32 stat) { return GetStoryByStat(stat)->fullText; } -const u8 *GetStoryActionByStat(u32 stat) +static const u8 *GetStoryActionByStat(u32 stat) { return GetStoryByStat(stat)->action; } -u8 GetFreeStorySlot(void) +static u8 GetFreeStorySlot(void) { u8 i; @@ -1130,16 +1096,16 @@ u8 GetFreeStorySlot(void) return i; } -u32 StorytellerGetRecordedTrainerStat(u32 trainer) +static u32 StorytellerGetRecordedTrainerStat(u32 trainer) { - u8 *ptr = gSaveBlock1.mauvilleMan.storyteller.unk24[trainer]; + u8 *ptr = gSaveBlock1.mauvilleMan.storyteller.statValues[trainer]; return ptr[0] | (ptr[1] << 8) | (ptr[2] << 16) | (ptr[3] << 24); } -void StorytellerSetRecordedTrainerStat(u32 trainer, u32 val) +static void StorytellerSetRecordedTrainerStat(u32 trainer, u32 val) { - u8 *ptr = gSaveBlock1.mauvilleMan.storyteller.unk24[trainer]; + u8 *ptr = gSaveBlock1.mauvilleMan.storyteller.statValues[trainer]; ptr[0] = val; ptr[1] = val >> 8; @@ -1147,7 +1113,7 @@ void StorytellerSetRecordedTrainerStat(u32 trainer, u32 val) ptr[3] = val >> 24; } -bool32 HasTrainerStatIncreased(u32 trainer) +static bool32 HasTrainerStatIncreased(u32 trainer) { struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; @@ -1157,7 +1123,7 @@ bool32 HasTrainerStatIncreased(u32 trainer) return FALSE; } -void GetStoryByStattellerPlayerName(u32 player, void *dst) +static void GetStoryByStattellerPlayerName(u32 player, void *dst) { u8 *name = gSaveBlock1.mauvilleMan.storyteller.trainerNames[player]; @@ -1165,7 +1131,7 @@ void GetStoryByStattellerPlayerName(u32 player, void *dst) memcpy(dst, name, 7); } -void StorytellerSetPlayerName(u32 player, const u8 *src) +static void StorytellerSetPlayerName(u32 player, const u8 *src) { u8 *name = gSaveBlock1.mauvilleMan.storyteller.trainerNames[player]; u8 len = StringLength(src); @@ -1174,7 +1140,7 @@ void StorytellerSetPlayerName(u32 player, const u8 *src) StringCopyN(name, src, len); } -void StorytellerRecordNewStat(u32 player, u32 stat) +static void StorytellerRecordNewStat(u32 player, u32 stat) { struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; @@ -1185,7 +1151,7 @@ void StorytellerRecordNewStat(u32 player, u32 stat) StringCopy(gStringVar2, GetStoryActionByStat(stat)); } -void ScrambleStatList(u8 *arr, s32 count) +static void ScrambleStatList(u8 *arr, s32 count) { s32 i; @@ -1209,7 +1175,7 @@ static const struct {u32 length; struct MauvilleManStoryteller *unused1; u32 unu 12, // unused }; -bool8 StorytellerInitializeRandomStat(void) +static bool8 StorytellerInitializeRandomStat(void) { u8 arr[sStorytellerStuff.length]; s32 i; @@ -1229,7 +1195,7 @@ bool8 StorytellerInitializeRandomStat(void) } if (j == 4 && StorytellerGetGameStat(stat) >= minVal) { - storyteller->unk1 = TRUE; + storyteller->alreadyRecorded = TRUE; StorytellerRecordNewStat(GetFreeStorySlot(), stat); return TRUE; } @@ -1237,7 +1203,7 @@ bool8 StorytellerInitializeRandomStat(void) return FALSE; } -void StorytellerDisplayStory(u32 player) +static void StorytellerDisplayStory(u32 player) { struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; u8 stat = storyteller->gameStatIDs[player]; @@ -1248,7 +1214,7 @@ void StorytellerDisplayStory(u32 player) ShowFieldMessage(GetStoryTextByStat(stat)); } -void PrintStoryList(void) +static void PrintStoryList(void) { s32 i; @@ -1267,7 +1233,7 @@ void PrintStoryList(void) extern u8 gUnknown_03000748; -void Task_StoryListMenu(u8 taskId) +static void Task_StoryListMenu(u8 taskId) { struct Task *task = &gTasks[taskId]; s32 selection; @@ -1334,7 +1300,7 @@ bool8 ScrSpecial_HasStorytellerAlreadyRecorded(void) { struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; - if (storyteller->unk1 == FALSE) + if (storyteller->alreadyRecorded == FALSE) return FALSE; else return TRUE; diff --git a/sym_ewram.txt b/sym_ewram.txt index fd19dca9b..24be56da3 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -589,13 +589,7 @@ gUnknown_020388B4: @ 20388B4 .space 0x4 .include "src/mon_markings.o" - -@ mauville_old_man - - .align 2 -gUnknown_020388BC: @ 20388BC - .space 0x4 - + .include "src/mauville_old_man.o" .include "src/menu_helpers.o" .include "src/region_map.o" .include "src/decoration.o" -- cgit v1.2.3 From 28836dd9b7f1f38ba1d065e2c336d32628fb7cca Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Fri, 25 Aug 2017 00:14:33 -0400 Subject: decompile up to sub_80B3EFC --- asm/shop.s | 271 --------------------------------------------------------- include/text.h | 58 ++++++------ src/shop.c | 60 +++++++++++++ 3 files changed, 89 insertions(+), 300 deletions(-) diff --git a/asm/shop.s b/asm/shop.s index b45ee4d62..aed64908f 100644 --- a/asm/shop.s +++ b/asm/shop.s @@ -6,277 +6,6 @@ .text - thumb_func_start sub_80B3D38 -sub_80B3D38: @ 80B3D38 - push {r4,lr} - sub sp, 0x8 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x7 - movs r1, 0x8 - movs r2, 0x1 - bl DisplayYesNoMenu - ldr r0, _080B3D70 @ =gBGTilemapBuffers + 0x800 - movs r1, 0x4 - str r1, [sp] - ldr r1, _080B3D74 @ =0x0000c3e1 - str r1, [sp, 0x4] - movs r1, 0x8 - movs r2, 0x9 - movs r3, 0x4 - bl sub_80A3FA0 - ldr r1, _080B3D78 @ =gUnknown_083CC708 - adds r0, r4, 0 - bl DoYesNoFuncWithChoice - add sp, 0x8 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B3D70: .4byte gBGTilemapBuffers + 0x800 -_080B3D74: .4byte 0x0000c3e1 -_080B3D78: .4byte gUnknown_083CC708 - thumb_func_end sub_80B3D38 - - thumb_func_start sub_80B3D7C -sub_80B3D7C: @ 80B3D7C - push {r4,lr} - sub sp, 0x8 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _080B3DC0 @ =gMartInfo - ldrb r1, [r0, 0x9] - adds r0, r1, 0 - movs r2, 0 - bl sub_80B39D0 - movs r0, 0x7 - movs r1, 0x8 - movs r2, 0xD - movs r3, 0xD - bl MenuZeroFillWindowRect - ldr r0, _080B3DC4 @ =gBGTilemapBuffers + 0x800 - movs r1, 0x4 - str r1, [sp] - movs r1, 0 - str r1, [sp, 0x4] - movs r1, 0x8 - movs r2, 0x9 - movs r3, 0x4 - bl sub_80A3FA0 - adds r0, r4, 0 - bl sub_80B4378 - add sp, 0x8 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B3DC0: .4byte gMartInfo -_080B3DC4: .4byte gBGTilemapBuffers + 0x800 - thumb_func_end sub_80B3D7C - - thumb_func_start sub_80B3DC8 -sub_80B3DC8: @ 80B3DC8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - lsls r0, 24 - lsrs r6, r0, 24 - adds r4, r6, 0 - ldr r7, _080B3EA8 @ =gMartInfo - ldrb r1, [r7, 0xD] - adds r0, r6, 0 - bl sub_80A52C4 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080B3DEE - adds r0, r6, 0 - bl sub_80B37F8 -_080B3DEE: - ldr r0, _080B3EAC @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080B3ED8 - ldr r0, _080B3EB0 @ =gMartTotalCost - mov r8, r0 - ldrb r0, [r7, 0xB] - ldrb r1, [r7, 0x9] - adds r0, r1 - ldr r1, [r7, 0x4] - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - bl ItemId_GetPrice - adds r4, r0, 0 - movs r0, 0x1 - bl GetPriceReduction - lsls r4, 16 - lsrs r4, 16 - lsls r0, 24 - lsrs r0, 24 - asrs r4, r0 - ldr r0, _080B3EB4 @ =gTasks - lsls r5, r6, 2 - adds r5, r6 - lsls r5, 3 - adds r5, r0 - movs r1, 0xA - ldrsh r0, [r5, r1] - muls r0, r4 - mov r2, r8 - str r0, [r2] - movs r0, 0 - movs r1, 0xA - movs r2, 0xD - movs r3, 0xD - bl MenuZeroFillWindowRect - ldr r0, _080B3EB8 @ =gBGTilemapBuffers + 0x800 - movs r1, 0x2 - str r1, [sp] - movs r1, 0 - str r1, [sp, 0x4] - movs r1, 0x1 - movs r2, 0xB - movs r3, 0xC - bl sub_80A3FA0 - bl sub_80B379C - bl sub_80B3420 - ldrb r0, [r7, 0xB] - ldrb r1, [r7, 0x9] - adds r0, r1 - ldr r1, [r7, 0x4] - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - ldr r1, _080B3EBC @ =gStringVar1 - bl CopyItemName - ldr r0, _080B3EC0 @ =gStringVar2 - movs r2, 0xA - ldrsh r1, [r5, r2] - movs r2, 0 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - ldr r0, _080B3EC4 @ =gStringVar3 - mov r2, r8 - ldr r1, [r2] - movs r2, 0 - movs r3, 0x8 - bl ConvertIntToDecimalStringN - ldr r4, _080B3EC8 @ =gStringVar4 - ldr r1, _080B3ECC @ =gOtherText_ThatWillBe - adds r0, r4, 0 - bl StringExpandPlaceholders - ldr r2, _080B3ED0 @ =sub_80B3D38 - ldr r3, _080B3ED4 @ =0x0000c3e1 - adds r0, r6, 0 - adds r1, r4, 0 - bl DisplayItemMessageOnField - b _080B3EF0 - .align 2, 0 -_080B3EA8: .4byte gMartInfo -_080B3EAC: .4byte gMain -_080B3EB0: .4byte gMartTotalCost -_080B3EB4: .4byte gTasks -_080B3EB8: .4byte gBGTilemapBuffers + 0x800 -_080B3EBC: .4byte gStringVar1 -_080B3EC0: .4byte gStringVar2 -_080B3EC4: .4byte gStringVar3 -_080B3EC8: .4byte gStringVar4 -_080B3ECC: .4byte gOtherText_ThatWillBe -_080B3ED0: .4byte sub_80B3D38 -_080B3ED4: .4byte 0x0000c3e1 -_080B3ED8: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080B3EF0 - ldrb r1, [r7, 0x9] - adds r0, r1, 0 - movs r2, 0 - bl sub_80B39D0 - adds r0, r4, 0 - bl sub_80B4378 -_080B3EF0: - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80B3DC8 - - thumb_func_start sub_80B3EFC -sub_80B3EFC: @ 80B3EFC - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _080B3F78 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - movs r1, 0x1 - strh r1, [r0, 0xA] - movs r0, 0 - movs r1, 0xA - movs r2, 0xD - movs r3, 0xD - bl MenuDrawTextWindow - adds r0, r5, 0 - bl sub_80B37F8 - ldr r6, _080B3F7C @ =gMartInfo - ldrb r0, [r6, 0xB] - ldrb r1, [r6, 0x9] - adds r0, r1 - ldr r1, [r6, 0x4] - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - bl ItemId_GetPrice - adds r4, r0, 0 - movs r0, 0x1 - bl GetPriceReduction - ldr r1, _080B3F80 @ =gSaveBlock1 - movs r2, 0x92 - lsls r2, 3 - adds r1, r2 - lsls r4, 16 - lsrs r4, 16 - lsls r0, 24 - lsrs r0, 24 - asrs r4, r0 - ldr r0, [r1] - adds r1, r4, 0 - bl __udivsi3 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x63 - bls _080B3F62 - movs r0, 0x63 -_080B3F62: - strb r0, [r6, 0xD] - ldr r0, _080B3F78 @ =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r0 - ldr r0, _080B3F84 @ =sub_80B3DC8 - str r0, [r1] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B3F78: .4byte gTasks -_080B3F7C: .4byte gMartInfo -_080B3F80: .4byte gSaveBlock1 -_080B3F84: .4byte sub_80B3DC8 - thumb_func_end sub_80B3EFC - thumb_func_start sub_80B3F88 sub_80B3F88: @ 80B3F88 push {r4-r7,lr} diff --git a/include/text.h b/include/text.h index 99987d2c3..9a70dec11 100644 --- a/include/text.h +++ b/include/text.h @@ -97,35 +97,35 @@ struct WindowConfig struct Window { - u8 textMode; - u8 fontNum; - u8 language; - u8 foregroundColor; - u8 backgroundColor; - u8 shadowColor; - u8 paletteNum; - u8 tilemapLeft; - u8 tilemapTop; - u8 width; - u8 height; - u8 win_field_B; - u8 win_field_C; - u8 delayCounter; - u8 spacing; - u8 win_field_F; - u8 cursorX; - u8 cursorY; - u8 left; - u16 top; - u16 state; - u16 downArrowCounter; - u16 tileDataStartOffset; - u16 tileDataOffset; - u16 textIndex; - const u8 *text; - u8 *tileData; - u16 *tilemap; - struct WindowConfig *config; + /*0x00*/ u8 textMode; + /*0x01*/ u8 fontNum; + /*0x02*/ u8 language; + /*0x03*/ u8 foregroundColor; + /*0x04*/ u8 backgroundColor; + /*0x05*/ u8 shadowColor; + /*0x06*/ u8 paletteNum; + /*0x07*/ u8 tilemapLeft; + /*0x08*/ u8 tilemapTop; + /*0x09*/ u8 width; + /*0x0A*/ u8 height; + /*0x0B*/ u8 win_field_B; + /*0x0C*/ u8 win_field_C; + /*0x0D*/ u8 delayCounter; + /*0x0E*/ u8 spacing; + /*0x0F*/ u8 win_field_F; + /*0x10*/ u8 cursorX; + /*0x11*/ u8 cursorY; + /*0x12*/ u8 left; + /*0x14*/ u16 top; // padded to 0x14 + /*0x16*/ u16 state; + /*0x18*/ u16 downArrowCounter; + /*0x1A*/ u16 tileDataStartOffset; + /*0x1C*/ u16 tileDataOffset; + /*0x1E*/ u16 textIndex; + /*0x20*/ const u8 *text; + /*0x24*/ u8 *tileData; + /*0x28*/ u16 *tilemap; + /*0x2C*/ struct WindowConfig *config; }; extern vu16 *const gBGControlRegs[]; diff --git a/src/shop.c b/src/shop.c index 6150d1b78..0ce14c004 100644 --- a/src/shop.c +++ b/src/shop.c @@ -28,6 +28,7 @@ extern void sub_80B4378(u8); extern void sub_80B4470(u8); +extern bool8 sub_80A52C4(u8, u8); enum { @@ -45,10 +46,12 @@ struct MartInfo /* 0xA */ u8 numChoices; /* 0xB */ u8 choicesAbove; /* 0xC */ u8 martType; + /* 0xD */ u8 unkD; }; extern struct MartInfo gMartInfo; extern struct MenuAction gUnknown_083CC6D0[]; +extern struct YesNoFuncTable gUnknown_083CC708[]; extern u32 gMartTotalCost; // the total cost of a purchase before checking out. @@ -700,3 +703,60 @@ void sub_80B3BF4(u8 taskId) else DisplayItemMessageOnField(taskId, gOtherText_NotEnoughMoney, sub_80B3BD0, 0xC3E1); } + +void sub_80B3D38(u8 taskId) +{ + DisplayYesNoMenu(7, 8, 1); + sub_80A3FA0(gBGTilemapBuffers[1], 8, 9, 4, 4, 0xC3E1); + DoYesNoFuncWithChoice(taskId, gUnknown_083CC708); +} + +void sub_80B3D7C(u8 taskId) +{ + sub_80B39D0(gMartInfo.cursor, gMartInfo.cursor, 0); + MenuZeroFillWindowRect(0x7, 0x8, 0xD, 0xD); + sub_80A3FA0(gBGTilemapBuffers[1], 0x8, 0x9, 0x4, 0x4, 0); + sub_80B4378(taskId); +} + +void sub_80B3DC8(u8 taskId) +{ + if(sub_80A52C4(taskId, gMartInfo.unkD) == TRUE) + sub_80B37F8(taskId); + + if(gMain.newKeys & A_BUTTON) + { + gMartTotalCost = (ItemId_GetPrice(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]) >> GetPriceReduction(1)) * gTasks[taskId].data[1]; // set total cost of your purchase. + MenuZeroFillWindowRect(0, 0xA, 0xD, 0xD); + sub_80A3FA0(gBGTilemapBuffers[1], 0x1, 0xB, 0xC, 0x2, 0); + sub_80B379C(); + sub_80B3420(); + CopyItemName(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor], gStringVar1); + ConvertIntToDecimalStringN(gStringVar2, gTasks[taskId].data[1], 0, 0x2); + ConvertIntToDecimalStringN(gStringVar3, gMartTotalCost, 0, 0x8); + StringExpandPlaceholders(gStringVar4, gOtherText_ThatWillBe); + DisplayItemMessageOnField(taskId, gStringVar4, sub_80B3D38, 0xC3E1); + } + else if(gMain.newKeys & B_BUTTON) + { + sub_80B39D0(gMartInfo.cursor, gMartInfo.cursor, 0); + sub_80B4378(taskId); + } +} + +void sub_80B3EFC(u8 taskId) +{ + u16 var; + + gTasks[taskId].data[1] = 1; + MenuDrawTextWindow(0, 0xA, 0xD, 0xD); + sub_80B37F8(taskId); + + var = gSaveBlock1.money / (ItemId_GetPrice(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]) >> GetPriceReduction(1)); + if(var > 99) + gMartInfo.unkD = 99; + else + gMartInfo.unkD = var; + + gTasks[taskId].func = sub_80B3DC8; +} -- cgit v1.2.3 From d5b9456949371bf73ca93dc13202ab4dbf2387d1 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Fri, 25 Aug 2017 20:07:39 +0200 Subject: start decompiling evo graphics --- asm/evolution_graphics.s | 1255 ---------------------------------------------- asm/evolution_scene.s | 16 +- include/gba/types.h | 10 +- include/songs.h | 78 +-- ld_script.txt | 1 + src/evolution_graphics.c | 404 +++++++++++++++ 6 files changed, 457 insertions(+), 1307 deletions(-) create mode 100644 src/evolution_graphics.c diff --git a/asm/evolution_graphics.s b/asm/evolution_graphics.s index 1130e085e..12264b99b 100644 --- a/asm/evolution_graphics.s +++ b/asm/evolution_graphics.s @@ -6,1263 +6,8 @@ .text - thumb_func_start nullsub_84 -nullsub_84: @ 814951C - bx lr - thumb_func_end nullsub_84 - - thumb_func_start sub_8149520 -sub_8149520: @ 8149520 - push {r4,r5,lr} - sub sp, 0x4 - movs r4, 0 - ldr r5, _08149554 @ =gUnknown_08416ED0 -_08149528: - adds r0, r4, 0 - adds r0, 0x14 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r4, 1 - adds r1, r5 - ldrh r1, [r1] - str r1, [sp] - movs r2, 0 - movs r3, 0 - bl SetOamMatrix - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0xB - bls _08149528 - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08149554: .4byte gUnknown_08416ED0 - thumb_func_end sub_8149520 - - thumb_func_start sub_8149558 -sub_8149558: @ 8149558 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x22 - ldrsh r0, [r4, r1] - cmp r0, 0x8 - ble _08149606 - movs r2, 0x3C - ldrsh r0, [r4, r2] - adds r1, r0, 0 - muls r1, r0 - adds r0, r1, 0 - movs r1, 0x50 - bl __divsi3 - movs r1, 0x58 - subs r1, r0 - strh r1, [r4, 0x22] - ldrh r0, [r4, 0x3A] - lsls r0, 24 - lsrs r0, 24 - movs r2, 0x38 - ldrsh r1, [r4, r2] - bl Sin - lsls r0, 16 - asrs r0, 16 - cmp r0, 0 - bge _08149592 - adds r0, 0x3 -_08149592: - asrs r0, 2 - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x3A] - lsls r0, 24 - lsrs r0, 24 - movs r2, 0x38 - ldrsh r1, [r4, r2] - bl Cos - strh r0, [r4, 0x24] - ldrh r0, [r4, 0x3A] - adds r0, 0x4 - strh r0, [r4, 0x3A] - ldrh r1, [r4, 0x3C] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _081495BC - ldrh r0, [r4, 0x38] - subs r0, 0x1 - strh r0, [r4, 0x38] -_081495BC: - ldrh r0, [r4, 0x3C] - adds r0, 0x1 - strh r0, [r4, 0x3C] - movs r1, 0x26 - ldrsh r0, [r4, r1] - cmp r0, 0 - ble _081495D2 - adds r1, r4, 0 - adds r1, 0x43 - movs r0, 0x1 - b _081495D8 -_081495D2: - adds r1, r4, 0 - adds r1, 0x43 - movs r0, 0x14 -_081495D8: - strb r0, [r1] - movs r2, 0x38 - ldrsh r0, [r4, r2] - cmp r0, 0 - bge _081495E4 - adds r0, 0x3 -_081495E4: - asrs r0, 2 - adds r0, 0x14 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x1F - bls _081495F2 - movs r2, 0x1F -_081495F2: - movs r0, 0x1F - ands r2, r0 - lsls r2, 1 - ldrb r1, [r4, 0x3] - movs r0, 0x3F - negs r0, r0 - ands r0, r1 - orrs r0, r2 - strb r0, [r4, 0x3] - b _0814960C -_08149606: - adds r0, r4, 0 - bl DestroySprite -_0814960C: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8149558 - - thumb_func_start sub_8149614 -sub_8149614: @ 8149614 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _08149664 @ =gSpriteTemplate_8416EB8 - movs r1, 0x78 - movs r2, 0x58 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x40 - beq _0814965E - ldr r4, _08149668 @ =gSprites - lsls r3, r0, 4 - adds r3, r0 - lsls r3, 2 - adds r2, r3, r4 - movs r1, 0 - movs r0, 0x30 - strh r0, [r2, 0x38] - strh r5, [r2, 0x3A] - strh r1, [r2, 0x3C] - ldrb r1, [r2, 0x1] - subs r0, 0x34 - ands r0, r1 - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2, 0x1] - ldrb r0, [r2, 0x3] - movs r1, 0x3E - orrs r0, r1 - strb r0, [r2, 0x3] - adds r4, 0x1C - adds r3, r4 - ldr r0, _0814966C @ =sub_8149558 - str r0, [r3] -_0814965E: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08149664: .4byte gSpriteTemplate_8416EB8 -_08149668: .4byte gSprites -_0814966C: .4byte sub_8149558 - thumb_func_end sub_8149614 - - thumb_func_start sub_8149670 -sub_8149670: @ 8149670 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x22 - ldrsh r0, [r4, r1] - cmp r0, 0x57 - bgt _081496D6 - movs r2, 0x3C - ldrsh r0, [r4, r2] - adds r1, r0, 0 - muls r1, r0 - adds r0, r1, 0 - movs r1, 0x5 - bl __divsi3 - adds r0, 0x8 - strh r0, [r4, 0x22] - ldrh r0, [r4, 0x3A] - lsls r0, 24 - lsrs r0, 24 - movs r2, 0x38 - ldrsh r1, [r4, r2] - bl Sin - lsls r0, 16 - asrs r0, 16 - cmp r0, 0 - bge _081496A8 - adds r0, 0x3 -_081496A8: - asrs r0, 2 - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x3A] - lsls r0, 24 - lsrs r0, 24 - movs r2, 0x38 - ldrsh r1, [r4, r2] - bl Cos - strh r0, [r4, 0x24] - movs r1, 0x3C - ldrsh r0, [r4, r1] - lsls r0, 26 - lsrs r0, 24 - movs r1, 0x28 - bl Sin - adds r0, 0x8 - strh r0, [r4, 0x38] - ldrh r0, [r4, 0x3C] - adds r0, 0x1 - strh r0, [r4, 0x3C] - b _081496DC -_081496D6: - adds r0, r4, 0 - bl DestroySprite -_081496DC: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8149670 - - thumb_func_start sub_81496E4 -sub_81496E4: @ 81496E4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _08149740 @ =gSpriteTemplate_8416EB8 - movs r1, 0x78 - movs r2, 0x8 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x40 - beq _0814973A - ldr r4, _08149744 @ =gSprites - lsls r3, r0, 4 - adds r3, r0 - lsls r3, 2 - adds r2, r3, r4 - movs r1, 0 - movs r0, 0x8 - strh r0, [r2, 0x38] - strh r5, [r2, 0x3A] - strh r1, [r2, 0x3C] - ldrb r1, [r2, 0x1] - subs r0, 0xC - ands r0, r1 - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2, 0x1] - ldrb r1, [r2, 0x3] - movs r0, 0x3F - negs r0, r0 - ands r0, r1 - movs r1, 0x32 - orrs r0, r1 - strb r0, [r2, 0x3] - adds r2, 0x43 - movs r0, 0x1 - strb r0, [r2] - adds r4, 0x1C - adds r3, r4 - ldr r0, _08149748 @ =sub_8149670 - str r0, [r3] -_0814973A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08149740: .4byte gSpriteTemplate_8416EB8 -_08149744: .4byte gSprites -_08149748: .4byte sub_8149670 - thumb_func_end sub_81496E4 - - thumb_func_start sub_814974C -sub_814974C: @ 814974C - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x38 - ldrsh r0, [r4, r1] - cmp r0, 0x8 - ble _08149788 - ldrh r0, [r4, 0x3A] - lsls r0, 24 - lsrs r0, 24 - movs r2, 0x38 - ldrsh r1, [r4, r2] - bl Sin - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x3A] - lsls r0, 24 - lsrs r0, 24 - movs r2, 0x38 - ldrsh r1, [r4, r2] - bl Cos - strh r0, [r4, 0x24] - ldrh r0, [r4, 0x38] - ldrh r1, [r4, 0x34] - subs r0, r1 - strh r0, [r4, 0x38] - ldrh r0, [r4, 0x3A] - adds r0, 0x4 - strh r0, [r4, 0x3A] - b _0814978E -_08149788: - adds r0, r4, 0 - bl DestroySprite -_0814978E: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_814974C - - thumb_func_start sub_8149794 -sub_8149794: @ 8149794 - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, 24 - lsrs r5, r1, 24 - ldr r0, _081497F0 @ =gSpriteTemplate_8416EB8 - movs r1, 0x78 - movs r2, 0x38 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x40 - beq _081497EA - ldr r4, _081497F4 @ =gSprites - lsls r3, r0, 4 - adds r3, r0 - lsls r3, 2 - adds r2, r3, r4 - movs r1, 0 - strh r5, [r2, 0x34] - movs r0, 0x78 - strh r0, [r2, 0x38] - strh r6, [r2, 0x3A] - strh r1, [r2, 0x3C] - ldrb r1, [r2, 0x1] - subs r0, 0x7C - ands r0, r1 - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2, 0x1] - ldrb r0, [r2, 0x3] - movs r1, 0x3E - orrs r0, r1 - strb r0, [r2, 0x3] - adds r2, 0x43 - movs r0, 0x1 - strb r0, [r2] - adds r4, 0x1C - adds r3, r4 - ldr r0, _081497F8 @ =sub_814974C - str r0, [r3] -_081497EA: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081497F0: .4byte gSpriteTemplate_8416EB8 -_081497F4: .4byte gSprites -_081497F8: .4byte sub_814974C - thumb_func_end sub_8149794 - - thumb_func_start sub_81497FC -sub_81497FC: @ 81497FC - push {r4,r5,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0x3C] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - bne _08149810 - ldrh r0, [r4, 0x22] - adds r0, 0x1 - strh r0, [r4, 0x22] -_08149810: - ldrh r1, [r4, 0x3A] - movs r2, 0x3A - ldrsh r0, [r4, r2] - cmp r0, 0x7F - bgt _081498C0 - lsls r0, r1, 24 - lsrs r0, 24 - movs r5, 0x38 - ldrsh r1, [r4, r5] - bl Sin - negs r0, r0 - strh r0, [r4, 0x26] - movs r0, 0x34 - ldrsh r1, [r4, r0] - movs r2, 0x3C - ldrsh r0, [r4, r2] - muls r0, r1 - movs r1, 0x3 - bl __divsi3 - adds r0, 0x78 - strh r0, [r4, 0x20] - ldrh r0, [r4, 0x3A] - adds r3, r0, 0x1 - strh r3, [r4, 0x3A] - movs r5, 0x3A - ldrsh r1, [r4, r5] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - cmp r0, 0 - bge _08149854 - adds r0, 0x7F -_08149854: - asrs r0, 7 - movs r1, 0x1F - subs r1, r0 - lsls r1, 24 - lsrs r2, r1, 24 - lsls r0, r3, 16 - asrs r0, 16 - cmp r0, 0x40 - ble _08149870 - adds r1, r4, 0 - adds r1, 0x43 - movs r0, 0x1 - strb r0, [r1] - b _081498A0 -_08149870: - adds r3, r4, 0 - adds r3, 0x3E - ldrb r1, [r3] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r3] - adds r1, r4, 0 - adds r1, 0x43 - movs r0, 0x14 - strb r0, [r1] - ldrh r1, [r4, 0x3A] - movs r5, 0x3A - ldrsh r0, [r4, r5] - cmp r0, 0x70 - ble _081498A0 - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _081498A0 - ldrb r0, [r3] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r3] -_081498A0: - cmp r2, 0x13 - bhi _081498A6 - movs r2, 0x14 -_081498A6: - movs r0, 0x1F - ands r2, r0 - lsls r2, 1 - ldrb r1, [r4, 0x3] - movs r0, 0x3F - negs r0, r0 - ands r0, r1 - orrs r0, r2 - strb r0, [r4, 0x3] - ldrh r0, [r4, 0x3C] - adds r0, 0x1 - strh r0, [r4, 0x3C] - b _081498C6 -_081498C0: - adds r0, r4, 0 - bl DestroySprite -_081498C6: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_81497FC - - thumb_func_start sub_81498CC -sub_81498CC: @ 81498CC - push {r4-r6,lr} - mov r6, r8 - push {r6} - ldr r0, _08149948 @ =gSpriteTemplate_8416EB8 - movs r1, 0x78 - movs r2, 0x38 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x40 - beq _0814993C - bl Random - ldr r6, _0814994C @ =gSprites - lsls r5, r4, 4 - adds r5, r4 - lsls r5, 2 - adds r4, r5, r6 - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x7 - bl __umodsi3 - movs r1, 0x3 - subs r1, r0 - movs r0, 0 - mov r8, r0 - strh r1, [r4, 0x34] - bl Random - movs r1, 0x3F - ands r1, r0 - adds r1, 0x30 - strh r1, [r4, 0x38] - mov r0, r8 - strh r0, [r4, 0x3C] - ldrb r1, [r4, 0x1] - movs r0, 0x4 - negs r0, r0 - ands r0, r1 - movs r1, 0x1 - orrs r0, r1 - strb r0, [r4, 0x1] - ldrb r0, [r4, 0x3] - movs r1, 0x3E - orrs r0, r1 - strb r0, [r4, 0x3] - adds r4, 0x43 - movs r0, 0x14 - strb r0, [r4] - adds r6, 0x1C - adds r5, r6 - ldr r0, _08149950 @ =sub_81497FC - str r0, [r5] -_0814993C: - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08149948: .4byte gSpriteTemplate_8416EB8 -_0814994C: .4byte gSprites -_08149950: .4byte sub_81497FC - thumb_func_end sub_81498CC - - thumb_func_start sub_8149954 -sub_8149954: @ 8149954 - push {lr} - ldr r0, _08149968 @ =gUnknown_08416E84 - bl LoadCompressedObjectPic - ldr r0, _0814996C @ =gUnknown_08416E94 - bl LoadSpritePalettes - pop {r0} - bx r0 - .align 2, 0 -_08149968: .4byte gUnknown_08416E84 -_0814996C: .4byte gUnknown_08416E94 - thumb_func_end sub_8149954 - - thumb_func_start sub_8149970 -sub_8149970: @ 8149970 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - ldr r0, _08149998 @ =sub_81499A0 - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0814999C @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - strh r4, [r1, 0xA] - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08149998: .4byte sub_81499A0 -_0814999C: .4byte gTasks - thumb_func_end sub_8149970 - thumb_func_start sub_81499A0 -sub_81499A0: @ 81499A0 - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl sub_8149520 - ldr r0, _081499E4 @ =gTasks - lsls r5, r4, 2 - adds r5, r4 - lsls r5, 3 - adds r5, r0 - movs r0, 0 - strh r0, [r5, 0x26] - movs r0, 0xA - ldrsh r1, [r5, r0] - movs r0, 0x3 - lsls r0, r1 - ldr r1, _081499E8 @ =0x00007fff - str r1, [sp] - movs r1, 0xA - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _081499EC @ =sub_81499F0 - str r0, [r5] - movs r0, 0x8C - bl PlaySE - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_081499E4: .4byte gTasks -_081499E8: .4byte 0x00007fff -_081499EC: .4byte sub_81499F0 - thumb_func_end sub_81499A0 - thumb_func_start sub_81499F0 -sub_81499F0: @ 81499F0 - push {r4-r7,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _08149A48 @ =gTasks - lsls r3, r5, 2 - adds r0, r3, r5 - lsls r0, 3 - adds r1, r0, r1 - ldrh r2, [r1, 0x26] - movs r4, 0x26 - ldrsh r0, [r1, r4] - cmp r0, 0x3F - bgt _08149A4C - movs r0, 0x7 - ands r0, r2 - adds r7, r3, 0 - cmp r0, 0 - bne _08149A36 - movs r4, 0 - adds r6, r1, 0 -_08149A18: - ldrh r1, [r6, 0x26] - movs r0, 0x78 - ands r0, r1 - lsls r0, 1 - lsls r1, r4, 6 - adds r0, r1 - lsls r0, 24 - lsrs r0, 24 - bl sub_8149614 - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3 - bls _08149A18 -_08149A36: - ldr r0, _08149A48 @ =gTasks - adds r1, r7, r5 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x26] - adds r0, 0x1 - strh r0, [r1, 0x26] - b _08149A54 - .align 2, 0 -_08149A48: .4byte gTasks -_08149A4C: - movs r0, 0x60 - strh r0, [r1, 0x26] - ldr r0, _08149A5C @ =sub_8149A60 - str r0, [r1] -_08149A54: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08149A5C: .4byte sub_8149A60 - thumb_func_end sub_81499F0 - - thumb_func_start sub_8149A60 -sub_8149A60: @ 8149A60 - push {r4,lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r1, _08149A80 @ =gTasks - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r1, r0, r1 - ldrh r3, [r1, 0x26] - movs r4, 0x26 - ldrsh r0, [r1, r4] - cmp r0, 0 - beq _08149A84 - subs r0, r3, 0x1 - strh r0, [r1, 0x26] - b _08149A8A - .align 2, 0 -_08149A80: .4byte gTasks -_08149A84: - adds r0, r2, 0 - bl DestroyTask -_08149A8A: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8149A60 - - thumb_func_start sub_8149A90 -sub_8149A90: @ 8149A90 - push {lr} - ldr r0, _08149AA4 @ =sub_8149AA8 - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_08149AA4: .4byte sub_8149AA8 - thumb_func_end sub_8149A90 - - thumb_func_start sub_8149AA8 -sub_8149AA8: @ 8149AA8 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl sub_8149520 - ldr r1, _08149AD4 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - movs r1, 0 - strh r1, [r0, 0x26] - ldr r1, _08149AD8 @ =sub_8149ADC - str r1, [r0] - movs r0, 0xB7 - bl PlaySE - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08149AD4: .4byte gTasks -_08149AD8: .4byte sub_8149ADC - thumb_func_end sub_8149AA8 - - thumb_func_start sub_8149ADC -sub_8149ADC: @ 8149ADC - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _08149B20 @ =gTasks - lsls r2, r5, 2 - adds r0, r2, r5 - lsls r0, 3 - adds r1, r0, r1 - movs r3, 0x26 - ldrsh r0, [r1, r3] - cmp r0, 0x5F - bgt _08149B24 - adds r6, r2, 0 - cmp r0, 0x5 - bgt _08149B0E - movs r4, 0 -_08149AFC: - lsls r0, r4, 28 - lsrs r0, 24 - bl sub_81496E4 - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x8 - bls _08149AFC -_08149B0E: - ldr r0, _08149B20 @ =gTasks - adds r1, r6, r5 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x26] - adds r0, 0x1 - strh r0, [r1, 0x26] - b _08149B28 - .align 2, 0 -_08149B20: .4byte gTasks -_08149B24: - ldr r0, _08149B30 @ =sub_8149B34 - str r0, [r1] -_08149B28: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08149B30: .4byte sub_8149B34 - thumb_func_end sub_8149ADC - - thumb_func_start sub_8149B34 -sub_8149B34: @ 8149B34 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - pop {r0} - bx r0 - thumb_func_end sub_8149B34 - - thumb_func_start sub_8149B44 -sub_8149B44: @ 8149B44 - push {lr} - ldr r0, _08149B58 @ =sub_8149B5C - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_08149B58: .4byte sub_8149B5C - thumb_func_end sub_8149B44 - - thumb_func_start sub_8149B5C -sub_8149B5C: @ 8149B5C - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl sub_8149520 - ldr r1, _08149B88 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - movs r1, 0 - strh r1, [r0, 0x26] - ldr r1, _08149B8C @ =sub_8149B90 - str r1, [r0] - movs r0, 0x66 - bl PlaySE - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08149B88: .4byte gTasks -_08149B8C: .4byte sub_8149B90 - thumb_func_end sub_8149B5C - - thumb_func_start sub_8149B90 -sub_8149B90: @ 8149B90 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _08149BFC @ =gTasks - lsls r2, r5, 2 - adds r0, r2, r5 - lsls r0, 3 - adds r1, r0, r1 - movs r3, 0x26 - ldrsh r0, [r1, r3] - cmp r0, 0x2F - bgt _08149C00 - adds r6, r2, 0 - cmp r0, 0 - bne _08149BC4 - movs r4, 0 -_08149BB0: - lsls r0, r4, 28 - lsrs r0, 24 - movs r1, 0x4 - bl sub_8149794 - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0xF - bls _08149BB0 -_08149BC4: - ldr r0, _08149BFC @ =gTasks - adds r1, r6, r5 - lsls r1, 3 - adds r1, r0 - movs r2, 0x26 - ldrsh r0, [r1, r2] - cmp r0, 0x20 - bne _08149BEA - movs r4, 0 -_08149BD6: - lsls r0, r4, 28 - lsrs r0, 24 - movs r1, 0x8 - bl sub_8149794 - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0xF - bls _08149BD6 -_08149BEA: - ldr r0, _08149BFC @ =gTasks - adds r1, r6, r5 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x26] - adds r0, 0x1 - strh r0, [r1, 0x26] - b _08149C04 - .align 2, 0 -_08149BFC: .4byte gTasks -_08149C00: - ldr r0, _08149C0C @ =sub_8149C10 - str r0, [r1] -_08149C04: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08149C0C: .4byte sub_8149C10 - thumb_func_end sub_8149B90 - - thumb_func_start sub_8149C10 -sub_8149C10: @ 8149C10 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - pop {r0} - bx r0 - thumb_func_end sub_8149C10 - - thumb_func_start sub_8149C20 -sub_8149C20: @ 8149C20 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - ldr r0, _08149C48 @ =sub_8149C50 - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08149C4C @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - strh r4, [r1, 0xC] - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08149C48: .4byte sub_8149C50 -_08149C4C: .4byte gTasks - thumb_func_end sub_8149C20 - - thumb_func_start sub_8149C50 -sub_8149C50: @ 8149C50 - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl sub_8149520 - ldr r0, _08149C98 @ =gTasks - lsls r5, r4, 2 - adds r5, r4 - lsls r5, 3 - adds r5, r0 - movs r0, 0 - strh r0, [r5, 0x26] - ldr r0, _08149C9C @ =gPlttBufferFaded + 0x40 - ldr r1, _08149CA0 @ =gPlttBufferUnfaded + 0x40 - movs r2, 0x30 - bl CpuSet - ldr r0, _08149CA4 @ =0xfff9001c - ldr r1, _08149CA8 @ =0x00007fff - str r1, [sp] - movs r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _08149CAC @ =sub_8149CB0 - str r0, [r5] - movs r0, 0xCA - bl PlaySE - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08149C98: .4byte gTasks -_08149C9C: .4byte gPlttBufferFaded + 0x40 -_08149CA0: .4byte gPlttBufferUnfaded + 0x40 -_08149CA4: .4byte 0xfff9001c -_08149CA8: .4byte 0x00007fff -_08149CAC: .4byte sub_8149CB0 - thumb_func_end sub_8149C50 - - thumb_func_start sub_8149CB0 -sub_8149CB0: @ 8149CB0 - push {r4-r6,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r6, r0, 24 - ldr r1, _08149CE8 @ =gTasks - lsls r5, r6, 2 - adds r0, r5, r6 - lsls r0, 3 - adds r1, r0, r1 - movs r0, 0x26 - ldrsh r2, [r1, r0] - cmp r2, 0x7F - bgt _08149D2C - adds r0, r2, 0 - cmp r0, 0 - beq _08149CEC - cmp r0, 0x20 - beq _08149D00 - cmp r2, 0x31 - bgt _08149D10 - bl Random - movs r1, 0x7 - ands r0, r1 - bl sub_81498CC - b _08149D10 - .align 2, 0 -_08149CE8: .4byte gTasks -_08149CEC: - movs r4, 0 -_08149CEE: - adds r0, r4, 0 - bl sub_81498CC - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x7 - bls _08149CEE - b _08149D10 -_08149D00: - ldr r0, _08149D20 @ =0xffff001c - ldr r1, _08149D24 @ =0x00007fff - str r1, [sp] - movs r1, 0x10 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade -_08149D10: - ldr r0, _08149D28 @ =gTasks - adds r1, r5, r6 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x26] - adds r0, 0x1 - strh r0, [r1, 0x26] - b _08149D30 - .align 2, 0 -_08149D20: .4byte 0xffff001c -_08149D24: .4byte 0x00007fff -_08149D28: .4byte gTasks -_08149D2C: - ldr r0, _08149D38 @ =sub_8149D3C - str r0, [r1] -_08149D30: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08149D38: .4byte sub_8149D3C - thumb_func_end sub_8149CB0 - - thumb_func_start sub_8149D3C -sub_8149D3C: @ 8149D3C - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, _08149D58 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08149D54 - adds r0, r2, 0 - bl DestroyTask -_08149D54: - pop {r0} - bx r0 - .align 2, 0 -_08149D58: .4byte gPaletteFade - thumb_func_end sub_8149D3C - - thumb_func_start sub_8149D5C -sub_8149D5C: @ 8149D5C - push {r4,lr} - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - ldr r0, _08149D84 @ =sub_8149D8C - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08149D88 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - strh r4, [r1, 0xC] - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08149D84: .4byte sub_8149D8C -_08149D88: .4byte gTasks - thumb_func_end sub_8149D5C - - thumb_func_start sub_8149D8C -sub_8149D8C: @ 8149D8C - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl sub_8149520 - ldr r0, _08149DD4 @ =gTasks - lsls r5, r4, 2 - adds r5, r4 - lsls r5, 3 - adds r5, r0 - movs r0, 0 - strh r0, [r5, 0x26] - ldr r0, _08149DD8 @ =gPlttBufferFaded + 0x40 - ldr r1, _08149DDC @ =gPlttBufferUnfaded + 0x40 - movs r2, 0x30 - bl CpuSet - ldr r0, _08149DE0 @ =0xfff90001 - ldr r1, _08149DE4 @ =0x00007fff - str r1, [sp] - movs r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _08149DE8 @ =sub_8149DEC - str r0, [r5] - movs r0, 0xCA - bl PlaySE - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08149DD4: .4byte gTasks -_08149DD8: .4byte gPlttBufferFaded + 0x40 -_08149DDC: .4byte gPlttBufferUnfaded + 0x40 -_08149DE0: .4byte 0xfff90001 -_08149DE4: .4byte 0x00007fff -_08149DE8: .4byte sub_8149DEC - thumb_func_end sub_8149D8C - - thumb_func_start sub_8149DEC -sub_8149DEC: @ 8149DEC - push {r4-r6,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r6, r0, 24 - ldr r1, _08149E24 @ =gTasks - lsls r5, r6, 2 - adds r0, r5, r6 - lsls r0, 3 - adds r1, r0, r1 - movs r0, 0x26 - ldrsh r2, [r1, r0] - cmp r2, 0x7F - bgt _08149E68 - adds r0, r2, 0 - cmp r0, 0 - beq _08149E28 - cmp r0, 0x20 - beq _08149E3C - cmp r2, 0x31 - bgt _08149E4C - bl Random - movs r1, 0x7 - ands r0, r1 - bl sub_81498CC - b _08149E4C - .align 2, 0 -_08149E24: .4byte gTasks -_08149E28: - movs r4, 0 -_08149E2A: - adds r0, r4, 0 - bl sub_81498CC - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x7 - bls _08149E2A - b _08149E4C -_08149E3C: - ldr r0, _08149E5C @ =0xffff0001 - ldr r1, _08149E60 @ =0x00007fff - str r1, [sp] - movs r1, 0x10 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade -_08149E4C: - ldr r0, _08149E64 @ =gTasks - adds r1, r5, r6 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x26] - adds r0, 0x1 - strh r0, [r1, 0x26] - b _08149E6C - .align 2, 0 -_08149E5C: .4byte 0xffff0001 -_08149E60: .4byte 0x00007fff -_08149E64: .4byte gTasks -_08149E68: - ldr r0, _08149E74 @ =sub_8149D3C - str r0, [r1] -_08149E6C: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08149E74: .4byte sub_8149D3C - thumb_func_end sub_8149DEC thumb_func_start nullsub_85 nullsub_85: @ 8149E78 diff --git a/asm/evolution_scene.s b/asm/evolution_scene.s index c6d3c0978..961d5e258 100644 --- a/asm/evolution_scene.s +++ b/asm/evolution_scene.s @@ -1502,7 +1502,7 @@ _081125FC: bl _08112FD0 _0811260C: movs r0, 0x11 - bl sub_8149970 + bl LaunchTask_PreEvoSparklesSet1 ldr r1, _08112628 @ =gBattleCommunication strb r0, [r1, 0x2] ldr r0, _0811262C @ =gTasks @@ -1537,7 +1537,7 @@ _08112646: ldr r1, _08112668 @ =0x02014800 movs r0, 0x1 strb r0, [r1, 0x3] - bl sub_8149A90 + bl LaunchTask_PreEvoSparklesSet2 strb r0, [r4, 0x2] bl _08112FD0 .align 2, 0 @@ -1600,7 +1600,7 @@ _081126CC: _081126D8: .4byte 0x02014800 _081126DC: .4byte gBattleCommunication _081126E0: - bl sub_8149B44 + bl LaunchTask_PostEvoSparklesSet1 ldr r1, _081126F4 @ =gBattleCommunication strb r0, [r1, 0x2] ldr r0, _081126F8 @ =gTasks @@ -1629,7 +1629,7 @@ _08112712: lsls r4, 3 adds r4, r6 ldrh r0, [r4, 0x10] - bl sub_8149C20 + bl LaunchTask_PostEvoSparklesSet2AndFlash strb r0, [r5, 0x2] b _08112992 .align 2, 0 @@ -2807,7 +2807,7 @@ _0811315C: adds r0, r2, 0 strh r0, [r1] movs r0, 0x11 - bl sub_8149970 + bl LaunchTask_PreEvoSparklesSet1 ldr r1, _08113184 @ =gBattleCommunication strb r0, [r1, 0x2] ldr r1, _08113188 @ =gTasks @@ -2842,7 +2842,7 @@ _081131A2: ldr r1, _081131C4 @ =0x02014800 movs r0, 0x1 strb r0, [r1, 0x3] - bl sub_8149A90 + bl LaunchTask_PreEvoSparklesSet2 strb r0, [r4, 0x2] bl _08113B3A .align 2, 0 @@ -2897,7 +2897,7 @@ _08113220: _08113224: .4byte 0x02014800 _08113228: .4byte gBattleCommunication _0811322C: - bl sub_8149B44 + bl LaunchTask_PostEvoSparklesSet1 ldr r1, _08113240 @ =gBattleCommunication strb r0, [r1, 0x2] ldr r1, _08113244 @ =gTasks @@ -2926,7 +2926,7 @@ _0811325E: lsls r4, 3 adds r4, r6 ldrh r0, [r4, 0x10] - bl sub_8149D5C + bl LaunchTask_PostEvoSparklesSet2AndFlash_Trade strb r0, [r5, 0x2] b _081132E2 .align 2, 0 diff --git a/include/gba/types.h b/include/gba/types.h index 96e057ab7..480619d21 100644 --- a/include/gba/types.h +++ b/include/gba/types.h @@ -39,11 +39,11 @@ struct PlttData struct OamData { /*0x00*/ u32 y:8; - /*0x01*/ u32 affineMode:2; - u32 objMode:2; - u32 mosaic:1; - u32 bpp:1; - u32 shape:2; + /*0x01*/ u32 affineMode:2; // 0x1, 0x2 = 0x3 + u32 objMode:2; // 0x4, 0x8 = 0xC + u32 mosaic:1; // 0x10 + u32 bpp:1; // 0x20 + u32 shape:2; // 0x40, 0x80 /*0x02*/ u32 x:9; u32 matrixNum:5; // bits 3/4 are h-flip/v-flip if not in affine mode diff --git a/include/songs.h b/include/songs.h index 25707ddd3..afd26d683 100644 --- a/include/songs.h +++ b/include/songs.h @@ -105,8 +105,8 @@ enum SE_C_PASI, SE_C_SYU, SE_C_PIKON, - SE_REAPOKE, - SE_OP_BASYU, + /*0x66*/ SE_REAPOKE, + /*0x67*/ SE_OP_BASYU, /*0x68*/ SE_BT_START, SE_DENDOU, SE_JIHANKI, @@ -131,20 +131,20 @@ enum /*0x7D*/ SE_W145B, /*0x7E*/ SE_W145C, /*0x7F*/ SE_W240, - SE_W015, - SE_W081, - SE_W081B, - SE_W088, - SE_W016, - SE_W016B, - SE_W003, - SE_W104, - SE_W013, - SE_W196, - SE_W086, - SE_W004, - SE_W025, - SE_W025B, + /*0x80*/ SE_W015, + /*0x81*/ SE_W081, + /*0x82*/ SE_W081B, + /*0x83*/ SE_W088, + /*0x84*/ SE_W016, + /*0x85*/ SE_W016B, + /*0x86*/ SE_W003, + /*0x87*/ SE_W104, + /*0x88*/ SE_W013, + /*0x89*/ SE_W196, + /*0x8A*/ SE_W086, + /*0x8B*/ SE_W004, + /*0x8C*/ SE_W025, + /*0x8D*/ SE_W025B, SE_W152, SE_W026, SE_W172, @@ -185,29 +185,29 @@ enum SE_W071B, SE_W071, SE_W103, - SE_W062, - SE_W062B, - SE_W048, - SE_W187, - SE_W118, - SE_W155, - SE_W122, - SE_W060, - SE_W185, - SE_W014, - SE_W043, - SE_W207, - SE_W207B, - SE_W215, - SE_W109, - SE_W173, - SE_W280, - SE_W202, - SE_W060B, - SE_W076, - SE_W080, - SE_W100, - SE_W107, + /*0xB6*/ SE_W062, + /*0xB7*/ SE_W062B, + /*0xB8*/ SE_W048, + /*0xB9*/ SE_W187, + /*0xBA*/ SE_W118, + /*0xBB*/ SE_W155, + /*0xBC*/ SE_W122, + /*0xBD*/ SE_W060, + /*0xBE*/ SE_W185, + /*0xBF*/ SE_W014, + /*0xC0*/ SE_W043, + /*0xC1*/ SE_W207, + /*0xC2*/ SE_W207B, + /*0xC3*/ SE_W215, + /*0xC4*/ SE_W109, + /*0xC5*/ SE_W173, + /*0xC6*/ SE_W280, + /*0xC7*/ SE_W202, + /*0xC8*/ SE_W060B, + /*0xC9*/ SE_W076, + /*0xCA*/ SE_W080, + /*0xCB*/ SE_W100, + /*0xCC*/ SE_W107, SE_W166, SE_W129, SE_W115, diff --git a/ld_script.txt b/ld_script.txt index 888882236..86529518f 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -266,6 +266,7 @@ SECTIONS { src/pokeblock_feed.o(.text); src/clear_save_data_menu.o(.text); src/intro_credits_graphics.o(.text); + src/evolution_graphics.o(.text); asm/evolution_graphics.o(.text); src/bard_music.o(.text); src/fldeff_teleport.o(.text); diff --git a/src/evolution_graphics.c b/src/evolution_graphics.c new file mode 100644 index 000000000..ed7296a8e --- /dev/null +++ b/src/evolution_graphics.c @@ -0,0 +1,404 @@ +#include "global.h" +#include "sprite.h" +#include "trig.h" +#include "rng.h" +#include "decompress.h" +#include "task.h" +#include "sound.h" +#include "songs.h" +#include "palette.h" + +// this file's functions +static void EvoTask_BeginPreSet1_FadeAndPlaySE(u8 taskID); +static void EvoTask_CreatePreEvoSparkleSet1(u8 taskID); +static void EvoTask_WaitForPre1SparklesToGoUp(u8 taskID); +static void EvoTask_BeginPreSparklesSet2(u8 taskID); +static void EvoTask_CreatePreEvoSparklesSet2(u8 taskID); +static void EvoTask_DestroyPreSet2Task(u8 taskID); +static void EvoTask_BeginPostSparklesSet1(u8 taskID); +static void EvoTask_CreatePostEvoSparklesSet1(u8 taskID); +static void EvoTask_DestroyPostSet1Task(u8 taskID); + +static void EvoTask_BeginPostSparklesSet2_AndFlash(u8 taskID); +static void EvoTask_CreatePostEvoSparklesSet2_AndFlash(u8 taskID); +static void EvoTask_BeginPostSparklesSet2_AndFlash_Trade(u8 taskID); +static void EvoTask_CreatePostEvoSparklesSet2_AndFlash_Trade(u8 taskID); +static void EvoTask_DestroyPostSet2AndFlashTask(u8 taskID); + +extern const s16 gUnknown_08416ED0[]; +extern const struct SpriteTemplate gSpriteTemplate_8416EB8; +extern const struct CompressedSpriteSheet gUnknown_08416E84; +extern const struct SpritePalette gUnknown_08416E94[]; + +void nullsub_84(struct Sprite* sprite) +{ + +} + +static void sub_8149520(void) +{ + u16 i; + for (i = 0; i < 12; i++) + { + SetOamMatrix(20 + i, gUnknown_08416ED0[i], 0, 0, gUnknown_08416ED0[i]); + } +} + +static void SpriteCB_PreEvoSparkleSet1(struct Sprite* sprite) +{ + if (sprite->pos1.y > 8) + { + u8 matrixNum; + + sprite->pos1.y = 88 - (sprite->data7 * sprite->data7) / 80; + sprite->pos2.y = Sin((u8)(sprite->data6), sprite->data5) / 4; + sprite->pos2.x = Cos((u8)(sprite->data6), sprite->data5); + sprite->data6 += 4; + if (sprite->data7 & 1) + sprite->data5--; + sprite->data7++; + if (sprite->pos2.y > 0) + sprite->subpriority = 1; + else + sprite->subpriority = 20; + matrixNum = sprite->data5 / 4 + 20; + if (matrixNum > 31) + matrixNum = 31; + sprite->oam.matrixNum = matrixNum; + } + else + DestroySprite(sprite); +} + +static void CreatePreEvoSparkleSet1(u8 arg0) +{ + u8 spriteID = CreateSprite(&gSpriteTemplate_8416EB8, 120, 88, 0); + if (spriteID != MAX_SPRITES) + { + gSprites[spriteID].data5 = 48; + gSprites[spriteID].data6 = arg0; + gSprites[spriteID].data7 = 0; + gSprites[spriteID].oam.affineMode = 1; + gSprites[spriteID].oam.matrixNum = 31; + gSprites[spriteID].callback = SpriteCB_PreEvoSparkleSet1; + } +} + +static void SpriteCB_PreEvoSparkleSet2(struct Sprite* sprite) +{ + if (sprite->pos1.y < 88) + { + sprite->pos1.y = 8 + (sprite->data7 * sprite->data7) / 5; + sprite->pos2.y = Sin((u8)(sprite->data6), sprite->data5) / 4; + sprite->pos2.x = Cos((u8)(sprite->data6), sprite->data5); + sprite->data5 = 8 + Sin((u8)(sprite->data7 * 4), 40); + sprite->data7++; + } + else + DestroySprite(sprite); +} + +static void CreatePreEvoSparkleSet2(u8 arg0) +{ + u8 spriteID = CreateSprite(&gSpriteTemplate_8416EB8, 120, 8, 0); + if (spriteID != MAX_SPRITES) + { + gSprites[spriteID].data5 = 8; + gSprites[spriteID].data6 = arg0; + gSprites[spriteID].data7 = 0; + gSprites[spriteID].oam.affineMode = 1; + gSprites[spriteID].oam.matrixNum = 25; + gSprites[spriteID].subpriority = 1; + gSprites[spriteID].callback = SpriteCB_PreEvoSparkleSet2; + } +} + +static void SpriteCB_PostEvoSparkleSet1(struct Sprite* sprite) +{ + if (sprite->data5 > 8) + { + sprite->pos2.y = Sin((u8)(sprite->data6), sprite->data5); + sprite->pos2.x = Cos((u8)(sprite->data6), sprite->data5); + sprite->data5 -= sprite->data3; + sprite->data6 += 4; + } + else + DestroySprite(sprite); +} + +static void CreatePostEvoSparkleSet1(u8 arg0, u8 arg1) +{ + u8 spriteID = CreateSprite(&gSpriteTemplate_8416EB8, 120, 56, 0); + if (spriteID != MAX_SPRITES) + { + gSprites[spriteID].data3 = arg1; + gSprites[spriteID].data5 = 120; + gSprites[spriteID].data6 = arg0; + gSprites[spriteID].data7 = 0; + gSprites[spriteID].oam.affineMode = 1; + gSprites[spriteID].oam.matrixNum = 31; + gSprites[spriteID].subpriority = 1; + gSprites[spriteID].callback = SpriteCB_PostEvoSparkleSet1; + } +} + +static void SpriteCB_PostEvoSparkleSet2(struct Sprite* sprite) +{ + if (!(sprite->data7 & 3)) + sprite->pos1.y++; + if (sprite->data6 < 128) + { + u8 matrixNum; + + sprite->pos2.y = -Sin((u8)(sprite->data6), sprite->data5); + sprite->pos1.x = 120 + (sprite->data3 * sprite->data7) / 3; + sprite->data6++; + matrixNum = 31 - (sprite->data6 * 12 / 128); + if (sprite->data6 > 64) + sprite->subpriority = 1; + else + { + sprite->invisible = 0; + sprite->subpriority = 20; + if (sprite->data6 > 112 && sprite->data6 & 1) + sprite->invisible = 1; + } + if (matrixNum < 20) + matrixNum = 20; + sprite->oam.matrixNum = matrixNum; + sprite->data7++; + } + else + DestroySprite(sprite); +} + +void CreatePostEvoSparkleSet2(u8 arg0) +{ + u8 spriteID = CreateSprite(&gSpriteTemplate_8416EB8, 120, 56, 0); + if (spriteID != MAX_SPRITES) + { + gSprites[spriteID].data3 = 3 - (Random() % 7); + gSprites[spriteID].data5 = 48 + (Random() & 0x3F); + gSprites[spriteID].data7 = 0; + gSprites[spriteID].oam.affineMode = 1; + gSprites[spriteID].oam.matrixNum = 31; + gSprites[spriteID].subpriority = 20; + gSprites[spriteID].callback = SpriteCB_PostEvoSparkleSet2; + } +} + +void sub_8149954(void) +{ + LoadCompressedObjectPic(&gUnknown_08416E84); + LoadSpritePalettes(gUnknown_08416E94); +} + +u8 LaunchTask_PreEvoSparklesSet1(u16 arg0) +{ + u8 taskID = CreateTask(EvoTask_BeginPreSet1_FadeAndPlaySE, 0); + gTasks[taskID].data[1] = arg0; + return taskID; +} + +#define tFrameCounter data[15] + +static void EvoTask_BeginPreSet1_FadeAndPlaySE(u8 taskID) +{ + sub_8149520(); + gTasks[taskID].tFrameCounter = 0; + BeginNormalPaletteFade(3 << gTasks[taskID].data[1], 0xA, 0, 0x10, 0x7FFF); + gTasks[taskID].func = EvoTask_CreatePreEvoSparkleSet1; + PlaySE(SE_W025); +} + +static void EvoTask_CreatePreEvoSparkleSet1(u8 taskID) +{ + if (gTasks[taskID].tFrameCounter < 64) + { + if (!(gTasks[taskID].tFrameCounter & 7)) + { + u8 i; + for (i = 0; i < 4; i++) + CreatePreEvoSparkleSet1((0x78 & gTasks[taskID].tFrameCounter) * 2 + i * 64); + } + gTasks[taskID].tFrameCounter++; + } + else + { + gTasks[taskID].tFrameCounter = 96; + gTasks[taskID].func = EvoTask_WaitForPre1SparklesToGoUp; + } +} + +static void EvoTask_WaitForPre1SparklesToGoUp(u8 taskID) +{ + if (gTasks[taskID].tFrameCounter != 0) + gTasks[taskID].tFrameCounter--; + else + DestroyTask(taskID); +} + +u8 LaunchTask_PreEvoSparklesSet2(void) +{ + return CreateTask(EvoTask_BeginPreSparklesSet2, 0); +} + +static void EvoTask_BeginPreSparklesSet2(u8 taskID) +{ + sub_8149520(); + gTasks[taskID].tFrameCounter = 0; + gTasks[taskID].func = EvoTask_CreatePreEvoSparklesSet2; + PlaySE(SE_W062B); +} + +static void EvoTask_CreatePreEvoSparklesSet2(u8 taskID) +{ + if (gTasks[taskID].tFrameCounter < 96) + { + if (gTasks[taskID].tFrameCounter < 6) + { + u8 i; + for (i = 0; i < 9; i++) + CreatePreEvoSparkleSet2(i * 16); + } + gTasks[taskID].tFrameCounter++; + } + else + gTasks[taskID].func = EvoTask_DestroyPreSet2Task; +} + +static void EvoTask_DestroyPreSet2Task(u8 taskID) +{ + DestroyTask(taskID); +} + +u8 LaunchTask_PostEvoSparklesSet1(void) +{ + return CreateTask(EvoTask_BeginPostSparklesSet1, 0); +} + +static void EvoTask_BeginPostSparklesSet1(u8 taskID) +{ + sub_8149520(); + gTasks[taskID].tFrameCounter = 0; + gTasks[taskID].func = EvoTask_CreatePostEvoSparklesSet1; + PlaySE(SE_REAPOKE); +} + +static void EvoTask_CreatePostEvoSparklesSet1(u8 taskID) +{ + if (gTasks[taskID].tFrameCounter < 48) + { + if (gTasks[taskID].tFrameCounter == 0) + { + u8 i; + for (i = 0; i < 16; i++) + CreatePostEvoSparkleSet1(i * 16, 4); + } + if (gTasks[taskID].tFrameCounter == 32) + { + u8 i; + for (i = 0; i < 16; i++) + CreatePostEvoSparkleSet1(i * 16, 8); + } + gTasks[taskID].tFrameCounter++; + } + else + gTasks[taskID].func = EvoTask_DestroyPostSet1Task; +} + +static void EvoTask_DestroyPostSet1Task(u8 taskID) +{ + DestroyTask(taskID); +} + +u8 LaunchTask_PostEvoSparklesSet2AndFlash(u16 arg0) +{ + u8 taskID = CreateTask(EvoTask_BeginPostSparklesSet2_AndFlash, 0); + gTasks[taskID].data[2] = arg0; + return taskID; +} + +static void EvoTask_BeginPostSparklesSet2_AndFlash(u8 taskID) +{ + sub_8149520(); + gTasks[taskID].tFrameCounter = 0; + CpuSet(&gPlttBufferFaded[0x20], &gPlttBufferUnfaded[0x20], 0x30); + BeginNormalPaletteFade(0xFFF9001C, 0, 0, 0x10, 0x7FFF); + gTasks[taskID].func = EvoTask_CreatePostEvoSparklesSet2_AndFlash; + PlaySE(SE_W080); +} + +static void EvoTask_CreatePostEvoSparklesSet2_AndFlash(u8 taskID) +{ + if (gTasks[taskID].tFrameCounter < 128) + { + u8 i; + switch (gTasks[taskID].tFrameCounter) + { + default: + if (gTasks[taskID].tFrameCounter < 50) + CreatePostEvoSparkleSet2(Random() & 7); + break; + case 0: + for (i = 0; i < 8; i++) + CreatePostEvoSparkleSet2(i); + break; + case 32: + BeginNormalPaletteFade(0xFFFF001C, 0x10, 0x10, 0, 0x7FFF); + break; + } + gTasks[taskID].tFrameCounter++; + } + else + gTasks[taskID].func = EvoTask_DestroyPostSet2AndFlashTask; +} + +static void EvoTask_DestroyPostSet2AndFlashTask(u8 taskID) +{ + if (!gPaletteFade.active) + DestroyTask(taskID); +} + +u8 LaunchTask_PostEvoSparklesSet2AndFlash_Trade(u16 arg0) +{ + u8 taskID = CreateTask(EvoTask_BeginPostSparklesSet2_AndFlash_Trade, 0); + gTasks[taskID].data[2] = arg0; + return taskID; +} + +static void EvoTask_BeginPostSparklesSet2_AndFlash_Trade(u8 taskID) +{ + sub_8149520(); + gTasks[taskID].tFrameCounter = 0; + CpuSet(&gPlttBufferFaded[0x20], &gPlttBufferUnfaded[0x20], 0x30); + BeginNormalPaletteFade(0xFFF90001, 0, 0, 0x10, 0x7FFF); + gTasks[taskID].func = EvoTask_CreatePostEvoSparklesSet2_AndFlash_Trade; + PlaySE(SE_W080); +} + +static void EvoTask_CreatePostEvoSparklesSet2_AndFlash_Trade(u8 taskID) +{ + if (gTasks[taskID].tFrameCounter < 128) + { + u8 i; + switch (gTasks[taskID].tFrameCounter) + { + default: + if (gTasks[taskID].tFrameCounter < 50) + CreatePostEvoSparkleSet2(Random() & 7); + break; + case 0: + for (i = 0; i < 8; i++) + CreatePostEvoSparkleSet2(i); + break; + case 32: + BeginNormalPaletteFade(0xFFFF0001, 0x10, 0x10, 0, 0x7FFF); + break; + } + gTasks[taskID].tFrameCounter++; + } + else + gTasks[taskID].func = EvoTask_DestroyPostSet2AndFlashTask; +} + -- cgit v1.2.3 From b4f9fe17d766c5713875701c3ed8b2a0a6af8ce8 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Fri, 25 Aug 2017 20:55:08 +0200 Subject: move evo graphics data to C --- asm/evolution_scene.s | 4 +- data/evolution_graphics.s | 70 --------------------------------- ld_script.txt | 2 +- src/evolution_graphics.c | 98 +++++++++++++++++++++++++++++++++++++---------- 4 files changed, 81 insertions(+), 93 deletions(-) delete mode 100644 data/evolution_graphics.s diff --git a/asm/evolution_scene.s b/asm/evolution_scene.s index 961d5e258..54011fb4e 100644 --- a/asm/evolution_scene.s +++ b/asm/evolution_scene.s @@ -365,7 +365,7 @@ EvolutionScene: @ 8111984 movs r3, 0x4 orrs r0, r3 strb r0, [r1] - bl sub_8149954 + bl LoadEvoSparkleSpriteAndPal ldr r0, _08111C74 @ =Task_EvolutionScene movs r1, 0 bl CreateTask @@ -1035,7 +1035,7 @@ TradeEvolutionScene: @ 81120E4 movs r2, 0x4 orrs r0, r2 strb r0, [r1] - bl sub_8149954 + bl LoadEvoSparkleSpriteAndPal ldr r0, _08112264 @ =Task_TradeEvolutionScene movs r1, 0 bl CreateTask diff --git a/data/evolution_graphics.s b/data/evolution_graphics.s deleted file mode 100644 index e362b4dba..000000000 --- a/data/evolution_graphics.s +++ /dev/null @@ -1,70 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - - .align 2 -gEvoSparklePalette: @ 8416E44 - .incbin "graphics/misc/evo_sparkle.gbapal" - - .align 2 -gEvoSparkleTiles: @ 8416E64 - .incbin "graphics/misc/evo_sparkle.4bpp.lz" - -gUnknown_08416E84:: @ 8416E84 - obj_tiles gEvoSparkleTiles, 0x20, 1001 - .space 8 - -gUnknown_08416E94:: @ 8416E94 - obj_pal gEvoSparklePalette, 1001 - .space 8 - - .align 2 -gOamData_8416EA4:: @ 8416EA4 - .2byte 0x00A0 - .2byte 0x0000 - .2byte 0x0400 - - .align 2 -gSpriteAnim_8416EAC:: @ 8416EAC - obj_image_anim_frame 0, 8 - obj_image_anim_end - - .align 2 -gSpriteAnimTable_8416EB4:: @ 8416EB4 - .4byte gSpriteAnim_8416EAC - - .align 2 -gSpriteTemplate_8416EB8:: @ 8416EB8 - spr_template 1001, 1001, gOamData_8416EA4, gSpriteAnimTable_8416EB4, NULL, gDummySpriteAffineAnimTable, nullsub_84 - - .align 1 -gUnknown_08416ED0:: @ 8416ED0 - .2byte 0x3C0 - .2byte 0x380 - .2byte 0x340 - .2byte 0x300 - .2byte 0x2C0 - .2byte 0x280 - .2byte 0x240 - .2byte 0x200 - .2byte 0x1C0 - .2byte 0x180 - .2byte 0x140 - .2byte 0x100 - .2byte 0xFFFC - .2byte 0x10 - .2byte 0xFFFD - .2byte 0x30 - .2byte 0xFFFE - .2byte 0x50 - .2byte 0xFFFF - .2byte 0x70 - .2byte 0x1 - .2byte 0x70 - .2byte 0x2 - .2byte 0x50 - .2byte 0x3 - .2byte 0x30 - .2byte 0x4 - .2byte 0x10 diff --git a/ld_script.txt b/ld_script.txt index 86529518f..5a8cc3ff5 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -475,7 +475,7 @@ SECTIONS { src/save_failed_screen.o(.rodata); src/pokeblock_feed.o(.rodata); data/intro_credits_graphics.o(.rodata); - data/evolution_graphics.o(.rodata); + src/evolution_graphics.o(.rodata); data/bard_music.o(.rodata); data/unknown_debug_menu.o(.rodata); data/strings2.o(.rodata); diff --git a/src/evolution_graphics.c b/src/evolution_graphics.c index ed7296a8e..45f60c614 100644 --- a/src/evolution_graphics.c +++ b/src/evolution_graphics.c @@ -9,6 +9,7 @@ #include "palette.h" // this file's functions +static void EvoSparkle_DummySpriteCb(struct Sprite* sprite); static void EvoTask_BeginPreSet1_FadeAndPlaySE(u8 taskID); static void EvoTask_CreatePreEvoSparkleSet1(u8 taskID); static void EvoTask_WaitForPre1SparklesToGoUp(u8 taskID); @@ -18,29 +19,86 @@ static void EvoTask_DestroyPreSet2Task(u8 taskID); static void EvoTask_BeginPostSparklesSet1(u8 taskID); static void EvoTask_CreatePostEvoSparklesSet1(u8 taskID); static void EvoTask_DestroyPostSet1Task(u8 taskID); - static void EvoTask_BeginPostSparklesSet2_AndFlash(u8 taskID); static void EvoTask_CreatePostEvoSparklesSet2_AndFlash(u8 taskID); static void EvoTask_BeginPostSparklesSet2_AndFlash_Trade(u8 taskID); static void EvoTask_CreatePostEvoSparklesSet2_AndFlash_Trade(u8 taskID); static void EvoTask_DestroyPostSet2AndFlashTask(u8 taskID); -extern const s16 gUnknown_08416ED0[]; -extern const struct SpriteTemplate gSpriteTemplate_8416EB8; -extern const struct CompressedSpriteSheet gUnknown_08416E84; -extern const struct SpritePalette gUnknown_08416E94[]; +// const data +static const u16 sEvoSparklePalette[] = INCBIN_U16("graphics/misc/evo_sparkle.gbapal"); +static const u8 sEvoSparkleTiles[] = INCBIN_U8("graphics/misc/evo_sparkle.4bpp.lz"); + +static const struct CompressedSpriteSheet sEvoSparkleSpriteSheets[] = +{ + {sEvoSparkleTiles, 0x20, 1001}, + {NULL, 0, 0} +}; +static const struct SpritePalette sEvoSparkleSpritePals[] = +{ + {sEvoSparklePalette, 1001}, + {NULL, 0} +}; + +static const struct OamData sOamData_EvoSparkle = +{ + .y = 160, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sSpriteAnim_EvoSparkle[] = +{ + ANIMCMD_FRAME(0, 8), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_EvoSparkle[] = +{ + sSpriteAnim_EvoSparkle, +}; + +static const struct SpriteTemplate sEvoSparkleSpriteTemplate = +{ + .tileTag = 1001, + .paletteTag = 1001, + .oam = &sOamData_EvoSparkle, + .anims = sSpriteAnimTable_EvoSparkle, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = EvoSparkle_DummySpriteCb +}; + +static const s16 sEvoSparkleMatricies[] = +{ + 0x3C0, 0x380, 0x340, 0x300, 0x2C0, 0x280, 0x240, 0x200, 0x1C0, + 0x180, 0x140, 0x100, -4, 0x10, -3, 0x30, -2, 0x50, + -1, 0x70, 0x1, 0x70, 0x2, 0x50, 0x3, 0x30, 0x4, 0x10 +}; + +// code -void nullsub_84(struct Sprite* sprite) +static void EvoSparkle_DummySpriteCb(struct Sprite* sprite) { } -static void sub_8149520(void) +static void SetEvoSparklesMatrices(void) { u16 i; for (i = 0; i < 12; i++) { - SetOamMatrix(20 + i, gUnknown_08416ED0[i], 0, 0, gUnknown_08416ED0[i]); + SetOamMatrix(20 + i, sEvoSparkleMatricies[i], 0, 0, sEvoSparkleMatricies[i]); } } @@ -72,7 +130,7 @@ static void SpriteCB_PreEvoSparkleSet1(struct Sprite* sprite) static void CreatePreEvoSparkleSet1(u8 arg0) { - u8 spriteID = CreateSprite(&gSpriteTemplate_8416EB8, 120, 88, 0); + u8 spriteID = CreateSprite(&sEvoSparkleSpriteTemplate, 120, 88, 0); if (spriteID != MAX_SPRITES) { gSprites[spriteID].data5 = 48; @@ -100,7 +158,7 @@ static void SpriteCB_PreEvoSparkleSet2(struct Sprite* sprite) static void CreatePreEvoSparkleSet2(u8 arg0) { - u8 spriteID = CreateSprite(&gSpriteTemplate_8416EB8, 120, 8, 0); + u8 spriteID = CreateSprite(&sEvoSparkleSpriteTemplate, 120, 8, 0); if (spriteID != MAX_SPRITES) { gSprites[spriteID].data5 = 8; @@ -128,7 +186,7 @@ static void SpriteCB_PostEvoSparkleSet1(struct Sprite* sprite) static void CreatePostEvoSparkleSet1(u8 arg0, u8 arg1) { - u8 spriteID = CreateSprite(&gSpriteTemplate_8416EB8, 120, 56, 0); + u8 spriteID = CreateSprite(&sEvoSparkleSpriteTemplate, 120, 56, 0); if (spriteID != MAX_SPRITES) { gSprites[spriteID].data3 = arg1; @@ -174,7 +232,7 @@ static void SpriteCB_PostEvoSparkleSet2(struct Sprite* sprite) void CreatePostEvoSparkleSet2(u8 arg0) { - u8 spriteID = CreateSprite(&gSpriteTemplate_8416EB8, 120, 56, 0); + u8 spriteID = CreateSprite(&sEvoSparkleSpriteTemplate, 120, 56, 0); if (spriteID != MAX_SPRITES) { gSprites[spriteID].data3 = 3 - (Random() % 7); @@ -187,10 +245,10 @@ void CreatePostEvoSparkleSet2(u8 arg0) } } -void sub_8149954(void) +void LoadEvoSparkleSpriteAndPal(void) { - LoadCompressedObjectPic(&gUnknown_08416E84); - LoadSpritePalettes(gUnknown_08416E94); + LoadCompressedObjectPic(&sEvoSparkleSpriteSheets[0]); + LoadSpritePalettes(sEvoSparkleSpritePals); } u8 LaunchTask_PreEvoSparklesSet1(u16 arg0) @@ -204,7 +262,7 @@ u8 LaunchTask_PreEvoSparklesSet1(u16 arg0) static void EvoTask_BeginPreSet1_FadeAndPlaySE(u8 taskID) { - sub_8149520(); + SetEvoSparklesMatrices(); gTasks[taskID].tFrameCounter = 0; BeginNormalPaletteFade(3 << gTasks[taskID].data[1], 0xA, 0, 0x10, 0x7FFF); gTasks[taskID].func = EvoTask_CreatePreEvoSparkleSet1; @@ -245,7 +303,7 @@ u8 LaunchTask_PreEvoSparklesSet2(void) static void EvoTask_BeginPreSparklesSet2(u8 taskID) { - sub_8149520(); + SetEvoSparklesMatrices(); gTasks[taskID].tFrameCounter = 0; gTasks[taskID].func = EvoTask_CreatePreEvoSparklesSet2; PlaySE(SE_W062B); @@ -279,7 +337,7 @@ u8 LaunchTask_PostEvoSparklesSet1(void) static void EvoTask_BeginPostSparklesSet1(u8 taskID) { - sub_8149520(); + SetEvoSparklesMatrices(); gTasks[taskID].tFrameCounter = 0; gTasks[taskID].func = EvoTask_CreatePostEvoSparklesSet1; PlaySE(SE_REAPOKE); @@ -321,7 +379,7 @@ u8 LaunchTask_PostEvoSparklesSet2AndFlash(u16 arg0) static void EvoTask_BeginPostSparklesSet2_AndFlash(u8 taskID) { - sub_8149520(); + SetEvoSparklesMatrices(); gTasks[taskID].tFrameCounter = 0; CpuSet(&gPlttBufferFaded[0x20], &gPlttBufferUnfaded[0x20], 0x30); BeginNormalPaletteFade(0xFFF9001C, 0, 0, 0x10, 0x7FFF); @@ -369,7 +427,7 @@ u8 LaunchTask_PostEvoSparklesSet2AndFlash_Trade(u16 arg0) static void EvoTask_BeginPostSparklesSet2_AndFlash_Trade(u8 taskID) { - sub_8149520(); + SetEvoSparklesMatrices(); gTasks[taskID].tFrameCounter = 0; CpuSet(&gPlttBufferFaded[0x20], &gPlttBufferUnfaded[0x20], 0x30); BeginNormalPaletteFade(0xFFF90001, 0, 0, 0x10, 0x7FFF); -- cgit v1.2.3 From 7a26678cc022f466cbee26ae8a9e7011f01b7fb3 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Fri, 25 Aug 2017 15:10:50 -0400 Subject: decompile up to sub_80B40E8 --- asm/shop.s | 475 ------------------------------------------------------------- src/shop.c | 300 +++++++++++++++++++++++++++++++++++++- 2 files changed, 299 insertions(+), 476 deletions(-) diff --git a/asm/shop.s b/asm/shop.s index aed64908f..cd88636f4 100644 --- a/asm/shop.s +++ b/asm/shop.s @@ -6,481 +6,6 @@ .text - thumb_func_start sub_80B3F88 -sub_80B3F88: @ 80B3F88 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - ldr r0, _080B4020 @ =gMenuWindow - mov r8, r0 - ldr r1, [r0, 0x28] - ldr r3, _080B4024 @ =0x000003de - adds r1, r3 - adds r2, r1, 0 - adds r2, 0x80 - ldr r7, [r0, 0x24] - mov r10, r7 - ldr r0, _080B4028 @ =0x000003ff - mov r9, r0 - movs r6, 0xD -_080B3FAC: - adds r3, r2, 0 - subs r3, 0x40 - str r3, [sp] - movs r7, 0x40 - negs r7, r7 - adds r7, r1 - mov r12, r7 - adds r3, r2, 0 - adds r4, r1, 0 - movs r5, 0xE -_080B3FC0: - ldrh r2, [r4] - mov r1, r9 - ands r1, r2 - mov r7, r8 - ldrh r0, [r7, 0x1A] - adds r0, 0x1 - cmp r1, r0 - ble _080B3FD4 - adds r0, r2, 0 - adds r0, 0x3C -_080B3FD4: - strh r0, [r3] - adds r3, 0x2 - adds r4, 0x2 - subs r5, 0x1 - cmp r5, 0 - bge _080B3FC0 - ldr r2, [sp] - mov r1, r12 - subs r6, 0x1 - cmp r6, 0 - bge _080B3FAC - ldr r1, _080B402C @ =0x00003a20 - add r1, r10 - movs r0, 0xF0 - lsls r0, 3 - adds r2, r1, r0 - ldr r3, _080B4030 @ =0x040000d4 - ldr r5, _080B4034 @ =0x800000f0 - ldr r4, _080B4038 @ =0xfffffc40 - movs r6, 0xD -_080B3FFC: - str r1, [r3] - str r2, [r3, 0x4] - str r5, [r3, 0x8] - ldr r0, [r3, 0x8] - adds r2, r4 - adds r1, r4 - subs r6, 0x1 - cmp r6, 0 - bge _080B3FFC - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B4020: .4byte gMenuWindow -_080B4024: .4byte 0x000003de -_080B4028: .4byte 0x000003ff -_080B402C: .4byte 0x00003a20 -_080B4030: .4byte 0x040000d4 -_080B4034: .4byte 0x800000f0 -_080B4038: .4byte 0xfffffc40 - thumb_func_end sub_80B3F88 - - thumb_func_start sub_80B403C -sub_80B403C: @ 80B403C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - ldr r0, _080B40D8 @ =gMenuWindow - mov r8, r0 - ldr r2, [r0, 0x28] - adds r1, r2, 0 - adds r1, 0x9E - adds r2, r1, 0 - adds r1, 0x80 - ldr r3, [r0, 0x24] - mov r10, r3 - ldr r7, _080B40DC @ =0x000003ff - mov r9, r7 - movs r6, 0xD -_080B4060: - adds r0, r2, 0 - adds r0, 0x40 - str r0, [sp] - movs r3, 0x40 - adds r3, r1 - mov r12, r3 - adds r3, r2, 0 - adds r4, r1, 0 - movs r5, 0xE -_080B4072: - ldrh r2, [r4] - mov r1, r9 - ands r1, r2 - mov r7, r8 - ldrh r0, [r7, 0x1A] - adds r0, 0x1 - cmp r1, r0 - ble _080B4086 - adds r0, r2, 0 - subs r0, 0x3C -_080B4086: - strh r0, [r3] - adds r3, 0x2 - adds r4, 0x2 - subs r5, 0x1 - cmp r5, 0 - bge _080B4072 - ldr r2, [sp] - mov r1, r12 - subs r6, 0x1 - cmp r6, 0 - bge _080B4060 - movs r1, 0x96 - lsls r1, 4 - add r1, r10 - adds r2, r1, 0 - movs r0, 0xF0 - lsls r0, 3 - adds r1, r0 - ldr r3, _080B40E0 @ =0x040000d4 - ldr r5, _080B40E4 @ =0x800000f0 - movs r4, 0xF0 - lsls r4, 2 - movs r6, 0xD -_080B40B4: - str r1, [r3] - str r2, [r3, 0x4] - str r5, [r3, 0x8] - ldr r0, [r3, 0x8] - adds r2, r4 - adds r1, r4 - subs r6, 0x1 - cmp r6, 0 - bge _080B40B4 - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B40D8: .4byte gMenuWindow -_080B40DC: .4byte 0x000003ff -_080B40E0: .4byte 0x040000d4 -_080B40E4: .4byte 0x800000f0 - thumb_func_end sub_80B403C - - thumb_func_start sub_80B40E8 -sub_80B40E8: @ 80B40E8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r7, r0, 24 - mov r8, r7 - ldr r0, _080B4134 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080B4102 - b _080B436C -_080B4102: - ldr r2, _080B4138 @ =gMain - ldrh r0, [r2, 0x30] - movs r1, 0xF0 - ands r1, r0 - cmp r1, 0x40 - bne _080B414C - ldr r4, _080B413C @ =gMartInfo - ldrb r0, [r4, 0x9] - cmp r0, 0 - bne _080B4140 - ldrb r0, [r4, 0xB] - cmp r0, 0 - bne _080B411E - b _080B436C -_080B411E: - movs r0, 0x5 - bl PlaySE - ldrb r0, [r4, 0xB] - subs r0, 0x1 - strb r0, [r4, 0xB] - bl sub_80B3F88 - movs r0, 0 - movs r1, 0 - b _080B417A - .align 2, 0 -_080B4134: .4byte gPaletteFade -_080B4138: .4byte gMain -_080B413C: .4byte gMartInfo -_080B4140: - movs r0, 0x5 - bl PlaySE - movs r0, 0x1 - negs r0, r0 - b _080B41A0 -_080B414C: - cmp r1, 0x80 - bne _080B41AC - ldr r4, _080B418C @ =gMartInfo - ldrb r0, [r4, 0x9] - cmp r0, 0x7 - bne _080B4190 - ldrb r0, [r4, 0xB] - ldrb r1, [r4, 0x9] - adds r0, r1 - ldrb r1, [r4, 0x8] - cmp r0, r1 - bne _080B4166 - b _080B436C -_080B4166: - movs r0, 0x5 - bl PlaySE - ldrb r0, [r4, 0xB] - adds r0, 0x1 - strb r0, [r4, 0xB] - bl sub_80B403C - movs r0, 0x7 - movs r1, 0x7 -_080B417A: - movs r2, 0 - bl sub_80B39D0 - bl sub_80B3A70 - bl sub_80B32A4 - b _080B436C - .align 2, 0 -_080B418C: .4byte gMartInfo -_080B4190: - ldrb r2, [r4, 0x8] - cmp r0, r2 - bne _080B4198 - b _080B436C -_080B4198: - movs r0, 0x5 - bl PlaySE - movs r0, 0x1 -_080B41A0: - bl MoveMenuCursor - strb r0, [r4, 0x9] - bl sub_80B3A70 - b _080B436C -_080B41AC: - ldrh r1, [r2, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _080B41B8 - b _080B4358 -_080B41B8: - movs r0, 0x5 - bl PlaySE - ldr r6, _080B426C @ =gMartInfo - ldrb r0, [r6, 0xB] - ldrb r1, [r6, 0x9] - adds r0, r1 - ldrb r1, [r6, 0x8] - cmp r0, r1 - bne _080B41CE - b _080B4350 -_080B41CE: - movs r0, 0 - bl PauseVerticalScrollIndicator - movs r0, 0x1 - bl PauseVerticalScrollIndicator - movs r0, 0x1 - movs r1, 0x1 - bl sub_80F979C - ldrb r1, [r6, 0x9] - adds r0, r1, 0 - movs r2, 0x1 - bl sub_80B39D0 - bl HandleDestroyMenuCursors - movs r0, 0 - movs r1, 0xC - movs r2, 0xD - movs r3, 0x13 - bl MenuZeroFillWindowRect - ldrb r0, [r6, 0xC] - cmp r0, 0 - bne _080B428C - ldr r5, _080B4270 @ =gMartTotalCost - ldrb r0, [r6, 0xB] - ldrb r1, [r6, 0x9] - adds r0, r1 - ldr r1, [r6, 0x4] - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - bl ItemId_GetPrice - adds r4, r0, 0 - movs r0, 0x1 - bl GetPriceReduction - lsls r4, 16 - lsrs r4, 16 - lsls r0, 24 - lsrs r0, 24 - asrs r4, r0 - str r4, [r5] - ldr r0, _080B4274 @ =gSaveBlock1 - movs r2, 0x92 - lsls r2, 3 - adds r0, r2 - ldr r0, [r0] - adds r1, r4, 0 - bl IsEnoughMoney - lsls r0, 24 - cmp r0, 0 - beq _080B42BA - ldrb r0, [r6, 0xB] - ldrb r1, [r6, 0x9] - adds r0, r1 - ldr r1, [r6, 0x4] - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - ldr r1, _080B4278 @ =gStringVar1 - bl CopyItemName - ldr r4, _080B427C @ =gStringVar4 - ldr r1, _080B4280 @ =gOtherText_HowManyYouWant - adds r0, r4, 0 - bl StringExpandPlaceholders - ldr r2, _080B4284 @ =sub_80B3EFC - ldr r3, _080B4288 @ =0x0000c3e1 - adds r0, r7, 0 - adds r1, r4, 0 - bl DisplayItemMessageOnField - b _080B436C - .align 2, 0 -_080B426C: .4byte gMartInfo -_080B4270: .4byte gMartTotalCost -_080B4274: .4byte gSaveBlock1 -_080B4278: .4byte gStringVar1 -_080B427C: .4byte gStringVar4 -_080B4280: .4byte gOtherText_HowManyYouWant -_080B4284: .4byte sub_80B3EFC -_080B4288: .4byte 0x0000c3e1 -_080B428C: - ldr r5, _080B42C8 @ =gMartTotalCost - ldr r4, _080B42CC @ =gDecorations - ldrb r0, [r6, 0xB] - ldrb r1, [r6, 0x9] - adds r0, r1 - ldr r1, [r6, 0x4] - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - lsls r0, 5 - adds r0, r4 - ldrh r1, [r0, 0x14] - str r1, [r5] - ldr r0, _080B42D0 @ =gSaveBlock1 - movs r2, 0x92 - lsls r2, 3 - adds r0, r2 - ldr r0, [r0] - bl IsEnoughMoney - lsls r0, 24 - cmp r0, 0 - bne _080B42E0 -_080B42BA: - ldr r1, _080B42D4 @ =gOtherText_NotEnoughMoney - ldr r2, _080B42D8 @ =sub_80B3BD0 - ldr r3, _080B42DC @ =0x0000c3e1 - adds r0, r7, 0 - bl DisplayItemMessageOnField - b _080B436C - .align 2, 0 -_080B42C8: .4byte gMartTotalCost -_080B42CC: .4byte gDecorations -_080B42D0: .4byte gSaveBlock1 -_080B42D4: .4byte gOtherText_NotEnoughMoney -_080B42D8: .4byte sub_80B3BD0 -_080B42DC: .4byte 0x0000c3e1 -_080B42E0: - ldr r0, _080B4318 @ =gStringVar1 - ldrb r1, [r6, 0xB] - ldrb r2, [r6, 0x9] - adds r1, r2 - ldr r2, [r6, 0x4] - lsls r1, 1 - adds r1, r2 - ldrh r1, [r1] - lsls r1, 5 - adds r2, r4, 0x1 - adds r1, r2 - bl StringCopy - ldr r0, _080B431C @ =gStringVar2 - ldr r1, [r5] - movs r2, 0 - movs r3, 0x8 - bl ConvertIntToDecimalStringN - ldrb r0, [r6, 0xC] - cmp r0, 0x1 - bne _080B4328 - ldr r0, _080B4320 @ =gStringVar4 - ldr r1, _080B4324 @ =gOtherText_ThatWillBe2 - bl StringExpandPlaceholders - b _080B4330 - .align 2, 0 -_080B4318: .4byte gStringVar1 -_080B431C: .4byte gStringVar2 -_080B4320: .4byte gStringVar4 -_080B4324: .4byte gOtherText_ThatWillBe2 -_080B4328: - ldr r0, _080B4340 @ =gStringVar4 - ldr r1, _080B4344 @ =gOtherText_ThatWillBe3 - bl StringExpandPlaceholders -_080B4330: - ldr r1, _080B4340 @ =gStringVar4 - ldr r2, _080B4348 @ =sub_80B3D38 - ldr r3, _080B434C @ =0x0000c3e1 - mov r0, r8 - bl DisplayItemMessageOnField - b _080B436C - .align 2, 0 -_080B4340: .4byte gStringVar4 -_080B4344: .4byte gOtherText_ThatWillBe3 -_080B4348: .4byte sub_80B3D38 -_080B434C: .4byte 0x0000c3e1 -_080B4350: - adds r0, r7, 0 - bl sub_80B43F0 - b _080B436C -_080B4358: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080B436C - movs r0, 0x5 - bl PlaySE - mov r0, r8 - bl sub_80B43F0 -_080B436C: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80B40E8 - thumb_func_start sub_80B4378 sub_80B4378: @ 80B4378 push {r4,lr} diff --git a/src/shop.c b/src/shop.c index 0ce14c004..110b5cdea 100644 --- a/src/shop.c +++ b/src/shop.c @@ -27,6 +27,7 @@ #include "decoration_inventory.h" extern void sub_80B4378(u8); +extern void sub_80B43F0(u8); extern void sub_80B4470(u8); extern bool8 sub_80A52C4(u8, u8); @@ -42,7 +43,7 @@ struct MartInfo /* 0x0 */ void (* callback) (void); /* 0x4 */ u16 *itemList; /* 0x8 */ u8 itemCount; - /* 0x9 */ u8 cursor; + /* 0x9 */ u8 cursor; // this shows the on-screen true index of the cursor and not the current item selected. /* 0xA */ u8 numChoices; /* 0xB */ u8 choicesAbove; /* 0xC */ u8 martType; @@ -760,3 +761,300 @@ void sub_80B3EFC(u8 taskId) gTasks[taskId].func = sub_80B3DC8; } + +// the next two functions are strange gMenuWindow functions that manually acccess gMenuWindow.tilemap and do weird pointer arithmetic. i'd rather not deal with these right now. +__attribute__((naked)) +void sub_80B3F88(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\ + sub sp, 0x4\n\ + ldr r0, _080B4020 @ =gMenuWindow\n\ + mov r8, r0\n\ + ldr r1, [r0, 0x28]\n\ + ldr r3, _080B4024 @ =0x000003de\n\ + adds r1, r3\n\ + adds r2, r1, 0\n\ + adds r2, 0x80\n\ + ldr r7, [r0, 0x24]\n\ + mov r10, r7\n\ + ldr r0, _080B4028 @ =0x000003ff\n\ + mov r9, r0\n\ + movs r6, 0xD\n\ +_080B3FAC:\n\ + adds r3, r2, 0\n\ + subs r3, 0x40\n\ + str r3, [sp]\n\ + movs r7, 0x40\n\ + negs r7, r7\n\ + adds r7, r1\n\ + mov r12, r7\n\ + adds r3, r2, 0\n\ + adds r4, r1, 0\n\ + movs r5, 0xE\n\ +_080B3FC0:\n\ + ldrh r2, [r4]\n\ + mov r1, r9\n\ + ands r1, r2\n\ + mov r7, r8\n\ + ldrh r0, [r7, 0x1A]\n\ + adds r0, 0x1\n\ + cmp r1, r0\n\ + ble _080B3FD4\n\ + adds r0, r2, 0\n\ + adds r0, 0x3C\n\ +_080B3FD4:\n\ + strh r0, [r3]\n\ + adds r3, 0x2\n\ + adds r4, 0x2\n\ + subs r5, 0x1\n\ + cmp r5, 0\n\ + bge _080B3FC0\n\ + ldr r2, [sp]\n\ + mov r1, r12\n\ + subs r6, 0x1\n\ + cmp r6, 0\n\ + bge _080B3FAC\n\ + ldr r1, _080B402C @ =0x00003a20\n\ + add r1, r10\n\ + movs r0, 0xF0\n\ + lsls r0, 3\n\ + adds r2, r1, r0\n\ + ldr r3, _080B4030 @ =0x040000d4\n\ + ldr r5, _080B4034 @ =0x800000f0\n\ + ldr r4, _080B4038 @ =0xfffffc40\n\ + movs r6, 0xD\n\ +_080B3FFC:\n\ + str r1, [r3]\n\ + str r2, [r3, 0x4]\n\ + str r5, [r3, 0x8]\n\ + ldr r0, [r3, 0x8]\n\ + adds r2, r4\n\ + adds r1, r4\n\ + subs r6, 0x1\n\ + cmp r6, 0\n\ + bge _080B3FFC\n\ + add sp, 0x4\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\ +_080B4020: .4byte gMenuWindow\n\ +_080B4024: .4byte 0x000003de\n\ +_080B4028: .4byte 0x000003ff\n\ +_080B402C: .4byte 0x00003a20\n\ +_080B4030: .4byte 0x040000d4\n\ +_080B4034: .4byte 0x800000f0\n\ +_080B4038: .4byte 0xfffffc40\n\ + .syntax divided"); +} + +__attribute__((naked)) +void sub_80B403C(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\ + sub sp, 0x4\n\ + ldr r0, _080B40D8 @ =gMenuWindow\n\ + mov r8, r0\n\ + ldr r2, [r0, 0x28]\n\ + adds r1, r2, 0\n\ + adds r1, 0x9E\n\ + adds r2, r1, 0\n\ + adds r1, 0x80\n\ + ldr r3, [r0, 0x24]\n\ + mov r10, r3\n\ + ldr r7, _080B40DC @ =0x000003ff\n\ + mov r9, r7\n\ + movs r6, 0xD\n\ +_080B4060:\n\ + adds r0, r2, 0\n\ + adds r0, 0x40\n\ + str r0, [sp]\n\ + movs r3, 0x40\n\ + adds r3, r1\n\ + mov r12, r3\n\ + adds r3, r2, 0\n\ + adds r4, r1, 0\n\ + movs r5, 0xE\n\ +_080B4072:\n\ + ldrh r2, [r4]\n\ + mov r1, r9\n\ + ands r1, r2\n\ + mov r7, r8\n\ + ldrh r0, [r7, 0x1A]\n\ + adds r0, 0x1\n\ + cmp r1, r0\n\ + ble _080B4086\n\ + adds r0, r2, 0\n\ + subs r0, 0x3C\n\ +_080B4086:\n\ + strh r0, [r3]\n\ + adds r3, 0x2\n\ + adds r4, 0x2\n\ + subs r5, 0x1\n\ + cmp r5, 0\n\ + bge _080B4072\n\ + ldr r2, [sp]\n\ + mov r1, r12\n\ + subs r6, 0x1\n\ + cmp r6, 0\n\ + bge _080B4060\n\ + movs r1, 0x96\n\ + lsls r1, 4\n\ + add r1, r10\n\ + adds r2, r1, 0\n\ + movs r0, 0xF0\n\ + lsls r0, 3\n\ + adds r1, r0\n\ + ldr r3, _080B40E0 @ =0x040000d4\n\ + ldr r5, _080B40E4 @ =0x800000f0\n\ + movs r4, 0xF0\n\ + lsls r4, 2\n\ + movs r6, 0xD\n\ +_080B40B4:\n\ + str r1, [r3]\n\ + str r2, [r3, 0x4]\n\ + str r5, [r3, 0x8]\n\ + ldr r0, [r3, 0x8]\n\ + adds r2, r4\n\ + adds r1, r4\n\ + subs r6, 0x1\n\ + cmp r6, 0\n\ + bge _080B40B4\n\ + add sp, 0x4\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\ +_080B40D8: .4byte gMenuWindow\n\ +_080B40DC: .4byte 0x000003ff\n\ +_080B40E0: .4byte 0x040000d4\n\ +_080B40E4: .4byte 0x800000f0\n\ + .syntax divided"); +} + +void sub_80B40E8(u8 taskId) // Mart_DoCursorAction +{ + if(!gPaletteFade.active) + { + if((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP) // only up can be pressed + { + if(gMartInfo.cursor == 0) + { + if(gMartInfo.choicesAbove == 0) // if there are no choices above, dont bother + return; + + PlaySE(SE_SELECT); + gMartInfo.choicesAbove--; // since cursor is at the top and there are choices above the top, scroll the menu up by updating choicesAbove. + sub_80B3F88(); + sub_80B39D0(0, 0, 0); + sub_80B3A70(); + sub_80B32A4(); + } + else // if the cursor is not 0, choicesAbove cannot be updated yet since the cursor is at the top of the menu, so update cursor. + { + PlaySE(SE_SELECT); + gMartInfo.cursor = MoveMenuCursor(-1); // move cursor up + sub_80B3A70(); + } + } + else if((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN) // only down can be pressed + { + if(gMartInfo.cursor == 7) // are you at the bottom of the menu? + { + if(gMartInfo.choicesAbove + gMartInfo.cursor == gMartInfo.itemCount) // are you at cancel? + return; + + PlaySE(SE_SELECT); + gMartInfo.choicesAbove++; + sub_80B403C(); + sub_80B39D0(7, 7, 0); + sub_80B3A70(); + sub_80B32A4(); + } + else if(gMartInfo.cursor != gMartInfo.itemCount) + { + PlaySE(SE_SELECT); + gMartInfo.cursor = MoveMenuCursor(1); + sub_80B3A70(); + } + } + else if(gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + + if(gMartInfo.choicesAbove + gMartInfo.cursor != gMartInfo.itemCount) // did you not hit CANCEL? + { + PauseVerticalScrollIndicator(0); + PauseVerticalScrollIndicator(1); + sub_80F979C(1, 1); + sub_80B39D0(gMartInfo.cursor, gMartInfo.cursor, 1); + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(0, 0xC, 0xD, 0x13); + + if(gMartInfo.martType == MART_TYPE_0) + { + gMartTotalCost = (ItemId_GetPrice(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]) >> GetPriceReduction(1)); // set 1x price + if(!IsEnoughMoney(gSaveBlock1.money, gMartTotalCost)) + { + DisplayItemMessageOnField(taskId, gOtherText_NotEnoughMoney, sub_80B3BD0, 0xC3E1); // tail merge + } + else // _080B42BA + { + CopyItemName(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor], gStringVar1); + StringExpandPlaceholders(gStringVar4, gOtherText_HowManyYouWant); + DisplayItemMessageOnField(taskId, gStringVar4, sub_80B3EFC, 0xC3E1); + } + } + else // _080B428C + { + gMartTotalCost = gDecorations[gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]].price; + + if(!IsEnoughMoney(gSaveBlock1.money, gMartTotalCost)) + { + DisplayItemMessageOnField(taskId, gOtherText_NotEnoughMoney, sub_80B3BD0, 0xC3E1); // tail merge + } + else + { + StringCopy(gStringVar1, gDecorations[gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]].name); + ConvertIntToDecimalStringN(gStringVar2, gMartTotalCost, 0, 0x8); + + if(gMartInfo.martType == MART_TYPE_1) + { + StringExpandPlaceholders(gStringVar4, gOtherText_ThatWillBe2); + } + else + { + StringExpandPlaceholders(gStringVar4, gOtherText_ThatWillBe3); + } + DisplayItemMessageOnField(taskId, gStringVar4, sub_80B3D38, 0xC3E1); + } + } + } + else + sub_80B43F0(taskId); + } + else if(gMain.newKeys & B_BUTTON) // go back to buy/sell/exit menu + { + PlaySE(SE_SELECT); + sub_80B43F0(taskId); + } + } +} -- cgit v1.2.3 From 80d2e6efe070007d3f8d6fe183bc9928cf731175 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Fri, 25 Aug 2017 22:38:22 +0200 Subject: evolution graphics file is done --- asm/evolution_graphics.s | 574 ------------------------------------------- include/evolution_graphics.h | 13 + ld_script.txt | 1 - src/evolution_graphics.c | 157 +++++++++++- 4 files changed, 167 insertions(+), 578 deletions(-) delete mode 100644 asm/evolution_graphics.s create mode 100644 include/evolution_graphics.h diff --git a/asm/evolution_graphics.s b/asm/evolution_graphics.s deleted file mode 100644 index 12264b99b..000000000 --- a/asm/evolution_graphics.s +++ /dev/null @@ -1,574 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - - - - thumb_func_start nullsub_85 -nullsub_85: @ 8149E78 - bx lr - thumb_func_end nullsub_85 - - thumb_func_start sub_8149E7C -sub_8149E7C: @ 8149E7C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x28 - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, 24 - lsrs r7, r1, 24 - movs r1, 0 - ldr r3, _08149FB0 @ =sub_8149FC8 - ldr r2, _08149FB4 @ =0x00007fff -_08149E96: - lsls r0, r1, 1 - add r0, sp - adds r0, 0x4 - strh r2, [r0] - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0xF - bls _08149E96 - adds r0, r3, 0 - movs r1, 0 - bl CreateTask - mov r8, r0 - mov r0, r8 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r0, _08149FB8 @ =gTasks - mov r1, r8 - lsls r6, r1, 2 - add r6, r8 - lsls r6, 3 - adds r6, r0 - strh r5, [r6, 0xA] - strh r7, [r6, 0xC] - movs r1, 0x80 - lsls r1, 1 - strh r1, [r6, 0xE] - movs r0, 0x10 - strh r0, [r6, 0x10] - movs r4, 0x80 - lsls r4, 9 - str r1, [sp] - movs r0, 0x1E - movs r2, 0 - movs r3, 0 - bl SetOamMatrix - movs r0, 0x10 - ldrsh r1, [r6, r0] - adds r0, r4, 0 - bl __divsi3 - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - str r1, [sp] - movs r0, 0x1F - movs r2, 0 - movs r3, 0 - bl SetOamMatrix - ldr r1, _08149FBC @ =gSprites - mov r9, r1 - lsls r2, r5, 4 - adds r2, r5 - lsls r2, 2 - mov r3, r9 - adds r3, 0x1C - adds r0, r2, r3 - ldr r1, _08149FC0 @ =nullsub_85 - str r1, [r0] - add r2, r9 - ldrb r1, [r2, 0x1] - movs r4, 0x4 - negs r4, r4 - adds r0, r4, 0 - ands r0, r1 - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2, 0x1] - ldrb r1, [r2, 0x3] - movs r0, 0x3F - negs r0, r0 - ands r0, r1 - movs r1, 0x3C - orrs r0, r1 - strb r0, [r2, 0x3] - movs r0, 0x3E - adds r0, r2 - mov r10, r0 - ldrb r1, [r0] - movs r5, 0x5 - negs r5, r5 - adds r0, r5, 0 - ands r0, r1 - mov r1, r10 - strb r0, [r1] - ldrb r1, [r2, 0x5] - lsrs r1, 4 - lsls r1, 5 - ldr r0, _08149FC4 @ =gPlttBufferFaded + 0x200 - mov r10, r0 - add r1, r10 - add r0, sp, 0x4 - movs r2, 0x10 - str r3, [sp, 0x24] - bl CpuSet - lsls r1, r7, 4 - adds r1, r7 - lsls r1, 2 - ldr r3, [sp, 0x24] - adds r3, r1, r3 - ldr r0, _08149FC0 @ =nullsub_85 - str r0, [r3] - add r1, r9 - ldrb r0, [r1, 0x1] - ands r4, r0 - movs r0, 0x1 - orrs r4, r0 - strb r4, [r1, 0x1] - ldrb r0, [r1, 0x3] - movs r2, 0x3E - orrs r0, r2 - strb r0, [r1, 0x3] - adds r2, r1, 0 - adds r2, 0x3E - ldrb r0, [r2] - ands r5, r0 - strb r5, [r2] - ldrb r1, [r1, 0x5] - lsrs r1, 4 - lsls r1, 5 - add r1, r10 - add r0, sp, 0x4 - movs r2, 0x10 - bl CpuSet - movs r1, 0 - strh r1, [r6, 0x18] - mov r0, r8 - add sp, 0x28 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08149FB0: .4byte sub_8149FC8 -_08149FB4: .4byte 0x00007fff -_08149FB8: .4byte gTasks -_08149FBC: .4byte gSprites -_08149FC0: .4byte nullsub_85 -_08149FC4: .4byte gPlttBufferFaded + 0x200 - thumb_func_end sub_8149E7C - - thumb_func_start sub_8149FC8 -sub_8149FC8: @ 8149FC8 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08149FE4 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r0, 0 - strh r0, [r1, 0x12] - movs r0, 0x8 - strh r0, [r1, 0x14] - ldr r0, _08149FE8 @ =sub_8149FEC - str r0, [r1] - bx lr - .align 2, 0 -_08149FE4: .4byte gTasks -_08149FE8: .4byte sub_8149FEC - thumb_func_end sub_8149FC8 - - thumb_func_start sub_8149FEC -sub_8149FEC: @ 8149FEC - push {r4,lr} - lsls r0, 24 - lsrs r3, r0, 24 - ldr r1, _0814A00C @ =gTasks - lsls r0, r3, 2 - adds r0, r3 - lsls r0, 3 - adds r2, r0, r1 - movs r1, 0x18 - ldrsh r0, [r2, r1] - cmp r0, 0 - beq _0814A010 - adds r0, r3, 0 - bl sub_814A208 - b _0814A032 - .align 2, 0 -_0814A00C: .4byte gTasks -_0814A010: - ldrh r1, [r2, 0x14] - movs r4, 0x14 - ldrsh r0, [r2, r4] - cmp r0, 0x80 - bne _0814A022 - adds r0, r3, 0 - bl sub_814A158 - b _0814A032 -_0814A022: - adds r0, r1, 0x2 - strh r0, [r2, 0x14] - ldrh r0, [r2, 0x12] - movs r1, 0x1 - eors r0, r1 - strh r0, [r2, 0x12] - ldr r0, _0814A038 @ =sub_814A03C - str r0, [r2] -_0814A032: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0814A038: .4byte sub_814A03C - thumb_func_end sub_8149FEC - - thumb_func_start sub_814A03C -sub_814A03C: @ 814A03C - push {r4-r7,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r4, r0, 24 - ldr r1, _0814A060 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r2, r0, r1 - movs r3, 0x18 - ldrsh r0, [r2, r3] - adds r5, r1, 0 - cmp r0, 0 - beq _0814A068 - ldr r0, _0814A064 @ =sub_814A208 - str r0, [r2] - b _0814A14C - .align 2, 0 -_0814A060: .4byte gTasks -_0814A064: .4byte sub_814A208 -_0814A068: - movs r6, 0 - movs r7, 0x12 - ldrsh r0, [r2, r7] - cmp r0, 0 - bne _0814A0B8 - movs r0, 0xE - ldrsh r1, [r2, r0] - movs r3, 0x14 - ldrsh r0, [r2, r3] - movs r3, 0x80 - lsls r3, 1 - subs r0, r3, r0 - cmp r1, r0 - bge _0814A08E - ldrh r0, [r2, 0x14] - ldrh r7, [r2, 0xE] - adds r0, r7 - strh r0, [r2, 0xE] - b _0814A092 -_0814A08E: - strh r3, [r2, 0xE] - movs r6, 0x1 -_0814A092: - lsls r2, r4, 2 - adds r0, r2, r4 - lsls r0, 3 - adds r3, r0, r5 - movs r0, 0x10 - ldrsh r1, [r3, r0] - movs r7, 0x14 - ldrsh r0, [r3, r7] - adds r0, 0x10 - cmp r1, r0 - ble _0814A0B2 - ldrh r0, [r3, 0x10] - ldrh r1, [r3, 0x14] - subs r0, r1 - strh r0, [r3, 0x10] - b _0814A102 -_0814A0B2: - movs r0, 0x10 - strh r0, [r3, 0x10] - b _0814A0FC -_0814A0B8: - movs r0, 0x10 - ldrsh r1, [r2, r0] - movs r3, 0x14 - ldrsh r0, [r2, r3] - movs r3, 0x80 - lsls r3, 1 - subs r0, r3, r0 - cmp r1, r0 - bge _0814A0D4 - ldrh r0, [r2, 0x14] - ldrh r7, [r2, 0x10] - adds r0, r7 - strh r0, [r2, 0x10] - b _0814A0D8 -_0814A0D4: - strh r3, [r2, 0x10] - movs r6, 0x1 -_0814A0D8: - lsls r2, r4, 2 - adds r0, r2, r4 - lsls r0, 3 - adds r3, r0, r5 - movs r0, 0xE - ldrsh r1, [r3, r0] - movs r7, 0x14 - ldrsh r0, [r3, r7] - adds r0, 0x10 - cmp r1, r0 - ble _0814A0F8 - ldrh r0, [r3, 0xE] - ldrh r1, [r3, 0x14] - subs r0, r1 - strh r0, [r3, 0xE] - b _0814A102 -_0814A0F8: - movs r0, 0x10 - strh r0, [r3, 0xE] -_0814A0FC: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 -_0814A102: - adds r0, r2, r4 - lsls r0, 3 - adds r5, r0, r5 - movs r0, 0xE - ldrsh r1, [r5, r0] - movs r4, 0x80 - lsls r4, 9 - adds r0, r4, 0 - bl __divsi3 - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - str r1, [sp] - movs r0, 0x1E - movs r2, 0 - movs r3, 0 - bl SetOamMatrix - movs r3, 0x10 - ldrsh r1, [r5, r3] - adds r0, r4, 0 - bl __divsi3 - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - str r1, [sp] - movs r0, 0x1F - movs r2, 0 - movs r3, 0 - bl SetOamMatrix - cmp r6, 0x2 - bne _0814A14C - ldr r0, _0814A154 @ =sub_8149FEC - str r0, [r5] -_0814A14C: - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0814A154: .4byte sub_8149FEC - thumb_func_end sub_814A03C - - thumb_func_start sub_814A158 -sub_814A158: @ 814A158 - push {r4-r6,lr} - mov r6, r8 - push {r6} - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0814A200 @ =gSprites - mov r8, r1 - ldr r1, _0814A204 @ =gTasks - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - adds r4, r1 - movs r2, 0xA - ldrsh r1, [r4, r2] - lsls r2, r1, 4 - adds r2, r1 - lsls r2, 2 - add r2, r8 - ldrb r3, [r2, 0x1] - movs r6, 0x4 - negs r6, r6 - adds r1, r6, 0 - ands r1, r3 - strb r1, [r2, 0x1] - movs r2, 0xA - ldrsh r1, [r4, r2] - lsls r2, r1, 4 - adds r2, r1 - lsls r2, 2 - add r2, r8 - ldrb r3, [r2, 0x3] - movs r5, 0x3F - negs r5, r5 - adds r1, r5, 0 - ands r1, r3 - strb r1, [r2, 0x3] - movs r1, 0xA - ldrsh r2, [r4, r1] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - add r1, r8 - adds r1, 0x3E - ldrb r2, [r1] - movs r3, 0x4 - orrs r2, r3 - strb r2, [r1] - movs r1, 0xC - ldrsh r2, [r4, r1] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - add r1, r8 - ldrb r2, [r1, 0x1] - ands r6, r2 - strb r6, [r1, 0x1] - movs r1, 0xC - ldrsh r2, [r4, r1] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - add r1, r8 - ldrb r2, [r1, 0x3] - ands r5, r2 - strb r5, [r1, 0x3] - movs r1, 0xC - ldrsh r2, [r4, r1] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - add r1, r8 - adds r1, 0x3E - ldrb r3, [r1] - movs r2, 0x5 - negs r2, r2 - ands r2, r3 - strb r2, [r1] - bl DestroyTask - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0814A200: .4byte gSprites -_0814A204: .4byte gTasks - thumb_func_end sub_814A158 - - thumb_func_start sub_814A208 -sub_814A208: @ 814A208 - push {r4-r6,lr} - mov r6, r8 - push {r6} - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0814A2B0 @ =gSprites - mov r8, r1 - ldr r1, _0814A2B4 @ =gTasks - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - adds r4, r1 - movs r2, 0xA - ldrsh r1, [r4, r2] - lsls r2, r1, 4 - adds r2, r1 - lsls r2, 2 - add r2, r8 - ldrb r3, [r2, 0x1] - movs r6, 0x4 - negs r6, r6 - adds r1, r6, 0 - ands r1, r3 - strb r1, [r2, 0x1] - movs r2, 0xA - ldrsh r1, [r4, r2] - lsls r2, r1, 4 - adds r2, r1 - lsls r2, 2 - add r2, r8 - ldrb r3, [r2, 0x3] - movs r5, 0x3F - negs r5, r5 - adds r1, r5, 0 - ands r1, r3 - strb r1, [r2, 0x3] - movs r1, 0xA - ldrsh r2, [r4, r1] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - add r1, r8 - adds r1, 0x3E - ldrb r3, [r1] - movs r2, 0x5 - negs r2, r2 - ands r2, r3 - strb r2, [r1] - movs r1, 0xC - ldrsh r2, [r4, r1] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - add r1, r8 - ldrb r2, [r1, 0x1] - ands r6, r2 - strb r6, [r1, 0x1] - movs r1, 0xC - ldrsh r2, [r4, r1] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - add r1, r8 - ldrb r2, [r1, 0x3] - ands r5, r2 - strb r5, [r1, 0x3] - movs r1, 0xC - ldrsh r2, [r4, r1] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - add r1, r8 - adds r1, 0x3E - ldrb r2, [r1] - movs r3, 0x4 - orrs r2, r3 - strb r2, [r1] - bl DestroyTask - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0814A2B0: .4byte gSprites -_0814A2B4: .4byte gTasks - thumb_func_end sub_814A208 - - .align 2, 0 @ Don't pad with nop. diff --git a/include/evolution_graphics.h b/include/evolution_graphics.h new file mode 100644 index 000000000..c217f22af --- /dev/null +++ b/include/evolution_graphics.h @@ -0,0 +1,13 @@ +#ifndef GUARD_EVOLUTION_GRAPHICS_H +#define GUARD_EVOLUTION_GRAPHICS_H + +void LoadEvoSparkleSpriteAndPal(void); + +u8 LaunchTask_PreEvoSparklesSet1(u16 arg0); +u8 LaunchTask_PreEvoSparklesSet2(void); +u8 LaunchTask_PostEvoSparklesSet1(void); +u8 LaunchTask_PostEvoSparklesSet2AndFlash(u16 arg0); +u8 LaunchTask_PostEvoSparklesSet2AndFlash_Trade(u16 arg0); +u8 sub_8149E7C(u8 preEvoSpriteID, u8 postEvoSpriteID); + +#endif // GUARD_EVOLUTION_GRAPHICS_H diff --git a/ld_script.txt b/ld_script.txt index 5a8cc3ff5..f7024cba7 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -267,7 +267,6 @@ SECTIONS { src/clear_save_data_menu.o(.text); src/intro_credits_graphics.o(.text); src/evolution_graphics.o(.text); - asm/evolution_graphics.o(.text); src/bard_music.o(.text); src/fldeff_teleport.o(.text); src/unknown_debug_menu.o(.text); diff --git a/src/evolution_graphics.c b/src/evolution_graphics.c index 45f60c614..9fd2d7b7a 100644 --- a/src/evolution_graphics.c +++ b/src/evolution_graphics.c @@ -25,6 +25,12 @@ static void EvoTask_BeginPostSparklesSet2_AndFlash_Trade(u8 taskID); static void EvoTask_CreatePostEvoSparklesSet2_AndFlash_Trade(u8 taskID); static void EvoTask_DestroyPostSet2AndFlashTask(u8 taskID); +static void sub_8149FC8(u8 taskID); +static void sub_8149FEC(u8 taskID); +static void PreEvoVisible_PostEvoInvisible_KillTask(u8 taskID); +static void PreEvoInVisible_PostEvoVisible_KillTask(u8 taskID); +static void sub_814A03C(u8 taskID); + // const data static const u16 sEvoSparklePalette[] = INCBIN_U16("graphics/misc/evo_sparkle.gbapal"); static const u8 sEvoSparkleTiles[] = INCBIN_U8("graphics/misc/evo_sparkle.4bpp.lz"); @@ -230,7 +236,7 @@ static void SpriteCB_PostEvoSparkleSet2(struct Sprite* sprite) DestroySprite(sprite); } -void CreatePostEvoSparkleSet2(u8 arg0) +static void CreatePostEvoSparkleSet2(u8 arg0) { u8 spriteID = CreateSprite(&sEvoSparkleSpriteTemplate, 120, 56, 0); if (spriteID != MAX_SPRITES) @@ -251,6 +257,8 @@ void LoadEvoSparkleSpriteAndPal(void) LoadSpritePalettes(sEvoSparkleSpritePals); } +#define tFrameCounter data[15] + u8 LaunchTask_PreEvoSparklesSet1(u16 arg0) { u8 taskID = CreateTask(EvoTask_BeginPreSet1_FadeAndPlaySE, 0); @@ -258,8 +266,6 @@ u8 LaunchTask_PreEvoSparklesSet1(u16 arg0) return taskID; } -#define tFrameCounter data[15] - static void EvoTask_BeginPreSet1_FadeAndPlaySE(u8 taskID) { SetEvoSparklesMatrices(); @@ -460,3 +466,148 @@ static void EvoTask_CreatePostEvoSparklesSet2_AndFlash_Trade(u8 taskID) gTasks[taskID].func = EvoTask_DestroyPostSet2AndFlashTask; } +#undef tFrameCounter + +static void PokeEvoSprite_DummySpriteCB(struct Sprite* sprite) +{ + +} + +#define tPreEvoSpriteID data[1] +#define tPostEvoSpriteID data[2] +#define tEvoStopped data[8] + +u8 sub_8149E7C(u8 preEvoSpriteID, u8 postEvoSpriteID) +{ + u16 i; + u16 stack[16]; + u8 taskID; + s32 toDiv; + + for (i = 0; i < 16; i++) + stack[i] = 0x7FFF; + + taskID = CreateTask(sub_8149FC8, 0); + gTasks[taskID].tPreEvoSpriteID = preEvoSpriteID; + gTasks[taskID].tPostEvoSpriteID = postEvoSpriteID; + gTasks[taskID].data[3] = 256; + gTasks[taskID].data[4] = 16; + + toDiv = 65536; + SetOamMatrix(30, 256, 0, 0, 256); + SetOamMatrix(31, toDiv / gTasks[taskID].data[4], 0, 0, toDiv / gTasks[taskID].data[4]); + + gSprites[preEvoSpriteID].callback = PokeEvoSprite_DummySpriteCB; + gSprites[preEvoSpriteID].oam.affineMode = 1; + gSprites[preEvoSpriteID].oam.matrixNum = 30; + gSprites[preEvoSpriteID].invisible = 0; + CpuSet(stack, &gPlttBufferFaded[0x100 + (gSprites[preEvoSpriteID].oam.paletteNum * 16)], 16); + + gSprites[postEvoSpriteID].callback = PokeEvoSprite_DummySpriteCB; + gSprites[postEvoSpriteID].oam.affineMode = 1; + gSprites[postEvoSpriteID].oam.matrixNum = 31; + gSprites[postEvoSpriteID].invisible = 0; + CpuSet(stack, &gPlttBufferFaded[0x100 + (gSprites[postEvoSpriteID].oam.paletteNum * 16)], 16); + + gTasks[taskID].tEvoStopped = FALSE; + return taskID; +} + +static void sub_8149FC8(u8 taskID) +{ + gTasks[taskID].data[5] = 0; + gTasks[taskID].data[6] = 8; + gTasks[taskID].func = sub_8149FEC; +} + +static void sub_8149FEC(u8 taskID) +{ + if (gTasks[taskID].tEvoStopped) + PreEvoVisible_PostEvoInvisible_KillTask(taskID); + else if (gTasks[taskID].data[6] == 128) + PreEvoInVisible_PostEvoVisible_KillTask(taskID); + else + { + gTasks[taskID].data[6] += 2; + gTasks[taskID].data[5] ^= 1; + gTasks[taskID].func = sub_814A03C; + } +} + +static void sub_814A03C(u8 taskID) +{ + if (gTasks[taskID].data[tEvoStopped]) + gTasks[taskID].func = PreEvoVisible_PostEvoInvisible_KillTask; + else + { + u16 oamMatrixArg; + u8 r6 = 0; + if (gTasks[taskID].data[5] == 0) + { + if (gTasks[taskID].data[3] < 256 - gTasks[taskID].data[6]) + gTasks[taskID].data[3] += gTasks[taskID].data[6]; + else + { + gTasks[taskID].data[3] = 256; + r6++; + } + if (gTasks[taskID].data[4] > 16 + gTasks[taskID].data[6]) + gTasks[taskID].data[4] -= gTasks[taskID].data[6]; + else + { + gTasks[taskID].data[4] = 16; + r6++; + } + } + else + { + if (gTasks[taskID].data[4] < 256 - gTasks[taskID].data[6]) + gTasks[taskID].data[4] += gTasks[taskID].data[6]; + else + { + gTasks[taskID].data[4] = 256; + r6++; + } + if (gTasks[taskID].data[3] > 16 + gTasks[taskID].data[6]) + gTasks[taskID].data[3] -= gTasks[taskID].data[6]; + else + { + gTasks[taskID].data[3] = 16; + r6++; + } + } + oamMatrixArg = 65536 / gTasks[taskID].data[3]; + SetOamMatrix(30, oamMatrixArg, 0, 0, oamMatrixArg); + + oamMatrixArg = 65536 / gTasks[taskID].data[4]; + SetOamMatrix(31, oamMatrixArg, 0, 0, oamMatrixArg); + if (r6 == 2) + gTasks[taskID].func = sub_8149FEC; + } +} + +static void PreEvoInVisible_PostEvoVisible_KillTask(u8 taskID) +{ + gSprites[gTasks[taskID].tPreEvoSpriteID].oam.affineMode = 0; + gSprites[gTasks[taskID].tPreEvoSpriteID].oam.matrixNum = 0; + gSprites[gTasks[taskID].tPreEvoSpriteID].invisible = 1; + + gSprites[gTasks[taskID].tPostEvoSpriteID].oam.affineMode = 0; + gSprites[gTasks[taskID].tPostEvoSpriteID].oam.matrixNum = 0; + gSprites[gTasks[taskID].tPostEvoSpriteID].invisible = 0; + + DestroyTask(taskID); +} + +static void PreEvoVisible_PostEvoInvisible_KillTask(u8 taskID) +{ + gSprites[gTasks[taskID].tPreEvoSpriteID].oam.affineMode = 0; + gSprites[gTasks[taskID].tPreEvoSpriteID].oam.matrixNum = 0; + gSprites[gTasks[taskID].tPreEvoSpriteID].invisible = 0; + + gSprites[gTasks[taskID].tPostEvoSpriteID].oam.affineMode = 0; + gSprites[gTasks[taskID].tPostEvoSpriteID].oam.matrixNum = 0; + gSprites[gTasks[taskID].tPostEvoSpriteID].invisible = 1; + + DestroyTask(taskID); +} -- cgit v1.2.3 From e394b1e04bf3ac5ab9fc7bb7f80e8d349603acdd Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 26 Aug 2017 00:01:25 +0200 Subject: i need sleep --- src/evolution_graphics.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/evolution_graphics.c b/src/evolution_graphics.c index 9fd2d7b7a..a47e63a59 100644 --- a/src/evolution_graphics.c +++ b/src/evolution_graphics.c @@ -536,7 +536,7 @@ static void sub_8149FEC(u8 taskID) static void sub_814A03C(u8 taskID) { - if (gTasks[taskID].data[tEvoStopped]) + if (gTasks[taskID].tEvoStopped) gTasks[taskID].func = PreEvoVisible_PostEvoInvisible_KillTask; else { -- cgit v1.2.3 From 8b9e9128b32b253d0b6d0be5b23c72d2fbb74530 Mon Sep 17 00:00:00 2001 From: Touched Date: Sat, 26 Aug 2017 00:03:07 +0200 Subject: Requested fixes for field_ground_effect --- src/field_ground_effect.c | 45 +++++++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/src/field_ground_effect.c b/src/field_ground_effect.c index 7aae07996..594fe9fd9 100644 --- a/src/field_ground_effect.c +++ b/src/field_ground_effect.c @@ -93,7 +93,10 @@ static const u8 gSandFootprints_FieldEffectData[] = { 0xD, 0x0, 0x18, 0x0 }; // each byte in that row is for the next direction of the bike in the order // of down, up, left, right. static const u8 gBikeTireTracks_Transitions[4][4] = { - 1, 2, 7, 8, 1, 2, 6, 5, 5, 8, 3, 4, 6, 7, 3, 4, + 1, 2, 7, 8, + 1, 2, 6, 5, + 5, 8, 3, 4, + 6, 7, 3, 4, }; static void (*const gUnknown_083760A0[])( @@ -118,8 +121,6 @@ static void (*const gUnknown_083760A0[])( GroundEffect_HotSprings, GroundEffect_Seaweed }; -#define NUM_GROUND_EFFECTS (sizeof(gUnknown_083760A0) / sizeof(gUnknown_083760A0[0])) - static void GetAllGroundEffectFlags_OnSpawn(struct MapObject *mapObj, u32 *flags) { FieldObjectUpdateMetatileBehaviors(mapObj); @@ -226,8 +227,8 @@ void GetGroundEffectFlags_Tracks(struct MapObject *mapObj, u32 *flags) { *flags |= 0x100; } - else if (MetatileBehavior_IsSandOrDeepSand(mapObj->mapobj_unk_1F) || - MetatileBehavior_IsUnusedFootprintMetatile(mapObj->mapobj_unk_1F)) + else if (MetatileBehavior_IsSandOrDeepSand(mapObj->mapobj_unk_1F) + || MetatileBehavior_IsUnusedFootprintMetatile(mapObj->mapobj_unk_1F)) { *flags |= 0x80; } @@ -235,8 +236,8 @@ void GetGroundEffectFlags_Tracks(struct MapObject *mapObj, u32 *flags) void GetGroundEffectFlags_SandPile(struct MapObject *mapObj, u32 *flags) { - if (MetatileBehavior_IsDeepSand(mapObj->mapobj_unk_1E) && - MetatileBehavior_IsDeepSand(mapObj->mapobj_unk_1F)) + if (MetatileBehavior_IsDeepSand(mapObj->mapobj_unk_1E) + && MetatileBehavior_IsDeepSand(mapObj->mapobj_unk_1F)) { if (!mapObj->mapobj_bit_20) { @@ -253,10 +254,10 @@ void GetGroundEffectFlags_SandPile(struct MapObject *mapObj, u32 *flags) void GetGroundEffectFlags_ShallowFlowingWater(struct MapObject *mapObj, u32 *flags) { - if ((MetatileBehavior_IsShallowFlowingWater(mapObj->mapobj_unk_1E) && - MetatileBehavior_IsShallowFlowingWater(mapObj->mapobj_unk_1F)) || - (MetatileBehavior_IsPacifidlogLog(mapObj->mapobj_unk_1E) && - MetatileBehavior_IsPacifidlogLog(mapObj->mapobj_unk_1F))) + if ((MetatileBehavior_IsShallowFlowingWater(mapObj->mapobj_unk_1E) + && MetatileBehavior_IsShallowFlowingWater(mapObj->mapobj_unk_1F)) + || (MetatileBehavior_IsPacifidlogLog(mapObj->mapobj_unk_1E) + && MetatileBehavior_IsPacifidlogLog(mapObj->mapobj_unk_1F))) { if (!mapObj->mapobj_bit_19) { @@ -273,8 +274,8 @@ void GetGroundEffectFlags_ShallowFlowingWater(struct MapObject *mapObj, u32 *fla void GetGroundEffectFlags_Puddle(struct MapObject *mapObj, u32 *flags) { - if (MetatileBehavior_IsPuddle(mapObj->mapobj_unk_1E) && - MetatileBehavior_IsPuddle(mapObj->mapobj_unk_1F)) + if (MetatileBehavior_IsPuddle(mapObj->mapobj_unk_1E) + && MetatileBehavior_IsPuddle(mapObj->mapobj_unk_1F)) { *flags |= 0x400; } @@ -288,8 +289,8 @@ void GetGroundEffectFlags_Ripple(struct MapObject *mapObj, u32 *flags) void GetGroundEffectFlags_ShortGrass(struct MapObject *mapObj, u32 *flags) { - if (MetatileBehavior_IsShortGrass(mapObj->mapobj_unk_1E) && - MetatileBehavior_IsShortGrass(mapObj->mapobj_unk_1F)) + if (MetatileBehavior_IsShortGrass(mapObj->mapobj_unk_1E) + && MetatileBehavior_IsShortGrass(mapObj->mapobj_unk_1F)) { if (!mapObj->mapobj_bit_18) { @@ -306,8 +307,8 @@ void GetGroundEffectFlags_ShortGrass(struct MapObject *mapObj, u32 *flags) void GetGroundEffectFlags_HotSprings(struct MapObject *mapObj, u32 *flags) { - if (MetatileBehavior_IsHotSprings(mapObj->mapobj_unk_1E) && - MetatileBehavior_IsHotSprings(mapObj->mapobj_unk_1F)) + if (MetatileBehavior_IsHotSprings(mapObj->mapobj_unk_1E) + && MetatileBehavior_IsHotSprings(mapObj->mapobj_unk_1F)) { if (!mapObj->mapobj_bit_21) { @@ -627,17 +628,17 @@ bool8 IsZCoordMismatchAt(u8 z, s16 x, s16 y) u8 mapZ; if (z == 0) - return 0; + return FALSE; mapZ = MapGridGetZCoordAt(x, y); if (mapZ == 0 || mapZ == 0xF) - return 0; + return FALSE; if (mapZ != z) - return 1; + return TRUE; - return 0; + return FALSE; } void FieldObjectUpdateZCoordAndPriority(struct MapObject *mapObj, struct Sprite *sprite) @@ -929,7 +930,7 @@ void GroundEffect_Seaweed(struct MapObject *mapObj, struct Sprite *sprite) void sub_8064218(struct MapObject *mapObj, struct Sprite *sprite, u32 flags) { u8 i; - for (i = 0; i < NUM_GROUND_EFFECTS; i++, flags >>= 1) + for (i = 0; i < ARRAY_COUNT(gUnknown_083760A0); i++, flags >>= 1) if (flags & 1) gUnknown_083760A0[i](mapObj, sprite); } -- cgit v1.2.3 From a2b2f48dee099a3cf1e439af694678f6f046844f Mon Sep 17 00:00:00 2001 From: Touched Date: Sat, 26 Aug 2017 00:36:05 +0200 Subject: Format field_group_effect --- src/field_ground_effect.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/field_ground_effect.c b/src/field_ground_effect.c index 594fe9fd9..cb8b5e479 100644 --- a/src/field_ground_effect.c +++ b/src/field_ground_effect.c @@ -99,8 +99,8 @@ static const u8 gBikeTireTracks_Transitions[4][4] = { 6, 7, 3, 4, }; -static void (*const gUnknown_083760A0[])( - struct MapObject *mapObj, struct Sprite *sprite) = { GroundEffect_SpawnOnTallGrass, +static void (*const gUnknown_083760A0[])(struct MapObject *mapObj, struct Sprite *sprite) = { + GroundEffect_SpawnOnTallGrass, sub_8063E94, sub_8063EE0, sub_8063F2C, @@ -119,7 +119,8 @@ static void (*const gUnknown_083760A0[])( GroundEffect_JumpLandingDust, GroundEffect_ShortGrass, GroundEffect_HotSprings, - GroundEffect_Seaweed }; + GroundEffect_Seaweed +}; static void GetAllGroundEffectFlags_OnSpawn(struct MapObject *mapObj, u32 *flags) { @@ -720,8 +721,8 @@ void GroundEffect_SpawnOnTallGrass(struct MapObject *mapObj, struct Sprite *spri gUnknown_0202FF84[5] = mapObj->mapGroup; ptr = (u8 *)&gSaveBlock1; - gUnknown_0202FF84[6] = READ8(ptr, struct SaveBlock1, location.mapNum) << 8 | - READ8(ptr, struct SaveBlock1, location.mapGroup); + gUnknown_0202FF84[6] = READ8(ptr, struct SaveBlock1, location.mapNum) << 8 + | READ8(ptr, struct SaveBlock1, location.mapGroup); gUnknown_0202FF84[7] = 1; FieldEffectStart(4); @@ -739,8 +740,8 @@ void sub_8063E94(struct MapObject *mapObj, struct Sprite *sprite) gUnknown_0202FF84[5] = mapObj->mapGroup; ptr = (u8 *)&gSaveBlock1; - gUnknown_0202FF84[6] = READ8(ptr, struct SaveBlock1, location.mapNum) << 8 | - READ8(ptr, struct SaveBlock1, location.mapGroup); + gUnknown_0202FF84[6] = READ8(ptr, struct SaveBlock1, location.mapNum) << 8 + | READ8(ptr, struct SaveBlock1, location.mapGroup); gUnknown_0202FF84[7] = 0; FieldEffectStart(4); @@ -758,8 +759,8 @@ void sub_8063EE0(struct MapObject *mapObj, struct Sprite *sprite) gUnknown_0202FF84[5] = mapObj->mapGroup; ptr = (u8 *)&gSaveBlock1; - gUnknown_0202FF84[6] = READ8(ptr, struct SaveBlock1, location.mapNum) << 8 | - READ8(ptr, struct SaveBlock1, location.mapGroup); + gUnknown_0202FF84[6] = READ8(ptr, struct SaveBlock1, location.mapNum) << 8 + | READ8(ptr, struct SaveBlock1, location.mapGroup); gUnknown_0202FF84[7] = 1; FieldEffectStart(17); @@ -777,8 +778,8 @@ void sub_8063F2C(struct MapObject *mapObj, struct Sprite *sprite) gUnknown_0202FF84[5] = mapObj->mapGroup; ptr = (u8 *)&gSaveBlock1; - gUnknown_0202FF84[6] = READ8(ptr, struct SaveBlock1, location.mapNum) << 8 | - READ8(ptr, struct SaveBlock1, location.mapGroup); + gUnknown_0202FF84[6] = READ8(ptr, struct SaveBlock1, location.mapNum) << 8 + | READ8(ptr, struct SaveBlock1, location.mapGroup); gUnknown_0202FF84[7] = 0; FieldEffectStart(17); -- cgit v1.2.3 From 1ab4ed75e7daae4b17cfca2970e935f653236014 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Fri, 25 Aug 2017 19:09:46 -0400 Subject: decompile up to nonmatching sub_80B4470 --- asm/shop.s | 218 ------------------------------------------------------------- src/shop.c | 174 +++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 171 insertions(+), 221 deletions(-) diff --git a/asm/shop.s b/asm/shop.s index cd88636f4..105407e01 100644 --- a/asm/shop.s +++ b/asm/shop.s @@ -6,224 +6,6 @@ .text - thumb_func_start sub_80B4378 -sub_80B4378: @ 80B4378 - push {r4,lr} - sub sp, 0x8 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0 - movs r1, 0xE - movs r2, 0x1D - movs r3, 0x13 - bl MenuZeroFillWindowRect - movs r0, 0 - movs r1, 0xA - movs r2, 0xD - movs r3, 0xD - bl MenuZeroFillWindowRect - ldr r0, _080B43E4 @ =gBGTilemapBuffers + 0x800 - movs r1, 0x2 - str r1, [sp] - movs r1, 0 - str r1, [sp, 0x4] - movs r1, 0x1 - movs r2, 0xB - movs r3, 0xC - bl sub_80A3FA0 - bl sub_80B3420 - movs r0, 0x6 - movs r1, 0x7 - bl sub_80B3764 - bl sub_80B37EC - movs r0, 0 - bl StartVerticalScrollIndicators - movs r0, 0x1 - bl StartVerticalScrollIndicators - bl sub_80B32A4 - ldr r1, _080B43E8 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _080B43EC @ =sub_80B40E8 - str r1, [r0] - add sp, 0x8 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B43E4: .4byte gBGTilemapBuffers + 0x800 -_080B43E8: .4byte gTasks -_080B43EC: .4byte sub_80B40E8 - thumb_func_end sub_80B4378 - - thumb_func_start sub_80B43F0 -sub_80B43F0: @ 80B43F0 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r1, _080B4428 @ =gFieldCallback - ldr r0, _080B442C @ =sub_80B3050 - str r0, [r1] - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r1, _080B4430 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _080B4434 @ =Task_ExitBuyMenu - str r1, [r0] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B4428: .4byte gFieldCallback -_080B442C: .4byte sub_80B3050 -_080B4430: .4byte gTasks -_080B4434: .4byte Task_ExitBuyMenu - thumb_func_end sub_80B43F0 - - thumb_func_start Task_ExitBuyMenu -Task_ExitBuyMenu: @ 80B4438 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080B4468 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080B4462 - movs r0, 0 - movs r1, 0 - bl RemoveMoneyLabelObject - bl BuyMenuFreeMemory - ldr r0, _080B446C @ =c2_exit_to_overworld_2_switch - bl SetMainCallback2 - adds r0, r4, 0 - bl DestroyTask -_080B4462: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B4468: .4byte gPaletteFade -_080B446C: .4byte c2_exit_to_overworld_2_switch - thumb_func_end Task_ExitBuyMenu - - thumb_func_start sub_80B4470 -sub_80B4470: @ 80B4470 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 24 - lsrs r5, r0, 24 - movs r2, 0 - ldr r0, _080B44C8 @ =gUnknown_02038724 - mov r12, r0 - ldr r6, _080B44CC @ =gMartInfo - mov r8, r12 - adds r4, r6, 0 - ldr r1, _080B44D0 @ =gTasks - mov r9, r1 - lsls r0, r5, 2 - adds r0, r5 - lsls r7, r0, 3 -_080B4492: - lsls r0, r2, 2 - mov r1, r8 - adds r3, r0, r1 - ldrb r0, [r4, 0xB] - ldrb r1, [r4, 0x9] - adds r0, r1 - ldr r1, [r4, 0x4] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r3] - ldrh r0, [r0] - cmp r1, r0 - bne _080B44DC - ldrh r0, [r3, 0x2] - cmp r0, 0 - beq _080B44DC - adds r2, r0, 0 - mov r4, r9 - adds r1, r7, r4 - movs r4, 0xA - ldrsh r0, [r1, r4] - adds r0, r2, r0 - cmp r0, 0xFF - ble _080B44D4 - movs r0, 0xFF - strh r0, [r3, 0x2] - b _080B451E - .align 2, 0 -_080B44C8: .4byte gUnknown_02038724 -_080B44CC: .4byte gMartInfo -_080B44D0: .4byte gTasks -_080B44D4: - ldrh r0, [r1, 0xA] - adds r0, r2, r0 - strh r0, [r3, 0x2] - b _080B451E -_080B44DC: - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0x2 - bls _080B4492 - ldr r3, _080B452C @ =gUnknown_02038730 - ldrb r0, [r3] - cmp r0, 0x2 - bhi _080B451E - adds r2, r0, 0 - lsls r2, 2 - add r2, r12 - ldrb r0, [r6, 0xB] - ldrb r1, [r6, 0x9] - adds r0, r1 - ldr r1, [r6, 0x4] - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - strh r0, [r2] - ldrb r1, [r3] - lsls r1, 2 - add r1, r12 - ldr r2, _080B4530 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r2 - ldrh r0, [r0, 0xA] - strh r0, [r1, 0x2] - ldrb r0, [r3] - adds r0, 0x1 - strb r0, [r3] -_080B451E: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B452C: .4byte gUnknown_02038730 -_080B4530: .4byte gTasks - thumb_func_end sub_80B4470 - thumb_func_start ClearItemPurchases ClearItemPurchases: @ 80B4534 push {lr} diff --git a/src/shop.c b/src/shop.c index 110b5cdea..b053e3f2e 100644 --- a/src/shop.c +++ b/src/shop.c @@ -26,9 +26,6 @@ #include "rom4.h" #include "decoration_inventory.h" -extern void sub_80B4378(u8); -extern void sub_80B43F0(u8); -extern void sub_80B4470(u8); extern bool8 sub_80A52C4(u8, u8); enum @@ -53,6 +50,7 @@ struct MartInfo extern struct MartInfo gMartInfo; extern struct MenuAction gUnknown_083CC6D0[]; extern struct YesNoFuncTable gUnknown_083CC708[]; +extern struct ItemSlot gUnknown_02038724[3]; extern u32 gMartTotalCost; // the total cost of a purchase before checking out. @@ -74,6 +72,8 @@ enum ANIM_NUM }; +extern u8 gUnknown_02038730; + extern s16 gUnknown_020386A4[][4]; // game freak barely uses 2d arrays wtf? extern u16 gBuyMenuFrame_Tilemap[]; @@ -82,6 +82,10 @@ extern u16 gUnknown_083CC710[2]; void sub_80B39D0(int var1, int var2, bool32 hasControlCode); void sub_80B3A70(void); +void sub_80B4378(u8); +void sub_80B43F0(u8); +void Task_ExitBuyMenu(u8); +void sub_80B4470(u8); u8 CreateShopMenu(u8 martType) { @@ -1058,3 +1062,167 @@ void sub_80B40E8(u8 taskId) // Mart_DoCursorAction } } } + +void sub_80B4378(u8 taskId) +{ + MenuZeroFillWindowRect(0, 0xE, 0x1D, 0x13); + MenuZeroFillWindowRect(0, 0xA, 0xD, 0xD); + sub_80A3FA0(gBGTilemapBuffers[1], 0x1, 0xB, 0xC, 0x2, 0); + sub_80B3420(); + sub_80B3764(6, 7); + sub_80B37EC(); + StartVerticalScrollIndicators(0); + StartVerticalScrollIndicators(1); + sub_80B32A4(); + gTasks[taskId].func = sub_80B40E8; +} + +void sub_80B43F0(u8 taskId) +{ + gFieldCallback = sub_80B3050; + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + gTasks[taskId].func = Task_ExitBuyMenu; +} + +void Task_ExitBuyMenu(u8 taskId) +{ + if(!gPaletteFade.active) + { + RemoveMoneyLabelObject(0, 0); + BuyMenuFreeMemory(); + SetMainCallback2(c2_exit_to_overworld_2_switch); + DestroyTask(taskId); + } +} + +// in the for loop, the loop prologue is not correct and loads choicesabove + cursor immediately instead of setting up the gUnknown_02038724 struct. +#ifdef NONMATCHING +void sub_80B4470(u8 taskId) +{ + u16 i; + + for(i = 0; i < 3; i++) + { + if(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor] != gUnknown_02038724[i].itemId || gUnknown_02038724[i].quantity == 0) + continue; + + if(gTasks[taskId].data[1] + gUnknown_02038724[i].quantity > 255) + gUnknown_02038724[i].quantity = 255; + else + gUnknown_02038724[i].quantity += gTasks[taskId].data[1]; + return; + } + + if(gUnknown_02038730 < 3) + { + gUnknown_02038724[gUnknown_02038730].itemId = gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]; + gUnknown_02038724[gUnknown_02038730].quantity = gTasks[taskId].data[1]; + gUnknown_02038730++; + } +} +#else +__attribute__((naked)) +void sub_80B4470(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r9\n\ + mov r6, r8\n\ + push {r6,r7}\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + movs r2, 0\n\ + ldr r0, _080B44C8 @ =gUnknown_02038724\n\ + mov r12, r0\n\ + ldr r6, _080B44CC @ =gMartInfo\n\ + mov r8, r12\n\ + adds r4, r6, 0\n\ + ldr r1, _080B44D0 @ =gTasks\n\ + mov r9, r1\n\ + lsls r0, r5, 2\n\ + adds r0, r5\n\ + lsls r7, r0, 3\n\ +_080B4492:\n\ + lsls r0, r2, 2\n\ + mov r1, r8\n\ + adds r3, r0, r1\n\ + ldrb r0, [r4, 0xB]\n\ + ldrb r1, [r4, 0x9]\n\ + adds r0, r1\n\ + ldr r1, [r4, 0x4]\n\ + lsls r0, 1\n\ + adds r0, r1\n\ + ldrh r1, [r3]\n\ + ldrh r0, [r0]\n\ + cmp r1, r0\n\ + bne _080B44DC\n\ + ldrh r0, [r3, 0x2]\n\ + cmp r0, 0\n\ + beq _080B44DC\n\ + adds r2, r0, 0\n\ + mov r4, r9\n\ + adds r1, r7, r4\n\ + movs r4, 0xA\n\ + ldrsh r0, [r1, r4]\n\ + adds r0, r2, r0\n\ + cmp r0, 0xFF\n\ + ble _080B44D4\n\ + movs r0, 0xFF\n\ + strh r0, [r3, 0x2]\n\ + b _080B451E\n\ + .align 2, 0\n\ +_080B44C8: .4byte gUnknown_02038724\n\ +_080B44CC: .4byte gMartInfo\n\ +_080B44D0: .4byte gTasks\n\ +_080B44D4:\n\ + ldrh r0, [r1, 0xA]\n\ + adds r0, r2, r0\n\ + strh r0, [r3, 0x2]\n\ + b _080B451E\n\ +_080B44DC:\n\ + adds r0, r2, 0x1\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + cmp r2, 0x2\n\ + bls _080B4492\n\ + ldr r3, _080B452C @ =gUnknown_02038730\n\ + ldrb r0, [r3]\n\ + cmp r0, 0x2\n\ + bhi _080B451E\n\ + adds r2, r0, 0\n\ + lsls r2, 2\n\ + add r2, r12\n\ + ldrb r0, [r6, 0xB]\n\ + ldrb r1, [r6, 0x9]\n\ + adds r0, r1\n\ + ldr r1, [r6, 0x4]\n\ + lsls r0, 1\n\ + adds r0, r1\n\ + ldrh r0, [r0]\n\ + strh r0, [r2]\n\ + ldrb r1, [r3]\n\ + lsls r1, 2\n\ + add r1, r12\n\ + ldr r2, _080B4530 @ =gTasks\n\ + lsls r0, r5, 2\n\ + adds r0, r5\n\ + lsls r0, 3\n\ + adds r0, r2\n\ + ldrh r0, [r0, 0xA]\n\ + strh r0, [r1, 0x2]\n\ + ldrb r0, [r3]\n\ + adds r0, 0x1\n\ + strb r0, [r3]\n\ +_080B451E:\n\ + pop {r3,r4}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080B452C: .4byte gUnknown_02038730\n\ +_080B4530: .4byte gTasks\n\ + .syntax divided"); +} +#endif -- cgit v1.2.3 From efd3e208f10ed2db25871bab49b9462ab7efb903 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Fri, 25 Aug 2017 20:30:35 -0400 Subject: finish decompiling shop.c except for a few indented functions --- asm/shop.s | 455 --------------------------------------------------------- include/shop.h | 6 +- ld_script.txt | 1 - src/shop.c | 295 +++++++++++++++++++++++++++++++++++++ 4 files changed, 298 insertions(+), 459 deletions(-) delete mode 100644 asm/shop.s diff --git a/asm/shop.s b/asm/shop.s deleted file mode 100644 index 105407e01..000000000 --- a/asm/shop.s +++ /dev/null @@ -1,455 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start ClearItemPurchases -ClearItemPurchases: @ 80B4534 - push {lr} - ldr r0, _080B4548 @ =gUnknown_02038730 - movs r1, 0 - strb r1, [r0] - ldr r0, _080B454C @ =gUnknown_02038724 - movs r1, 0x3 - bl ClearItemSlots - pop {r0} - bx r0 - .align 2, 0 -_080B4548: .4byte gUnknown_02038730 -_080B454C: .4byte gUnknown_02038724 - thumb_func_end ClearItemPurchases - - thumb_func_start CreatePokemartMenu -CreatePokemartMenu: @ 80B4550 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0 - bl CreateShopMenu - adds r0, r4, 0 - bl SetShopItemsForSale - bl ClearItemPurchases - ldr r0, _080B4570 @ =EnableBothScriptContexts - bl SetShopMenuCallback - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B4570: .4byte EnableBothScriptContexts - thumb_func_end CreatePokemartMenu - - thumb_func_start CreateDecorationShop1Menu -CreateDecorationShop1Menu: @ 80B4574 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x1 - bl CreateShopMenu - adds r0, r4, 0 - bl SetShopItemsForSale - ldr r0, _080B4590 @ =EnableBothScriptContexts - bl SetShopMenuCallback - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B4590: .4byte EnableBothScriptContexts - thumb_func_end CreateDecorationShop1Menu - - thumb_func_start CreateDecorationShop2Menu -CreateDecorationShop2Menu: @ 80B4594 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x2 - bl CreateShopMenu - adds r0, r4, 0 - bl SetShopItemsForSale - ldr r0, _080B45B0 @ =EnableBothScriptContexts - bl SetShopMenuCallback - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B45B0: .4byte EnableBothScriptContexts - thumb_func_end CreateDecorationShop2Menu - - thumb_func_start sub_80B45B4 -sub_80B45B4: @ 80B45B4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - mov r9, r1 - lsls r0, 24 - lsrs r0, 24 - lsls r2, 16 - lsrs r2, 16 - mov r10, r2 - ldr r2, _080B4648 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldrh r0, [r1, 0x10] - subs r0, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - ldrh r0, [r1, 0x12] - subs r0, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - ldrh r4, [r1, 0xA] - movs r2, 0xC - ldrsh r0, [r1, r2] - cmp r0, 0 - bne _080B4678 - movs r2, 0 - lsls r5, 16 - str r5, [sp, 0xC] - lsls r0, r3, 16 - lsls r1, r4, 16 - asrs r0, 16 - str r0, [sp] - asrs r1, 16 - str r1, [sp, 0x4] - lsls r0, r1, 1 - mov r1, r9 - adds r7, r0, r1 -_080B4608: - movs r4, 0 - lsls r2, 16 - mov r8, r2 - asrs r0, r2, 16 - ldr r2, [sp] - adds r6, r2, r0 -_080B4614: - ldr r0, [sp, 0xC] - asrs r1, r0, 16 - lsls r4, 16 - asrs r0, r4, 16 - adds r5, r1, r0 - adds r0, r5, 0 - adds r1, r6, 0 - bl MapGridGetMetatileIdAt - movs r2, 0 - ldrsh r1, [r7, r2] - lsls r0, 16 - asrs r0, 16 - cmp r1, r0 - bne _080B465C - ldr r0, [sp, 0x4] - cmp r0, 0x2 - beq _080B464C - ldrh r0, [r7, 0x2] - mov r2, r10 - orrs r2, r0 - adds r0, r5, 0 - adds r1, r6, 0 - bl MapGridSetMetatileIdAt - b _080B465C - .align 2, 0 -_080B4648: .4byte gTasks -_080B464C: - mov r1, r9 - ldrh r0, [r1] - mov r2, r10 - orrs r2, r0 - adds r0, r5, 0 - adds r1, r6, 0 - bl MapGridSetMetatileIdAt -_080B465C: - movs r2, 0x80 - lsls r2, 9 - adds r0, r4, r2 - lsrs r4, r0, 16 - asrs r0, 16 - cmp r0, 0x2 - ble _080B4614 - adds r0, r2, 0 - add r0, r8 - lsrs r2, r0, 16 - asrs r0, 16 - cmp r0, 0x2 - ble _080B4608 - b _080B4700 -_080B4678: - movs r2, 0 - lsls r5, 16 - str r5, [sp, 0xC] - lsls r0, r3, 16 - lsls r1, r4, 16 - asrs r0, 16 - str r0, [sp, 0x8] - asrs r7, r1, 16 -_080B4688: - movs r4, 0 - lsls r2, 16 - mov r8, r2 - asrs r0, r2, 16 - ldr r1, [sp, 0x8] - adds r6, r1, r0 -_080B4694: - ldr r2, [sp, 0xC] - asrs r1, r2, 16 - lsls r4, 16 - asrs r0, r4, 16 - adds r5, r1, r0 - adds r0, r5, 0 - adds r1, r6, 0 - bl MapGridGetMetatileIdAt - movs r1, 0x2 - subs r1, r7 - lsls r1, 1 - add r1, r9 - movs r2, 0 - ldrsh r1, [r1, r2] - lsls r0, 16 - asrs r0, 16 - cmp r1, r0 - bne _080B46E6 - cmp r7, 0x2 - beq _080B46D6 - movs r0, 0x1 - subs r0, r7 - lsls r0, 1 - add r0, r9 - ldrh r0, [r0] - mov r2, r10 - orrs r2, r0 - adds r0, r5, 0 - adds r1, r6, 0 - bl MapGridSetMetatileIdAt - b _080B46E6 -_080B46D6: - mov r1, r9 - ldrh r0, [r1, 0x4] - mov r2, r10 - orrs r2, r0 - adds r0, r5, 0 - adds r1, r6, 0 - bl MapGridSetMetatileIdAt -_080B46E6: - movs r2, 0x80 - lsls r2, 9 - adds r0, r4, r2 - lsrs r4, r0, 16 - asrs r0, 16 - cmp r0, 0x2 - ble _080B4694 - adds r0, r2, 0 - add r0, r8 - lsrs r2, r0, 16 - asrs r0, 16 - cmp r0, 0x2 - ble _080B4688 -_080B4700: - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80B45B4 - - thumb_func_start sub_80B4710 -sub_80B4710: @ 80B4710 - push {r4,r5,lr} - lsls r0, 24 - lsrs r3, r0, 24 - lsls r0, r3, 2 - adds r0, r3 - lsls r0, 3 - ldr r1, _080B4738 @ =gTasks + 0x8 - adds r4, r0, r1 - movs r0, 0x1 - strh r0, [r4, 0x6] - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0x6 - bhi _080B47AA - lsls r0, 2 - ldr r1, _080B473C @ =_080B4740 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080B4738: .4byte gTasks + 0x8 -_080B473C: .4byte _080B4740 - .align 2, 0 -_080B4740: - .4byte _080B475C - .4byte _080B4764 - .4byte _080B476C - .4byte _080B4774 - .4byte _080B477C - .4byte _080B4790 - .4byte _080B47A0 -_080B475C: - ldr r1, _080B4760 @ =gUnknown_083CC714 - b _080B4792 - .align 2, 0 -_080B4760: .4byte gUnknown_083CC714 -_080B4764: - ldr r1, _080B4768 @ =gUnknown_083CC71A - b _080B4792 - .align 2, 0 -_080B4768: .4byte gUnknown_083CC71A -_080B476C: - ldr r1, _080B4770 @ =gUnknown_083CC720 - b _080B477E - .align 2, 0 -_080B4770: .4byte gUnknown_083CC720 -_080B4774: - ldr r1, _080B4778 @ =gUnknown_083CC726 - b _080B4792 - .align 2, 0 -_080B4778: .4byte gUnknown_083CC726 -_080B477C: - ldr r1, _080B478C @ =gUnknown_083CC72C -_080B477E: - movs r2, 0xC0 - lsls r2, 4 - adds r0, r3, 0 - bl sub_80B45B4 - b _080B47AA - .align 2, 0 -_080B478C: .4byte gUnknown_083CC72C -_080B4790: - ldr r1, _080B479C @ =gUnknown_083CC732 -_080B4792: - adds r0, r3, 0 - movs r2, 0 - bl sub_80B45B4 - b _080B47AA - .align 2, 0 -_080B479C: .4byte gUnknown_083CC732 -_080B47A0: - ldr r1, _080B47D4 @ =gUnknown_083CC738 - adds r0, r3, 0 - movs r2, 0 - bl sub_80B45B4 -_080B47AA: - ldrh r0, [r4] - adds r0, 0x1 - movs r1, 0x7 - ands r0, r1 - strh r0, [r4] - adds r5, r0, 0 - cmp r5, 0 - bne _080B47CE - bl DrawWholeMapView - movs r1, 0x2 - ldrsh r0, [r4, r1] - adds r0, 0x1 - movs r1, 0x3 - bl __modsi3 - strh r0, [r4, 0x2] - strh r5, [r4, 0x6] -_080B47CE: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B47D4: .4byte gUnknown_083CC738 - thumb_func_end sub_80B4710 - - thumb_func_start sub_80B47D8 -sub_80B47D8: @ 80B47D8 - push {r4-r7,lr} - adds r5, r0, 0 - lsls r5, 16 - lsrs r5, 16 - ldr r6, _080B481C @ =sub_80B4710 - adds r0, r6, 0 - movs r1, 0 - bl CreateTask - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, _080B4820 @ =gTasks + 0x8 - adds r7, r0, r1 - adds r0, r7, 0 - adds r0, 0x8 - adds r1, r7, 0 - adds r1, 0xA - bl PlayerGetDestCoords - movs r0, 0 - strh r0, [r7] - strh r0, [r7, 0x2] - strh r5, [r7, 0x4] - adds r0, r4, 0 - bl _call_via_r6 - adds r0, r4, 0 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080B481C: .4byte sub_80B4710 -_080B4820: .4byte gTasks + 0x8 - thumb_func_end sub_80B47D8 - - thumb_func_start sub_80B4824 -sub_80B4824: @ 80B4824 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl sub_80B47D8 - ldr r1, _080B4838 @ =gUnknown_02038731 - strb r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_080B4838: .4byte gUnknown_02038731 - thumb_func_end sub_80B4824 - - thumb_func_start sub_80B483C -sub_80B483C: @ 80B483C - push {lr} - ldr r0, _080B484C @ =gUnknown_02038731 - ldrb r0, [r0] - bl DestroyTask - pop {r0} - bx r0 - .align 2, 0 -_080B484C: .4byte gUnknown_02038731 - thumb_func_end sub_80B483C - - thumb_func_start sub_80B4850 -sub_80B4850: @ 80B4850 - push {lr} - ldr r2, _080B4874 @ =gTasks - ldr r0, _080B4878 @ =gUnknown_02038731 - ldrb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r1, r0, r2 - movs r2, 0xE - ldrsh r0, [r1, r2] - cmp r0, 0 - bne _080B487C - movs r2, 0xA - ldrsh r0, [r1, r2] - cmp r0, 0x2 - bne _080B487C - movs r0, 0 - b _080B487E - .align 2, 0 -_080B4874: .4byte gTasks -_080B4878: .4byte gUnknown_02038731 -_080B487C: - movs r0, 0x1 -_080B487E: - pop {r1} - bx r1 - thumb_func_end sub_80B4850 - - .align 2, 0 @ Don't pad with nop. diff --git a/include/shop.h b/include/shop.h index 414bd628f..3923b85ab 100644 --- a/include/shop.h +++ b/include/shop.h @@ -11,9 +11,9 @@ void BuyMenuDrawMapGraphics(void); void sub_80B3764(int, int); void sub_80B37EC(void); void sub_80B40E8(u8); -void CreatePokemartMenu(void *); -void CreateDecorationShop1Menu(void *); -void CreateDecorationShop2Menu(void *); +void CreatePokemartMenu(u16 *); +void CreateDecorationShop1Menu(u16 *); +void CreateDecorationShop2Menu(u16 *); void sub_80B356C(void); void sub_80B368C(void); diff --git a/ld_script.txt b/ld_script.txt index 75117faa6..9c428c267 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -159,7 +159,6 @@ SECTIONS { src/matsuda_debug_menu.o(.text); asm/contest.o(.text); src/shop.o(.text); - asm/shop.o(.text); src/berry.o(.text); src/script_menu.o(.text); src/naming_screen.o(.text); diff --git a/src/shop.c b/src/shop.c index b053e3f2e..737d0e2bd 100644 --- a/src/shop.c +++ b/src/shop.c @@ -25,6 +25,7 @@ #include "songs.h" #include "rom4.h" #include "decoration_inventory.h" +#include "field_camera.h" extern bool8 sub_80A52C4(u8, u8); @@ -73,6 +74,7 @@ enum }; extern u8 gUnknown_02038730; +extern u8 gUnknown_02038731; extern s16 gUnknown_020386A4[][4]; // game freak barely uses 2d arrays wtf? @@ -1226,3 +1228,296 @@ _080B4530: .4byte gTasks\n\ .syntax divided"); } #endif + +void ClearItemPurchases(void) +{ + gUnknown_02038730 = 0; + ClearItemSlots(gUnknown_02038724, 3); +} + +void CreatePokemartMenu(u16 *itemList) +{ + CreateShopMenu(MART_TYPE_0); + SetShopItemsForSale(itemList); + ClearItemPurchases(); + SetShopMenuCallback(EnableBothScriptContexts); +} + +void CreateDecorationShop1Menu(u16 *itemList) +{ + CreateShopMenu(MART_TYPE_1); + SetShopItemsForSale(itemList); + SetShopMenuCallback(EnableBothScriptContexts); +} + +void CreateDecorationShop2Menu(u16 *itemList) +{ + CreateShopMenu(MART_TYPE_2); + SetShopItemsForSale(itemList); + SetShopMenuCallback(EnableBothScriptContexts); +} + +// no. +__attribute__((naked)) +void sub_80B45B4(u8 taskId, u16 *list, int var3) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x10\n\ + mov r9, r1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + lsls r2, 16\n\ + lsrs r2, 16\n\ + mov r10, r2\n\ + ldr r2, _080B4648 @ =gTasks\n\ + lsls r1, r0, 2\n\ + adds r1, r0\n\ + lsls r1, 3\n\ + adds r1, r2\n\ + ldrh r0, [r1, 0x10]\n\ + subs r0, 0x1\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + ldrh r0, [r1, 0x12]\n\ + subs r0, 0x1\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + ldrh r4, [r1, 0xA]\n\ + movs r2, 0xC\n\ + ldrsh r0, [r1, r2]\n\ + cmp r0, 0\n\ + bne _080B4678\n\ + movs r2, 0\n\ + lsls r5, 16\n\ + str r5, [sp, 0xC]\n\ + lsls r0, r3, 16\n\ + lsls r1, r4, 16\n\ + asrs r0, 16\n\ + str r0, [sp]\n\ + asrs r1, 16\n\ + str r1, [sp, 0x4]\n\ + lsls r0, r1, 1\n\ + mov r1, r9\n\ + adds r7, r0, r1\n\ +_080B4608:\n\ + movs r4, 0\n\ + lsls r2, 16\n\ + mov r8, r2\n\ + asrs r0, r2, 16\n\ + ldr r2, [sp]\n\ + adds r6, r2, r0\n\ +_080B4614:\n\ + ldr r0, [sp, 0xC]\n\ + asrs r1, r0, 16\n\ + lsls r4, 16\n\ + asrs r0, r4, 16\n\ + adds r5, r1, r0\n\ + adds r0, r5, 0\n\ + adds r1, r6, 0\n\ + bl MapGridGetMetatileIdAt\n\ + movs r2, 0\n\ + ldrsh r1, [r7, r2]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + cmp r1, r0\n\ + bne _080B465C\n\ + ldr r0, [sp, 0x4]\n\ + cmp r0, 0x2\n\ + beq _080B464C\n\ + ldrh r0, [r7, 0x2]\n\ + mov r2, r10\n\ + orrs r2, r0\n\ + adds r0, r5, 0\n\ + adds r1, r6, 0\n\ + bl MapGridSetMetatileIdAt\n\ + b _080B465C\n\ + .align 2, 0\n\ +_080B4648: .4byte gTasks\n\ +_080B464C:\n\ + mov r1, r9\n\ + ldrh r0, [r1]\n\ + mov r2, r10\n\ + orrs r2, r0\n\ + adds r0, r5, 0\n\ + adds r1, r6, 0\n\ + bl MapGridSetMetatileIdAt\n\ +_080B465C:\n\ + movs r2, 0x80\n\ + lsls r2, 9\n\ + adds r0, r4, r2\n\ + lsrs r4, r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x2\n\ + ble _080B4614\n\ + adds r0, r2, 0\n\ + add r0, r8\n\ + lsrs r2, r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x2\n\ + ble _080B4608\n\ + b _080B4700\n\ +_080B4678:\n\ + movs r2, 0\n\ + lsls r5, 16\n\ + str r5, [sp, 0xC]\n\ + lsls r0, r3, 16\n\ + lsls r1, r4, 16\n\ + asrs r0, 16\n\ + str r0, [sp, 0x8]\n\ + asrs r7, r1, 16\n\ +_080B4688:\n\ + movs r4, 0\n\ + lsls r2, 16\n\ + mov r8, r2\n\ + asrs r0, r2, 16\n\ + ldr r1, [sp, 0x8]\n\ + adds r6, r1, r0\n\ +_080B4694:\n\ + ldr r2, [sp, 0xC]\n\ + asrs r1, r2, 16\n\ + lsls r4, 16\n\ + asrs r0, r4, 16\n\ + adds r5, r1, r0\n\ + adds r0, r5, 0\n\ + adds r1, r6, 0\n\ + bl MapGridGetMetatileIdAt\n\ + movs r1, 0x2\n\ + subs r1, r7\n\ + lsls r1, 1\n\ + add r1, r9\n\ + movs r2, 0\n\ + ldrsh r1, [r1, r2]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + cmp r1, r0\n\ + bne _080B46E6\n\ + cmp r7, 0x2\n\ + beq _080B46D6\n\ + movs r0, 0x1\n\ + subs r0, r7\n\ + lsls r0, 1\n\ + add r0, r9\n\ + ldrh r0, [r0]\n\ + mov r2, r10\n\ + orrs r2, r0\n\ + adds r0, r5, 0\n\ + adds r1, r6, 0\n\ + bl MapGridSetMetatileIdAt\n\ + b _080B46E6\n\ +_080B46D6:\n\ + mov r1, r9\n\ + ldrh r0, [r1, 0x4]\n\ + mov r2, r10\n\ + orrs r2, r0\n\ + adds r0, r5, 0\n\ + adds r1, r6, 0\n\ + bl MapGridSetMetatileIdAt\n\ +_080B46E6:\n\ + movs r2, 0x80\n\ + lsls r2, 9\n\ + adds r0, r4, r2\n\ + lsrs r4, r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x2\n\ + ble _080B4694\n\ + adds r0, r2, 0\n\ + add r0, r8\n\ + lsrs r2, r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x2\n\ + ble _080B4688\n\ +_080B4700:\n\ + add sp, 0x10\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\ + .syntax divided"); +} + +extern u16 gUnknown_083CC714[]; +extern u16 gUnknown_083CC71A[]; +extern u16 gUnknown_083CC720[]; +extern u16 gUnknown_083CC726[]; +extern u16 gUnknown_083CC72C[]; +extern u16 gUnknown_083CC732[]; +extern u16 gUnknown_083CC738[]; + +void sub_80B4710(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + data[3] = 1; + + switch(data[0]) + { + case 0: + sub_80B45B4(taskId, gUnknown_083CC714, 0); + break; + case 1: + sub_80B45B4(taskId, gUnknown_083CC71A, 0); + break; + case 2: + sub_80B45B4(taskId, gUnknown_083CC720, 0xC00); + break; + case 3: + sub_80B45B4(taskId, gUnknown_083CC726, 0); + break; + case 4: + sub_80B45B4(taskId, gUnknown_083CC72C, 0xC00); + break; + case 5: + sub_80B45B4(taskId, gUnknown_083CC732, 0); + break; + case 6: + sub_80B45B4(taskId, gUnknown_083CC738, 0); + break; + } + + data[0] = (data[0] + 1) & 7; + if(!data[0]) + { + DrawWholeMapView(); + data[1] = (data[1] + 1) % 3; + data[3] = 0; + } +} + +u8 sub_80B47D8(u16 var) +{ + u8 taskId = CreateTask(sub_80B4710, 0); + s16 *data = gTasks[taskId].data; + + PlayerGetDestCoords(&data[4], &data[5]); + data[0] = 0; + data[1] = 0; + data[2] = var; + sub_80B4710(taskId); + return taskId; +} + +void sub_80B4824(u8 var) +{ + gUnknown_02038731 = sub_80B47D8(var); +} + +void sub_80B483C(void) +{ + DestroyTask(gUnknown_02038731); +} + +bool8 sub_80B4850(void) +{ + if(gTasks[gUnknown_02038731].data[3] == 0 && gTasks[gUnknown_02038731].data[1] == 2) + return FALSE; + else + return TRUE; +} -- cgit v1.2.3 From 406ced34a1db5a700a542eb2b7a629b0e31c992d Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Fri, 25 Aug 2017 22:13:27 -0500 Subject: add newline at the end of egg_hatch.txt --- common_syms/egg_hatch.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common_syms/egg_hatch.txt b/common_syms/egg_hatch.txt index f49202045..891ccc104 100644 --- a/common_syms/egg_hatch.txt +++ b/common_syms/egg_hatch.txt @@ -1 +1 @@ -gEggHatchData \ No newline at end of file +gEggHatchData -- cgit v1.2.3 From e9037c7861b70d39686608b3eace9e9443c18c44 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Fri, 25 Aug 2017 23:38:46 -0400 Subject: move data to C --- data/shop.s | 69 ----------------------------------------------- include/shop.h | 28 +++++++++++++++++++ ld_script.txt | 2 +- src/shop.c | 85 ++++++++++++++++++++++++++-------------------------------- 4 files changed, 67 insertions(+), 117 deletions(-) delete mode 100644 data/shop.s diff --git a/data/shop.s b/data/shop.s deleted file mode 100644 index 071874d0e..000000000 --- a/data/shop.s +++ /dev/null @@ -1,69 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - - .align 2 -gUnknown_083CC6D0:: @ 83CC6D0 - .4byte MartText_Buy, sub_80B2EFC - .4byte MartText_Sell, sub_80B2F30 - .4byte MartText_Quit2, HandleShopMenuQuit - -gUnknown_083CC6E8:: @ 83CC6E8 - .byte 0, 1, 2 - -gUnknown_083CC6EB:: @ 83CC6EB - .byte 0, 2 - -@ unknown, unreferenced data - .align 1 - .2byte 0x2 - .2byte 0x3 - .2byte 0x4 - .2byte 0xD - .2byte 0x121 - .2byte 0xE - .2byte 0xE - .2byte 0xE - .2byte 0xE - .2byte 0xE - .2byte 0xE - .2byte 0x0 - .2byte 0x0 - - .align 2 -gUnknown_083CC708:: @ 83CC708 - .4byte sub_80B3BF4 - .4byte sub_80B3D7C - - .align 1 -gUnknown_083CC710:: @ 83CC710 - .2byte 0x41EE,0x7FFF - - .align 1 -gUnknown_083CC714:: @ 83CC714 - .2byte 0x284,0x282,0x280 - - .align 1 -gUnknown_083CC71A:: @ 83CC71A - .2byte 0x285,0x283,0x281 - - .align 1 -gUnknown_083CC720:: @ 83CC720 - .2byte 0x28C,0x28A,0x288 - - .align 1 -gUnknown_083CC726:: @ 83CC726 - .2byte 0x28D,0x28B,0x289 - - .align 1 -gUnknown_083CC72C:: @ 83CC72C - .2byte 0x2A0,0x2A2,0x2A4 - - .align 1 -gUnknown_083CC732:: @ 83CC732 - .2byte 0x2A1,0x2A3,0x2A5 - - .align 1 -gUnknown_083CC738:: @ 83CC738 - .2byte 0x2A8,0x2AA,0x2AC diff --git a/include/shop.h b/include/shop.h index 3923b85ab..18d5cd94f 100644 --- a/include/shop.h +++ b/include/shop.h @@ -1,6 +1,34 @@ #ifndef GUARD_SHOP_H #define GUARD_SHOP_H +enum +{ + MART_TYPE_0, // normal mart + MART_TYPE_1, + MART_TYPE_2, +}; + +// shop view window NPC info enum +enum +{ + MAP_OBJ_ID, + X_COORD, + Y_COORD, + ANIM_NUM +}; + +struct MartInfo +{ + /* 0x0 */ void (* callback) (void); + /* 0x4 */ u16 *itemList; + /* 0x8 */ u8 itemCount; + /* 0x9 */ u8 cursor; // this shows the on-screen true index of the cursor and not the current item selected. + /* 0xA */ u8 numChoices; + /* 0xB */ u8 choicesAbove; + /* 0xC */ u8 martType; + /* 0xD */ u8 unkD; +}; + void sub_80B2E38(u8); void HandleShopMenuQuit(u8); void sub_80B2FA0(u8); diff --git a/ld_script.txt b/ld_script.txt index 9c428c267..5d1052c70 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -396,7 +396,7 @@ SECTIONS { src/item.o(.rodata); data/matsuda_debug_menu.o(.rodata); data/contest.o(.rodata); - data/shop.o(.rodata); + src/shop.o(.rodata); src/berry.o(.rodata); src/script_menu.o(.rodata); src/naming_screen.o(.rodata); diff --git a/src/shop.c b/src/shop.c index 737d0e2bd..ca7609e72 100644 --- a/src/shop.c +++ b/src/shop.c @@ -27,52 +27,20 @@ #include "decoration_inventory.h" #include "field_camera.h" -extern bool8 sub_80A52C4(u8, u8); - -enum -{ - MART_TYPE_0, // normal mart - MART_TYPE_1, - MART_TYPE_2, -}; +#define ewram18000 ((u16 *)(ewram + 0x18000)) +#define ewram18300 ((u16 *)(ewram + 0x18300)) -struct MartInfo -{ - /* 0x0 */ void (* callback) (void); - /* 0x4 */ u16 *itemList; - /* 0x8 */ u8 itemCount; - /* 0x9 */ u8 cursor; // this shows the on-screen true index of the cursor and not the current item selected. - /* 0xA */ u8 numChoices; - /* 0xB */ u8 choicesAbove; - /* 0xC */ u8 martType; - /* 0xD */ u8 unkD; -}; +extern bool8 sub_80A52C4(u8, u8); extern struct MartInfo gMartInfo; -extern struct MenuAction gUnknown_083CC6D0[]; -extern struct YesNoFuncTable gUnknown_083CC708[]; extern struct ItemSlot gUnknown_02038724[3]; extern u32 gMartTotalCost; // the total cost of a purchase before checking out. extern u8 ewram[]; -extern u8 gUnknown_083CC6E8[]; -extern u8 gUnknown_083CC6EB[]; extern u8 gBuyMenuFrame_Gfx[]; -#define ewram18000 ((u16 *)(ewram + 0x18000)) -#define ewram18300 ((u16 *)(ewram + 0x18300)) - -// shop view window NPC info enum -enum -{ - MAP_OBJ_ID, - X_COORD, - Y_COORD, - ANIM_NUM -}; - extern u8 gUnknown_02038730; extern u8 gUnknown_02038731; @@ -80,7 +48,6 @@ extern s16 gUnknown_020386A4[][4]; // game freak barely uses 2d arrays wtf? extern u16 gBuyMenuFrame_Tilemap[]; extern u16 gMenuMoneyPal[16]; -extern u16 gUnknown_083CC710[2]; void sub_80B39D0(int var1, int var2, bool32 hasControlCode); void sub_80B3A70(void); @@ -88,6 +55,38 @@ void sub_80B4378(u8); void sub_80B43F0(u8); void Task_ExitBuyMenu(u8); void sub_80B4470(u8); +void sub_80B2EFC(u8 taskId); +void sub_80B2F30(u8 taskId); +void HandleShopMenuQuit(u8 taskId); +void sub_80B3BF4(u8 taskId); +void sub_80B3D7C(u8 taskId); + +static const struct MenuAction2 gUnknown_083CC6D0[] = +{ + { MartText_Buy, sub_80B2EFC }, + { MartText_Sell, sub_80B2F30 }, + { MartText_Quit2, HandleShopMenuQuit }, +}; + +static const u8 gUnknown_083CC6E8[] = {0, 1, 2}; // BUY SELL EXIT +static const u8 gUnknown_083CC6EB[] = {0, 2}; // BUY EXIT + +static const u16 gUnusedMartArray[] = {0x2, 0x3, 0x4, 0xD, 0x121, 0xE, 0xE, 0xE, 0xE, 0xE, 0xE, 0x0, 0x0}; + +static const struct YesNoFuncTable gUnknown_083CC708[] = +{ + sub_80B3BF4, + sub_80B3D7C +}; + +static const u16 gUnknown_083CC710[] = {0x41EE, 0x7FFF}; +static const u16 gUnknown_083CC714[] = {0x284, 0x282, 0x280}; +static const u16 gUnknown_083CC71A[] = {0x285, 0x283, 0x281}; +static const u16 gUnknown_083CC720[] = {0x28C, 0x28A, 0x288}; +static const u16 gUnknown_083CC726[] = {0x28D, 0x28B, 0x289}; +static const u16 gUnknown_083CC72C[] = {0x2A0, 0x2A2, 0x2A4}; +static const u16 gUnknown_083CC732[] = {0x2A1, 0x2A3, 0x2A5}; +static const u16 gUnknown_083CC738[] = {0x2A8, 0x2AA, 0x2AC}; u8 CreateShopMenu(u8 martType) { @@ -99,13 +98,13 @@ u8 CreateShopMenu(u8 martType) { gMartInfo.numChoices = 2; MenuDrawTextWindow(0, 0, 10, 7); - PrintMenuItemsReordered(1, 1, 3, gUnknown_083CC6D0, (u8 *)gUnknown_083CC6E8); + PrintMenuItemsReordered(1, 1, 3, (struct MenuAction *)gUnknown_083CC6D0, (u8 *)gUnknown_083CC6E8); } else { gMartInfo.numChoices = 1; MenuDrawTextWindow(0, 0, 10, 5); - PrintMenuItemsReordered(1, 1, 2, gUnknown_083CC6D0, (u8 *)gUnknown_083CC6EB); + PrintMenuItemsReordered(1, 1, 2, (struct MenuAction *)gUnknown_083CC6D0, (u8 *)gUnknown_083CC6EB); } InitMenu(0, 1, 1, gMartInfo.numChoices + 1, 0, 9); // add 1 for cancel @@ -1259,7 +1258,7 @@ void CreateDecorationShop2Menu(u16 *itemList) // no. __attribute__((naked)) -void sub_80B45B4(u8 taskId, u16 *list, int var3) +void sub_80B45B4(u8 taskId, const u16 *list, int var3) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ @@ -1443,14 +1442,6 @@ _080B4700:\n\ .syntax divided"); } -extern u16 gUnknown_083CC714[]; -extern u16 gUnknown_083CC71A[]; -extern u16 gUnknown_083CC720[]; -extern u16 gUnknown_083CC726[]; -extern u16 gUnknown_083CC72C[]; -extern u16 gUnknown_083CC732[]; -extern u16 gUnknown_083CC738[]; - void sub_80B4710(u8 taskId) { s16 *data = gTasks[taskId].data; -- cgit v1.2.3 From 5c7f78d8bc897f5bf4d9d18352bc81626ee09437 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sat, 26 Aug 2017 00:03:29 -0400 Subject: iwram and ewram data --- src/shop.c | 23 +++++++++++------------ sym_bss.txt | 7 +------ sym_ewram.txt | 24 +----------------------- 3 files changed, 13 insertions(+), 41 deletions(-) diff --git a/src/shop.c b/src/shop.c index ca7609e72..060e84693 100644 --- a/src/shop.c +++ b/src/shop.c @@ -32,20 +32,8 @@ extern bool8 sub_80A52C4(u8, u8); -extern struct MartInfo gMartInfo; -extern struct ItemSlot gUnknown_02038724[3]; - -extern u32 gMartTotalCost; // the total cost of a purchase before checking out. - extern u8 ewram[]; - extern u8 gBuyMenuFrame_Gfx[]; - -extern u8 gUnknown_02038730; -extern u8 gUnknown_02038731; - -extern s16 gUnknown_020386A4[][4]; // game freak barely uses 2d arrays wtf? - extern u16 gBuyMenuFrame_Tilemap[]; extern u16 gMenuMoneyPal[16]; @@ -61,6 +49,17 @@ void HandleShopMenuQuit(u8 taskId); void sub_80B3BF4(u8 taskId); void sub_80B3D7C(u8 taskId); +// iwram +static struct MartInfo gMartInfo; + +// ewram +EWRAM_DATA u32 gMartTotalCost = 0; +EWRAM_DATA s16 gUnknown_020386A4[16][4] = {0}; // game freak barely uses 2d arrays wtf? +EWRAM_DATA struct ItemSlot gUnknown_02038724[3] = {0}; // tv.c uses this, so it cant be static +EWRAM_DATA u8 gUnknown_02038730 = 0; +EWRAM_DATA u8 gUnknown_02038731 = 0; + +// rodata static const struct MenuAction2 gUnknown_083CC6D0[] = { { MartText_Buy, sub_80B2EFC }, diff --git a/sym_bss.txt b/sym_bss.txt index 03737bdf3..ea02bf42f 100644 --- a/sym_bss.txt +++ b/sym_bss.txt @@ -78,12 +78,7 @@ gUnknown_030006DC: @ 30006DC .include "src/field_effect.o" .include "src/item_menu.o" - -@ shop - -gMartInfo: @ 3000708 - .space 0x10 - + .include "src/shop.o" .include "src/record_mixing.o" .include "src/tv.o" diff --git a/sym_ewram.txt b/sym_ewram.txt index 5cfd772be..997821d6e 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -523,29 +523,7 @@ gScriptContestCategory: @ 203869C gScriptContestRank: @ 203869E .space 0x2 -@ shop - -gMartTotalCost: @ 20386A0 - .space 0x4 - -gUnknown_020386A4: @ 20386A4 - .space 0x4 - -gUnknown_020386A8: @ 20386A8 - .space 0x2 - -gUnknown_020386AA: @ 20386AA - .space 0x7A - -gUnknown_02038724: @ 2038724 - .space 0xC - -gUnknown_02038730: @ 2038730 - .space 0x1 - -gUnknown_02038731: @ 2038731 - .space 0x3 - + .include "src/shop.o" .include "src/money.o" @ record_mixing -- cgit v1.2.3 From 027dc5448e9a5cc90ca6fa4e37d9b73ec342cfe5 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sat, 26 Aug 2017 00:25:28 -0400 Subject: formatting --- src/shop.c | 68 +++++++++++++++++++++++++++++++------------------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/src/shop.c b/src/shop.c index 060e84693..e523f927c 100644 --- a/src/shop.c +++ b/src/shop.c @@ -643,12 +643,12 @@ void sub_80B3A70(void) void sub_80B3AEC(u8 taskId) { - if(gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) + if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) { sub_80B39D0(gMartInfo.cursor, gMartInfo.cursor, 0); // huh??? PlaySE(SE_SELECT); - if(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor] == ITEM_POKE_BALL && gTasks[taskId].data[1] >= 10 && AddBagItem(ITEM_PREMIER_BALL, 1) == TRUE) + if (gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor] == ITEM_POKE_BALL && gTasks[taskId].data[1] >= 10 && AddBagItem(ITEM_PREMIER_BALL, 1) == TRUE) DisplayItemMessageOnField(taskId, gOtherText_FreePremierBall, sub_80B4378, 0xC3E1); else sub_80B4378(taskId); @@ -677,11 +677,11 @@ void sub_80B3BF4(u8 taskId) sub_80B379C(); sub_80B3420(); - if(IsEnoughMoney(gSaveBlock1.money, gMartTotalCost)) + if (IsEnoughMoney(gSaveBlock1.money, gMartTotalCost)) { - if(gMartInfo.martType == MART_TYPE_0) + if (gMartInfo.martType == MART_TYPE_0) { - if(AddBagItem(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor], gTasks[taskId].data[1])) + if (AddBagItem(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor], gTasks[taskId].data[1])) { DisplayItemMessageOnField(taskId, gOtherText_HereYouGo, sub_80B3B80, 0xC3E1); sub_80B4470(taskId); @@ -691,9 +691,9 @@ void sub_80B3BF4(u8 taskId) } else // a normal mart is only type 0, so types 1 and 2 are decoration marts. { - if(IsThereStorageSpaceForDecoration(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor])) + if (IsThereStorageSpaceForDecoration(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor])) { - if(gMartInfo.martType == MART_TYPE_1) + if (gMartInfo.martType == MART_TYPE_1) DisplayItemMessageOnField(taskId, gOtherText_HereYouGo2, sub_80B3B80, 0xC3E1); else DisplayItemMessageOnField(taskId, gOtherText_HereYouGo3, sub_80B3B80, 0xC3E1); @@ -726,10 +726,10 @@ void sub_80B3D7C(u8 taskId) void sub_80B3DC8(u8 taskId) { - if(sub_80A52C4(taskId, gMartInfo.unkD) == TRUE) + if (sub_80A52C4(taskId, gMartInfo.unkD) == TRUE) sub_80B37F8(taskId); - if(gMain.newKeys & A_BUTTON) + if (gMain.newKeys & A_BUTTON) { gMartTotalCost = (ItemId_GetPrice(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]) >> GetPriceReduction(1)) * gTasks[taskId].data[1]; // set total cost of your purchase. MenuZeroFillWindowRect(0, 0xA, 0xD, 0xD); @@ -742,7 +742,7 @@ void sub_80B3DC8(u8 taskId) StringExpandPlaceholders(gStringVar4, gOtherText_ThatWillBe); DisplayItemMessageOnField(taskId, gStringVar4, sub_80B3D38, 0xC3E1); } - else if(gMain.newKeys & B_BUTTON) + else if (gMain.newKeys & B_BUTTON) { sub_80B39D0(gMartInfo.cursor, gMartInfo.cursor, 0); sub_80B4378(taskId); @@ -758,7 +758,7 @@ void sub_80B3EFC(u8 taskId) sub_80B37F8(taskId); var = gSaveBlock1.money / (ItemId_GetPrice(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]) >> GetPriceReduction(1)); - if(var > 99) + if (var > 99) gMartInfo.unkD = 99; else gMartInfo.unkD = var; @@ -956,13 +956,13 @@ _080B40E4: .4byte 0x800000f0\n\ void sub_80B40E8(u8 taskId) // Mart_DoCursorAction { - if(!gPaletteFade.active) + if (!gPaletteFade.active) { - if((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP) // only up can be pressed + if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP) // only up can be pressed { - if(gMartInfo.cursor == 0) + if (gMartInfo.cursor == 0) { - if(gMartInfo.choicesAbove == 0) // if there are no choices above, dont bother + if (gMartInfo.choicesAbove == 0) // if there are no choices above, dont bother return; PlaySE(SE_SELECT); @@ -979,11 +979,11 @@ void sub_80B40E8(u8 taskId) // Mart_DoCursorAction sub_80B3A70(); } } - else if((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN) // only down can be pressed + else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN) // only down can be pressed { - if(gMartInfo.cursor == 7) // are you at the bottom of the menu? + if (gMartInfo.cursor == 7) // are you at the bottom of the menu? { - if(gMartInfo.choicesAbove + gMartInfo.cursor == gMartInfo.itemCount) // are you at cancel? + if (gMartInfo.choicesAbove + gMartInfo.cursor == gMartInfo.itemCount) // are you at cancel? return; PlaySE(SE_SELECT); @@ -993,18 +993,18 @@ void sub_80B40E8(u8 taskId) // Mart_DoCursorAction sub_80B3A70(); sub_80B32A4(); } - else if(gMartInfo.cursor != gMartInfo.itemCount) + else if (gMartInfo.cursor != gMartInfo.itemCount) { PlaySE(SE_SELECT); gMartInfo.cursor = MoveMenuCursor(1); sub_80B3A70(); } } - else if(gMain.newKeys & A_BUTTON) + else if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); - if(gMartInfo.choicesAbove + gMartInfo.cursor != gMartInfo.itemCount) // did you not hit CANCEL? + if (gMartInfo.choicesAbove + gMartInfo.cursor != gMartInfo.itemCount) // did you not hit CANCEL? { PauseVerticalScrollIndicator(0); PauseVerticalScrollIndicator(1); @@ -1013,10 +1013,10 @@ void sub_80B40E8(u8 taskId) // Mart_DoCursorAction HandleDestroyMenuCursors(); MenuZeroFillWindowRect(0, 0xC, 0xD, 0x13); - if(gMartInfo.martType == MART_TYPE_0) + if (gMartInfo.martType == MART_TYPE_0) { gMartTotalCost = (ItemId_GetPrice(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]) >> GetPriceReduction(1)); // set 1x price - if(!IsEnoughMoney(gSaveBlock1.money, gMartTotalCost)) + if (!IsEnoughMoney(gSaveBlock1.money, gMartTotalCost)) { DisplayItemMessageOnField(taskId, gOtherText_NotEnoughMoney, sub_80B3BD0, 0xC3E1); // tail merge } @@ -1031,7 +1031,7 @@ void sub_80B40E8(u8 taskId) // Mart_DoCursorAction { gMartTotalCost = gDecorations[gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]].price; - if(!IsEnoughMoney(gSaveBlock1.money, gMartTotalCost)) + if (!IsEnoughMoney(gSaveBlock1.money, gMartTotalCost)) { DisplayItemMessageOnField(taskId, gOtherText_NotEnoughMoney, sub_80B3BD0, 0xC3E1); // tail merge } @@ -1040,7 +1040,7 @@ void sub_80B40E8(u8 taskId) // Mart_DoCursorAction StringCopy(gStringVar1, gDecorations[gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]].name); ConvertIntToDecimalStringN(gStringVar2, gMartTotalCost, 0, 0x8); - if(gMartInfo.martType == MART_TYPE_1) + if (gMartInfo.martType == MART_TYPE_1) { StringExpandPlaceholders(gStringVar4, gOtherText_ThatWillBe2); } @@ -1055,7 +1055,7 @@ void sub_80B40E8(u8 taskId) // Mart_DoCursorAction else sub_80B43F0(taskId); } - else if(gMain.newKeys & B_BUTTON) // go back to buy/sell/exit menu + else if (gMain.newKeys & B_BUTTON) // go back to buy/sell/exit menu { PlaySE(SE_SELECT); sub_80B43F0(taskId); @@ -1086,7 +1086,7 @@ void sub_80B43F0(u8 taskId) void Task_ExitBuyMenu(u8 taskId) { - if(!gPaletteFade.active) + if (!gPaletteFade.active) { RemoveMoneyLabelObject(0, 0); BuyMenuFreeMemory(); @@ -1101,19 +1101,19 @@ void sub_80B4470(u8 taskId) { u16 i; - for(i = 0; i < 3; i++) + for (i = 0; i < 3; i++) { - if(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor] != gUnknown_02038724[i].itemId || gUnknown_02038724[i].quantity == 0) + if (gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor] != gUnknown_02038724[i].itemId || gUnknown_02038724[i].quantity == 0) continue; - if(gTasks[taskId].data[1] + gUnknown_02038724[i].quantity > 255) + if (gTasks[taskId].data[1] + gUnknown_02038724[i].quantity > 255) gUnknown_02038724[i].quantity = 255; else gUnknown_02038724[i].quantity += gTasks[taskId].data[1]; return; } - if(gUnknown_02038730 < 3) + if (gUnknown_02038730 < 3) { gUnknown_02038724[gUnknown_02038730].itemId = gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]; gUnknown_02038724[gUnknown_02038730].quantity = gTasks[taskId].data[1]; @@ -1447,7 +1447,7 @@ void sub_80B4710(u8 taskId) data[3] = 1; - switch(data[0]) + switch (data[0]) { case 0: sub_80B45B4(taskId, gUnknown_083CC714, 0); @@ -1473,7 +1473,7 @@ void sub_80B4710(u8 taskId) } data[0] = (data[0] + 1) & 7; - if(!data[0]) + if (!data[0]) { DrawWholeMapView(); data[1] = (data[1] + 1) % 3; @@ -1506,7 +1506,7 @@ void sub_80B483C(void) bool8 sub_80B4850(void) { - if(gTasks[gUnknown_02038731].data[3] == 0 && gTasks[gUnknown_02038731].data[1] == 2) + if (gTasks[gUnknown_02038731].data[3] == 0 && gTasks[gUnknown_02038731].data[1] == 2) return FALSE; else return TRUE; -- cgit v1.2.3 From 88f3eac7445af904ef7f4852b505c933171fef3f Mon Sep 17 00:00:00 2001 From: Touched Date: Sat, 26 Aug 2017 16:01:52 +0200 Subject: Fix non-matching C in field_ground_effect --- src/field_ground_effect.c | 245 +++++----------------------------------------- 1 file changed, 25 insertions(+), 220 deletions(-) diff --git a/src/field_ground_effect.c b/src/field_ground_effect.c index cb8b5e479..1e5f5ba20 100644 --- a/src/field_ground_effect.c +++ b/src/field_ground_effect.c @@ -30,6 +30,7 @@ void GroundEffect_JumpLandingDust(struct MapObject *mapObj, struct Sprite *sprit void GroundEffect_ShortGrass(struct MapObject *mapObj, struct Sprite *sprite); void GroundEffect_HotSprings(struct MapObject *mapObj, struct Sprite *sprite); void GroundEffect_Seaweed(struct MapObject *mapObj, struct Sprite *sprite); +u8 GetReflectionTypeByMetatileBehavior(u32 behavior); static const u32 sReflectionFlags[] = { 0x00000020, 0x00000010 }; @@ -348,7 +349,6 @@ void GetGroundEffectFlags_JumpLanding(struct MapObject *mapObj, u32 *flags) } } -#ifdef NONMATCHING u8 FieldObjectCheckForReflectiveSurface(struct MapObject *mapObj) { const struct MapObjectGraphicsInfo *info = GetFieldObjectGraphicsInfo(mapObj->graphicsId); @@ -360,223 +360,30 @@ u8 FieldObjectCheckForReflectiveSurface(struct MapObject *mapObj) s16 j; u8 result; u8 b; - register u32 a asm("r10"); - register s32 aa asm("r7"); + s16 one; - for (i = 0; i < height; i++) - { - a = 1; - b = MapGridGetMetatileBehaviorAt(mapObj->coords2.x, mapObj->coords2.y + a + i); - result = GetReflectionTypeByMetatileBehavior(b); - - if (result) - return result; - - b = MapGridGetMetatileBehaviorAt(mapObj->coords3.x, mapObj->coords3.y + a + i); - result = GetReflectionTypeByMetatileBehavior(b); - - if (result) - return result; +#define RETURN_REFLECTION_TYPE_AT(x, y) \ + b = MapGridGetMetatileBehaviorAt(x, y); \ + result = GetReflectionTypeByMetatileBehavior(b); \ + if (result != 0) \ + return result; + for (i = 0, one = 1; i < height; i++) + { + RETURN_REFLECTION_TYPE_AT(mapObj->coords2.x, mapObj->coords2.y + one + i) + RETURN_REFLECTION_TYPE_AT(mapObj->coords3.x, mapObj->coords3.y + one + i) for (j = 1; j < width; j++) { - aa = 1; - - b = MapGridGetMetatileBehaviorAt(mapObj->coords2.x + j, mapObj->coords2.y + aa + i); - result = GetReflectionTypeByMetatileBehavior(b); - - if (result) - return result; - - b = MapGridGetMetatileBehaviorAt(mapObj->coords2.x - j, mapObj->coords2.y + aa + i); - result = GetReflectionTypeByMetatileBehavior(b); - - if (result) - return result; - - b = MapGridGetMetatileBehaviorAt(mapObj->coords3.x + j, mapObj->coords3.y + aa + i); - result = GetReflectionTypeByMetatileBehavior(b); - - if (result) - return result; - - b = MapGridGetMetatileBehaviorAt(mapObj->coords3.x - j, mapObj->coords3.y + aa + i); - result = GetReflectionTypeByMetatileBehavior(b); - - if (result) - return result; + RETURN_REFLECTION_TYPE_AT(mapObj->coords2.x + j, mapObj->coords2.y + one + i) + RETURN_REFLECTION_TYPE_AT(mapObj->coords2.x - j, mapObj->coords2.y + one + i) + RETURN_REFLECTION_TYPE_AT(mapObj->coords3.x + j, mapObj->coords3.y + one + i) + RETURN_REFLECTION_TYPE_AT(mapObj->coords3.x - j, mapObj->coords3.y + one + i) } } - return 0; + +#undef RETURN_REFLECTION_TYPE_AT } -#else -__attribute__((naked)) u8 FieldObjectCheckForReflectiveSurface(struct MapObject *mapObj) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x8\n\ - adds r5, r0, 0\n\ - ldrb r0, [r5, 0x5]\n\ - bl GetFieldObjectGraphicsInfo\n\ - movs r2, 0x8\n\ - ldrsh r1, [r0, r2]\n\ - adds r1, 0x8\n\ - lsls r1, 12\n\ - lsrs r1, 16\n\ - str r1, [sp]\n\ - movs r1, 0xA\n\ - ldrsh r0, [r0, r1]\n\ - adds r0, 0x8\n\ - lsls r0, 12\n\ - movs r4, 0\n\ - lsrs r2, r0, 16\n\ - str r2, [sp, 0x4]\n\ - asrs r0, 16\n\ - cmp r4, r0\n\ - blt _08063A7A\n\ - b _08063B80\n\ -_08063A7A:\n\ - movs r0, 0x1\n\ - mov r10, r0\n\ -_08063A7E:\n\ - movs r1, 0x10\n\ - ldrsh r0, [r5, r1]\n\ - movs r2, 0x12\n\ - ldrsh r1, [r5, r2]\n\ - add r1, r10\n\ - lsls r4, 16\n\ - asrs r6, r4, 16\n\ - adds r1, r6\n\ - bl MapGridGetMetatileBehaviorAt\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - bl GetReflectionTypeByMetatileBehavior\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r9, r4\n\ - cmp r0, 0\n\ - bne _08063B82\n\ - movs r1, 0x14\n\ - ldrsh r0, [r5, r1]\n\ - movs r2, 0x16\n\ - ldrsh r1, [r5, r2]\n\ - add r1, r10\n\ - adds r1, r6\n\ - bl MapGridGetMetatileBehaviorAt\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - bl GetReflectionTypeByMetatileBehavior\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0\n\ - bne _08063B82\n\ - movs r2, 0x1\n\ - ldr r1, [sp]\n\ - lsls r0, r1, 16\n\ - asrs r1, r0, 16\n\ - mov r8, r0\n\ - cmp r2, r1\n\ - bge _08063B6E\n\ - movs r0, 0x80\n\ - lsls r0, 9\n\ - asrs r7, r0, 16\n\ -_08063AD8:\n\ - movs r1, 0x10\n\ - ldrsh r0, [r5, r1]\n\ - lsls r1, r2, 16\n\ - asrs r4, r1, 16\n\ - adds r0, r4\n\ - movs r2, 0x12\n\ - ldrsh r1, [r5, r2]\n\ - adds r1, r7\n\ - adds r1, r6\n\ - bl MapGridGetMetatileBehaviorAt\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - bl GetReflectionTypeByMetatileBehavior\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0\n\ - bne _08063B82\n\ - movs r1, 0x10\n\ - ldrsh r0, [r5, r1]\n\ - subs r0, r4\n\ - movs r2, 0x12\n\ - ldrsh r1, [r5, r2]\n\ - adds r1, r7\n\ - adds r1, r6\n\ - bl MapGridGetMetatileBehaviorAt\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - bl GetReflectionTypeByMetatileBehavior\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0\n\ - bne _08063B82\n\ - movs r1, 0x14\n\ - ldrsh r0, [r5, r1]\n\ - adds r0, r4\n\ - movs r2, 0x16\n\ - ldrsh r1, [r5, r2]\n\ - adds r1, r7\n\ - adds r1, r6\n\ - bl MapGridGetMetatileBehaviorAt\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - bl GetReflectionTypeByMetatileBehavior\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0\n\ - bne _08063B82\n\ - movs r1, 0x14\n\ - ldrsh r0, [r5, r1]\n\ - subs r0, r4\n\ - movs r2, 0x16\n\ - ldrsh r1, [r5, r2]\n\ - adds r1, r7\n\ - adds r1, r6\n\ - bl MapGridGetMetatileBehaviorAt\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - bl GetReflectionTypeByMetatileBehavior\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0\n\ - bne _08063B82\n\ - adds r0, r4, 0x1\n\ - lsls r0, 16\n\ - lsrs r2, r0, 16\n\ - cmp r0, r8\n\ - blt _08063AD8\n\ -_08063B6E:\n\ - movs r1, 0x80\n\ - lsls r1, 9\n\ - add r1, r9\n\ - lsrs r4, r1, 16\n\ - ldr r2, [sp, 0x4]\n\ - lsls r0, r2, 16\n\ - cmp r1, r0\n\ - bge _08063B80\n\ - b _08063A7E\n\ -_08063B80:\n\ - movs r0, 0\n\ -_08063B82:\n\ - add sp, 0x8\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\ -.syntax divided\n"); -} -#endif u8 GetReflectionTypeByMetatileBehavior(u32 behavior) { @@ -707,8 +514,6 @@ bool8 AreZCoordsCompatible(u8 a, u8 b) return TRUE; } -#define READ8(ptr, s, member) ((ptr)[offsetof(s, member)]) - void GroundEffect_SpawnOnTallGrass(struct MapObject *mapObj, struct Sprite *sprite) { u8 *ptr; @@ -721,8 +526,8 @@ void GroundEffect_SpawnOnTallGrass(struct MapObject *mapObj, struct Sprite *spri gUnknown_0202FF84[5] = mapObj->mapGroup; ptr = (u8 *)&gSaveBlock1; - gUnknown_0202FF84[6] = READ8(ptr, struct SaveBlock1, location.mapNum) << 8 - | READ8(ptr, struct SaveBlock1, location.mapGroup); + gUnknown_0202FF84[6] = ((u8)gSaveBlock1.location.mapNum << 8) + | (u8)gSaveBlock1.location.mapGroup; gUnknown_0202FF84[7] = 1; FieldEffectStart(4); @@ -740,8 +545,8 @@ void sub_8063E94(struct MapObject *mapObj, struct Sprite *sprite) gUnknown_0202FF84[5] = mapObj->mapGroup; ptr = (u8 *)&gSaveBlock1; - gUnknown_0202FF84[6] = READ8(ptr, struct SaveBlock1, location.mapNum) << 8 - | READ8(ptr, struct SaveBlock1, location.mapGroup); + gUnknown_0202FF84[6] = ((u8)gSaveBlock1.location.mapNum << 8) + | (u8)gSaveBlock1.location.mapGroup; gUnknown_0202FF84[7] = 0; FieldEffectStart(4); @@ -759,8 +564,8 @@ void sub_8063EE0(struct MapObject *mapObj, struct Sprite *sprite) gUnknown_0202FF84[5] = mapObj->mapGroup; ptr = (u8 *)&gSaveBlock1; - gUnknown_0202FF84[6] = READ8(ptr, struct SaveBlock1, location.mapNum) << 8 - | READ8(ptr, struct SaveBlock1, location.mapGroup); + gUnknown_0202FF84[6] = ((u8)gSaveBlock1.location.mapNum << 8) + | (u8)gSaveBlock1.location.mapGroup; gUnknown_0202FF84[7] = 1; FieldEffectStart(17); @@ -778,8 +583,8 @@ void sub_8063F2C(struct MapObject *mapObj, struct Sprite *sprite) gUnknown_0202FF84[5] = mapObj->mapGroup; ptr = (u8 *)&gSaveBlock1; - gUnknown_0202FF84[6] = READ8(ptr, struct SaveBlock1, location.mapNum) << 8 - | READ8(ptr, struct SaveBlock1, location.mapGroup); + gUnknown_0202FF84[6] = ((u8)gSaveBlock1.location.mapNum << 8) + | (u8)gSaveBlock1.location.mapGroup; gUnknown_0202FF84[7] = 0; FieldEffectStart(17); -- cgit v1.2.3 From 0c3a2fb275129567b23ef0ed520c04aece90079f Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sat, 26 Aug 2017 14:10:07 -0400 Subject: matching sub_80B4470 and nonmatching sub_80B3F88 and sub_80B403C --- include/shop.h | 10 +- src/shop.c | 446 ++++++++++++++++++--------------------------------------- 2 files changed, 148 insertions(+), 308 deletions(-) diff --git a/include/shop.h b/include/shop.h index 18d5cd94f..b785ca764 100644 --- a/include/shop.h +++ b/include/shop.h @@ -21,12 +21,12 @@ struct MartInfo { /* 0x0 */ void (* callback) (void); /* 0x4 */ u16 *itemList; - /* 0x8 */ u8 itemCount; + /* 0x8 */ u8 itemCount; // how many unique items are there for sale? /* 0x9 */ u8 cursor; // this shows the on-screen true index of the cursor and not the current item selected. - /* 0xA */ u8 numChoices; - /* 0xB */ u8 choicesAbove; - /* 0xC */ u8 martType; - /* 0xD */ u8 unkD; + /* 0xA */ u8 numChoices; // how many options does the mart have? can be either 2 or 1 (BUY/SELL vs BUY) + /* 0xB */ u8 choicesAbove; // when your cursor is far down, there are choices that have scrolled up past the top. this is the count of that. + /* 0xC */ u8 martType; // 0-2. 0 is normal mart while 1-2 seem to be decor shops or non-stackable purchases in general. + /* 0xD */ u8 curItemCount; // if you are selling an item, this is the count of the current item stack you have. }; void sub_80B2E38(u8); diff --git a/src/shop.c b/src/shop.c index e523f927c..30f23e10f 100644 --- a/src/shop.c +++ b/src/shop.c @@ -726,7 +726,7 @@ void sub_80B3D7C(u8 taskId) void sub_80B3DC8(u8 taskId) { - if (sub_80A52C4(taskId, gMartInfo.unkD) == TRUE) + if (sub_80A52C4(taskId, gMartInfo.curItemCount) == TRUE) sub_80B37F8(taskId); if (gMain.newKeys & A_BUTTON) @@ -759,14 +759,55 @@ void sub_80B3EFC(u8 taskId) var = gSaveBlock1.money / (ItemId_GetPrice(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]) >> GetPriceReduction(1)); if (var > 99) - gMartInfo.unkD = 99; + gMartInfo.curItemCount = 99; else - gMartInfo.unkD = var; + gMartInfo.curItemCount = var; gTasks[taskId].func = sub_80B3DC8; } -// the next two functions are strange gMenuWindow functions that manually acccess gMenuWindow.tilemap and do weird pointer arithmetic. i'd rather not deal with these right now. +#ifdef NONMATCHING +void sub_80B3F88(void) +{ + u16 *r1; + u16 *r2; + register u8 *r10 asm("r10"); + s32 i; + s32 j; + struct Window *r8 = &gMenuWindow; + + r1 = r8->tilemap; + r1 += 0x1EF; + r2 = r1; + r2 += 64; + r10 = r8->tileData; + + for (i = 0; i < 14; i++) + { + for (j = 0; j < 15; j++) + { + if ((r1[j] & 0x3FF) <= r8->tileDataStartOffset + 1) + r2[j] = r8->tileDataStartOffset + 1; + else + r2[j] = r1[j] + 0x3C; + } + + r1 -= 32; + r2 -= 32; + } + + { + u8 *r1 = r10 + 0x3A20; + u8 *r2 = r1 + 0x780; + for (i = 0; i < 14; i++) + { + DmaCopy16(3, r1, r2, 0x1E0); + r2 -= 0x3C0; + r1 -= 0x3C0; + } + } +} +#else __attribute__((naked)) void sub_80B3F88(void) { @@ -860,7 +901,52 @@ _080B4034: .4byte 0x800000f0\n\ _080B4038: .4byte 0xfffffc40\n\ .syntax divided"); } +#endif +#ifdef NONMATCHING +void sub_80B403C(void) +{ + u16 *r1; + u16 *r2; + u8 *r10; + s32 i; + s32 j; + struct Window *r8 = &gMenuWindow; + + r1 = r8->tilemap; + r1 += 0x4F; + r2 = r1; + r2 += 64; + r10 = r8->tileData; + + for (i = 0; i < 14; i++) + { + for (j = 0; j < 15; j++) + { + if ((r1[j] & 0x3FF) <= r8->tileDataStartOffset + 1) + r2[j] = r8->tileDataStartOffset + 1; + else + r2[j] = r1[j] + 0x3C; + } + + r1 += 32; + r2 += 32; + } + + { + register u8 *r1 asm("r1") = r10 + 0x960; + register u8 *r2 asm("r2") = r1; + + r1 += 0x780; + for (i = 0; i < 14; i++) + { + DmaCopy16(3, r1, r2, 0x1E0); + r1 += 0x3C0; + r2 += 0x3C0; + } + } +} +#else __attribute__((naked)) void sub_80B403C(void) { @@ -953,6 +1039,7 @@ _080B40E0: .4byte 0x040000d4\n\ _080B40E4: .4byte 0x800000f0\n\ .syntax divided"); } +#endif void sub_80B40E8(u8 taskId) // Mart_DoCursorAction { @@ -1095,22 +1182,21 @@ void Task_ExitBuyMenu(u8 taskId) } } -// in the for loop, the loop prologue is not correct and loads choicesabove + cursor immediately instead of setting up the gUnknown_02038724 struct. -#ifdef NONMATCHING void sub_80B4470(u8 taskId) { u16 i; for (i = 0; i < 3; i++) { - if (gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor] != gUnknown_02038724[i].itemId || gUnknown_02038724[i].quantity == 0) - continue; - - if (gTasks[taskId].data[1] + gUnknown_02038724[i].quantity > 255) - gUnknown_02038724[i].quantity = 255; - else - gUnknown_02038724[i].quantity += gTasks[taskId].data[1]; - return; + if (gUnknown_02038724[i].itemId == gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor] + && gUnknown_02038724[i].quantity != 0) + { + if (gUnknown_02038724[i].quantity + gTasks[taskId].data[1] > 255) + gUnknown_02038724[i].quantity = 255; + else + gUnknown_02038724[i].quantity += gTasks[taskId].data[1]; + return; + } } if (gUnknown_02038730 < 3) @@ -1120,112 +1206,6 @@ void sub_80B4470(u8 taskId) gUnknown_02038730++; } } -#else -__attribute__((naked)) -void sub_80B4470(u8 taskId) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r9\n\ - mov r6, r8\n\ - push {r6,r7}\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - movs r2, 0\n\ - ldr r0, _080B44C8 @ =gUnknown_02038724\n\ - mov r12, r0\n\ - ldr r6, _080B44CC @ =gMartInfo\n\ - mov r8, r12\n\ - adds r4, r6, 0\n\ - ldr r1, _080B44D0 @ =gTasks\n\ - mov r9, r1\n\ - lsls r0, r5, 2\n\ - adds r0, r5\n\ - lsls r7, r0, 3\n\ -_080B4492:\n\ - lsls r0, r2, 2\n\ - mov r1, r8\n\ - adds r3, r0, r1\n\ - ldrb r0, [r4, 0xB]\n\ - ldrb r1, [r4, 0x9]\n\ - adds r0, r1\n\ - ldr r1, [r4, 0x4]\n\ - lsls r0, 1\n\ - adds r0, r1\n\ - ldrh r1, [r3]\n\ - ldrh r0, [r0]\n\ - cmp r1, r0\n\ - bne _080B44DC\n\ - ldrh r0, [r3, 0x2]\n\ - cmp r0, 0\n\ - beq _080B44DC\n\ - adds r2, r0, 0\n\ - mov r4, r9\n\ - adds r1, r7, r4\n\ - movs r4, 0xA\n\ - ldrsh r0, [r1, r4]\n\ - adds r0, r2, r0\n\ - cmp r0, 0xFF\n\ - ble _080B44D4\n\ - movs r0, 0xFF\n\ - strh r0, [r3, 0x2]\n\ - b _080B451E\n\ - .align 2, 0\n\ -_080B44C8: .4byte gUnknown_02038724\n\ -_080B44CC: .4byte gMartInfo\n\ -_080B44D0: .4byte gTasks\n\ -_080B44D4:\n\ - ldrh r0, [r1, 0xA]\n\ - adds r0, r2, r0\n\ - strh r0, [r3, 0x2]\n\ - b _080B451E\n\ -_080B44DC:\n\ - adds r0, r2, 0x1\n\ - lsls r0, 16\n\ - lsrs r2, r0, 16\n\ - cmp r2, 0x2\n\ - bls _080B4492\n\ - ldr r3, _080B452C @ =gUnknown_02038730\n\ - ldrb r0, [r3]\n\ - cmp r0, 0x2\n\ - bhi _080B451E\n\ - adds r2, r0, 0\n\ - lsls r2, 2\n\ - add r2, r12\n\ - ldrb r0, [r6, 0xB]\n\ - ldrb r1, [r6, 0x9]\n\ - adds r0, r1\n\ - ldr r1, [r6, 0x4]\n\ - lsls r0, 1\n\ - adds r0, r1\n\ - ldrh r0, [r0]\n\ - strh r0, [r2]\n\ - ldrb r1, [r3]\n\ - lsls r1, 2\n\ - add r1, r12\n\ - ldr r2, _080B4530 @ =gTasks\n\ - lsls r0, r5, 2\n\ - adds r0, r5\n\ - lsls r0, 3\n\ - adds r0, r2\n\ - ldrh r0, [r0, 0xA]\n\ - strh r0, [r1, 0x2]\n\ - ldrb r0, [r3]\n\ - adds r0, 0x1\n\ - strb r0, [r3]\n\ -_080B451E:\n\ - pop {r3,r4}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080B452C: .4byte gUnknown_02038730\n\ -_080B4530: .4byte gTasks\n\ - .syntax divided"); -} -#endif void ClearItemPurchases(void) { @@ -1255,190 +1235,50 @@ void CreateDecorationShop2Menu(u16 *itemList) SetShopMenuCallback(EnableBothScriptContexts); } -// no. -__attribute__((naked)) -void sub_80B45B4(u8 taskId, const u16 *list, int var3) +void sub_80B45B4(u8 taskId, const s16 *list, u16 c) { - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x10\n\ - mov r9, r1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - lsls r2, 16\n\ - lsrs r2, 16\n\ - mov r10, r2\n\ - ldr r2, _080B4648 @ =gTasks\n\ - lsls r1, r0, 2\n\ - adds r1, r0\n\ - lsls r1, 3\n\ - adds r1, r2\n\ - ldrh r0, [r1, 0x10]\n\ - subs r0, 0x1\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - ldrh r0, [r1, 0x12]\n\ - subs r0, 0x1\n\ - lsls r0, 16\n\ - lsrs r3, r0, 16\n\ - ldrh r4, [r1, 0xA]\n\ - movs r2, 0xC\n\ - ldrsh r0, [r1, r2]\n\ - cmp r0, 0\n\ - bne _080B4678\n\ - movs r2, 0\n\ - lsls r5, 16\n\ - str r5, [sp, 0xC]\n\ - lsls r0, r3, 16\n\ - lsls r1, r4, 16\n\ - asrs r0, 16\n\ - str r0, [sp]\n\ - asrs r1, 16\n\ - str r1, [sp, 0x4]\n\ - lsls r0, r1, 1\n\ - mov r1, r9\n\ - adds r7, r0, r1\n\ -_080B4608:\n\ - movs r4, 0\n\ - lsls r2, 16\n\ - mov r8, r2\n\ - asrs r0, r2, 16\n\ - ldr r2, [sp]\n\ - adds r6, r2, r0\n\ -_080B4614:\n\ - ldr r0, [sp, 0xC]\n\ - asrs r1, r0, 16\n\ - lsls r4, 16\n\ - asrs r0, r4, 16\n\ - adds r5, r1, r0\n\ - adds r0, r5, 0\n\ - adds r1, r6, 0\n\ - bl MapGridGetMetatileIdAt\n\ - movs r2, 0\n\ - ldrsh r1, [r7, r2]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - cmp r1, r0\n\ - bne _080B465C\n\ - ldr r0, [sp, 0x4]\n\ - cmp r0, 0x2\n\ - beq _080B464C\n\ - ldrh r0, [r7, 0x2]\n\ - mov r2, r10\n\ - orrs r2, r0\n\ - adds r0, r5, 0\n\ - adds r1, r6, 0\n\ - bl MapGridSetMetatileIdAt\n\ - b _080B465C\n\ - .align 2, 0\n\ -_080B4648: .4byte gTasks\n\ -_080B464C:\n\ - mov r1, r9\n\ - ldrh r0, [r1]\n\ - mov r2, r10\n\ - orrs r2, r0\n\ - adds r0, r5, 0\n\ - adds r1, r6, 0\n\ - bl MapGridSetMetatileIdAt\n\ -_080B465C:\n\ - movs r2, 0x80\n\ - lsls r2, 9\n\ - adds r0, r4, r2\n\ - lsrs r4, r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x2\n\ - ble _080B4614\n\ - adds r0, r2, 0\n\ - add r0, r8\n\ - lsrs r2, r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x2\n\ - ble _080B4608\n\ - b _080B4700\n\ -_080B4678:\n\ - movs r2, 0\n\ - lsls r5, 16\n\ - str r5, [sp, 0xC]\n\ - lsls r0, r3, 16\n\ - lsls r1, r4, 16\n\ - asrs r0, 16\n\ - str r0, [sp, 0x8]\n\ - asrs r7, r1, 16\n\ -_080B4688:\n\ - movs r4, 0\n\ - lsls r2, 16\n\ - mov r8, r2\n\ - asrs r0, r2, 16\n\ - ldr r1, [sp, 0x8]\n\ - adds r6, r1, r0\n\ -_080B4694:\n\ - ldr r2, [sp, 0xC]\n\ - asrs r1, r2, 16\n\ - lsls r4, 16\n\ - asrs r0, r4, 16\n\ - adds r5, r1, r0\n\ - adds r0, r5, 0\n\ - adds r1, r6, 0\n\ - bl MapGridGetMetatileIdAt\n\ - movs r1, 0x2\n\ - subs r1, r7\n\ - lsls r1, 1\n\ - add r1, r9\n\ - movs r2, 0\n\ - ldrsh r1, [r1, r2]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - cmp r1, r0\n\ - bne _080B46E6\n\ - cmp r7, 0x2\n\ - beq _080B46D6\n\ - movs r0, 0x1\n\ - subs r0, r7\n\ - lsls r0, 1\n\ - add r0, r9\n\ - ldrh r0, [r0]\n\ - mov r2, r10\n\ - orrs r2, r0\n\ - adds r0, r5, 0\n\ - adds r1, r6, 0\n\ - bl MapGridSetMetatileIdAt\n\ - b _080B46E6\n\ -_080B46D6:\n\ - mov r1, r9\n\ - ldrh r0, [r1, 0x4]\n\ - mov r2, r10\n\ - orrs r2, r0\n\ - adds r0, r5, 0\n\ - adds r1, r6, 0\n\ - bl MapGridSetMetatileIdAt\n\ -_080B46E6:\n\ - movs r2, 0x80\n\ - lsls r2, 9\n\ - adds r0, r4, r2\n\ - lsrs r4, r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x2\n\ - ble _080B4694\n\ - adds r0, r2, 0\n\ - add r0, r8\n\ - lsrs r2, r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x2\n\ - ble _080B4688\n\ -_080B4700:\n\ - add sp, 0x10\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\ - .syntax divided"); + s16 r5 = gTasks[taskId].data[4] - 1; + s16 r3 = gTasks[taskId].data[5] - 1; + s16 r4 = gTasks[taskId].data[1]; + s16 y; + s16 x; + + if (gTasks[taskId].data[2] == 0) + { + for (y = 0; y < 3; y++) + { + for (x = 0; x < 3; x++) + { + s16 metatileId = MapGridGetMetatileIdAt(r5 + x, r3 + y); + + if (list[r4] == metatileId) + { + if (r4 != 2) + MapGridSetMetatileIdAt(r5 + x, r3 + y, c | list[r4 + 1]); + else + MapGridSetMetatileIdAt(r5 + x, r3 + y, c | list[0]); + } + } + } + } + else + { + for (y = 0; y < 3; y++) + { + for (x = 0; x < 3; x++) + { + s16 metatileId = MapGridGetMetatileIdAt(r5 + x, r3 + y); + + if (list[2 - r4] == metatileId) + { + if (r4 != 2) + MapGridSetMetatileIdAt(r5 + x, r3 + y, c | list[1 - r4]); + else + MapGridSetMetatileIdAt(r5 + x, r3 + y, c | list[2]); + } + } + } + } } void sub_80B4710(u8 taskId) -- cgit v1.2.3 From 989215ace2d94d9b11462c8db9e4acebc76ca5b1 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sat, 26 Aug 2017 14:20:10 -0400 Subject: get rid of memcpy --- src/shop.c | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/src/shop.c b/src/shop.c index 30f23e10f..8bca7adc9 100644 --- a/src/shop.c +++ b/src/shop.c @@ -78,15 +78,6 @@ static const struct YesNoFuncTable gUnknown_083CC708[] = sub_80B3D7C }; -static const u16 gUnknown_083CC710[] = {0x41EE, 0x7FFF}; -static const u16 gUnknown_083CC714[] = {0x284, 0x282, 0x280}; -static const u16 gUnknown_083CC71A[] = {0x285, 0x283, 0x281}; -static const u16 gUnknown_083CC720[] = {0x28C, 0x28A, 0x288}; -static const u16 gUnknown_083CC726[] = {0x28D, 0x28B, 0x289}; -static const u16 gUnknown_083CC72C[] = {0x2A0, 0x2A2, 0x2A4}; -static const u16 gUnknown_083CC732[] = {0x2A1, 0x2A3, 0x2A5}; -static const u16 gUnknown_083CC738[] = {0x2A8, 0x2AA, 0x2AC}; - u8 CreateShopMenu(u8 martType) { ScriptContext2_Enable(); @@ -319,9 +310,8 @@ void BuyMenuDrawGraphics(void) void sub_80B3240(void) { - u16 tempArr[2]; + u16 tempArr[2] = {0x41EE, 0x7FFF}; - memcpy(tempArr, gUnknown_083CC710, sizeof(tempArr)); LoadPalette(&tempArr[1], 0xD1, 2); LoadPalette(&tempArr[0], 0xD8, 2); } @@ -629,15 +619,15 @@ void sub_80B3A70(void) if (gMartInfo.martType == MART_TYPE_0) { sub_8072AB0(ItemId_GetDescription(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]), - 0x4, 0x68, 0x68, 0x30, MART_TYPE_0); + 0x4, 0x68, 0x68, 0x30, 0); } else sub_8072AB0(gDecorations[gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]].description, - 0x4, 0x68, 0x68, 0x30, MART_TYPE_0); // huh?? if mart type isnt 0, why assume it? + 0x4, 0x68, 0x68, 0x30, 0); } else { - sub_8072AB0(gOtherText_QuitShopping, 0x4, 0x68, 0x68, 0x30, MART_TYPE_0); + sub_8072AB0(gOtherText_QuitShopping, 0x4, 0x68, 0x68, 0x30, 0); } } @@ -1281,6 +1271,14 @@ void sub_80B45B4(u8 taskId, const s16 *list, u16 c) } } +static const u16 gUnknown_083CC714[] = {0x284, 0x282, 0x280}; +static const u16 gUnknown_083CC71A[] = {0x285, 0x283, 0x281}; +static const u16 gUnknown_083CC720[] = {0x28C, 0x28A, 0x288}; +static const u16 gUnknown_083CC726[] = {0x28D, 0x28B, 0x289}; +static const u16 gUnknown_083CC72C[] = {0x2A0, 0x2A2, 0x2A4}; +static const u16 gUnknown_083CC732[] = {0x2A1, 0x2A3, 0x2A5}; +static const u16 gUnknown_083CC738[] = {0x2A8, 0x2AA, 0x2AC}; + void sub_80B4710(u8 taskId) { s16 *data = gTasks[taskId].data; -- cgit v1.2.3 From a2087a9caf534be0889cf54a8202f3a88ccc09ea Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sat, 26 Aug 2017 14:23:43 -0400 Subject: use PlaySE constants --- src/shop.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/shop.c b/src/shop.c index 8bca7adc9..fa9d8c30d 100644 --- a/src/shop.c +++ b/src/shop.c @@ -128,7 +128,7 @@ void sub_80B2E38(u8 var) { if (gMartInfo.cursor) // can move cursor up? { - PlaySE(0x5); + PlaySE(SE_SELECT); gMartInfo.cursor = MoveMenuCursor(-1); } } @@ -136,13 +136,13 @@ void sub_80B2E38(u8 var) { if (gMartInfo.cursor != gMartInfo.numChoices) // can move cursor down? { - PlaySE(0x5); + PlaySE(SE_SELECT); gMartInfo.cursor = MoveMenuCursor(1); } } else if (gMain.newKeys & A_BUTTON) { - PlaySE(0x5); + PlaySE(SE_SELECT); if (gMartInfo.martType == MART_TYPE_0) { gUnknown_083CC6D0[gUnknown_083CC6E8[gMartInfo.cursor]].func(local); @@ -154,7 +154,7 @@ void sub_80B2E38(u8 var) } else if (gMain.newKeys & B_BUTTON) { - PlaySE(0x5); + PlaySE(SE_SELECT); HandleShopMenuQuit(local); } } @@ -649,7 +649,7 @@ void sub_80B3B80(u8 taskId) { IncrementGameStat(0x26); sub_80B79E0(&gSaveBlock1.money, gMartTotalCost); - PlaySE(0x5F); + PlaySE(SE_REGI); sub_80B7BEC(gSaveBlock1.money, 0, 0); gTasks[taskId].func = sub_80B3AEC; } -- cgit v1.2.3 From 6f360947a67c4fb8c0b32b07dc74bb28ff0f08a0 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sat, 26 Aug 2017 14:27:10 -0400 Subject: correct itemId access --- src/shop.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shop.c b/src/shop.c index fa9d8c30d..6a88f1394 100644 --- a/src/shop.c +++ b/src/shop.c @@ -527,7 +527,7 @@ void sub_80B37EC(void) void sub_80B37F8(u8 taskId) { u16 itemListIndex = gMartInfo.choicesAbove + gMartInfo.cursor; - u16 itemId = *(gMartInfo.itemList + itemListIndex); + u16 itemId = gMartInfo.itemList[itemListIndex]; u32 price = (ItemId_GetPrice(itemId) >> GetPriceReduction(1)); sub_80B7A94(gTasks[taskId].data[1] * price, 6, 6, 11); -- cgit v1.2.3 From 1a33ca381de71bb3b4b250a2f3b41b0c15ed5f21 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 26 Aug 2017 14:18:30 -0500 Subject: end common_syms files with newline --- common_syms/berry_blender.txt | 2 +- common_syms/pokeblock_feed.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/common_syms/berry_blender.txt b/common_syms/berry_blender.txt index 36d14f986..524a31411 100644 --- a/common_syms/berry_blender.txt +++ b/common_syms/berry_blender.txt @@ -1,4 +1,4 @@ gUnknown_03004830 gInGameOpponentsNo gUnknown_03004840 -gBerryBlenderData \ No newline at end of file +gBerryBlenderData diff --git a/common_syms/pokeblock_feed.txt b/common_syms/pokeblock_feed.txt index b4c1e0982..827e6526e 100644 --- a/common_syms/pokeblock_feed.txt +++ b/common_syms/pokeblock_feed.txt @@ -9,4 +9,4 @@ gUnknown_03005F3C gUnknown_03005F40 gPokeblockFeedPokeSpriteCopy gUnknown_03005F94 -gUnknown_03005FA0 \ No newline at end of file +gUnknown_03005FA0 -- cgit v1.2.3 From a458401c7050834326e98cf739ff29fed461d542 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 27 Aug 2017 00:27:12 +0200 Subject: start working on evo scene --- asm/evolution_scene.s | 1280 +----------------------------------------- include/evolution_graphics.h | 6 +- include/trade.h | 18 + ld_script.txt | 1 + shared_syms.txt | 2 + src/evolution_graphics.c | 9 +- src/evolution_scene.c | 800 ++++++++++++++++++++++++++ 7 files changed, 834 insertions(+), 1282 deletions(-) create mode 100644 include/trade.h create mode 100644 src/evolution_scene.c diff --git a/asm/evolution_scene.s b/asm/evolution_scene.s index 54011fb4e..fd0b5cbd9 100644 --- a/asm/evolution_scene.s +++ b/asm/evolution_scene.s @@ -6,1279 +6,7 @@ .text - thumb_func_start CB2_BeginEvolutionScene -CB2_BeginEvolutionScene: @ 8111894 - push {lr} - bl UpdatePaletteFade - bl RunTasks - pop {r0} - bx r0 - thumb_func_end CB2_BeginEvolutionScene - - thumb_func_start Task_BeginEvolutionScene -Task_BeginEvolutionScene: @ 81118A4 - push {r4-r7,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r2, r0, 24 - movs r7, 0 - ldr r1, _081118C8 @ =gTasks - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _081118CC - cmp r0, 0x1 - beq _081118E4 - b _08111918 - .align 2, 0 -_081118C8: .4byte gTasks -_081118CC: - movs r0, 0x1 - negs r0, r0 - str r7, [sp] - movs r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _08111918 -_081118E4: - ldr r0, _08111920 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08111918 - movs r0, 0xA - ldrsh r7, [r4, r0] - movs r1, 0xC - ldrsh r0, [r4, r1] - lsls r0, 16 - orrs r7, r0 - ldrh r5, [r4, 0x10] - ldrb r6, [r4, 0x12] - ldrh r4, [r4, 0x20] - lsls r4, 24 - lsrs r4, 24 - adds r0, r2, 0 - bl DestroyTask - adds r0, r7, 0 - adds r1, r5, 0 - adds r2, r6, 0 - adds r3, r4, 0 - bl EvolutionScene -_08111918: - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08111920: .4byte gPaletteFade - thumb_func_end Task_BeginEvolutionScene - - thumb_func_start BeginEvolutionScene -BeginEvolutionScene: @ 8111924 - push {r4-r6,lr} - mov r6, r8 - push {r6} - mov r8, r0 - adds r4, r1, 0 - adds r5, r2, 0 - adds r6, r3, 0 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 24 - lsrs r5, 24 - lsls r6, 24 - lsrs r6, 24 - ldr r0, _08111978 @ =Task_BeginEvolutionScene - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0811197C @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r0, 0 - strh r0, [r1, 0x8] - mov r0, r8 - strh r0, [r1, 0xA] - mov r0, r8 - lsrs r0, 16 - strh r0, [r1, 0xC] - strh r4, [r1, 0x10] - strh r5, [r1, 0x12] - strh r6, [r1, 0x20] - ldr r0, _08111980 @ =CB2_BeginEvolutionScene - bl SetMainCallback2 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08111978: .4byte Task_BeginEvolutionScene -_0811197C: .4byte gTasks -_08111980: .4byte CB2_BeginEvolutionScene - thumb_func_end BeginEvolutionScene - - thumb_func_start EvolutionScene -EvolutionScene: @ 8111984 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x38 - str r0, [sp, 0x20] - mov r10, r1 - mov r0, r10 - lsls r0, 16 - lsrs r0, 16 - mov r10, r0 - lsls r2, 24 - lsrs r2, 24 - str r2, [sp, 0x24] - lsls r3, 24 - lsrs r3, 24 - str r3, [sp, 0x28] - movs r0, 0 - bl SetHBlankCallback - movs r0, 0 - bl SetVBlankCallback - movs r5, 0 - str r5, [sp, 0x1C] - add r0, sp, 0x1C - movs r1, 0xC0 - lsls r1, 19 - ldr r2, _08111C10 @ =0x05006000 - bl CpuSet - ldr r0, _08111C14 @ =REG_MOSAIC - strh r5, [r0] - subs r0, 0xC - strh r5, [r0] - adds r0, 0x4 - strh r5, [r0] - subs r0, 0x2 - strh r5, [r0] - adds r0, 0x4 - strh r5, [r0] - adds r0, 0x2 - strh r5, [r0] - adds r0, 0x2 - strh r5, [r0] - ldr r4, _08111C18 @ =gWindowConfig_81E6C58 - adds r0, r4, 0 - bl SetUpWindowConfig - bl ResetPaletteFade - ldr r0, _08111C1C @ =gUnknown_030042A4 - strh r5, [r0] - ldr r0, _08111C20 @ =gUnknown_030042A0 - strh r5, [r0] - ldr r0, _08111C24 @ =gUnknown_030042C0 - strh r5, [r0] - ldr r0, _08111C28 @ =gUnknown_030041B4 - strh r5, [r0] - ldr r0, _08111C2C @ =gUnknown_03004288 - strh r5, [r0] - ldr r0, _08111C30 @ =gUnknown_03004280 - strh r5, [r0] - ldr r1, _08111C34 @ =gUnknown_030041B0 - movs r2, 0x80 - lsls r2, 1 - adds r0, r2, 0 - strh r0, [r1] - ldr r0, _08111C38 @ =gUnknown_030041B8 - strh r5, [r0] - ldr r0, _08111C3C @ =gUnknown_03004210 - adds r1, r4, 0 - bl InitWindowFromConfig - ldr r1, _08111C40 @ =gBattleTerrain - movs r0, 0x9 - strb r0, [r1] - bl sub_800D6D4 - bl sub_800DAB8 - bl ResetSpriteData - bl remove_some_task - bl ResetTasks - bl FreeAllSpritePalettes - ldr r0, _08111C44 @ =gReservedSpritePaletteCount - movs r3, 0x4 - strb r3, [r0] - ldr r0, [sp, 0x20] - movs r1, 0x2 - add r2, sp, 0x8 - bl GetMonData - ldr r0, _08111C48 @ =gStringVar1 - add r1, sp, 0x8 - bl StringCopy10 - ldr r0, _08111C4C @ =gStringVar2 - movs r1, 0xB - mov r4, r10 - muls r4, r1 - adds r1, r4, 0 - ldr r2, _08111C50 @ =gSpeciesNames - adds r1, r2 - bl StringCopy - ldr r0, [sp, 0x20] - movs r1, 0xB - bl GetMonData - adds r6, r0, 0 - lsls r6, 16 - lsrs r6, 16 - ldr r0, [sp, 0x20] - movs r1, 0x1 - bl GetMonData - str r0, [sp, 0x2C] - ldr r0, [sp, 0x20] - movs r1, 0 - bl GetMonData - str r0, [sp, 0x30] - lsls r0, r6, 3 - ldr r1, _08111C54 @ =gMonFrontPicTable - adds r0, r1 - lsls r2, r6, 2 - ldr r3, _08111C58 @ =gMonFrontPicCoords - adds r2, r3 - ldrb r1, [r2] - ldrb r2, [r2, 0x1] - ldr r4, _08111C5C @ =gUnknown_081FAF4C - ldr r3, [r4, 0x4] - str r3, [sp] - str r6, [sp, 0x4] - movs r3, 0x80 - lsls r3, 18 - bl DecompressPicFromTable_2 - adds r0, r6, 0 - ldr r1, [sp, 0x2C] - ldr r2, [sp, 0x30] - bl sub_80409C8 - ldr r0, [r0] - movs r1, 0x88 - lsls r1, 1 - movs r2, 0x20 - bl LoadCompressedPalette - adds r0, r6, 0 - movs r1, 0x1 - bl GetMonSpriteTemplate_803C56C - ldr r0, _08111C60 @ =gUnknown_02024E8C - mov r9, r0 - ldr r1, _08111C64 @ =gDummySpriteAffineAnimTable - str r1, [r0, 0x10] - movs r1, 0x78 - movs r2, 0x40 - movs r3, 0x1E - bl CreateSprite - lsls r1, r0, 24 - lsrs r2, r1, 24 - ldr r3, _08111C68 @ =0x02014800 - strb r0, [r3] - ldr r7, _08111C6C @ =gSprites - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - movs r4, 0x1C - adds r4, r7 - mov r8, r4 - adds r0, r1, r4 - ldr r2, _08111C70 @ =nullsub_37 - str r2, [r0] - adds r1, r7 - ldrb r2, [r1, 0x5] - movs r4, 0xF - adds r0, r4, 0 - ands r0, r2 - movs r2, 0x10 - orrs r0, r2 - strb r0, [r1, 0x5] - adds r1, 0x3E - ldrb r0, [r1] - movs r3, 0x4 - orrs r0, r3 - strb r0, [r1] - mov r1, r10 - lsls r0, r1, 3 - ldr r2, _08111C54 @ =gMonFrontPicTable - adds r0, r2 - lsls r2, r1, 2 - ldr r3, _08111C58 @ =gMonFrontPicCoords - adds r2, r3 - ldrb r1, [r2] - ldrb r2, [r2, 0x1] - str r2, [sp, 0x34] - ldr r2, _08111C5C @ =gUnknown_081FAF4C - ldr r2, [r2, 0xC] - str r2, [sp] - mov r3, r10 - str r3, [sp, 0x4] - ldr r2, [sp, 0x34] - movs r3, 0x80 - lsls r3, 18 - bl DecompressPicFromTable_2 - mov r0, r10 - ldr r1, [sp, 0x2C] - ldr r2, [sp, 0x30] - bl sub_80409C8 - ldr r0, [r0] - movs r1, 0x90 - lsls r1, 1 - movs r2, 0x20 - bl LoadCompressedPalette - mov r0, r10 - movs r1, 0x3 - bl GetMonSpriteTemplate_803C56C - ldr r0, _08111C64 @ =gDummySpriteAffineAnimTable - mov r1, r9 - str r0, [r1, 0x10] - mov r0, r9 - movs r1, 0x78 - movs r2, 0x40 - movs r3, 0x1E - bl CreateSprite - lsls r1, r0, 24 - lsrs r2, r1, 24 - ldr r3, _08111C68 @ =0x02014800 - strb r0, [r3, 0x1] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - add r8, r1 - ldr r0, _08111C70 @ =nullsub_37 - mov r2, r8 - str r0, [r2] - adds r1, r7 - ldrb r0, [r1, 0x5] - ands r4, r0 - movs r0, 0x20 - orrs r4, r0 - strb r4, [r1, 0x5] - adds r1, 0x3E - ldrb r0, [r1] - movs r3, 0x4 - orrs r0, r3 - strb r0, [r1] - bl LoadEvoSparkleSpriteAndPal - ldr r0, _08111C74 @ =Task_EvolutionScene - movs r1, 0 - bl CreateTask - lsls r1, r0, 24 - lsrs r2, r1, 24 - ldr r4, _08111C68 @ =0x02014800 - strb r0, [r4, 0x2] - ldr r1, _08111C78 @ =gTasks - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r0, r1 - strh r5, [r0, 0x8] - strh r6, [r0, 0xE] - mov r1, r10 - strh r1, [r0, 0x10] - mov r2, sp - ldrh r2, [r2, 0x20] - strh r2, [r0, 0xA] - ldr r3, [sp, 0x20] - lsrs r1, r3, 16 - strh r1, [r0, 0xC] - mov r4, sp - ldrh r4, [r4, 0x24] - strh r4, [r0, 0x12] - movs r1, 0x1 - strh r1, [r0, 0x14] - strh r5, [r0, 0x1E] - mov r1, sp - ldrh r1, [r1, 0x28] - strh r1, [r0, 0x20] - ldr r0, _08111C7C @ =0x02009000 - ldr r1, _08111C80 @ =gPlttBufferUnfaded + 0x40 - movs r2, 0x60 - bl memcpy - movs r1, 0x80 - lsls r1, 19 - movs r2, 0xFA - lsls r2, 5 - adds r0, r2, 0 - strh r0, [r1] - ldr r0, _08111C84 @ =HBlankCB_EvolutionScene - bl SetHBlankCallback - ldr r0, _08111C88 @ =VBlankCB_EvolutionScene - bl SetVBlankCallback - bl m4aMPlayAllStop - ldr r0, _08111C8C @ =CB2_EvolutionSceneUpdate_0 - bl SetMainCallback2 - add sp, 0x38 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08111C10: .4byte 0x05006000 -_08111C14: .4byte REG_MOSAIC -_08111C18: .4byte gWindowConfig_81E6C58 -_08111C1C: .4byte gUnknown_030042A4 -_08111C20: .4byte gUnknown_030042A0 -_08111C24: .4byte gUnknown_030042C0 -_08111C28: .4byte gUnknown_030041B4 -_08111C2C: .4byte gUnknown_03004288 -_08111C30: .4byte gUnknown_03004280 -_08111C34: .4byte gUnknown_030041B0 -_08111C38: .4byte gUnknown_030041B8 -_08111C3C: .4byte gUnknown_03004210 -_08111C40: .4byte gBattleTerrain -_08111C44: .4byte gReservedSpritePaletteCount -_08111C48: .4byte gStringVar1 -_08111C4C: .4byte gStringVar2 -_08111C50: .4byte gSpeciesNames -_08111C54: .4byte gMonFrontPicTable -_08111C58: .4byte gMonFrontPicCoords -_08111C5C: .4byte gUnknown_081FAF4C -_08111C60: .4byte gUnknown_02024E8C -_08111C64: .4byte gDummySpriteAffineAnimTable -_08111C68: .4byte 0x02014800 -_08111C6C: .4byte gSprites -_08111C70: .4byte nullsub_37 -_08111C74: .4byte Task_EvolutionScene -_08111C78: .4byte gTasks -_08111C7C: .4byte 0x02009000 -_08111C80: .4byte gPlttBufferUnfaded + 0x40 -_08111C84: .4byte HBlankCB_EvolutionScene -_08111C88: .4byte VBlankCB_EvolutionScene -_08111C8C: .4byte CB2_EvolutionSceneUpdate_0 - thumb_func_end EvolutionScene - - thumb_func_start CB2_EvolutionSceneLoadGraphics -CB2_EvolutionSceneLoadGraphics: @ 8111C90 - push {r4-r6,lr} - mov r6, r10 - mov r5, r9 - mov r4, r8 - push {r4-r6} - sub sp, 0xC - ldr r2, _08111E14 @ =gTasks - ldr r0, _08111E18 @ =0x02014800 - mov r9, r0 - ldrb r1, [r0, 0x2] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - movs r1, 0x20 - ldrsh r2, [r0, r1] - movs r1, 0x64 - adds r4, r2, 0 - muls r4, r1 - ldr r1, _08111E1C @ =gPlayerParty - adds r4, r1 - ldrh r6, [r0, 0x10] - adds r0, r4, 0 - movs r1, 0x1 - bl GetMonData - mov r10, r0 - adds r0, r4, 0 - movs r1, 0 - bl GetMonData - mov r8, r0 - movs r0, 0 - bl SetHBlankCallback - movs r0, 0 - bl SetVBlankCallback - movs r5, 0 - str r5, [sp, 0x8] - movs r1, 0xC0 - lsls r1, 19 - ldr r2, _08111E20 @ =0x05006000 - add r0, sp, 0x8 - bl CpuSet - ldr r0, _08111E24 @ =REG_MOSAIC - strh r5, [r0] - subs r0, 0xC - strh r5, [r0] - adds r0, 0x4 - strh r5, [r0] - subs r0, 0x2 - strh r5, [r0] - adds r0, 0x4 - strh r5, [r0] - adds r0, 0x2 - strh r5, [r0] - adds r0, 0x2 - strh r5, [r0] - ldr r4, _08111E28 @ =gWindowConfig_81E6C58 - adds r0, r4, 0 - bl SetUpWindowConfig - bl ResetPaletteFade - ldr r0, _08111E2C @ =gUnknown_030042A4 - strh r5, [r0] - ldr r0, _08111E30 @ =gUnknown_030042A0 - strh r5, [r0] - ldr r0, _08111E34 @ =gUnknown_030042C0 - strh r5, [r0] - ldr r0, _08111E38 @ =gUnknown_030041B4 - strh r5, [r0] - ldr r0, _08111E3C @ =gUnknown_03004288 - strh r5, [r0] - ldr r0, _08111E40 @ =gUnknown_03004280 - strh r5, [r0] - ldr r1, _08111E44 @ =gUnknown_030041B0 - movs r2, 0x80 - lsls r2, 1 - adds r0, r2, 0 - strh r0, [r1] - ldr r0, _08111E48 @ =gUnknown_030041B8 - strh r5, [r0] - ldr r0, _08111E4C @ =gUnknown_03004210 - adds r1, r4, 0 - bl InitWindowFromConfig - ldr r1, _08111E50 @ =gBattleTerrain - movs r0, 0x9 - strb r0, [r1] - bl sub_800D6D4 - bl sub_800DAB8 - bl ResetSpriteData - bl FreeAllSpritePalettes - ldr r1, _08111E54 @ =gReservedSpritePaletteCount - movs r0, 0x4 - strb r0, [r1] - lsls r0, r6, 3 - ldr r1, _08111E58 @ =gMonFrontPicTable - adds r0, r1 - ldr r1, _08111E5C @ =gMonFrontPicCoords - lsls r2, r6, 2 - adds r2, r1 - ldrb r1, [r2] - ldrb r2, [r2, 0x1] - movs r3, 0x80 - lsls r3, 18 - ldr r4, _08111E60 @ =gUnknown_081FAF4C - ldr r4, [r4, 0xC] - str r4, [sp] - str r6, [sp, 0x4] - bl DecompressPicFromTable_2 - adds r0, r6, 0 - mov r1, r10 - mov r2, r8 - bl sub_80409C8 - ldr r0, [r0] - movs r1, 0x90 - lsls r1, 1 - movs r2, 0x20 - bl LoadCompressedPalette - adds r0, r6, 0 - movs r1, 0x3 - bl GetMonSpriteTemplate_803C56C - ldr r0, _08111E64 @ =gUnknown_02024E8C - ldr r1, _08111E68 @ =gDummySpriteAffineAnimTable - str r1, [r0, 0x10] - movs r1, 0x78 - movs r2, 0x40 - movs r3, 0x1E - bl CreateSprite - lsls r2, r0, 24 - lsrs r2, 24 - mov r1, r9 - strb r0, [r1, 0x1] - ldr r3, _08111E6C @ =gSprites - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r0, r3, 0 - adds r0, 0x1C - adds r0, r1, r0 - ldr r2, _08111E70 @ =nullsub_37 - str r2, [r0] - adds r1, r3 - ldrb r2, [r1, 0x5] - movs r0, 0xF - ands r0, r2 - movs r2, 0x20 - orrs r0, r2 - strb r0, [r1, 0x5] - movs r1, 0x80 - lsls r1, 19 - movs r2, 0xFA - lsls r2, 5 - adds r0, r2, 0 - strh r0, [r1] - ldr r0, _08111E74 @ =HBlankCB_EvolutionScene - bl SetHBlankCallback - ldr r0, _08111E78 @ =VBlankCB_EvolutionScene - bl SetVBlankCallback - ldr r0, _08111E7C @ =CB2_EvolutionSceneUpdate_0 - bl SetMainCallback2 - movs r0, 0x1 - negs r0, r0 - str r5, [sp] - movs r1, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08111E14: .4byte gTasks -_08111E18: .4byte 0x02014800 -_08111E1C: .4byte gPlayerParty -_08111E20: .4byte 0x05006000 -_08111E24: .4byte REG_MOSAIC -_08111E28: .4byte gWindowConfig_81E6C58 -_08111E2C: .4byte gUnknown_030042A4 -_08111E30: .4byte gUnknown_030042A0 -_08111E34: .4byte gUnknown_030042C0 -_08111E38: .4byte gUnknown_030041B4 -_08111E3C: .4byte gUnknown_03004288 -_08111E40: .4byte gUnknown_03004280 -_08111E44: .4byte gUnknown_030041B0 -_08111E48: .4byte gUnknown_030041B8 -_08111E4C: .4byte gUnknown_03004210 -_08111E50: .4byte gBattleTerrain -_08111E54: .4byte gReservedSpritePaletteCount -_08111E58: .4byte gMonFrontPicTable -_08111E5C: .4byte gMonFrontPicCoords -_08111E60: .4byte gUnknown_081FAF4C -_08111E64: .4byte gUnknown_02024E8C -_08111E68: .4byte gDummySpriteAffineAnimTable -_08111E6C: .4byte gSprites -_08111E70: .4byte nullsub_37 -_08111E74: .4byte HBlankCB_EvolutionScene -_08111E78: .4byte VBlankCB_EvolutionScene -_08111E7C: .4byte CB2_EvolutionSceneUpdate_0 - thumb_func_end CB2_EvolutionSceneLoadGraphics - - thumb_func_start CB2_TradeEvolutionSceneLoadGraphics -CB2_TradeEvolutionSceneLoadGraphics: @ 8111E80 - push {r4-r7,lr} - sub sp, 0x8 - ldr r2, _08111EB8 @ =gTasks - ldr r0, _08111EBC @ =0x02014800 - ldrb r1, [r0, 0x2] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - movs r1, 0x20 - ldrsh r2, [r0, r1] - movs r1, 0x64 - muls r2, r1 - ldr r1, _08111EC0 @ =gPlayerParty - adds r4, r2, r1 - ldrh r7, [r0, 0x10] - ldr r0, _08111EC4 @ =gMain - ldr r2, _08111EC8 @ =0x0000043c - adds r0, r2 - ldrb r0, [r0] - cmp r0, 0x6 - bls _08111EAE - b _081120D6 -_08111EAE: - lsls r0, 2 - ldr r1, _08111ECC @ =_08111ED0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08111EB8: .4byte gTasks -_08111EBC: .4byte 0x02014800 -_08111EC0: .4byte gPlayerParty -_08111EC4: .4byte gMain -_08111EC8: .4byte 0x0000043c -_08111ECC: .4byte _08111ED0 - .align 2, 0 -_08111ED0: - .4byte _08111EEC - .4byte _08111F68 - .4byte _08111F88 - .4byte _08111FDC - .4byte _08111FE2 - .4byte _08112048 - .4byte _081120B4 -_08111EEC: - movs r0, 0x80 - lsls r0, 19 - movs r4, 0 - strh r4, [r0] - movs r0, 0 - bl SetHBlankCallback - movs r0, 0 - bl SetVBlankCallback - bl ResetSpriteData - bl FreeAllSpritePalettes - ldr r1, _08111F3C @ =gReservedSpritePaletteCount - movs r0, 0x4 - strb r0, [r1] - ldr r0, _08111F40 @ =gUnknown_030042A4 - strh r4, [r0] - ldr r0, _08111F44 @ =gUnknown_030042A0 - strh r4, [r0] - ldr r0, _08111F48 @ =gUnknown_030042C0 - strh r4, [r0] - ldr r0, _08111F4C @ =gUnknown_030041B4 - strh r4, [r0] - ldr r0, _08111F50 @ =gUnknown_03004288 - strh r4, [r0] - ldr r0, _08111F54 @ =gUnknown_03004280 - strh r4, [r0] - ldr r1, _08111F58 @ =gUnknown_030041B0 - movs r2, 0x80 - lsls r2, 1 - adds r0, r2, 0 - strh r0, [r1] - ldr r0, _08111F5C @ =gUnknown_030041B8 - strh r4, [r0] - ldr r1, _08111F60 @ =gMain - ldr r0, _08111F64 @ =0x0000043c - adds r1, r0 - b _0811208E - .align 2, 0 -_08111F3C: .4byte gReservedSpritePaletteCount -_08111F40: .4byte gUnknown_030042A4 -_08111F44: .4byte gUnknown_030042A0 -_08111F48: .4byte gUnknown_030042C0 -_08111F4C: .4byte gUnknown_030041B4 -_08111F50: .4byte gUnknown_03004288 -_08111F54: .4byte gUnknown_03004280 -_08111F58: .4byte gUnknown_030041B0 -_08111F5C: .4byte gUnknown_030041B8 -_08111F60: .4byte gMain -_08111F64: .4byte 0x0000043c -_08111F68: - ldr r4, _08111F80 @ =gWindowConfig_81E6F84 - adds r0, r4, 0 - bl SetUpWindowConfig - ldr r0, _08111F84 @ =gUnknown_03004828 - ldr r0, [r0] - adds r0, 0x4 - adds r1, r4, 0 - bl InitWindowFromConfig - b _08112088 - .align 2, 0 -_08111F80: .4byte gWindowConfig_81E6F84 -_08111F84: .4byte gUnknown_03004828 -_08111F88: - ldr r4, _08111FC8 @ =gUnknown_03004828 - ldr r0, [r4] - adds r0, 0x4 - bl LoadTextWindowGraphics - movs r0, 0x2 - bl SetTextWindowBaseTileNum - ldr r1, [r4] - adds r1, 0x34 - strb r0, [r1] - ldr r0, [r4] - adds r0, 0x4 - bl LoadTextWindowGraphics - bl MenuZeroFillScreen - bl ResetPaletteFade - ldr r1, _08111FCC @ =gMain - ldr r0, _08111FD0 @ =0x0000043c - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - ldr r0, _08111FD4 @ =HBlankCB_EvolutionScene - bl SetHBlankCallback - ldr r0, _08111FD8 @ =VBlankCB_TradeEvolutionScene - bl SetVBlankCallback - b _081120D6 - .align 2, 0 -_08111FC8: .4byte gUnknown_03004828 -_08111FCC: .4byte gMain -_08111FD0: .4byte 0x0000043c -_08111FD4: .4byte HBlankCB_EvolutionScene -_08111FD8: .4byte VBlankCB_TradeEvolutionScene -_08111FDC: - bl sub_804E22C - b _08112088 -_08111FE2: - adds r0, r4, 0 - movs r1, 0x1 - bl GetMonData - adds r6, r0, 0 - adds r0, r4, 0 - movs r1, 0 - bl GetMonData - adds r5, r0, 0 - lsls r0, r7, 3 - ldr r1, _08112034 @ =gMonFrontPicTable - adds r0, r1 - ldr r1, _08112038 @ =gMonFrontPicCoords - lsls r2, r7, 2 - adds r2, r1 - ldrb r1, [r2] - ldrb r2, [r2, 0x1] - movs r3, 0x80 - lsls r3, 18 - ldr r4, _0811203C @ =gUnknown_081FAF4C - ldr r4, [r4, 0xC] - str r4, [sp] - str r7, [sp, 0x4] - bl DecompressPicFromTable_2 - adds r0, r7, 0 - adds r1, r6, 0 - adds r2, r5, 0 - bl sub_80409C8 - ldr r0, [r0] - movs r1, 0x90 - lsls r1, 1 - movs r2, 0x20 - bl LoadCompressedPalette - ldr r1, _08112040 @ =gMain - ldr r0, _08112044 @ =0x0000043c - adds r1, r0 - b _0811208E - .align 2, 0 -_08112034: .4byte gMonFrontPicTable -_08112038: .4byte gMonFrontPicCoords -_0811203C: .4byte gUnknown_081FAF4C -_08112040: .4byte gMain -_08112044: .4byte 0x0000043c -_08112048: - adds r0, r7, 0 - movs r1, 0x3 - bl GetMonSpriteTemplate_803C56C - ldr r0, _08112098 @ =gUnknown_02024E8C - ldr r1, _0811209C @ =gDummySpriteAffineAnimTable - str r1, [r0, 0x10] - movs r1, 0x78 - movs r2, 0x40 - movs r3, 0x1E - bl CreateSprite - ldr r1, _081120A0 @ =0x02014800 - lsls r2, r0, 24 - lsrs r2, 24 - strb r0, [r1, 0x1] - ldr r3, _081120A4 @ =gSprites - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r0, r3, 0 - adds r0, 0x1C - adds r0, r1, r0 - ldr r2, _081120A8 @ =nullsub_37 - str r2, [r0] - adds r1, r3 - ldrb r2, [r1, 0x5] - movs r0, 0xF - ands r0, r2 - movs r2, 0x20 - orrs r0, r2 - strb r0, [r1, 0x5] -_08112088: - ldr r1, _081120AC @ =gMain - ldr r2, _081120B0 @ =0x0000043c - adds r1, r2 -_0811208E: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _081120D6 - .align 2, 0 -_08112098: .4byte gUnknown_02024E8C -_0811209C: .4byte gDummySpriteAffineAnimTable -_081120A0: .4byte 0x02014800 -_081120A4: .4byte gSprites -_081120A8: .4byte nullsub_37 -_081120AC: .4byte gMain -_081120B0: .4byte 0x0000043c -_081120B4: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - ldr r0, _081120E0 @ =CB2_EvolutionSceneUpdate_1 - bl SetMainCallback2 - movs r1, 0x80 - lsls r1, 19 - movs r2, 0x9A - lsls r2, 5 - adds r0, r2, 0 - strh r0, [r1] -_081120D6: - add sp, 0x8 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081120E0: .4byte CB2_EvolutionSceneUpdate_1 - thumb_func_end CB2_TradeEvolutionSceneLoadGraphics - - thumb_func_start TradeEvolutionScene -TradeEvolutionScene: @ 81120E4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x24 - str r0, [sp, 0x1C] - adds r5, r1, 0 - adds r4, r2, 0 - mov r10, r3 - lsls r5, 16 - lsrs r5, 16 - lsls r4, 24 - lsrs r4, 24 - mov r0, r10 - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - ldr r0, [sp, 0x1C] - movs r1, 0x2 - add r2, sp, 0x8 - bl GetMonData - ldr r0, _08112234 @ =gStringVar1 - add r1, sp, 0x8 - bl StringCopy10 - ldr r0, _08112238 @ =gStringVar2 - movs r1, 0xB - muls r1, r5 - ldr r2, _0811223C @ =gSpeciesNames - adds r1, r2 - bl StringCopy - ldr r1, _08112240 @ =gAffineAnimsDisabled - movs r0, 0x1 - strb r0, [r1] - ldr r0, [sp, 0x1C] - movs r1, 0xB - bl GetMonData - mov r8, r0 - mov r1, r8 - lsls r1, 16 - lsrs r1, 16 - mov r8, r1 - ldr r0, [sp, 0x1C] - movs r1, 0 - bl GetMonData - adds r6, r0, 0 - ldr r0, [sp, 0x1C] - movs r1, 0x1 - bl GetMonData - adds r7, r0, 0 - ldr r2, _08112244 @ =0x02014800 - mov r9, r2 - strb r4, [r2] - lsls r0, r5, 3 - ldr r1, _08112248 @ =gMonFrontPicTable - adds r0, r1 - ldr r1, _0811224C @ =gMonFrontPicCoords - lsls r2, r5, 2 - adds r2, r1 - ldrb r1, [r2] - ldrb r2, [r2, 0x1] - movs r3, 0x80 - lsls r3, 18 - ldr r4, _08112250 @ =gUnknown_081FAF4C - ldr r4, [r4, 0x4] - str r4, [sp] - str r5, [sp, 0x4] - bl DecompressPicFromTable_2 - adds r0, r5, 0 - adds r1, r7, 0 - adds r2, r6, 0 - bl sub_80409C8 - ldr r0, [r0] - movs r1, 0x90 - lsls r1, 1 - movs r2, 0x20 - bl LoadCompressedPalette - adds r0, r5, 0 - movs r1, 0x1 - bl GetMonSpriteTemplate_803C56C - ldr r0, _08112254 @ =gUnknown_02024E8C - ldr r1, _08112258 @ =gDummySpriteAffineAnimTable - str r1, [r0, 0x10] - movs r1, 0x78 - movs r2, 0x40 - movs r3, 0x1E - bl CreateSprite - lsls r1, r0, 24 - lsrs r2, r1, 24 - mov r1, r9 - strb r0, [r1, 0x1] - ldr r3, _0811225C @ =gSprites - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r0, r3, 0 - adds r0, 0x1C - adds r0, r1, r0 - ldr r2, _08112260 @ =nullsub_37 - str r2, [r0] - adds r1, r3 - ldrb r2, [r1, 0x5] - movs r0, 0xF - ands r0, r2 - movs r2, 0x20 - orrs r0, r2 - strb r0, [r1, 0x5] - adds r1, 0x3E - ldrb r0, [r1] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r1] - bl LoadEvoSparkleSpriteAndPal - ldr r0, _08112264 @ =Task_TradeEvolutionScene - movs r1, 0 - bl CreateTask - lsls r1, r0, 24 - lsrs r2, r1, 24 - mov r1, r9 - strb r0, [r1, 0x2] - ldr r1, _08112268 @ =gTasks - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r0, r1 - movs r2, 0 - strh r2, [r0, 0x8] - mov r1, r8 - strh r1, [r0, 0xE] - strh r5, [r0, 0x10] - mov r2, sp - ldrh r2, [r2, 0x1C] - strh r2, [r0, 0xA] - ldr r1, [sp, 0x1C] - lsrs r1, 16 - str r1, [sp, 0x20] - strh r1, [r0, 0xC] - movs r1, 0x1 - strh r1, [r0, 0x14] - movs r1, 0 - strh r1, [r0, 0x1E] - mov r2, r10 - strh r2, [r0, 0x20] - ldr r0, _0811226C @ =CB2_EvolutionSceneUpdate_1 - bl SetMainCallback2 - add sp, 0x24 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08112234: .4byte gStringVar1 -_08112238: .4byte gStringVar2 -_0811223C: .4byte gSpeciesNames -_08112240: .4byte gAffineAnimsDisabled -_08112244: .4byte 0x02014800 -_08112248: .4byte gMonFrontPicTable -_0811224C: .4byte gMonFrontPicCoords -_08112250: .4byte gUnknown_081FAF4C -_08112254: .4byte gUnknown_02024E8C -_08112258: .4byte gDummySpriteAffineAnimTable -_0811225C: .4byte gSprites -_08112260: .4byte nullsub_37 -_08112264: .4byte Task_TradeEvolutionScene -_08112268: .4byte gTasks -_0811226C: .4byte CB2_EvolutionSceneUpdate_1 - thumb_func_end TradeEvolutionScene - - thumb_func_start CB2_EvolutionSceneUpdate_0 -CB2_EvolutionSceneUpdate_0: @ 8112270 - push {lr} - bl AnimateSprites - bl BuildOamBuffer - ldr r0, _0811228C @ =gUnknown_03004210 - bl sub_800374C - bl UpdatePaletteFade - bl RunTasks - pop {r0} - bx r0 - .align 2, 0 -_0811228C: .4byte gUnknown_03004210 - thumb_func_end CB2_EvolutionSceneUpdate_0 - - thumb_func_start CB2_EvolutionSceneUpdate_1 -CB2_EvolutionSceneUpdate_1: @ 8112290 - push {lr} - bl AnimateSprites - bl BuildOamBuffer - ldr r0, _081122B0 @ =gUnknown_03004828 - ldr r0, [r0] - adds r0, 0x4 - bl sub_80035AC - bl UpdatePaletteFade - bl RunTasks - pop {r0} - bx r0 - .align 2, 0 -_081122B0: .4byte gUnknown_03004828 - thumb_func_end CB2_EvolutionSceneUpdate_1 - thumb_func_start CreateShedinja -CreateShedinja: @ 81122B4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - mov r10, r1 - lsls r0, 16 - lsrs r7, r0, 16 - movs r0, 0 - str r0, [sp] - ldr r0, _081123F4 @ =gEvolutionTable - mov r8, r0 - lsls r1, r7, 2 - mov r9, r1 - adds r0, r1, r7 - lsls r4, r0, 3 - mov r0, r8 - adds r6, r4, r0 - ldrh r0, [r6] - cmp r0, 0xD - beq _081122E2 - b _081123E2 -_081122E2: - ldr r1, _081123F8 @ =gPlayerPartyCount - ldrb r0, [r1] - cmp r0, 0x5 - bhi _081123E2 - adds r1, r0, 0 - movs r0, 0x64 - muls r1, r0 - ldr r0, _081123FC @ =gPlayerParty - adds r5, r1, r0 - adds r0, r5, 0 - mov r1, r10 - movs r2, 0x64 - bl CopyMon - mov r1, r8 - adds r2, r1, r4 - adds r2, 0xC - adds r0, r5, 0 - movs r1, 0xB - bl SetMonData - ldrh r1, [r6, 0xC] - movs r0, 0xB - adds r2, r1, 0 - muls r2, r0 - ldr r0, _08112400 @ =gSpeciesNames - adds r2, r0 - adds r0, r5, 0 - movs r1, 0x2 - bl SetMonData - adds r0, r5, 0 - movs r1, 0xC - mov r2, sp - bl SetMonData - adds r0, r5, 0 - movs r1, 0x8 - mov r2, sp - bl SetMonData - adds r0, r5, 0 - movs r1, 0xA - mov r2, sp - bl SetMonData - movs r4, 0x32 - mov r6, r9 -_08112342: - adds r0, r5, 0 - adds r1, r4, 0 - mov r2, sp - bl SetMonData - adds r4, 0x1 - cmp r4, 0x36 - ble _08112342 - movs r4, 0x43 -_08112354: - adds r0, r5, 0 - adds r1, r4, 0 - mov r2, sp - bl SetMonData - adds r4, 0x1 - cmp r4, 0x4F - ble _08112354 - adds r0, r5, 0 - movs r1, 0x37 - mov r2, sp - bl SetMonData - movs r0, 0xFF - str r0, [sp] - adds r0, r5, 0 - movs r1, 0x40 - mov r2, sp - bl SetMonData - adds r0, r5, 0 - bl CalculateMonStats - bl CalculatePlayerPartyCount - ldr r0, _081123F4 @ =gEvolutionTable - adds r4, r6, r7 - lsls r4, 3 - adds r4, r0 - ldrh r0, [r4, 0xC] - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x2 - bl GetNationalPokedexFlag - ldrh r0, [r4, 0xC] - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x3 - bl GetNationalPokedexFlag - adds r0, r5, 0 - movs r1, 0xB - bl GetMonData - ldr r1, _08112404 @ =0x0000012f - cmp r0, r1 - bne _081123E2 - adds r0, r5, 0 - movs r1, 0x3 - bl GetMonData - cmp r0, 0x1 - bne _081123E2 - mov r0, r10 - movs r1, 0xB - bl GetMonData - movs r1, 0x97 - lsls r1, 1 - cmp r0, r1 - bne _081123E2 - ldr r2, _08112408 @ =gUnknown_083F868C - adds r0, r5, 0 - movs r1, 0x2 - bl SetMonData -_081123E2: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081123F4: .4byte gEvolutionTable -_081123F8: .4byte gPlayerPartyCount -_081123FC: .4byte gPlayerParty -_08112400: .4byte gSpeciesNames -_08112404: .4byte 0x0000012f -_08112408: .4byte gUnknown_083F868C - thumb_func_end CreateShedinja thumb_func_start Task_EvolutionScene Task_EvolutionScene: @ 811240C @@ -2379,7 +1107,7 @@ _08112D8C: b _08112FD0 _08112D9A: ldr r1, [r4, 0x4] - ldr r0, _08112DC4 @ =CB2_EvolutionSceneUpdate_0 + ldr r0, _08112DC4 @ =CB2_EvolutionSceneUpdate cmp r1, r0 beq _08112DA4 b _08112FD0 @@ -2398,7 +1126,7 @@ _08112DA4: b _08112FCE .align 2, 0 _08112DC0: .4byte gPaletteFade -_08112DC4: .4byte CB2_EvolutionSceneUpdate_0 +_08112DC4: .4byte CB2_EvolutionSceneUpdate _08112DC8: .4byte gTasks _08112DCC: adds r1, r6, 0 @@ -3671,7 +2399,7 @@ _081138CC: _081138DA: ldr r0, _08113904 @ =gMain ldr r1, [r0, 0x4] - ldr r0, _08113908 @ =CB2_EvolutionSceneUpdate_1 + ldr r0, _08113908 @ =CB2_TradeEvolutionSceneUpdate cmp r1, r0 beq _081138E6 b _08113B3A @@ -3691,7 +2419,7 @@ _081138E6: .align 2, 0 _08113900: .4byte gPaletteFade _08113904: .4byte gMain -_08113908: .4byte CB2_EvolutionSceneUpdate_1 +_08113908: .4byte CB2_TradeEvolutionSceneUpdate _0811390C: .4byte gTasks _08113910: adds r1, r6, 0 diff --git a/include/evolution_graphics.h b/include/evolution_graphics.h index c217f22af..a960f637b 100644 --- a/include/evolution_graphics.h +++ b/include/evolution_graphics.h @@ -6,8 +6,10 @@ void LoadEvoSparkleSpriteAndPal(void); u8 LaunchTask_PreEvoSparklesSet1(u16 arg0); u8 LaunchTask_PreEvoSparklesSet2(void); u8 LaunchTask_PostEvoSparklesSet1(void); -u8 LaunchTask_PostEvoSparklesSet2AndFlash(u16 arg0); -u8 LaunchTask_PostEvoSparklesSet2AndFlash_Trade(u16 arg0); +u8 LaunchTask_PostEvoSparklesSet2AndFlash(u16 species); +u8 LaunchTask_PostEvoSparklesSet2AndFlash_Trade(u16 species); u8 sub_8149E7C(u8 preEvoSpriteID, u8 postEvoSpriteID); +#define EvoGraphicsTaskEvoStop data[8] + #endif // GUARD_EVOLUTION_GRAPHICS_H diff --git a/include/trade.h b/include/trade.h new file mode 100644 index 000000000..a4f05e8ed --- /dev/null +++ b/include/trade.h @@ -0,0 +1,18 @@ +#ifndef GUARD_TRADE_H +#define GUARD_TRADE_H + +struct SomeTradeStruct +{ + u8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; + struct Window field_4; + u8 field_34; +}; + +extern struct SomeTradeStruct* gUnknown_03004828; + +void sub_804E22C(void); + +#endif // GUARD_TRADE_H diff --git a/ld_script.txt b/ld_script.txt index f7024cba7..b00aafbc6 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -219,6 +219,7 @@ SECTIONS { src/field_specials.o(.text); src/battle_records.o(.text); asm/pokedex_area_screen.o(.text); + src/evolution_scene.o(.text); asm/evolution_scene.o(.text); asm/roulette.o(.text); asm/pokedex_cry_screen.o(.text); diff --git a/shared_syms.txt b/shared_syms.txt index 884f0e89d..571e0633e 100644 --- a/shared_syms.txt +++ b/shared_syms.txt @@ -3,6 +3,8 @@ ewram = 0x2000000; unk_2004000 = 0x2004000; +gUnk_2009000 = 0x2009000; + unk_2007800 = 0x2007800; unk_2007900 = 0x2007900; diff --git a/src/evolution_graphics.c b/src/evolution_graphics.c index a47e63a59..1fd5bf8fa 100644 --- a/src/evolution_graphics.c +++ b/src/evolution_graphics.c @@ -1,4 +1,5 @@ #include "global.h" +#include "evolution_graphics.h" #include "sprite.h" #include "trig.h" #include "rng.h" @@ -376,10 +377,10 @@ static void EvoTask_DestroyPostSet1Task(u8 taskID) DestroyTask(taskID); } -u8 LaunchTask_PostEvoSparklesSet2AndFlash(u16 arg0) +u8 LaunchTask_PostEvoSparklesSet2AndFlash(u16 species) { u8 taskID = CreateTask(EvoTask_BeginPostSparklesSet2_AndFlash, 0); - gTasks[taskID].data[2] = arg0; + gTasks[taskID].data[2] = species; return taskID; } @@ -424,10 +425,10 @@ static void EvoTask_DestroyPostSet2AndFlashTask(u8 taskID) DestroyTask(taskID); } -u8 LaunchTask_PostEvoSparklesSet2AndFlash_Trade(u16 arg0) +u8 LaunchTask_PostEvoSparklesSet2AndFlash_Trade(u16 species) { u8 taskID = CreateTask(EvoTask_BeginPostSparklesSet2_AndFlash_Trade, 0); - gTasks[taskID].data[2] = arg0; + gTasks[taskID].data[2] = species; return taskID; } diff --git a/src/evolution_scene.c b/src/evolution_scene.c new file mode 100644 index 000000000..dff128236 --- /dev/null +++ b/src/evolution_scene.c @@ -0,0 +1,800 @@ +#include "global.h" +#include "task.h" +#include "evolution_graphics.h" +#include "palette.h" +#include "main.h" +#include "text.h" +#include "text_window.h" +#include "pokemon.h" +#include "string_util.h" +#include "battle.h" +#include "unknown_task.h" +#include "data2.h" +#include "decompress.h" +#include "m4a.h" +#include "trade.h" +#include "menu.h" +#include "pokedex.h" +#include "species.h" +#include "sound.h" +#include "songs.h" +#include "rom4.h" +#include "battle_message.h" +#include "pokemon_summary_screen.h" + +struct EvoInfo +{ + u8 preEvoSpriteID; + u8 postEvoSpriteID; + u8 evoTaskID; + u8 field_3; +}; + +#define sEvoInfo (*(struct EvoInfo *)(ewram + 0x14800)) + +void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies); +void sub_8024CEC(void); +void sub_8023A80(void); +void sub_802BC6C(void); +void nullsub_6(void); + +extern struct Window gUnknown_03004210; +extern u16 gUnknown_030042A4; +extern u16 gUnknown_030042A0; +extern u16 gUnknown_030042C0; +extern u16 gUnknown_030041B4; +extern u16 gUnknown_03004288; +extern u16 gUnknown_03004280; +extern u16 gUnknown_030041B0; +extern u16 gUnknown_030041B8; +extern u8 gBattleTerrain; +extern u8 gReservedSpritePaletteCount; +extern u16 word_2024E82; + +extern void * const gUnknown_081FAF4C[]; +extern const u8* const gBattleStringsTable[]; + +extern struct SpriteTemplate gUnknown_02024E8C; +extern u8 gUnk_2009000[]; // won't match if I 'ewram' it +extern bool8 gAffineAnimsDisabled; +extern MainCallback gUnknown_03005E94; + +extern u8 gBattleCommunication[]; +#define sEvoCursorPos gBattleCommunication[1] // when learning a new move +#define sEvoGraphicsTaskID gBattleCommunication[2] + +// this file's functions +void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, u8 partyID); +void Task_EvolutionScene(u8 taskID); +void Task_TradeEvolutionScene(u8 taskID); +void VBlankCB_EvolutionScene(void); +void VBlankCB_TradeEvolutionScene(void); +void HBlankCB_EvolutionScene(void); +void CB2_EvolutionSceneUpdate(void); +void CB2_TradeEvolutionSceneUpdate(void); + +void CB2_BeginEvolutionScene(void) +{ + UpdatePaletteFade(); + RunTasks(); +} + +#define tState data[0] +#define tMonPtrHI data[1] +#define tMonPtrLO data[2] +#define tPreEvoSpecies data[3] +#define tPostEvoSpecies data[4] +#define tCanStop data[5] // in first fast data[5] only checks that +#define tBits data[5] // in the second task, it works as a bitfield +#define tData6 data[6] +#define tData8 data[8] +#define tData9 data[9] +#define tData10 data[10] +#define tEvoWasStopped data[11] +#define tPartyID data[12] + +#define TASK_BIT_CAN_STOP 0x1 +#define TASK_BIT_x80 0x80 + +void Task_BeginEvolutionScene(u8 taskID) +{ + struct Pokemon* mon = NULL; + switch (gTasks[taskID].tState) + { + case 0: + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + gTasks[taskID].tState++; + break; + case 1: + if (!gPaletteFade.active) + { + u16 speciesToEvolve; + bool8 canStopEvo; + u8 partyID; + + mon = (struct Pokemon*)(gTasks[taskID].tMonPtrHI | (gTasks[taskID].tMonPtrLO << 0x10)); + speciesToEvolve = gTasks[taskID].tPostEvoSpecies; + canStopEvo = gTasks[taskID].tCanStop; + partyID = gTasks[taskID].tPartyID; + + DestroyTask(taskID); + EvolutionScene(mon, speciesToEvolve, canStopEvo, partyID); + } + break; + } +} + +void BeginEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, u8 partyID) +{ + u8 taskID = CreateTask(Task_BeginEvolutionScene, 0); + gTasks[taskID].tState = 0; + gTasks[taskID].tMonPtrHI = (u32)(mon); + gTasks[taskID].tMonPtrLO = (u32)(mon) >> 0x10; + gTasks[taskID].tPostEvoSpecies = speciesToEvolve; + gTasks[taskID].tCanStop = canStopEvo; + gTasks[taskID].tPartyID = partyID; + SetMainCallback2(CB2_BeginEvolutionScene); +} + +void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, u8 partyID) +{ + u8 name[20]; + u16 currSpecies; + u32 TiD, PiD; + const struct CompressedSpritePalette** pokePal; + u8 ID; + SetHBlankCallback(NULL); + SetVBlankCallback(NULL); + CpuFill32(0, (void*)(VRAM), VRAM_SIZE); + + REG_MOSAIC = 0; + REG_WIN0H = 0; + REG_WIN0V = 0; + REG_WIN1H = 0; + REG_WIN1V = 0; + REG_WININ = 0; + REG_WINOUT = 0; + + SetUpWindowConfig(&gWindowConfig_81E6C58); + ResetPaletteFade(); + + gUnknown_030042A4 = 0; + gUnknown_030042A0 = 0; + gUnknown_030042C0 = 0; + gUnknown_030041B4 = 0; + gUnknown_03004288 = 0; + gUnknown_03004280 = 0; + gUnknown_030041B0 = 256; + gUnknown_030041B8 = 0; + + InitWindowFromConfig(&gUnknown_03004210, &gWindowConfig_81E6C58); + gBattleTerrain = 9; + + sub_800D6D4(); + sub_800DAB8(); + ResetSpriteData(); + remove_some_task(); + ResetTasks(); + FreeAllSpritePalettes(); + + gReservedSpritePaletteCount = 4; + + GetMonData(mon, MON_DATA_NICKNAME, name); + StringCopy10(gStringVar1, name); + StringCopy(gStringVar2, gSpeciesNames[speciesToEvolve]); + + // preEvo sprite + currSpecies = GetMonData(mon, MON_DATA_SPECIES); + TiD = GetMonData(mon, MON_DATA_OT_ID); + PiD = GetMonData(mon, MON_DATA_PERSONALITY); + DecompressPicFromTable_2(&gMonFrontPicTable[currSpecies], + gMonFrontPicCoords[currSpecies].coords, + gMonFrontPicCoords[currSpecies].y_offset, + (void*)(0x2000000), + gUnknown_081FAF4C[1], currSpecies); + pokePal = (void*) sub_80409C8(currSpecies, TiD, PiD); + LoadCompressedPalette(*pokePal, 0x110, 0x20); + + GetMonSpriteTemplate_803C56C(currSpecies, 1); + gUnknown_02024E8C.affineAnims = gDummySpriteAffineAnimTable; + sEvoInfo.preEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30); + + gSprites[ID].callback = nullsub_37; + gSprites[ID].oam.paletteNum = 1; + gSprites[ID].invisible = 1; + + // postEvo sprite + DecompressPicFromTable_2(&gMonFrontPicTable[speciesToEvolve], + gMonFrontPicCoords[speciesToEvolve].coords, + gMonFrontPicCoords[speciesToEvolve].y_offset, + (void*)(0x2000000), + gUnknown_081FAF4C[3], speciesToEvolve); + pokePal = (void*) sub_80409C8(speciesToEvolve, TiD, PiD); + LoadCompressedPalette(*pokePal, 0x120, 0x20); + + GetMonSpriteTemplate_803C56C(speciesToEvolve, 3); + gUnknown_02024E8C.affineAnims = gDummySpriteAffineAnimTable; + sEvoInfo.postEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30); + gSprites[ID].callback = nullsub_37; + gSprites[ID].oam.paletteNum = 2; + gSprites[ID].invisible = 1; + + LoadEvoSparkleSpriteAndPal(); + + sEvoInfo.evoTaskID = ID = CreateTask(Task_EvolutionScene, 0); + gTasks[ID].tState = 0; + gTasks[ID].tPreEvoSpecies = currSpecies; + gTasks[ID].tPostEvoSpecies = speciesToEvolve; + gTasks[ID].tMonPtrHI = (u32)(mon); + gTasks[ID].tMonPtrLO = (u32)(mon) >> 0x10; + gTasks[ID].tCanStop = canStopEvo; + gTasks[ID].tData6 = 1; + gTasks[ID].tEvoWasStopped = FALSE; + gTasks[ID].tPartyID = partyID; + + memcpy(gUnk_2009000, &gPlttBufferUnfaded[0x20], 0x60); + + REG_DISPCNT = DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_1D_MAP; + SetHBlankCallback(HBlankCB_EvolutionScene); + SetVBlankCallback(VBlankCB_EvolutionScene); + m4aMPlayAllStop(); + SetMainCallback2(CB2_EvolutionSceneUpdate); +} + +void CB2_EvolutionSceneLoadGraphics(void) +{ + u8 ID; + const struct CompressedSpritePalette** pokePal; + u16 postEvoSpecies; + u32 TiD, PiD; + struct Pokemon* Mon = &gPlayerParty[gTasks[sEvoInfo.evoTaskID].tPartyID]; + + postEvoSpecies = gTasks[sEvoInfo.evoTaskID].tPostEvoSpecies; + TiD = GetMonData(Mon, MON_DATA_OT_ID); + PiD = GetMonData(Mon, MON_DATA_PERSONALITY); + + SetHBlankCallback(NULL); + SetVBlankCallback(NULL); + CpuFill32(0, (void*)(VRAM), VRAM_SIZE); + + REG_MOSAIC = 0; + REG_WIN0H = 0; + REG_WIN0V = 0; + REG_WIN1H = 0; + REG_WIN1V = 0; + REG_WININ = 0; + REG_WINOUT = 0; + SetUpWindowConfig(&gWindowConfig_81E6C58); + ResetPaletteFade(); + gUnknown_030042A4 = 0; + gUnknown_030042A0 = 0; + gUnknown_030042C0 = 0; + gUnknown_030041B4 = 0; + gUnknown_03004288 = 0; + gUnknown_03004280 = 0; + gUnknown_030041B0 = 256; + gUnknown_030041B8 = 0; + + InitWindowFromConfig(&gUnknown_03004210, &gWindowConfig_81E6C58); + gBattleTerrain = 9; + + sub_800D6D4(); + sub_800DAB8(); + ResetSpriteData(); + FreeAllSpritePalettes(); + gReservedSpritePaletteCount = 4; + + DecompressPicFromTable_2(&gMonFrontPicTable[postEvoSpecies], + gMonFrontPicCoords[postEvoSpecies].coords, + gMonFrontPicCoords[postEvoSpecies].y_offset, + (void*)(0x2000000), + gUnknown_081FAF4C[3], postEvoSpecies); + pokePal = (void*) sub_80409C8(postEvoSpecies, TiD, PiD); + LoadCompressedPalette(*pokePal, 0x120, 0x20); + + GetMonSpriteTemplate_803C56C(postEvoSpecies, 3); + gUnknown_02024E8C.affineAnims = gDummySpriteAffineAnimTable; + sEvoInfo.postEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30); + + gSprites[ID].callback = nullsub_37; + gSprites[ID].oam.paletteNum = 2; + + REG_DISPCNT = DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_1D_MAP; + SetHBlankCallback(HBlankCB_EvolutionScene); + SetVBlankCallback(VBlankCB_EvolutionScene); + SetMainCallback2(CB2_EvolutionSceneUpdate); + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); +} + +void CB2_TradeEvolutionSceneLoadGraphics(void) +{ + struct Pokemon* Mon = &gPlayerParty[gTasks[sEvoInfo.evoTaskID].tPartyID]; + u16 postEvoSpecies = gTasks[sEvoInfo.evoTaskID].tPostEvoSpecies; + + switch (gMain.state) + { + case 0: + REG_DISPCNT = 0; + SetHBlankCallback(NULL); + SetVBlankCallback(NULL); + ResetSpriteData(); + FreeAllSpritePalettes(); + gReservedSpritePaletteCount = 4; + gUnknown_030042A4 = 0; + gUnknown_030042A0 = 0; + gUnknown_030042C0 = 0; + gUnknown_030041B4 = 0; + gUnknown_03004288 = 0; + gUnknown_03004280 = 0; + gUnknown_030041B0 = 256; + gUnknown_030041B8 = 0; + gMain.state++; + break; + case 1: + SetUpWindowConfig(&gWindowConfig_81E6F84); + InitWindowFromConfig(&gUnknown_03004828->field_4, &gWindowConfig_81E6F84); + gMain.state++; + break; + case 2: + LoadTextWindowGraphics(&gUnknown_03004828->field_4); + gUnknown_03004828->field_34 = SetTextWindowBaseTileNum(2); + LoadTextWindowGraphics(&gUnknown_03004828->field_4); + MenuZeroFillScreen(); + ResetPaletteFade(); + gMain.state++; + SetHBlankCallback(HBlankCB_EvolutionScene); + SetVBlankCallback(VBlankCB_TradeEvolutionScene); + break; + case 3: + sub_804E22C(); + gMain.state++; + break; + case 4: + { + const struct CompressedSpritePalette** pokePal; + u32 TiD = GetMonData(Mon, MON_DATA_OT_ID); + u32 PiD = GetMonData(Mon, MON_DATA_PERSONALITY); + DecompressPicFromTable_2(&gMonFrontPicTable[postEvoSpecies], + gMonFrontPicCoords[postEvoSpecies].coords, + gMonFrontPicCoords[postEvoSpecies].y_offset, + (void*)(0x2000000), + gUnknown_081FAF4C[3], postEvoSpecies); + pokePal = (void*) sub_80409C8(postEvoSpecies, TiD, PiD); + LoadCompressedPalette(*pokePal, 0x120, 0x20); + gMain.state++; + } + break; + case 5: + { + u8 ID; + + GetMonSpriteTemplate_803C56C(postEvoSpecies, 3); + gUnknown_02024E8C.affineAnims = gDummySpriteAffineAnimTable; + sEvoInfo.postEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30); + + gSprites[ID].callback = nullsub_37; + gSprites[ID].oam.paletteNum = 2; + gMain.state++; + } + break; + case 6: + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); + SetMainCallback2(CB2_TradeEvolutionSceneUpdate); + REG_DISPCNT = DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_1D_MAP; + break; + } +} + +void TradeEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8 preEvoSpriteID, u8 partyID) +{ + u8 name[20]; + u16 currSpecies; + u32 TiD, PiD; + const struct CompressedSpritePalette** pokePal; + u8 ID; + + GetMonData(mon, MON_DATA_NICKNAME, name); + StringCopy10(gStringVar1, name); + StringCopy(gStringVar2, gSpeciesNames[speciesToEvolve]); + + gAffineAnimsDisabled = TRUE; + + // preEvo sprite + currSpecies = GetMonData(mon, MON_DATA_SPECIES); + PiD = GetMonData(mon, MON_DATA_PERSONALITY); + TiD = GetMonData(mon, MON_DATA_OT_ID); + sEvoInfo.preEvoSpriteID = preEvoSpriteID; + DecompressPicFromTable_2(&gMonFrontPicTable[speciesToEvolve], + gMonFrontPicCoords[speciesToEvolve].coords, + gMonFrontPicCoords[speciesToEvolve].y_offset, + (void*)(0x2000000), + gUnknown_081FAF4C[1], speciesToEvolve); + pokePal = (void*) sub_80409C8(speciesToEvolve, TiD, PiD); + LoadCompressedPalette(*pokePal, 0x120, 0x20); + + GetMonSpriteTemplate_803C56C(speciesToEvolve, 1); + gUnknown_02024E8C.affineAnims = gDummySpriteAffineAnimTable; + sEvoInfo.postEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30); + + gSprites[ID].callback = nullsub_37; + gSprites[ID].oam.paletteNum = 2; + gSprites[ID].invisible = 1; + + LoadEvoSparkleSpriteAndPal(); + + sEvoInfo.evoTaskID = ID = CreateTask(Task_TradeEvolutionScene, 0); + gTasks[ID].tState = 0; + gTasks[ID].tPreEvoSpecies = currSpecies; + gTasks[ID].tPostEvoSpecies = speciesToEvolve; + gTasks[ID].tMonPtrHI = (u32)(mon); + gTasks[ID].tMonPtrLO = (u32)(mon) >> 0x10; + gTasks[ID].tData6 = 1; + gTasks[ID].tEvoWasStopped = FALSE; + gTasks[ID].tPartyID = partyID; + + SetMainCallback2(CB2_TradeEvolutionSceneUpdate); +} + +void CB2_EvolutionSceneUpdate(void) +{ + AnimateSprites(); + BuildOamBuffer(); + sub_800374C(&gUnknown_03004210); + UpdatePaletteFade(); + RunTasks(); +} + +void CB2_TradeEvolutionSceneUpdate(void) +{ + AnimateSprites(); + BuildOamBuffer(); + sub_80035AC(&gUnknown_03004828->field_4); + UpdatePaletteFade(); + RunTasks(); +} + +extern const u8 gUnknown_083F868C[]; + +void CreateShedinja(u16 preEvoSpecies, struct Pokemon* mon) +{ + u32 data = 0; + if (gEvolutionTable[preEvoSpecies].evolutions[0].method == EVO_LEVEL_NINJASK && gPlayerPartyCount < 6) + { + s32 i; + struct Pokemon* Shedinja = &gPlayerParty[gPlayerPartyCount]; + const struct EvolutionData* EvoTable; + const struct EvolutionData* Evos; + + CopyMon(Shedinja, mon, sizeof(struct Pokemon)); + SetMonData(Shedinja, MON_DATA_SPECIES, (void*)(&gEvolutionTable[preEvoSpecies].evolutions[1].targetSpecies)); + SetMonData(Shedinja, MON_DATA_NICKNAME, (void*)(gSpeciesNames[gEvolutionTable[preEvoSpecies].evolutions[1].targetSpecies])); + SetMonData(Shedinja, MON_DATA_HELD_ITEM, (void*)(&data)); + SetMonData(Shedinja, MON_DATA_MARKINGS, (void*)(&data)); + SetMonData(Shedinja, MON_DATA_10, (void*)(&data)); + for (i = MON_DATA_COOL_RIBBON; i < MON_DATA_COOL_RIBBON + 5; i++) + SetMonData(Shedinja, i, (void*)(&data)); + for (i = MON_DATA_CHAMPION_RIBBON; i <= MON_DATA_FATEFUL_ENCOUNTER; i++) + SetMonData(Shedinja, i, (void*)(&data)); + SetMonData(Shedinja, MON_DATA_STATUS, (void*)(&data)); + data = 0xFF; + SetMonData(Shedinja, MON_DATA_MAIL, (void*)(&data)); + + CalculateMonStats(Shedinja); + CalculatePlayerPartyCount(); + + // can't match it otherwise, ehh + EvoTable = gEvolutionTable; + Evos = EvoTable + preEvoSpecies; + GetNationalPokedexFlag(SpeciesToNationalPokedexNum(Evos->evolutions[1].targetSpecies), 2); + GetNationalPokedexFlag(SpeciesToNationalPokedexNum(Evos->evolutions[1].targetSpecies), 3); + + if (GetMonData(Shedinja, MON_DATA_SPECIES) == SPECIES_SHEDINJA + && GetMonData(Shedinja, MON_DATA_LANGUAGE) == LANGUAGE_JAPANESE + && GetMonData(mon, MON_DATA_SPECIES) == SPECIES_NINJASK) + SetMonData(Shedinja, MON_DATA_NICKNAME, gUnknown_083F868C); + } +} + +extern const u8 gUnknown_08400C4A[]; +extern const u8 gUnknown_08400C60[]; +extern const u8 gUnknown_08400C8D[]; + +void Task_EvolutionScene(u8 taskID) +{ + struct Pokemon* mon = (struct Pokemon*)(gTasks[taskID].tMonPtrHI | (gTasks[taskID].tMonPtrLO << 0x10)); + + // check if B Button was held, so the evolution gets stopped + if (gMain.newAndRepeatedKeys == B_BUTTON && gTasks[taskID].tState != 8 && gTasks[taskID].tBits & TASK_BIT_CAN_STOP) + { + gTasks[taskID].tState = 16; + if (gTasks[sEvoGraphicsTaskID].isActive) + gTasks[sEvoGraphicsTaskID].EvoGraphicsTaskEvoStop = TRUE; + } + switch (gTasks[taskID].tState) + { + case 0: + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); + gSprites[sEvoInfo.preEvoSpriteID].invisible = 0; + gTasks[taskID].tState++; + break; + case 1: + if (!gPaletteFade.active) + { + StringExpandPlaceholders(gStringVar4, gUnknown_08400C4A); + sub_8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15); + gTasks[taskID].tState++; + } + break; + case 2: + if (gUnknown_03004210.state == 0) + { + PlayCry1(gTasks[taskID].tPreEvoSpecies, 0); + gTasks[taskID].tState++; + } + break; + case 3: + if (IsCryFinished) + { + PlaySE(BGM_ME_SHINKA); + gTasks[taskID].tState++; + } + break; + case 4: + if (!IsSEPlaying) + { + PlayNewMapMusic(BGM_SHINKA); + gTasks[taskID].tState++; + BeginNormalPaletteFade(0x1C, 4, 0, 0x10, 0); + } + break; + case 5: + if (!gPaletteFade.active) + { + sEvoGraphicsTaskID = LaunchTask_PreEvoSparklesSet1(17); + gTasks[taskID].tState++; + } + break; + case 6: + if (!gTasks[sEvoGraphicsTaskID].isActive) + { + gTasks[taskID].tState++; + sEvoInfo.field_3 = 1; + sEvoGraphicsTaskID = LaunchTask_PreEvoSparklesSet2(); + } + break; + case 7: + if (!gTasks[sEvoGraphicsTaskID].isActive) + { + sEvoGraphicsTaskID = sub_8149E7C(sEvoInfo.preEvoSpriteID, sEvoInfo.postEvoSpriteID); + gTasks[taskID].tState++; + } + break; + case 8: + if (--sEvoInfo.field_3 == 0) + { + sEvoInfo.field_3 = 3; + if (!gTasks[sEvoGraphicsTaskID].isActive) + gTasks[taskID].tState++; + } + break; + case 9: + sEvoGraphicsTaskID = LaunchTask_PostEvoSparklesSet1(); + gTasks[taskID].tState++; + break; + case 10: + if (!gTasks[sEvoGraphicsTaskID].isActive) + { + sEvoGraphicsTaskID = LaunchTask_PostEvoSparklesSet2AndFlash(gTasks[taskID].tPostEvoSpecies); + gTasks[taskID].tState++; + } + break; + case 11: + if (!gTasks[sEvoGraphicsTaskID].isActive) + { + PlaySE(SE_EXP); + gTasks[taskID].tState++; + } + break; + case 12: + if (!IsSEPlaying) + { + m4aMPlayAllStop(); + PlayCry1(gTasks[taskID].tPostEvoSpecies, 0); + memcpy(&gPlttBufferUnfaded[0x20], gUnk_2009000, 0x60); + BeginNormalPaletteFade(0x1C, 0, 0, 0x10, 0); + gTasks[taskID].tState++; + } + break; + case 13: + if (IsCryFinished && !gPaletteFade.active) + { + StringExpandPlaceholders(gStringVar4, gUnknown_08400C60); + sub_8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15); + PlayBGM(BGM_FANFA5); + gTasks[taskID].tState++; + SetMonData(mon, MON_DATA_SPECIES, (void*)(&gTasks[taskID].tPostEvoSpecies)); + CalculateMonStats(mon); + EvolutionRenameMon(mon, gTasks[taskID].tPreEvoSpecies, gTasks[taskID].tPostEvoSpecies); + GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskID].tPostEvoSpecies), 2); + GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskID].tPostEvoSpecies), 3); + IncrementGameStat(14); + } + break; + case 14: + if (gUnknown_03004210.state == 0) + { + u16 var = sub_803B7C8(mon, gTasks[taskID].tData6); + if (var != 0 && !gTasks[taskID].tEvoWasStopped) + { + u8 text[11]; + + gTasks[taskID].tBits |= TASK_BIT_x80; + gTasks[taskID].tData6 = 0; + gTasks[taskID].tData8 = 0; + GetMonData(mon, MON_DATA_NICKNAME, text); + StringCopy10(gBattleTextBuff1, text); + if (var == 0xFFFF) + gTasks[taskID].tState = 21; + else if (var == 0xFFFE) + break; + else + gTasks[taskID].tState = 19; + } + else + { + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + gTasks[taskID].tState++; + } + } + break; + case 15: // task has finished, return + if (!gPaletteFade.active) + { + if (!(gTasks[taskID].tBits & TASK_BIT_x80)) + sub_8053E90(); + if (!gTasks[taskID].tEvoWasStopped) + CreateShedinja(gTasks[taskID].tPreEvoSpecies, mon); + DestroyTask(taskID); + SetMainCallback2(gUnknown_03005E94); + } + break; + case 16: // evolution has been canceled + if (!gTasks[sEvoGraphicsTaskID].isActive) + { + m4aMPlayAllStop(); + BeginNormalPaletteFade(0x6001C, 0, 0x10, 0, 0x7FFF); + gTasks[taskID].tState++; + } + break; + case 17: // play cry of the pokemon trying to evolve again, evolution has been stopped + if (!gPaletteFade.active) + { + PlayCry1(gTasks[taskID].tPreEvoSpecies, 0); + gTasks[taskID].tState++; + } + break; + case 18: // after the cry, print the string 'WHOA IT DID NOT EVOLVE!!!' + if (IsCryFinished) + { + StringExpandPlaceholders(gStringVar4, gUnknown_08400C8D); + sub_8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15); + gTasks[taskID].tEvoWasStopped = TRUE; + gTasks[taskID].tState = 14; + } + break; + case 19: // yay, your poke evolved so it would be nice to print a msg that says it + if (gUnknown_03004210.state == 0 && !IsSEPlaying()) + { + sub_8024CEC(); + PlayFanfare(BGM_FANFA1); + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[3]); + sub_8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15); + gTasks[taskID].tData6 = 0x40; + gTasks[taskID].tState++; + } + break; + case 20: + if (gUnknown_03004210.state == 0 && !IsSEPlaying() && --gTasks[taskID].tData6 == 0) + gTasks[taskID].tState = 14; + break; + case 21: // try to learn a new move + switch (gTasks[taskID].tData8) + { + case 0: + if (gUnknown_03004210.state == 0 && !IsSEPlaying()) + { + sub_8024CEC(); + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[4]); + sub_8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15); + gTasks[taskID].tData8++; + } + break; + case 1: + if (gUnknown_03004210.state == 0 && !IsSEPlaying()) + { + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[5]); + sub_8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15); + gTasks[taskID].tData8++; + } + break; + case 2: + if (gUnknown_03004210.state != 0) + break; + if (!IsSEPlaying()) + { + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[6]); + sub_8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15); + gTasks[taskID].tData9 = 5; + gTasks[taskID].tData10 = 9; + gTasks[taskID].tData8++; + } + case 3: + if (gUnknown_03004210.state == 0 && !IsSEPlaying()) + { + sub_8023A80(); + gTasks[taskID].tData8++; + sEvoCursorPos = 0; + sub_802BC6C(); + } + break; + case 4: + if (gMain.newKeys & DPAD_UP && sEvoCursorPos != 0) + { + PlaySE(SE_SELECT); + nullsub_6(); + sEvoCursorPos = 0; + sub_802BC6C(); + } + if (gMain.newKeys & DPAD_DOWN && sEvoCursorPos == 0) + { + PlaySE(SE_SELECT); + nullsub_6(); + sEvoCursorPos = 1; + sub_802BC6C(); + } + if (gMain.newKeys & A_BUTTON) + { + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[292]); + sub_8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15); + PlaySE(SE_SELECT); + if (sEvoCursorPos != 0) + gTasks[taskID].tData8 = gTasks[taskID].tData10; + else + { + gTasks[taskID].tData8 = gTasks[taskID].tData9; + if (gTasks[taskID].tData8 == 5) + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + } + } + if (gMain.newKeys & B_BUTTON) + { + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[292]); + sub_8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15); + PlaySE(SE_SELECT); + gTasks[taskID].tData8 = gTasks[taskID].tData10; + } + break; + case 5: + if (!gPaletteFade.active) + { + sub_809D9F0(gPlayerParty, gTasks[taskID].tPartyID, + gPlayerPartyCount - 1, CB2_EvolutionSceneLoadGraphics, + word_2024E82); + gTasks[taskID].tData8++; + } + break; + case 6: + if (!gPaletteFade.active && gMain.callback2 == CB2_EvolutionSceneUpdate) + { + if (sub_809FA30() == 4) + gTasks[taskID].tData8 = 9; + else + { + + } + } + break; + } + break; + } +} -- cgit v1.2.3 From 991cbbffbcdbba6ba71ea9a08a7a28a29377f976 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 26 Aug 2017 19:45:45 -0500 Subject: import DizzyEggg's battle controller changes --- asm/battle_2.s | 14 +- asm/battle_9.s | 1424 +-------------- asm/battle_anim_81258BC.s | 1396 +-------------- asm/battle_controller_linkopponent1.s | 1421 +++++++++++++++ asm/battle_controller_safari.s | 1402 +++++++++++++++ data/battle_811DA74.s | 64 - data/battle_anim_81258BC.s | 64 - data/battle_anim_8137220.s | 64 - data/data2b.s | 126 -- data/data2c.s | 10 + include/battle.h | 20 +- include/rom3.h | 62 +- ld_script.txt | 28 +- src/battle_10.c | 1323 -------------- src/battle_2.c | 30 +- src/battle_4.c | 36 +- src/battle_5.c | 1579 ----------------- src/battle_6.c | 1507 ---------------- src/battle_7.c | 414 +---- src/battle_anim_81258BC.c | 50 - src/battle_anim_8137220.c | 1486 ---------------- src/battle_controller_linkopponent2.c | 1449 ++++++++++++++++ src/battle_controller_linkpartner.c | 1728 +++++++++++++++++++ src/battle_controller_opponent.c | 2055 ++++++++++++++++++++++ src/battle_controller_player.c | 3066 +++++++++++++++++++++++++++++++++ src/battle_controller_safari.c | 173 ++ src/battle_controller_wally.c | 1611 +++++++++++++++++ src/rom3.c | 74 +- 28 files changed, 13125 insertions(+), 9551 deletions(-) create mode 100644 asm/battle_controller_linkopponent1.s create mode 100644 asm/battle_controller_safari.s delete mode 100644 data/battle_811DA74.s delete mode 100644 data/battle_anim_81258BC.s delete mode 100644 data/battle_anim_8137220.s create mode 100644 data/data2c.s delete mode 100644 src/battle_10.c delete mode 100644 src/battle_5.c delete mode 100644 src/battle_6.c delete mode 100644 src/battle_anim_81258BC.c delete mode 100644 src/battle_anim_8137220.c create mode 100644 src/battle_controller_linkopponent2.c create mode 100644 src/battle_controller_linkpartner.c create mode 100644 src/battle_controller_opponent.c create mode 100644 src/battle_controller_player.c create mode 100644 src/battle_controller_safari.c create mode 100644 src/battle_controller_wally.c diff --git a/asm/battle_2.s b/asm/battle_2.s index 804cefa76..731759851 100644 --- a/asm/battle_2.s +++ b/asm/battle_2.s @@ -189,7 +189,7 @@ _080124A8: lsls r0, 8 orrs r2, r0 movs r0, 0 - bl dp01_build_cmdbuf_x12_a_bb + bl Emitcmd18 bl _08012E32 .align 2, 0 _080124C0: .4byte gActionForBanks @@ -408,7 +408,7 @@ _0801264E: movs r0, 0 movs r2, 0 add r3, sp, 0x4 - bl sub_800CBA4 + bl Emitcmd20 b _0801289E .align 2, 0 _080126AC: .4byte gBattleMons @@ -573,7 +573,7 @@ _080127E0: str r0, [sp] movs r0, 0 movs r2, 0x6 - bl EmitChoosePokemon + bl Emitcmd22 b _0801289E .align 2, 0 _08012808: .4byte gActiveBank @@ -624,7 +624,7 @@ _08012854: movs r1, 0 _0801286C: movs r3, 0 - bl EmitChoosePokemon + bl Emitcmd22 b _0801289E .align 2, 0 _08012874: .4byte gActionForBanks @@ -643,7 +643,7 @@ _08012884: movs r1, 0 movs r2, 0x6 movs r3, 0 - bl EmitChoosePokemon + bl Emitcmd22 _0801289E: ldr r0, _080128A8 @ =gActiveBank ldrb r0, [r0] @@ -698,7 +698,7 @@ _08012908: ldr r0, _08012928 @ =0x0201606c adds r1, r0 movs r0, 0 - bl sub_800CBE0 + bl EmitOpenBag ldrb r0, [r4] bl MarkBufferBankForExecution b _08012968 @@ -725,7 +725,7 @@ _0801292C: adds r0, r4 strb r5, [r0] movs r0, 0 - bl dp01_build_cmdbuf_x32_32_32_32 + bl Emitcmd50 mov r4, r8 ldrb r0, [r4] bl MarkBufferBankForExecution diff --git a/asm/battle_9.s b/asm/battle_9.s index 1c5431afc..9f4beef55 100644 --- a/asm/battle_9.s +++ b/asm/battle_9.s @@ -41,7 +41,7 @@ ai_switch_perish_song: @ 8035FEC movs r0, 0x1 movs r1, 0x2 movs r2, 0 - bl dp01_build_cmdbuf_x21_a_bb + bl Emitcmd33 movs r0, 0x1 b _0803604E .align 2, 0 @@ -86,7 +86,7 @@ _08036070: movs r0, 0x1 movs r1, 0x2 movs r2, 0 - bl dp01_build_cmdbuf_x21_a_bb + bl Emitcmd33 movs r0, 0x1 b _080361CA .align 2, 0 @@ -410,7 +410,7 @@ _0803630C: movs r0, 0x1 movs r1, 0x2 movs r2, 0 - bl dp01_build_cmdbuf_x21_a_bb + bl Emitcmd33 movs r0, 0x1 b _08036402 .align 2, 0 @@ -634,7 +634,7 @@ _080364E0: movs r0, 0x1 movs r1, 0x2 movs r2, 0 - bl dp01_build_cmdbuf_x21_a_bb + bl Emitcmd33 _080364FE: movs r0, 0x1 _08036500: @@ -958,7 +958,7 @@ _08036768: movs r0, 0x1 movs r1, 0x2 movs r2, 0 - bl dp01_build_cmdbuf_x21_a_bb + bl Emitcmd33 movs r0, 0x1 b _080368DA .align 2, 0 @@ -1533,7 +1533,7 @@ _08036C2E: lsls r2, 8 movs r0, 0x1 movs r1, 0 - bl dp01_build_cmdbuf_x21_a_bb + bl Emitcmd33 _08036C40: pop {r4-r6} pop {r0} @@ -2623,7 +2623,7 @@ _080374AE: movs r0, 0x1 movs r1, 0x1 movs r2, 0 - bl dp01_build_cmdbuf_x21_a_bb + bl Emitcmd33 ldr r1, _080374DC @ =0x02000000 ldr r0, _080374E0 @ =gActiveBank ldrb r0, [r0] @@ -2667,1414 +2667,4 @@ _080374FA: bx r1 thumb_func_end sub_803708C - thumb_func_start nullsub_47 -nullsub_47: @ 803750C - bx lr - thumb_func_end nullsub_47 - - thumb_func_start SetBankFuncToLinkOpponentBufferRunCommand -SetBankFuncToLinkOpponentBufferRunCommand: @ 8037510 - ldr r1, _08037520 @ =gBattleBankFunc - ldr r0, _08037524 @ =gActiveBank - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r1, _08037528 @ =sub_803752C - str r1, [r0] - bx lr - .align 2, 0 -_08037520: .4byte gBattleBankFunc -_08037524: .4byte gActiveBank -_08037528: .4byte sub_803752C - thumb_func_end SetBankFuncToLinkOpponentBufferRunCommand - - thumb_func_start sub_803752C -sub_803752C: @ 803752C - push {lr} - ldr r2, _08037560 @ =gBattleExecBuffer - ldr r1, _08037564 @ =gBitTable - ldr r0, _08037568 @ =gActiveBank - ldrb r3, [r0] - lsls r0, r3, 2 - adds r0, r1 - ldr r1, [r2] - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - beq _08037578 - ldr r0, _0803756C @ =gBattleBufferA - lsls r1, r3, 9 - adds r1, r0 - ldrb r0, [r1] - cmp r0, 0x38 - bhi _08037574 - ldr r0, _08037570 @ =gLinkOpponentBufferCommands - ldrb r1, [r1] - lsls r1, 2 - adds r1, r0 - ldr r0, [r1] - bl _call_via_r0 - b _08037578 - .align 2, 0 -_08037560: .4byte gBattleExecBuffer -_08037564: .4byte gBitTable -_08037568: .4byte gActiveBank -_0803756C: .4byte gBattleBufferA -_08037570: .4byte gLinkOpponentBufferCommands -_08037574: - bl dp01_tbl4_exec_completed -_08037578: - pop {r0} - bx r0 - thumb_func_end sub_803752C - - thumb_func_start sub_803757C -sub_803757C: @ 803757C - push {lr} - ldr r2, _080375A4 @ =gSprites - ldr r1, _080375A8 @ =gObjectBankIDs - ldr r0, _080375AC @ =gActiveBank - ldrb r0, [r0] - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r1, [r0] - ldr r0, _080375B0 @ =SpriteCallbackDummy - cmp r1, r0 - bne _080375A0 - bl dp01_tbl4_exec_completed -_080375A0: - pop {r0} - bx r0 - .align 2, 0 -_080375A4: .4byte gSprites -_080375A8: .4byte gObjectBankIDs -_080375AC: .4byte gActiveBank -_080375B0: .4byte SpriteCallbackDummy - thumb_func_end sub_803757C - - thumb_func_start sub_80375B4 -sub_80375B4: @ 80375B4 - push {r4-r6,lr} - ldr r4, _0803762C @ =gSprites - ldr r6, _08037630 @ =gObjectBankIDs - ldr r5, _08037634 @ =gActiveBank - ldrb r0, [r5] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r2, r0, 2 - adds r0, r4, 0 - adds r0, 0x1C - adds r0, r2, r0 - ldr r1, [r0] - ldr r0, _08037638 @ =SpriteCallbackDummy - cmp r1, r0 - bne _08037624 - adds r0, r2, r4 - ldrh r0, [r0, 0x6] - bl sub_8031B74 - ldrb r0, [r5] - adds r0, r6 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - ldrh r0, [r1, 0x38] - ldr r2, _0803763C @ =0x000003ff - ands r2, r0 - ldrh r3, [r1, 0x4] - ldr r0, _08037640 @ =0xfffffc00 - ands r0, r3 - orrs r0, r2 - strh r0, [r1, 0x4] - ldrb r0, [r5] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl FreeSpriteOamMatrix - ldrb r0, [r5] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite - bl dp01_tbl4_exec_completed -_08037624: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0803762C: .4byte gSprites -_08037630: .4byte gObjectBankIDs -_08037634: .4byte gActiveBank -_08037638: .4byte SpriteCallbackDummy -_0803763C: .4byte 0x000003ff -_08037640: .4byte 0xfffffc00 - thumb_func_end sub_80375B4 - - thumb_func_start sub_8037644 -sub_8037644: @ 8037644 - push {lr} - ldr r3, _08037678 @ =gActiveBank - ldrb r0, [r3] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - ldr r2, _0803767C @ =0x02017810 - adds r1, r2 - ldrb r0, [r1, 0x9] - subs r0, 0x1 - strb r0, [r1, 0x9] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - bne _08037674 - ldrb r0, [r3] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - movs r0, 0 - strb r0, [r1, 0x9] - bl dp01_tbl4_exec_completed -_08037674: - pop {r0} - bx r0 - .align 2, 0 -_08037678: .4byte gActiveBank -_0803767C: .4byte 0x02017810 - thumb_func_end sub_8037644 - - thumb_func_start sub_8037680 -sub_8037680: @ 8037680 - push {r4-r7,lr} - movs r6, 0 - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - beq _080376A4 - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - beq _080376D8 - ldr r0, _080376C4 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _080376D8 -_080376A4: - ldr r2, _080376C8 @ =gSprites - ldr r1, _080376CC @ =gHealthboxIDs - ldr r0, _080376D0 @ =gActiveBank - ldrb r0, [r0] - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r1, [r0] - ldr r0, _080376D4 @ =SpriteCallbackDummy - cmp r1, r0 - bne _0803770E - b _0803770C - .align 2, 0 -_080376C4: .4byte gBattleTypeFlags -_080376C8: .4byte gSprites -_080376CC: .4byte gHealthboxIDs -_080376D0: .4byte gActiveBank -_080376D4: .4byte SpriteCallbackDummy -_080376D8: - ldr r2, _080377D8 @ =gSprites - ldr r5, _080377DC @ =gHealthboxIDs - ldr r0, _080377E0 @ =gActiveBank - ldrb r3, [r0] - adds r0, r3, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r4, [r0] - ldr r0, _080377E4 @ =SpriteCallbackDummy - cmp r4, r0 - bne _0803770E - movs r0, 0x2 - eors r3, r0 - adds r0, r3, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldr r0, [r0] - cmp r0, r4 - bne _0803770E -_0803770C: - movs r6, 0x1 -_0803770E: - bl IsCryPlayingOrClearCrySongs - lsls r0, 24 - cmp r0, 0 - beq _0803771A - movs r6, 0 -_0803771A: - cmp r6, 0 - bne _08037720 - b _08037822 -_08037720: - ldr r7, _080377E0 @ =gActiveBank - ldrb r0, [r7] - bl GetBankIdentity - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x1 - bne _080377B4 - ldrb r2, [r7] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - ldr r5, _080377E8 @ =0x02017810 - adds r4, r0, r5 - ldrb r1, [r4, 0x1] - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _08037822 - movs r6, 0x2 - adds r1, r6, 0 - eors r1, r2 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrb r1, [r0, 0x1] - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _08037822 - ldrb r1, [r4] - movs r3, 0x7F - adds r0, r3, 0 - ands r0, r1 - strb r0, [r4] - ldrb r0, [r7] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - ldrb r2, [r1, 0x1] - movs r4, 0x2 - negs r4, r4 - adds r0, r4, 0 - ands r0, r2 - strb r0, [r1, 0x1] - ldrb r0, [r7] - adds r1, r6, 0 - eors r1, r0 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrb r1, [r0] - ands r3, r1 - strb r3, [r0] - ldrb r0, [r7] - adds r1, r6, 0 - eors r1, r0 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrb r1, [r0, 0x1] - ands r4, r1 - strb r4, [r0, 0x1] - ldr r4, _080377EC @ =0x000027f9 - adds r0, r4, 0 - bl FreeSpriteTilesByTag - adds r0, r4, 0 - bl FreeSpritePaletteByTag -_080377B4: - ldr r0, _080377F0 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _080377F8 - ldrb r0, [r7] - bl GetBankIdentity - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08037804 - ldr r0, _080377F4 @ =gMPlay_BGM - bl m4aMPlayContinue - b _08037804 - .align 2, 0 -_080377D8: .4byte gSprites -_080377DC: .4byte gHealthboxIDs -_080377E0: .4byte gActiveBank -_080377E4: .4byte SpriteCallbackDummy -_080377E8: .4byte 0x02017810 -_080377EC: .4byte 0x000027f9 -_080377F0: .4byte gBattleTypeFlags -_080377F4: .4byte gMPlay_BGM -_080377F8: - ldr r0, _08037828 @ =gMPlay_BGM - ldr r1, _0803782C @ =0x0000ffff - movs r2, 0x80 - lsls r2, 1 - bl m4aMPlayVolumeControl -_08037804: - ldr r2, _08037830 @ =gActiveBank - ldrb r1, [r2] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - ldr r1, _08037834 @ =0x02017810 - adds r0, r1 - movs r1, 0x3 - strb r1, [r0, 0x9] - ldr r1, _08037838 @ =gBattleBankFunc - ldrb r0, [r2] - lsls r0, 2 - adds r0, r1 - ldr r1, _0803783C @ =sub_8037644 - str r1, [r0] -_08037822: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08037828: .4byte gMPlay_BGM -_0803782C: .4byte 0x0000ffff -_08037830: .4byte gActiveBank -_08037834: .4byte 0x02017810 -_08037838: .4byte gBattleBankFunc -_0803783C: .4byte sub_8037644 - thumb_func_end sub_8037680 - - thumb_func_start sub_8037840 -sub_8037840: @ 8037840 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r6, _08037A48 @ =gActiveBank - ldrb r2, [r6] - lsls r3, r2, 1 - adds r0, r3, r2 - lsls r0, 2 - ldr r5, _08037A4C @ =0x02017810 - adds r0, r5 - ldrb r1, [r0] - movs r4, 0x88 - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - bne _08037878 - ldr r0, _08037A50 @ =gBattlePartyID - adds r0, r3, r0 - ldrh r1, [r0] - movs r0, 0x64 - muls r1, r0 - ldr r0, _08037A54 @ =gEnemyParty - adds r1, r0 - adds r0, r2, 0 - bl sub_8141828 -_08037878: - ldrb r0, [r6] - movs r7, 0x2 - adds r2, r7, 0 - eors r2, r0 - lsls r3, r2, 1 - adds r0, r3, r2 - lsls r0, 2 - adds r0, r5 - ldrb r1, [r0] - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - bne _080378A6 - ldr r0, _08037A50 @ =gBattlePartyID - adds r0, r3, r0 - ldrh r1, [r0] - movs r0, 0x64 - muls r1, r0 - ldr r0, _08037A54 @ =gEnemyParty - adds r1, r0 - adds r0, r2, 0 - bl sub_8141828 -_080378A6: - ldrb r2, [r6] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - adds r0, r5 - ldrb r1, [r0] - movs r3, 0x8 - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _080378BE - b _08037A3A -_080378BE: - adds r1, r2, 0 - eors r1, r7 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrb r1, [r0] - adds r0, r3, 0 - ands r0, r1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - beq _080378DA - b _08037A3A -_080378DA: - ldr r0, _08037A58 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0803791A - adds r0, r2, 0 - bl GetBankIdentity - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - bne _0803791A - ldrb r0, [r6] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - ldrb r0, [r1, 0x9] - adds r0, 0x1 - strb r0, [r1, 0x9] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0803790E - b _08037A3A -_0803790E: - ldrb r1, [r6] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - strb r4, [r0, 0x9] -_0803791A: - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - beq _080379B2 - ldr r0, _08037A58 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - bne _080379B2 - ldr r1, _08037A5C @ =gUnknown_0300434C - ldr r5, _08037A48 @ =gActiveBank - ldrb r0, [r5] - movs r4, 0x2 - eors r0, r4 - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08037A60 @ =gSprites - adds r0, r1 - bl DestroySprite - ldr r0, _08037A64 @ =gHealthboxIDs - mov r8, r0 - ldrb r0, [r5] - adds r1, r4, 0 - eors r1, r0 - mov r2, r8 - adds r0, r1, r2 - ldrb r0, [r0] - ldr r2, _08037A50 @ =gBattlePartyID - mov r10, r2 - lsls r1, 1 - add r1, r10 - ldrh r1, [r1] - movs r2, 0x64 - mov r9, r2 - mov r2, r9 - muls r2, r1 - adds r1, r2, 0 - ldr r6, _08037A54 @ =gEnemyParty - adds r1, r6 - movs r2, 0 - bl sub_8045A5C - ldrb r0, [r5] - eors r0, r4 - bl sub_804777C - ldrb r0, [r5] - eors r0, r4 - add r0, r8 - ldrb r0, [r0] - bl sub_8043DFC - ldrb r0, [r5] - eors r4, r0 - lsls r0, r4, 1 - add r0, r10 - ldrh r0, [r0] - mov r1, r9 - muls r1, r0 - adds r0, r1, 0 - adds r0, r6 - movs r1, 0xB - bl GetMonData - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - adds r0, r4, 0 - bl sub_8032984 -_080379B2: - ldr r1, _08037A5C @ =gUnknown_0300434C - ldr r4, _08037A48 @ =gActiveBank - ldrb r0, [r4] - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08037A60 @ =gSprites - adds r0, r1 - bl DestroySprite - ldr r5, _08037A64 @ =gHealthboxIDs - ldrb r1, [r4] - adds r0, r1, r5 - ldrb r0, [r0] - ldr r2, _08037A50 @ =gBattlePartyID - mov r9, r2 - lsls r1, 1 - add r1, r9 - ldrh r1, [r1] - movs r2, 0x64 - mov r8, r2 - mov r2, r8 - muls r2, r1 - adds r1, r2, 0 - ldr r6, _08037A54 @ =gEnemyParty - adds r1, r6 - movs r2, 0 - bl sub_8045A5C - ldrb r0, [r4] - bl sub_804777C - ldrb r0, [r4] - adds r0, r5 - ldrb r0, [r0] - bl sub_8043DFC - ldrb r5, [r4] - lsls r0, r5, 1 - add r0, r9 - ldrh r0, [r0] - mov r1, r8 - muls r1, r0 - adds r0, r1, 0 - adds r0, r6 - movs r1, 0xB - bl GetMonData - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - adds r0, r5, 0 - bl sub_8032984 - ldr r2, _08037A68 @ =0x02017840 - ldrb r1, [r2, 0x9] - movs r0, 0x2 - negs r0, r0 - ands r0, r1 - strb r0, [r2, 0x9] - ldr r1, _08037A6C @ =gBattleBankFunc - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, _08037A70 @ =sub_8037680 - str r1, [r0] -_08037A3A: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08037A48: .4byte gActiveBank -_08037A4C: .4byte 0x02017810 -_08037A50: .4byte gBattlePartyID -_08037A54: .4byte gEnemyParty -_08037A58: .4byte gBattleTypeFlags -_08037A5C: .4byte gUnknown_0300434C -_08037A60: .4byte gSprites -_08037A64: .4byte gHealthboxIDs -_08037A68: .4byte 0x02017840 -_08037A6C: .4byte gBattleBankFunc -_08037A70: .4byte sub_8037680 - thumb_func_end sub_8037840 - - thumb_func_start sub_8037A74 -sub_8037A74: @ 8037A74 - push {r4-r7,lr} - ldr r2, _08037ACC @ =gSprites - ldr r0, _08037AD0 @ =gObjectBankIDs - ldr r7, _08037AD4 @ =gActiveBank - ldrb r3, [r7] - adds r0, r3, r0 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r0, r2 - adds r0, r1, 0 - adds r0, 0x3F - ldrb r0, [r0] - lsls r0, 27 - lsrs r2, r0, 31 - cmp r2, 0x1 - bne _08037B18 - movs r4, 0x24 - ldrsh r0, [r1, r4] - cmp r0, 0 - bne _08037B18 - lsls r4, r3, 1 - adds r0, r4, r3 - lsls r0, 2 - ldr r6, _08037AD8 @ =0x02017810 - adds r1, r0, r6 - ldrb r5, [r1] - movs r0, 0x80 - ands r0, r5 - cmp r0, 0 - bne _08037AE4 - ldr r0, _08037ADC @ =gBattlePartyID - adds r0, r4, r0 - ldrh r1, [r0] - movs r0, 0x64 - muls r1, r0 - ldr r0, _08037AE0 @ =gEnemyParty - adds r1, r0 - adds r0, r3, 0 - bl sub_8141828 - b _08037B18 - .align 2, 0 -_08037ACC: .4byte gSprites -_08037AD0: .4byte gObjectBankIDs -_08037AD4: .4byte gActiveBank -_08037AD8: .4byte 0x02017810 -_08037ADC: .4byte gBattlePartyID -_08037AE0: .4byte gEnemyParty -_08037AE4: - ldrb r0, [r1, 0x1] - ands r2, r0 - cmp r2, 0 - beq _08037B18 - movs r0, 0x7F - ands r0, r5 - strb r0, [r1] - ldrb r0, [r7] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - ldrb r2, [r1, 0x1] - movs r0, 0x2 - negs r0, r0 - ands r0, r2 - strb r0, [r1, 0x1] - ldr r4, _08037B20 @ =0x000027f9 - adds r0, r4, 0 - bl FreeSpriteTilesByTag - adds r0, r4, 0 - bl FreeSpritePaletteByTag - bl dp01_tbl4_exec_completed -_08037B18: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08037B20: .4byte 0x000027f9 - thumb_func_end sub_8037A74 - - thumb_func_start sub_8037B24 -sub_8037B24: @ 8037B24 - push {r4-r6,lr} - ldr r6, _08037B64 @ =gActiveBank - ldrb r0, [r6] - ldr r5, _08037B68 @ =gHealthboxIDs - adds r1, r0, r5 - ldrb r1, [r1] - movs r2, 0 - movs r3, 0 - bl sub_8045C78 - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - ldrb r0, [r6] - adds r0, r5 - ldrb r0, [r0] - bl sub_8043DFC - lsls r4, 16 - asrs r1, r4, 16 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _08037B6C - ldrb r0, [r6] - adds r0, r5 - ldrb r0, [r0] - movs r2, 0 - bl sub_80440EC - b _08037B70 - .align 2, 0 -_08037B64: .4byte gActiveBank -_08037B68: .4byte gHealthboxIDs -_08037B6C: - bl dp01_tbl4_exec_completed -_08037B70: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8037B24 - - thumb_func_start sub_8037B78 -sub_8037B78: @ 8037B78 - push {lr} - ldr r2, _08037BAC @ =gSprites - ldr r0, _08037BB0 @ =gObjectBankIDs - ldr r1, _08037BB4 @ =gActiveBank - ldrb r3, [r1] - adds r0, r3, r0 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - adds r0, 0x3E - ldrb r0, [r0] - lsls r0, 31 - cmp r0, 0 - bne _08037BA6 - ldr r0, _08037BB8 @ =gHealthboxIDs - adds r0, r3, r0 - ldrb r0, [r0] - bl sub_8043DB0 - bl dp01_tbl4_exec_completed -_08037BA6: - pop {r0} - bx r0 - .align 2, 0 -_08037BAC: .4byte gSprites -_08037BB0: .4byte gObjectBankIDs -_08037BB4: .4byte gActiveBank -_08037BB8: .4byte gHealthboxIDs - thumb_func_end sub_8037B78 - - thumb_func_start sub_8037BBC -sub_8037BBC: @ 8037BBC - push {r4-r6,lr} - ldr r6, _08037C18 @ =gActiveBank - ldrb r2, [r6] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - ldr r1, _08037C1C @ =0x02017810 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - bne _08037C12 - ldr r5, _08037C20 @ =gObjectBankIDs - adds r0, r2, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, _08037C24 @ =gSprites - adds r0, r4 - bl FreeSpriteOamMatrix - ldrb r0, [r6] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite - ldrb r0, [r6] - bl sub_8032A08 - ldr r1, _08037C28 @ =gHealthboxIDs - ldrb r0, [r6] - adds r0, r1 - ldrb r0, [r0] - bl sub_8043DB0 - bl dp01_tbl4_exec_completed -_08037C12: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08037C18: .4byte gActiveBank -_08037C1C: .4byte 0x02017810 -_08037C20: .4byte gObjectBankIDs -_08037C24: .4byte gSprites -_08037C28: .4byte gHealthboxIDs - thumb_func_end sub_8037BBC - - thumb_func_start sub_8037C2C -sub_8037C2C: @ 8037C2C - push {lr} - ldr r0, _08037C40 @ =gUnknown_03004210 - ldrh r0, [r0, 0x16] - cmp r0, 0 - bne _08037C3A - bl dp01_tbl4_exec_completed -_08037C3A: - pop {r0} - bx r0 - .align 2, 0 -_08037C40: .4byte gUnknown_03004210 - thumb_func_end sub_8037C2C - - thumb_func_start dp01t_0F_4_move_anim -dp01t_0F_4_move_anim: @ 8037C44 - push {r4,lr} - ldr r1, _08037C80 @ =gObjectBankIDs - ldr r0, _08037C84 @ =gActiveBank - ldrb r0, [r0] - adds r0, r1 - ldrb r1, [r0] - ldr r2, _08037C88 @ =gSprites - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r4, r0, r2 - movs r1, 0x30 - ldrsh r0, [r4, r1] - cmp r0, 0x20 - bne _08037C90 - movs r3, 0 - movs r0, 0 - strh r0, [r4, 0x30] - adds r2, r4, 0 - adds r2, 0x3E - ldrb r1, [r2] - subs r0, 0x5 - ands r0, r1 - strb r0, [r2] - ldr r0, _08037C8C @ =gDoingBattleAnim - strb r3, [r0] - bl dp01_tbl4_exec_completed - b _08037CBA - .align 2, 0 -_08037C80: .4byte gObjectBankIDs -_08037C84: .4byte gActiveBank -_08037C88: .4byte gSprites -_08037C8C: .4byte gDoingBattleAnim -_08037C90: - ldrh r0, [r4, 0x30] - movs r1, 0x3 - ands r0, r1 - cmp r0, 0 - bne _08037CB4 - adds r3, r4, 0 - adds r3, 0x3E - ldrb r2, [r3] - lsls r0, r2, 29 - lsrs r0, 31 - movs r1, 0x1 - eors r1, r0 - lsls r1, 2 - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] -_08037CB4: - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] -_08037CBA: - pop {r4} - pop {r0} - bx r0 - thumb_func_end dp01t_0F_4_move_anim - - thumb_func_start sub_8037CC0 -sub_8037CC0: @ 8037CC0 - push {r4,lr} - ldr r2, _08037D10 @ =gSprites - ldr r0, _08037D14 @ =gHealthboxIDs - ldr r4, _08037D18 @ =gActiveBank - ldrb r3, [r4] - adds r0, r3, r0 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r1, [r0] - ldr r0, _08037D1C @ =SpriteCallbackDummy - cmp r1, r0 - bne _08037D08 - lsls r0, r3, 2 - ldr r1, _08037D20 @ =0x02017800 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _08037CFC - adds r0, r3, 0 - adds r1, r3, 0 - adds r2, r3, 0 - movs r3, 0x6 - bl move_anim_start_t4 -_08037CFC: - ldr r0, _08037D24 @ =gBattleBankFunc - ldrb r1, [r4] - lsls r1, 2 - adds r1, r0 - ldr r0, _08037D28 @ =sub_8037D2C - str r0, [r1] -_08037D08: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08037D10: .4byte gSprites -_08037D14: .4byte gHealthboxIDs -_08037D18: .4byte gActiveBank -_08037D1C: .4byte SpriteCallbackDummy -_08037D20: .4byte 0x02017800 -_08037D24: .4byte gBattleBankFunc -_08037D28: .4byte sub_8037D2C - thumb_func_end sub_8037CC0 - - thumb_func_start sub_8037D2C -sub_8037D2C: @ 8037D2C - push {lr} - ldr r0, _08037D58 @ =gActiveBank - ldrb r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - ldr r1, _08037D5C @ =0x02017810 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - bne _08037D52 - ldr r0, _08037D60 @ =c3_0802FDF4 - movs r1, 0xA - bl CreateTask - bl dp01_tbl4_exec_completed -_08037D52: - pop {r0} - bx r0 - .align 2, 0 -_08037D58: .4byte gActiveBank -_08037D5C: .4byte 0x02017810 -_08037D60: .4byte c3_0802FDF4 - thumb_func_end sub_8037D2C - - thumb_func_start sub_8037D64 -sub_8037D64: @ 8037D64 - push {r4,r5,lr} - ldr r5, _08037E08 @ =gActiveBank - ldrb r1, [r5] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - ldr r3, _08037E0C @ =0x02017810 - adds r2, r0, r3 - ldrb r1, [r2, 0x1] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08037E00 - ldrb r1, [r2] - movs r0, 0x7F - ands r0, r1 - strb r0, [r2] - ldrb r0, [r5] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r3 - ldrb r2, [r1, 0x1] - movs r0, 0x2 - negs r0, r0 - ands r0, r2 - strb r0, [r1, 0x1] - ldr r4, _08037E10 @ =0x000027f9 - adds r0, r4, 0 - bl FreeSpriteTilesByTag - adds r0, r4, 0 - bl FreeSpritePaletteByTag - ldr r1, _08037E14 @ =gObjectBankIDs - ldrb r0, [r5] - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08037E18 @ =gSprites - adds r0, r1 - movs r1, 0 - bl StartSpriteAnim - ldr r4, _08037E1C @ =gHealthboxIDs - ldrb r1, [r5] - adds r0, r1, r4 - ldrb r0, [r0] - ldr r2, _08037E20 @ =gBattlePartyID - lsls r1, 1 - adds r1, r2 - ldrh r2, [r1] - movs r1, 0x64 - muls r1, r2 - ldr r2, _08037E24 @ =gEnemyParty - adds r1, r2 - movs r2, 0 - bl sub_8045A5C - ldrb r0, [r5] - bl sub_804777C - ldrb r0, [r5] - adds r0, r4 - ldrb r0, [r0] - bl sub_8043DFC - ldrb r0, [r5] - bl sub_8031F88 - ldr r1, _08037E28 @ =gBattleBankFunc - ldrb r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r1, _08037E2C @ =sub_8037CC0 - str r1, [r0] -_08037E00: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08037E08: .4byte gActiveBank -_08037E0C: .4byte 0x02017810 -_08037E10: .4byte 0x000027f9 -_08037E14: .4byte gObjectBankIDs -_08037E18: .4byte gSprites -_08037E1C: .4byte gHealthboxIDs -_08037E20: .4byte gBattlePartyID -_08037E24: .4byte gEnemyParty -_08037E28: .4byte gBattleBankFunc -_08037E2C: .4byte sub_8037CC0 - thumb_func_end sub_8037D64 - - thumb_func_start sub_8037E30 -sub_8037E30: @ 8037E30 - push {r4-r6,lr} - ldr r5, _08037ECC @ =gActiveBank - ldrb r2, [r5] - lsls r3, r2, 1 - adds r0, r3, r2 - lsls r0, 2 - ldr r6, _08037ED0 @ =0x02017810 - adds r0, r6 - ldrb r1, [r0] - movs r0, 0x88 - ands r0, r1 - cmp r0, 0 - bne _08037E5E - ldr r0, _08037ED4 @ =gBattlePartyID - adds r0, r3, r0 - ldrh r1, [r0] - movs r0, 0x64 - muls r1, r0 - ldr r0, _08037ED8 @ =gEnemyParty - adds r1, r0 - adds r0, r2, 0 - bl sub_8141828 -_08037E5E: - ldr r4, _08037EDC @ =gSprites - ldr r0, _08037EE0 @ =gUnknown_0300434C - ldrb r2, [r5] - adds r0, r2, r0 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r3, r0, 2 - adds r0, r4, 0 - adds r0, 0x1C - adds r0, r3, r0 - ldr r1, [r0] - ldr r0, _08037EE4 @ =SpriteCallbackDummy - cmp r1, r0 - bne _08037EC4 - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - adds r0, r6 - ldrb r1, [r0] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - bne _08037EC4 - adds r0, r3, r4 - bl DestroySprite - ldrb r4, [r5] - ldr r1, _08037ED4 @ =gBattlePartyID - lsls r0, r4, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08037ED8 @ =gEnemyParty - adds r0, r1 - movs r1, 0xB - bl GetMonData - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - adds r0, r4, 0 - bl sub_8032984 - ldr r1, _08037EE8 @ =gBattleBankFunc - ldrb r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r1, _08037EEC @ =sub_8037D64 - str r1, [r0] -_08037EC4: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08037ECC: .4byte gActiveBank -_08037ED0: .4byte 0x02017810 -_08037ED4: .4byte gBattlePartyID -_08037ED8: .4byte gEnemyParty -_08037EDC: .4byte gSprites -_08037EE0: .4byte gUnknown_0300434C -_08037EE4: .4byte SpriteCallbackDummy -_08037EE8: .4byte gBattleBankFunc -_08037EEC: .4byte sub_8037D64 - thumb_func_end sub_8037E30 - - thumb_func_start sub_8037EF0 -sub_8037EF0: @ 8037EF0 - push {lr} - ldr r0, _08037F20 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _08037F1C - movs r0, 0x5A - bl m4aSongNumStop - ldr r3, _08037F24 @ =gMain - ldr r0, _08037F28 @ =0x0000043d - adds r2, r3, r0 - ldrb r1, [r2] - movs r0, 0x3 - negs r0, r0 - ands r0, r1 - strb r0, [r2] - ldr r0, _08037F2C @ =gPreBattleCallback1 - ldr r0, [r0] - str r0, [r3] - ldr r0, _08037F30 @ =c2_8011A1C - bl SetMainCallback2 -_08037F1C: - pop {r0} - bx r0 - .align 2, 0 -_08037F20: .4byte gReceivedRemoteLinkPlayers -_08037F24: .4byte gMain -_08037F28: .4byte 0x0000043d -_08037F2C: .4byte gPreBattleCallback1 -_08037F30: .4byte c2_8011A1C - thumb_func_end sub_8037EF0 - - thumb_func_start sub_8037F34 -sub_8037F34: @ 8037F34 - push {lr} - ldr r0, _08037F64 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08037F9A - ldr r0, _08037F68 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08037F78 - bl sub_800832C - ldr r1, _08037F6C @ =gBattleBankFunc - ldr r0, _08037F70 @ =gActiveBank - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r1, _08037F74 @ =sub_8037EF0 - str r1, [r0] - b _08037F9A - .align 2, 0 -_08037F64: .4byte gPaletteFade -_08037F68: .4byte gBattleTypeFlags -_08037F6C: .4byte gBattleBankFunc -_08037F70: .4byte gActiveBank -_08037F74: .4byte sub_8037EF0 -_08037F78: - movs r0, 0x5A - bl m4aSongNumStop - ldr r2, _08037FA0 @ =gMain - ldr r0, _08037FA4 @ =0x0000043d - adds r3, r2, r0 - ldrb r1, [r3] - movs r0, 0x3 - negs r0, r0 - ands r0, r1 - strb r0, [r3] - ldr r0, _08037FA8 @ =gPreBattleCallback1 - ldr r0, [r0] - str r0, [r2] - ldr r0, [r2, 0x8] - bl SetMainCallback2 -_08037F9A: - pop {r0} - bx r0 - .align 2, 0 -_08037FA0: .4byte gMain -_08037FA4: .4byte 0x0000043d -_08037FA8: .4byte gPreBattleCallback1 - thumb_func_end sub_8037F34 - - thumb_func_start sub_8037FAC -sub_8037FAC: @ 8037FAC - push {lr} - ldr r0, _08037FD0 @ =gActiveBank - ldrb r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - ldr r1, _08037FD4 @ =0x02017810 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _08037FCA - bl dp01_tbl4_exec_completed -_08037FCA: - pop {r0} - bx r0 - .align 2, 0 -_08037FD0: .4byte gActiveBank -_08037FD4: .4byte 0x02017810 - thumb_func_end sub_8037FAC - - thumb_func_start sub_8037FD8 -sub_8037FD8: @ 8037FD8 - push {lr} - ldr r0, _08037FFC @ =gActiveBank - ldrb r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - ldr r1, _08038000 @ =0x02017810 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - bne _08037FF6 - bl dp01_tbl4_exec_completed -_08037FF6: - pop {r0} - bx r0 - .align 2, 0 -_08037FFC: .4byte gActiveBank -_08038000: .4byte 0x02017810 - thumb_func_end sub_8037FD8 - - thumb_func_start dp01_tbl4_exec_completed -dp01_tbl4_exec_completed: @ 8038004 - push {r4,lr} - sub sp, 0x4 - ldr r1, _08038044 @ =gBattleBankFunc - ldr r4, _08038048 @ =gActiveBank - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, _0803804C @ =sub_803752C - str r1, [r0] - ldr r0, _08038050 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08038058 - bl GetMultiplayerId - mov r1, sp - strb r0, [r1] - movs r0, 0x2 - movs r1, 0x4 - mov r2, sp - bl dp01_prepare_buffer_wireless_probably - ldr r1, _08038054 @ =gBattleBufferA - ldrb r0, [r4] - lsls r0, 9 - adds r0, r1 - movs r1, 0x38 - strb r1, [r0] - b _0803806A - .align 2, 0 -_08038044: .4byte gBattleBankFunc -_08038048: .4byte gActiveBank -_0803804C: .4byte sub_803752C -_08038050: .4byte gBattleTypeFlags -_08038054: .4byte gBattleBufferA -_08038058: - ldr r2, _08038074 @ =gBattleExecBuffer - ldr r1, _08038078 @ =gBitTable - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - ldr r0, [r2] - bics r0, r1 - str r0, [r2] -_0803806A: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08038074: .4byte gBattleExecBuffer -_08038078: .4byte gBitTable - thumb_func_end dp01_tbl4_exec_completed - .align 2, 0 @ Don't pad with nop. diff --git a/asm/battle_anim_81258BC.s b/asm/battle_anim_81258BC.s index 8dbb9b1c2..951c0e2fc 100644 --- a/asm/battle_anim_81258BC.s +++ b/asm/battle_anim_81258BC.s @@ -729,1397 +729,5 @@ _0812B45C: .4byte gTasks _0812B460: .4byte gUnknown_0202F7D2 thumb_func_end sub_812B404 - thumb_func_start unref_sub_812B464 -unref_sub_812B464: @ 812B464 - bx lr - thumb_func_end unref_sub_812B464 - - thumb_func_start SetBankFuncToSafariBufferRunCommand -SetBankFuncToSafariBufferRunCommand: @ 812B468 - ldr r1, _0812B478 @ =gBattleBankFunc - ldr r0, _0812B47C @ =gActiveBank - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r1, _0812B480 @ =SafariBufferRunCommand - str r1, [r0] - bx lr - .align 2, 0 -_0812B478: .4byte gBattleBankFunc -_0812B47C: .4byte gActiveBank -_0812B480: .4byte SafariBufferRunCommand - thumb_func_end SetBankFuncToSafariBufferRunCommand - - thumb_func_start SafariBufferRunCommand -SafariBufferRunCommand: @ 812B484 - push {lr} - ldr r2, _0812B4B8 @ =gBattleExecBuffer - ldr r1, _0812B4BC @ =gBitTable - ldr r0, _0812B4C0 @ =gActiveBank - ldrb r3, [r0] - lsls r0, r3, 2 - adds r0, r1 - ldr r1, [r2] - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - beq _0812B4D0 - ldr r0, _0812B4C4 @ =gBattleBufferA - lsls r1, r3, 9 - adds r1, r0 - ldrb r0, [r1] - cmp r0, 0x38 - bhi _0812B4CC - ldr r0, _0812B4C8 @ =gSafariBufferCommands - ldrb r1, [r1] - lsls r1, 2 - adds r1, r0 - ldr r0, [r1] - bl _call_via_r0 - b _0812B4D0 - .align 2, 0 -_0812B4B8: .4byte gBattleExecBuffer -_0812B4BC: .4byte gBitTable -_0812B4C0: .4byte gActiveBank -_0812B4C4: .4byte gBattleBufferA -_0812B4C8: .4byte gSafariBufferCommands -_0812B4CC: - bl SafariBufferExecCompleted -_0812B4D0: - pop {r0} - bx r0 - thumb_func_end SafariBufferRunCommand - - thumb_func_start bx_battle_menu_t6_2 -bx_battle_menu_t6_2: @ 812B4D4 - push {r4,r5,lr} - ldr r0, _0812B508 @ =gMain - ldrh r1, [r0, 0x2E] - movs r2, 0x1 - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - beq _0812B546 - movs r0, 0x5 - bl PlaySE - bl DestroyMenuCursor - ldr r1, _0812B50C @ =gActionSelectionCursor - ldr r0, _0812B510 @ =gActiveBank - ldrb r0, [r0] - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x1 - beq _0812B524 - cmp r0, 0x1 - bgt _0812B514 - cmp r0, 0 - beq _0812B51E - b _0812B540 - .align 2, 0 -_0812B508: .4byte gMain -_0812B50C: .4byte gActionSelectionCursor -_0812B510: .4byte gActiveBank -_0812B514: - cmp r0, 0x2 - beq _0812B52A - cmp r0, 0x3 - beq _0812B536 - b _0812B540 -_0812B51E: - movs r0, 0x1 - movs r1, 0x5 - b _0812B52E -_0812B524: - movs r0, 0x1 - movs r1, 0x6 - b _0812B52E -_0812B52A: - movs r0, 0x1 - movs r1, 0x7 -_0812B52E: - movs r2, 0 - bl dp01_build_cmdbuf_x21_a_bb - b _0812B540 -_0812B536: - movs r0, 0x1 - movs r1, 0x8 - movs r2, 0 - bl dp01_build_cmdbuf_x21_a_bb -_0812B540: - bl SafariBufferExecCompleted - b _0812B64E -_0812B546: - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _0812B584 - ldr r5, _0812B57C @ =gActionSelectionCursor - ldr r4, _0812B580 @ =gActiveBank - ldrb r0, [r4] - adds r0, r5 - ldrb r1, [r0] - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - beq _0812B64E - movs r0, 0x5 - bl PlaySE - ldrb r0, [r4] - adds r0, r5 - ldrb r0, [r0] - bl nullsub_8 - ldrb r1, [r4] - adds r1, r5 - ldrb r0, [r1] - movs r2, 0x1 - b _0812B5F2 - .align 2, 0 -_0812B57C: .4byte gActionSelectionCursor -_0812B580: .4byte gActiveBank -_0812B584: - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0812B5C0 - ldr r5, _0812B5B8 @ =gActionSelectionCursor - ldr r4, _0812B5BC @ =gActiveBank - ldrb r0, [r4] - adds r0, r5 - ldrb r1, [r0] - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - bne _0812B64E - movs r0, 0x5 - bl PlaySE - ldrb r0, [r4] - adds r0, r5 - ldrb r0, [r0] - bl nullsub_8 - ldrb r1, [r4] - adds r1, r5 - ldrb r0, [r1] - movs r2, 0x1 - b _0812B5F2 - .align 2, 0 -_0812B5B8: .4byte gActionSelectionCursor -_0812B5BC: .4byte gActiveBank -_0812B5C0: - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0812B60C - ldr r5, _0812B604 @ =gActionSelectionCursor - ldr r4, _0812B608 @ =gActiveBank - ldrb r0, [r4] - adds r0, r5 - ldrb r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0812B64E - movs r0, 0x5 - bl PlaySE - ldrb r0, [r4] - adds r0, r5 - ldrb r0, [r0] - bl nullsub_8 - ldrb r1, [r4] - adds r1, r5 - ldrb r0, [r1] - movs r2, 0x2 -_0812B5F2: - eors r0, r2 - strb r0, [r1] - ldrb r0, [r4] - adds r0, r5 - ldrb r0, [r0] - movs r1, 0 - bl sub_802E3E4 - b _0812B64E - .align 2, 0 -_0812B604: .4byte gActionSelectionCursor -_0812B608: .4byte gActiveBank -_0812B60C: - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0812B64E - ldr r5, _0812B654 @ =gActionSelectionCursor - ldr r4, _0812B658 @ =gActiveBank - ldrb r0, [r4] - adds r0, r5 - ldrb r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _0812B64E - movs r0, 0x5 - bl PlaySE - ldrb r0, [r4] - adds r0, r5 - ldrb r0, [r0] - bl nullsub_8 - ldrb r1, [r4] - adds r1, r5 - ldrb r0, [r1] - movs r2, 0x2 - eors r0, r2 - strb r0, [r1] - ldrb r0, [r4] - adds r0, r5 - ldrb r0, [r0] - movs r1, 0 - bl sub_802E3E4 -_0812B64E: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0812B654: .4byte gActionSelectionCursor -_0812B658: .4byte gActiveBank - thumb_func_end bx_battle_menu_t6_2 - - thumb_func_start sub_812B65C -sub_812B65C: @ 812B65C - push {lr} - ldr r2, _0812B684 @ =gSprites - ldr r1, _0812B688 @ =gObjectBankIDs - ldr r0, _0812B68C @ =gActiveBank - ldrb r0, [r0] - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r1, [r0] - ldr r0, _0812B690 @ =SpriteCallbackDummy - cmp r1, r0 - bne _0812B680 - bl SafariBufferExecCompleted -_0812B680: - pop {r0} - bx r0 - .align 2, 0 -_0812B684: .4byte gSprites -_0812B688: .4byte gObjectBankIDs -_0812B68C: .4byte gActiveBank -_0812B690: .4byte SpriteCallbackDummy - thumb_func_end sub_812B65C - - thumb_func_start sub_812B694 -sub_812B694: @ 812B694 - push {lr} - ldr r0, _0812B6A8 @ =gUnknown_03004210 - ldrh r0, [r0, 0x16] - cmp r0, 0 - bne _0812B6A2 - bl SafariBufferExecCompleted -_0812B6A2: - pop {r0} - bx r0 - .align 2, 0 -_0812B6A8: .4byte gUnknown_03004210 - thumb_func_end sub_812B694 - - thumb_func_start sub_812B6AC -sub_812B6AC: @ 812B6AC - push {lr} - ldr r0, _0812B6DC @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0812B6D6 - ldr r2, _0812B6E0 @ =gMain - ldr r0, _0812B6E4 @ =0x0000043d - adds r3, r2, r0 - ldrb r1, [r3] - movs r0, 0x3 - negs r0, r0 - ands r0, r1 - strb r0, [r3] - ldr r0, _0812B6E8 @ =gPreBattleCallback1 - ldr r0, [r0] - str r0, [r2] - ldr r0, [r2, 0x8] - bl SetMainCallback2 -_0812B6D6: - pop {r0} - bx r0 - .align 2, 0 -_0812B6DC: .4byte gPaletteFade -_0812B6E0: .4byte gMain -_0812B6E4: .4byte 0x0000043d -_0812B6E8: .4byte gPreBattleCallback1 - thumb_func_end sub_812B6AC - - thumb_func_start bx_wait_t6 -bx_wait_t6: @ 812B6EC - push {lr} - ldr r0, _0812B718 @ =gDoingBattleAnim - ldrb r0, [r0] - cmp r0, 0 - beq _0812B70E - ldr r0, _0812B71C @ =gActiveBank - ldrb r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - ldr r1, _0812B720 @ =0x02017810 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - bne _0812B712 -_0812B70E: - bl SafariBufferExecCompleted -_0812B712: - pop {r0} - bx r0 - .align 2, 0 -_0812B718: .4byte gDoingBattleAnim -_0812B71C: .4byte gActiveBank -_0812B720: .4byte 0x02017810 - thumb_func_end bx_wait_t6 - - thumb_func_start sub_812B724 -sub_812B724: @ 812B724 - push {lr} - ldr r0, _0812B748 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0812B744 - ldr r1, _0812B74C @ =gBattleBankFunc - ldr r0, _0812B750 @ =gActiveBank - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r1, _0812B754 @ =sub_812B758 - str r1, [r0] - bl sub_810BADC -_0812B744: - pop {r0} - bx r0 - .align 2, 0 -_0812B748: .4byte gPaletteFade -_0812B74C: .4byte gBattleBankFunc -_0812B750: .4byte gActiveBank -_0812B754: .4byte sub_812B758 - thumb_func_end sub_812B724 - - thumb_func_start sub_812B758 -sub_812B758: @ 812B758 - push {lr} - ldr r0, _0812B784 @ =gMain - ldr r1, [r0, 0x4] - ldr r0, _0812B788 @ =sub_800F808 - cmp r1, r0 - bne _0812B77E - ldr r0, _0812B78C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0812B77E - ldr r0, _0812B790 @ =gScriptItemId - ldrh r1, [r0] - movs r0, 0x1 - bl dp01_build_cmdbuf_x23_aa_0 - bl SafariBufferExecCompleted -_0812B77E: - pop {r0} - bx r0 - .align 2, 0 -_0812B784: .4byte gMain -_0812B788: .4byte sub_800F808 -_0812B78C: .4byte gPaletteFade -_0812B790: .4byte gScriptItemId - thumb_func_end sub_812B758 - - thumb_func_start sub_812B794 -sub_812B794: @ 812B794 - push {lr} - ldr r0, _0812B7B8 @ =gActiveBank - ldrb r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - ldr r1, _0812B7BC @ =0x02017810 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - bne _0812B7B2 - bl SafariBufferExecCompleted -_0812B7B2: - pop {r0} - bx r0 - .align 2, 0 -_0812B7B8: .4byte gActiveBank -_0812B7BC: .4byte 0x02017810 - thumb_func_end sub_812B794 - - thumb_func_start SafariBufferExecCompleted -SafariBufferExecCompleted: @ 812B7C0 - push {r4,lr} - sub sp, 0x4 - ldr r1, _0812B800 @ =gBattleBankFunc - ldr r4, _0812B804 @ =gActiveBank - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, _0812B808 @ =SafariBufferRunCommand - str r1, [r0] - ldr r0, _0812B80C @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0812B814 - bl GetMultiplayerId - mov r1, sp - strb r0, [r1] - movs r0, 0x2 - movs r1, 0x4 - mov r2, sp - bl dp01_prepare_buffer_wireless_probably - ldr r1, _0812B810 @ =gBattleBufferA - ldrb r0, [r4] - lsls r0, 9 - adds r0, r1 - movs r1, 0x38 - strb r1, [r0] - b _0812B826 - .align 2, 0 -_0812B800: .4byte gBattleBankFunc -_0812B804: .4byte gActiveBank -_0812B808: .4byte SafariBufferRunCommand -_0812B80C: .4byte gBattleTypeFlags -_0812B810: .4byte gBattleBufferA -_0812B814: - ldr r2, _0812B830 @ =gBattleExecBuffer - ldr r1, _0812B834 @ =gBitTable - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - ldr r0, [r2] - bics r0, r1 - str r0, [r2] -_0812B826: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812B830: .4byte gBattleExecBuffer -_0812B834: .4byte gBitTable - thumb_func_end SafariBufferExecCompleted - - thumb_func_start unref_sub_812B838 -unref_sub_812B838: @ 812B838 - push {lr} - ldr r0, _0812B85C @ =gActiveBank - ldrb r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - ldr r1, _0812B860 @ =0x02017810 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _0812B856 - bl SafariBufferExecCompleted -_0812B856: - pop {r0} - bx r0 - .align 2, 0 -_0812B85C: .4byte gActiveBank -_0812B860: .4byte 0x02017810 - thumb_func_end unref_sub_812B838 - - thumb_func_start SafariHandleGetAttributes -SafariHandleGetAttributes: @ 812B864 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandleGetAttributes - - thumb_func_start sub_812B870 -sub_812B870: @ 812B870 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812B870 - - thumb_func_start sub_812B87C -sub_812B87C: @ 812B87C - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812B87C - - thumb_func_start sub_812B888 -sub_812B888: @ 812B888 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812B888 - - thumb_func_start sub_812B894 -sub_812B894: @ 812B894 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812B894 - - thumb_func_start sub_812B8A0 -sub_812B8A0: @ 812B8A0 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812B8A0 - - thumb_func_start sub_812B8AC -sub_812B8AC: @ 812B8AC - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812B8AC - - thumb_func_start sub_812B8B8 -sub_812B8B8: @ 812B8B8 - push {r4-r6,lr} - ldr r4, _0812B96C @ =gSaveBlock2 - ldrb r0, [r4, 0x8] - ldr r5, _0812B970 @ =gActiveBank - ldrb r1, [r5] - bl LoadPlayerTrainerBankSprite - ldrb r6, [r4, 0x8] - ldrb r0, [r5] - bl GetBankIdentity - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r6, 0 - bl GetMonSpriteTemplate_803C5A0 - ldr r0, _0812B974 @ =gUnknown_02024E8C - ldr r2, _0812B978 @ =gTrainerBackPicCoords - ldrb r1, [r4, 0x8] - lsls r1, 2 - adds r1, r2 - ldrb r1, [r1] - movs r2, 0x8 - subs r2, r1 - lsls r2, 18 - movs r1, 0xA0 - lsls r1, 15 - adds r2, r1 - asrs r2, 16 - movs r1, 0x50 - movs r3, 0x1E - bl CreateSprite - ldr r6, _0812B97C @ =gObjectBankIDs - ldrb r1, [r5] - adds r1, r6 - strb r0, [r1] - ldr r4, _0812B980 @ =gSprites - ldrb r3, [r5] - adds r0, r3, r6 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - lsls r3, 4 - ldrb r2, [r1, 0x5] - movs r0, 0xF - ands r0, r2 - orrs r0, r3 - strb r0, [r1, 0x5] - ldrb r0, [r5] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0xF0 - strh r1, [r0, 0x24] - ldrb r0, [r5] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldr r1, _0812B984 @ =0x0000fffe - strh r1, [r0, 0x2E] - ldrb r0, [r5] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r4, 0x1C - adds r0, r4 - ldr r1, _0812B988 @ =sub_80313A0 - str r1, [r0] - ldr r1, _0812B98C @ =gBattleBankFunc - ldrb r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r1, _0812B990 @ =sub_812B65C - str r1, [r0] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0812B96C: .4byte gSaveBlock2 -_0812B970: .4byte gActiveBank -_0812B974: .4byte gUnknown_02024E8C -_0812B978: .4byte gTrainerBackPicCoords -_0812B97C: .4byte gObjectBankIDs -_0812B980: .4byte gSprites -_0812B984: .4byte 0x0000fffe -_0812B988: .4byte sub_80313A0 -_0812B98C: .4byte gBattleBankFunc -_0812B990: .4byte sub_812B65C - thumb_func_end sub_812B8B8 - - thumb_func_start sub_812B994 -sub_812B994: @ 812B994 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812B994 - - thumb_func_start sub_812B9A0 -sub_812B9A0: @ 812B9A0 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812B9A0 - - thumb_func_start sub_812B9AC -sub_812B9AC: @ 812B9AC - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812B9AC - - thumb_func_start sub_812B9B8 -sub_812B9B8: @ 812B9B8 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812B9B8 - - thumb_func_start sub_812B9C4 -sub_812B9C4: @ 812B9C4 - push {r4,r5,lr} - ldr r1, _0812BA00 @ =0x02017840 - movs r0, 0x4 - strb r0, [r1, 0x8] - ldr r1, _0812BA04 @ =gDoingBattleAnim - movs r0, 0x1 - strb r0, [r1] - ldr r5, _0812BA08 @ =gActiveBank - ldrb r4, [r5] - movs r0, 0x1 - bl GetBankByPlayerAI - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - adds r0, r4, 0 - adds r1, r4, 0 - movs r3, 0x4 - bl move_anim_start_t4 - ldr r1, _0812BA0C @ =gBattleBankFunc - ldrb r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r1, _0812BA10 @ =bx_wait_t6 - str r1, [r0] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0812BA00: .4byte 0x02017840 -_0812BA04: .4byte gDoingBattleAnim -_0812BA08: .4byte gActiveBank -_0812BA0C: .4byte gBattleBankFunc -_0812BA10: .4byte bx_wait_t6 - thumb_func_end sub_812B9C4 - - thumb_func_start sub_812BA14 -sub_812BA14: @ 812BA14 - push {r4,r5,lr} - ldr r1, _0812BA58 @ =gBattleBufferA - ldr r5, _0812BA5C @ =gActiveBank - ldrb r0, [r5] - lsls r0, 9 - adds r1, 0x1 - adds r0, r1 - ldrb r1, [r0] - ldr r0, _0812BA60 @ =0x02017840 - strb r1, [r0, 0x8] - ldr r1, _0812BA64 @ =gDoingBattleAnim - movs r0, 0x1 - strb r0, [r1] - ldrb r4, [r5] - movs r0, 0x1 - bl GetBankByPlayerAI - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - adds r0, r4, 0 - adds r1, r4, 0 - movs r3, 0x4 - bl move_anim_start_t4 - ldr r1, _0812BA68 @ =gBattleBankFunc - ldrb r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r1, _0812BA6C @ =bx_wait_t6 - str r1, [r0] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0812BA58: .4byte gBattleBufferA -_0812BA5C: .4byte gActiveBank -_0812BA60: .4byte 0x02017840 -_0812BA64: .4byte gDoingBattleAnim -_0812BA68: .4byte gBattleBankFunc -_0812BA6C: .4byte bx_wait_t6 - thumb_func_end sub_812BA14 - - thumb_func_start sub_812BA70 -sub_812BA70: @ 812BA70 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812BA70 - - thumb_func_start sub_812BA7C -sub_812BA7C: @ 812BA7C - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812BA7C - - thumb_func_start SafariHandlePrintString -SafariHandlePrintString: @ 812BA88 - push {r4,lr} - sub sp, 0x4 - ldr r0, _0812BACC @ =gUnknown_030042A4 - movs r1, 0 - strh r1, [r0] - ldr r0, _0812BAD0 @ =gUnknown_030042A0 - strh r1, [r0] - ldr r4, _0812BAD4 @ =gActiveBank - ldrb r0, [r4] - lsls r0, 9 - ldr r1, _0812BAD8 @ =gUnknown_02023A62 - adds r0, r1 - ldrh r0, [r0] - bl BufferStringBattle - ldr r0, _0812BADC @ =gUnknown_03004210 - ldr r1, _0812BAE0 @ =gDisplayedStringBattle - movs r2, 0xF - str r2, [sp] - movs r2, 0x90 - movs r3, 0x2 - bl sub_8002EB0 - ldr r1, _0812BAE4 @ =gBattleBankFunc - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, _0812BAE8 @ =sub_812B694 - str r1, [r0] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812BACC: .4byte gUnknown_030042A4 -_0812BAD0: .4byte gUnknown_030042A0 -_0812BAD4: .4byte gActiveBank -_0812BAD8: .4byte gUnknown_02023A62 -_0812BADC: .4byte gUnknown_03004210 -_0812BAE0: .4byte gDisplayedStringBattle -_0812BAE4: .4byte gBattleBankFunc -_0812BAE8: .4byte sub_812B694 - thumb_func_end SafariHandlePrintString - - thumb_func_start SafariHandlePrintStringPlayerOnly -SafariHandlePrintStringPlayerOnly: @ 812BAEC - push {lr} - ldr r0, _0812BB04 @ =gActiveBank - ldrb r0, [r0] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _0812BB08 - bl SafariHandlePrintString - b _0812BB0C - .align 2, 0 -_0812BB04: .4byte gActiveBank -_0812BB08: - bl SafariBufferExecCompleted -_0812BB0C: - pop {r0} - bx r0 - thumb_func_end SafariHandlePrintStringPlayerOnly - -.section .text_812BBFC - - thumb_func_start sub_812BBFC -sub_812BBFC: @ 812BBFC - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812BBFC - - thumb_func_start sub_812BC08 -sub_812BC08: @ 812BC08 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812BC08 - - thumb_func_start sub_812BC14 -sub_812BC14: @ 812BC14 - push {lr} - sub sp, 0x4 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r1, _0812BC44 @ =gBattleBankFunc - ldr r2, _0812BC48 @ =gActiveBank - ldrb r0, [r2] - lsls r0, 2 - adds r0, r1 - ldr r1, _0812BC4C @ =sub_812B724 - str r1, [r0] - ldr r1, _0812BC50 @ =gBankInMenu - ldrb r0, [r2] - strb r0, [r1] - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_0812BC44: .4byte gBattleBankFunc -_0812BC48: .4byte gActiveBank -_0812BC4C: .4byte sub_812B724 -_0812BC50: .4byte gBankInMenu - thumb_func_end sub_812BC14 - - thumb_func_start sub_812BC54 -sub_812BC54: @ 812BC54 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812BC54 - - thumb_func_start sub_812BC60 -sub_812BC60: @ 812BC60 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812BC60 - - thumb_func_start sub_812BC6C -sub_812BC6C: @ 812BC6C - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812BC6C - - thumb_func_start sub_812BC78 -sub_812BC78: @ 812BC78 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812BC78 - - thumb_func_start sub_812BC84 -sub_812BC84: @ 812BC84 - push {lr} - ldr r0, _0812BCB0 @ =gHealthboxIDs - ldr r1, _0812BCB4 @ =gActiveBank - ldrb r1, [r1] - adds r0, r1, r0 - ldrb r0, [r0] - ldr r2, _0812BCB8 @ =gBattlePartyID - lsls r1, 1 - adds r1, r2 - ldrh r2, [r1] - movs r1, 0x64 - muls r1, r2 - ldr r2, _0812BCBC @ =gPlayerParty - adds r1, r2 - movs r2, 0xB - bl sub_8045A5C - bl SafariBufferExecCompleted - pop {r0} - bx r0 - .align 2, 0 -_0812BCB0: .4byte gHealthboxIDs -_0812BCB4: .4byte gActiveBank -_0812BCB8: .4byte gBattlePartyID -_0812BCBC: .4byte gPlayerParty - thumb_func_end sub_812BC84 - - thumb_func_start sub_812BCC0 -sub_812BCC0: @ 812BCC0 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812BCC0 - - thumb_func_start sub_812BCCC -sub_812BCCC: @ 812BCCC - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812BCCC - - thumb_func_start sub_812BCD8 -sub_812BCD8: @ 812BCD8 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812BCD8 - - thumb_func_start sub_812BCE4 -sub_812BCE4: @ 812BCE4 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812BCE4 - - thumb_func_start sub_812BCF0 -sub_812BCF0: @ 812BCF0 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812BCF0 - - thumb_func_start sub_812BCFC -sub_812BCFC: @ 812BCFC - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812BCFC - - thumb_func_start sub_812BD08 -sub_812BD08: @ 812BD08 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812BD08 - - thumb_func_start sub_812BD14 -sub_812BD14: @ 812BD14 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812BD14 - - thumb_func_start sub_812BD20 -sub_812BD20: @ 812BD20 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812BD20 - - thumb_func_start sub_812BD2C -sub_812BD2C: @ 812BD2C - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812BD2C - - thumb_func_start sub_812BD38 -sub_812BD38: @ 812BD38 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812BD38 - - thumb_func_start sub_812BD44 -sub_812BD44: @ 812BD44 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812BD44 - - thumb_func_start sub_812BD50 -sub_812BD50: @ 812BD50 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812BD50 - - thumb_func_start sub_812BD5C -sub_812BD5C: @ 812BD5C - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812BD5C - - thumb_func_start sub_812BD68 -sub_812BD68: @ 812BD68 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812BD68 - - thumb_func_start sub_812BD74 -sub_812BD74: @ 812BD74 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812BD74 - - thumb_func_start sub_812BD80 -sub_812BD80: @ 812BD80 - push {r4,lr} - ldr r4, _0812BDBC @ =gActiveBank - ldrb r0, [r4] - bl GetBankSide - lsls r0, 24 - movs r3, 0x3F - cmp r0, 0 - bne _0812BD94 - movs r3, 0xC0 -_0812BD94: - ldr r2, _0812BDC0 @ =gBattleBufferA - ldrb r1, [r4] - lsls r1, 9 - adds r0, r2, 0x1 - adds r0, r1, r0 - ldrb r0, [r0] - adds r2, 0x2 - adds r1, r2 - ldrb r1, [r1] - lsls r1, 8 - orrs r0, r1 - lsls r1, r3, 24 - asrs r1, 24 - bl PlaySE12WithPanning - bl SafariBufferExecCompleted - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812BDBC: .4byte gActiveBank -_0812BDC0: .4byte gBattleBufferA - thumb_func_end sub_812BD80 - - thumb_func_start sub_812BDC4 -sub_812BDC4: @ 812BDC4 - push {lr} - ldr r2, _0812BDEC @ =gBattleBufferA - ldr r0, _0812BDF0 @ =gActiveBank - ldrb r1, [r0] - lsls r1, 9 - adds r0, r2, 0x1 - adds r0, r1, r0 - ldrb r0, [r0] - adds r2, 0x2 - adds r1, r2 - ldrb r1, [r1] - lsls r1, 8 - orrs r0, r1 - bl PlayFanfare - bl SafariBufferExecCompleted - pop {r0} - bx r0 - .align 2, 0 -_0812BDEC: .4byte gBattleBufferA -_0812BDF0: .4byte gActiveBank - thumb_func_end sub_812BDC4 - - thumb_func_start sub_812BDF4 -sub_812BDF4: @ 812BDF4 - push {lr} - ldr r1, _0812BE24 @ =gBattlePartyID - ldr r0, _0812BE28 @ =gActiveBank - ldrb r0, [r0] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0812BE2C @ =gPlayerParty - adds r0, r1 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x19 - bl PlayCry1 - bl SafariBufferExecCompleted - pop {r0} - bx r0 - .align 2, 0 -_0812BE24: .4byte gBattlePartyID -_0812BE28: .4byte gActiveBank -_0812BE2C: .4byte gPlayerParty - thumb_func_end sub_812BDF4 - - thumb_func_start dp01t_2E_6_battle_intro -dp01t_2E_6_battle_intro: @ 812BE30 - push {lr} - ldr r1, _0812BE58 @ =gBattleBufferA - ldr r0, _0812BE5C @ =gActiveBank - ldrb r0, [r0] - lsls r0, 9 - adds r1, 0x1 - adds r0, r1 - ldrb r0, [r0] - bl sub_80E43C0 - ldr r2, _0812BE60 @ =gUnknown_02024DE8 - ldrh r0, [r2] - movs r1, 0x1 - orrs r0, r1 - strh r0, [r2] - bl SafariBufferExecCompleted - pop {r0} - bx r0 - .align 2, 0 -_0812BE58: .4byte gBattleBufferA -_0812BE5C: .4byte gActiveBank -_0812BE60: .4byte gUnknown_02024DE8 - thumb_func_end dp01t_2E_6_battle_intro - - thumb_func_start sub_812BE64 -sub_812BE64: @ 812BE64 - push {r4,r5,lr} - ldr r5, _0812BEA0 @ =gHealthboxIDs - ldr r4, _0812BEA4 @ =gActiveBank - ldrb r1, [r4] - adds r0, r1, r5 - ldrb r0, [r0] - ldr r2, _0812BEA8 @ =gBattlePartyID - lsls r1, 1 - adds r1, r2 - ldrh r2, [r1] - movs r1, 0x64 - muls r1, r2 - ldr r2, _0812BEAC @ =gPlayerParty - adds r1, r2 - movs r2, 0xA - bl sub_8045A5C - ldrb r0, [r4] - bl sub_804777C - ldrb r0, [r4] - adds r0, r5 - ldrb r0, [r0] - bl sub_8043DFC - bl SafariBufferExecCompleted - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0812BEA0: .4byte gHealthboxIDs -_0812BEA4: .4byte gActiveBank -_0812BEA8: .4byte gBattlePartyID -_0812BEAC: .4byte gPlayerParty - thumb_func_end sub_812BE64 - - thumb_func_start sub_812BEB0 -sub_812BEB0: @ 812BEB0 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812BEB0 - - thumb_func_start sub_812BEBC -sub_812BEBC: @ 812BEBC - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812BEBC - - thumb_func_start sub_812BEC8 -sub_812BEC8: @ 812BEC8 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812BEC8 - - thumb_func_start sub_812BED4 -sub_812BED4: @ 812BED4 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812BED4 - - thumb_func_start sub_812BEE0 -sub_812BEE0: @ 812BEE0 - push {r4-r6,lr} - sub sp, 0x4 - ldr r5, _0812BF18 @ =gBattleBufferA - ldr r6, _0812BF1C @ =gActiveBank - ldrb r2, [r6] - lsls r1, r2, 9 - adds r0, r5, 0x1 - adds r0, r1, r0 - ldrb r3, [r0] - adds r0, r5, 0x2 - adds r0, r1, r0 - ldrb r4, [r0] - adds r5, 0x3 - adds r1, r5 - ldrb r0, [r1] - lsls r0, 8 - orrs r4, r0 - str r4, [sp] - adds r0, r2, 0 - adds r1, r2, 0 - bl move_anim_start_t3 - lsls r0, 24 - cmp r0, 0 - beq _0812BF20 - bl SafariBufferExecCompleted - b _0812BF2C - .align 2, 0 -_0812BF18: .4byte gBattleBufferA -_0812BF1C: .4byte gActiveBank -_0812BF20: - ldr r0, _0812BF34 @ =gBattleBankFunc - ldrb r1, [r6] - lsls r1, 2 - adds r1, r0 - ldr r0, _0812BF38 @ =sub_812B794 - str r0, [r1] -_0812BF2C: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0812BF34: .4byte gBattleBankFunc -_0812BF38: .4byte sub_812B794 - thumb_func_end sub_812BEE0 - - thumb_func_start sub_812BF3C -sub_812BF3C: @ 812BF3C - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812BF3C - - thumb_func_start sub_812BF48 -sub_812BF48: @ 812BF48 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_812BF48 - - thumb_func_start sub_812BF54 -sub_812BF54: @ 812BF54 - push {r4,lr} - ldr r2, _0812BF98 @ =gBattleOutcome - ldr r1, _0812BF9C @ =gBattleBufferA - ldr r4, _0812BFA0 @ =gActiveBank - ldrb r0, [r4] - lsls r0, 9 - adds r1, 0x1 - adds r0, r1 - ldrb r0, [r0] - strb r0, [r2] - movs r0, 0x5 - bl FadeOutMapMusic - movs r0, 0x3 - bl BeginFastPaletteFade - bl SafariBufferExecCompleted - ldr r0, _0812BFA4 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x6 - ands r0, r1 - cmp r0, 0x2 - bne _0812BF90 - ldr r0, _0812BFA8 @ =gBattleBankFunc - ldrb r1, [r4] - lsls r1, 2 - adds r1, r0 - ldr r0, _0812BFAC @ =sub_812B6AC - str r0, [r1] -_0812BF90: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812BF98: .4byte gBattleOutcome -_0812BF9C: .4byte gBattleBufferA -_0812BFA0: .4byte gActiveBank -_0812BFA4: .4byte gBattleTypeFlags -_0812BFA8: .4byte gBattleBankFunc -_0812BFAC: .4byte sub_812B6AC - thumb_func_end sub_812BF54 - - thumb_func_start nullsub_78 -nullsub_78: @ 812BFB0 - bx lr - thumb_func_end nullsub_78 - - .align 2, 0 @ Don't pad with nop. + .align 2, 0 @ Don't pad with nop. + \ No newline at end of file diff --git a/asm/battle_controller_linkopponent1.s b/asm/battle_controller_linkopponent1.s new file mode 100644 index 000000000..e53531703 --- /dev/null +++ b/asm/battle_controller_linkopponent1.s @@ -0,0 +1,1421 @@ + .include "constants/gba_constants.inc" + .include "constants/species_constants.inc" + .include "asm/macros.inc" + + .syntax unified + + .text + + + + thumb_func_start nullsub_47 +nullsub_47: @ 803750C + bx lr + thumb_func_end nullsub_47 + + thumb_func_start SetBankFuncToLinkOpponentBufferRunCommand +SetBankFuncToLinkOpponentBufferRunCommand: @ 8037510 + ldr r1, _08037520 @ =gBattleBankFunc + ldr r0, _08037524 @ =gActiveBank + ldrb r0, [r0] + lsls r0, 2 + adds r0, r1 + ldr r1, _08037528 @ =sub_803752C + str r1, [r0] + bx lr + .align 2, 0 +_08037520: .4byte gBattleBankFunc +_08037524: .4byte gActiveBank +_08037528: .4byte sub_803752C + thumb_func_end SetBankFuncToLinkOpponentBufferRunCommand + + thumb_func_start sub_803752C +sub_803752C: @ 803752C + push {lr} + ldr r2, _08037560 @ =gBattleExecBuffer + ldr r1, _08037564 @ =gBitTable + ldr r0, _08037568 @ =gActiveBank + ldrb r3, [r0] + lsls r0, r3, 2 + adds r0, r1 + ldr r1, [r2] + ldr r0, [r0] + ands r1, r0 + cmp r1, 0 + beq _08037578 + ldr r0, _0803756C @ =gBattleBufferA + lsls r1, r3, 9 + adds r1, r0 + ldrb r0, [r1] + cmp r0, 0x38 + bhi _08037574 + ldr r0, _08037570 @ =gLinkOpponentBufferCommands + ldrb r1, [r1] + lsls r1, 2 + adds r1, r0 + ldr r0, [r1] + bl _call_via_r0 + b _08037578 + .align 2, 0 +_08037560: .4byte gBattleExecBuffer +_08037564: .4byte gBitTable +_08037568: .4byte gActiveBank +_0803756C: .4byte gBattleBufferA +_08037570: .4byte gLinkOpponentBufferCommands +_08037574: + bl LinkOpponentBufferExecCompleted +_08037578: + pop {r0} + bx r0 + thumb_func_end sub_803752C + + thumb_func_start sub_803757C +sub_803757C: @ 803757C + push {lr} + ldr r2, _080375A4 @ =gSprites + ldr r1, _080375A8 @ =gObjectBankIDs + ldr r0, _080375AC @ =gActiveBank + ldrb r0, [r0] + adds r0, r1 + ldrb r1, [r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + adds r2, 0x1C + adds r0, r2 + ldr r1, [r0] + ldr r0, _080375B0 @ =SpriteCallbackDummy + cmp r1, r0 + bne _080375A0 + bl LinkOpponentBufferExecCompleted +_080375A0: + pop {r0} + bx r0 + .align 2, 0 +_080375A4: .4byte gSprites +_080375A8: .4byte gObjectBankIDs +_080375AC: .4byte gActiveBank +_080375B0: .4byte SpriteCallbackDummy + thumb_func_end sub_803757C + + thumb_func_start sub_80375B4 +sub_80375B4: @ 80375B4 + push {r4-r6,lr} + ldr r4, _0803762C @ =gSprites + ldr r6, _08037630 @ =gObjectBankIDs + ldr r5, _08037634 @ =gActiveBank + ldrb r0, [r5] + adds r0, r6 + ldrb r1, [r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r2, r0, 2 + adds r0, r4, 0 + adds r0, 0x1C + adds r0, r2, r0 + ldr r1, [r0] + ldr r0, _08037638 @ =SpriteCallbackDummy + cmp r1, r0 + bne _08037624 + adds r0, r2, r4 + ldrh r0, [r0, 0x6] + bl sub_8031B74 + ldrb r0, [r5] + adds r0, r6 + ldrb r0, [r0] + lsls r1, r0, 4 + adds r1, r0 + lsls r1, 2 + adds r1, r4 + ldrh r0, [r1, 0x38] + ldr r2, _0803763C @ =0x000003ff + ands r2, r0 + ldrh r3, [r1, 0x4] + ldr r0, _08037640 @ =0xfffffc00 + ands r0, r3 + orrs r0, r2 + strh r0, [r1, 0x4] + ldrb r0, [r5] + adds r0, r6 + ldrb r1, [r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + adds r0, r4 + bl FreeSpriteOamMatrix + ldrb r0, [r5] + adds r0, r6 + ldrb r1, [r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + adds r0, r4 + bl DestroySprite + bl LinkOpponentBufferExecCompleted +_08037624: + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_0803762C: .4byte gSprites +_08037630: .4byte gObjectBankIDs +_08037634: .4byte gActiveBank +_08037638: .4byte SpriteCallbackDummy +_0803763C: .4byte 0x000003ff +_08037640: .4byte 0xfffffc00 + thumb_func_end sub_80375B4 + + thumb_func_start sub_8037644 +sub_8037644: @ 8037644 + push {lr} + ldr r3, _08037678 @ =gActiveBank + ldrb r0, [r3] + lsls r1, r0, 1 + adds r1, r0 + lsls r1, 2 + ldr r2, _0803767C @ =0x02017810 + adds r1, r2 + ldrb r0, [r1, 0x9] + subs r0, 0x1 + strb r0, [r1, 0x9] + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0xFF + bne _08037674 + ldrb r0, [r3] + lsls r1, r0, 1 + adds r1, r0 + lsls r1, 2 + adds r1, r2 + movs r0, 0 + strb r0, [r1, 0x9] + bl LinkOpponentBufferExecCompleted +_08037674: + pop {r0} + bx r0 + .align 2, 0 +_08037678: .4byte gActiveBank +_0803767C: .4byte 0x02017810 + thumb_func_end sub_8037644 + + thumb_func_start sub_8037680 +sub_8037680: @ 8037680 + push {r4-r7,lr} + movs r6, 0 + bl IsDoubleBattle + lsls r0, 24 + cmp r0, 0 + beq _080376A4 + bl IsDoubleBattle + lsls r0, 24 + cmp r0, 0 + beq _080376D8 + ldr r0, _080376C4 @ =gBattleTypeFlags + ldrh r1, [r0] + movs r0, 0x40 + ands r0, r1 + cmp r0, 0 + beq _080376D8 +_080376A4: + ldr r2, _080376C8 @ =gSprites + ldr r1, _080376CC @ =gHealthboxIDs + ldr r0, _080376D0 @ =gActiveBank + ldrb r0, [r0] + adds r0, r1 + ldrb r1, [r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + adds r2, 0x1C + adds r0, r2 + ldr r1, [r0] + ldr r0, _080376D4 @ =SpriteCallbackDummy + cmp r1, r0 + bne _0803770E + b _0803770C + .align 2, 0 +_080376C4: .4byte gBattleTypeFlags +_080376C8: .4byte gSprites +_080376CC: .4byte gHealthboxIDs +_080376D0: .4byte gActiveBank +_080376D4: .4byte SpriteCallbackDummy +_080376D8: + ldr r2, _080377D8 @ =gSprites + ldr r5, _080377DC @ =gHealthboxIDs + ldr r0, _080377E0 @ =gActiveBank + ldrb r3, [r0] + adds r0, r3, r5 + ldrb r1, [r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + adds r2, 0x1C + adds r0, r2 + ldr r4, [r0] + ldr r0, _080377E4 @ =SpriteCallbackDummy + cmp r4, r0 + bne _0803770E + movs r0, 0x2 + eors r3, r0 + adds r0, r3, r5 + ldrb r1, [r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + adds r0, r2 + ldr r0, [r0] + cmp r0, r4 + bne _0803770E +_0803770C: + movs r6, 0x1 +_0803770E: + bl IsCryPlayingOrClearCrySongs + lsls r0, 24 + cmp r0, 0 + beq _0803771A + movs r6, 0 +_0803771A: + cmp r6, 0 + bne _08037720 + b _08037822 +_08037720: + ldr r7, _080377E0 @ =gActiveBank + ldrb r0, [r7] + bl GetBankIdentity + lsls r0, 24 + lsrs r3, r0, 24 + cmp r3, 0x1 + bne _080377B4 + ldrb r2, [r7] + lsls r0, r2, 1 + adds r0, r2 + lsls r0, 2 + ldr r5, _080377E8 @ =0x02017810 + adds r4, r0, r5 + ldrb r1, [r4, 0x1] + adds r0, r3, 0 + ands r0, r1 + cmp r0, 0 + beq _08037822 + movs r6, 0x2 + adds r1, r6, 0 + eors r1, r2 + lsls r0, r1, 1 + adds r0, r1 + lsls r0, 2 + adds r0, r5 + ldrb r1, [r0, 0x1] + adds r0, r3, 0 + ands r0, r1 + cmp r0, 0 + beq _08037822 + ldrb r1, [r4] + movs r3, 0x7F + adds r0, r3, 0 + ands r0, r1 + strb r0, [r4] + ldrb r0, [r7] + lsls r1, r0, 1 + adds r1, r0 + lsls r1, 2 + adds r1, r5 + ldrb r2, [r1, 0x1] + movs r4, 0x2 + negs r4, r4 + adds r0, r4, 0 + ands r0, r2 + strb r0, [r1, 0x1] + ldrb r0, [r7] + adds r1, r6, 0 + eors r1, r0 + lsls r0, r1, 1 + adds r0, r1 + lsls r0, 2 + adds r0, r5 + ldrb r1, [r0] + ands r3, r1 + strb r3, [r0] + ldrb r0, [r7] + adds r1, r6, 0 + eors r1, r0 + lsls r0, r1, 1 + adds r0, r1 + lsls r0, 2 + adds r0, r5 + ldrb r1, [r0, 0x1] + ands r4, r1 + strb r4, [r0, 0x1] + ldr r4, _080377EC @ =0x000027f9 + adds r0, r4, 0 + bl FreeSpriteTilesByTag + adds r0, r4, 0 + bl FreeSpritePaletteByTag +_080377B4: + ldr r0, _080377F0 @ =gBattleTypeFlags + ldrh r1, [r0] + movs r0, 0x40 + ands r0, r1 + cmp r0, 0 + beq _080377F8 + ldrb r0, [r7] + bl GetBankIdentity + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x1 + bne _08037804 + ldr r0, _080377F4 @ =gMPlay_BGM + bl m4aMPlayContinue + b _08037804 + .align 2, 0 +_080377D8: .4byte gSprites +_080377DC: .4byte gHealthboxIDs +_080377E0: .4byte gActiveBank +_080377E4: .4byte SpriteCallbackDummy +_080377E8: .4byte 0x02017810 +_080377EC: .4byte 0x000027f9 +_080377F0: .4byte gBattleTypeFlags +_080377F4: .4byte gMPlay_BGM +_080377F8: + ldr r0, _08037828 @ =gMPlay_BGM + ldr r1, _0803782C @ =0x0000ffff + movs r2, 0x80 + lsls r2, 1 + bl m4aMPlayVolumeControl +_08037804: + ldr r2, _08037830 @ =gActiveBank + ldrb r1, [r2] + lsls r0, r1, 1 + adds r0, r1 + lsls r0, 2 + ldr r1, _08037834 @ =0x02017810 + adds r0, r1 + movs r1, 0x3 + strb r1, [r0, 0x9] + ldr r1, _08037838 @ =gBattleBankFunc + ldrb r0, [r2] + lsls r0, 2 + adds r0, r1 + ldr r1, _0803783C @ =sub_8037644 + str r1, [r0] +_08037822: + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_08037828: .4byte gMPlay_BGM +_0803782C: .4byte 0x0000ffff +_08037830: .4byte gActiveBank +_08037834: .4byte 0x02017810 +_08037838: .4byte gBattleBankFunc +_0803783C: .4byte sub_8037644 + thumb_func_end sub_8037680 + + thumb_func_start sub_8037840 +sub_8037840: @ 8037840 + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + ldr r6, _08037A48 @ =gActiveBank + ldrb r2, [r6] + lsls r3, r2, 1 + adds r0, r3, r2 + lsls r0, 2 + ldr r5, _08037A4C @ =0x02017810 + adds r0, r5 + ldrb r1, [r0] + movs r4, 0x88 + adds r0, r4, 0 + ands r0, r1 + cmp r0, 0 + bne _08037878 + ldr r0, _08037A50 @ =gBattlePartyID + adds r0, r3, r0 + ldrh r1, [r0] + movs r0, 0x64 + muls r1, r0 + ldr r0, _08037A54 @ =gEnemyParty + adds r1, r0 + adds r0, r2, 0 + bl sub_8141828 +_08037878: + ldrb r0, [r6] + movs r7, 0x2 + adds r2, r7, 0 + eors r2, r0 + lsls r3, r2, 1 + adds r0, r3, r2 + lsls r0, 2 + adds r0, r5 + ldrb r1, [r0] + adds r0, r4, 0 + ands r0, r1 + cmp r0, 0 + bne _080378A6 + ldr r0, _08037A50 @ =gBattlePartyID + adds r0, r3, r0 + ldrh r1, [r0] + movs r0, 0x64 + muls r1, r0 + ldr r0, _08037A54 @ =gEnemyParty + adds r1, r0 + adds r0, r2, 0 + bl sub_8141828 +_080378A6: + ldrb r2, [r6] + lsls r0, r2, 1 + adds r0, r2 + lsls r0, 2 + adds r0, r5 + ldrb r1, [r0] + movs r3, 0x8 + adds r0, r3, 0 + ands r0, r1 + cmp r0, 0 + beq _080378BE + b _08037A3A +_080378BE: + adds r1, r2, 0 + eors r1, r7 + lsls r0, r1, 1 + adds r0, r1 + lsls r0, 2 + adds r0, r5 + ldrb r1, [r0] + adds r0, r3, 0 + ands r0, r1 + lsls r0, 24 + lsrs r4, r0, 24 + cmp r4, 0 + beq _080378DA + b _08037A3A +_080378DA: + ldr r0, _08037A58 @ =gBattleTypeFlags + ldrh r1, [r0] + movs r0, 0x40 + ands r0, r1 + cmp r0, 0 + beq _0803791A + adds r0, r2, 0 + bl GetBankIdentity + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x3 + bne _0803791A + ldrb r0, [r6] + lsls r1, r0, 1 + adds r1, r0 + lsls r1, 2 + adds r1, r5 + ldrb r0, [r1, 0x9] + adds r0, 0x1 + strb r0, [r1, 0x9] + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x1 + bne _0803790E + b _08037A3A +_0803790E: + ldrb r1, [r6] + lsls r0, r1, 1 + adds r0, r1 + lsls r0, 2 + adds r0, r5 + strb r4, [r0, 0x9] +_0803791A: + bl IsDoubleBattle + lsls r0, 24 + cmp r0, 0 + beq _080379B2 + ldr r0, _08037A58 @ =gBattleTypeFlags + ldrh r1, [r0] + movs r0, 0x40 + ands r0, r1 + cmp r0, 0 + bne _080379B2 + ldr r1, _08037A5C @ =gUnknown_0300434C + ldr r5, _08037A48 @ =gActiveBank + ldrb r0, [r5] + movs r4, 0x2 + eors r0, r4 + adds r0, r1 + ldrb r1, [r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + ldr r1, _08037A60 @ =gSprites + adds r0, r1 + bl DestroySprite + ldr r0, _08037A64 @ =gHealthboxIDs + mov r8, r0 + ldrb r0, [r5] + adds r1, r4, 0 + eors r1, r0 + mov r2, r8 + adds r0, r1, r2 + ldrb r0, [r0] + ldr r2, _08037A50 @ =gBattlePartyID + mov r10, r2 + lsls r1, 1 + add r1, r10 + ldrh r1, [r1] + movs r2, 0x64 + mov r9, r2 + mov r2, r9 + muls r2, r1 + adds r1, r2, 0 + ldr r6, _08037A54 @ =gEnemyParty + adds r1, r6 + movs r2, 0 + bl sub_8045A5C + ldrb r0, [r5] + eors r0, r4 + bl sub_804777C + ldrb r0, [r5] + eors r0, r4 + add r0, r8 + ldrb r0, [r0] + bl sub_8043DFC + ldrb r0, [r5] + eors r4, r0 + lsls r0, r4, 1 + add r0, r10 + ldrh r0, [r0] + mov r1, r9 + muls r1, r0 + adds r0, r1, 0 + adds r0, r6 + movs r1, 0xB + bl GetMonData + adds r1, r0, 0 + lsls r1, 16 + lsrs r1, 16 + adds r0, r4, 0 + bl sub_8032984 +_080379B2: + ldr r1, _08037A5C @ =gUnknown_0300434C + ldr r4, _08037A48 @ =gActiveBank + ldrb r0, [r4] + adds r0, r1 + ldrb r1, [r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + ldr r1, _08037A60 @ =gSprites + adds r0, r1 + bl DestroySprite + ldr r5, _08037A64 @ =gHealthboxIDs + ldrb r1, [r4] + adds r0, r1, r5 + ldrb r0, [r0] + ldr r2, _08037A50 @ =gBattlePartyID + mov r9, r2 + lsls r1, 1 + add r1, r9 + ldrh r1, [r1] + movs r2, 0x64 + mov r8, r2 + mov r2, r8 + muls r2, r1 + adds r1, r2, 0 + ldr r6, _08037A54 @ =gEnemyParty + adds r1, r6 + movs r2, 0 + bl sub_8045A5C + ldrb r0, [r4] + bl sub_804777C + ldrb r0, [r4] + adds r0, r5 + ldrb r0, [r0] + bl sub_8043DFC + ldrb r5, [r4] + lsls r0, r5, 1 + add r0, r9 + ldrh r0, [r0] + mov r1, r8 + muls r1, r0 + adds r0, r1, 0 + adds r0, r6 + movs r1, 0xB + bl GetMonData + adds r1, r0, 0 + lsls r1, 16 + lsrs r1, 16 + adds r0, r5, 0 + bl sub_8032984 + ldr r2, _08037A68 @ =0x02017840 + ldrb r1, [r2, 0x9] + movs r0, 0x2 + negs r0, r0 + ands r0, r1 + strb r0, [r2, 0x9] + ldr r1, _08037A6C @ =gBattleBankFunc + ldrb r0, [r4] + lsls r0, 2 + adds r0, r1 + ldr r1, _08037A70 @ =sub_8037680 + str r1, [r0] +_08037A3A: + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_08037A48: .4byte gActiveBank +_08037A4C: .4byte 0x02017810 +_08037A50: .4byte gBattlePartyID +_08037A54: .4byte gEnemyParty +_08037A58: .4byte gBattleTypeFlags +_08037A5C: .4byte gUnknown_0300434C +_08037A60: .4byte gSprites +_08037A64: .4byte gHealthboxIDs +_08037A68: .4byte 0x02017840 +_08037A6C: .4byte gBattleBankFunc +_08037A70: .4byte sub_8037680 + thumb_func_end sub_8037840 + + thumb_func_start sub_8037A74 +sub_8037A74: @ 8037A74 + push {r4-r7,lr} + ldr r2, _08037ACC @ =gSprites + ldr r0, _08037AD0 @ =gObjectBankIDs + ldr r7, _08037AD4 @ =gActiveBank + ldrb r3, [r7] + adds r0, r3, r0 + ldrb r1, [r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + adds r1, r0, r2 + adds r0, r1, 0 + adds r0, 0x3F + ldrb r0, [r0] + lsls r0, 27 + lsrs r2, r0, 31 + cmp r2, 0x1 + bne _08037B18 + movs r4, 0x24 + ldrsh r0, [r1, r4] + cmp r0, 0 + bne _08037B18 + lsls r4, r3, 1 + adds r0, r4, r3 + lsls r0, 2 + ldr r6, _08037AD8 @ =0x02017810 + adds r1, r0, r6 + ldrb r5, [r1] + movs r0, 0x80 + ands r0, r5 + cmp r0, 0 + bne _08037AE4 + ldr r0, _08037ADC @ =gBattlePartyID + adds r0, r4, r0 + ldrh r1, [r0] + movs r0, 0x64 + muls r1, r0 + ldr r0, _08037AE0 @ =gEnemyParty + adds r1, r0 + adds r0, r3, 0 + bl sub_8141828 + b _08037B18 + .align 2, 0 +_08037ACC: .4byte gSprites +_08037AD0: .4byte gObjectBankIDs +_08037AD4: .4byte gActiveBank +_08037AD8: .4byte 0x02017810 +_08037ADC: .4byte gBattlePartyID +_08037AE0: .4byte gEnemyParty +_08037AE4: + ldrb r0, [r1, 0x1] + ands r2, r0 + cmp r2, 0 + beq _08037B18 + movs r0, 0x7F + ands r0, r5 + strb r0, [r1] + ldrb r0, [r7] + lsls r1, r0, 1 + adds r1, r0 + lsls r1, 2 + adds r1, r6 + ldrb r2, [r1, 0x1] + movs r0, 0x2 + negs r0, r0 + ands r0, r2 + strb r0, [r1, 0x1] + ldr r4, _08037B20 @ =0x000027f9 + adds r0, r4, 0 + bl FreeSpriteTilesByTag + adds r0, r4, 0 + bl FreeSpritePaletteByTag + bl LinkOpponentBufferExecCompleted +_08037B18: + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_08037B20: .4byte 0x000027f9 + thumb_func_end sub_8037A74 + + thumb_func_start sub_8037B24 +sub_8037B24: @ 8037B24 + push {r4-r6,lr} + ldr r6, _08037B64 @ =gActiveBank + ldrb r0, [r6] + ldr r5, _08037B68 @ =gHealthboxIDs + adds r1, r0, r5 + ldrb r1, [r1] + movs r2, 0 + movs r3, 0 + bl sub_8045C78 + adds r4, r0, 0 + lsls r4, 16 + lsrs r4, 16 + ldrb r0, [r6] + adds r0, r5 + ldrb r0, [r0] + bl sub_8043DFC + lsls r4, 16 + asrs r1, r4, 16 + movs r0, 0x1 + negs r0, r0 + cmp r1, r0 + beq _08037B6C + ldrb r0, [r6] + adds r0, r5 + ldrb r0, [r0] + movs r2, 0 + bl sub_80440EC + b _08037B70 + .align 2, 0 +_08037B64: .4byte gActiveBank +_08037B68: .4byte gHealthboxIDs +_08037B6C: + bl LinkOpponentBufferExecCompleted +_08037B70: + pop {r4-r6} + pop {r0} + bx r0 + thumb_func_end sub_8037B24 + + thumb_func_start sub_8037B78 +sub_8037B78: @ 8037B78 + push {lr} + ldr r2, _08037BAC @ =gSprites + ldr r0, _08037BB0 @ =gObjectBankIDs + ldr r1, _08037BB4 @ =gActiveBank + ldrb r3, [r1] + adds r0, r3, r0 + ldrb r1, [r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + adds r0, r2 + adds r0, 0x3E + ldrb r0, [r0] + lsls r0, 31 + cmp r0, 0 + bne _08037BA6 + ldr r0, _08037BB8 @ =gHealthboxIDs + adds r0, r3, r0 + ldrb r0, [r0] + bl sub_8043DB0 + bl LinkOpponentBufferExecCompleted +_08037BA6: + pop {r0} + bx r0 + .align 2, 0 +_08037BAC: .4byte gSprites +_08037BB0: .4byte gObjectBankIDs +_08037BB4: .4byte gActiveBank +_08037BB8: .4byte gHealthboxIDs + thumb_func_end sub_8037B78 + + thumb_func_start sub_8037BBC +sub_8037BBC: @ 8037BBC + push {r4-r6,lr} + ldr r6, _08037C18 @ =gActiveBank + ldrb r2, [r6] + lsls r0, r2, 1 + adds r0, r2 + lsls r0, 2 + ldr r1, _08037C1C @ =0x02017810 + adds r0, r1 + ldrb r1, [r0] + movs r0, 0x40 + ands r0, r1 + cmp r0, 0 + bne _08037C12 + ldr r5, _08037C20 @ =gObjectBankIDs + adds r0, r2, r5 + ldrb r1, [r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + ldr r4, _08037C24 @ =gSprites + adds r0, r4 + bl FreeSpriteOamMatrix + ldrb r0, [r6] + adds r0, r5 + ldrb r1, [r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + adds r0, r4 + bl DestroySprite + ldrb r0, [r6] + bl sub_8032A08 + ldr r1, _08037C28 @ =gHealthboxIDs + ldrb r0, [r6] + adds r0, r1 + ldrb r0, [r0] + bl sub_8043DB0 + bl LinkOpponentBufferExecCompleted +_08037C12: + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_08037C18: .4byte gActiveBank +_08037C1C: .4byte 0x02017810 +_08037C20: .4byte gObjectBankIDs +_08037C24: .4byte gSprites +_08037C28: .4byte gHealthboxIDs + thumb_func_end sub_8037BBC + + thumb_func_start sub_8037C2C +sub_8037C2C: @ 8037C2C + push {lr} + ldr r0, _08037C40 @ =gUnknown_03004210 + ldrh r0, [r0, 0x16] + cmp r0, 0 + bne _08037C3A + bl LinkOpponentBufferExecCompleted +_08037C3A: + pop {r0} + bx r0 + .align 2, 0 +_08037C40: .4byte gUnknown_03004210 + thumb_func_end sub_8037C2C + + thumb_func_start dp01t_0F_4_move_anim +dp01t_0F_4_move_anim: @ 8037C44 + push {r4,lr} + ldr r1, _08037C80 @ =gObjectBankIDs + ldr r0, _08037C84 @ =gActiveBank + ldrb r0, [r0] + adds r0, r1 + ldrb r1, [r0] + ldr r2, _08037C88 @ =gSprites + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + adds r4, r0, r2 + movs r1, 0x30 + ldrsh r0, [r4, r1] + cmp r0, 0x20 + bne _08037C90 + movs r3, 0 + movs r0, 0 + strh r0, [r4, 0x30] + adds r2, r4, 0 + adds r2, 0x3E + ldrb r1, [r2] + subs r0, 0x5 + ands r0, r1 + strb r0, [r2] + ldr r0, _08037C8C @ =gDoingBattleAnim + strb r3, [r0] + bl LinkOpponentBufferExecCompleted + b _08037CBA + .align 2, 0 +_08037C80: .4byte gObjectBankIDs +_08037C84: .4byte gActiveBank +_08037C88: .4byte gSprites +_08037C8C: .4byte gDoingBattleAnim +_08037C90: + ldrh r0, [r4, 0x30] + movs r1, 0x3 + ands r0, r1 + cmp r0, 0 + bne _08037CB4 + adds r3, r4, 0 + adds r3, 0x3E + ldrb r2, [r3] + lsls r0, r2, 29 + lsrs r0, 31 + movs r1, 0x1 + eors r1, r0 + lsls r1, 2 + movs r0, 0x5 + negs r0, r0 + ands r0, r2 + orrs r0, r1 + strb r0, [r3] +_08037CB4: + ldrh r0, [r4, 0x30] + adds r0, 0x1 + strh r0, [r4, 0x30] +_08037CBA: + pop {r4} + pop {r0} + bx r0 + thumb_func_end dp01t_0F_4_move_anim + + thumb_func_start sub_8037CC0 +sub_8037CC0: @ 8037CC0 + push {r4,lr} + ldr r2, _08037D10 @ =gSprites + ldr r0, _08037D14 @ =gHealthboxIDs + ldr r4, _08037D18 @ =gActiveBank + ldrb r3, [r4] + adds r0, r3, r0 + ldrb r1, [r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + adds r2, 0x1C + adds r0, r2 + ldr r1, [r0] + ldr r0, _08037D1C @ =SpriteCallbackDummy + cmp r1, r0 + bne _08037D08 + lsls r0, r3, 2 + ldr r1, _08037D20 @ =0x02017800 + adds r0, r1 + ldrb r1, [r0] + movs r0, 0x4 + ands r0, r1 + cmp r0, 0 + beq _08037CFC + adds r0, r3, 0 + adds r1, r3, 0 + adds r2, r3, 0 + movs r3, 0x6 + bl move_anim_start_t4 +_08037CFC: + ldr r0, _08037D24 @ =gBattleBankFunc + ldrb r1, [r4] + lsls r1, 2 + adds r1, r0 + ldr r0, _08037D28 @ =sub_8037D2C + str r0, [r1] +_08037D08: + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_08037D10: .4byte gSprites +_08037D14: .4byte gHealthboxIDs +_08037D18: .4byte gActiveBank +_08037D1C: .4byte SpriteCallbackDummy +_08037D20: .4byte 0x02017800 +_08037D24: .4byte gBattleBankFunc +_08037D28: .4byte sub_8037D2C + thumb_func_end sub_8037CC0 + + thumb_func_start sub_8037D2C +sub_8037D2C: @ 8037D2C + push {lr} + ldr r0, _08037D58 @ =gActiveBank + ldrb r1, [r0] + lsls r0, r1, 1 + adds r0, r1 + lsls r0, 2 + ldr r1, _08037D5C @ =0x02017810 + adds r0, r1 + ldrb r1, [r0] + movs r0, 0x40 + ands r0, r1 + cmp r0, 0 + bne _08037D52 + ldr r0, _08037D60 @ =c3_0802FDF4 + movs r1, 0xA + bl CreateTask + bl LinkOpponentBufferExecCompleted +_08037D52: + pop {r0} + bx r0 + .align 2, 0 +_08037D58: .4byte gActiveBank +_08037D5C: .4byte 0x02017810 +_08037D60: .4byte c3_0802FDF4 + thumb_func_end sub_8037D2C + + thumb_func_start sub_8037D64 +sub_8037D64: @ 8037D64 + push {r4,r5,lr} + ldr r5, _08037E08 @ =gActiveBank + ldrb r1, [r5] + lsls r0, r1, 1 + adds r0, r1 + lsls r0, 2 + ldr r3, _08037E0C @ =0x02017810 + adds r2, r0, r3 + ldrb r1, [r2, 0x1] + movs r0, 0x1 + ands r0, r1 + cmp r0, 0 + beq _08037E00 + ldrb r1, [r2] + movs r0, 0x7F + ands r0, r1 + strb r0, [r2] + ldrb r0, [r5] + lsls r1, r0, 1 + adds r1, r0 + lsls r1, 2 + adds r1, r3 + ldrb r2, [r1, 0x1] + movs r0, 0x2 + negs r0, r0 + ands r0, r2 + strb r0, [r1, 0x1] + ldr r4, _08037E10 @ =0x000027f9 + adds r0, r4, 0 + bl FreeSpriteTilesByTag + adds r0, r4, 0 + bl FreeSpritePaletteByTag + ldr r1, _08037E14 @ =gObjectBankIDs + ldrb r0, [r5] + adds r0, r1 + ldrb r1, [r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + ldr r1, _08037E18 @ =gSprites + adds r0, r1 + movs r1, 0 + bl StartSpriteAnim + ldr r4, _08037E1C @ =gHealthboxIDs + ldrb r1, [r5] + adds r0, r1, r4 + ldrb r0, [r0] + ldr r2, _08037E20 @ =gBattlePartyID + lsls r1, 1 + adds r1, r2 + ldrh r2, [r1] + movs r1, 0x64 + muls r1, r2 + ldr r2, _08037E24 @ =gEnemyParty + adds r1, r2 + movs r2, 0 + bl sub_8045A5C + ldrb r0, [r5] + bl sub_804777C + ldrb r0, [r5] + adds r0, r4 + ldrb r0, [r0] + bl sub_8043DFC + ldrb r0, [r5] + bl sub_8031F88 + ldr r1, _08037E28 @ =gBattleBankFunc + ldrb r0, [r5] + lsls r0, 2 + adds r0, r1 + ldr r1, _08037E2C @ =sub_8037CC0 + str r1, [r0] +_08037E00: + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_08037E08: .4byte gActiveBank +_08037E0C: .4byte 0x02017810 +_08037E10: .4byte 0x000027f9 +_08037E14: .4byte gObjectBankIDs +_08037E18: .4byte gSprites +_08037E1C: .4byte gHealthboxIDs +_08037E20: .4byte gBattlePartyID +_08037E24: .4byte gEnemyParty +_08037E28: .4byte gBattleBankFunc +_08037E2C: .4byte sub_8037CC0 + thumb_func_end sub_8037D64 + + thumb_func_start sub_8037E30 +sub_8037E30: @ 8037E30 + push {r4-r6,lr} + ldr r5, _08037ECC @ =gActiveBank + ldrb r2, [r5] + lsls r3, r2, 1 + adds r0, r3, r2 + lsls r0, 2 + ldr r6, _08037ED0 @ =0x02017810 + adds r0, r6 + ldrb r1, [r0] + movs r0, 0x88 + ands r0, r1 + cmp r0, 0 + bne _08037E5E + ldr r0, _08037ED4 @ =gBattlePartyID + adds r0, r3, r0 + ldrh r1, [r0] + movs r0, 0x64 + muls r1, r0 + ldr r0, _08037ED8 @ =gEnemyParty + adds r1, r0 + adds r0, r2, 0 + bl sub_8141828 +_08037E5E: + ldr r4, _08037EDC @ =gSprites + ldr r0, _08037EE0 @ =gUnknown_0300434C + ldrb r2, [r5] + adds r0, r2, r0 + ldrb r1, [r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r3, r0, 2 + adds r0, r4, 0 + adds r0, 0x1C + adds r0, r3, r0 + ldr r1, [r0] + ldr r0, _08037EE4 @ =SpriteCallbackDummy + cmp r1, r0 + bne _08037EC4 + lsls r0, r2, 1 + adds r0, r2 + lsls r0, 2 + adds r0, r6 + ldrb r1, [r0] + movs r0, 0x8 + ands r0, r1 + cmp r0, 0 + bne _08037EC4 + adds r0, r3, r4 + bl DestroySprite + ldrb r4, [r5] + ldr r1, _08037ED4 @ =gBattlePartyID + lsls r0, r4, 1 + adds r0, r1 + ldrh r1, [r0] + movs r0, 0x64 + muls r0, r1 + ldr r1, _08037ED8 @ =gEnemyParty + adds r0, r1 + movs r1, 0xB + bl GetMonData + adds r1, r0, 0 + lsls r1, 16 + lsrs r1, 16 + adds r0, r4, 0 + bl sub_8032984 + ldr r1, _08037EE8 @ =gBattleBankFunc + ldrb r0, [r5] + lsls r0, 2 + adds r0, r1 + ldr r1, _08037EEC @ =sub_8037D64 + str r1, [r0] +_08037EC4: + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_08037ECC: .4byte gActiveBank +_08037ED0: .4byte 0x02017810 +_08037ED4: .4byte gBattlePartyID +_08037ED8: .4byte gEnemyParty +_08037EDC: .4byte gSprites +_08037EE0: .4byte gUnknown_0300434C +_08037EE4: .4byte SpriteCallbackDummy +_08037EE8: .4byte gBattleBankFunc +_08037EEC: .4byte sub_8037D64 + thumb_func_end sub_8037E30 + + thumb_func_start sub_8037EF0 +sub_8037EF0: @ 8037EF0 + push {lr} + ldr r0, _08037F20 @ =gReceivedRemoteLinkPlayers + ldrb r0, [r0] + cmp r0, 0 + bne _08037F1C + movs r0, 0x5A + bl m4aSongNumStop + ldr r3, _08037F24 @ =gMain + ldr r0, _08037F28 @ =0x0000043d + adds r2, r3, r0 + ldrb r1, [r2] + movs r0, 0x3 + negs r0, r0 + ands r0, r1 + strb r0, [r2] + ldr r0, _08037F2C @ =gPreBattleCallback1 + ldr r0, [r0] + str r0, [r3] + ldr r0, _08037F30 @ =c2_8011A1C + bl SetMainCallback2 +_08037F1C: + pop {r0} + bx r0 + .align 2, 0 +_08037F20: .4byte gReceivedRemoteLinkPlayers +_08037F24: .4byte gMain +_08037F28: .4byte 0x0000043d +_08037F2C: .4byte gPreBattleCallback1 +_08037F30: .4byte c2_8011A1C + thumb_func_end sub_8037EF0 + + thumb_func_start sub_8037F34 +sub_8037F34: @ 8037F34 + push {lr} + ldr r0, _08037F64 @ =gPaletteFade + ldrb r1, [r0, 0x7] + movs r0, 0x80 + ands r0, r1 + cmp r0, 0 + bne _08037F9A + ldr r0, _08037F68 @ =gBattleTypeFlags + ldrh r1, [r0] + movs r0, 0x2 + ands r0, r1 + cmp r0, 0 + beq _08037F78 + bl sub_800832C + ldr r1, _08037F6C @ =gBattleBankFunc + ldr r0, _08037F70 @ =gActiveBank + ldrb r0, [r0] + lsls r0, 2 + adds r0, r1 + ldr r1, _08037F74 @ =sub_8037EF0 + str r1, [r0] + b _08037F9A + .align 2, 0 +_08037F64: .4byte gPaletteFade +_08037F68: .4byte gBattleTypeFlags +_08037F6C: .4byte gBattleBankFunc +_08037F70: .4byte gActiveBank +_08037F74: .4byte sub_8037EF0 +_08037F78: + movs r0, 0x5A + bl m4aSongNumStop + ldr r2, _08037FA0 @ =gMain + ldr r0, _08037FA4 @ =0x0000043d + adds r3, r2, r0 + ldrb r1, [r3] + movs r0, 0x3 + negs r0, r0 + ands r0, r1 + strb r0, [r3] + ldr r0, _08037FA8 @ =gPreBattleCallback1 + ldr r0, [r0] + str r0, [r2] + ldr r0, [r2, 0x8] + bl SetMainCallback2 +_08037F9A: + pop {r0} + bx r0 + .align 2, 0 +_08037FA0: .4byte gMain +_08037FA4: .4byte 0x0000043d +_08037FA8: .4byte gPreBattleCallback1 + thumb_func_end sub_8037F34 + + thumb_func_start sub_8037FAC +sub_8037FAC: @ 8037FAC + push {lr} + ldr r0, _08037FD0 @ =gActiveBank + ldrb r1, [r0] + lsls r0, r1, 1 + adds r0, r1 + lsls r0, 2 + ldr r1, _08037FD4 @ =0x02017810 + adds r0, r1 + ldrb r1, [r0] + movs r0, 0x10 + ands r0, r1 + cmp r0, 0 + bne _08037FCA + bl LinkOpponentBufferExecCompleted +_08037FCA: + pop {r0} + bx r0 + .align 2, 0 +_08037FD0: .4byte gActiveBank +_08037FD4: .4byte 0x02017810 + thumb_func_end sub_8037FAC + + thumb_func_start sub_8037FD8 +sub_8037FD8: @ 8037FD8 + push {lr} + ldr r0, _08037FFC @ =gActiveBank + ldrb r1, [r0] + lsls r0, r1, 1 + adds r0, r1 + lsls r0, 2 + ldr r1, _08038000 @ =0x02017810 + adds r0, r1 + ldrb r1, [r0] + movs r0, 0x20 + ands r0, r1 + cmp r0, 0 + bne _08037FF6 + bl LinkOpponentBufferExecCompleted +_08037FF6: + pop {r0} + bx r0 + .align 2, 0 +_08037FFC: .4byte gActiveBank +_08038000: .4byte 0x02017810 + thumb_func_end sub_8037FD8 + + thumb_func_start LinkOpponentBufferExecCompleted +LinkOpponentBufferExecCompleted: @ 8038004 + push {r4,lr} + sub sp, 0x4 + ldr r1, _08038044 @ =gBattleBankFunc + ldr r4, _08038048 @ =gActiveBank + ldrb r0, [r4] + lsls r0, 2 + adds r0, r1 + ldr r1, _0803804C @ =sub_803752C + str r1, [r0] + ldr r0, _08038050 @ =gBattleTypeFlags + ldrh r1, [r0] + movs r0, 0x2 + ands r0, r1 + cmp r0, 0 + beq _08038058 + bl GetMultiplayerId + mov r1, sp + strb r0, [r1] + movs r0, 0x2 + movs r1, 0x4 + mov r2, sp + bl dp01_prepare_buffer_wireless_probably + ldr r1, _08038054 @ =gBattleBufferA + ldrb r0, [r4] + lsls r0, 9 + adds r0, r1 + movs r1, 0x38 + strb r1, [r0] + b _0803806A + .align 2, 0 +_08038044: .4byte gBattleBankFunc +_08038048: .4byte gActiveBank +_0803804C: .4byte sub_803752C +_08038050: .4byte gBattleTypeFlags +_08038054: .4byte gBattleBufferA +_08038058: + ldr r2, _08038074 @ =gBattleExecBuffer + ldr r1, _08038078 @ =gBitTable + ldrb r0, [r4] + lsls r0, 2 + adds r0, r1 + ldr r1, [r0] + ldr r0, [r2] + bics r0, r1 + str r0, [r2] +_0803806A: + add sp, 0x4 + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_08038074: .4byte gBattleExecBuffer +_08038078: .4byte gBitTable + thumb_func_end LinkOpponentBufferExecCompleted + + .align 2, 0 @ Don't pad with nop. diff --git a/asm/battle_controller_safari.s b/asm/battle_controller_safari.s new file mode 100644 index 000000000..a92f74550 --- /dev/null +++ b/asm/battle_controller_safari.s @@ -0,0 +1,1402 @@ + .include "constants/gba_constants.inc" + .include "constants/species_constants.inc" + .include "asm/macros.inc" + + .syntax unified + + .text + + thumb_func_start unref_sub_812B464 +unref_sub_812B464: @ 812B464 + bx lr + thumb_func_end unref_sub_812B464 + + thumb_func_start SetBankFuncToSafariBufferRunCommand +SetBankFuncToSafariBufferRunCommand: @ 812B468 + ldr r1, _0812B478 @ =gBattleBankFunc + ldr r0, _0812B47C @ =gActiveBank + ldrb r0, [r0] + lsls r0, 2 + adds r0, r1 + ldr r1, _0812B480 @ =SafariBufferRunCommand + str r1, [r0] + bx lr + .align 2, 0 +_0812B478: .4byte gBattleBankFunc +_0812B47C: .4byte gActiveBank +_0812B480: .4byte SafariBufferRunCommand + thumb_func_end SetBankFuncToSafariBufferRunCommand + + thumb_func_start SafariBufferRunCommand +SafariBufferRunCommand: @ 812B484 + push {lr} + ldr r2, _0812B4B8 @ =gBattleExecBuffer + ldr r1, _0812B4BC @ =gBitTable + ldr r0, _0812B4C0 @ =gActiveBank + ldrb r3, [r0] + lsls r0, r3, 2 + adds r0, r1 + ldr r1, [r2] + ldr r0, [r0] + ands r1, r0 + cmp r1, 0 + beq _0812B4D0 + ldr r0, _0812B4C4 @ =gBattleBufferA + lsls r1, r3, 9 + adds r1, r0 + ldrb r0, [r1] + cmp r0, 0x38 + bhi _0812B4CC + ldr r0, _0812B4C8 @ =gSafariBufferCommands + ldrb r1, [r1] + lsls r1, 2 + adds r1, r0 + ldr r0, [r1] + bl _call_via_r0 + b _0812B4D0 + .align 2, 0 +_0812B4B8: .4byte gBattleExecBuffer +_0812B4BC: .4byte gBitTable +_0812B4C0: .4byte gActiveBank +_0812B4C4: .4byte gBattleBufferA +_0812B4C8: .4byte gSafariBufferCommands +_0812B4CC: + bl SafariBufferExecCompleted +_0812B4D0: + pop {r0} + bx r0 + thumb_func_end SafariBufferRunCommand + + thumb_func_start bx_battle_menu_t6_2 +bx_battle_menu_t6_2: @ 812B4D4 + push {r4,r5,lr} + ldr r0, _0812B508 @ =gMain + ldrh r1, [r0, 0x2E] + movs r2, 0x1 + adds r0, r2, 0 + ands r0, r1 + cmp r0, 0 + beq _0812B546 + movs r0, 0x5 + bl PlaySE + bl DestroyMenuCursor + ldr r1, _0812B50C @ =gActionSelectionCursor + ldr r0, _0812B510 @ =gActiveBank + ldrb r0, [r0] + adds r0, r1 + ldrb r0, [r0] + cmp r0, 0x1 + beq _0812B524 + cmp r0, 0x1 + bgt _0812B514 + cmp r0, 0 + beq _0812B51E + b _0812B540 + .align 2, 0 +_0812B508: .4byte gMain +_0812B50C: .4byte gActionSelectionCursor +_0812B510: .4byte gActiveBank +_0812B514: + cmp r0, 0x2 + beq _0812B52A + cmp r0, 0x3 + beq _0812B536 + b _0812B540 +_0812B51E: + movs r0, 0x1 + movs r1, 0x5 + b _0812B52E +_0812B524: + movs r0, 0x1 + movs r1, 0x6 + b _0812B52E +_0812B52A: + movs r0, 0x1 + movs r1, 0x7 +_0812B52E: + movs r2, 0 + bl Emitcmd33 + b _0812B540 +_0812B536: + movs r0, 0x1 + movs r1, 0x8 + movs r2, 0 + bl Emitcmd33 +_0812B540: + bl SafariBufferExecCompleted + b _0812B64E +_0812B546: + movs r0, 0x20 + ands r0, r1 + cmp r0, 0 + beq _0812B584 + ldr r5, _0812B57C @ =gActionSelectionCursor + ldr r4, _0812B580 @ =gActiveBank + ldrb r0, [r4] + adds r0, r5 + ldrb r1, [r0] + adds r0, r2, 0 + ands r0, r1 + cmp r0, 0 + beq _0812B64E + movs r0, 0x5 + bl PlaySE + ldrb r0, [r4] + adds r0, r5 + ldrb r0, [r0] + bl nullsub_8 + ldrb r1, [r4] + adds r1, r5 + ldrb r0, [r1] + movs r2, 0x1 + b _0812B5F2 + .align 2, 0 +_0812B57C: .4byte gActionSelectionCursor +_0812B580: .4byte gActiveBank +_0812B584: + movs r0, 0x10 + ands r0, r1 + cmp r0, 0 + beq _0812B5C0 + ldr r5, _0812B5B8 @ =gActionSelectionCursor + ldr r4, _0812B5BC @ =gActiveBank + ldrb r0, [r4] + adds r0, r5 + ldrb r1, [r0] + adds r0, r2, 0 + ands r0, r1 + cmp r0, 0 + bne _0812B64E + movs r0, 0x5 + bl PlaySE + ldrb r0, [r4] + adds r0, r5 + ldrb r0, [r0] + bl nullsub_8 + ldrb r1, [r4] + adds r1, r5 + ldrb r0, [r1] + movs r2, 0x1 + b _0812B5F2 + .align 2, 0 +_0812B5B8: .4byte gActionSelectionCursor +_0812B5BC: .4byte gActiveBank +_0812B5C0: + movs r0, 0x40 + ands r0, r1 + cmp r0, 0 + beq _0812B60C + ldr r5, _0812B604 @ =gActionSelectionCursor + ldr r4, _0812B608 @ =gActiveBank + ldrb r0, [r4] + adds r0, r5 + ldrb r1, [r0] + movs r0, 0x2 + ands r0, r1 + cmp r0, 0 + beq _0812B64E + movs r0, 0x5 + bl PlaySE + ldrb r0, [r4] + adds r0, r5 + ldrb r0, [r0] + bl nullsub_8 + ldrb r1, [r4] + adds r1, r5 + ldrb r0, [r1] + movs r2, 0x2 +_0812B5F2: + eors r0, r2 + strb r0, [r1] + ldrb r0, [r4] + adds r0, r5 + ldrb r0, [r0] + movs r1, 0 + bl sub_802E3E4 + b _0812B64E + .align 2, 0 +_0812B604: .4byte gActionSelectionCursor +_0812B608: .4byte gActiveBank +_0812B60C: + movs r0, 0x80 + ands r0, r1 + cmp r0, 0 + beq _0812B64E + ldr r5, _0812B654 @ =gActionSelectionCursor + ldr r4, _0812B658 @ =gActiveBank + ldrb r0, [r4] + adds r0, r5 + ldrb r1, [r0] + movs r0, 0x2 + ands r0, r1 + cmp r0, 0 + bne _0812B64E + movs r0, 0x5 + bl PlaySE + ldrb r0, [r4] + adds r0, r5 + ldrb r0, [r0] + bl nullsub_8 + ldrb r1, [r4] + adds r1, r5 + ldrb r0, [r1] + movs r2, 0x2 + eors r0, r2 + strb r0, [r1] + ldrb r0, [r4] + adds r0, r5 + ldrb r0, [r0] + movs r1, 0 + bl sub_802E3E4 +_0812B64E: + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_0812B654: .4byte gActionSelectionCursor +_0812B658: .4byte gActiveBank + thumb_func_end bx_battle_menu_t6_2 + + thumb_func_start sub_812B65C +sub_812B65C: @ 812B65C + push {lr} + ldr r2, _0812B684 @ =gSprites + ldr r1, _0812B688 @ =gObjectBankIDs + ldr r0, _0812B68C @ =gActiveBank + ldrb r0, [r0] + adds r0, r1 + ldrb r1, [r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + adds r2, 0x1C + adds r0, r2 + ldr r1, [r0] + ldr r0, _0812B690 @ =SpriteCallbackDummy + cmp r1, r0 + bne _0812B680 + bl SafariBufferExecCompleted +_0812B680: + pop {r0} + bx r0 + .align 2, 0 +_0812B684: .4byte gSprites +_0812B688: .4byte gObjectBankIDs +_0812B68C: .4byte gActiveBank +_0812B690: .4byte SpriteCallbackDummy + thumb_func_end sub_812B65C + + thumb_func_start sub_812B694 +sub_812B694: @ 812B694 + push {lr} + ldr r0, _0812B6A8 @ =gUnknown_03004210 + ldrh r0, [r0, 0x16] + cmp r0, 0 + bne _0812B6A2 + bl SafariBufferExecCompleted +_0812B6A2: + pop {r0} + bx r0 + .align 2, 0 +_0812B6A8: .4byte gUnknown_03004210 + thumb_func_end sub_812B694 + + thumb_func_start sub_812B6AC +sub_812B6AC: @ 812B6AC + push {lr} + ldr r0, _0812B6DC @ =gPaletteFade + ldrb r1, [r0, 0x7] + movs r0, 0x80 + ands r0, r1 + cmp r0, 0 + bne _0812B6D6 + ldr r2, _0812B6E0 @ =gMain + ldr r0, _0812B6E4 @ =0x0000043d + adds r3, r2, r0 + ldrb r1, [r3] + movs r0, 0x3 + negs r0, r0 + ands r0, r1 + strb r0, [r3] + ldr r0, _0812B6E8 @ =gPreBattleCallback1 + ldr r0, [r0] + str r0, [r2] + ldr r0, [r2, 0x8] + bl SetMainCallback2 +_0812B6D6: + pop {r0} + bx r0 + .align 2, 0 +_0812B6DC: .4byte gPaletteFade +_0812B6E0: .4byte gMain +_0812B6E4: .4byte 0x0000043d +_0812B6E8: .4byte gPreBattleCallback1 + thumb_func_end sub_812B6AC + + thumb_func_start bx_wait_t6 +bx_wait_t6: @ 812B6EC + push {lr} + ldr r0, _0812B718 @ =gDoingBattleAnim + ldrb r0, [r0] + cmp r0, 0 + beq _0812B70E + ldr r0, _0812B71C @ =gActiveBank + ldrb r1, [r0] + lsls r0, r1, 1 + adds r0, r1 + lsls r0, 2 + ldr r1, _0812B720 @ =0x02017810 + adds r0, r1 + ldrb r1, [r0] + movs r0, 0x40 + ands r0, r1 + cmp r0, 0 + bne _0812B712 +_0812B70E: + bl SafariBufferExecCompleted +_0812B712: + pop {r0} + bx r0 + .align 2, 0 +_0812B718: .4byte gDoingBattleAnim +_0812B71C: .4byte gActiveBank +_0812B720: .4byte 0x02017810 + thumb_func_end bx_wait_t6 + + thumb_func_start sub_812B724 +sub_812B724: @ 812B724 + push {lr} + ldr r0, _0812B748 @ =gPaletteFade + ldrb r1, [r0, 0x7] + movs r0, 0x80 + ands r0, r1 + cmp r0, 0 + bne _0812B744 + ldr r1, _0812B74C @ =gBattleBankFunc + ldr r0, _0812B750 @ =gActiveBank + ldrb r0, [r0] + lsls r0, 2 + adds r0, r1 + ldr r1, _0812B754 @ =sub_812B758 + str r1, [r0] + bl sub_810BADC +_0812B744: + pop {r0} + bx r0 + .align 2, 0 +_0812B748: .4byte gPaletteFade +_0812B74C: .4byte gBattleBankFunc +_0812B750: .4byte gActiveBank +_0812B754: .4byte sub_812B758 + thumb_func_end sub_812B724 + + thumb_func_start sub_812B758 +sub_812B758: @ 812B758 + push {lr} + ldr r0, _0812B784 @ =gMain + ldr r1, [r0, 0x4] + ldr r0, _0812B788 @ =sub_800F808 + cmp r1, r0 + bne _0812B77E + ldr r0, _0812B78C @ =gPaletteFade + ldrb r1, [r0, 0x7] + movs r0, 0x80 + ands r0, r1 + cmp r0, 0 + bne _0812B77E + ldr r0, _0812B790 @ =gScriptItemId + ldrh r1, [r0] + movs r0, 0x1 + bl Emitcmd35 + bl SafariBufferExecCompleted +_0812B77E: + pop {r0} + bx r0 + .align 2, 0 +_0812B784: .4byte gMain +_0812B788: .4byte sub_800F808 +_0812B78C: .4byte gPaletteFade +_0812B790: .4byte gScriptItemId + thumb_func_end sub_812B758 + + thumb_func_start sub_812B794 +sub_812B794: @ 812B794 + push {lr} + ldr r0, _0812B7B8 @ =gActiveBank + ldrb r1, [r0] + lsls r0, r1, 1 + adds r0, r1 + lsls r0, 2 + ldr r1, _0812B7BC @ =0x02017810 + adds r0, r1 + ldrb r1, [r0] + movs r0, 0x20 + ands r0, r1 + cmp r0, 0 + bne _0812B7B2 + bl SafariBufferExecCompleted +_0812B7B2: + pop {r0} + bx r0 + .align 2, 0 +_0812B7B8: .4byte gActiveBank +_0812B7BC: .4byte 0x02017810 + thumb_func_end sub_812B794 + + thumb_func_start SafariBufferExecCompleted +SafariBufferExecCompleted: @ 812B7C0 + push {r4,lr} + sub sp, 0x4 + ldr r1, _0812B800 @ =gBattleBankFunc + ldr r4, _0812B804 @ =gActiveBank + ldrb r0, [r4] + lsls r0, 2 + adds r0, r1 + ldr r1, _0812B808 @ =SafariBufferRunCommand + str r1, [r0] + ldr r0, _0812B80C @ =gBattleTypeFlags + ldrh r1, [r0] + movs r0, 0x2 + ands r0, r1 + cmp r0, 0 + beq _0812B814 + bl GetMultiplayerId + mov r1, sp + strb r0, [r1] + movs r0, 0x2 + movs r1, 0x4 + mov r2, sp + bl dp01_prepare_buffer_wireless_probably + ldr r1, _0812B810 @ =gBattleBufferA + ldrb r0, [r4] + lsls r0, 9 + adds r0, r1 + movs r1, 0x38 + strb r1, [r0] + b _0812B826 + .align 2, 0 +_0812B800: .4byte gBattleBankFunc +_0812B804: .4byte gActiveBank +_0812B808: .4byte SafariBufferRunCommand +_0812B80C: .4byte gBattleTypeFlags +_0812B810: .4byte gBattleBufferA +_0812B814: + ldr r2, _0812B830 @ =gBattleExecBuffer + ldr r1, _0812B834 @ =gBitTable + ldrb r0, [r4] + lsls r0, 2 + adds r0, r1 + ldr r1, [r0] + ldr r0, [r2] + bics r0, r1 + str r0, [r2] +_0812B826: + add sp, 0x4 + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_0812B830: .4byte gBattleExecBuffer +_0812B834: .4byte gBitTable + thumb_func_end SafariBufferExecCompleted + + thumb_func_start unref_sub_812B838 +unref_sub_812B838: @ 812B838 + push {lr} + ldr r0, _0812B85C @ =gActiveBank + ldrb r1, [r0] + lsls r0, r1, 1 + adds r0, r1 + lsls r0, 2 + ldr r1, _0812B860 @ =0x02017810 + adds r0, r1 + ldrb r1, [r0] + movs r0, 0x10 + ands r0, r1 + cmp r0, 0 + bne _0812B856 + bl SafariBufferExecCompleted +_0812B856: + pop {r0} + bx r0 + .align 2, 0 +_0812B85C: .4byte gActiveBank +_0812B860: .4byte 0x02017810 + thumb_func_end unref_sub_812B838 + + thumb_func_start SafariHandleGetAttributes +SafariHandleGetAttributes: @ 812B864 + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandleGetAttributes + + thumb_func_start SafariHandlecmd1 +SafariHandlecmd1: @ 812B870 + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandlecmd1 + + thumb_func_start SafariHandleSetAttributes +SafariHandleSetAttributes: @ 812B87C + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandleSetAttributes + + thumb_func_start SafariHandlecmd3 +SafariHandlecmd3: @ 812B888 + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandlecmd3 + + thumb_func_start SafariHandleLoadPokeSprite +SafariHandleLoadPokeSprite: @ 812B894 + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandleLoadPokeSprite + + thumb_func_start SafariHandleSendOutPoke +SafariHandleSendOutPoke: @ 812B8A0 + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandleSendOutPoke + + thumb_func_start SafariHandleReturnPokeToBall +SafariHandleReturnPokeToBall: @ 812B8AC + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandleReturnPokeToBall + + thumb_func_start SafariHandleTrainerThrow +SafariHandleTrainerThrow: @ 812B8B8 + push {r4-r6,lr} + ldr r4, _0812B96C @ =gSaveBlock2 + ldrb r0, [r4, 0x8] + ldr r5, _0812B970 @ =gActiveBank + ldrb r1, [r5] + bl sub_8031AF4 + ldrb r6, [r4, 0x8] + ldrb r0, [r5] + bl GetBankIdentity + adds r1, r0, 0 + lsls r1, 24 + lsrs r1, 24 + adds r0, r6, 0 + bl GetMonSpriteTemplate_803C5A0 + ldr r0, _0812B974 @ =gUnknown_02024E8C + ldr r2, _0812B978 @ =gTrainerBackPicCoords + ldrb r1, [r4, 0x8] + lsls r1, 2 + adds r1, r2 + ldrb r1, [r1] + movs r2, 0x8 + subs r2, r1 + lsls r2, 18 + movs r1, 0xA0 + lsls r1, 15 + adds r2, r1 + asrs r2, 16 + movs r1, 0x50 + movs r3, 0x1E + bl CreateSprite + ldr r6, _0812B97C @ =gObjectBankIDs + ldrb r1, [r5] + adds r1, r6 + strb r0, [r1] + ldr r4, _0812B980 @ =gSprites + ldrb r3, [r5] + adds r0, r3, r6 + ldrb r0, [r0] + lsls r1, r0, 4 + adds r1, r0 + lsls r1, 2 + adds r1, r4 + lsls r3, 4 + ldrb r2, [r1, 0x5] + movs r0, 0xF + ands r0, r2 + orrs r0, r3 + strb r0, [r1, 0x5] + ldrb r0, [r5] + adds r0, r6 + ldrb r1, [r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + adds r0, r4 + movs r1, 0xF0 + strh r1, [r0, 0x24] + ldrb r0, [r5] + adds r0, r6 + ldrb r1, [r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + adds r0, r4 + ldr r1, _0812B984 @ =0x0000fffe + strh r1, [r0, 0x2E] + ldrb r0, [r5] + adds r0, r6 + ldrb r1, [r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + adds r4, 0x1C + adds r0, r4 + ldr r1, _0812B988 @ =sub_80313A0 + str r1, [r0] + ldr r1, _0812B98C @ =gBattleBankFunc + ldrb r0, [r5] + lsls r0, 2 + adds r0, r1 + ldr r1, _0812B990 @ =sub_812B65C + str r1, [r0] + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_0812B96C: .4byte gSaveBlock2 +_0812B970: .4byte gActiveBank +_0812B974: .4byte gUnknown_02024E8C +_0812B978: .4byte gTrainerBackPicCoords +_0812B97C: .4byte gObjectBankIDs +_0812B980: .4byte gSprites +_0812B984: .4byte 0x0000fffe +_0812B988: .4byte sub_80313A0 +_0812B98C: .4byte gBattleBankFunc +_0812B990: .4byte sub_812B65C + thumb_func_end SafariHandleTrainerThrow + + thumb_func_start SafariHandleTrainerSlide +SafariHandleTrainerSlide: @ 812B994 + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandleTrainerSlide + + thumb_func_start SafariHandleTrainerSlideBack +SafariHandleTrainerSlideBack: @ 812B9A0 + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandleTrainerSlideBack + + thumb_func_start SafariHandlecmd10 +SafariHandlecmd10: @ 812B9AC + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandlecmd10 + + thumb_func_start SafariHandlecmd11 +SafariHandlecmd11: @ 812B9B8 + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandlecmd11 + + thumb_func_start SafariHandlecmd12 +SafariHandlecmd12: @ 812B9C4 + push {r4,r5,lr} + ldr r1, _0812BA00 @ =0x02017840 + movs r0, 0x4 + strb r0, [r1, 0x8] + ldr r1, _0812BA04 @ =gDoingBattleAnim + movs r0, 0x1 + strb r0, [r1] + ldr r5, _0812BA08 @ =gActiveBank + ldrb r4, [r5] + movs r0, 0x1 + bl GetBankByPlayerAI + adds r2, r0, 0 + lsls r2, 24 + lsrs r2, 24 + adds r0, r4, 0 + adds r1, r4, 0 + movs r3, 0x4 + bl move_anim_start_t4 + ldr r1, _0812BA0C @ =gBattleBankFunc + ldrb r0, [r5] + lsls r0, 2 + adds r0, r1 + ldr r1, _0812BA10 @ =bx_wait_t6 + str r1, [r0] + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_0812BA00: .4byte 0x02017840 +_0812BA04: .4byte gDoingBattleAnim +_0812BA08: .4byte gActiveBank +_0812BA0C: .4byte gBattleBankFunc +_0812BA10: .4byte bx_wait_t6 + thumb_func_end SafariHandlecmd12 + + thumb_func_start SafariHandleBallThrow +SafariHandleBallThrow: @ 812BA14 + push {r4,r5,lr} + ldr r1, _0812BA58 @ =gBattleBufferA + ldr r5, _0812BA5C @ =gActiveBank + ldrb r0, [r5] + lsls r0, 9 + adds r1, 0x1 + adds r0, r1 + ldrb r1, [r0] + ldr r0, _0812BA60 @ =0x02017840 + strb r1, [r0, 0x8] + ldr r1, _0812BA64 @ =gDoingBattleAnim + movs r0, 0x1 + strb r0, [r1] + ldrb r4, [r5] + movs r0, 0x1 + bl GetBankByPlayerAI + adds r2, r0, 0 + lsls r2, 24 + lsrs r2, 24 + adds r0, r4, 0 + adds r1, r4, 0 + movs r3, 0x4 + bl move_anim_start_t4 + ldr r1, _0812BA68 @ =gBattleBankFunc + ldrb r0, [r5] + lsls r0, 2 + adds r0, r1 + ldr r1, _0812BA6C @ =bx_wait_t6 + str r1, [r0] + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_0812BA58: .4byte gBattleBufferA +_0812BA5C: .4byte gActiveBank +_0812BA60: .4byte 0x02017840 +_0812BA64: .4byte gDoingBattleAnim +_0812BA68: .4byte gBattleBankFunc +_0812BA6C: .4byte bx_wait_t6 + thumb_func_end SafariHandleBallThrow + + thumb_func_start SafariHandlePuase +SafariHandlePuase: @ 812BA70 + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandlePuase + + thumb_func_start SafariHandleMoveAnimation +SafariHandleMoveAnimation: @ 812BA7C + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandleMoveAnimation + + thumb_func_start SafariHandlePrintString +SafariHandlePrintString: @ 812BA88 + push {r4,lr} + sub sp, 0x4 + ldr r0, _0812BACC @ =gUnknown_030042A4 + movs r1, 0 + strh r1, [r0] + ldr r0, _0812BAD0 @ =gUnknown_030042A0 + strh r1, [r0] + ldr r4, _0812BAD4 @ =gActiveBank + ldrb r0, [r4] + lsls r0, 9 + ldr r1, _0812BAD8 @ =gUnknown_02023A62 + adds r0, r1 + ldrh r0, [r0] + bl BufferStringBattle + ldr r0, _0812BADC @ =gUnknown_03004210 + ldr r1, _0812BAE0 @ =gDisplayedStringBattle + movs r2, 0xF + str r2, [sp] + movs r2, 0x90 + movs r3, 0x2 + bl sub_8002EB0 + ldr r1, _0812BAE4 @ =gBattleBankFunc + ldrb r0, [r4] + lsls r0, 2 + adds r0, r1 + ldr r1, _0812BAE8 @ =sub_812B694 + str r1, [r0] + add sp, 0x4 + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_0812BACC: .4byte gUnknown_030042A4 +_0812BAD0: .4byte gUnknown_030042A0 +_0812BAD4: .4byte gActiveBank +_0812BAD8: .4byte gUnknown_02023A62 +_0812BADC: .4byte gUnknown_03004210 +_0812BAE0: .4byte gDisplayedStringBattle +_0812BAE4: .4byte gBattleBankFunc +_0812BAE8: .4byte sub_812B694 + thumb_func_end SafariHandlePrintString + + thumb_func_start SafariHandlePrintStringPlayerOnly +SafariHandlePrintStringPlayerOnly: @ 812BAEC + push {lr} + ldr r0, _0812BB04 @ =gActiveBank + ldrb r0, [r0] + bl GetBankSide + lsls r0, 24 + cmp r0, 0 + bne _0812BB08 + bl SafariHandlePrintString + b _0812BB0C + .align 2, 0 +_0812BB04: .4byte gActiveBank +_0812BB08: + bl SafariBufferExecCompleted +_0812BB0C: + pop {r0} + bx r0 + thumb_func_end SafariHandlePrintStringPlayerOnly + +.section .text_812BBFC + + thumb_func_start SafariHandlecmd19 +SafariHandlecmd19: @ 812BBFC + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandlecmd19 + + thumb_func_start SafariHandlecmd20 +SafariHandlecmd20: @ 812BC08 + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandlecmd20 + + thumb_func_start SafariHandleOpenBag +SafariHandleOpenBag: @ 812BC14 + push {lr} + sub sp, 0x4 + movs r0, 0x1 + negs r0, r0 + movs r1, 0 + str r1, [sp] + movs r2, 0 + movs r3, 0x10 + bl BeginNormalPaletteFade + ldr r1, _0812BC44 @ =gBattleBankFunc + ldr r2, _0812BC48 @ =gActiveBank + ldrb r0, [r2] + lsls r0, 2 + adds r0, r1 + ldr r1, _0812BC4C @ =sub_812B724 + str r1, [r0] + ldr r1, _0812BC50 @ =gBankInMenu + ldrb r0, [r2] + strb r0, [r1] + add sp, 0x4 + pop {r0} + bx r0 + .align 2, 0 +_0812BC44: .4byte gBattleBankFunc +_0812BC48: .4byte gActiveBank +_0812BC4C: .4byte sub_812B724 +_0812BC50: .4byte gBankInMenu + thumb_func_end SafariHandleOpenBag + + thumb_func_start SafariHandlecmd22 +SafariHandlecmd22: @ 812BC54 + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandlecmd22 + + thumb_func_start SafariHandlecmd23 +SafariHandlecmd23: @ 812BC60 + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandlecmd23 + + thumb_func_start SafariHandleHealthBarUpdate +SafariHandleHealthBarUpdate: @ 812BC6C + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandleHealthBarUpdate + + thumb_func_start SafariHandleExpBarUpdate +SafariHandleExpBarUpdate: @ 812BC78 + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandleExpBarUpdate + + thumb_func_start SafariHandleStatusIconUpdate +SafariHandleStatusIconUpdate: @ 812BC84 + push {lr} + ldr r0, _0812BCB0 @ =gHealthboxIDs + ldr r1, _0812BCB4 @ =gActiveBank + ldrb r1, [r1] + adds r0, r1, r0 + ldrb r0, [r0] + ldr r2, _0812BCB8 @ =gBattlePartyID + lsls r1, 1 + adds r1, r2 + ldrh r2, [r1] + movs r1, 0x64 + muls r1, r2 + ldr r2, _0812BCBC @ =gPlayerParty + adds r1, r2 + movs r2, 0xB + bl sub_8045A5C + bl SafariBufferExecCompleted + pop {r0} + bx r0 + .align 2, 0 +_0812BCB0: .4byte gHealthboxIDs +_0812BCB4: .4byte gActiveBank +_0812BCB8: .4byte gBattlePartyID +_0812BCBC: .4byte gPlayerParty + thumb_func_end SafariHandleStatusIconUpdate + + thumb_func_start SafariHandleStatusAnimation +SafariHandleStatusAnimation: @ 812BCC0 + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandleStatusAnimation + + thumb_func_start SafariHandleStatusXor +SafariHandleStatusXor: @ 812BCCC + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandleStatusXor + + thumb_func_start SafariHandlecmd29 +SafariHandlecmd29: @ 812BCD8 + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandlecmd29 + + thumb_func_start SafariHandleDMATransfer +SafariHandleDMATransfer: @ 812BCE4 + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandleDMATransfer + + thumb_func_start SafariHandlecmd31 +SafariHandlecmd31: @ 812BCF0 + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandlecmd31 + + thumb_func_start SafariHandlecmd32 +SafariHandlecmd32: @ 812BCFC + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandlecmd32 + + thumb_func_start SafariHandlecmd33 +SafariHandlecmd33: @ 812BD08 + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandlecmd33 + + thumb_func_start SafariHandlecmd34 +SafariHandlecmd34: @ 812BD14 + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandlecmd34 + + thumb_func_start SafariHandlecmd35 +SafariHandlecmd35: @ 812BD20 + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandlecmd35 + + thumb_func_start SafariHandlecmd36 +SafariHandlecmd36: @ 812BD2C + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandlecmd36 + + thumb_func_start SafariHandlecmd37 +SafariHandlecmd37: @ 812BD38 + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandlecmd37 + + thumb_func_start SafariHandlecmd38 +SafariHandlecmd38: @ 812BD44 + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandlecmd38 + + thumb_func_start SafariHandlecmd39 +SafariHandlecmd39: @ 812BD50 + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandlecmd39 + + thumb_func_start SafariHandlecmd40 +SafariHandlecmd40: @ 812BD5C + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandlecmd40 + + thumb_func_start SafariHandleHitAnimation +SafariHandleHitAnimation: @ 812BD68 + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandleHitAnimation + + thumb_func_start SafariHandlecmd42 +SafariHandlecmd42: @ 812BD74 + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandlecmd42 + + thumb_func_start SafariHandleEffectivenessSound +SafariHandleEffectivenessSound: @ 812BD80 + push {r4,lr} + ldr r4, _0812BDBC @ =gActiveBank + ldrb r0, [r4] + bl GetBankSide + lsls r0, 24 + movs r3, 0x3F + cmp r0, 0 + bne _0812BD94 + movs r3, 0xC0 +_0812BD94: + ldr r2, _0812BDC0 @ =gBattleBufferA + ldrb r1, [r4] + lsls r1, 9 + adds r0, r2, 0x1 + adds r0, r1, r0 + ldrb r0, [r0] + adds r2, 0x2 + adds r1, r2 + ldrb r1, [r1] + lsls r1, 8 + orrs r0, r1 + lsls r1, r3, 24 + asrs r1, 24 + bl PlaySE12WithPanning + bl SafariBufferExecCompleted + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_0812BDBC: .4byte gActiveBank +_0812BDC0: .4byte gBattleBufferA + thumb_func_end SafariHandleEffectivenessSound + + thumb_func_start SafariHandlecmd44 +SafariHandlecmd44: @ 812BDC4 + push {lr} + ldr r2, _0812BDEC @ =gBattleBufferA + ldr r0, _0812BDF0 @ =gActiveBank + ldrb r1, [r0] + lsls r1, 9 + adds r0, r2, 0x1 + adds r0, r1, r0 + ldrb r0, [r0] + adds r2, 0x2 + adds r1, r2 + ldrb r1, [r1] + lsls r1, 8 + orrs r0, r1 + bl PlayFanfare + bl SafariBufferExecCompleted + pop {r0} + bx r0 + .align 2, 0 +_0812BDEC: .4byte gBattleBufferA +_0812BDF0: .4byte gActiveBank + thumb_func_end SafariHandlecmd44 + + thumb_func_start SafariHandleFaintingCry +SafariHandleFaintingCry: @ 812BDF4 + push {lr} + ldr r1, _0812BE24 @ =gBattlePartyID + ldr r0, _0812BE28 @ =gActiveBank + ldrb r0, [r0] + lsls r0, 1 + adds r0, r1 + ldrh r1, [r0] + movs r0, 0x64 + muls r0, r1 + ldr r1, _0812BE2C @ =gPlayerParty + adds r0, r1 + movs r1, 0xB + bl GetMonData + lsls r0, 16 + lsrs r0, 16 + movs r1, 0x19 + bl PlayCry1 + bl SafariBufferExecCompleted + pop {r0} + bx r0 + .align 2, 0 +_0812BE24: .4byte gBattlePartyID +_0812BE28: .4byte gActiveBank +_0812BE2C: .4byte gPlayerParty + thumb_func_end SafariHandleFaintingCry + + thumb_func_start SafariHandleIntroSlide +SafariHandleIntroSlide: @ 812BE30 + push {lr} + ldr r1, _0812BE58 @ =gBattleBufferA + ldr r0, _0812BE5C @ =gActiveBank + ldrb r0, [r0] + lsls r0, 9 + adds r1, 0x1 + adds r0, r1 + ldrb r0, [r0] + bl sub_80E43C0 + ldr r2, _0812BE60 @ =gUnknown_02024DE8 + ldrh r0, [r2] + movs r1, 0x1 + orrs r0, r1 + strh r0, [r2] + bl SafariBufferExecCompleted + pop {r0} + bx r0 + .align 2, 0 +_0812BE58: .4byte gBattleBufferA +_0812BE5C: .4byte gActiveBank +_0812BE60: .4byte gUnknown_02024DE8 + thumb_func_end SafariHandleIntroSlide + + thumb_func_start SafariHandleTrainerBallThrow +SafariHandleTrainerBallThrow: @ 812BE64 + push {r4,r5,lr} + ldr r5, _0812BEA0 @ =gHealthboxIDs + ldr r4, _0812BEA4 @ =gActiveBank + ldrb r1, [r4] + adds r0, r1, r5 + ldrb r0, [r0] + ldr r2, _0812BEA8 @ =gBattlePartyID + lsls r1, 1 + adds r1, r2 + ldrh r2, [r1] + movs r1, 0x64 + muls r1, r2 + ldr r2, _0812BEAC @ =gPlayerParty + adds r1, r2 + movs r2, 0xA + bl sub_8045A5C + ldrb r0, [r4] + bl sub_804777C + ldrb r0, [r4] + adds r0, r5 + ldrb r0, [r0] + bl sub_8043DFC + bl SafariBufferExecCompleted + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_0812BEA0: .4byte gHealthboxIDs +_0812BEA4: .4byte gActiveBank +_0812BEA8: .4byte gBattlePartyID +_0812BEAC: .4byte gPlayerParty + thumb_func_end SafariHandleTrainerBallThrow + + thumb_func_start SafariHandlecmd48 +SafariHandlecmd48: @ 812BEB0 + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandlecmd48 + + thumb_func_start SafariHandlecmd49 +SafariHandlecmd49: @ 812BEBC + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandlecmd49 + + thumb_func_start SafariHandlecmd50 +SafariHandlecmd50: @ 812BEC8 + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandlecmd50 + + thumb_func_start SafariHandleSpriteInvisibility +SafariHandleSpriteInvisibility: @ 812BED4 + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandleSpriteInvisibility + + thumb_func_start SafariHandleBattleAnimation +SafariHandleBattleAnimation: @ 812BEE0 + push {r4-r6,lr} + sub sp, 0x4 + ldr r5, _0812BF18 @ =gBattleBufferA + ldr r6, _0812BF1C @ =gActiveBank + ldrb r2, [r6] + lsls r1, r2, 9 + adds r0, r5, 0x1 + adds r0, r1, r0 + ldrb r3, [r0] + adds r0, r5, 0x2 + adds r0, r1, r0 + ldrb r4, [r0] + adds r5, 0x3 + adds r1, r5 + ldrb r0, [r1] + lsls r0, 8 + orrs r4, r0 + str r4, [sp] + adds r0, r2, 0 + adds r1, r2, 0 + bl move_anim_start_t3 + lsls r0, 24 + cmp r0, 0 + beq _0812BF20 + bl SafariBufferExecCompleted + b _0812BF2C + .align 2, 0 +_0812BF18: .4byte gBattleBufferA +_0812BF1C: .4byte gActiveBank +_0812BF20: + ldr r0, _0812BF34 @ =gBattleBankFunc + ldrb r1, [r6] + lsls r1, 2 + adds r1, r0 + ldr r0, _0812BF38 @ =sub_812B794 + str r0, [r1] +_0812BF2C: + add sp, 0x4 + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_0812BF34: .4byte gBattleBankFunc +_0812BF38: .4byte sub_812B794 + thumb_func_end SafariHandleBattleAnimation + + thumb_func_start SafariHandleLinkStandbyMsg +SafariHandleLinkStandbyMsg: @ 812BF3C + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandleLinkStandbyMsg + + thumb_func_start SafariHandleResetActionMoveSelection +SafariHandleResetActionMoveSelection: @ 812BF48 + push {lr} + bl SafariBufferExecCompleted + pop {r0} + bx r0 + thumb_func_end SafariHandleResetActionMoveSelection + + thumb_func_start SafariHandlecmd55 +SafariHandlecmd55: @ 812BF54 + push {r4,lr} + ldr r2, _0812BF98 @ =gBattleOutcome + ldr r1, _0812BF9C @ =gBattleBufferA + ldr r4, _0812BFA0 @ =gActiveBank + ldrb r0, [r4] + lsls r0, 9 + adds r1, 0x1 + adds r0, r1 + ldrb r0, [r0] + strb r0, [r2] + movs r0, 0x5 + bl FadeOutMapMusic + movs r0, 0x3 + bl BeginFastPaletteFade + bl SafariBufferExecCompleted + ldr r0, _0812BFA4 @ =gBattleTypeFlags + ldrh r1, [r0] + movs r0, 0x6 + ands r0, r1 + cmp r0, 0x2 + bne _0812BF90 + ldr r0, _0812BFA8 @ =gBattleBankFunc + ldrb r1, [r4] + lsls r1, 2 + adds r1, r0 + ldr r0, _0812BFAC @ =sub_812B6AC + str r0, [r1] +_0812BF90: + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_0812BF98: .4byte gBattleOutcome +_0812BF9C: .4byte gBattleBufferA +_0812BFA0: .4byte gActiveBank +_0812BFA4: .4byte gBattleTypeFlags +_0812BFA8: .4byte gBattleBankFunc +_0812BFAC: .4byte sub_812B6AC + thumb_func_end SafariHandlecmd55 + + thumb_func_start SafariHandlecmd56 +SafariHandlecmd56: @ 812BFB0 + bx lr + thumb_func_end SafariHandlecmd56 + + .align 2, 0 @ Don't pad with nop. diff --git a/data/battle_811DA74.s b/data/battle_811DA74.s deleted file mode 100644 index 873c76eb9..000000000 --- a/data/battle_811DA74.s +++ /dev/null @@ -1,64 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - - .align 2 -gLinkPartnerBufferCommands:: @ 83FE4F4 - .4byte LinkPartnerHandleGetAttributes - .4byte sub_811EC04 - .4byte LinkPartnerHandleSetAttributes - .4byte sub_811F664 - .4byte sub_811F6D8 - .4byte sub_811F7F4 - .4byte sub_811F9D0 - .4byte sub_811FAE4 - .4byte sub_811FC30 - .4byte sub_811FC3C - .4byte sub_811FCE8 - .4byte sub_811FDCC - .4byte sub_811FDD8 - .4byte sub_811FDE4 - .4byte sub_811FDF0 - .4byte sub_811FDFC - .4byte sub_8120094 - .4byte sub_81200F8 - .4byte sub_8120104 - .4byte sub_8120110 - .4byte sub_812011C - .4byte sub_8120128 - .4byte sub_8120134 - .4byte sub_8120140 - .4byte LinkPartnerHandleHealthBarUpdate - .4byte LinkPartnerHandleExpBarUpdate - .4byte LinkPartnerHandleStatusIconUpdate - .4byte LinkPartnerHandleStatusAnimation - .4byte sub_8120324 - .4byte sub_8120330 - .4byte sub_812033C - .4byte sub_8120348 - .4byte sub_8120354 - .4byte sub_8120360 - .4byte sub_812036C - .4byte sub_8120378 - .4byte sub_8120384 - .4byte sub_8120390 - .4byte sub_81203AC - .4byte sub_81203E4 - .4byte sub_81203FC - .4byte LinkPartnerHandleHitAnimation - .4byte sub_8120494 - .4byte LinkPartnerHandleEffectivenessSound - .4byte sub_81204E4 - .4byte LinkPartnerHandleFaintingCry - .4byte dp01t_2E_3_battle_intro - .4byte sub_8120588 - .4byte dp01t_30_3_80EB11C - .4byte sub_8120920 - .4byte sub_812096C - .4byte sub_8120978 - .4byte sub_81209D8 - .4byte sub_8120A40 - .4byte sub_8120A4C - .4byte sub_8120A58 - .4byte nullsub_75 diff --git a/data/battle_anim_81258BC.s b/data/battle_anim_81258BC.s deleted file mode 100644 index 993adbc2e..000000000 --- a/data/battle_anim_81258BC.s +++ /dev/null @@ -1,64 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - - .align 2 -gSafariBufferCommands:: @ 8402080 - .4byte SafariHandleGetAttributes - .4byte sub_812B870 - .4byte sub_812B87C - .4byte sub_812B888 - .4byte sub_812B894 - .4byte sub_812B8A0 - .4byte sub_812B8AC - .4byte sub_812B8B8 - .4byte sub_812B994 - .4byte sub_812B9A0 - .4byte sub_812B9AC - .4byte sub_812B9B8 - .4byte sub_812B9C4 - .4byte sub_812BA14 - .4byte sub_812BA70 - .4byte sub_812BA7C - .4byte SafariHandlePrintString - .4byte SafariHandlePrintStringPlayerOnly - .4byte sub_812BB10 - .4byte sub_812BBFC - .4byte sub_812BC08 - .4byte sub_812BC14 - .4byte sub_812BC54 - .4byte sub_812BC60 - .4byte sub_812BC6C - .4byte sub_812BC78 - .4byte sub_812BC84 - .4byte sub_812BCC0 - .4byte sub_812BCCC - .4byte sub_812BCD8 - .4byte sub_812BCE4 - .4byte sub_812BCF0 - .4byte sub_812BCFC - .4byte sub_812BD08 - .4byte sub_812BD14 - .4byte sub_812BD20 - .4byte sub_812BD2C - .4byte sub_812BD38 - .4byte sub_812BD44 - .4byte sub_812BD50 - .4byte sub_812BD5C - .4byte sub_812BD68 - .4byte sub_812BD74 - .4byte sub_812BD80 - .4byte sub_812BDC4 - .4byte sub_812BDF4 - .4byte dp01t_2E_6_battle_intro - .4byte sub_812BE64 - .4byte sub_812BEB0 - .4byte sub_812BEBC - .4byte sub_812BEC8 - .4byte sub_812BED4 - .4byte sub_812BEE0 - .4byte sub_812BF3C - .4byte sub_812BF48 - .4byte sub_812BF54 - .4byte nullsub_78 diff --git a/data/battle_anim_8137220.s b/data/battle_anim_8137220.s deleted file mode 100644 index c1673af9a..000000000 --- a/data/battle_anim_8137220.s +++ /dev/null @@ -1,64 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - - .align 2 -gWallyBufferCommands:: @ 84061A4 - .4byte dp01t_00_5_getattr - .4byte sub_8138230 - .4byte sub_813823C - .4byte sub_8138C90 - .4byte sub_8138C9C - .4byte sub_8138CA8 - .4byte sub_8138CB4 - .4byte sub_8138D38 - .4byte sub_8138E04 - .4byte sub_8138ED0 - .4byte sub_8138EDC - .4byte sub_8138EE8 - .4byte sub_8138EF4 - .4byte sub_8138F44 - .4byte sub_8138FA0 - .4byte sub_8138FAC - .4byte sub_8139208 - .4byte dp01t_11_5_message_for_player_only - .4byte sub_8139298 - .4byte sub_8139378 - .4byte sub_8139384 - .4byte sub_81393EC - .4byte sub_813942C - .4byte sub_8139438 - .4byte sub_8139444 - .4byte sub_8139544 - .4byte sub_8139550 - .4byte sub_813955C - .4byte sub_8139568 - .4byte sub_8139574 - .4byte sub_8139580 - .4byte sub_813958C - .4byte sub_8139598 - .4byte sub_81395A4 - .4byte sub_81395B0 - .4byte sub_81395BC - .4byte sub_81395C8 - .4byte sub_81395D4 - .4byte sub_81395E0 - .4byte sub_81395EC - .4byte sub_81395F8 - .4byte sub_8139604 - .4byte sub_8139674 - .4byte sub_8139680 - .4byte sub_81396B0 - .4byte sub_81396E0 - .4byte dp01t_2E_5_battle_intro - .4byte sub_8139750 - .4byte sub_8139AA0 - .4byte sub_8139B20 - .4byte sub_8139B2C - .4byte sub_8139B38 - .4byte sub_8139B44 - .4byte sub_8139BA0 - .4byte sub_8139BAC - .4byte sub_8139BB8 - .4byte nullsub_80 diff --git a/data/data2b.s b/data/data2b.s index 0387b6699..329384396 100644 --- a/data/data2b.s +++ b/data/data2b.s @@ -76,129 +76,3 @@ gUnknown_081FAF4C:: @ 81FAF4C .4byte 0x0200a000 .4byte 0x0200c000 .4byte 0x0200e000 - - .align 2 -gOpponentBufferCommands:: @ 81FAF5C - .4byte OpponentHandleGetAttributes - .4byte dp01t_01_2_read_pokmon_data_slice - .4byte OpponentHandleSetAttributes - .4byte sub_8034744 - .4byte OpponentHandleLoadPokeSprite - .4byte OpponentHandleSendOutPoke - .4byte OpponentHandleReturnPokeToBall - .4byte OpponentHandleTrainerThrow - .4byte OpponentHandleTrainerSlide - .4byte OpponentHandleTrainerSlideBack - .4byte sub_8035030 - .4byte sub_80350D4 - .4byte sub_80350E0 - .4byte OpponentHandleBallThrow - .4byte OpponentHandlePause - .4byte OpponentHandleMoveAnimation - .4byte OpponentHandlePrintString - .4byte OpponentHandlePrintStringPlayerOnly - .4byte sub_803540C - .4byte sub_803541C - .4byte sub_8035428 - .4byte sub_8035590 - .4byte sub_80355C0 - .4byte sub_80356C0 - .4byte OpponentHandleHealthBarUpdate - .4byte OpponentHandleExpBarUpdate - .4byte OpponentHandleStatusIconUpdate - .4byte OpponentHandleStatusAnimation - .4byte OpponentHandleStatusXor - .4byte sub_80358B0 - .4byte OpponentHandleDMATransfer - .4byte sub_80358C8 - .4byte sub_80358D4 - .4byte sub_80358E0 - .4byte sub_80358EC - .4byte sub_80358F8 - .4byte sub_8035904 - .4byte sub_8035910 - .4byte sub_803592C - .4byte sub_8035964 - .4byte sub_803597C - .4byte OpponentHandleHitAnimation - .4byte sub_8035A14 - .4byte OpponentHandleEffectivenessSound - .4byte sub_8035A64 - .4byte OpponentHandleFaintingCry - .4byte dp01t_2E_7_battle_intro - .4byte sub_8035B04 - .4byte dp01t_30_7_0803D67C - .4byte sub_8035E6C - .4byte sub_8035EB8 - .4byte OpponentHandleSpriteInvisibility - .4byte OpponentHandleBattleAnimation - .4byte OpponentHandleLinkStandbyMsg - .4byte OpponentHandleResetActionMoveSelection - .4byte sub_8035FA4 - .4byte nullsub_46 - -@ unreferenced unknown values - .byte 0xB0, 0xB0, 0xC8, 0x98, 0x28, 0x28, 0x28, 0x20 - - .align 2 -gLinkOpponentBufferCommands:: @ 81FB048 - .4byte LinkOpponentHandleGetAttributes - .4byte sub_803889C - .4byte sub_80388A8 - .4byte sub_8039220 - .4byte sub_8039294 - .4byte sub_80393E4 - .4byte sub_80395B4 - .4byte sub_80396D0 - .4byte sub_80398A4 - .4byte sub_80398B0 - .4byte sub_803995C - .4byte sub_8039A00 - .4byte sub_8039A0C - .4byte sub_8039A18 - .4byte sub_8039A24 - .4byte sub_8039A30 - .4byte sub_8039CC8 - .4byte sub_8039D2C - .4byte sub_8039D38 - .4byte sub_8039D44 - .4byte sub_8039D50 - .4byte sub_8039D5C - .4byte sub_8039D68 - .4byte sub_8039D74 - .4byte sub_8039D80 - .4byte sub_8039E70 - .4byte sub_8039E7C - .4byte sub_8039EF0 - .4byte sub_8039F58 - .4byte sub_8039F64 - .4byte sub_8039F70 - .4byte sub_8039F7C - .4byte sub_8039F88 - .4byte sub_8039F94 - .4byte sub_8039FA0 - .4byte sub_8039FAC - .4byte sub_8039FB8 - .4byte sub_8039FC4 - .4byte sub_8039FE0 - .4byte sub_803A018 - .4byte sub_803A030 - .4byte dp01t_29_4_blink - .4byte sub_803A0C8 - .4byte sub_803A0D4 - .4byte sub_803A118 - .4byte sub_803A148 - .4byte dp01t_2E_4_battle_intro - .4byte sub_803A1B8 - .4byte sub_803A3DC - .4byte sub_803A520 - .4byte sub_803A56C - .4byte sub_803A578 - .4byte bx_exec_buffer_A_ch0_tbl4 - .4byte sub_803A640 - .4byte sub_803A64C - .4byte sub_803A658 - .4byte nullsub_48 - -@ 81FB12C - .include "data/battle_moves.inc" diff --git a/data/data2c.s b/data/data2c.s new file mode 100644 index 000000000..260b451cf --- /dev/null +++ b/data/data2c.s @@ -0,0 +1,10 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .section .rodata + + + +@ 81FB12C + .include "data/battle_moves.inc" + diff --git a/include/battle.h b/include/battle.h index 08ed5cf58..255e6d0e5 100644 --- a/include/battle.h +++ b/include/battle.h @@ -689,17 +689,17 @@ extern u8 gBattleTextBuff1[]; //function declarations of buffer emits void EmitGetAttributes(u8 buffID, u8 request, u8 c); //0x0 -void dp01_build_cmdbuf_x01_a_b_0(u8 a, u8 b, u8 c); //0x1 +void Emitcmd1(u8 a, u8 b, u8 c); //0x1 void EmitSetAttributes(u8 a, u8 request, u8 c, u8 bytes, void *data); //0x2 -void EmitSwitchInAnim(u8 a, u8 b, u8 c); //0x5 +void EmitSendOutPoke(u8 a, u8 b, u8 c); //0x5 void EmitReturnPokeToBall(u8 a, u8 b); //0x6 void EmitTrainerSlide(u8 a); //0x8 -void EmitFaintAnimation(u8 a); //0xA -void EmitBallThrowAnim(u8 a, u8 shakes); //0xD +void Emitcmd10(u8 a); //0xA +void EmitBallThrow(u8 a, u8 shakes); //0xD //void EmitMoveAnimation(u8 a, u16 move, u8 turn, u16 power, s32 dmg, u8 happiness, void *disable_struct); //0xF void EmitPrintString(u8 a, u16 stringID); //0x10 //void EmitPrintStringPlayerOnly(u8 a, u16 stringID); //0x11 -void EmitChoosePokemon(u8 a, u8 b, u8 c, u8 d, u8 *e); //0x16 +void Emitcmd22(u8 a, u8 b, u8 c, u8 d, u8 *e); //0x16 //void EmitHealthBarUpdate(u8 a, u16 b); //0x18; Had to declare the second arg as u16 because s16 wont match in atk0b //void EmitExpBarUpdate(u8 a, u8 b, u16 c); //0x19 void EmitStatusIconUpdate(u8 a, u32 b, u32 c); //0x1A @@ -707,15 +707,15 @@ void EmitStatusAnimation(u8 a, u8 b, u32 c); //0x1B void EmitStatusXor(u8 a, u8 b); //0x1C void EmitHitAnimation(u8 a); //0x29 void EmitEffectivenessSound(u8 a, u16 sound); //0x2B -void EmitPlaySound(u8 a, u16 sound); //0x2C +void Emitcmd44(u8 a, u16 sound); //0x2C void EmitFaintingCry(u8 a); //0x2D -void EmitBattleIntroSlide(u8 a, u8 b); //0x2E -void dp01_build_cmdbuf_x30_TODO(u8 a, u8 *b, u8 c); //0x30 -void dp01_build_cmdbuf_x31_31_31_31(u8 a); //0x31 +void EmitIntroSlide(u8 a, u8 b); //0x2E +void Emitcmd48(u8 a, u8 *b, u8 c); //0x30 +void Emitcmd49(u8 a); //0x31 void EmitSpriteInvisibility(u8 a, u8 b); //0x33 void EmitBattleAnimation(u8 a, u8 b, u16 c); //0x34 void EmitResetActionMoveSelection(u8 a, u8 b); //0x36 -void dp01_build_cmdbuf_x37_a(u8 a, u8 b); //0x37 +void Emitcmd55(u8 a, u8 b); //0x37 #define REQUEST_ALL_BATTLE 0x0 #define REQUEST_SPECIES_BATTLE 0x1 diff --git a/include/rom3.h b/include/rom3.h index 1fa55d11a..fb07f045f 100644 --- a/include/rom3.h +++ b/include/rom3.h @@ -15,53 +15,53 @@ void sub_800C1A8(u8); void sub_800C35C(void); void sub_800C47C(u8); void EmitGetAttributes(u8 a, u8 b, u8 c); -void dp01_build_cmdbuf_x01_a_b_0(u8 a, u8 b, u8 c); -void dp01_build_cmdbuf_x04_4_4_4(u8 a); -void EmitSwitchInAnim(u8, u8, u8); +void Emitcmd1(u8 a, u8 b, u8 c); +void EmitLoadPokeSprite(u8 a); +void EmitSendOutPoke(u8, u8, u8); void EmitReturnPokeToBall(u8 a, u8 b); -void dp01_build_cmdbuf_x07_7_7_7(u8 a); +void EmitTrainerThrow(u8 a); void EmitTrainerSlide(u8 a); -void dp01_build_cmdbuf_x09_9_9_9(u8 a); -void EmitFaintAnimation(u8 a); -void dp01_build_cmdbuf_x0B_B_B_B(u8 a); -void dp01_build_cmdbuf_x0C_C_C_C(u8 a); -void EmitBallThrowAnim(u8 a, u8 b); +void EmitTrainerSlideBack(u8 a); +void Emitcmd10(u8 a); +void Emitcmd11(u8 a); +void Emitcmd12(u8 a); +void EmitBallThrow(u8 a, u8 b); void EmitMoveAnimation(u8 a, u16 b, u8 c, u16 d, s32 e, u8 f, struct DisableStruct *g); void EmitPrintString(u8 a, u16 b); void EmitPrintStringPlayerOnly(u8 a, u16 stringID); -void dp01_build_cmdbuf_x12_a_bb(u8 a, u8 b, u16 c); -void sub_800CBA4(u8 a, u8 b, u8 c, u8 *d); -void sub_800CBE0(u8 a, u8 *b); -void EmitChoosePokemon(u8 a, u8 b, u8 c, u8 d, u8 *e); -void dp01_build_cmdbuf_x17_17_17_17(u8 a); +void Emitcmd18(u8 a, u8 b, u16 c); +void Emitcmd20(u8 a, u8 b, u8 c, u8 *d); +void EmitOpenBag(u8 a, u8 *b); +void Emitcmd22(u8 a, u8 b, u8 c, u8 d, u8 *e); +void Emitcmd23(u8 a); void EmitHealthBarUpdate(u8 a, u16 b); void EmitExpBarUpdate(u8 a, u8 b, u16 c); void EmitStatusIconUpdate(u8 a, u32 b, u32 c); void EmitStatusAnimation(u8 a, u8 b, u32 c); void EmitStatusXor(u8 a, u8 b); -void dp01_build_cmdbuf_x1D_1D_numargs_varargs(u8, u16, u8 *); -void dp01_build_cmdbuf_x21_a_bb(u8 a, u8 b, u16 c); -void dp01_build_cmdbuf_x22_a_three_bytes(u8 a, u8 b, u8 *c); -void dp01_build_cmdbuf_x23_aa_0(u8 a, u16 b); -void dp01_build_cmdbuf_x24_aa_0(u8 a, u16 b); -void dp01_build_cmdbuf_x25_25_25_25(u8 a); -void dp01_build_cmdbuf_x26_a(u8 a, u8 b); -void dp01_build_cmdbuf_x27_27_27_27(u8 a); -void dp01_build_cmdbuf_x28_28_28_28(u8 a); +void Emitcmd29(u8, u16, u8 *); +void Emitcmd33(u8 a, u8 b, u16 c); +void Emitcmd34(u8 a, u8 b, u8 *c); +void Emitcmd35(u8 a, u16 b); +void Emitcmd36(u8 a, u16 b); +void Emitcmd37(u8 a); +void Emitcmd38(u8 a, u8 b); +void Emitcmd39(u8 a); +void Emitcmd40(u8 a); void EmitHitAnimation(u8 a); -void dp01_build_cmdbuf_x2A_2A_2A_2A(u8 a); +void Emitcmd42(u8 a); void EmitEffectivenessSound(u8 a, u16 b); -void EmitPlaySound(u8 a, u16 b); +void Emitcmd44(u8 a, u16 b); void EmitFaintingCry(u8 a); -void EmitBattleIntroSlide(u8 a, u8 b); -void dp01_build_cmdbuf_x2F_2F_2F_2F(u8 a); -void dp01_build_cmdbuf_x30_TODO(u8 a, u8 *b, u8 c); -void dp01_build_cmdbuf_x31_31_31_31(u8 a); -void dp01_build_cmdbuf_x32_32_32_32(u8 a); +void EmitIntroSlide(u8 a, u8 b); +void EmitTrainerBallThrow(u8 a); +void Emitcmd48(u8 a, u8 *b, u8 c); +void Emitcmd49(u8 a); +void Emitcmd50(u8 a); void EmitSpriteInvisibility(u8 a, u8 b); void EmitBattleAnimation(u8 a, u8 b, u16 c); void EmitLinkStandbyMsg(u8 a, u8 b); void EmitResetActionMoveSelection(u8 a, u8 b); -void dp01_build_cmdbuf_x37_a(u8 a, u8 b); +void Emitcmd55(u8 a, u8 b); #endif // GUARD_ROM3_H diff --git a/ld_script.txt b/ld_script.txt index 7ad3c3ddb..4a9775673 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -55,12 +55,12 @@ SECTIONS { asm/battle_2.o(.text); src/battle_3.o(.text); src/battle_4.o(.text); - src/battle_5.o(.text); - src/battle_6.o(.text); + src/battle_controller_player.o(.text); src/battle_7.o(.text); - src/battle_8.o(.text); + src/battle_controller_opponent.o(.text); asm/battle_9.o(.text); - src/battle_10.o(.text); + asm/battle_controller_linkopponent1.o(.text); + src/battle_controller_linkopponent2.o(.text); src/pokemon_1.o(.text); src/calculate_base_damage.o(.text); src/pokemon_2.o(.text); @@ -227,7 +227,7 @@ SECTIONS { src/landmark.o(.text); src/fldeff_strength.o(.text); src/battle_transition.o(.text); - src/battle_811DA74.o(.text); + src/battle_controller_linkpartner.o(.text); src/battle_message.o(.text); src/choose_party.o(.text); asm/cable_car.o(.text); @@ -239,8 +239,9 @@ SECTIONS { asm/field_effect_helpers.o(.text); asm/contest_ai.o(.text); asm/battle_anim_81258BC.o(.text); - src/battle_anim_81258BC.o(.text); - asm/battle_anim_81258BC.o(.text_812BBFC); + asm/battle_controller_safari.o(.text); + src/battle_controller_safari.o(.text); + asm/battle_controller_safari.o(.text_812BBFC); src/fldeff_sweetscent.o(.text); asm/battle_anim_812C144.o(.text); src/learn_move.o(.text); @@ -249,7 +250,7 @@ SECTIONS { src/roamer.o(.text); asm/battle_tower.o(.text); src/use_pokeblock.o(.text); - src/battle_anim_8137220.o(.text); + src/battle_controller_wally.o(.text); src/player_pc.o(.text); src/intro.o(.text); src/field_region_map.o(.text); @@ -330,8 +331,11 @@ SECTIONS { data/main_menu.o(.rodata); data/data2a.o(.rodata); src/battle_4.o(.rodata); - src/battle_5.o(.rodata); + src/battle_controller_player.o(.rodata); data/data2b.o(.rodata); + src/battle_controller_opponent.o(.rodata); + src/battle_controller_linkopponent2.o(.rodata); + data/data2c.o(.rodata); src/battle_3.o(.rodata); src/pokemon_data.o(.rodata); . = ALIGN(4); @@ -445,21 +449,21 @@ SECTIONS { data/pokedex_cry_screen.o(.rodata); data/landmark.o(.rodata); src/battle_transition.o(.rodata); - data/battle_811DA74.o(.rodata); + src/battle_controller_linkpartner.o(.rodata); data/battle_message.o(.rodata); src/choose_party.o(.rodata); data/cable_car.o(.rodata); src/save.o(.rodata); data/field_effect_helpers.o(.rodata); data/contest_ai.o(.rodata); - data/battle_anim_81258BC.o(.rodata); + src/battle_controller_safari.o(.rodata); data/battle_anim_812C144.o(.rodata); src/learn_move.o(.rodata); src/decoration_inventory.o(.rodata); src/roamer.o(.rodata); data/battle_tower.o(.rodata); src/use_pokeblock.o(.rodata); - data/battle_anim_8137220.o(.rodata); + src/battle_controller_wally.o(.rodata); src/player_pc.o(.rodata); src/intro.o(.rodata); data/battle_anim_813F0F4.o(.rodata); diff --git a/src/battle_10.c b/src/battle_10.c deleted file mode 100644 index 1a01e5383..000000000 --- a/src/battle_10.c +++ /dev/null @@ -1,1323 +0,0 @@ -#include "global.h" -#include "battle.h" -#include "battle_interface.h" -#include "data2.h" -#include "link.h" -#include "palette.h" -#include "rom_8077ABC.h" -#include "rom3.h" -#include "songs.h" -#include "sound.h" -#include "sprite.h" -#include "string_util.h" -#include "task.h" -#include "text.h" -#include "util.h" - -struct UnknownStruct3 -{ - u16 moves[4]; - u8 pp[4]; - u8 ppBonuses; -}; - -extern u8 gActiveBank; -extern u8 gBattleBufferA[][0x200]; -extern u8 gObjectBankIDs[]; -extern u16 gBattlePartyID[]; -extern u8 gHealthboxIDs[]; -extern u16 gBattleTypeFlags; -extern u8 gBattleMonForms[]; -extern void (*gBattleBankFunc[])(void); -extern u32 *gDisableStructMoveAnim; -extern u32 gMoveDmgMoveAnim; -extern u16 gMovePowerMoveAnim; -extern u8 gHappinessMoveAnim; -extern u16 gWeatherMoveAnim; -extern u32 gPID_perBank[]; -extern u8 gAnimScriptActive; -extern void (*gAnimScriptCallback)(void); -extern u8 gDisplayedStringBattle[]; -extern bool8 gDoingBattleAnim; -extern u8 gBattleOutcome; -extern u16 gUnknown_02024DE8; -extern u8 gUnknown_02024E68[]; -extern struct SpriteTemplate gUnknown_02024E8C; -extern u8 gUnknown_0202F7C4; -extern struct Window gUnknown_03004210; -extern u16 gUnknown_030042A0; -extern u16 gUnknown_030042A4; -extern u8 gUnknown_0300434C[]; - -extern u8 sub_8077F68(); -extern u8 sub_8079E90(); -extern u8 GetBankIdentity(u8); -extern void BattleLoadOpponentMonSprite(struct Pokemon *, u8); -extern void sub_8037A74(void); -extern void sub_8032984(u8, u16); -extern void sub_8037E30(void); -extern void sub_80312F0(struct Sprite *); -extern u8 sub_8046400(); -extern void sub_8032A08(); -extern void sub_8043DB0(); -extern void sub_8037BBC(void); -extern s32 sub_803FC34(u16); -extern void sub_8031A6C(u16, u8); -extern void sub_80313A0(struct Sprite *); -extern void sub_803757C(void); -extern void oamt_add_pos2_onto_pos1(); -extern void oamt_set_x3A_32(); -extern void sub_8078B34(struct Sprite *); -extern void sub_80375B4(void); -extern void sub_8010384(struct Sprite *); -extern void sub_8037B78(void); -extern u8 sub_8031720(); -extern bool8 mplay_80342A4(u8); -extern void ExecuteMoveAnim(); -extern void sub_80326EC(); -extern void sub_8031F24(void); -extern void sub_80324BC(); -extern void BufferStringBattle(); -extern void sub_8037C2C(void); -extern void sub_8043D84(); -extern void sub_8037B24(void); -extern void sub_8045A5C(); -extern void sub_8037FAC(void); -extern void move_anim_start_t2_for_situation(); -extern void dp01t_0F_4_move_anim(void); -extern void sub_8047858(); -extern u8 GetBankSide(u8); -extern void sub_80E43C0(); -extern void sub_803A3A8(struct Sprite *); -extern void sub_8044CA0(u8); -extern void nullsub_47(void); -extern bool8 IsDoubleBattle(void); -extern void sub_8037840(void); -extern void sub_8031B74(); -extern u8 sub_8078874(); -extern u8 move_anim_start_t3(); -extern void sub_8037FD8(void); -extern void sub_8037F34(void); -extern void dp01_tbl4_exec_completed(void); - -u32 dp01_getattr_by_ch1_for_player_pokemon__(u8, u8 *); -void sub_8038900(u8); -void sub_8039430(u8, u8); -void sub_8039648(void); -void sub_8039B64(void); -void sub_803A2C4(u8); -void sub_803A4E0(void); - -void LinkOpponentHandleGetAttributes(void) -{ - u8 buffer[0x100]; - u32 r6 = 0; - u8 r4; - s32 i; - - if (gBattleBufferA[gActiveBank][2] == 0) - { - r6 = dp01_getattr_by_ch1_for_player_pokemon__(gBattlePartyID[gActiveBank], buffer); - } - else - { - r4 = gBattleBufferA[gActiveBank][2]; - for (i = 0; i < 6; i++) - { - if (r4 & 1) - r6 += dp01_getattr_by_ch1_for_player_pokemon__(i, buffer + r6); - r4 >>= 1; - } - } - dp01_build_cmdbuf_x1D_1D_numargs_varargs(1, r6, buffer); - dp01_tbl4_exec_completed(); -} - -u32 dp01_getattr_by_ch1_for_player_pokemon__(u8 a, u8 *buffer) -{ - struct BattlePokemon battlePokemon; - struct UnknownStruct3 moveData; - u8 nickname[20]; - u8 *src; - s16 data16; - u32 data32; - s32 size = 0; - - switch (gBattleBufferA[gActiveBank][1]) - { - case 0: - battlePokemon.species = GetMonData(&gEnemyParty[a], MON_DATA_SPECIES); - battlePokemon.item = GetMonData(&gEnemyParty[a], MON_DATA_HELD_ITEM); - for (size = 0; size < 4; size++) - { - battlePokemon.moves[size] = GetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + size); - battlePokemon.pp[size] = GetMonData(&gEnemyParty[a], MON_DATA_PP1 + size); - } - battlePokemon.ppBonuses = GetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES); - battlePokemon.friendship = GetMonData(&gEnemyParty[a], MON_DATA_FRIENDSHIP); - battlePokemon.experience = GetMonData(&gEnemyParty[a], MON_DATA_EXP); - battlePokemon.hpIV = GetMonData(&gEnemyParty[a], MON_DATA_HP_IV); - battlePokemon.attackIV = GetMonData(&gEnemyParty[a], MON_DATA_ATK_IV); - battlePokemon.defenseIV = GetMonData(&gEnemyParty[a], MON_DATA_DEF_IV); - battlePokemon.speedIV = GetMonData(&gEnemyParty[a], MON_DATA_SPD_IV); - battlePokemon.spAttackIV = GetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV); - battlePokemon.spDefenseIV = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV); - battlePokemon.personality = GetMonData(&gEnemyParty[a], MON_DATA_PERSONALITY); - battlePokemon.status1 = GetMonData(&gEnemyParty[a], MON_DATA_STATUS); - battlePokemon.level = GetMonData(&gEnemyParty[a], MON_DATA_LEVEL); - battlePokemon.hp = GetMonData(&gEnemyParty[a], MON_DATA_HP); - battlePokemon.maxHP = GetMonData(&gEnemyParty[a], MON_DATA_MAX_HP); - battlePokemon.attack = GetMonData(&gEnemyParty[a], MON_DATA_ATK); - battlePokemon.defense = GetMonData(&gEnemyParty[a], MON_DATA_DEF); - battlePokemon.speed = GetMonData(&gEnemyParty[a], MON_DATA_SPD); - battlePokemon.spAttack = GetMonData(&gEnemyParty[a], MON_DATA_SPATK); - battlePokemon.spDefense = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF); - battlePokemon.isEgg = GetMonData(&gEnemyParty[a], MON_DATA_IS_EGG); - battlePokemon.altAbility = GetMonData(&gEnemyParty[a], MON_DATA_ALT_ABILITY); - battlePokemon.otId = GetMonData(&gEnemyParty[a], MON_DATA_OT_ID); - GetMonData(&gEnemyParty[a], MON_DATA_NICKNAME, nickname); - StringCopy10(battlePokemon.nickname, nickname); - GetMonData(&gEnemyParty[a], MON_DATA_OT_NAME, battlePokemon.otName); - src = (u8 *)&battlePokemon; - for (size = 0; size < sizeof(battlePokemon); size++) - buffer[size] = src[size]; - break; - case 1: - data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPECIES); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 2: - data16 = GetMonData(&gEnemyParty[a], MON_DATA_HELD_ITEM); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 3: - for (size = 0; size < 4; size++) - { - moveData.moves[size] = GetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + size); - moveData.pp[size] = GetMonData(&gEnemyParty[a], MON_DATA_PP1 + size); - } - moveData.ppBonuses = GetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES); - src = (u8 *)&moveData; - for (size = 0; size < sizeof(moveData); size++) - buffer[size] = src[size]; - break; - case 4: - case 5: - case 6: - case 7: - data16 = GetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - 4); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 8: - for (size = 0; size < 4; size++) - buffer[size] = GetMonData(&gEnemyParty[a], MON_DATA_PP1 + size); - buffer[size] = GetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES); - size++; - break; - case 9: - case 10: - case 11: - case 12: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - 9); - size = 1; - break; - case 17: - data32 = GetMonData(&gEnemyParty[a], MON_DATA_OT_ID); - buffer[0] = (data32 & 0x000000FF); - buffer[1] = (data32 & 0x0000FF00) >> 8; - buffer[2] = (data32 & 0x00FF0000) >> 16; - size = 3; - break; - case 18: - data32 = GetMonData(&gEnemyParty[a], MON_DATA_EXP); - buffer[0] = (data32 & 0x000000FF); - buffer[1] = (data32 & 0x0000FF00) >> 8; - buffer[2] = (data32 & 0x00FF0000) >> 16; - size = 3; - break; - case 19: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_HP_EV); - size = 1; - break; - case 20: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_ATK_EV); - size = 1; - break; - case 21: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_DEF_EV); - size = 1; - break; - case 22: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPD_EV); - size = 1; - break; - case 23: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPATK_EV); - size = 1; - break; - case 24: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF_EV); - size = 1; - break; - case 25: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_FRIENDSHIP); - size = 1; - break; - case 26: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_POKERUS); - size = 1; - break; - case 27: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_MET_LOCATION); - size = 1; - break; - case 28: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_MET_LEVEL); - size = 1; - break; - case 29: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_MET_GAME); - size = 1; - break; - case 30: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_POKEBALL); - size = 1; - break; - case 31: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_HP_IV); - buffer[1] = GetMonData(&gEnemyParty[a], MON_DATA_ATK_IV); - buffer[2] = GetMonData(&gEnemyParty[a], MON_DATA_DEF_IV); - buffer[3] = GetMonData(&gEnemyParty[a], MON_DATA_SPD_IV); - buffer[4] = GetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV); - buffer[5] = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV); - size = 6; - break; - case 32: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_HP_IV); - size = 1; - break; - case 33: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_ATK_IV); - size = 1; - break; - case 34: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_DEF_IV); - size = 1; - break; - case 35: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPD_IV); - size = 1; - break; - case 36: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV); - size = 1; - break; - case 37: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV); - size = 1; - break; - case 38: - data32 = GetMonData(&gEnemyParty[a], MON_DATA_PERSONALITY); - buffer[0] = (data32 & 0x000000FF); - buffer[1] = (data32 & 0x0000FF00) >> 8; - buffer[2] = (data32 & 0x00FF0000) >> 16; - buffer[3] = (data32 & 0xFF000000) >> 24; - size = 4; - break; - case 39: - data16 = GetMonData(&gEnemyParty[a], MON_DATA_CHECKSUM); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 40: - data32 = GetMonData(&gEnemyParty[a], MON_DATA_STATUS); - buffer[0] = (data32 & 0x000000FF); - buffer[1] = (data32 & 0x0000FF00) >> 8; - buffer[2] = (data32 & 0x00FF0000) >> 16; - buffer[3] = (data32 & 0xFF000000) >> 24; - size = 4; - break; - case 41: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_LEVEL); - size = 1; - break; - case 42: - data16 = GetMonData(&gEnemyParty[a], MON_DATA_HP); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 43: - data16 = GetMonData(&gEnemyParty[a], MON_DATA_MAX_HP); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 44: - data16 = GetMonData(&gEnemyParty[a], MON_DATA_ATK); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 45: - data16 = GetMonData(&gEnemyParty[a], MON_DATA_DEF); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 46: - data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPD); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 47: - data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPATK); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 48: - data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 49: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_COOL); - size = 1; - break; - case 50: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_BEAUTY); - size = 1; - break; - case 51: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_CUTE); - size = 1; - break; - case 52: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SMART); - size = 1; - break; - case 53: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_TOUGH); - size = 1; - break; - case 54: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SHEEN); - size = 1; - break; - case 55: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_COOL_RIBBON); - size = 1; - break; - case 56: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_BEAUTY_RIBBON); - size = 1; - break; - case 57: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_CUTE_RIBBON); - size = 1; - break; - case 58: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SMART_RIBBON); - size = 1; - break; - case 59: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_TOUGH_RIBBON); - size = 1; - break; - } - return size; -} - -void sub_803889C(void) -{ - dp01_tbl4_exec_completed(); -} - -void sub_80388A8(void) -{ - u8 i; - u8 r4; - - if (gBattleBufferA[gActiveBank][2] == 0) - { - sub_8038900(gBattlePartyID[gActiveBank]); - } - else - { - r4 = gBattleBufferA[gActiveBank][2]; - for (i = 0; i < 6; i++) - { - if (r4 & 1) - sub_8038900(i); - r4 >>= 1; - } - } - dp01_tbl4_exec_completed(); -} - -void sub_8038900(u8 a) -{ - struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBank][3]; - struct UnknownStruct3 *moveData = (struct UnknownStruct3 *)&gBattleBufferA[gActiveBank][3]; - s32 i; - - switch (gBattleBufferA[gActiveBank][1]) - { - case 0: - { - u8 iv; - - SetMonData(&gEnemyParty[a], MON_DATA_SPECIES, (u8 *)&battlePokemon->species); - SetMonData(&gEnemyParty[a], MON_DATA_HELD_ITEM, (u8 *)&battlePokemon->item); - for (i = 0; i < 4; i++) - { - SetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + i, (u8 *)&battlePokemon->moves[i]); - SetMonData(&gEnemyParty[a], MON_DATA_PP1 + i, (u8 *)&battlePokemon->pp[i]); - } - SetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES, (u8 *)&battlePokemon->ppBonuses); - SetMonData(&gEnemyParty[a], MON_DATA_FRIENDSHIP, (u8 *)&battlePokemon->friendship); - SetMonData(&gEnemyParty[a], MON_DATA_EXP, (u8 *)&battlePokemon->experience); - iv = battlePokemon->hpIV; - SetMonData(&gEnemyParty[a], MON_DATA_HP_IV, (u8 *)&iv); - iv = battlePokemon->attackIV; - SetMonData(&gEnemyParty[a], MON_DATA_ATK_IV, (u8 *)&iv); - iv = battlePokemon->defenseIV; - SetMonData(&gEnemyParty[a], MON_DATA_DEF_IV, (u8 *)&iv); - iv = battlePokemon->speedIV; - SetMonData(&gEnemyParty[a], MON_DATA_SPD_IV, (u8 *)&iv); - iv = battlePokemon->spAttackIV; - SetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV, (u8 *)&iv); - iv = battlePokemon->spDefenseIV; - SetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV, (u8 *)&iv); - SetMonData(&gEnemyParty[a], MON_DATA_PERSONALITY, (u8 *)&battlePokemon->personality); - SetMonData(&gEnemyParty[a], MON_DATA_STATUS, (u8 *)&battlePokemon->status1); - SetMonData(&gEnemyParty[a], MON_DATA_LEVEL, (u8 *)&battlePokemon->level); - SetMonData(&gEnemyParty[a], MON_DATA_HP, (u8 *)&battlePokemon->hp); - SetMonData(&gEnemyParty[a], MON_DATA_MAX_HP, (u8 *)&battlePokemon->maxHP); - SetMonData(&gEnemyParty[a], MON_DATA_ATK, (u8 *)&battlePokemon->attack); - SetMonData(&gEnemyParty[a], MON_DATA_DEF, (u8 *)&battlePokemon->defense); - SetMonData(&gEnemyParty[a], MON_DATA_SPD, (u8 *)&battlePokemon->speed); - SetMonData(&gEnemyParty[a], MON_DATA_SPATK, (u8 *)&battlePokemon->spAttack); - SetMonData(&gEnemyParty[a], MON_DATA_SPDEF, (u8 *)&battlePokemon->spDefense); - } - break; - case 1: - SetMonData(&gEnemyParty[a], MON_DATA_SPECIES, &gBattleBufferA[gActiveBank][3]); - break; - case 2: - SetMonData(&gEnemyParty[a], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBank][3]); - break; - case 3: - for (i = 0; i < 4; i++) - { - SetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + i, (u8 *)&moveData->moves[i]); - SetMonData(&gEnemyParty[a], MON_DATA_PP1 + i, (u8 *)&moveData->pp[i]); - } - SetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES, &moveData->ppBonuses); - break; - case 4: - case 5: - case 6: - case 7: - SetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - 4, &gBattleBufferA[gActiveBank][3]); - break; - case 8: - SetMonData(&gEnemyParty[a], MON_DATA_PP1, &gBattleBufferA[gActiveBank][3]); - SetMonData(&gEnemyParty[a], MON_DATA_PP2, &gBattleBufferA[gActiveBank][4]); - SetMonData(&gEnemyParty[a], MON_DATA_PP3, &gBattleBufferA[gActiveBank][5]); - SetMonData(&gEnemyParty[a], MON_DATA_PP4, &gBattleBufferA[gActiveBank][6]); - SetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBank][7]); - break; - case 9: - case 10: - case 11: - case 12: - SetMonData(&gEnemyParty[a], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - 9, &gBattleBufferA[gActiveBank][3]); - break; - case 17: - SetMonData(&gEnemyParty[a], MON_DATA_OT_ID, &gBattleBufferA[gActiveBank][3]); - break; - case 18: - SetMonData(&gEnemyParty[a], MON_DATA_EXP, &gBattleBufferA[gActiveBank][3]); - break; - case 19: - SetMonData(&gEnemyParty[a], MON_DATA_HP_EV, &gBattleBufferA[gActiveBank][3]); - break; - case 20: - SetMonData(&gEnemyParty[a], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBank][3]); - break; - case 21: - SetMonData(&gEnemyParty[a], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBank][3]); - break; - case 22: - SetMonData(&gEnemyParty[a], MON_DATA_SPD_EV, &gBattleBufferA[gActiveBank][3]); - break; - case 23: - SetMonData(&gEnemyParty[a], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBank][3]); - break; - case 24: - SetMonData(&gEnemyParty[a], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBank][3]); - break; - case 25: - SetMonData(&gEnemyParty[a], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBank][3]); - break; - case 26: - SetMonData(&gEnemyParty[a], MON_DATA_POKERUS, &gBattleBufferA[gActiveBank][3]); - break; - case 27: - SetMonData(&gEnemyParty[a], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBank][3]); - break; - case 28: - SetMonData(&gEnemyParty[a], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBank][3]); - break; - case 29: - SetMonData(&gEnemyParty[a], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBank][3]); - break; - case 30: - SetMonData(&gEnemyParty[a], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBank][3]); - break; - case 31: - SetMonData(&gEnemyParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]); - SetMonData(&gEnemyParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][4]); - SetMonData(&gEnemyParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][5]); - SetMonData(&gEnemyParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][6]); - SetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][7]); - SetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][8]); - break; - case 32: - SetMonData(&gEnemyParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]); - break; - case 33: - SetMonData(&gEnemyParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][3]); - break; - case 34: - SetMonData(&gEnemyParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][3]); - break; - case 35: - SetMonData(&gEnemyParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][3]); - break; - case 36: - SetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][3]); - break; - case 37: - SetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][3]); - break; - case 38: - SetMonData(&gEnemyParty[a], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBank][3]); - break; - case 39: - SetMonData(&gEnemyParty[a], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBank][3]); - break; - case 40: - SetMonData(&gEnemyParty[a], MON_DATA_STATUS, &gBattleBufferA[gActiveBank][3]); - break; - case 41: - SetMonData(&gEnemyParty[a], MON_DATA_LEVEL, &gBattleBufferA[gActiveBank][3]); - break; - case 42: - SetMonData(&gEnemyParty[a], MON_DATA_HP, &gBattleBufferA[gActiveBank][3]); - break; - case 43: - SetMonData(&gEnemyParty[a], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBank][3]); - break; - case 44: - SetMonData(&gEnemyParty[a], MON_DATA_ATK, &gBattleBufferA[gActiveBank][3]); - break; - case 45: - SetMonData(&gEnemyParty[a], MON_DATA_DEF, &gBattleBufferA[gActiveBank][3]); - break; - case 46: - SetMonData(&gEnemyParty[a], MON_DATA_SPD, &gBattleBufferA[gActiveBank][3]); - break; - case 47: - SetMonData(&gEnemyParty[a], MON_DATA_SPATK, &gBattleBufferA[gActiveBank][3]); - break; - case 48: - SetMonData(&gEnemyParty[a], MON_DATA_SPDEF, &gBattleBufferA[gActiveBank][3]); - break; - case 49: - SetMonData(&gEnemyParty[a], MON_DATA_COOL, &gBattleBufferA[gActiveBank][3]); - break; - case 50: - SetMonData(&gEnemyParty[a], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBank][3]); - break; - case 51: - SetMonData(&gEnemyParty[a], MON_DATA_CUTE, &gBattleBufferA[gActiveBank][3]); - break; - case 52: - SetMonData(&gEnemyParty[a], MON_DATA_SMART, &gBattleBufferA[gActiveBank][3]); - break; - case 53: - SetMonData(&gEnemyParty[a], MON_DATA_TOUGH, &gBattleBufferA[gActiveBank][3]); - break; - case 54: - SetMonData(&gEnemyParty[a], MON_DATA_SHEEN, &gBattleBufferA[gActiveBank][3]); - break; - case 55: - SetMonData(&gEnemyParty[a], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBank][3]); - break; - case 56: - SetMonData(&gEnemyParty[a], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBank][3]); - break; - case 57: - SetMonData(&gEnemyParty[a], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBank][3]); - break; - case 58: - SetMonData(&gEnemyParty[a], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBank][3]); - break; - case 59: - SetMonData(&gEnemyParty[a], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBank][3]); - break; - } -} - -void sub_8039220(void) -{ - u8 *dst; - u8 i; - - dst = (u8 *)&gEnemyParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1]; - for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++) - dst[i] = gBattleBufferA[gActiveBank][3 + i]; - dp01_tbl4_exec_completed(); -} - -void sub_8039294(void) -{ - u16 species = GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES); - - BattleLoadOpponentMonSprite(&gEnemyParty[gBattlePartyID[gActiveBank]], gActiveBank); - GetMonSpriteTemplate_803C56C(species, GetBankIdentity(gActiveBank)); - gObjectBankIDs[gActiveBank] = CreateSprite( - &gUnknown_02024E8C, - sub_8077ABC(gActiveBank, 2), - sub_8077F68(gActiveBank), - sub_8079E90(gActiveBank)); - gSprites[gObjectBankIDs[gActiveBank]].pos2.x = -240; - gSprites[gObjectBankIDs[gActiveBank]].data0 = gActiveBank; - gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank; - StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], gBattleMonForms[gActiveBank]); - sub_8032984(gActiveBank, GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES)); - gBattleBankFunc[gActiveBank] = sub_8037A74; -} - -void sub_80393E4(void) -{ - gBattlePartyID[gActiveBank] = gBattleBufferA[gActiveBank][1]; - sub_8039430(gActiveBank, gBattleBufferA[gActiveBank][2]); - gBattleBankFunc[gActiveBank] = sub_8037E30; -} - -void sub_8039430(u8 a, u8 b) -{ - u16 species; - - sub_8032AA8(a, b); - gBattlePartyID[a] = gBattleBufferA[a][1]; - species = GetMonData(&gEnemyParty[gBattlePartyID[a]], MON_DATA_SPECIES); - gUnknown_0300434C[a] = CreateInvisibleSpriteWithCallback(sub_80312F0); - BattleLoadOpponentMonSprite(&gEnemyParty[gBattlePartyID[a]], a); - GetMonSpriteTemplate_803C56C(species, GetBankIdentity(a)); - gObjectBankIDs[a] = CreateSprite( - &gUnknown_02024E8C, - sub_8077ABC(a, 2), - sub_8077F68(a), - sub_8079E90(a)); - gSprites[gUnknown_0300434C[a]].data1 = gObjectBankIDs[a]; - gSprites[gObjectBankIDs[a]].data0 = a; - gSprites[gObjectBankIDs[a]].data2 = species; - gSprites[gObjectBankIDs[a]].oam.paletteNum = a; - StartSpriteAnim(&gSprites[gObjectBankIDs[a]], gBattleMonForms[a]); - gSprites[gObjectBankIDs[a]].invisible = TRUE; - gSprites[gObjectBankIDs[a]].callback = SpriteCallbackDummy; - gSprites[gUnknown_0300434C[a]].data0 = sub_8046400(0, 0xFE); -} - -void sub_80395B4(void) -{ - if (gBattleBufferA[gActiveBank][1] == 0) - { - ewram17810[gActiveBank].unk4 = 0; - gBattleBankFunc[gActiveBank] = sub_8039648; - } - else - { - FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); - DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); - sub_8032A08(gActiveBank); - sub_8043DB0(gHealthboxIDs[gActiveBank]); - dp01_tbl4_exec_completed(); - } -} - -void sub_8039648(void) -{ - switch (ewram17810[gActiveBank].unk4) - { - case 0: - if (ewram17800[gActiveBank].substituteSprite) - move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); - ewram17810[gActiveBank].unk4 = 1; - break; - case 1: - if (!ewram17810[gActiveBank].unk0_6) - { - ewram17810[gActiveBank].unk4 = 0; - move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 2); - gBattleBankFunc[gActiveBank] = sub_8037BBC; - } - break; - } -} - -void sub_80396D0(void) -{ - s16 xOffset; - u32 gender; - - if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - { - if (GetBankIdentity(gActiveBank) & 2) - xOffset = -16; - else - xOffset = 16; - gender = gLinkPlayers[sub_803FC34(gActiveBank)].gender; - } - else - { - xOffset = 0; - gender = gLinkPlayers[GetMultiplayerId() ^ 1].gender; - } - sub_8031A6C(gender, gActiveBank); - GetMonSpriteTemplate_803C5A0(gender, GetBankIdentity(gActiveBank)); - gObjectBankIDs[gActiveBank] = CreateSprite( - &gUnknown_02024E8C, - 176 + xOffset, 40 + 4 * (8 - gTrainerFrontPicCoords[gender].coords), - sub_8079E90(gActiveBank)); - gSprites[gObjectBankIDs[gActiveBank]].pos2.x = -240; - gSprites[gObjectBankIDs[gActiveBank]].data0 = 2; - gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[gender].tag); - gSprites[gObjectBankIDs[gActiveBank]].data5 = gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum; - gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[gender].tag); - gSprites[gObjectBankIDs[gActiveBank]].oam.affineParam = gender; - gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0; - gBattleBankFunc[gActiveBank] = sub_803757C; -} - -void sub_80398A4(void) -{ - dp01_tbl4_exec_completed(); -} - -void sub_80398B0(void) -{ - oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]); - gSprites[gObjectBankIDs[gActiveBank]].data0 = 35; - gSprites[gObjectBankIDs[gActiveBank]].data2 = 280; - gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; - gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34; - oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], SpriteCallbackDummy); - gBattleBankFunc[gActiveBank] = sub_80375B4; -} - -void sub_803995C(void) -{ - if (ewram17810[gActiveBank].unk4 == 0) - { - if (ewram17800[gActiveBank].substituteSprite) - move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); - ewram17810[gActiveBank].unk4++; - } - else if (!ewram17810[gActiveBank].unk0_6) - { - ewram17810[gActiveBank].unk4 = 0; - PlaySE12WithPanning(SE_POKE_DEAD, 63); - gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8010384; - gBattleBankFunc[gActiveBank] = sub_8037B78; - } -} - -void sub_8039A00(void) -{ - dp01_tbl4_exec_completed(); -} - -void sub_8039A0C(void) -{ - dp01_tbl4_exec_completed(); -} - -void sub_8039A18(void) -{ - dp01_tbl4_exec_completed(); -} - -void sub_8039A24(void) -{ - dp01_tbl4_exec_completed(); -} - -void sub_8039A30(void) -{ - if (!mplay_80342A4(gActiveBank)) - { - u32 r0 = gBattleBufferA[gActiveBank][1] - | (gBattleBufferA[gActiveBank][2] << 8); - - gUnknown_0202F7C4 = gBattleBufferA[gActiveBank][3]; - gMovePowerMoveAnim = gBattleBufferA[gActiveBank][4] - | (gBattleBufferA[gActiveBank][5] << 8); - gMoveDmgMoveAnim = gBattleBufferA[gActiveBank][6] - | (gBattleBufferA[gActiveBank][7] << 8) - | (gBattleBufferA[gActiveBank][8] << 16) - | (gBattleBufferA[gActiveBank][9] << 24); - gHappinessMoveAnim = gBattleBufferA[gActiveBank][10]; - gWeatherMoveAnim = gBattleBufferA[gActiveBank][12] - | (gBattleBufferA[gActiveBank][13] << 8); - gDisableStructMoveAnim = (u32 *)&gBattleBufferA[gActiveBank][16]; - gPID_perBank[gActiveBank] = *gDisableStructMoveAnim; - - // Dead code. sub_8031720 always returns 0. - if (sub_8031720(r0, gUnknown_0202F7C4) != 0) - { - dp01_tbl4_exec_completed(); - } - else - { - ewram17810[gActiveBank].unk4 = 0; - gBattleBankFunc[gActiveBank] = sub_8039B64; - } - } -} - -void sub_8039B64(void) -{ - u16 r4 = gBattleBufferA[gActiveBank][1] - | (gBattleBufferA[gActiveBank][2] << 8); - u8 r7 = gBattleBufferA[gActiveBank][11]; - - switch (ewram17810[gActiveBank].unk4) - { - case 0: - if (ewram17800[gActiveBank].substituteSprite && !ewram17800[gActiveBank].unk0_3) - { - ewram17800[gActiveBank].unk0_3 = 1; - move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); - } - ewram17810[gActiveBank].unk4 = 1; - break; - case 1: - if (!ewram17810[gActiveBank].unk0_6) - { - sub_80326EC(0); - ExecuteMoveAnim(r4); - ewram17810[gActiveBank].unk4 = 2; - } - break; - case 2: - gAnimScriptCallback(); - if (!gAnimScriptActive) - { - sub_80326EC(1); - if ((ewram17800[gActiveBank].substituteSprite) && r7 <= 1) - { - move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); - ewram17800[gActiveBank].unk0_3 = 0; - } - ewram17810[gActiveBank].unk4 = 3; - } - break; - case 3: - if (!ewram17810[gActiveBank].unk0_6) - { - sub_8031F24(); - sub_80324BC( - gActiveBank, - gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8)); - ewram17810[gActiveBank].unk4 = 0; - dp01_tbl4_exec_completed(); - } - break; - } -} - -void sub_8039CC8(void) -{ - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; - BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]); - sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); - gBattleBankFunc[gActiveBank] = sub_8037C2C; -} - -void sub_8039D2C(void) -{ - dp01_tbl4_exec_completed(); -} - -void sub_8039D38(void) -{ - dp01_tbl4_exec_completed(); -} - -void sub_8039D44(void) -{ - dp01_tbl4_exec_completed(); -} - -void sub_8039D50(void) -{ - dp01_tbl4_exec_completed(); -} - -void sub_8039D5C(void) -{ - dp01_tbl4_exec_completed(); -} - -void sub_8039D68(void) -{ - dp01_tbl4_exec_completed(); -} - -void sub_8039D74(void) -{ - dp01_tbl4_exec_completed(); -} - -void sub_8039D80(void) -{ - s16 r7; - - load_gfxc_health_bar(0); - r7 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); - if (r7 != 0x7FFF) - { - u32 maxHP = GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP); - u32 hp = GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_HP); - - sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, hp, r7); - } - else - { - u32 maxHP = GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP); - - sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, 0, r7); - } - gBattleBankFunc[gActiveBank] = sub_8037B24; -} - -void sub_8039E70(void) -{ - dp01_tbl4_exec_completed(); -} - -void sub_8039E7C(void) -{ - if (mplay_80342A4(gActiveBank) == 0) - { - sub_8045A5C(gHealthboxIDs[gActiveBank], &gEnemyParty[gBattlePartyID[gActiveBank]], 9); - ewram17810[gActiveBank].unk0_4 = 0; - gBattleBankFunc[gActiveBank] = sub_8037FAC; - } -} - -void sub_8039EF0(void) -{ - if (mplay_80342A4(gActiveBank) == 0) - { - move_anim_start_t2_for_situation( - gBattleBufferA[gActiveBank][1], - gBattleBufferA[gActiveBank][2] - | (gBattleBufferA[gActiveBank][3] << 8) - | (gBattleBufferA[gActiveBank][4] << 16) - | (gBattleBufferA[gActiveBank][5] << 24)); - gBattleBankFunc[gActiveBank] = sub_8037FAC; - } -} - -void sub_8039F58(void) -{ - dp01_tbl4_exec_completed(); -} - -void sub_8039F64(void) -{ - dp01_tbl4_exec_completed(); -} - -void sub_8039F70(void) -{ - dp01_tbl4_exec_completed(); -} - -void sub_8039F7C(void) -{ - dp01_tbl4_exec_completed(); -} - -void sub_8039F88(void) -{ - dp01_tbl4_exec_completed(); -} - -void sub_8039F94(void) -{ - dp01_tbl4_exec_completed(); -} - -void sub_8039FA0(void) -{ - dp01_tbl4_exec_completed(); -} - -void sub_8039FAC(void) -{ - dp01_tbl4_exec_completed(); -} - -void sub_8039FB8(void) -{ - dp01_tbl4_exec_completed(); -} - -void sub_8039FC4(void) -{ - gUnknown_020238C8.unk0_0 = 0; - dp01_tbl4_exec_completed(); -} - -void sub_8039FE0(void) -{ - gUnknown_020238C8.unk0_0 = gBattleBufferA[gActiveBank][1]; - dp01_tbl4_exec_completed(); -} - -void sub_803A018(void) -{ - gUnknown_020238C8.unk0_7 = 0; - dp01_tbl4_exec_completed(); -} - -void sub_803A030(void) -{ - gUnknown_020238C8.unk0_7 ^= 1; - dp01_tbl4_exec_completed(); -} - -void dp01t_29_4_blink(void) -{ - if (gSprites[gObjectBankIDs[gActiveBank]].invisible == TRUE) - { - dp01_tbl4_exec_completed(); - } - else - { - gDoingBattleAnim = TRUE; - gSprites[gObjectBankIDs[gActiveBank]].data1 = 0; - sub_8047858(gActiveBank); - gBattleBankFunc[gActiveBank] = dp01t_0F_4_move_anim; - } -} - -void sub_803A0C8(void) -{ - dp01_tbl4_exec_completed(); -} - -void sub_803A0D4(void) -{ - s8 pan; - - if (GetBankSide(gActiveBank) == 0) - pan = -64; - else - pan = 63; - PlaySE12WithPanning(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8), pan); - dp01_tbl4_exec_completed(); -} - -void sub_803A118(void) -{ - PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8)); - dp01_tbl4_exec_completed(); -} - -void sub_803A148(void) -{ - PlayCry3( - GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES), - 25, 5); - dp01_tbl4_exec_completed(); -} - -void dp01t_2E_4_battle_intro(void) -{ - sub_80E43C0(gBattleBufferA[gActiveBank][1]); - gUnknown_02024DE8 |= 1; - dp01_tbl4_exec_completed(); -} - -void sub_803A1B8(void) -{ - u8 taskId; - - oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]); - gSprites[gObjectBankIDs[gActiveBank]].data0 = 35; - gSprites[gObjectBankIDs[gActiveBank]].data2 = 280; - gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; - gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34; - oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], sub_803A3A8); - taskId = CreateTask(sub_803A2C4, 5); - gTasks[taskId].data[0] = gActiveBank; - if (ewram17810[gActiveBank].unk0_0) - gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0; - ewram17840.unk9_0 = 1; - gBattleBankFunc[gActiveBank] = nullsub_47; -} - -void sub_803A2C4(u8 taskId) -{ - u8 r9; - - r9 = gActiveBank; - gActiveBank = gTasks[taskId].data[0]; - if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI)) - { - gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; - sub_8039430(gActiveBank, 0); - } - else - { - gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; - sub_8039430(gActiveBank, 0); - gActiveBank ^= 2; - gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; - sub_8039430(gActiveBank, 0); - gActiveBank ^= 2; - } - gBattleBankFunc[gActiveBank] = sub_8037840; - gActiveBank = r9; - DestroyTask(taskId); -} - -void sub_803A3A8(struct Sprite *sprite) -{ - sub_8031B74(sprite->oam.affineParam); - sprite->oam.tileNum = sprite->data5; - FreeSpriteOamMatrix(sprite); - DestroySprite(sprite); -} - -void sub_803A3DC(void) -{ - if (gBattleBufferA[gActiveBank][1] != 0 && GetBankSide(gActiveBank) == 0) - { - dp01_tbl4_exec_completed(); - return; - } - - ewram17810[gActiveBank].unk0_0 = 1; - if (gBattleBufferA[gActiveBank][2] != 0) - { - if (ewram17810[gActiveBank].unk1_1 < 2) - { - ewram17810[gActiveBank].unk1_1++; - return; - } - else - { - ewram17810[gActiveBank].unk1_1 = 0; - } - } - gUnknown_02024E68[gActiveBank] = sub_8044804( - gActiveBank, - (struct BattleInterfaceStruct2 *)&gBattleBufferA[gActiveBank][4], - gBattleBufferA[gActiveBank][1], - gBattleBufferA[gActiveBank][2]); - ewram17810[gActiveBank].unk5 = 0; - if (gBattleBufferA[gActiveBank][2] != 0) - ewram17810[gActiveBank].unk5 = 0x5D; - gBattleBankFunc[gActiveBank] = sub_803A4E0; -} - -void sub_803A4E0(void) -{ - if (ewram17810[gActiveBank].unk5++ >= 93) - { - ewram17810[gActiveBank].unk5 = 0; - dp01_tbl4_exec_completed(); - } -} - -void sub_803A520(void) -{ - if (ewram17810[gActiveBank].unk0_0) - gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0; - dp01_tbl4_exec_completed(); -} - -void sub_803A56C(void) -{ - dp01_tbl4_exec_completed(); -} - -void sub_803A578(void) -{ - if (sub_8078874(gActiveBank) != 0) - { - gSprites[gObjectBankIDs[gActiveBank]].invisible = gBattleBufferA[gActiveBank][1]; - sub_8031F88(gActiveBank); - } - dp01_tbl4_exec_completed(); -} - -void bx_exec_buffer_A_ch0_tbl4(void) -{ - if (mplay_80342A4(gActiveBank) == 0) - { - u8 r3 = gBattleBufferA[gActiveBank][1]; - u16 r4 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); - - if (move_anim_start_t3(gActiveBank, gActiveBank, gActiveBank, r3, r4) != 0) - dp01_tbl4_exec_completed(); - else - gBattleBankFunc[gActiveBank] = sub_8037FD8; - } -} - -void sub_803A640(void) -{ - dp01_tbl4_exec_completed(); -} - -void sub_803A64C(void) -{ - dp01_tbl4_exec_completed(); -} - -void sub_803A658(void) -{ - if (gBattleBufferA[gActiveBank][1] == 3) - gBattleOutcome = gBattleBufferA[gActiveBank][1]; - else - gBattleOutcome = gBattleBufferA[gActiveBank][1] ^ 3; - FadeOutMapMusic(5); - BeginFastPaletteFade(3); - dp01_tbl4_exec_completed(); - gBattleBankFunc[gActiveBank] = sub_8037F34; -} - -void nullsub_48(void) -{ -} diff --git a/src/battle_2.c b/src/battle_2.c index bdd908ea5..06e20bb06 100644 --- a/src/battle_2.c +++ b/src/battle_2.c @@ -1347,8 +1347,8 @@ void sub_8010384(struct Sprite *sprite) u16 species; u8 yOffset; - if (ewram17800[r6].transformedSpecies != 0) - species = ewram17800[r6].transformedSpecies; + if (ewram17800[r6].unk2 != 0) + species = ewram17800[r6].unk2; else species = sprite->data2; @@ -1866,7 +1866,7 @@ static void BattlePrepIntroSlide(void) if (gBattleExecBuffer == 0) { gActiveBank = GetBankByPlayerAI(0); - EmitBattleIntroSlide(0, gBattleTerrain); + EmitIntroSlide(0, gBattleTerrain); MarkBufferBankForExecution(gActiveBank); gBattleMainFunc = sub_8011384; gBattleCommunication[0] = 0; @@ -1910,7 +1910,7 @@ void sub_8011384(void) if (GetBankIdentity(gActiveBank) == 0) { - dp01_build_cmdbuf_x07_7_7_7(0); + EmitTrainerThrow(0); MarkBufferBankForExecution(gActiveBank); } @@ -1918,7 +1918,7 @@ void sub_8011384(void) { if (GetBankIdentity(gActiveBank) == 1) { - dp01_build_cmdbuf_x07_7_7_7(0); + EmitTrainerThrow(0); MarkBufferBankForExecution(gActiveBank); } if (GetBankSide(gActiveBank) == 1 @@ -1931,7 +1931,7 @@ void sub_8011384(void) && !(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK))) { GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBank].species), 2); - dp01_build_cmdbuf_x04_4_4_4(0); + EmitLoadPokeSprite(0); MarkBufferBankForExecution(gActiveBank); } } @@ -1941,7 +1941,7 @@ void sub_8011384(void) if (GetBankIdentity(gActiveBank) == 2 || GetBankIdentity(gActiveBank) == 3) { - dp01_build_cmdbuf_x07_7_7_7(0); + EmitTrainerThrow(0); MarkBufferBankForExecution(gActiveBank); } } @@ -1979,7 +1979,7 @@ void bc_801333C(void) } } gActiveBank = GetBankByPlayerAI(1); - dp01_build_cmdbuf_x30_TODO(0, (u8 *)sp0, 0x80); + Emitcmd48(0, (u8 *)sp0, 0x80); MarkBufferBankForExecution(gActiveBank); for (i = 0; i < 6; i++) @@ -1997,7 +1997,7 @@ void bc_801333C(void) } } gActiveBank = GetBankByPlayerAI(0); - dp01_build_cmdbuf_x30_TODO(0, (u8 *)sp0, 0x80); + Emitcmd48(0, (u8 *)sp0, 0x80); MarkBufferBankForExecution(gActiveBank); gBattleMainFunc = bc_battle_begin_message; @@ -2063,13 +2063,13 @@ void sub_8011834(void) { if (GetBankIdentity(gActiveBank) == 1) { - dp01_build_cmdbuf_x2F_2F_2F_2F(0); + EmitTrainerBallThrow(0); MarkBufferBankForExecution(gActiveBank); } if ((gBattleTypeFlags & BATTLE_TYPE_MULTI) && GetBankIdentity(gActiveBank) == 3) { - dp01_build_cmdbuf_x2F_2F_2F_2F(0); + EmitTrainerBallThrow(0); MarkBufferBankForExecution(gActiveBank); } } @@ -2115,13 +2115,13 @@ void sub_80119B4(void) { if (GetBankIdentity(gActiveBank) == 0) { - dp01_build_cmdbuf_x2F_2F_2F_2F(0); + EmitTrainerBallThrow(0); MarkBufferBankForExecution(gActiveBank); } if ((gBattleTypeFlags & BATTLE_TYPE_MULTI) && GetBankIdentity(gActiveBank) == 2) { - dp01_build_cmdbuf_x2F_2F_2F_2F(0); + EmitTrainerBallThrow(0); MarkBufferBankForExecution(gActiveBank); } } @@ -2140,7 +2140,7 @@ void unref_sub_8011A68(void) { if (GetBankSide(gActiveBank) == 0) { - EmitSwitchInAnim(0, gBattlePartyID[gActiveBank], 0); + EmitSendOutPoke(0, gBattlePartyID[gActiveBank], 0); MarkBufferBankForExecution(gActiveBank); } } @@ -2429,7 +2429,7 @@ void sub_8012324(void) } else { - dp01_build_cmdbuf_x12_a_bb(0, gActionForBanks[0], gBattleBufferB[0][1] | (gBattleBufferB[0][2] << 8)); + Emitcmd18(0, gActionForBanks[0], gBattleBufferB[0][1] | (gBattleBufferB[0][2] << 8)); MarkBufferBankForExecution(gActiveBank); gBattleCommunication[gActiveBank]++; } diff --git a/src/battle_4.c b/src/battle_4.c index 6dd5d7df6..a3cfbc2de 100644 --- a/src/battle_4.c +++ b/src/battle_4.c @@ -5634,7 +5634,7 @@ static void atk1A_faint_animation(void) if (gBattleExecBuffer == 0) { gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - EmitFaintAnimation(0); + Emitcmd10(0); MarkBufferBankForExecution(gActiveBank); gBattlescriptCurrInstr += 2; } @@ -10125,7 +10125,7 @@ static void atk4E_switchin_anim(void) GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBank].species), 2); } gAbsentBankFlags &= ~(gBitTable[gActiveBank]); - EmitSwitchInAnim(0, gBattlePartyID[gActiveBank], BSScriptRead8(gBattlescriptCurrInstr + 2)); + EmitSendOutPoke(0, gBattlePartyID[gActiveBank], BSScriptRead8(gBattlescriptCurrInstr + 2)); MarkBufferBankForExecution(gActiveBank); gBattlescriptCurrInstr += 3; } @@ -10205,7 +10205,7 @@ void sub_8022A3C(u8 unkown) { //BATTLE_STRUCT->unk16064[gActiveBank] = gBattlePartyID[gActiveBank]; ewram[gActiveBank + 0x16064] = gBattlePartyID[gActiveBank]; - EmitChoosePokemon(0, 1, unkown, 0, BATTLE_STRUCT->unk1606C[gActiveBank]); + Emitcmd22(0, 1, unkown, 0, BATTLE_STRUCT->unk1606C[gActiveBank]); MarkBufferBankForExecution(gActiveBank); } @@ -10446,7 +10446,7 @@ _08022BC4:\n\ bics r0, r1\n\ str r0, [r2]\n\ movs r0, 0\n\ - bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\ + bl Emitcmd42\n\ ldrb r0, [r4]\n\ bl MarkBufferBankForExecution\n\ b _08022C7E\n\ @@ -10531,7 +10531,7 @@ _08022C7E:\n\ bics r0, r1\n\ str r0, [r2]\n\ movs r0, 0\n\ - bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\ + bl Emitcmd42\n\ ldrb r0, [r4]\n\ bl MarkBufferBankForExecution\n\ b _08022D40\n\ @@ -10615,7 +10615,7 @@ _08022D40:\n\ bics r0, r1\n\ str r0, [r2]\n\ movs r0, 0\n\ - bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\ + bl Emitcmd42\n\ ldrb r0, [r4]\n\ bl MarkBufferBankForExecution\n\ b _08022DF6\n\ @@ -10702,7 +10702,7 @@ _08022DF6:\n\ bics r0, r1\n\ str r0, [r2]\n\ movs r0, 0\n\ - bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\ + bl Emitcmd42\n\ ldrb r0, [r4]\n\ bl MarkBufferBankForExecution\n\ b _08022EB8\n\ @@ -10900,7 +10900,7 @@ _08022F92:\n\ bics r0, r1\n\ str r0, [r7]\n\ movs r0, 0\n\ - bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\ + bl Emitcmd42\n\ ldrb r0, [r6]\n\ bl MarkBufferBankForExecution\n\ b _0802303A\n\ @@ -10977,7 +10977,7 @@ _0802303A:\n\ bics r0, r1\n\ str r0, [r2]\n\ movs r0, 0\n\ - bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\ + bl Emitcmd42\n\ ldrb r0, [r5]\n\ bl MarkBufferBankForExecution\n\ b _080230EE\n\ @@ -11173,7 +11173,7 @@ _080231F8:\n\ movs r0, 0\n\ adds r1, r5, 0\n\ movs r3, 0\n\ - bl EmitChoosePokemon\n\ + bl Emitcmd22\n\ ldrb r0, [r4]\n\ bl MarkBufferBankForExecution\n\ ldr r0, [r6]\n\ @@ -11426,7 +11426,7 @@ static void atk54_effectiveness_sound(void) static void atk55_play_sound(void) { gActiveBank = gBankAttacker; - EmitPlaySound(0, BS2ScriptRead16(gBattlescriptCurrInstr + 1)); + Emitcmd44(0, BS2ScriptRead16(gBattlescriptCurrInstr + 1)); MarkBufferBankForExecution(gActiveBank); gBattlescriptCurrInstr += 3; } @@ -11442,7 +11442,7 @@ static void atk56_fainting_cry(void) static void atk57(void) { gActiveBank = GetBankByPlayerAI(0); - dp01_build_cmdbuf_x37_a(0, gBattleOutcome); + Emitcmd55(0, gBattleOutcome); MarkBufferBankForExecution(gActiveBank); gBattlescriptCurrInstr += 1; } @@ -12011,7 +12011,7 @@ static void atk61_8025BA4(void) hpStatus[i].status = GetMonData(&party[i], MON_DATA_STATUS); } } - dp01_build_cmdbuf_x30_TODO(0, (u8*)(hpStatus), 1); + Emitcmd48(0, (u8*)(hpStatus), 1); MarkBufferBankForExecution(gActiveBank); gBattlescriptCurrInstr += 2; } @@ -12019,7 +12019,7 @@ static void atk61_8025BA4(void) static void atk62_08025C6C(void) { gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - dp01_build_cmdbuf_x31_31_31_31(0); + Emitcmd49(0); MarkBufferBankForExecution(gActiveBank); gBattlescriptCurrInstr += 2; } @@ -17789,13 +17789,13 @@ void atkEF_pokeball_catch_calculation(void) gBankTarget = gBankAttacker ^ 1; if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) { - EmitBallThrowAnim(0, 5); + EmitBallThrow(0, 5); MarkBufferBankForExecution(gActiveBank); gBattlescriptCurrInstr = BattleScript_TrainerBallBlock; } else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL) { - EmitBallThrowAnim(0, 4); + EmitBallThrow(0, 4); MarkBufferBankForExecution(gActiveBank); gBattlescriptCurrInstr = BattleScript_WallyBallThrow; } @@ -17873,7 +17873,7 @@ void atkEF_pokeball_catch_calculation(void) } if (odds > 254) //poke caught { - EmitBallThrowAnim(0, 4); + EmitBallThrow(0, 4); MarkBufferBankForExecution(gActiveBank); gBattlescriptCurrInstr = BattleScript_SuccessBallThrow; SetMonData(&gEnemyParty[gBattlePartyID[gBankTarget]], MON_DATA_POKEBALL, (const void*) &gLastUsedItem); @@ -17890,7 +17890,7 @@ void atkEF_pokeball_catch_calculation(void) for (shakes = 0; shakes < 4 && Random() < odds; shakes++) {} if (gLastUsedItem == ITEM_MASTER_BALL) shakes = 4; //why calculate the shakes before that check? - EmitBallThrowAnim(0, shakes); + EmitBallThrow(0, shakes); MarkBufferBankForExecution(gActiveBank); if (shakes == 4) //poke caught, copy of the code above { diff --git a/src/battle_5.c b/src/battle_5.c deleted file mode 100644 index 5972c0cb1..000000000 --- a/src/battle_5.c +++ /dev/null @@ -1,1579 +0,0 @@ -#include "global.h" -#include "data2.h" -#include "battle.h" -#include "battle_interface.h" -#include "item.h" -#include "items.h" -#include "link.h" -#include "m4a.h" -#include "main.h" -#include "menu_cursor.h" -#include "moves.h" -#include "palette.h" -#include "pokemon.h" -#include "rom3.h" -#include "songs.h" -#include "sound.h" -#include "string_util.h" -#include "task.h" -#include "text.h" -#include "util.h" - -extern u8 gActiveBank; -extern void (*gBattleBankFunc[])(void); -extern bool8 gDoingBattleAnim; -extern u16 gBattleTypeFlags; -extern u32 gBattleExecBuffer; -extern u8 gBattleBufferA[][0x200]; -extern u8 gObjectBankIDs[]; -extern u8 gActionSelectionCursor[]; -extern u8 gMoveSelectionCursor[]; -extern u8 gAbsentBankFlags; -extern u8 gUnknown_03004344; -extern u8 gNoOfAllBanks; -extern u16 gBattlePartyID[]; -//extern const struct BattleMove gBattleMoves[]; -extern u16 gUnknown_030042A0; -extern u16 gUnknown_030042A4; -extern struct Window gUnknown_03004210; -extern const u8 gUnknown_08400D89[]; -extern u8 gUnknown_03004348; -extern struct BattlePokemon gBattleMons[]; -extern MainCallback gPreBattleCallback1; -extern u8 gHealthboxIDs[]; -extern struct MusicPlayerInfo gMPlay_BGM; -extern u8 gUnknown_0300434C[]; -extern u8 gUnknown_0202E8F4; -extern u8 gUnknown_0202E8F5; -extern u8 gUnknown_02038470[]; -extern u16 gScriptItemId; -extern u8 gDisplayedStringBattle[]; -extern const u8 gUnknown_08400CE0[]; - -extern void dp11b_obj_instanciate(u8, u8, s8, s8); -extern u8 GetBankIdentity(u8); -extern u8 GetBankByPlayerAI(u8); -extern void dp11b_obj_free(u8, u8); -extern void sub_8010520(struct Sprite *); -extern void sub_8010574(struct Sprite *); -extern bool8 IsDoubleBattle(); -extern void sub_804777C(); -extern void sub_8141828(); -extern void sub_8094E20(u8); -extern void nullsub_14(void); -extern void sub_80A6DCC(void); -extern void ReshowBattleScreenAfterMenu(void); - -void PlayerHandleGetAttributes(void); -void sub_802ECF0(void); -void PlayerHandleSetAttributes(void); -void sub_802F7CC(void); -void PlayerHandleLoadPokeSprite(void); -void PlayerHandleSendOutPoke(void); -void PlayerHandleReturnPokeToBall(void); -void PlayerHandleTrainerThrow(void); -void PlayerHandleTrainerSlide(void); -void PlayerHandleTrainerSlideBack(void); -void sub_802FE7C(void); -void sub_802FF60(void); -void sub_802FF80(void); -void PlayerHandleBallThrow(void); -void PlayerHandlePuase(void); -void PlayerHandleMoveAnimation(void); -void PlayerHandlePrintString(void); -void PlayerHandlePrintStringPlayerOnly(void); -void sub_803037C(void); -void nullsub_42(void); -void sub_8030468(void); -void PlayerHandleOpenBag(void); -void sub_8030594(void); -void sub_8030674(void); -void PlayerHandleHealthBarUpdate(void); -void PlayerHandleExpBarUpdate(void); -void PlayerHandleStatusIconUpdate(void); -void PlayerHandleStatusAnimation(void); -void PlayerHandleStatusXor(void); -void sub_803097C(void); -void PlayerHandleDMATransfer(void); -void sub_8030A3C(void); -void sub_8030A6C(void); -void sub_8030A78(void); -void sub_8030A8C(void); -void sub_8030AA0(void); -void sub_8030AB4(void); -void sub_8030AC8(void); -void sub_8030AE4(void); -void sub_8030B1C(void); -void sub_8030B34(void); -void PlayerHandleHitAnimation(void); -void sub_8030BCC(void); -void PlayerHandleEffectivenessSound(void); -void sub_8030C1C(void); -void PlayerHandleFaintingCry(void); -void PlayerHandleIntroSlide(void); -void PlayerHandleTrainerBallThrow(void); -void sub_8030FAC(void); -void sub_80310A4(void); -void sub_80310F0(void); -void PlayerHandleSpriteInvisibility(void); -void PlayerHandleBattleAnimation(void); -void PlayerHandleLinkStandbyMsg(void); -void PlayerHandleResetActionMoveSelection(void); -void sub_80312A0(void); -void nullsub_43(void); - -const u8 gString_TurnJP[] = _("ターン"); - -void (*const gPlayerBufferCommands[])(void) = -{ - PlayerHandleGetAttributes, - sub_802ECF0, - PlayerHandleSetAttributes, - sub_802F7CC, - PlayerHandleLoadPokeSprite, - PlayerHandleSendOutPoke, - PlayerHandleReturnPokeToBall, - PlayerHandleTrainerThrow, - PlayerHandleTrainerSlide, - PlayerHandleTrainerSlideBack, - sub_802FE7C, - sub_802FF60, - sub_802FF80, - PlayerHandleBallThrow, - PlayerHandlePuase, - PlayerHandleMoveAnimation, - PlayerHandlePrintString, - PlayerHandlePrintStringPlayerOnly, - sub_803037C, - nullsub_42, - sub_8030468, - PlayerHandleOpenBag, - sub_8030594, - sub_8030674, - PlayerHandleHealthBarUpdate, - PlayerHandleExpBarUpdate, - PlayerHandleStatusIconUpdate, - PlayerHandleStatusAnimation, - PlayerHandleStatusXor, - sub_803097C, - PlayerHandleDMATransfer, - sub_8030A3C, - sub_8030A6C, - sub_8030A78, - sub_8030A8C, - sub_8030AA0, - sub_8030AB4, - sub_8030AC8, - sub_8030AE4, - sub_8030B1C, - sub_8030B34, - PlayerHandleHitAnimation, - sub_8030BCC, - PlayerHandleEffectivenessSound, - sub_8030C1C, - PlayerHandleFaintingCry, - PlayerHandleIntroSlide, - PlayerHandleTrainerBallThrow, - sub_8030FAC, - sub_80310A4, - sub_80310F0, - PlayerHandleSpriteInvisibility, - PlayerHandleBattleAnimation, - PlayerHandleLinkStandbyMsg, - PlayerHandleResetActionMoveSelection, - sub_80312A0, - nullsub_43, -}; - -void PlayerBufferRunCommand(void); -void sub_802C2EC(void); -void sub_802C68C(void); -void sub_802CA60(void); -void sub_802D730(void); -void sub_802DA9C(u8); -void sub_802DB6C(u8); -void sub_802DCB0(u8); -void sub_802DD10(u8); -void sub_802DDC4(u8); -void sub_802DF88(void); -void sub_802E03C(void); -void sub_802E12C(s32, const u8 *); -void sub_802E1B0(void); -void sub_802E220(void); -void sub_802E2D4(void); -void sub_802E3B4(u8, int); -void nullsub_7(u8); -void b_link_standby_message(void); - -void nullsub_91(void) -{ -} - -void SetBankFuncToPlayerBufferRunCommand(void) -{ - gBattleBankFunc[gActiveBank] = PlayerBufferRunCommand; - gDoingBattleAnim = FALSE; -} - -void PlayerBufferExecCompleted(void) -{ - gBattleBankFunc[gActiveBank] = PlayerBufferRunCommand; - if (gBattleTypeFlags & BATTLE_TYPE_LINK) - { - u8 playerId = GetMultiplayerId(); - - dp01_prepare_buffer_wireless_probably(2, 4, &playerId); - gBattleBufferA[gActiveBank][0] = 0x38; - } - else - { - gBattleExecBuffer &= ~gBitTable[gActiveBank]; - } -} - -void PlayerBufferRunCommand(void) -{ - if (gBattleExecBuffer & gBitTable[gActiveBank]) - { - if (gBattleBufferA[gActiveBank][0] < 0x39) - gPlayerBufferCommands[gBattleBufferA[gActiveBank][0]](); - else - PlayerBufferExecCompleted(); - } -} - -void bx_0802E404(void) -{ - if (gSprites[gObjectBankIDs[gActiveBank]].pos2.x == 0) - PlayerBufferExecCompleted(); -} - -void sub_802C098(void) -{ - u16 itemId = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); - - dp11b_obj_instanciate(gActiveBank, 1, 7, 1); - dp11b_obj_instanciate(gActiveBank, 0, 7, 1); - if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - DestroyMenuCursor(); - - // Useless switch statement. - switch (gActionSelectionCursor[gActiveBank]) - { - case 0: - dp01_build_cmdbuf_x21_a_bb(1, 0, 0); - break; - case 1: - dp01_build_cmdbuf_x21_a_bb(1, 1, 0); - break; - case 2: - dp01_build_cmdbuf_x21_a_bb(1, 2, 0); - break; - case 3: - dp01_build_cmdbuf_x21_a_bb(1, 3, 0); - break; - } - PlayerBufferExecCompleted(); - } - else if (gMain.newKeys & DPAD_LEFT) - { - if (gActionSelectionCursor[gActiveBank] & 1) - { - PlaySE(SE_SELECT); - nullsub_8(gActionSelectionCursor[gActiveBank]); - gActionSelectionCursor[gActiveBank] ^= 1; - sub_802E3E4(gActionSelectionCursor[gActiveBank], 0); - } - } - else if (gMain.newKeys & DPAD_RIGHT) - { - if (!(gActionSelectionCursor[gActiveBank] & 1)) - { - PlaySE(SE_SELECT); - nullsub_8(gActionSelectionCursor[gActiveBank]); - gActionSelectionCursor[gActiveBank] ^= 1; - sub_802E3E4(gActionSelectionCursor[gActiveBank], 0); - } - } - else if (gMain.newKeys & DPAD_UP) - { - if (gActionSelectionCursor[gActiveBank] & 2) - { - PlaySE(SE_SELECT); - nullsub_8(gActionSelectionCursor[gActiveBank]); - gActionSelectionCursor[gActiveBank] ^= 2; - sub_802E3E4(gActionSelectionCursor[gActiveBank], 0); - } - } - else if (gMain.newKeys & DPAD_DOWN) - { - if (!(gActionSelectionCursor[gActiveBank] & 2)) - { - PlaySE(SE_SELECT); - nullsub_8(gActionSelectionCursor[gActiveBank]); - gActionSelectionCursor[gActiveBank] ^= 2; - sub_802E3E4(gActionSelectionCursor[gActiveBank], 0); - } - } - else if (gMain.newKeys & B_BUTTON) - { - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - && GetBankIdentity(gActiveBank) == 2 - && !(gAbsentBankFlags & gBitTable[GetBankByPlayerAI(0)]) - && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) - { - if (gBattleBufferA[gActiveBank][1] == 1) - { - // Add item to bag if it is a ball - if (itemId <= ITEM_PREMIER_BALL) - AddBagItem(itemId, 1); - else - return; - } - PlaySE(SE_SELECT); - dp01_build_cmdbuf_x21_a_bb(1, 12, 0); - PlayerBufferExecCompleted(); - DestroyMenuCursor(); - } - } - else if (gMain.newKeys & START_BUTTON) - { - sub_804454C(); - } -} - -void unref_sub_802C2B8(void) -{ - dp11b_obj_free(gActiveBank, 1); - dp11b_obj_free(gActiveBank, 0); - gBattleBankFunc[gActiveBank] = sub_802C2EC; -} - -// TODO: fix this function -void sub_802C2EC(void) -{ - u8 arr[4] = {0, 2, 3, 1}; - s32 i; - - dp11b_obj_instanciate(gUnknown_03004344, 1, 15, 1); - i = 0; - if (gNoOfAllBanks != 0) - { - do - { - if (i != gUnknown_03004344) - dp11b_obj_free(i, 1); - i++; - } while (i < gNoOfAllBanks); - } - if (gMain.newKeys & A_BUTTON) - { - DestroyMenuCursor(); - PlaySE(SE_SELECT); - gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010574; - dp01_build_cmdbuf_x21_a_bb(1, 10, gMoveSelectionCursor[gActiveBank] | (gUnknown_03004344 << 8)); - dp11b_obj_free(gUnknown_03004344, 1); - PlayerBufferExecCompleted(); - } - //_0802C3A8 - else if (gMain.newKeys & B_BUTTON) - { - PlaySE(SE_SELECT); - gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010574; - gBattleBankFunc[gActiveBank] = sub_802C68C; - dp11b_obj_instanciate(gActiveBank, 1, 7, 1); - dp11b_obj_instanciate(gActiveBank, 0, 7, 1); - dp11b_obj_free(gUnknown_03004344, 1); - } - else if (gMain.newKeys & 0x60) - { - PlaySE(SE_SELECT); - gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010574; - do - { - u8 var = GetBankIdentity(gUnknown_03004344); - - for (i = 0; i < 4; i++) - { - if (var == arr[i]) - break; - } - do - { - i--; - if (i < 0) - i = 3; - gUnknown_03004344 = GetBankByPlayerAI(arr[i]); - } while(gUnknown_03004344 == gNoOfAllBanks); - i = 0; - switch (GetBankIdentity(gUnknown_03004344)) - { - case 0: - case 2: - if (gActiveBank == gUnknown_03004344) - { - u32 moveId; - - asm("":::"memory"); - moveId = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBank]); - if (!(gBattleMoves[moveId].target & 2)) - break; - } - i++; - break; - case 1: - case 3: - i++; - } - //_0802C500 - if (gAbsentBankFlags & gBitTable[gUnknown_03004344]) - i = 0; - } while (i == 0); - gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010520; - } - //_0802C540 - else if (gMain.newKeys & 0x90) - { - PlaySE(SE_SELECT); - gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010574; - do - { - u8 var = GetBankIdentity(gUnknown_03004344); - - for (i = 0; i < 4; i++) - { - if (var == arr[i]) - break; - } - do - { - i++; - if (i > 3) - i = 0; - gUnknown_03004344 = GetBankByPlayerAI(arr[i]); - } while (gUnknown_03004344 == gNoOfAllBanks); - i = 0; - switch (GetBankIdentity(gUnknown_03004344)) - { - case 0: - case 2: - if (gActiveBank == gUnknown_03004344) - { - u32 moveId; - - asm("":::"memory"); - moveId = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBank]); - if (!(gBattleMoves[moveId].target & 2)) - break; - } - i++; - break; - case 1: - case 3: - i++; - } - if (gAbsentBankFlags & gBitTable[gUnknown_03004344]) - i = 0; - } while (i == 0); - gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010520; - } -} - -struct UnknownStruct1 -{ - u16 moves[4]; - u8 pp[4]; - u8 unkC[0x12-0xC]; - u8 unk12; - u8 unk13; - u8 filler14[0x20-0x14]; -}; - -const u8 gUnknown_081FAE80[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW WHITE LIGHT_BLUE WHITE2}"); - -void sub_802C68C(void) -{ - u32 r8 = 0; - struct UnknownStruct1 *r6 = (struct UnknownStruct1 *)(gBattleBufferA[gActiveBank] + 4); - - if (gMain.newKeys & A_BUTTON) - { - u32 r4; - - PlaySE(SE_SELECT); - - if (r6->moves[gMoveSelectionCursor[gActiveBank]] == MOVE_CURSE) - r4 = (r6->unk12 != TYPE_GHOST && (r6->unk13 ^ 7)) ? 0x10 : 0; - else - r4 = gBattleMoves[r6->moves[gMoveSelectionCursor[gActiveBank]]].target; - - if (r4 & 0x10) - gUnknown_03004344 = gActiveBank; - else - gUnknown_03004344 = GetBankByPlayerAI((GetBankIdentity(gActiveBank) & 1) ^ 1); - - if (gBattleBufferA[gActiveBank][1] == 0) - { - if ((r4 & 2) && gBattleBufferA[gActiveBank][2] == 0) - r8++; - } - else - { - if (!(r4 & 0x7D)) - r8++; - if (r6->pp[gMoveSelectionCursor[gActiveBank]] == 0) - { - r8 = 0; - } - else if (!(r4 & 0x12) && CountAliveMons(0) <= 1) - { - gUnknown_03004344 = sub_803C434(gActiveBank); - r8 = 0; - } - } - if (r8 == 0) - { - DestroyMenuCursor(); - dp01_build_cmdbuf_x21_a_bb(1, 10, gMoveSelectionCursor[gActiveBank] | (gUnknown_03004344 << 8)); - PlayerBufferExecCompleted(); - } - else - { - gBattleBankFunc[gActiveBank] = sub_802C2EC; - if (r4 & 0x12) - gUnknown_03004344 = gActiveBank; - else if (gAbsentBankFlags & gBitTable[GetBankByPlayerAI(1)]) - gUnknown_03004344 = GetBankByPlayerAI(3); - else - gUnknown_03004344 = GetBankByPlayerAI(1); - gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010520; - } - } - else if (gMain.newKeys & B_BUTTON) - { - DestroyMenuCursor(); - PlaySE(SE_SELECT); - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 320; - dp01_build_cmdbuf_x21_a_bb(1, 10, 0xFFFF); - PlayerBufferExecCompleted(); - } - else if (gMain.newKeys & DPAD_LEFT) - { - if (gMoveSelectionCursor[gActiveBank] & 1) - { - nullsub_7(gMoveSelectionCursor[gActiveBank]); - gMoveSelectionCursor[gActiveBank] ^= 1; - PlaySE(SE_SELECT); - sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); - sub_802E220(); - sub_802E2D4(); - } - } - else if (gMain.newKeys & DPAD_RIGHT) - { - if (!(gMoveSelectionCursor[gActiveBank] & 1) - && (gMoveSelectionCursor[gActiveBank] ^ 1) < gUnknown_03004348) - { - nullsub_7(gMoveSelectionCursor[gActiveBank]); - gMoveSelectionCursor[gActiveBank] ^= 1; - PlaySE(SE_SELECT); - sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); - sub_802E220(); - sub_802E2D4(); - } - } - else if (gMain.newKeys & DPAD_UP) - { - if (gMoveSelectionCursor[gActiveBank] & 2) - { - nullsub_7(gMoveSelectionCursor[gActiveBank]); - gMoveSelectionCursor[gActiveBank] ^= 2; - PlaySE(SE_SELECT); - sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); - sub_802E220(); - sub_802E2D4(); - } - } - else if (gMain.newKeys & DPAD_DOWN) - { - if (!(gMoveSelectionCursor[gActiveBank] & 2) - && (gMoveSelectionCursor[gActiveBank] ^ 2) < gUnknown_03004348) - { - nullsub_7(gMoveSelectionCursor[gActiveBank]); - gMoveSelectionCursor[gActiveBank] ^= 2; - PlaySE(SE_SELECT); - sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); - sub_802E220(); - sub_802E2D4(); - } - } - else if (gMain.newKeys & SELECT_BUTTON) - { - if (gUnknown_03004348 > 1 && !(gBattleTypeFlags & BATTLE_TYPE_LINK)) - { - sub_802E12C(gMoveSelectionCursor[gActiveBank], gUnknown_081FAE80); - if (gMoveSelectionCursor[gActiveBank] != 0) - gUnknown_03004344 = 0; - else - gUnknown_03004344 = gMoveSelectionCursor[gActiveBank] + 1; - sub_802E3B4(gUnknown_03004344, 27); - FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); - InitWindow(&gUnknown_03004210, gUnknown_08400D89, 0x290, 0x17, 0x37); - sub_8002F44(&gUnknown_03004210); - gBattleBankFunc[gActiveBank] = sub_802CA60; - } - } -} - -extern const u8 gUnknown_08400D49[]; -extern const u8 gUnknown_08400D38[]; - -void sub_802CA60(void) -{ - u8 perMovePPBonuses[4]; - struct - { - u16 moves[4]; - u8 pp[4]; - u8 filler18[8]; // what is this? - } sp0; - //struct UnknownStruct1 sp0; - u8 totalPPBonuses; - - if (gMain.newKeys & (A_BUTTON | SELECT_BUTTON)) - { - PlaySE(SE_SELECT); - if (gMoveSelectionCursor[gActiveBank] != gUnknown_03004344) - { - struct UnknownStruct1 *r9 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4]; - s32 i; - - i = r9->moves[gMoveSelectionCursor[gActiveBank]]; - r9->moves[gMoveSelectionCursor[gActiveBank]] = r9->moves[gUnknown_03004344]; - r9->moves[gUnknown_03004344] = i; - - i = r9->pp[gMoveSelectionCursor[gActiveBank]]; - r9->pp[gMoveSelectionCursor[gActiveBank]] = r9->pp[gUnknown_03004344]; - r9->pp[gUnknown_03004344] = i; - - i = r9->unkC[gMoveSelectionCursor[gActiveBank]]; - r9->unkC[gMoveSelectionCursor[gActiveBank]] = r9->unkC[gUnknown_03004344]; - r9->unkC[gUnknown_03004344] = i; - - if (gDisableStructs[gActiveBank].unk18_b & gBitTable[gMoveSelectionCursor[gActiveBank]]) - { - gDisableStructs[gActiveBank].unk18_b &= ~gBitTable[gMoveSelectionCursor[gActiveBank]]; - gDisableStructs[gActiveBank].unk18_b |= gBitTable[gUnknown_03004344]; - } - - sub_802E1B0(); - - for (i = 0; i < 4; i++) - perMovePPBonuses[i] = (gBattleMons[gActiveBank].ppBonuses & (3 << (i * 2))) >> (i * 2); - totalPPBonuses = perMovePPBonuses[gMoveSelectionCursor[gActiveBank]]; - perMovePPBonuses[gMoveSelectionCursor[gActiveBank]] = perMovePPBonuses[gUnknown_03004344]; - perMovePPBonuses[gUnknown_03004344] = totalPPBonuses; - - totalPPBonuses = 0; - for (i = 0; i < 4; i++) - totalPPBonuses |= perMovePPBonuses[i] << (i * 2); - gBattleMons[gActiveBank].ppBonuses = totalPPBonuses; - - for (i = 0; i < 4; i++) - { - gBattleMons[gActiveBank].moves[i] = r9->moves[i]; - gBattleMons[gActiveBank].pp[i] = r9->pp[i]; - } - if (!(gBattleMons[gActiveBank].status2 & 0x200000)) - { - for (i = 0; i < 4; i++) - { - sp0.moves[i] = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + i); - sp0.pp[i] = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP1 + i); - } - - totalPPBonuses = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP_BONUSES); - for (i = 0; i < 4; i++) - perMovePPBonuses[i] = (totalPPBonuses & (3 << (i * 2))) >> (i * 2); - - i = sp0.moves[gMoveSelectionCursor[gActiveBank]]; - sp0.moves[gMoveSelectionCursor[gActiveBank]] = sp0.moves[gUnknown_03004344]; - sp0.moves[gUnknown_03004344] = i; - - i = sp0.pp[gMoveSelectionCursor[gActiveBank]]; - sp0.pp[gMoveSelectionCursor[gActiveBank]] = sp0.pp[gUnknown_03004344]; - sp0.pp[gUnknown_03004344] = i; - - totalPPBonuses = perMovePPBonuses[gMoveSelectionCursor[gActiveBank]]; - perMovePPBonuses[gMoveSelectionCursor[gActiveBank]] = perMovePPBonuses[gUnknown_03004344]; - perMovePPBonuses[gUnknown_03004344] = totalPPBonuses; - - totalPPBonuses = 0; - for (i = 0; i < 4; i++) - totalPPBonuses |= perMovePPBonuses[i] << (i * 2); - - for (i = 0; i < 4; i++) - { - SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + i, (u8 *)&sp0.moves[i]); - SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP1 + i, &sp0.pp[i]); - } - SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP_BONUSES, &totalPPBonuses); - } - } - else - { - sub_802E12C(gUnknown_03004344, gUnknown_08400D49); - } - gBattleBankFunc[gActiveBank] = sub_802C68C; - gMoveSelectionCursor[gActiveBank] = gUnknown_03004344; - sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); - FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); - InitWindow(&gUnknown_03004210, gUnknown_08400D38, 0x290, 0x17, 0x37); - sub_8002F44(&gUnknown_03004210); - sub_802E220(); - sub_802E2D4(); - } - if (gMain.newKeys & (B_BUTTON | SELECT_BUTTON)) - { - PlaySE(SE_SELECT); - nullsub_7(gUnknown_03004344); - sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); - sub_802E12C(gMoveSelectionCursor[gActiveBank], gUnknown_08400D49); - gBattleBankFunc[gActiveBank] = sub_802C68C; - FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); - InitWindow(&gUnknown_03004210, gUnknown_08400D38, 0x290, 0x17, 0x37); - sub_8002F44(&gUnknown_03004210); - sub_802E220(); - sub_802E2D4(); - } - if ((gMain.newKeys & DPAD_LEFT) && (gUnknown_03004344 & 1)) - { - if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) - sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D); - else - nullsub_7(gUnknown_03004344); - gUnknown_03004344 ^= 1; - PlaySE(SE_SELECT); - if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) - sub_802E3B4(gUnknown_03004344, 0); - else - sub_802E3B4(gUnknown_03004344, 0x1B); - } - if ((gMain.newKeys & DPAD_RIGHT) && !(gUnknown_03004344 & 1) && (gUnknown_03004344 ^ 1) < gUnknown_03004348) - { - if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) - sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D); - else - nullsub_7(gUnknown_03004344); - gUnknown_03004344 ^= 1; - PlaySE(SE_SELECT); - if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) - sub_802E3B4(gUnknown_03004344, 0); - else - sub_802E3B4(gUnknown_03004344, 0x1B); - } - if ((gMain.newKeys & DPAD_UP) && (gUnknown_03004344 & 2)) - { - if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) - sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D); - else - nullsub_7(gUnknown_03004344); - gUnknown_03004344 ^= 2; - PlaySE(SE_SELECT); - if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) - sub_802E3B4(gUnknown_03004344, 0); - else - sub_802E3B4(gUnknown_03004344, 0x1B); - } - if ((gMain.newKeys & DPAD_DOWN) && !(gUnknown_03004344 & 2) && (gUnknown_03004344 ^ 2) < gUnknown_03004348) - { - if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) - sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D); - else - nullsub_7(gUnknown_03004344); - gUnknown_03004344 ^= 2; - PlaySE(SE_SELECT); - if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) - sub_802E3B4(gUnknown_03004344, 0); - else - sub_802E3B4(gUnknown_03004344, 0x1B); - } -} - -void sub_802D148(void) -{ - if (gReceivedRemoteLinkPlayers == 0) - { - m4aSongNumStop(SE_HINSI); - gMain.inBattle = FALSE; - gMain.callback1 = gPreBattleCallback1; - SetMainCallback2(c2_8011A1C); - } -} - -void sub_802D18C(void) -{ - if (!gPaletteFade.active) - { - if (gBattleTypeFlags & BATTLE_TYPE_LINK) - { - sub_800832C(); - gBattleBankFunc[gActiveBank] = sub_802D148; - } - else - { - m4aSongNumStop(SE_HINSI); - gMain.inBattle = FALSE; - gMain.callback1 = gPreBattleCallback1; - SetMainCallback2(gMain.savedCallback); - } - } -} - -void sub_802D204(void) -{ - if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy) - PlayerBufferExecCompleted(); -} - -// duplicate of sub_802D204 -void sub_802D23C(void) -{ - if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy) - PlayerBufferExecCompleted(); -} - -void sub_802D274(void) -{ - if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy) - { - nullsub_10(gSaveBlock2.playerGender); - FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); - DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); - PlayerBufferExecCompleted(); - } -} - -void sub_802D2E0(void) -{ - if (--ewram17810[gActiveBank].unk9 == 0xFF) - { - ewram17810[gActiveBank].unk9 = 0; - PlayerBufferExecCompleted(); - } -} - -void sub_802D31C(void) -{ - bool8 r6 = FALSE; - - if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI))) - { - if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy) - r6 = TRUE; - } - else - { - if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy - && gSprites[gHealthboxIDs[gActiveBank ^ 2]].callback == SpriteCallbackDummy) - r6 = TRUE; - } - if (IsCryPlayingOrClearCrySongs()) - r6 = FALSE; - - if (r6 && ewram17810[gActiveBank].unk1_0 && ewram17810[gActiveBank ^ 2].unk1_0) - { - ewram17810[gActiveBank].unk0_7 = 0; - ewram17810[gActiveBank].unk1_0 = 0; - ewram17810[gActiveBank ^ 2].unk0_7 = 0; - ewram17810[gActiveBank ^ 2].unk1_0 = 0; - FreeSpriteTilesByTag(0x27F9); - FreeSpritePaletteByTag(0x27F9); - if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - m4aMPlayContinue(&gMPlay_BGM); - else - m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 256); - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); - if (IsDoubleBattle()) - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank ^ 2]], gActiveBank ^ 2); - ewram17810[gActiveBank].unk9 = 3; - gBattleBankFunc[gActiveBank] = sub_802D2E0; - } -} - -void sub_802D500(void) -{ - if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7) - sub_8141828(gActiveBank, &gPlayerParty[gBattlePartyID[gActiveBank]]); - if (!ewram17810[gActiveBank ^ 2].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_7) - sub_8141828(gActiveBank ^ 2, &gPlayerParty[gBattlePartyID[gActiveBank ^ 2]]); - if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_3) - { - if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) - { - DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank ^ 2]]); - sub_8045A5C( - gHealthboxIDs[gActiveBank ^ 2], - &gPlayerParty[gBattlePartyID[gActiveBank ^ 2]], - 0); - sub_804777C(gActiveBank ^ 2); - sub_8043DFC(gHealthboxIDs[gActiveBank ^ 2]); - } - DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]); - sub_8045A5C( - gHealthboxIDs[gActiveBank], - &gPlayerParty[gBattlePartyID[gActiveBank]], - 0); - sub_804777C(gActiveBank); - sub_8043DFC(gHealthboxIDs[gActiveBank]); - ewram17840.unk9_0 = 0; - gBattleBankFunc[gActiveBank] = sub_802D31C; - } -} - -void sub_802D680(void) -{ - if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy - && ewram17810[gActiveBank].unk1_0) - { - ewram17810[gActiveBank].unk0_7 = 0; - ewram17810[gActiveBank].unk1_0 = 0; - FreeSpriteTilesByTag(0x27F9); - FreeSpritePaletteByTag(0x27F9); - if (ewram17800[gActiveBank].substituteSprite) - move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); - gBattleBankFunc[gActiveBank] = sub_802D730; - } -} - -void sub_802D730(void) -{ - if (!ewram17810[gActiveBank].unk0_6 && !IsCryPlayingOrClearCrySongs()) - { - m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100); - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); - PlayerBufferExecCompleted(); - } -} - -void sub_802D798(void) -{ - if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7) - sub_8141828(gActiveBank, &gPlayerParty[gBattlePartyID[gActiveBank]]); - if (gSprites[gUnknown_0300434C[gActiveBank]].callback == SpriteCallbackDummy - && !ewram17810[gActiveBank].unk0_3) - { - DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]); - sub_8045A5C(gHealthboxIDs[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], 0); - sub_804777C(gActiveBank); - sub_8043DFC(gHealthboxIDs[gActiveBank]); - sub_8031F88(gActiveBank); - gBattleBankFunc[gActiveBank] = sub_802D680; - } -} - -void c3_0802FDF4(u8 taskId) -{ - if (!IsCryPlayingOrClearCrySongs()) - { - m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100); - DestroyTask(taskId); - } -} - -void bx_t1_healthbar_update(void) -{ - s16 r4 = sub_8045C78(gActiveBank, gHealthboxIDs[gActiveBank], 0, 0); - - sub_8043DFC(gHealthboxIDs[gActiveBank]); - if (r4 != -1) - { - sub_80440EC(gHealthboxIDs[gActiveBank], r4, 0); - } - else - { - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); - PlayerBufferExecCompleted(); - } -} - -void sub_802D90C(void) -{ - if (gUnknown_03004210.state == 0) - PlayerBufferExecCompleted(); -} - -// Rare Candy usage, maybe? -void sub_802D924(u8 taskId) -{ - u32 pkmnIndex = (u8)gTasks[taskId].data[0]; - u8 bank = gTasks[taskId].data[2]; - s16 gainedExp = gTasks[taskId].data[1]; - - if (IsDoubleBattle() == TRUE || pkmnIndex != gBattlePartyID[bank]) - { - struct Pokemon *pkmn = &gPlayerParty[pkmnIndex]; - u16 species = GetMonData(pkmn, MON_DATA_SPECIES); - u8 level = GetMonData(pkmn, MON_DATA_LEVEL); - u32 currExp = GetMonData(pkmn, MON_DATA_EXP); - u32 nextLvlExp = gExperienceTables[gBaseStats[species].growthRate][level + 1]; - - if (currExp + gainedExp >= nextLvlExp) - { - u8 savedActiveBank; - - SetMonData(pkmn, MON_DATA_EXP, (u8 *)&nextLvlExp); - CalculateMonStats(pkmn); - gainedExp -= nextLvlExp - currExp; - savedActiveBank = gActiveBank; - gActiveBank = bank; - dp01_build_cmdbuf_x21_a_bb(1, 11, gainedExp); - gActiveBank = savedActiveBank; - - if (IsDoubleBattle() == TRUE - && ((u16)pkmnIndex == gBattlePartyID[bank] || (u16)pkmnIndex == gBattlePartyID[bank ^ 2])) - gTasks[taskId].func = sub_802DCB0; - else - gTasks[taskId].func = sub_802DDC4; - } - else - { - currExp += gainedExp; - SetMonData(pkmn, MON_DATA_EXP, (u8 *)&currExp); - gBattleBankFunc[bank] = sub_802D90C; - DestroyTask(taskId); - } - } - else - { - gTasks[taskId].func = sub_802DA9C; - } -} - -void sub_802DA9C(u8 taskId) -{ - u8 pkmnIndex = gTasks[taskId].data[0]; - s32 r9 = gTasks[taskId].data[1]; - u8 bank = gTasks[taskId].data[2]; - struct Pokemon *pkmn = &gPlayerParty[pkmnIndex]; - u8 level = GetMonData(pkmn, MON_DATA_LEVEL); - u16 species = GetMonData(pkmn, MON_DATA_SPECIES); - u32 exp = GetMonData(pkmn, MON_DATA_EXP); - u32 currLvlExp = gExperienceTables[gBaseStats[species].growthRate][level]; - u32 expToNextLvl; - - exp -= currLvlExp; - expToNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLvlExp; - sub_8043D84(bank, gHealthboxIDs[bank], expToNextLvl, exp, -r9); - PlaySE(SE_EXP); - gTasks[taskId].func = sub_802DB6C; -} - -#ifdef NONMATCHING -void sub_802DB6C(u8 taskId) -{ - if (gTasks[taskId].data[10] < 13) - { - gTasks[taskId].data[10]++; - } - else - { - u8 r9 = gTasks[taskId].data[0]; - s32 r10 = gTasks[taskId].data[1]; //s16? - u8 r7 = gTasks[taskId].data[2]; - s16 r4; - - r4 = sub_8045C78(r7, gHealthboxIDs[r7], 1, 0); - sub_8043DFC(gHealthboxIDs[r7]); - if (r4 == -1) - { - struct Pokemon *pkmn; - u8 r4; - u32 sp4; - u16 r0; - u32 sp0; - - m4aSongNumStop(SE_EXP); - pkmn = &gPlayerParty[r9]; - r4 = GetMonData(pkmn, MON_DATA_LEVEL); - sp4 = GetMonData(pkmn, MON_DATA_EXP); - r0 = GetMonData(pkmn, MON_DATA_SPECIES); - sp0 = gExperienceTables[gBaseStats[r0].growthRate][r4 + 1]; - if (sp4 + r10 >= sp0) - { - u8 r5; - u32 asdf; - - SetMonData(pkmn, MON_DATA_EXP, (u8 *)&sp0); - CalculateMonStats(pkmn); - //r10 -= sp0 - sp4; - asdf = sp0 - sp4; - //asdf = r10 - (sp0 - sp4); - r10 -= asdf; - r5 = gActiveBank; - gActiveBank = r7; - dp01_build_cmdbuf_x21_a_bb(1, 11, r10); - gActiveBank = r5; - gTasks[taskId].func = sub_802DCB0; - } - else - { - //u32 asdf = sp4 + r10; - sp4 += r10; - SetMonData(pkmn, MON_DATA_EXP, (u8 *)&sp4); - gBattleBankFunc[r7] = sub_802D90C; - DestroyTask(taskId); - } - } - } -} -#else -__attribute__((naked)) -void sub_802DB6C(u8 taskId) -{ - asm_unified("push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x8\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r8, r0\n\ - ldr r1, _0802DB98 @ =gTasks\n\ - lsls r0, 2\n\ - add r0, r8\n\ - lsls r0, 3\n\ - adds r6, r0, r1\n\ - ldrh r1, [r6, 0x1C]\n\ - movs r2, 0x1C\n\ - ldrsh r0, [r6, r2]\n\ - cmp r0, 0xC\n\ - bgt _0802DB9C\n\ - adds r0, r1, 0x1\n\ - strh r0, [r6, 0x1C]\n\ - b _0802DC98\n\ - .align 2, 0\n\ -_0802DB98: .4byte gTasks\n\ -_0802DB9C:\n\ - ldrb r0, [r6, 0x8]\n\ - mov r9, r0\n\ - ldrh r2, [r6, 0xA]\n\ - mov r10, r2\n\ - ldrb r7, [r6, 0xC]\n\ - ldr r5, _0802DC64 @ =gHealthboxIDs\n\ - adds r5, r7, r5\n\ - ldrb r1, [r5]\n\ - adds r0, r7, 0\n\ - movs r2, 0x1\n\ - movs r3, 0\n\ - bl sub_8045C78\n\ - adds r4, r0, 0\n\ - lsls r4, 16\n\ - lsrs r4, 16\n\ - ldrb r0, [r5]\n\ - bl sub_8043DFC\n\ - lsls r4, 16\n\ - asrs r4, 16\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - cmp r4, r0\n\ - bne _0802DC98\n\ - movs r0, 0x21\n\ - bl m4aSongNumStop\n\ - movs r0, 0x64\n\ - mov r1, r9\n\ - muls r1, r0\n\ - ldr r0, _0802DC68 @ =gPlayerParty\n\ - adds r5, r1, r0\n\ - adds r0, r5, 0\n\ - movs r1, 0x38\n\ - bl GetMonData\n\ - adds r4, r0, 0\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - adds r0, r5, 0\n\ - movs r1, 0x19\n\ - bl GetMonData\n\ - str r0, [sp, 0x4]\n\ - adds r0, r5, 0\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - ldr r3, _0802DC6C @ =gExperienceTables\n\ - adds r4, 0x1\n\ - lsls r4, 2\n\ - ldr r2, _0802DC70 @ =gBaseStats\n\ - lsls r1, r0, 3\n\ - subs r1, r0\n\ - lsls r1, 2\n\ - adds r1, r2\n\ - ldrb r1, [r1, 0x13]\n\ - movs r0, 0xCA\n\ - lsls r0, 1\n\ - muls r0, r1\n\ - adds r4, r0\n\ - adds r4, r3\n\ - ldr r1, [r4]\n\ - str r1, [sp]\n\ - mov r2, r10\n\ - lsls r0, r2, 16\n\ - asrs r4, r0, 16\n\ - ldr r0, [sp, 0x4]\n\ - adds r0, r4\n\ - cmp r0, r1\n\ - blt _0802DC7C\n\ - adds r0, r5, 0\n\ - movs r1, 0x19\n\ - mov r2, sp\n\ - bl SetMonData\n\ - adds r0, r5, 0\n\ - bl CalculateMonStats\n\ - ldr r2, [sp]\n\ - add r0, sp, 0x4\n\ - ldrh r0, [r0]\n\ - subs r2, r0\n\ - subs r2, r4, r2\n\ - ldr r4, _0802DC74 @ =gActiveBank\n\ - ldrb r5, [r4]\n\ - strb r7, [r4]\n\ - lsls r2, 16\n\ - lsrs r2, 16\n\ - movs r0, 0x1\n\ - movs r1, 0xB\n\ - bl dp01_build_cmdbuf_x21_a_bb\n\ - strb r5, [r4]\n\ - ldr r0, _0802DC78 @ =sub_802DCB0\n\ - str r0, [r6]\n\ - b _0802DC98\n\ - .align 2, 0\n\ -_0802DC64: .4byte gHealthboxIDs\n\ -_0802DC68: .4byte gPlayerParty\n\ -_0802DC6C: .4byte gExperienceTables\n\ -_0802DC70: .4byte gBaseStats\n\ -_0802DC74: .4byte gActiveBank\n\ -_0802DC78: .4byte sub_802DCB0\n\ -_0802DC7C:\n\ - str r0, [sp, 0x4]\n\ - add r2, sp, 0x4\n\ - adds r0, r5, 0\n\ - movs r1, 0x19\n\ - bl SetMonData\n\ - ldr r1, _0802DCA8 @ =gBattleBankFunc\n\ - lsls r0, r7, 2\n\ - adds r0, r1\n\ - ldr r1, _0802DCAC @ =sub_802D90C\n\ - str r1, [r0]\n\ - mov r0, r8\n\ - bl DestroyTask\n\ -_0802DC98:\n\ - add sp, 0x8\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\ -_0802DCA8: .4byte gBattleBankFunc\n\ -_0802DCAC: .4byte sub_802D90C\n"); -} -#endif - -void sub_802DCB0(u8 taskId) -{ - u8 bank = gTasks[taskId].data[2]; - u8 pkmnIndex = gTasks[taskId].data[0]; - - if (IsDoubleBattle() == TRUE && pkmnIndex == gBattlePartyID[bank ^ 2]) - bank ^= 2; - move_anim_start_t4(bank, bank, bank, 0); - gTasks[taskId].func = sub_802DD10; -} - -void sub_802DD10(u8 taskId) -{ - u8 bank = gTasks[taskId].data[2]; - - if (!ewram17810[bank].unk0_6) - { - u8 pkmnIndex = gTasks[taskId].data[0]; - - GetMonData(&gPlayerParty[pkmnIndex], MON_DATA_LEVEL); // Unused return value - if (IsDoubleBattle() == TRUE && pkmnIndex == gBattlePartyID[bank ^ 2]) - sub_8045A5C(gHealthboxIDs[bank ^ 2], &gPlayerParty[pkmnIndex], 0); - else - sub_8045A5C(gHealthboxIDs[bank], &gPlayerParty[pkmnIndex], 0); - gTasks[taskId].func = sub_802DDC4; - } -} - -void sub_802DDC4(u8 taskId) -{ - u8 pkmnIndex; - u8 bank; - - pkmnIndex = gTasks[taskId].data[0]; - GetMonData(&gPlayerParty[pkmnIndex], MON_DATA_LEVEL); // Unused return value - bank = gTasks[taskId].data[2]; - gBattleBankFunc[bank] = sub_802D90C; - DestroyTask(taskId); -} - -void sub_802DE10(void) -{ - if (gSprites[gObjectBankIDs[gActiveBank]].pos1.y + gSprites[gObjectBankIDs[gActiveBank]].pos2.y > DISPLAY_HEIGHT) - { - u16 species = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES); - - nullsub_9(species); - FreeOamMatrix(gSprites[gObjectBankIDs[gActiveBank]].oam.matrixNum); - DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); - sub_8043DB0(gHealthboxIDs[gActiveBank]); - PlayerBufferExecCompleted(); - } -} - -void sub_802DEAC(void) -{ - if (!ewram17810[gActiveBank].unk0_6) - { - FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); - DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); - sub_8043DB0(gHealthboxIDs[gActiveBank]); - PlayerBufferExecCompleted(); - } -} - -// Duplicate of sub_802D90C -void sub_802DF18(void) -{ - if (gUnknown_03004210.state == 0) - PlayerBufferExecCompleted(); -} - -void sub_802DF30(void) -{ - if (!gPaletteFade.active) - { - u8 r4; - - gBattleBankFunc[gActiveBank] = sub_802DF88; - r4 = gTasks[gUnknown_0300434C[gActiveBank]].data[0]; - DestroyTask(gUnknown_0300434C[gActiveBank]); - sub_8094E20(r4); - } -} - -void sub_802DF88(void) -{ - if (gMain.callback2 == sub_800F808 && !gPaletteFade.active) - { - if (gUnknown_0202E8F4 == 1) - dp01_build_cmdbuf_x22_a_three_bytes(1, gUnknown_0202E8F5, gUnknown_02038470); - else - dp01_build_cmdbuf_x22_a_three_bytes(1, 6, NULL); - if ((gBattleBufferA[gActiveBank][1] & 0xF) == 1) - b_link_standby_message(); - PlayerBufferExecCompleted(); - } -} - -void sub_802E004(void) -{ - if (!gPaletteFade.active) - { - gBattleBankFunc[gActiveBank] = sub_802E03C; - nullsub_14(); - sub_80A6DCC(); - } -} - -void sub_802E03C(void) -{ - if (gMain.callback2 == sub_800F808 && !gPaletteFade.active) - { - dp01_build_cmdbuf_x23_aa_0(1, gScriptItemId); - PlayerBufferExecCompleted(); - } -} - -void bx_wait_t1(void) -{ - if (!gDoingBattleAnim || !ewram17810[gActiveBank].unk0_6) - PlayerBufferExecCompleted(); -} - -void bx_blink_t1(void) -{ - u8 spriteId = gObjectBankIDs[gActiveBank]; - - if (gSprites[spriteId].data1 == 32) - { - gSprites[spriteId].data1 = 0; - gSprites[spriteId].invisible = FALSE; - gDoingBattleAnim = 0; - PlayerBufferExecCompleted(); - } - else - { - if (((u16)gSprites[spriteId].data1 % 4) == 0) - gSprites[spriteId].invisible ^= 1; - gSprites[spriteId].data1++; - } -} - -void sub_802E12C(s32 a, const u8 *b) -{ - struct UnknownStruct1 *r4 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4]; - - StringCopy(gDisplayedStringBattle, b); - StringAppend(gDisplayedStringBattle, gMoveNames[r4->moves[a]]); - InitWindow( - &gUnknown_03004210, - gDisplayedStringBattle, - 0x300 + a * 20, - (a & 1) ? 11 : 1, - (a < 2) ? 0x37 : 0x39); - sub_8002F44(&gUnknown_03004210); -} - -void sub_802E1B0(void) -{ - struct UnknownStruct1 *r4 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4]; - s32 i; - - gUnknown_03004348 = 0; - FillWindowRect(&gUnknown_03004210, 0x1016, 1, 0x37, 0x14, 0x3A); - for (i = 0; i < 4; i++) - { - nullsub_7(i); - sub_802E12C(i, gUnknown_08400D49); - if (r4->moves[i] != 0) - gUnknown_03004348++; - } -} - -void sub_802E220(void) -{ - if (gBattleBufferA[gActiveBank][2] != 1) - { - struct UnknownStruct1 *r4 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4]; - u8 *str = gDisplayedStringBattle; - - str = StringCopy(str, gUnknown_08400D49); - str[0] = EXT_CTRL_CODE_BEGIN; - str[1] = 0x11; - str[2] = 2; - str += 3; - str[0] = EXT_CTRL_CODE_BEGIN; - str[1] = 0x14; - str[2] = 6; - str += 3; - str = ConvertIntToDecimalStringN(str, r4->pp[gMoveSelectionCursor[gActiveBank]], 1, 2); - *str++ = CHAR_SLASH; - ConvertIntToDecimalStringN(str, r4->unkC[gMoveSelectionCursor[gActiveBank]], 1, 2); - InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 0x2A2, 0x19, 0x37); - sub_8002F44(&gUnknown_03004210); - } -} - -extern const u8 gUnknown_08400D52[]; -extern const u8 gTypeNames[][7]; - -void sub_802E2D4(void) -{ - if (gBattleBufferA[gActiveBank][2] == 1) - { - FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); - InitWindow(&gUnknown_03004210, gUnknown_08400D52, 0x290, 0x13, 0x37); - } - else - { - struct UnknownStruct1 *r4 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4]; - u8 *str = gDisplayedStringBattle; - - str = StringCopy(str, gUnknown_08400D49); - StringCopy(str, gTypeNames[gBattleMoves[r4->moves[gMoveSelectionCursor[gActiveBank]]].type]); - FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x39, 0x1C, 0x3A); - InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 0x2C0, 0x17, 0x39); - } - sub_8002F44(&gUnknown_03004210); -} - -const u8 gUnknown_081FAE89[][2] = -{ - { 8, 120}, - {88, 120}, - { 8, 136}, - {88, 136}, -}; - -const u8 gUnknown_081FAE91[][2] = -{ - {144, 120}, - {190, 120}, - {144, 136}, - {190, 136}, - { 72, 72}, - { 32, 90}, - { 80, 80}, - { 80, 88}, -}; - -void sub_802E3B4(u8 a, int unused) -{ - sub_814A958(0x48); - sub_814A880(gUnknown_081FAE89[a][0], gUnknown_081FAE89[a][1]); -} - -void nullsub_7(u8 a) -{ -} - -void sub_802E3E4(u8 a, int unused) -{ - sub_814A958(0x2A); - sub_814A880(gUnknown_081FAE91[a][0], gUnknown_081FAE91[a][1]); -} - -void nullsub_8(u8 a) -{ -} - -void sub_802E414(void) -{ - SetMainCallback2(ReshowBattleScreenAfterMenu); -} - -void sub_802E424(void) -{ - SetMainCallback2(ReshowBattleScreenAfterMenu); -} - -void sub_802E434(void) -{ - if (!ewram17810[gActiveBank].unk0_4) - PlayerBufferExecCompleted(); -} - -void sub_802E460(void) -{ - if (!ewram17810[gActiveBank].unk0_5) - PlayerBufferExecCompleted(); -} - -void b_link_standby_message(void) -{ - if (gBattleTypeFlags & BATTLE_TYPE_LINK) - { - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; - sub_8002EB0(&gUnknown_03004210, gUnknown_08400CE0, 0x90, 2, 15); - } -} diff --git a/src/battle_6.c b/src/battle_6.c deleted file mode 100644 index e7f152a4b..000000000 --- a/src/battle_6.c +++ /dev/null @@ -1,1507 +0,0 @@ -#include "global.h" -#include "battle.h" -#include "battle_interface.h" -#include "battle_message.h" -#include "data2.h" -#include "menu_cursor.h" -#include "palette.h" -#include "pokemon.h" -#include "rom3.h" -#include "songs.h" -#include "sound.h" -#include "sprite.h" -#include "string_util.h" -#include "task.h" -#include "text.h" -#include "util.h" - -//Possibly PokemonSubstruct1 -struct UnknownStruct3 -{ - u16 moves[4]; - u8 pp[4]; - u8 ppBonuses; -}; - -extern u16 gUnknown_030042A4; -extern u16 gUnknown_030042A0; - -extern struct Window gUnknown_03004210; - -extern void (*gBattleBankFunc[])(void); - -extern u8 gActiveBank; -extern u8 gActionSelectionCursor[]; -extern u8 gDisplayedStringBattle[]; -extern u8 gMoveSelectionCursor[]; -extern u8 gBattleBufferA[][0x200]; -extern u8 gBankInMenu; -extern u16 gBattlePartyID[]; -extern u8 gHealthboxIDs[]; -extern u8 gDoingBattleAnim; -extern u8 gObjectBankIDs[]; -extern u16 gBattleTypeFlags; -extern u8 gBattleOutcome; -extern void (*gAnimScriptCallback)(void); -extern bool8 gAnimScriptActive; -extern u16 gMovePowerMoveAnim; -extern u32 gMoveDmgMoveAnim; -extern u8 gHappinessMoveAnim; -extern u16 gWeatherMoveAnim; -extern u32 *gDisableStructMoveAnim; -extern u32 gPID_perBank[]; -extern u8 gBattleMonForms[]; -extern u16 gUnknown_02024DE8; -extern u8 gUnknown_02024E68[]; -extern struct SpriteTemplate gUnknown_02024E8C; -extern u8 gUnknown_0202F7C4; -extern u8 gUnknown_02038470[]; -extern u16 gUnknown_030041B0; -extern u16 gUnknown_030041B4; -extern u16 gUnknown_030041B8; -extern u16 gUnknown_03004280; -extern u16 gUnknown_03004288; -extern u16 gUnknown_030042A4; -extern u16 gUnknown_030042C0; -extern u8 gUnknown_03004344; -extern u8 gUnknown_0300434C[]; - -extern const u8 gUnknown_08400CA8[]; -extern const u8 gUnknown_08400CF3[]; -extern const u8 gUnknown_08400D38[]; - -#if ENGLISH -#define SUB_803037C_TILE_DATA_OFFSET 440 -#elif GERMAN -#define SUB_803037C_TILE_DATA_OFFSET 444 -#endif - -extern void sub_802C68C(void); -extern void sub_802E1B0(void); -extern void sub_802E3B4(); -extern void sub_802E220(); -extern void sub_802E2D4(); -extern void sub_802E004(void); -extern void sub_802DF30(void); -extern void BattleMusicStop(void); -extern void PlayerBufferExecCompleted(void); -extern void bx_t1_healthbar_update(void); -extern void nullsub_91(void); -extern void sub_802D924(u8); -extern void sub_802E434(void); -extern bool8 mplay_80342A4(u8); -extern void move_anim_start_t2_for_situation(); -extern void bx_blink_t1(void); -extern void sub_8047858(); -extern u8 GetBankSide(u8); -extern void sub_80E43C0(); -extern void oamt_add_pos2_onto_pos1(); -extern void sub_8078B34(struct Sprite *); -extern void oamt_set_x3A_32(); -extern void BattleLoadPlayerMonSprite(); -extern bool8 IsDoubleBattle(void); -extern void sub_802D500(void); -extern void dp11b_obj_free(); -extern bool8 sub_8078874(u8); -extern bool8 move_anim_start_t3(); -extern void sub_802E460(void); -extern void b_link_standby_message(void); -extern void sub_802D18C(void); -extern void sub_802DF18(void); -extern void BufferStringBattle(); -extern void sub_80326EC(); -extern void ExecuteMoveAnim(); -extern void sub_8031F24(void); -extern void sub_80324BC(); -extern u8 sub_8031720(); -extern void bx_wait_t1(void); -extern u8 GetBankByPlayerAI(u8); -extern void sub_802DE10(void); -extern void sub_80105EC(struct Sprite *); -extern void sub_802D274(void); -extern void sub_802D23C(void); -extern u8 GetBankIdentity(u8); -extern void LoadPlayerTrainerBankSprite(); -extern void sub_80313A0(struct Sprite *); -extern void sub_802D204(void); -extern u8 sub_8079E90(); -extern void sub_802DEAC(void); -extern void sub_80312F0(struct Sprite *); -extern u8 sub_8077ABC(); -extern u8 sub_8077F68(); -extern u8 sub_8046400(); -extern void sub_802D798(void); -extern void bx_0802E404(void); - -u32 dp01_getattr_by_ch1_for_player_pokemon_(u8, u8 *); -void dp01_setattr_by_ch1_for_player_pokemon(u8); -void sub_802F934(u8, u8); -void sub_802FB2C(void); -void sub_8030190(void); -void sub_80304A8(void); -void sub_8030E38(struct Sprite *); -void task05_08033660(u8); -void sub_8031064(void); - -void PlayerHandleGetAttributes(void) -{ - u8 unkData[0x100]; - u32 offset = 0; - u8 r4; - s32 i; - - if (gBattleBufferA[gActiveBank][2] == 0) - { - offset += dp01_getattr_by_ch1_for_player_pokemon_(gBattlePartyID[gActiveBank], unkData); - } - else - { - r4 = gBattleBufferA[gActiveBank][2]; - for (i = 0; i < 6; i++) - { - if (r4 & 1) - offset += dp01_getattr_by_ch1_for_player_pokemon_(i, unkData + offset); - r4 >>= 1; - } - } - dp01_build_cmdbuf_x1D_1D_numargs_varargs(1, offset, unkData); - PlayerBufferExecCompleted(); -} - -// Duplicate of dp01_getattr_by_ch1_for_player_pokemon -u32 dp01_getattr_by_ch1_for_player_pokemon_(u8 a, u8 *buffer) -{ - struct BattlePokemon battlePokemon; - struct UnknownStruct3 moveData; - u8 nickname[20]; - u8 *src; - s16 data16; - u32 data32; - s32 size = 0; - - switch (gBattleBufferA[gActiveBank][1]) - { - case 0: - battlePokemon.species = GetMonData(&gPlayerParty[a], MON_DATA_SPECIES); - battlePokemon.item = GetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM); - for (size = 0; size < 4; size++) - { - battlePokemon.moves[size] = GetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + size); - battlePokemon.pp[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size); - } - battlePokemon.ppBonuses = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES); - battlePokemon.friendship = GetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP); - battlePokemon.experience = GetMonData(&gPlayerParty[a], MON_DATA_EXP); - battlePokemon.hpIV = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV); - battlePokemon.attackIV = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV); - battlePokemon.defenseIV = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV); - battlePokemon.speedIV = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV); - battlePokemon.spAttackIV = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV); - battlePokemon.spDefenseIV = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV); - battlePokemon.personality = GetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY); - battlePokemon.status1 = GetMonData(&gPlayerParty[a], MON_DATA_STATUS); - battlePokemon.level = GetMonData(&gPlayerParty[a], MON_DATA_LEVEL); - battlePokemon.hp = GetMonData(&gPlayerParty[a], MON_DATA_HP); - battlePokemon.maxHP = GetMonData(&gPlayerParty[a], MON_DATA_MAX_HP); - battlePokemon.attack = GetMonData(&gPlayerParty[a], MON_DATA_ATK); - battlePokemon.defense = GetMonData(&gPlayerParty[a], MON_DATA_DEF); - battlePokemon.speed = GetMonData(&gPlayerParty[a], MON_DATA_SPD); - battlePokemon.spAttack = GetMonData(&gPlayerParty[a], MON_DATA_SPATK); - battlePokemon.spDefense = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF); - battlePokemon.isEgg = GetMonData(&gPlayerParty[a], MON_DATA_IS_EGG); - battlePokemon.altAbility = GetMonData(&gPlayerParty[a], MON_DATA_ALT_ABILITY); - battlePokemon.otId = GetMonData(&gPlayerParty[a], MON_DATA_OT_ID); - GetMonData(&gPlayerParty[a], MON_DATA_NICKNAME, nickname); - StringCopy10(battlePokemon.nickname, nickname); - GetMonData(&gPlayerParty[a], MON_DATA_OT_NAME, battlePokemon.otName); - src = (u8 *)&battlePokemon; - for (size = 0; size < sizeof(battlePokemon); size++) - buffer[size] = src[size]; - break; - case 1: - data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPECIES); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 2: - data16 = GetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 3: - for (size = 0; size < 4; size++) - { - moveData.moves[size] = GetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + size); - moveData.pp[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size); - } - moveData.ppBonuses = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES); - src = (u8 *)&moveData; - for (size = 0; size < sizeof(moveData); size++) - buffer[size] = src[size]; - break; - case 4: - case 5: - case 6: - case 7: - data16 = GetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - 4); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 8: - for (size = 0; size < 4; size++) - buffer[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size); - buffer[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES); - size++; - break; - case 9: - case 10: - case 11: - case 12: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - 9); - size = 1; - break; - case 17: - data32 = GetMonData(&gPlayerParty[a], MON_DATA_OT_ID); - buffer[0] = (data32 & 0x000000FF); - buffer[1] = (data32 & 0x0000FF00) >> 8; - buffer[2] = (data32 & 0x00FF0000) >> 16; - size = 3; - break; - case 18: - data32 = GetMonData(&gPlayerParty[a], MON_DATA_EXP); - buffer[0] = (data32 & 0x000000FF); - buffer[1] = (data32 & 0x0000FF00) >> 8; - buffer[2] = (data32 & 0x00FF0000) >> 16; - size = 3; - break; - case 19: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_EV); - size = 1; - break; - case 20: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_EV); - size = 1; - break; - case 21: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_EV); - size = 1; - break; - case 22: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_EV); - size = 1; - break; - case 23: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_EV); - size = 1; - break; - case 24: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_EV); - size = 1; - break; - case 25: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP); - size = 1; - break; - case 26: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_POKERUS); - size = 1; - break; - case 27: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_MET_LOCATION); - size = 1; - break; - case 28: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_MET_LEVEL); - size = 1; - break; - case 29: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_MET_GAME); - size = 1; - break; - case 30: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_POKEBALL); - size = 1; - break; - case 31: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV); - buffer[1] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV); - buffer[2] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV); - buffer[3] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV); - buffer[4] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV); - buffer[5] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV); - size = 6; - break; - case 32: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV); - size = 1; - break; - case 33: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV); - size = 1; - break; - case 34: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV); - size = 1; - break; - case 35: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV); - size = 1; - break; - case 36: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV); - size = 1; - break; - case 37: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV); - size = 1; - break; - case 38: - data32 = GetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY); - buffer[0] = (data32 & 0x000000FF); - buffer[1] = (data32 & 0x0000FF00) >> 8; - buffer[2] = (data32 & 0x00FF0000) >> 16; - buffer[3] = (data32 & 0xFF000000) >> 24; - size = 4; - break; - case 39: - data16 = GetMonData(&gPlayerParty[a], MON_DATA_CHECKSUM); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 40: - data32 = GetMonData(&gPlayerParty[a], MON_DATA_STATUS); - buffer[0] = (data32 & 0x000000FF); - buffer[1] = (data32 & 0x0000FF00) >> 8; - buffer[2] = (data32 & 0x00FF0000) >> 16; - buffer[3] = (data32 & 0xFF000000) >> 24; - size = 4; - break; - case 41: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_LEVEL); - size = 1; - break; - case 42: - data16 = GetMonData(&gPlayerParty[a], MON_DATA_HP); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 43: - data16 = GetMonData(&gPlayerParty[a], MON_DATA_MAX_HP); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 44: - data16 = GetMonData(&gPlayerParty[a], MON_DATA_ATK); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 45: - data16 = GetMonData(&gPlayerParty[a], MON_DATA_DEF); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 46: - data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPD); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 47: - data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPATK); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 48: - data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 49: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_COOL); - size = 1; - break; - case 50: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_BEAUTY); - size = 1; - break; - case 51: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_CUTE); - size = 1; - break; - case 52: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SMART); - size = 1; - break; - case 53: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_TOUGH); - size = 1; - break; - case 54: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SHEEN); - size = 1; - break; - case 55: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_COOL_RIBBON); - size = 1; - break; - case 56: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_BEAUTY_RIBBON); - size = 1; - break; - case 57: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_CUTE_RIBBON); - size = 1; - break; - case 58: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SMART_RIBBON); - size = 1; - break; - case 59: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_TOUGH_RIBBON); - size = 1; - break; - } - return size; -} - -void sub_802ECF0(void) -{ - struct BattlePokemon battleMon; // I think this is a BattlePokemon - u8 *src = (u8 *)&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1]; - u8 *dst = (u8 *)&battleMon + gBattleBufferA[gActiveBank][1]; - u8 i; - - for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++) - dst[i] = src[i]; - dp01_build_cmdbuf_x1D_1D_numargs_varargs(1, gBattleBufferA[gActiveBank][2], dst); - PlayerBufferExecCompleted(); -} - -void PlayerHandleSetAttributes(void) -{ - u8 r4; - u8 i; - - if (gBattleBufferA[gActiveBank][2] == 0) - { - dp01_setattr_by_ch1_for_player_pokemon(gBattlePartyID[gActiveBank]); - } - else - { - r4 = gBattleBufferA[gActiveBank][2]; - for (i = 0; i < 6; i++) - { - if (r4 & 1) - dp01_setattr_by_ch1_for_player_pokemon(i); - r4 >>= 1; - } - } - PlayerBufferExecCompleted(); -} - -// Duplicate of sub_811EC68 -void dp01_setattr_by_ch1_for_player_pokemon(u8 a) -{ - struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBank][3]; - struct UnknownStruct3 *moveData = (struct UnknownStruct3 *)&gBattleBufferA[gActiveBank][3]; - s32 i; - - switch (gBattleBufferA[gActiveBank][1]) - { - case 0: - { - u8 iv; - - SetMonData(&gPlayerParty[a], MON_DATA_SPECIES, (u8 *)&battlePokemon->species); - SetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM, (u8 *)&battlePokemon->item); - for (i = 0; i < 4; i++) - { - SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + i, (u8 *)&battlePokemon->moves[i]); - SetMonData(&gPlayerParty[a], MON_DATA_PP1 + i, (u8 *)&battlePokemon->pp[i]); - } - SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, (u8 *)&battlePokemon->ppBonuses); - SetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP, (u8 *)&battlePokemon->friendship); - SetMonData(&gPlayerParty[a], MON_DATA_EXP, (u8 *)&battlePokemon->experience); - iv = battlePokemon->hpIV; - SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, (u8 *)&iv); - iv = battlePokemon->attackIV; - SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, (u8 *)&iv); - iv = battlePokemon->defenseIV; - SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, (u8 *)&iv); - iv = battlePokemon->speedIV; - SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, (u8 *)&iv); - iv = battlePokemon->spAttackIV; - SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, (u8 *)&iv); - iv = battlePokemon->spDefenseIV; - SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, (u8 *)&iv); - SetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY, (u8 *)&battlePokemon->personality); - SetMonData(&gPlayerParty[a], MON_DATA_STATUS, (u8 *)&battlePokemon->status1); - SetMonData(&gPlayerParty[a], MON_DATA_LEVEL, (u8 *)&battlePokemon->level); - SetMonData(&gPlayerParty[a], MON_DATA_HP, (u8 *)&battlePokemon->hp); - SetMonData(&gPlayerParty[a], MON_DATA_MAX_HP, (u8 *)&battlePokemon->maxHP); - SetMonData(&gPlayerParty[a], MON_DATA_ATK, (u8 *)&battlePokemon->attack); - SetMonData(&gPlayerParty[a], MON_DATA_DEF, (u8 *)&battlePokemon->defense); - SetMonData(&gPlayerParty[a], MON_DATA_SPD, (u8 *)&battlePokemon->speed); - SetMonData(&gPlayerParty[a], MON_DATA_SPATK, (u8 *)&battlePokemon->spAttack); - SetMonData(&gPlayerParty[a], MON_DATA_SPDEF, (u8 *)&battlePokemon->spDefense); - } - break; - case 1: - SetMonData(&gPlayerParty[a], MON_DATA_SPECIES, &gBattleBufferA[gActiveBank][3]); - break; - case 2: - SetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBank][3]); - break; - case 3: - for (i = 0; i < 4; i++) - { - SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + i, (u8 *)&moveData->moves[i]); - SetMonData(&gPlayerParty[a], MON_DATA_PP1 + i, (u8 *)&moveData->pp[i]); - } - SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, &moveData->ppBonuses); - break; - case 4: - case 5: - case 6: - case 7: - SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - 4, &gBattleBufferA[gActiveBank][3]); - break; - case 8: - SetMonData(&gPlayerParty[a], MON_DATA_PP1, &gBattleBufferA[gActiveBank][3]); - SetMonData(&gPlayerParty[a], MON_DATA_PP2, &gBattleBufferA[gActiveBank][4]); - SetMonData(&gPlayerParty[a], MON_DATA_PP3, &gBattleBufferA[gActiveBank][5]); - SetMonData(&gPlayerParty[a], MON_DATA_PP4, &gBattleBufferA[gActiveBank][6]); - SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBank][7]); - break; - case 9: - case 10: - case 11: - case 12: - SetMonData(&gPlayerParty[a], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - 9, &gBattleBufferA[gActiveBank][3]); - break; - case 17: - SetMonData(&gPlayerParty[a], MON_DATA_OT_ID, &gBattleBufferA[gActiveBank][3]); - break; - case 18: - SetMonData(&gPlayerParty[a], MON_DATA_EXP, &gBattleBufferA[gActiveBank][3]); - break; - case 19: - SetMonData(&gPlayerParty[a], MON_DATA_HP_EV, &gBattleBufferA[gActiveBank][3]); - break; - case 20: - SetMonData(&gPlayerParty[a], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBank][3]); - break; - case 21: - SetMonData(&gPlayerParty[a], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBank][3]); - break; - case 22: - SetMonData(&gPlayerParty[a], MON_DATA_SPD_EV, &gBattleBufferA[gActiveBank][3]); - break; - case 23: - SetMonData(&gPlayerParty[a], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBank][3]); - break; - case 24: - SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBank][3]); - break; - case 25: - SetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBank][3]); - break; - case 26: - SetMonData(&gPlayerParty[a], MON_DATA_POKERUS, &gBattleBufferA[gActiveBank][3]); - break; - case 27: - SetMonData(&gPlayerParty[a], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBank][3]); - break; - case 28: - SetMonData(&gPlayerParty[a], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBank][3]); - break; - case 29: - SetMonData(&gPlayerParty[a], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBank][3]); - break; - case 30: - SetMonData(&gPlayerParty[a], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBank][3]); - break; - case 31: - SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]); - SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][4]); - SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][5]); - SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][6]); - SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][7]); - SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][8]); - break; - case 32: - SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]); - break; - case 33: - SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][3]); - break; - case 34: - SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][3]); - break; - case 35: - SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][3]); - break; - case 36: - SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][3]); - break; - case 37: - SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][3]); - break; - case 38: - SetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBank][3]); - break; - case 39: - SetMonData(&gPlayerParty[a], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBank][3]); - break; - case 40: - SetMonData(&gPlayerParty[a], MON_DATA_STATUS, &gBattleBufferA[gActiveBank][3]); - break; - case 41: - SetMonData(&gPlayerParty[a], MON_DATA_LEVEL, &gBattleBufferA[gActiveBank][3]); - break; - case 42: - SetMonData(&gPlayerParty[a], MON_DATA_HP, &gBattleBufferA[gActiveBank][3]); - break; - case 43: - SetMonData(&gPlayerParty[a], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBank][3]); - break; - case 44: - SetMonData(&gPlayerParty[a], MON_DATA_ATK, &gBattleBufferA[gActiveBank][3]); - break; - case 45: - SetMonData(&gPlayerParty[a], MON_DATA_DEF, &gBattleBufferA[gActiveBank][3]); - break; - case 46: - SetMonData(&gPlayerParty[a], MON_DATA_SPD, &gBattleBufferA[gActiveBank][3]); - break; - case 47: - SetMonData(&gPlayerParty[a], MON_DATA_SPATK, &gBattleBufferA[gActiveBank][3]); - break; - case 48: - SetMonData(&gPlayerParty[a], MON_DATA_SPDEF, &gBattleBufferA[gActiveBank][3]); - break; - case 49: - SetMonData(&gPlayerParty[a], MON_DATA_COOL, &gBattleBufferA[gActiveBank][3]); - break; - case 50: - SetMonData(&gPlayerParty[a], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBank][3]); - break; - case 51: - SetMonData(&gPlayerParty[a], MON_DATA_CUTE, &gBattleBufferA[gActiveBank][3]); - break; - case 52: - SetMonData(&gPlayerParty[a], MON_DATA_SMART, &gBattleBufferA[gActiveBank][3]); - break; - case 53: - SetMonData(&gPlayerParty[a], MON_DATA_TOUGH, &gBattleBufferA[gActiveBank][3]); - break; - case 54: - SetMonData(&gPlayerParty[a], MON_DATA_SHEEN, &gBattleBufferA[gActiveBank][3]); - break; - case 55: - SetMonData(&gPlayerParty[a], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBank][3]); - break; - case 56: - SetMonData(&gPlayerParty[a], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBank][3]); - break; - case 57: - SetMonData(&gPlayerParty[a], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBank][3]); - break; - case 58: - SetMonData(&gPlayerParty[a], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBank][3]); - break; - case 59: - SetMonData(&gPlayerParty[a], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBank][3]); - break; - } - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); -} - -void sub_802F7CC(void) -{ - u8 *dst = (u8 *)&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1]; - u8 i; - - for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++) - dst[i] = gBattleBufferA[gActiveBank][3 + i]; - PlayerBufferExecCompleted(); -} - -void PlayerHandleLoadPokeSprite(void) -{ - BattleLoadPlayerMonSprite(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); - gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank; - gBattleBankFunc[gActiveBank] = bx_0802E404; -} - -void PlayerHandleSendOutPoke(void) -{ - sub_8032AA8(gActiveBank, gBattleBufferA[gActiveBank][2]); - gBattlePartyID[gActiveBank] = gBattleBufferA[gActiveBank][1]; - BattleLoadPlayerMonSprite(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); - gActionSelectionCursor[gActiveBank] = 0; - gMoveSelectionCursor[gActiveBank] = 0; - sub_802F934(gActiveBank, gBattleBufferA[gActiveBank][2]); - gBattleBankFunc[gActiveBank] = sub_802D798; -} - -void sub_802F934(u8 bank, u8 b) -{ - u16 species; - - sub_8032AA8(bank, b); - gBattlePartyID[bank] = gBattleBufferA[bank][1]; - species = GetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_SPECIES); - gUnknown_0300434C[bank] = CreateInvisibleSpriteWithCallback(sub_80312F0); - GetMonSpriteTemplate_803C56C(species, GetBankIdentity(bank)); - gObjectBankIDs[bank] = CreateSprite( - &gUnknown_02024E8C, - sub_8077ABC(bank, 2), - sub_8077F68(bank), - sub_8079E90(bank)); - gSprites[gUnknown_0300434C[bank]].data1 = gObjectBankIDs[bank]; - gSprites[gObjectBankIDs[bank]].data0 = bank; - gSprites[gObjectBankIDs[bank]].data2 = species; - gSprites[gObjectBankIDs[bank]].oam.paletteNum = bank; - StartSpriteAnim(&gSprites[gObjectBankIDs[bank]], gBattleMonForms[bank]); - gSprites[gObjectBankIDs[bank]].invisible = TRUE; - gSprites[gObjectBankIDs[bank]].callback = SpriteCallbackDummy; - gSprites[gUnknown_0300434C[bank]].data0 = sub_8046400(0, 0xFF); -} - -void PlayerHandleReturnPokeToBall(void) -{ - if (gBattleBufferA[gActiveBank][1] == 0) - { - ewram17810[gActiveBank].unk4 = 0; - gBattleBankFunc[gActiveBank] = sub_802FB2C; - } - else - { - FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); - DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); - sub_8043DB0(gHealthboxIDs[gActiveBank]); - PlayerBufferExecCompleted(); - } -} - -void sub_802FB2C(void) -{ - switch (ewram17810[gActiveBank].unk4) - { - case 0: - if (ewram17800[gActiveBank].substituteSprite) - move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); - ewram17810[gActiveBank].unk4 = 1; - break; - case 1: - if (!ewram17810[gActiveBank].unk0_6) - { - ewram17810[gActiveBank].unk4 = 0; - move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 1); - gBattleBankFunc[gActiveBank] = sub_802DEAC; - } - } -} - -void PlayerHandleTrainerThrow(void) -{ - s16 r7; - - if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - { - if (GetBankIdentity(gActiveBank) & 2) - r7 = 16; - else - r7 = -16; - } - else - { - r7 = 0; - } - LoadPlayerTrainerBankSprite(gSaveBlock2.playerGender, gActiveBank); - GetMonSpriteTemplate_803C5A0(gSaveBlock2.playerGender, GetBankIdentity(gActiveBank)); - gObjectBankIDs[gActiveBank] = CreateSprite( - &gUnknown_02024E8C, - r7 + 80, - (8 - gTrainerBackPicCoords[gSaveBlock2.playerGender].coords) * 4 + 80, - sub_8079E90(gActiveBank)); - gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank; - gSprites[gObjectBankIDs[gActiveBank]].pos2.x = 240; - gSprites[gObjectBankIDs[gActiveBank]].data0 = -2; - gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0; - gBattleBankFunc[gActiveBank] = sub_802D204; -} - -void PlayerHandleTrainerSlide(void) -{ - LoadPlayerTrainerBankSprite(gSaveBlock2.playerGender, gActiveBank); - GetMonSpriteTemplate_803C5A0(gSaveBlock2.playerGender, GetBankIdentity(gActiveBank)); - gObjectBankIDs[gActiveBank] = CreateSprite( - &gUnknown_02024E8C, - 80, - (8 - gTrainerBackPicCoords[gSaveBlock2.playerGender].coords) * 4 + 80, - 30); - gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank; - gSprites[gObjectBankIDs[gActiveBank]].pos2.x = -96; - gSprites[gObjectBankIDs[gActiveBank]].data0 = 2; - gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0; - gBattleBankFunc[gActiveBank] = sub_802D23C; -} - -void PlayerHandleTrainerSlideBack(void) -{ - oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]); - gSprites[gObjectBankIDs[gActiveBank]].data0 = 50; - gSprites[gObjectBankIDs[gActiveBank]].data2 = -40; - gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; - gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34; - oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], SpriteCallbackDummy); - StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 1); - gBattleBankFunc[gActiveBank] = sub_802D274; -} - -void sub_802FE7C(void) -{ - if (ewram17810[gActiveBank].unk4 == 0) - { - if (ewram17800[gActiveBank].substituteSprite) - move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); - ewram17810[gActiveBank].unk4++; - } - else - { - if (ewram17810[gActiveBank].unk0_6 == 0) - { - ewram17810[gActiveBank].unk4 = 0; - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); - PlaySE12WithPanning(SE_POKE_DEAD, -64); - gSprites[gObjectBankIDs[gActiveBank]].data1 = 0; - gSprites[gObjectBankIDs[gActiveBank]].data2 = 5; - gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80105EC; - gBattleBankFunc[gActiveBank] = sub_802DE10; - } - } -} - -void sub_802FF60(void) -{ - BeginNormalPaletteFade(0xFFFFFFFF, 2, 0, 16, 0); - PlayerBufferExecCompleted(); -} - -void sub_802FF80(void) -{ - ewram17840.unk8 = 4; - gDoingBattleAnim = 1; - move_anim_start_t4(gActiveBank, gActiveBank, GetBankByPlayerAI(1), 3); - gBattleBankFunc[gActiveBank] = bx_wait_t1; -} - -void PlayerHandleBallThrow(void) -{ - u8 var = gBattleBufferA[gActiveBank][1]; - - ewram17840.unk8 = var; - gDoingBattleAnim = 1; - move_anim_start_t4(gActiveBank, gActiveBank, GetBankByPlayerAI(1), 3); - gBattleBankFunc[gActiveBank] = bx_wait_t1; -} - -void PlayerHandlePuase(void) -{ - u8 var = gBattleBufferA[gActiveBank][1]; - - // WTF is this?? - while (var != 0) - var--; - - PlayerBufferExecCompleted(); -} - -void PlayerHandleMoveAnimation(void) -{ - if (!mplay_80342A4(gActiveBank)) - { - u16 r0 = gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8); - - gUnknown_0202F7C4 = gBattleBufferA[gActiveBank][3]; - gMovePowerMoveAnim = gBattleBufferA[gActiveBank][4] | (gBattleBufferA[gActiveBank][5] << 8); - gMoveDmgMoveAnim = gBattleBufferA[gActiveBank][6] | (gBattleBufferA[gActiveBank][7] << 8) | (gBattleBufferA[gActiveBank][8] << 16) | (gBattleBufferA[gActiveBank][9] << 24); - gHappinessMoveAnim = gBattleBufferA[gActiveBank][10]; - gWeatherMoveAnim = gBattleBufferA[gActiveBank][12] | (gBattleBufferA[gActiveBank][13] << 8); - gDisableStructMoveAnim = (u32 *)&gBattleBufferA[gActiveBank][16]; - gPID_perBank[gActiveBank] = *gDisableStructMoveAnim; - if (sub_8031720(r0, gUnknown_0202F7C4) != 0) - { - // Dead code. sub_8031720 always returns 0. - PlayerBufferExecCompleted(); - } - else - { - ewram17810[gActiveBank].unk4 = 0; - gBattleBankFunc[gActiveBank] = sub_8030190; - } - } -} - -void sub_8030190(void) -{ - u16 r4 = gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8); - u8 r7 = gBattleBufferA[gActiveBank][11]; - - switch (ewram17810[gActiveBank].unk4) - { - case 0: - if (ewram17800[gActiveBank].substituteSprite == 1 && ewram17800[gActiveBank].unk0_3 == 0) - { - ewram17800[gActiveBank].unk0_3 = 1; - move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); - } - ewram17810[gActiveBank].unk4 = 1; - break; - case 1: - if (ewram17810[gActiveBank].unk0_6 == 0) - { - sub_80326EC(0); - ExecuteMoveAnim(r4); - ewram17810[gActiveBank].unk4 = 2; - } - break; - case 2: - gAnimScriptCallback(); - if (!gAnimScriptActive) - { - sub_80326EC(1); - if (ewram17800[gActiveBank].substituteSprite == 1 && r7 < 2) - { - move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); - ewram17800[gActiveBank].unk0_3 = 0; - } - ewram17810[gActiveBank].unk4 = 3; - } - break; - case 3: - if (ewram17810[gActiveBank].unk0_6 == 0) - { - sub_8031F24(); - sub_80324BC(gActiveBank, gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8)); - ewram17810[gActiveBank].unk4 = 0; - PlayerBufferExecCompleted(); - } - break; - } -} - -void PlayerHandlePrintString(void) -{ - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; - BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]); - sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 0x90, 2, 15); - gBattleBankFunc[gActiveBank] = sub_802DF18; -} - -void PlayerHandlePrintStringPlayerOnly(void) -{ - if (GetBankSide(gActiveBank) == 0) - PlayerHandlePrintString(); - else - PlayerBufferExecCompleted(); -} - -void sub_803037C(void) -{ - int r4; - - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 160; - FillWindowRect(&gUnknown_03004210, 10, 2, 15, 27, 18); - FillWindowRect(&gUnknown_03004210, 10, 2, 35, 16, 38); - - gBattleBankFunc[gActiveBank] = sub_802C098; - - InitWindow(&gUnknown_03004210, gUnknown_08400CF3, 400, 18, 35); - sub_8002F44(&gUnknown_03004210); - sub_814A5C0(0, 0xFFFF, 12, 11679, 0); - - for (r4 = 0; r4 < 4; r4++) - nullsub_8(r4); - - sub_802E3E4(gActionSelectionCursor[gActiveBank], 0); - - StrCpyDecodeToDisplayedStringBattle((u8 *) gUnknown_08400CA8); - InitWindow(&gUnknown_03004210, gDisplayedStringBattle, SUB_803037C_TILE_DATA_OFFSET, 2, 35); - sub_8002F44(&gUnknown_03004210); -} - -void nullsub_42() -{ -} - -void sub_8030468(void) -{ - sub_814A5C0(0, 0xFFFF, 12, 0x2D9F, 0); - sub_80304A8(); - gBattleBankFunc[gActiveBank] = sub_802C68C; -} - -void sub_80304A8(void) -{ - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 320; - sub_802E1B0(); - gUnknown_03004344 = 0xFF; - sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); - if (gBattleBufferA[gActiveBank][2] != 1) - { - InitWindow(&gUnknown_03004210, gUnknown_08400D38, 656, 23, 55); - sub_8002F44(&gUnknown_03004210); - } - sub_802E220(); - sub_802E2D4(); -} - -void PlayerHandleOpenBag(void) -{ - s32 i; - - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - gBattleBankFunc[gActiveBank] = sub_802E004; - gBankInMenu = gActiveBank; - for (i = 0; i < 3; i++) - gUnknown_02038470[i] = gBattleBufferA[gActiveBank][1 + i]; -} - -void sub_8030594(void) -{ - s32 i; - - gUnknown_0300434C[gActiveBank] = CreateTask(TaskDummy, 0xFF); - gTasks[gUnknown_0300434C[gActiveBank]].data[0] = gBattleBufferA[gActiveBank][1] & 0xF; - ewram[0x16054] = gBattleBufferA[gActiveBank][1] >> 4; - ewram[0x1609D] = gBattleBufferA[gActiveBank][2]; - ewram[0x160C0] = gBattleBufferA[gActiveBank][3]; - for (i = 0; i < 3; i++) - gUnknown_02038470[i] = gBattleBufferA[gActiveBank][4 + i]; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - gBattleBankFunc[gActiveBank] = sub_802DF30; - gBankInMenu = gActiveBank; -} - -void sub_8030674(void) -{ - BattleMusicStop(); - BeginNormalPaletteFade(0xFFFFFFFF, 2, 0, 16, 0); - PlayerBufferExecCompleted(); -} - -void PlayerHandleHealthBarUpdate(void) -{ - s16 r7; - - load_gfxc_health_bar(0); - r7 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); - if (r7 != 0x7FFF) - { - u32 maxHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP); - u32 curHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_HP); - - sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, curHP, r7); - } - else - { - u32 maxHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP); - - sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, 0, r7); - sub_80440EC(gHealthboxIDs[gActiveBank], 0, 0); - } - gBattleBankFunc[gActiveBank] = bx_t1_healthbar_update; -} - -void PlayerHandleExpBarUpdate(void) -{ - u8 r7 = gBattleBufferA[gActiveBank][1]; - - if (GetMonData(&gPlayerParty[r7], MON_DATA_LEVEL) >= 100) - { - PlayerBufferExecCompleted(); - } - else - { - u16 r4; - u8 taskId; - - load_gfxc_health_bar(1); - GetMonData(&gPlayerParty[r7], MON_DATA_SPECIES); // unused return value - r4 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); - taskId = CreateTask(sub_802D924, 10); - gTasks[taskId].data[0] = r7; - gTasks[taskId].data[1] = r4; - gTasks[taskId].data[2] = gActiveBank; - gBattleBankFunc[gActiveBank] = nullsub_91; - } -} - -void PlayerHandleStatusIconUpdate(void) -{ - if (!mplay_80342A4(gActiveBank)) - { - sub_8045A5C(gHealthboxIDs[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], 9); - ewram17810[gActiveBank].unk0_4 = 0; - gBattleBankFunc[gActiveBank] = sub_802E434; - } -} - -void PlayerHandleStatusAnimation(void) -{ - if (!mplay_80342A4(gActiveBank)) - { - move_anim_start_t2_for_situation( - gBattleBufferA[gActiveBank][1], - gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8) | (gBattleBufferA[gActiveBank][4] << 16) | (gBattleBufferA[gActiveBank][5] << 24)); - gBattleBankFunc[gActiveBank] = sub_802E434; - } -} - -void PlayerHandleStatusXor(void) -{ - u8 val = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_STATUS) ^ gBattleBufferA[gActiveBank][1]; - - SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_STATUS, &val); - PlayerBufferExecCompleted(); -} - -void sub_803097C(void) -{ - PlayerBufferExecCompleted(); -} - -void PlayerHandleDMATransfer(void) -{ - u32 val1 = gBattleBufferA[gActiveBank][1] - | (gBattleBufferA[gActiveBank][2] << 8) - | (gBattleBufferA[gActiveBank][3] << 16) - | (gBattleBufferA[gActiveBank][4] << 24); - u16 val2 = gBattleBufferA[gActiveBank][5] | (gBattleBufferA[gActiveBank][6] << 8); - - const u8 *src = &gBattleBufferA[gActiveBank][7]; - u8 *dst = (u8 *)val1; - u32 size = val2; - - while (1) - { - if (size <= 0x1000) - { - DmaCopy16(3, src, dst, size); - break; - } - DmaCopy16(3, src, dst, 0x1000); - src += 0x1000; - dst += 0x1000; - size -= 0x1000; - } - PlayerBufferExecCompleted(); -} - -void sub_8030A3C(void) -{ - PlayBGM(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8)); - PlayerBufferExecCompleted(); -} - -void sub_8030A6C(void) -{ - PlayerBufferExecCompleted(); -} - -void sub_8030A78(void) -{ - dp01_build_cmdbuf_x21_a_bb(1, 0, 0); - PlayerBufferExecCompleted(); -} - -void sub_8030A8C(void) -{ - dp01_build_cmdbuf_x22_a_three_bytes(1, 0, 0); - PlayerBufferExecCompleted(); -} - -void sub_8030AA0(void) -{ - dp01_build_cmdbuf_x23_aa_0(1, 0); - PlayerBufferExecCompleted(); -} - -void sub_8030AB4(void) -{ - dp01_build_cmdbuf_x24_aa_0(1, 0); - PlayerBufferExecCompleted(); -} - -void sub_8030AC8(void) -{ - gUnknown_020238C8.unk0_0 = 0; - PlayerBufferExecCompleted(); -} - -void sub_8030AE4(void) -{ - gUnknown_020238C8.unk0_0 = gBattleBufferA[gActiveBank][1]; - PlayerBufferExecCompleted(); -} - -void sub_8030B1C(void) -{ - gUnknown_020238C8.unk0_7 = 0; - PlayerBufferExecCompleted(); -} - -void sub_8030B34(void) -{ - gUnknown_020238C8.unk0_7 ^= 1; - PlayerBufferExecCompleted(); -} - -void PlayerHandleHitAnimation(void) -{ - if (gSprites[gObjectBankIDs[gActiveBank]].invisible == TRUE) - { - PlayerBufferExecCompleted(); - } - else - { - gDoingBattleAnim = 1; - gSprites[gObjectBankIDs[gActiveBank]].data1 = 0; - sub_8047858(gActiveBank); - gBattleBankFunc[gActiveBank] = bx_blink_t1; - } -} - -void sub_8030BCC(void) -{ - PlayerBufferExecCompleted(); -} - -void PlayerHandleEffectivenessSound(void) -{ - s8 pan; - - if (GetBankSide(gActiveBank) == 0) - pan = -64; - else - pan = 63; - PlaySE12WithPanning(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8), pan); - PlayerBufferExecCompleted(); -} - -void sub_8030C1C(void) -{ - PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8)); - PlayerBufferExecCompleted(); -} - -void PlayerHandleFaintingCry(void) -{ - u16 species = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES); - - PlayCry3(species, -25, 5); - PlayerBufferExecCompleted(); -} - -void PlayerHandleIntroSlide(void) -{ - sub_80E43C0(gBattleBufferA[gActiveBank][1]); - gUnknown_02024DE8 |= 1; - PlayerBufferExecCompleted(); -} - -void PlayerHandleTrainerBallThrow(void) -{ - u8 paletteNum; - u8 taskId; - - oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]); - gSprites[gObjectBankIDs[gActiveBank]].data0 = 50; - gSprites[gObjectBankIDs[gActiveBank]].data2 = -40; - gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; - gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34; - gSprites[gObjectBankIDs[gActiveBank]].data5 = gActiveBank; - oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], sub_8030E38); - StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 1); - paletteNum = AllocSpritePalette(0xD6F8); - LoadCompressedPalette(gTrainerBackPicPaletteTable[gSaveBlock2.playerGender].data, 0x100 + paletteNum * 16, 32); - gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = paletteNum; - taskId = CreateTask(task05_08033660, 5); - gTasks[taskId].data[0] = gActiveBank; - if (ewram17810[gActiveBank].unk0_0) - gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0; - ewram17810[4].unk9 |= 1; - gBattleBankFunc[gActiveBank] = nullsub_91; -} - -void sub_8030E38(struct Sprite *sprite) -{ - u8 r4 = sprite->data5; - - FreeSpriteOamMatrix(sprite); - FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum)); - DestroySprite(sprite); - BattleLoadPlayerMonSprite(&gPlayerParty[gBattlePartyID[r4]], r4); - StartSpriteAnim(&gSprites[gObjectBankIDs[r4]], 0); -} - -void task05_08033660(u8 taskId) -{ - if (gTasks[taskId].data[1] < 31) - { - gTasks[taskId].data[1]++; - } - else - { - u8 savedActiveBank = gActiveBank; - - gActiveBank = gTasks[taskId].data[0]; - if (!IsDoubleBattle() || (gBattleTypeFlags & 0x40)) - { - gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; - sub_802F934(gActiveBank, 0); - } - else - { - gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; - sub_802F934(gActiveBank, 0); - gActiveBank ^= 2; - gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; - BattleLoadPlayerMonSprite(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); - sub_802F934(gActiveBank, 0); - gActiveBank ^= 2; - } - gBattleBankFunc[gActiveBank] = sub_802D500; - gActiveBank = savedActiveBank; - DestroyTask(taskId); - } -} - -void sub_8030FAC(void) -{ - if (gBattleBufferA[gActiveBank][1] != 0 && GetBankSide(gActiveBank) == 0) - { - PlayerBufferExecCompleted(); - } - else - { - ewram17810[gActiveBank].unk0_0 = 1; - gUnknown_02024E68[gActiveBank] = sub_8044804(gActiveBank, (struct BattleInterfaceStruct2 *)&gBattleBufferA[gActiveBank][4], gBattleBufferA[gActiveBank][1], gBattleBufferA[gActiveBank][2]); - ewram17810[gActiveBank].unk5 = 0; - if (gBattleBufferA[gActiveBank][2] != 0) - ewram17810[gActiveBank].unk5 = 0x5D; - gBattleBankFunc[gActiveBank] = sub_8031064; - } -} - -void sub_8031064(void) -{ - if (ewram17810[gActiveBank].unk5++ > 0x5C) - { - ewram17810[gActiveBank].unk5 = 0; - PlayerBufferExecCompleted(); - } -} - -void sub_80310A4(void) -{ - if (ewram17810[gActiveBank].unk0_0) - gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0; - PlayerBufferExecCompleted(); -} - -void sub_80310F0(void) -{ - dp11b_obj_free(gActiveBank, 1); - dp11b_obj_free(gActiveBank, 0); - PlayerBufferExecCompleted(); -} - -void PlayerHandleSpriteInvisibility(void) -{ - if (sub_8078874(gActiveBank)) - { - gSprites[gObjectBankIDs[gActiveBank]].invisible = gBattleBufferA[gActiveBank][1]; - sub_8031F88(gActiveBank); - } - PlayerBufferExecCompleted(); -} - -void PlayerHandleBattleAnimation(void) -{ - if (!mplay_80342A4(gActiveBank)) - { - u8 val2 = gBattleBufferA[gActiveBank][1]; - u16 val = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); - - if (move_anim_start_t3(gActiveBank, gActiveBank, gActiveBank, val2, val)) - PlayerBufferExecCompleted(); - else - gBattleBankFunc[gActiveBank] = sub_802E460; - } -} - -void PlayerHandleLinkStandbyMsg(void) -{ - switch (gBattleBufferA[gActiveBank][1]) - { - case 0: - b_link_standby_message(); - // fall through - case 1: - dp11b_obj_free(gActiveBank, 1); - dp11b_obj_free(gActiveBank, 0); - break; - case 2: - b_link_standby_message(); - break; - } - PlayerBufferExecCompleted(); -} - -void PlayerHandleResetActionMoveSelection(void) -{ - switch (gBattleBufferA[gActiveBank][1]) - { - case 0: - gActionSelectionCursor[gActiveBank] = 0; - gMoveSelectionCursor[gActiveBank] = 0; - break; - case 1: - gActionSelectionCursor[gActiveBank] = 0; - break; - case 2: - gMoveSelectionCursor[gActiveBank] = 0; - break; - } - PlayerBufferExecCompleted(); -} - -void sub_80312A0(void) -{ - gBattleOutcome = gBattleBufferA[gActiveBank][1]; - FadeOutMapMusic(5); - BeginFastPaletteFade(3); - PlayerBufferExecCompleted(); - gBattleBankFunc[gActiveBank] = sub_802D18C; -} - -void nullsub_43(void) -{ -} diff --git a/src/battle_7.c b/src/battle_7.c index 0c4b118b4..4ae220f6c 100644 --- a/src/battle_7.c +++ b/src/battle_7.c @@ -31,7 +31,6 @@ struct Struct2019348 extern u8 gBattleBufferA[][0x200]; extern u8 gActiveBank; -extern u32 gBattleExecBuffer; extern u8 gNoOfAllBanks; extern u16 gBattlePartyID[]; extern u8 gBanksBySide[]; @@ -63,7 +62,6 @@ extern const u8 gSubstituteDollGfx[]; extern const u8 gSubstituteDollPal[]; extern const struct CompressedSpriteSheet gUnknown_081FAF24; extern const struct SpriteTemplate gSpriteTemplate_81FAF34; -extern void (*const gOpponentBufferCommands[])(void); extern const struct CompressedSpriteSheet gUnknown_0820A47C; extern const struct CompressedSpriteSheet gUnknown_0820A484; extern const struct CompressedSpriteSheet gUnknown_0820A48C[]; @@ -96,9 +94,6 @@ void sub_80324E0(u8 a); void sub_80327CC(void); void sub_8032978(struct Sprite *); void sub_80328A4(struct Sprite *); -void OpponentBufferRunCommand(void); -void sub_80332D0(void); -void OpponentBufferExecCompleted(void); void sub_80312F0(struct Sprite *sprite) { @@ -182,9 +177,9 @@ bool8 move_anim_start_t3(u8 a, u8 b, u8 c, u8 d, u16 e) gBattleMonForms[a] = e & 0x7F; return TRUE; } - if (ewram17800[a].substituteSprite && sub_803163C(d) == 0) + if (ewram17800[a].unk0_2 && sub_803163C(d) == 0) return TRUE; - if (ewram17800[a].substituteSprite && d == 2 && gSprites[gObjectBankIDs[a]].invisible) + if (ewram17800[a].unk0_2 && d == 2 && gSprites[gObjectBankIDs[a]].invisible) { refresh_graphics_maybe(a, 1, gObjectBankIDs[a]); sub_80324E0(a); @@ -273,29 +268,29 @@ bool8 mplay_80342A4(u8 a) return TRUE; } -void BattleLoadOpponentMonSprite(struct Pokemon *pkmn, u8 bank) +void sub_8031794(struct Pokemon *pkmn, u8 b) { u32 personalityValue; u16 species; - u32 transformPersonality; + u32 r7; u32 otId; u8 var; u16 paletteOffset; const u8 *lzPaletteData; personalityValue = GetMonData(pkmn, MON_DATA_PERSONALITY); - if (ewram17800[bank].transformedSpecies == 0) + if (ewram17800[b].unk2 == 0) { species = GetMonData(pkmn, MON_DATA_SPECIES); - transformPersonality = personalityValue; + r7 = personalityValue; } else { - species = ewram17800[bank].transformedSpecies; - transformPersonality = gPID_perBank[bank]; + species = ewram17800[b].unk2; + r7 = gPID_perBank[b]; } otId = GetMonData(pkmn, MON_DATA_OT_ID); - var = GetBankIdentity(bank); + var = GetBankIdentity(b); HandleLoadSpecialPokePic( &gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, @@ -303,29 +298,29 @@ void BattleLoadOpponentMonSprite(struct Pokemon *pkmn, u8 bank) 0x02000000, gUnknown_081FAF4C[var], species, - transformPersonality); - paletteOffset = 0x100 + bank * 16; - if (ewram17800[bank].transformedSpecies == 0) + r7); + paletteOffset = 0x100 + b * 16; + if (ewram17800[b].unk2 == 0) lzPaletteData = pokemon_get_pal(pkmn); else lzPaletteData = species_and_otid_get_pal(species, otId, personalityValue); sub_800D238(lzPaletteData, ewram); LoadPalette(ewram, paletteOffset, 0x20); - LoadPalette(ewram, 0x80 + bank * 16, 0x20); + LoadPalette(ewram, 0x80 + b * 16, 0x20); if (species == SPECIES_CASTFORM) { - paletteOffset = 0x100 + bank * 16; + paletteOffset = 0x100 + b * 16; sub_800D238(lzPaletteData, ewram + 0x16400); - LoadPalette(ewram + 0x16400 + gBattleMonForms[bank] * 32, paletteOffset, 0x20); + LoadPalette(ewram + 0x16400 + gBattleMonForms[b] * 32, paletteOffset, 0x20); } - if (ewram17800[bank].transformedSpecies != 0) + if (ewram17800[b].unk2 != 0) { BlendPalette(paletteOffset, 16, 6, 0x7FFF); CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); } } -void BattleLoadPlayerMonSprite(struct Pokemon *pkmn, u8 bank) +void sub_80318FC(struct Pokemon *pkmn, u8 b) { u32 personalityValue; u16 species; @@ -336,18 +331,18 @@ void BattleLoadPlayerMonSprite(struct Pokemon *pkmn, u8 bank) const u8 *lzPaletteData; personalityValue = GetMonData(pkmn, MON_DATA_PERSONALITY); - if (ewram17800[bank].transformedSpecies == 0) + if (ewram17800[b].unk2 == 0) { species = GetMonData(pkmn, MON_DATA_SPECIES); r7 = personalityValue; } else { - species = ewram17800[bank].transformedSpecies; - r7 = gPID_perBank[bank]; + species = ewram17800[b].unk2; + r7 = gPID_perBank[b]; } otId = GetMonData(pkmn, MON_DATA_OT_ID); - var = GetBankIdentity(bank); + var = GetBankIdentity(b); HandleLoadSpecialPokePic( &gMonBackPicTable[species], gMonBackPicCoords[species].coords, @@ -356,21 +351,21 @@ void BattleLoadPlayerMonSprite(struct Pokemon *pkmn, u8 bank) gUnknown_081FAF4C[var], species, r7); - paletteOffset = 0x100 + bank * 16; - if (ewram17800[bank].transformedSpecies == 0) + paletteOffset = 0x100 + b * 16; + if (ewram17800[b].unk2 == 0) lzPaletteData = pokemon_get_pal(pkmn); else lzPaletteData = species_and_otid_get_pal(species, otId, personalityValue); sub_800D238(lzPaletteData, ewram); LoadPalette(ewram, paletteOffset, 0x20); - LoadPalette(ewram, 0x80 + bank * 16, 0x20); + LoadPalette(ewram, 0x80 + b * 16, 0x20); if (species == SPECIES_CASTFORM) { - paletteOffset = 0x100 + bank * 16; + paletteOffset = 0x100 + b * 16; sub_800D238(lzPaletteData, ewram + 0x16400); - LoadPalette(ewram + 0x16400 + gBattleMonForms[bank] * 32, paletteOffset, 0x20); + LoadPalette(ewram + 0x16400 + gBattleMonForms[b] * 32, paletteOffset, 0x20); } - if (ewram17800[bank].transformedSpecies != 0) + if (ewram17800[b].unk2 != 0) { BlendPalette(paletteOffset, 16, 6, 0x7FFF); CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); @@ -405,11 +400,11 @@ void sub_8031A6C(u16 a, u8 b) LoadCompressedObjectPalette(&gTrainerFrontPicPaletteTable[a]); } -void LoadPlayerTrainerBankSprite(u16 a, u8 bank) +void sub_8031AF4(u16 a, u8 b) { u8 status; - status = GetBankIdentity(bank); + status = GetBankIdentity(b); DecompressPicFromTable_2( &gTrainerBackPicTable[a], gTrainerBackPicCoords[a].coords, @@ -417,7 +412,7 @@ void LoadPlayerTrainerBankSprite(u16 a, u8 bank) (void *)0x02000000, gUnknown_081FAF4C[status], 0); - LoadCompressedPalette(gTrainerBackPicPaletteTable[a].data, 0x100 + bank * 16, 32); + LoadCompressedPalette(gTrainerBackPicPaletteTable[a].data, 0x100 + b * 16, 32); } void nullsub_10(int unused) @@ -607,15 +602,15 @@ void sub_8031F24(void) s32 i; for (i = 0; i < gNoOfAllBanks; i++) - ewram17800[i].invisible = gSprites[gObjectBankIDs[i]].invisible; + ewram17800[i].unk0_0 = gSprites[gObjectBankIDs[i]].invisible; } void sub_8031F88(u8 a) { - ewram17800[a].invisible = gSprites[gObjectBankIDs[a]].invisible; + ewram17800[a].unk0_0 = gSprites[gObjectBankIDs[a]].invisible; } -void sub_8031FC4(u8 bank1, u8 bank2, bool8 c) +void sub_8031FC4(u8 a, u8 b, bool8 c) { u16 paletteOffset; u16 species; @@ -626,16 +621,16 @@ void sub_8031FC4(u8 bank1, u8 bank2, bool8 c) if (c) { - StartSpriteAnim(&gSprites[gObjectBankIDs[bank1]], ewram17840.unk0); - paletteOffset = 0x100 + bank1 * 16; + StartSpriteAnim(&gSprites[gObjectBankIDs[a]], ewram17840.unk0); + paletteOffset = 0x100 + a * 16; LoadPalette(ewram + 0x16400 + ewram17840.unk0 * 32, paletteOffset, 32); - gBattleMonForms[bank1] = ewram17840.unk0; - if (ewram17800[bank1].transformedSpecies != 0) + gBattleMonForms[a] = ewram17840.unk0; + if (ewram17800[a].unk2 != 0) { BlendPalette(paletteOffset, 16, 6, 0x7FFF); CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); } - gSprites[gObjectBankIDs[bank1]].pos1.y = sub_8077F68(bank1); + gSprites[gObjectBankIDs[a]].pos1.y = sub_8077F68(a); } else { @@ -659,15 +654,15 @@ void sub_8031FC4(u8 bank1, u8 bank2, bool8 c) } else { - r10 = GetBankIdentity(bank1); - if (GetBankSide(bank2) == 1) - species = GetMonData(&gEnemyParty[gBattlePartyID[bank2]], MON_DATA_SPECIES); + r10 = GetBankIdentity(a); + if (GetBankSide(b) == 1) + species = GetMonData(&gEnemyParty[gBattlePartyID[b]], MON_DATA_SPECIES); else - species = GetMonData(&gPlayerParty[gBattlePartyID[bank2]], MON_DATA_SPECIES); - if (GetBankSide(bank1) == 0) + species = GetMonData(&gPlayerParty[gBattlePartyID[b]], MON_DATA_SPECIES); + if (GetBankSide(a) == 0) { - personalityValue = GetMonData(&gPlayerParty[gBattlePartyID[bank1]], MON_DATA_PERSONALITY); - otId = GetMonData(&gPlayerParty[gBattlePartyID[bank1]], MON_DATA_OT_ID); + personalityValue = GetMonData(&gPlayerParty[gBattlePartyID[a]], MON_DATA_PERSONALITY); + otId = GetMonData(&gPlayerParty[gBattlePartyID[a]], MON_DATA_OT_ID); HandleLoadSpecialPokePic( &gMonBackPicTable[species], gMonBackPicCoords[species].coords, @@ -675,12 +670,12 @@ void sub_8031FC4(u8 bank1, u8 bank2, bool8 c) 0x02000000, gUnknown_081FAF4C[r10], species, - gPID_perBank[bank1]); + gPID_perBank[a]); } else { - personalityValue = GetMonData(&gEnemyParty[gBattlePartyID[bank1]], MON_DATA_PERSONALITY); - otId = GetMonData(&gEnemyParty[gBattlePartyID[bank1]], MON_DATA_OT_ID); + personalityValue = GetMonData(&gEnemyParty[gBattlePartyID[a]], MON_DATA_PERSONALITY); + otId = GetMonData(&gEnemyParty[gBattlePartyID[a]], MON_DATA_OT_ID); HandleLoadSpecialPokePic( &gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, @@ -688,13 +683,13 @@ void sub_8031FC4(u8 bank1, u8 bank2, bool8 c) 0x02000000, gUnknown_081FAF4C[r10], species, - gPID_perBank[bank1]); + gPID_perBank[a]); } } src = gUnknown_081FAF4C[r10]; - dst = (void *)(VRAM + 0x10000 + gSprites[gObjectBankIDs[bank1]].oam.tileNum * 32); + dst = (void *)(VRAM + 0x10000 + gSprites[gObjectBankIDs[a]].oam.tileNum * 32); DmaCopy32(3, src, dst, 0x800); - paletteOffset = 0x100 + bank1 * 16; + paletteOffset = 0x100 + a * 16; lzPaletteData = species_and_otid_get_pal(species, otId, personalityValue); sub_800D238(lzPaletteData, ewram); LoadPalette(ewram, paletteOffset, 32); @@ -703,21 +698,21 @@ void sub_8031FC4(u8 bank1, u8 bank2, bool8 c) u16 *paletteSrc = (u16 *)(ewram + 0x16400); sub_800D238(lzPaletteData, paletteSrc); - LoadPalette(paletteSrc + gBattleMonForms[bank2] * 16, paletteOffset, 32); + LoadPalette(paletteSrc + gBattleMonForms[b] * 16, paletteOffset, 32); } BlendPalette(paletteOffset, 16, 6, 0x7FFF); CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); if (!IsContest()) { - ewram17800[bank1].transformedSpecies = species; - gBattleMonForms[bank1] = gBattleMonForms[bank2]; + ewram17800[a].unk2 = species; + gBattleMonForms[a] = gBattleMonForms[b]; } - gSprites[gObjectBankIDs[bank1]].pos1.y = sub_8077F68(bank1); - StartSpriteAnim(&gSprites[gObjectBankIDs[bank1]], gBattleMonForms[bank1]); + gSprites[gObjectBankIDs[a]].pos1.y = sub_8077F68(a); + StartSpriteAnim(&gSprites[gObjectBankIDs[a]], gBattleMonForms[a]); } } -void BattleLoadSubstituteSprite(u8 a, u8 b) +void sub_8032350(u8 a, u8 b) { u8 r4; u16 foo; @@ -750,16 +745,16 @@ void BattleLoadSubstituteSprite(u8 a, u8 b) if (!IsContest()) { if (GetBankSide(a) != 0) - BattleLoadOpponentMonSprite(&gEnemyParty[gBattlePartyID[a]], a); + sub_8031794(&gEnemyParty[gBattlePartyID[a]], a); else - BattleLoadPlayerMonSprite(&gPlayerParty[gBattlePartyID[a]], a); + sub_80318FC(&gPlayerParty[gBattlePartyID[a]], a); } } } void refresh_graphics_maybe(u8 a, u8 b, u8 spriteId) { - BattleLoadSubstituteSprite(a, b); + sub_8032350(a, b); StartSpriteAnim(&gSprites[spriteId], gBattleMonForms[a]); if (b == 0) gSprites[spriteId].pos1.y = sub_8077F7C(a); @@ -770,12 +765,12 @@ void refresh_graphics_maybe(u8 a, u8 b, u8 spriteId) void sub_80324BC(u8 a, u16 b) { if (b == 0xA4) - ewram17800[a].substituteSprite = 1; + ewram17800[a].unk0_2 = 1; } void sub_80324E0(u8 a) { - ewram17800[a].substituteSprite = 0; + ewram17800[a].unk0_2 = 0; } void sub_80324F8(struct Pokemon *pkmn, u8 b) @@ -896,9 +891,9 @@ void sub_80328A4(struct Sprite *sprite) } if (gAnimScriptActive || r7->invisible) invisible = TRUE; - else if (ewram17800[r4].transformedSpecies != 0 && gEnemyMonElevation[ewram17800[r4].transformedSpecies] == 0) + else if (ewram17800[r4].unk2 != 0 && gEnemyMonElevation[ewram17800[r4].unk2] == 0) invisible = TRUE; - if (ewram17800[r4].substituteSprite) + if (ewram17800[r4].unk0_2) invisible = TRUE; sprite->pos1.x = r7->pos1.x; sprite->pos2.x = r7->pos2.x; @@ -914,8 +909,8 @@ void sub_8032984(u8 a, u16 b) { if (GetBankSide(a) != 0) { - if (ewram17800[a].transformedSpecies != 0) - b = ewram17800[a].transformedSpecies; + if (ewram17800[a].unk2 != 0) + b = ewram17800[a].unk2; if (gEnemyMonElevation[b] != 0) gSprites[ewram17810[a].unk7].callback = sub_80328A4; else @@ -953,283 +948,8 @@ void sub_8032A38(void) void sub_8032AA8(u8 a, u8 b) { - ewram17800[a].transformedSpecies = 0; + ewram17800[a].unk2 = 0; gBattleMonForms[a] = 0; if (b == 0) sub_80324E0(a); } - -void nullsub_45(void) -{ -} - -void SetBankFuncToOpponentBufferRunCommand(void) -{ - gBattleBankFunc[gActiveBank] = OpponentBufferRunCommand; -} - -void OpponentBufferRunCommand(void) -{ - if (gBattleExecBuffer & gBitTable[gActiveBank]) - { - if (gBattleBufferA[gActiveBank][0] <= 0x38) - gOpponentBufferCommands[gBattleBufferA[gActiveBank][0]](); - else - OpponentBufferExecCompleted(); - } -} - -void sub_8032B4C(void) -{ - if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy) - OpponentBufferExecCompleted(); -} - -// Duplicate of sub_8032B4C -void sub_8032B84(void) -{ - if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy) - OpponentBufferExecCompleted(); -} - -void sub_8032BBC(void) -{ - if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy) - { - sub_8031B74(gSprites[gObjectBankIDs[gActiveBank]].oam.affineParam); - gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum = gSprites[gObjectBankIDs[gActiveBank]].data5; - FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); - DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); - OpponentBufferExecCompleted(); - } -} - -void sub_8032C4C(void) -{ - if ((--ewram17810[gActiveBank].unk9) == 0xFF) - { - ewram17810[gActiveBank].unk9 = 0; - OpponentBufferExecCompleted(); - } -} - -void sub_8032C88(void) -{ - bool8 r6 = FALSE; - - if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI))) - { - if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy) - r6 = TRUE; - } - else - { - if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy - && gSprites[gHealthboxIDs[gActiveBank ^ 2]].callback == SpriteCallbackDummy) - r6 = TRUE; - } - if (IsCryPlayingOrClearCrySongs()) - r6 = FALSE; - - if (r6 && ewram17810[gActiveBank].unk1_0 && ewram17810[gActiveBank ^ 2].unk1_0) - { - ewram17810[gActiveBank].unk0_7 = 0; - ewram17810[gActiveBank].unk1_0 = 0; - ewram17810[gActiveBank ^ 2].unk0_7 = 0; - ewram17810[gActiveBank ^ 2].unk1_0 = 0; - FreeSpriteTilesByTag(0x27F9); - FreeSpritePaletteByTag(0x27F9); - if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - m4aMPlayContinue(&gMPlay_BGM); - else - m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 256); - ewram17810[gActiveBank].unk9 = 3; - gBattleBankFunc[gActiveBank] = sub_8032C4C; - } -} - -void sub_8032E2C(void) -{ - if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7) - sub_8141828(gActiveBank, &gEnemyParty[gBattlePartyID[gActiveBank]]); - if (!ewram17810[gActiveBank ^ 2].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_7) - sub_8141828(gActiveBank ^ 2, &gEnemyParty[gBattlePartyID[gActiveBank ^ 2]]); - if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_3) - { - if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) - { - DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank ^ 2]]); - sub_8045A5C( - gHealthboxIDs[gActiveBank ^ 2], - &gEnemyParty[gBattlePartyID[gActiveBank ^ 2]], - 0); - sub_804777C(gActiveBank ^ 2); - sub_8043DFC(gHealthboxIDs[gActiveBank ^ 2]); - sub_8032984( - gActiveBank ^ 2, - GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank ^ 2]], MON_DATA_SPECIES)); - } - DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]); - sub_8045A5C( - gHealthboxIDs[gActiveBank], - &gEnemyParty[gBattlePartyID[gActiveBank]], - 0); - sub_804777C(gActiveBank); - sub_8043DFC(gHealthboxIDs[gActiveBank]); - sub_8032984( - gActiveBank, - GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES)); - - ewram17840.unk9_0 = 0; - gBattleBankFunc[gActiveBank] = sub_8032C88; - } -} - -void sub_8033018(void) -{ - if (gSprites[gObjectBankIDs[gActiveBank]].animEnded == TRUE - && gSprites[gObjectBankIDs[gActiveBank]].pos2.x == 0) - { - if (!ewram17810[gActiveBank].unk0_7) - { - sub_8141828(gActiveBank, &gEnemyParty[gBattlePartyID[gActiveBank]]); - return; - } - if (ewram17810[gActiveBank].unk1_0) - { - ewram17810[gActiveBank].unk0_7 = 0; - ewram17810[gActiveBank].unk1_0 = 0; - FreeSpriteTilesByTag(0x27F9); - FreeSpritePaletteByTag(0x27F9); - OpponentBufferExecCompleted(); - return; - } - } -} - -void sub_80330C8(void) -{ - s16 r4 = sub_8045C78(gActiveBank, gHealthboxIDs[gActiveBank], 0, 0); - - sub_8043DFC(gHealthboxIDs[gActiveBank]); - if (r4 != -1) - sub_80440EC(gHealthboxIDs[gActiveBank], r4, 0); - else - OpponentBufferExecCompleted(); -} - -void sub_803311C(void) -{ - if (!gSprites[gObjectBankIDs[gActiveBank]].inUse) - { - sub_8043DB0(gHealthboxIDs[gActiveBank]); - OpponentBufferExecCompleted(); - } -} - -void sub_8033160(void) -{ - if (!ewram17810[gActiveBank].unk0_6) - { - FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); - DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); - sub_8032A08(gActiveBank); - sub_8043DB0(gHealthboxIDs[gActiveBank]); - OpponentBufferExecCompleted(); - } -} - -void sub_80331D0(void) -{ - if (gUnknown_03004210.state == 0) - OpponentBufferExecCompleted(); -} - -void bx_blink_t7(void) -{ - u8 spriteId = gObjectBankIDs[gActiveBank]; - - if (gSprites[spriteId].data1 == 32) - { - gSprites[spriteId].data1 = 0; - gSprites[spriteId].invisible = FALSE; - gDoingBattleAnim = 0; - OpponentBufferExecCompleted(); - } - else - { - if (((u16)gSprites[spriteId].data1 % 4) == 0) - gSprites[spriteId].invisible ^= 1; - gSprites[spriteId].data1++; - } -} - -void sub_8033264(void) -{ - if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy) - { - if (ewram17800[gActiveBank].substituteSprite) - move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); - gBattleBankFunc[gActiveBank] = sub_80332D0; - } -} - -void sub_80332D0(void) -{ - if (!ewram17810[gActiveBank].unk0_6) - { - CreateTask(c3_0802FDF4, 10); - OpponentBufferExecCompleted(); - } -} - -void sub_8033308(void) -{ - if (ewram17810[gActiveBank].unk1_0) - { - ewram17810[gActiveBank].unk0_7 = 0; - ewram17810[gActiveBank].unk1_0 = 0; - FreeSpriteTilesByTag(0x27F9); - FreeSpritePaletteByTag(0x27F9); - StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 0); - sub_8045A5C( - gHealthboxIDs[gActiveBank], - &gEnemyParty[gBattlePartyID[gActiveBank]], - 0); - sub_804777C(gActiveBank); - sub_8043DFC(gHealthboxIDs[gActiveBank]); - sub_8031F88(gActiveBank); - gBattleBankFunc[gActiveBank] = sub_8033264; - } -} - -void sub_80333D4(void) -{ - if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7) - sub_8141828(gActiveBank, &gEnemyParty[gBattlePartyID[gActiveBank]]); - if (gSprites[gUnknown_0300434C[gActiveBank]].callback == SpriteCallbackDummy - && !ewram17810[gActiveBank].unk0_3) - { - DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]); - sub_8032984(gActiveBank, GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES)); - gBattleBankFunc[gActiveBank] = sub_8033308; - } -} - -void sub_8033494(void) -{ - if (!ewram17810[gActiveBank].unk0_4) - OpponentBufferExecCompleted(); -} - -void sub_80334C0(void) -{ - if (!ewram17810[gActiveBank].unk0_5) - OpponentBufferExecCompleted(); -} - -void OpponentBufferExecCompleted(void) -{ - gBattleBankFunc[gActiveBank] = OpponentBufferRunCommand; - gBattleExecBuffer &= ~gBitTable[gActiveBank]; -} diff --git a/src/battle_anim_81258BC.c b/src/battle_anim_81258BC.c deleted file mode 100644 index 5bdbb4946..000000000 --- a/src/battle_anim_81258BC.c +++ /dev/null @@ -1,50 +0,0 @@ -#include "global.h" -#include "battle_anim_81258BC.h" -#include "battle.h" -#include "battle_message.h" -#include "menu_cursor.h" -#include "text.h" - -extern struct Window gUnknown_03004210; -extern u8 gDisplayedStringBattle[]; -extern u8 gActionSelectionCursor[]; - -extern const u8 gUnknown_08400CBB[]; -extern u8 gActiveBank; -extern const u8 gUnknown_08400D15[]; - -extern void *gBattleBankFunc[]; -extern u16 gUnknown_030042A0; -extern u16 gUnknown_030042A4; - -#if ENGLISH -#define SUB_812BB10_TILE_DATA_OFFSET 440 -#elif GERMAN -#define SUB_812BB10_TILE_DATA_OFFSET 444 -#endif - -void sub_812BB10(void) { - int i; - - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 160; - gUnknown_03004210.paletteNum = 0; - FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 15, 27, 18); - FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 35, 16, 36); - gBattleBankFunc[gActiveBank] = bx_battle_menu_t6_2; - - InitWindow(&gUnknown_03004210, gUnknown_08400D15, 400, 18, 35); - sub_8002F44(&gUnknown_03004210); - sub_814A5C0(0, 0xFFFF, 12, 11679, 0); - - for (i = 0; i < 4; i++) - { - nullsub_8(i); - } - - sub_802E3E4(gActionSelectionCursor[gActiveBank], 0); - StrCpyDecodeToDisplayedStringBattle((u8 *) gUnknown_08400CBB); - - InitWindow(&gUnknown_03004210, gDisplayedStringBattle, SUB_812BB10_TILE_DATA_OFFSET, 2, 35); - sub_8002F44(&gUnknown_03004210); -} \ No newline at end of file diff --git a/src/battle_anim_8137220.c b/src/battle_anim_8137220.c deleted file mode 100644 index af2b86c17..000000000 --- a/src/battle_anim_8137220.c +++ /dev/null @@ -1,1486 +0,0 @@ -#include "global.h" -#include "battle.h" -#include "battle_interface.h" -#include "battle_message.h" -#include "data2.h" -#include "link.h" -#include "main.h" -#include "menu_cursor.h" -#include "palette.h" -#include "pokemon.h" -#include "rom3.h" -#include "songs.h" -#include "sound.h" -#include "sprite.h" -#include "item_use.h" -#include "string_util.h" -#include "task.h" -#include "text.h" -#include "util.h" - -//Possibly PokemonSubstruct1 -struct UnknownStruct3 -{ - u16 moves[4]; - u8 pp[4]; - u8 ppBonuses; -}; - -extern u8 gActiveBank; -extern void (*gBattleBankFunc[])(void); -extern u32 gBattleExecBuffer; -extern void (*gWallyBufferCommands[])(void); -extern u8 gBattleBufferA[][0x200]; -extern u8 gObjectBankIDs[]; -extern MainCallback gPreBattleCallback1; -extern bool8 gDoingBattleAnim; -extern u16 gBattlePartyID[]; -extern u8 gHealthboxIDs[]; -extern u16 gBattleTypeFlags; -extern u16 gMovePowerMoveAnim; -extern u32 gMoveDmgMoveAnim; -extern u8 gHappinessMoveAnim; -extern u16 gWeatherMoveAnim; -extern u32 *gDisableStructMoveAnim; -extern u32 gPID_perBank[]; -extern void (*gAnimScriptCallback)(void); -extern bool8 gAnimScriptActive; -extern u8 gDisplayedStringBattle[]; -extern u8 gBankInMenu; -extern u8 gBattleMonForms[]; -extern u8 gBattleOutcome; -extern u16 gUnknown_02024DE8; -extern u8 gUnknown_02024E68[]; -extern struct SpriteTemplate gUnknown_02024E8C; -extern u8 gUnknown_0202F7C4; -extern struct Window gUnknown_03004210; -extern u16 gUnknown_030042A0; -extern u16 gUnknown_030042A4; -extern u8 gUnknown_0300434C[]; -extern const u8 gUnknown_08400CCC[]; -extern const u8 gUnknown_08400CF3[]; - -// TODO: include rom3.h when my other PR gets merged -extern void dp01_build_cmdbuf_x21_a_bb(u8, u8, u16); -extern void dp01_build_cmdbuf_x23_aa_0(u8, u16); - -extern void nullsub_14(void); -extern void PrepareBagForWallyTutorial(void); -extern void sub_8141828(); -extern void sub_8045A5C(); -extern void sub_804777C(); -extern void sub_8043DFC(); -extern bool8 IsDoubleBattle(void); -extern void c3_0802FDF4(u8); -extern void sub_802ECF0(void); -extern void LoadPlayerTrainerBankSprite(); -extern u8 GetBankIdentity(u8); -extern void sub_80313A0(struct Sprite *); -extern u8 GetBankByPlayerAI(u8); -extern u8 sub_8031720(); -extern void ExecuteMoveAnim(); -extern void sub_80326EC(); -extern void sub_8031F24(void); -extern void sub_80324BC(); -extern void BufferStringBattle(); -extern u8 GetBankSide(u8); -extern void sub_80304A8(void); -extern void sub_8047858(); -extern void sub_80E43C0(); -extern void oamt_add_pos2_onto_pos1(); -extern void sub_8078B34(struct Sprite *); -extern void sub_8030E38(struct Sprite *); -extern void oamt_set_x3A_32(); -extern u8 sub_8046400(); -extern u8 sub_8077ABC(); -extern u8 sub_8077F68(); -extern u8 sub_8079E90(); -extern void sub_80312F0(struct Sprite *); -extern bool8 move_anim_start_t3(); - -void WallyBufferRunCommand(void); -void sub_81374FC(void); -void sub_81376B8(void); -void WallyBufferExecCompleted(void); -u32 sub_8137A84(u8, u8 *); -void sub_8138294(u8); -void sub_81390D0(void); -void sub_8139A2C(u8); - -void unref_sub_8137220(void) -{ -} - -void SetBankFuncToWallyBufferRunCommand(void) -{ - gBattleBankFunc[gActiveBank] = WallyBufferRunCommand; - ewram[0x160A8] = 0; - ewram[0x160A9] = 0; - ewram[0x160AA] = 0; - ewram[0x160AB] = 0; -} - -void WallyBufferRunCommand(void) -{ - if (gBattleExecBuffer & gBitTable[gActiveBank]) - { - if (gBattleBufferA[gActiveBank][0] < 0x39) - gWallyBufferCommands[gBattleBufferA[gActiveBank][0]](); - else - WallyBufferExecCompleted(); - } -} - -void sub_81372BC(void) -{ - u8 r4; - - switch (ewram[0x160A8]) - { - case 0: - ewram[0x160AA] = 64; - ewram[0x160A8]++; - // fall through - case 1: - r4 = --ewram[0x160AA]; - if (r4 == 0) - { - PlaySE(SE_SELECT); - dp01_build_cmdbuf_x21_a_bb(1, 0, 0); - WallyBufferExecCompleted(); - ewram[0x160A8]++; - ewram[0x160A9] = r4; - ewram[0x160AA] = 64; - } - break; - case 2: - r4 = --ewram[0x160AA]; - if (r4 == 0) - { - PlaySE(SE_SELECT); - dp01_build_cmdbuf_x21_a_bb(1, 0, 0); - WallyBufferExecCompleted(); - ewram[0x160A8]++; - ewram[0x160A9] = r4; - ewram[0x160AA] = 64; - } - break; - case 3: - r4 = --ewram[0x160AA]; - if (r4 == 0) - { - dp01_build_cmdbuf_x21_a_bb(1, 9, 0); - WallyBufferExecCompleted(); - ewram[0x160A8]++; - ewram[0x160A9] = r4; - ewram[0x160AA] = 64; - } - break; - case 4: - if (--ewram[0x160AA] == 0) - { - PlaySE(SE_SELECT); - nullsub_8(0); - sub_802E3E4(1, 0); - ewram[0x160AA] = 64; - ewram[0x160A8]++; - } - break; - case 5: - if (--ewram[0x160AA] == 0) - { - PlaySE(SE_SELECT); - DestroyMenuCursor(); - dp01_build_cmdbuf_x21_a_bb(1, 1, 0); - WallyBufferExecCompleted(); - } - break; - } -} - -void sub_813741C(void) -{ - if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy) - WallyBufferExecCompleted(); -} - -void sub_8137454(void) -{ - if (gUnknown_03004210.state == 0) - WallyBufferExecCompleted(); -} - -void sub_813746C(void) -{ - if (!gPaletteFade.active) - { - gMain.inBattle = FALSE; - gMain.callback1 = gPreBattleCallback1; - SetMainCallback2(gMain.savedCallback); - } -} - -void bx_wait_t5(void) -{ - if (!gDoingBattleAnim) - WallyBufferExecCompleted(); -} - -void sub_81374C4(void) -{ - if (!gPaletteFade.active) - { - gBattleBankFunc[gActiveBank] = sub_81374FC; - nullsub_14(); - PrepareBagForWallyTutorial(); - } -} - -void sub_81374FC(void) -{ - if (gMain.callback2 == sub_800F808 - && !gPaletteFade.active) - { - dp01_build_cmdbuf_x23_aa_0(1, gScriptItemId); - WallyBufferExecCompleted(); - } -} - -void sub_8137538(void) -{ - if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7) - sub_8141828(gActiveBank, &gPlayerParty[gBattlePartyID[gActiveBank]]); - - if (!ewram17810[gActiveBank ^ 2].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_7) - sub_8141828(gActiveBank ^ 2, &gPlayerParty[gBattlePartyID[gActiveBank ^ 2]]); - - if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_3) - { - if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) - { - DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank ^ 2]]); - sub_8045A5C(gHealthboxIDs[gActiveBank ^ 2], &gPlayerParty[gBattlePartyID[gActiveBank ^ 2]], 0); - sub_804777C(gActiveBank ^ 2); - sub_8043DFC(gHealthboxIDs[gActiveBank ^ 2]); - } - DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]); - sub_8045A5C(gHealthboxIDs[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], 0); - sub_804777C(gActiveBank); - sub_8043DFC(gHealthboxIDs[gActiveBank]); - ewram17840.unk9_0 = 0; - gBattleBankFunc[gActiveBank] = sub_81376B8; - } -} - -void sub_81376B8(void) -{ - bool8 r4 = FALSE; - - if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy) - r4 = TRUE; - if (r4 && ewram17810[gActiveBank].unk1_0 && ewram17810[gActiveBank ^ 2].unk1_0) - { - ewram17810[gActiveBank].unk0_7 = 0; - ewram17810[gActiveBank].unk1_0 = 0; - ewram17810[gActiveBank ^ 2].unk0_7 = 0; - ewram17810[gActiveBank ^ 2].unk1_0 = 0; - FreeSpriteTilesByTag(0x27F9); - FreeSpritePaletteByTag(0x27F9); - CreateTask(c3_0802FDF4, 10); - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); - WallyBufferExecCompleted(); - } -} - -void sub_81377B0(void) -{ - s16 r4; - - r4 = sub_8045C78(gActiveBank, gHealthboxIDs[gActiveBank], 0, 0); - sub_8043DFC(gHealthboxIDs[gActiveBank]); - if (r4 != -1) - { - sub_80440EC(gHealthboxIDs[gActiveBank], r4, 0); - } - else - { - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); - WallyBufferExecCompleted(); - } -} - -void bx_blink_t5(void) -{ - u8 spriteId = gObjectBankIDs[gActiveBank]; - - if (gSprites[spriteId].data1 == 32) - { - gSprites[spriteId].data1 = 0; - gSprites[spriteId].invisible = FALSE; - gDoingBattleAnim = FALSE; - WallyBufferExecCompleted(); - } - else - { - if (((u16)gSprites[spriteId].data1 % 4) == 0) - gSprites[spriteId].invisible ^= 1; - gSprites[spriteId].data1++; - } -} - -void sub_813789C(void) -{ - if (!ewram17810[gActiveBank].unk0_6) - { - FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); - DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); - sub_8043DB0(gHealthboxIDs[gActiveBank]); - WallyBufferExecCompleted(); - } -} - -// Duplicate of sub_813741C -void sub_8137908(void) -{ - if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy) - WallyBufferExecCompleted(); -} - -void sub_8137940(void) -{ - if (!ewram17810[gActiveBank].unk0_5) - WallyBufferExecCompleted(); -} - -void WallyBufferExecCompleted(void) -{ - gBattleBankFunc[gActiveBank] = WallyBufferRunCommand; - if (gBattleTypeFlags & BATTLE_TYPE_LINK) - { - u8 multiplayerId = GetMultiplayerId(); - - dp01_prepare_buffer_wireless_probably(2, 4, &multiplayerId); - gBattleBufferA[gActiveBank][0] = 0x38; - } - else - { - gBattleExecBuffer &= ~gBitTable[gActiveBank]; - } -} - -void unref_sub_81379E4(void) -{ - if (!ewram17810[gActiveBank].unk0_4) - WallyBufferExecCompleted(); -} - -void dp01t_00_5_getattr(void) -{ - u8 arr[0x100]; - u32 r6 = 0; - u8 r4; - s32 i; - - if (gBattleBufferA[gActiveBank][2] == 0) - { - r6 = sub_8137A84(gBattlePartyID[gActiveBank], arr); - } - else - { - r4 = gBattleBufferA[gActiveBank][2]; - for (i = 0; i < 6; i++) - { - if (r4 & 1) - r6 += sub_8137A84(i, arr + r6); - r4 >>= 1; - } - } - dp01_build_cmdbuf_x1D_1D_numargs_varargs(1, r6, arr); - WallyBufferExecCompleted(); -} - -u32 sub_8137A84(u8 a, u8 *buffer) -{ - struct BattlePokemon battlePokemon; - struct UnknownStruct3 moveData; - u8 nickname[20]; - u8 *src; - s16 data16; - u32 data32; - s32 size = 0; - - switch (gBattleBufferA[gActiveBank][1]) - { - case 0: - battlePokemon.species = GetMonData(&gPlayerParty[a], MON_DATA_SPECIES); - battlePokemon.item = GetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM); - for (size = 0; size < 4; size++) - { - battlePokemon.moves[size] = GetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + size); - battlePokemon.pp[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size); - } - battlePokemon.ppBonuses = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES); - battlePokemon.friendship = GetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP); - battlePokemon.experience = GetMonData(&gPlayerParty[a], MON_DATA_EXP); - battlePokemon.hpIV = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV); - battlePokemon.attackIV = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV); - battlePokemon.defenseIV = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV); - battlePokemon.speedIV = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV); - battlePokemon.spAttackIV = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV); - battlePokemon.spDefenseIV = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV); - battlePokemon.personality = GetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY); - battlePokemon.status1 = GetMonData(&gPlayerParty[a], MON_DATA_STATUS); - battlePokemon.level = GetMonData(&gPlayerParty[a], MON_DATA_LEVEL); - battlePokemon.hp = GetMonData(&gPlayerParty[a], MON_DATA_HP); - battlePokemon.maxHP = GetMonData(&gPlayerParty[a], MON_DATA_MAX_HP); - battlePokemon.attack = GetMonData(&gPlayerParty[a], MON_DATA_ATK); - battlePokemon.defense = GetMonData(&gPlayerParty[a], MON_DATA_DEF); - battlePokemon.speed = GetMonData(&gPlayerParty[a], MON_DATA_SPD); - battlePokemon.spAttack = GetMonData(&gPlayerParty[a], MON_DATA_SPATK); - battlePokemon.spDefense = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF); - battlePokemon.isEgg = GetMonData(&gPlayerParty[a], MON_DATA_IS_EGG); - battlePokemon.altAbility = GetMonData(&gPlayerParty[a], MON_DATA_ALT_ABILITY); - battlePokemon.otId = GetMonData(&gPlayerParty[a], MON_DATA_OT_ID); - GetMonData(&gPlayerParty[a], MON_DATA_NICKNAME, nickname); - StringCopy10(battlePokemon.nickname, nickname); - GetMonData(&gPlayerParty[a], MON_DATA_OT_NAME, battlePokemon.otName); - src = (u8 *)&battlePokemon; - for (size = 0; size < sizeof(battlePokemon); size++) - buffer[size] = src[size]; - break; - case 1: - data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPECIES); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 2: - data16 = GetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 3: - for (size = 0; size < 4; size++) - { - moveData.moves[size] = GetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + size); - moveData.pp[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size); - } - moveData.ppBonuses = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES); - src = (u8 *)&moveData; - for (size = 0; size < sizeof(moveData); size++) - buffer[size] = src[size]; - break; - case 4: - case 5: - case 6: - case 7: - data16 = GetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - 4); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 8: - for (size = 0; size < 4; size++) - buffer[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size); - buffer[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES); - size++; - break; - case 9: - case 10: - case 11: - case 12: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - 9); - size = 1; - break; - case 17: - data32 = GetMonData(&gPlayerParty[a], MON_DATA_OT_ID); - buffer[0] = (data32 & 0x000000FF); - buffer[1] = (data32 & 0x0000FF00) >> 8; - buffer[2] = (data32 & 0x00FF0000) >> 16; - size = 3; - break; - case 18: - data32 = GetMonData(&gPlayerParty[a], MON_DATA_EXP); - buffer[0] = (data32 & 0x000000FF); - buffer[1] = (data32 & 0x0000FF00) >> 8; - buffer[2] = (data32 & 0x00FF0000) >> 16; - size = 3; - break; - case 19: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_EV); - size = 1; - break; - case 20: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_EV); - size = 1; - break; - case 21: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_EV); - size = 1; - break; - case 22: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_EV); - size = 1; - break; - case 23: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_EV); - size = 1; - break; - case 24: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_EV); - size = 1; - break; - case 25: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP); - size = 1; - break; - case 26: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_POKERUS); - size = 1; - break; - case 27: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_MET_LOCATION); - size = 1; - break; - case 28: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_MET_LEVEL); - size = 1; - break; - case 29: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_MET_GAME); - size = 1; - break; - case 30: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_POKEBALL); - size = 1; - break; - case 31: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV); - buffer[1] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV); - buffer[2] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV); - buffer[3] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV); - buffer[4] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV); - buffer[5] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV); - size = 6; - break; - case 32: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV); - size = 1; - break; - case 33: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV); - size = 1; - break; - case 34: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV); - size = 1; - break; - case 35: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV); - size = 1; - break; - case 36: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV); - size = 1; - break; - case 37: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV); - size = 1; - break; - case 38: - data32 = GetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY); - buffer[0] = (data32 & 0x000000FF); - buffer[1] = (data32 & 0x0000FF00) >> 8; - buffer[2] = (data32 & 0x00FF0000) >> 16; - buffer[3] = (data32 & 0xFF000000) >> 24; - size = 4; - break; - case 39: - data16 = GetMonData(&gPlayerParty[a], MON_DATA_CHECKSUM); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 40: - data32 = GetMonData(&gPlayerParty[a], MON_DATA_STATUS); - buffer[0] = (data32 & 0x000000FF); - buffer[1] = (data32 & 0x0000FF00) >> 8; - buffer[2] = (data32 & 0x00FF0000) >> 16; - buffer[3] = (data32 & 0xFF000000) >> 24; - size = 4; - break; - case 41: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_LEVEL); - size = 1; - break; - case 42: - data16 = GetMonData(&gPlayerParty[a], MON_DATA_HP); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 43: - data16 = GetMonData(&gPlayerParty[a], MON_DATA_MAX_HP); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 44: - data16 = GetMonData(&gPlayerParty[a], MON_DATA_ATK); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 45: - data16 = GetMonData(&gPlayerParty[a], MON_DATA_DEF); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 46: - data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPD); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 47: - data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPATK); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 48: - data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 49: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_COOL); - size = 1; - break; - case 50: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_BEAUTY); - size = 1; - break; - case 51: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_CUTE); - size = 1; - break; - case 52: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SMART); - size = 1; - break; - case 53: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_TOUGH); - size = 1; - break; - case 54: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SHEEN); - size = 1; - break; - case 55: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_COOL_RIBBON); - size = 1; - break; - case 56: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_BEAUTY_RIBBON); - size = 1; - break; - case 57: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_CUTE_RIBBON); - size = 1; - break; - case 58: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SMART_RIBBON); - size = 1; - break; - case 59: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_TOUGH_RIBBON); - size = 1; - break; - } - return size; -} - -void sub_8138230(void) -{ - sub_802ECF0(); -} - -void sub_813823C(void) -{ - u8 r4; - u8 i; - - if (gBattleBufferA[gActiveBank][2] == 0) - { - sub_8138294(gBattlePartyID[gActiveBank]); - } - else - { - r4 = gBattleBufferA[gActiveBank][2]; - for (i = 0; i < 6; i++) - { - if (r4 & 1) - sub_8138294(i); - r4 >>= 1; - } - } - WallyBufferExecCompleted(); -} - -void sub_8138294(u8 a) -{ - struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBank][3]; - struct UnknownStruct3 *moveData = (struct UnknownStruct3 *)&gBattleBufferA[gActiveBank][3]; - s32 i; - - switch (gBattleBufferA[gActiveBank][1]) - { - case 0: - { - u8 iv; - - SetMonData(&gPlayerParty[a], MON_DATA_SPECIES, (u8 *)&battlePokemon->species); - SetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM, (u8 *)&battlePokemon->item); - for (i = 0; i < 4; i++) - { - SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + i, (u8 *)&battlePokemon->moves[i]); - SetMonData(&gPlayerParty[a], MON_DATA_PP1 + i, (u8 *)&battlePokemon->pp[i]); - } - SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, (u8 *)&battlePokemon->ppBonuses); - SetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP, (u8 *)&battlePokemon->friendship); - SetMonData(&gPlayerParty[a], MON_DATA_EXP, (u8 *)&battlePokemon->experience); - iv = battlePokemon->hpIV; - SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, (u8 *)&iv); - iv = battlePokemon->attackIV; - SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, (u8 *)&iv); - iv = battlePokemon->defenseIV; - SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, (u8 *)&iv); - iv = battlePokemon->speedIV; - SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, (u8 *)&iv); - iv = battlePokemon->spAttackIV; - SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, (u8 *)&iv); - iv = battlePokemon->spDefenseIV; - SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, (u8 *)&iv); - SetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY, (u8 *)&battlePokemon->personality); - SetMonData(&gPlayerParty[a], MON_DATA_STATUS, (u8 *)&battlePokemon->status1); - SetMonData(&gPlayerParty[a], MON_DATA_LEVEL, (u8 *)&battlePokemon->level); - SetMonData(&gPlayerParty[a], MON_DATA_HP, (u8 *)&battlePokemon->hp); - SetMonData(&gPlayerParty[a], MON_DATA_MAX_HP, (u8 *)&battlePokemon->maxHP); - SetMonData(&gPlayerParty[a], MON_DATA_ATK, (u8 *)&battlePokemon->attack); - SetMonData(&gPlayerParty[a], MON_DATA_DEF, (u8 *)&battlePokemon->defense); - SetMonData(&gPlayerParty[a], MON_DATA_SPD, (u8 *)&battlePokemon->speed); - SetMonData(&gPlayerParty[a], MON_DATA_SPATK, (u8 *)&battlePokemon->spAttack); - SetMonData(&gPlayerParty[a], MON_DATA_SPDEF, (u8 *)&battlePokemon->spDefense); - } - break; - case 1: - SetMonData(&gPlayerParty[a], MON_DATA_SPECIES, &gBattleBufferA[gActiveBank][3]); - break; - case 2: - SetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBank][3]); - break; - case 3: - for (i = 0; i < 4; i++) - { - SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + i, (u8 *)&moveData->moves[i]); - SetMonData(&gPlayerParty[a], MON_DATA_PP1 + i, (u8 *)&moveData->pp[i]); - } - SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, &moveData->ppBonuses); - break; - case 4: - case 5: - case 6: - case 7: - SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - 4, &gBattleBufferA[gActiveBank][3]); - break; - case 8: - SetMonData(&gPlayerParty[a], MON_DATA_PP1, &gBattleBufferA[gActiveBank][3]); - SetMonData(&gPlayerParty[a], MON_DATA_PP2, &gBattleBufferA[gActiveBank][4]); - SetMonData(&gPlayerParty[a], MON_DATA_PP3, &gBattleBufferA[gActiveBank][5]); - SetMonData(&gPlayerParty[a], MON_DATA_PP4, &gBattleBufferA[gActiveBank][6]); - SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBank][7]); - break; - case 9: - case 10: - case 11: - case 12: - SetMonData(&gPlayerParty[a], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - 9, &gBattleBufferA[gActiveBank][3]); - break; - case 17: - SetMonData(&gPlayerParty[a], MON_DATA_OT_ID, &gBattleBufferA[gActiveBank][3]); - break; - case 18: - SetMonData(&gPlayerParty[a], MON_DATA_EXP, &gBattleBufferA[gActiveBank][3]); - break; - case 19: - SetMonData(&gPlayerParty[a], MON_DATA_HP_EV, &gBattleBufferA[gActiveBank][3]); - break; - case 20: - SetMonData(&gPlayerParty[a], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBank][3]); - break; - case 21: - SetMonData(&gPlayerParty[a], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBank][3]); - break; - case 22: - SetMonData(&gPlayerParty[a], MON_DATA_SPD_EV, &gBattleBufferA[gActiveBank][3]); - break; - case 23: - SetMonData(&gPlayerParty[a], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBank][3]); - break; - case 24: - SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBank][3]); - break; - case 25: - SetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBank][3]); - break; - case 26: - SetMonData(&gPlayerParty[a], MON_DATA_POKERUS, &gBattleBufferA[gActiveBank][3]); - break; - case 27: - SetMonData(&gPlayerParty[a], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBank][3]); - break; - case 28: - SetMonData(&gPlayerParty[a], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBank][3]); - break; - case 29: - SetMonData(&gPlayerParty[a], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBank][3]); - break; - case 30: - SetMonData(&gPlayerParty[a], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBank][3]); - break; - case 31: - SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]); - SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][4]); - SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][5]); - SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][6]); - SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][7]); - SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][8]); - break; - case 32: - SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]); - break; - case 33: - SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][3]); - break; - case 34: - SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][3]); - break; - case 35: - SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][3]); - break; - case 36: - SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][3]); - break; - case 37: - SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][3]); - break; - case 38: - SetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBank][3]); - break; - case 39: - SetMonData(&gPlayerParty[a], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBank][3]); - break; - case 40: - SetMonData(&gPlayerParty[a], MON_DATA_STATUS, &gBattleBufferA[gActiveBank][3]); - break; - case 41: - SetMonData(&gPlayerParty[a], MON_DATA_LEVEL, &gBattleBufferA[gActiveBank][3]); - break; - case 42: - SetMonData(&gPlayerParty[a], MON_DATA_HP, &gBattleBufferA[gActiveBank][3]); - break; - case 43: - SetMonData(&gPlayerParty[a], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBank][3]); - break; - case 44: - SetMonData(&gPlayerParty[a], MON_DATA_ATK, &gBattleBufferA[gActiveBank][3]); - break; - case 45: - SetMonData(&gPlayerParty[a], MON_DATA_DEF, &gBattleBufferA[gActiveBank][3]); - break; - case 46: - SetMonData(&gPlayerParty[a], MON_DATA_SPD, &gBattleBufferA[gActiveBank][3]); - break; - case 47: - SetMonData(&gPlayerParty[a], MON_DATA_SPATK, &gBattleBufferA[gActiveBank][3]); - break; - case 48: - SetMonData(&gPlayerParty[a], MON_DATA_SPDEF, &gBattleBufferA[gActiveBank][3]); - break; - case 49: - SetMonData(&gPlayerParty[a], MON_DATA_COOL, &gBattleBufferA[gActiveBank][3]); - break; - case 50: - SetMonData(&gPlayerParty[a], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBank][3]); - break; - case 51: - SetMonData(&gPlayerParty[a], MON_DATA_CUTE, &gBattleBufferA[gActiveBank][3]); - break; - case 52: - SetMonData(&gPlayerParty[a], MON_DATA_SMART, &gBattleBufferA[gActiveBank][3]); - break; - case 53: - SetMonData(&gPlayerParty[a], MON_DATA_TOUGH, &gBattleBufferA[gActiveBank][3]); - break; - case 54: - SetMonData(&gPlayerParty[a], MON_DATA_SHEEN, &gBattleBufferA[gActiveBank][3]); - break; - case 55: - SetMonData(&gPlayerParty[a], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBank][3]); - break; - case 56: - SetMonData(&gPlayerParty[a], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBank][3]); - break; - case 57: - SetMonData(&gPlayerParty[a], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBank][3]); - break; - case 58: - SetMonData(&gPlayerParty[a], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBank][3]); - break; - case 59: - SetMonData(&gPlayerParty[a], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBank][3]); - break; - } - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); -} - -void sub_8138C90(void) -{ - WallyBufferExecCompleted(); -} - -void sub_8138C9C(void) -{ - WallyBufferExecCompleted(); -} - -void sub_8138CA8(void) -{ - WallyBufferExecCompleted(); -} - -void sub_8138CB4(void) -{ - if (gBattleBufferA[gActiveBank][1] == 0) - { - move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 1); - gBattleBankFunc[gActiveBank] = sub_813789C; - } - else - { - FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); - DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); - sub_8043DB0(gHealthboxIDs[gActiveBank]); - WallyBufferExecCompleted(); - } -} - -void sub_8138D38(void) -{ - LoadPlayerTrainerBankSprite(2, gActiveBank); - GetMonSpriteTemplate_803C5A0(2, GetBankIdentity(gActiveBank)); - gObjectBankIDs[gActiveBank] = CreateSprite( - &gUnknown_02024E8C, - 80, 80 + 4 * (8 - gTrainerBackPicCoords[2].coords), - 30); - gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank; - gSprites[gObjectBankIDs[gActiveBank]].pos2.x = 240; - gSprites[gObjectBankIDs[gActiveBank]].data0 = -2; - gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0; - gBattleBankFunc[gActiveBank] = sub_813741C; -} - -void sub_8138E04(void) -{ - LoadPlayerTrainerBankSprite(2, gActiveBank); - GetMonSpriteTemplate_803C5A0(2, GetBankIdentity(gActiveBank)); - gObjectBankIDs[gActiveBank] = CreateSprite( - &gUnknown_02024E8C, - 80, 80 + 4 * (8 - gTrainerBackPicCoords[2].coords), - 30); - gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank; - gSprites[gObjectBankIDs[gActiveBank]].pos2.x = -96; - gSprites[gObjectBankIDs[gActiveBank]].data0 = 2; - gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0; - gBattleBankFunc[gActiveBank] = sub_8137908; -} - -void sub_8138ED0(void) -{ - WallyBufferExecCompleted(); -} - -void sub_8138EDC(void) -{ - WallyBufferExecCompleted(); -} - -void sub_8138EE8(void) -{ - WallyBufferExecCompleted(); -} - -void sub_8138EF4(void) -{ - ewram17840.unk8 = 4; - gDoingBattleAnim = TRUE; - move_anim_start_t4(gActiveBank, gActiveBank, GetBankByPlayerAI(1), 4); - gBattleBankFunc[gActiveBank] = bx_wait_t5; -} - -void sub_8138F44(void) -{ - u8 val = gBattleBufferA[gActiveBank][1]; - - ewram17840.unk8 = val; - gDoingBattleAnim = TRUE; - move_anim_start_t4(gActiveBank, gActiveBank, GetBankByPlayerAI(1), 4); - gBattleBankFunc[gActiveBank] = bx_wait_t5; -} - -void sub_8138FA0(void) -{ - WallyBufferExecCompleted(); -} - -void sub_8138FAC(void) -{ - u16 r0 = gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8); - - gUnknown_0202F7C4 = gBattleBufferA[gActiveBank][3]; - gMovePowerMoveAnim = gBattleBufferA[gActiveBank][4] | (gBattleBufferA[gActiveBank][5] << 8); - gMoveDmgMoveAnim = gBattleBufferA[gActiveBank][6] | (gBattleBufferA[gActiveBank][7] << 8) | (gBattleBufferA[gActiveBank][8] << 16) | (gBattleBufferA[gActiveBank][9] << 24); - gHappinessMoveAnim = gBattleBufferA[gActiveBank][10]; - gWeatherMoveAnim = gBattleBufferA[gActiveBank][12] | (gBattleBufferA[gActiveBank][13] << 8); - gDisableStructMoveAnim = (u32 *)&gBattleBufferA[gActiveBank][16]; - gPID_perBank[gActiveBank] = *gDisableStructMoveAnim; - if (sub_8031720(r0, gUnknown_0202F7C4) != 0) - { - // Dead code. sub_8031720 always returns 0. - WallyBufferExecCompleted(); - } - else - { - ewram17810[gActiveBank].unk4 = 0; - gBattleBankFunc[gActiveBank] = sub_81390D0; - } -} - -void sub_81390D0(void) -{ - u16 r4 = gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8); - -#ifndef NONMATCHING - asm("":::"r6"); -#endif - - switch (ewram17810[gActiveBank].unk4) - { - case 0: - if (ewram17800[gActiveBank].substituteSprite == 1) - move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); - ewram17810[gActiveBank].unk4 = 1; - break; - case 1: - if (ewram17810[gActiveBank].unk0_6 == 0) - { - sub_80326EC(0); - ExecuteMoveAnim(r4); - ewram17810[gActiveBank].unk4 = 2; - } - break; - case 2: - gAnimScriptCallback(); - if (!gAnimScriptActive) - { - sub_80326EC(1); - if (ewram17800[gActiveBank].substituteSprite == 1) - move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); - ewram17810[gActiveBank].unk4 = 3; - } - break; - case 3: - if (ewram17810[gActiveBank].unk0_6 == 0) - { - sub_8031F24(); - sub_80324BC(gActiveBank, gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8)); - ewram17810[gActiveBank].unk4 = 0; - WallyBufferExecCompleted(); - } - break; - } -} - -void sub_8139208(void) -{ - u16 *ptr; - - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; - ptr = (u16 *)&gBattleBufferA[gActiveBank][2]; - if (*ptr == 2) - DestroyMenuCursor(); - BufferStringBattle(*ptr); - sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 0x90, 2, 15); - gBattleBankFunc[gActiveBank] = sub_8137454; -} - -void dp01t_11_5_message_for_player_only(void) -{ - if (GetBankSide(gActiveBank) == 0) - sub_8139208(); - else - WallyBufferExecCompleted(); -} - -void sub_8139298(void) -{ - s32 i; - - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 160; - gUnknown_03004210.paletteNum = 0; - FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 15, 27, 18); - FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 35, 16, 36); - gBattleBankFunc[gActiveBank] = sub_81372BC; - InitWindow(&gUnknown_03004210, gUnknown_08400CF3, 400, 18, 35); - sub_8002F44(&gUnknown_03004210); - sub_814A5C0(0, 0xFFFF, 12, 0x2D9F, 0); - for (i = 0; i < 4; i++) - nullsub_8(i); - sub_802E3E4(0, 0); - StrCpyDecodeToDisplayedStringBattle(gUnknown_08400CCC); -#ifdef ENGLISH - InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 440, 2, 35); -#else - InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 444, 2, 35); -#endif - sub_8002F44(&gUnknown_03004210); -} - -void sub_8139378(void) -{ - WallyBufferExecCompleted(); -} - -void sub_8139384(void) -{ - switch (ewram[0x160A9]) - { - case 0: - sub_80304A8(); - ewram[0x160A9]++; - ewram[0x160AB] = 80; - // fall through - case 1: - ewram[0x160AB]--; - if (ewram[0x160AB] == 0) - { - DestroyMenuCursor(); - PlaySE(SE_SELECT); - dp01_build_cmdbuf_x21_a_bb(1, 10, 256); - WallyBufferExecCompleted(); - } - break; - } -} - -void sub_81393EC(void) -{ - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - gBattleBankFunc[gActiveBank] = sub_81374C4; - gBankInMenu = gActiveBank; -} - -void sub_813942C(void) -{ - WallyBufferExecCompleted(); -} - -void sub_8139438(void) -{ - WallyBufferExecCompleted(); -} - -void sub_8139444(void) -{ - s16 r7; - - load_gfxc_health_bar(0); - r7 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); - if (r7 != 0x7FFF) - { - u32 maxHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP); - u32 curHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_HP); - - sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, curHP, r7); - } - else - { - u32 maxHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP); - - sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, 0, r7); - sub_80440EC(gHealthboxIDs[gActiveBank], 0, 0); - } - gBattleBankFunc[gActiveBank] = sub_81377B0; -} - -void sub_8139544(void) -{ - WallyBufferExecCompleted(); -} - -void sub_8139550(void) -{ - WallyBufferExecCompleted(); -} - -void sub_813955C(void) -{ - WallyBufferExecCompleted(); -} - -void sub_8139568(void) -{ - WallyBufferExecCompleted(); -} - -void sub_8139574(void) -{ - WallyBufferExecCompleted(); -} - -void sub_8139580(void) -{ - WallyBufferExecCompleted(); -} - -void sub_813958C(void) -{ - WallyBufferExecCompleted(); -} - -void sub_8139598(void) -{ - WallyBufferExecCompleted(); -} - -void sub_81395A4(void) -{ - WallyBufferExecCompleted(); -} - -void sub_81395B0(void) -{ - WallyBufferExecCompleted(); -} - -void sub_81395BC(void) -{ - WallyBufferExecCompleted(); -} - -void sub_81395C8(void) -{ - WallyBufferExecCompleted(); -} - -void sub_81395D4(void) -{ - WallyBufferExecCompleted(); -} - -void sub_81395E0(void) -{ - WallyBufferExecCompleted(); -} - -void sub_81395EC(void) -{ - WallyBufferExecCompleted(); -} - -void sub_81395F8(void) -{ - WallyBufferExecCompleted(); -} - -void sub_8139604(void) -{ - if (gSprites[gObjectBankIDs[gActiveBank]].invisible == TRUE) - { - WallyBufferExecCompleted(); - } - else - { - gDoingBattleAnim = 1; - gSprites[gObjectBankIDs[gActiveBank]].data1 = 0; - sub_8047858(gActiveBank); - gBattleBankFunc[gActiveBank] = bx_blink_t5; - } -} - -void sub_8139674(void) -{ - WallyBufferExecCompleted(); -} - -void sub_8139680(void) -{ - PlaySE(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8)); - WallyBufferExecCompleted(); -} - -void sub_81396B0(void) -{ - PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8)); - WallyBufferExecCompleted(); -} - -void sub_81396E0(void) -{ - PlayCry1(GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES), 25); - WallyBufferExecCompleted(); -} - -void dp01t_2E_5_battle_intro(void) -{ - sub_80E43C0(gBattleBufferA[gActiveBank][1]); - gUnknown_02024DE8 |= 1; - WallyBufferExecCompleted(); -} - -void sub_8139750(void) -{ - u8 paletteNum; - u8 taskId; - - oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]); - gSprites[gObjectBankIDs[gActiveBank]].data0 = 50; - gSprites[gObjectBankIDs[gActiveBank]].data2 = -40; - gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; - gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34; - gSprites[gObjectBankIDs[gActiveBank]].data5 = gActiveBank; - oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], sub_8030E38); - StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 1); - paletteNum = AllocSpritePalette(0xD6F8); - LoadCompressedPalette(gTrainerBackPicPaletteTable[2].data, 0x100 + paletteNum * 16, 32); - gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = paletteNum; - taskId = CreateTask(sub_8139A2C, 5); - gTasks[taskId].data[0] = gActiveBank; - if (ewram17810[gActiveBank].unk0_0) - gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0; - ewram17810[4].unk9 |= 1; - gBattleBankFunc[gActiveBank] = nullsub_91; -} - -void sub_81398BC(u8 bank) -{ - u16 species; - - ewram17800[bank].transformedSpecies = 0; - gBattlePartyID[bank] = gBattleBufferA[bank][1]; - species = GetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_SPECIES); - gUnknown_0300434C[bank] = CreateInvisibleSpriteWithCallback(sub_80312F0); - GetMonSpriteTemplate_803C56C(species, GetBankIdentity(bank)); - gObjectBankIDs[bank] = CreateSprite( - &gUnknown_02024E8C, - sub_8077ABC(bank, 2), - sub_8077F68(bank), - sub_8079E90(bank)); - gSprites[gUnknown_0300434C[bank]].data1 = gObjectBankIDs[bank]; - gSprites[gObjectBankIDs[bank]].data0 = bank; - gSprites[gObjectBankIDs[bank]].data2 = species; - gSprites[gObjectBankIDs[bank]].oam.paletteNum = bank; - StartSpriteAnim(&gSprites[gObjectBankIDs[bank]], gBattleMonForms[bank]); - gSprites[gObjectBankIDs[bank]].invisible = TRUE; - gSprites[gObjectBankIDs[bank]].callback = SpriteCallbackDummy; - gSprites[gUnknown_0300434C[bank]].data0 = sub_8046400(0, 0xFF); -} - -void sub_8139A2C(u8 taskId) -{ - if (gTasks[taskId].data[1] < 31) - { - gTasks[taskId].data[1]++; - } - else - { - u8 savedActiveBank = gActiveBank; - - gActiveBank = gTasks[taskId].data[0]; - gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; - sub_81398BC(gActiveBank); - gBattleBankFunc[gActiveBank] = sub_8137538; - gActiveBank = savedActiveBank; - DestroyTask(taskId); - } -} - -void sub_8139AA0(void) -{ - if (gBattleBufferA[gActiveBank][1] != 0 && GetBankSide(gActiveBank) == 0) - { - WallyBufferExecCompleted(); - } - else - { - ewram17810[gActiveBank].unk0_0 = 1; - gUnknown_02024E68[gActiveBank] = sub_8044804(gActiveBank, (struct BattleInterfaceStruct2 *)&gBattleBufferA[gActiveBank][4], gBattleBufferA[gActiveBank][1], gBattleBufferA[gActiveBank][2]); - WallyBufferExecCompleted(); - } -} - -void sub_8139B20(void) -{ - WallyBufferExecCompleted(); -} - -void sub_8139B2C(void) -{ - WallyBufferExecCompleted(); -} - -void sub_8139B38(void) -{ - WallyBufferExecCompleted(); -} - -void sub_8139B44(void) -{ - u8 val2 = gBattleBufferA[gActiveBank][1]; - u16 val = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); - - if (move_anim_start_t3(gActiveBank, gActiveBank, gActiveBank, val2, val)) - WallyBufferExecCompleted(); - else - gBattleBankFunc[gActiveBank] = sub_8137940; -} - -void sub_8139BA0(void) -{ - WallyBufferExecCompleted(); -} - -void sub_8139BAC(void) -{ - WallyBufferExecCompleted(); -} - -void sub_8139BB8(void) -{ - gBattleOutcome = gBattleBufferA[gActiveBank][1]; - FadeOutMapMusic(5); - BeginFastPaletteFade(3); - WallyBufferExecCompleted(); - if ((gBattleTypeFlags & BATTLE_TYPE_LINK) && !(gBattleTypeFlags & BATTLE_TYPE_WILD)) - gBattleBankFunc[gActiveBank] = sub_813746C; -} - -void nullsub_80(void) -{ -} diff --git a/src/battle_controller_linkopponent2.c b/src/battle_controller_linkopponent2.c new file mode 100644 index 000000000..57932131b --- /dev/null +++ b/src/battle_controller_linkopponent2.c @@ -0,0 +1,1449 @@ +#include "global.h" +#include "battle.h" +#include "battle_interface.h" +#include "data2.h" +#include "link.h" +#include "palette.h" +#include "rom_8077ABC.h" +#include "rom3.h" +#include "songs.h" +#include "sound.h" +#include "sprite.h" +#include "string_util.h" +#include "task.h" +#include "text.h" +#include "util.h" + +struct UnknownStruct3 +{ + u16 moves[4]; + u8 pp[4]; + u8 ppBonuses; +}; + +extern u8 gActiveBank; +extern u8 gBattleBufferA[][0x200]; +extern u8 gObjectBankIDs[]; +extern u16 gBattlePartyID[]; +extern u8 gHealthboxIDs[]; +extern u16 gBattleTypeFlags; +extern u8 gBattleMonForms[]; +extern void (*gBattleBankFunc[])(void); +extern u32 *gDisableStructMoveAnim; +extern u32 gMoveDmgMoveAnim; +extern u16 gMovePowerMoveAnim; +extern u8 gHappinessMoveAnim; +extern u16 gWeatherMoveAnim; +extern u32 gPID_perBank[]; +extern u8 gAnimScriptActive; +extern void (*gAnimScriptCallback)(void); +extern u8 gDisplayedStringBattle[]; +extern bool8 gDoingBattleAnim; +extern u8 gBattleOutcome; +extern u16 gUnknown_02024DE8; +extern u8 gUnknown_02024E68[]; +extern struct SpriteTemplate gUnknown_02024E8C; +extern u8 gUnknown_0202F7C4; +extern struct Window gUnknown_03004210; +extern u16 gUnknown_030042A0; +extern u16 gUnknown_030042A4; +extern u8 gUnknown_0300434C[]; + +extern u8 sub_8077F68(); +extern u8 sub_8079E90(); +extern u8 GetBankIdentity(u8); +extern void sub_8031794(struct Pokemon *, u8); +extern void sub_8037A74(void); +extern void sub_8032984(u8, u16); +extern void sub_8037E30(void); +extern void sub_80312F0(struct Sprite *); +extern u8 sub_8046400(); +extern void sub_8032A08(); +extern void sub_8043DB0(); +extern void sub_8037BBC(void); +extern s32 sub_803FC34(u16); +extern void sub_8031A6C(u16, u8); +extern void sub_80313A0(struct Sprite *); +extern void sub_803757C(void); +extern void oamt_add_pos2_onto_pos1(); +extern void oamt_set_x3A_32(); +extern void sub_8078B34(struct Sprite *); +extern void sub_80375B4(void); +extern void sub_8010384(struct Sprite *); +extern void sub_8037B78(void); +extern u8 sub_8031720(); +extern bool8 mplay_80342A4(u8); +extern void ExecuteMoveAnim(); +extern void sub_80326EC(); +extern void sub_8031F24(void); +extern void sub_80324BC(); +extern void BufferStringBattle(); +extern void sub_8037C2C(void); +extern void sub_8043D84(); +extern void sub_8037B24(void); +extern void sub_8045A5C(); +extern void sub_8037FAC(void); +extern void move_anim_start_t2_for_situation(); +extern void dp01t_0F_4_move_anim(void); +extern void sub_8047858(); +extern u8 GetBankSide(u8); +extern void sub_80E43C0(); +extern void sub_803A3A8(struct Sprite *); +extern void sub_8044CA0(u8); +extern void nullsub_47(void); +extern bool8 IsDoubleBattle(void); +extern void sub_8037840(void); +extern void sub_8031B74(); +extern u8 sub_8078874(); +extern u8 move_anim_start_t3(); +extern void sub_8037FD8(void); +extern void sub_8037F34(void); +extern void LinkOpponentBufferExecCompleted(void); + +// this file's functions + +u32 dp01_getattr_by_ch1_for_player_pokemon__(u8, u8 *); +void sub_8038900(u8); +void sub_8039430(u8, u8); +void sub_8039648(void); +void sub_8039B64(void); +void sub_803A2C4(u8); +void sub_803A4E0(void); + +void LinkOpponentHandleGetAttributes(void); +void LinkOpponentHandlecmd1(void); +void LinkOpponentHandleSetAttributes(void); +void LinkOpponentHandlecmd3(void); +void LinkOpponentHandleLoadPokeSprite(void); +void LinkOpponentHandleSendOutPoke(void); +void LinkOpponentHandleReturnPokeToBall(void); +void LinkOpponentHandleTrainerThrow(void); +void LinkOpponentHandleTrainerSlide(void); +void LinkOpponentHandleTrainerSlideBack(void); +void LinkOpponentHandlecmd10(void); +void LinkOpponentHandlecmd11(void); +void LinkOpponentHandlecmd12(void); +void LinkOpponentHandleBallThrow(void); +void LinkOpponentHandlePuase(void); +void LinkOpponentHandleMoveAnimation(void); +void LinkOpponentHandlePrintString(void); +void LinkOpponentHandlePrintStringPlayerOnly(void); +void LinkOpponentHandlecmd18(void); +void LinkOpponentHandlecmd19(void); +void LinkOpponentHandlecmd20(void); +void LinkOpponentHandleOpenBag(void); +void LinkOpponentHandlecmd22(void); +void LinkOpponentHandlecmd23(void); +void LinkOpponentHandleHealthBarUpdate(void); +void LinkOpponentHandleExpBarUpdate(void); +void LinkOpponentHandleStatusIconUpdate(void); +void LinkOpponentHandleStatusAnimation(void); +void LinkOpponentHandleStatusXor(void); +void LinkOpponentHandlecmd29(void); +void LinkOpponentHandleDMATransfer(void); +void LinkOpponentHandlecmd31(void); +void LinkOpponentHandlecmd32(void); +void LinkOpponentHandlecmd33(void); +void LinkOpponentHandlecmd34(void); +void LinkOpponentHandlecmd35(void); +void LinkOpponentHandlecmd36(void); +void LinkOpponentHandlecmd37(void); +void LinkOpponentHandlecmd38(void); +void LinkOpponentHandlecmd39(void); +void LinkOpponentHandlecmd40(void); +void LinkOpponentHandleHitAnimation(void); +void LinkOpponentHandlecmd42(void); +void LinkOpponentHandleEffectivenessSound(void); +void LinkOpponentHandlecmd44(void); +void LinkOpponentHandleFaintingCry(void); +void LinkOpponentHandleIntroSlide(void); +void LinkOpponentHandleTrainerBallThrow(void); +void LinkOpponentHandlecmd48(void); +void LinkOpponentHandlecmd49(void); +void LinkOpponentHandlecmd50(void); +void LinkOpponentHandleSpriteInvisibility(void); +void LinkOpponentHandleBattleAnimation(void); +void LinkOpponentHandleLinkStandbyMsg(void); +void LinkOpponentHandleResetActionMoveSelection(void); +void LinkOpponentHandlecmd55(void); +void LinkOpponentHandlecmd56(void); + +// const data + +typedef void (*BattleBufferCmd) (void); +const BattleBufferCmd gLinkOpponentBufferCommands[] = +{ + LinkOpponentHandleGetAttributes, + LinkOpponentHandlecmd1, + LinkOpponentHandleSetAttributes, + LinkOpponentHandlecmd3, + LinkOpponentHandleLoadPokeSprite, + LinkOpponentHandleSendOutPoke, + LinkOpponentHandleReturnPokeToBall, + LinkOpponentHandleTrainerThrow, + LinkOpponentHandleTrainerSlide, + LinkOpponentHandleTrainerSlideBack, + LinkOpponentHandlecmd10, + LinkOpponentHandlecmd11, + LinkOpponentHandlecmd12, + LinkOpponentHandleBallThrow, + LinkOpponentHandlePuase, + LinkOpponentHandleMoveAnimation, + LinkOpponentHandlePrintString, + LinkOpponentHandlePrintStringPlayerOnly, + LinkOpponentHandlecmd18, + LinkOpponentHandlecmd19, + LinkOpponentHandlecmd20, + LinkOpponentHandleOpenBag, + LinkOpponentHandlecmd22, + LinkOpponentHandlecmd23, + LinkOpponentHandleHealthBarUpdate, + LinkOpponentHandleExpBarUpdate, + LinkOpponentHandleStatusIconUpdate, + LinkOpponentHandleStatusAnimation, + LinkOpponentHandleStatusXor, + LinkOpponentHandlecmd29, + LinkOpponentHandleDMATransfer, + LinkOpponentHandlecmd31, + LinkOpponentHandlecmd32, + LinkOpponentHandlecmd33, + LinkOpponentHandlecmd34, + LinkOpponentHandlecmd35, + LinkOpponentHandlecmd36, + LinkOpponentHandlecmd37, + LinkOpponentHandlecmd38, + LinkOpponentHandlecmd39, + LinkOpponentHandlecmd40, + LinkOpponentHandleHitAnimation, + LinkOpponentHandlecmd42, + LinkOpponentHandleEffectivenessSound, + LinkOpponentHandlecmd44, + LinkOpponentHandleFaintingCry, + LinkOpponentHandleIntroSlide, + LinkOpponentHandleTrainerBallThrow, + LinkOpponentHandlecmd48, + LinkOpponentHandlecmd49, + LinkOpponentHandlecmd50, + LinkOpponentHandleSpriteInvisibility, + LinkOpponentHandleBattleAnimation, + LinkOpponentHandleLinkStandbyMsg, + LinkOpponentHandleResetActionMoveSelection, + LinkOpponentHandlecmd55, + LinkOpponentHandlecmd56 +}; + +// code + +void LinkOpponentHandleGetAttributes(void) +{ + u8 buffer[0x100]; + u32 r6 = 0; + u8 r4; + s32 i; + + if (gBattleBufferA[gActiveBank][2] == 0) + { + r6 = dp01_getattr_by_ch1_for_player_pokemon__(gBattlePartyID[gActiveBank], buffer); + } + else + { + r4 = gBattleBufferA[gActiveBank][2]; + for (i = 0; i < 6; i++) + { + if (r4 & 1) + r6 += dp01_getattr_by_ch1_for_player_pokemon__(i, buffer + r6); + r4 >>= 1; + } + } + Emitcmd29(1, r6, buffer); + LinkOpponentBufferExecCompleted(); +} + +u32 dp01_getattr_by_ch1_for_player_pokemon__(u8 a, u8 *buffer) +{ + struct BattlePokemon battlePokemon; + struct UnknownStruct3 moveData; + u8 nickname[20]; + u8 *src; + s16 data16; + u32 data32; + s32 size = 0; + + switch (gBattleBufferA[gActiveBank][1]) + { + case 0: + battlePokemon.species = GetMonData(&gEnemyParty[a], MON_DATA_SPECIES); + battlePokemon.item = GetMonData(&gEnemyParty[a], MON_DATA_HELD_ITEM); + for (size = 0; size < 4; size++) + { + battlePokemon.moves[size] = GetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + size); + battlePokemon.pp[size] = GetMonData(&gEnemyParty[a], MON_DATA_PP1 + size); + } + battlePokemon.ppBonuses = GetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES); + battlePokemon.friendship = GetMonData(&gEnemyParty[a], MON_DATA_FRIENDSHIP); + battlePokemon.experience = GetMonData(&gEnemyParty[a], MON_DATA_EXP); + battlePokemon.hpIV = GetMonData(&gEnemyParty[a], MON_DATA_HP_IV); + battlePokemon.attackIV = GetMonData(&gEnemyParty[a], MON_DATA_ATK_IV); + battlePokemon.defenseIV = GetMonData(&gEnemyParty[a], MON_DATA_DEF_IV); + battlePokemon.speedIV = GetMonData(&gEnemyParty[a], MON_DATA_SPD_IV); + battlePokemon.spAttackIV = GetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV); + battlePokemon.spDefenseIV = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV); + battlePokemon.personality = GetMonData(&gEnemyParty[a], MON_DATA_PERSONALITY); + battlePokemon.status1 = GetMonData(&gEnemyParty[a], MON_DATA_STATUS); + battlePokemon.level = GetMonData(&gEnemyParty[a], MON_DATA_LEVEL); + battlePokemon.hp = GetMonData(&gEnemyParty[a], MON_DATA_HP); + battlePokemon.maxHP = GetMonData(&gEnemyParty[a], MON_DATA_MAX_HP); + battlePokemon.attack = GetMonData(&gEnemyParty[a], MON_DATA_ATK); + battlePokemon.defense = GetMonData(&gEnemyParty[a], MON_DATA_DEF); + battlePokemon.speed = GetMonData(&gEnemyParty[a], MON_DATA_SPD); + battlePokemon.spAttack = GetMonData(&gEnemyParty[a], MON_DATA_SPATK); + battlePokemon.spDefense = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF); + battlePokemon.isEgg = GetMonData(&gEnemyParty[a], MON_DATA_IS_EGG); + battlePokemon.altAbility = GetMonData(&gEnemyParty[a], MON_DATA_ALT_ABILITY); + battlePokemon.otId = GetMonData(&gEnemyParty[a], MON_DATA_OT_ID); + GetMonData(&gEnemyParty[a], MON_DATA_NICKNAME, nickname); + StringCopy10(battlePokemon.nickname, nickname); + GetMonData(&gEnemyParty[a], MON_DATA_OT_NAME, battlePokemon.otName); + src = (u8 *)&battlePokemon; + for (size = 0; size < sizeof(battlePokemon); size++) + buffer[size] = src[size]; + break; + case 1: + data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPECIES); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 2: + data16 = GetMonData(&gEnemyParty[a], MON_DATA_HELD_ITEM); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 3: + for (size = 0; size < 4; size++) + { + moveData.moves[size] = GetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + size); + moveData.pp[size] = GetMonData(&gEnemyParty[a], MON_DATA_PP1 + size); + } + moveData.ppBonuses = GetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES); + src = (u8 *)&moveData; + for (size = 0; size < sizeof(moveData); size++) + buffer[size] = src[size]; + break; + case 4: + case 5: + case 6: + case 7: + data16 = GetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - 4); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 8: + for (size = 0; size < 4; size++) + buffer[size] = GetMonData(&gEnemyParty[a], MON_DATA_PP1 + size); + buffer[size] = GetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES); + size++; + break; + case 9: + case 10: + case 11: + case 12: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - 9); + size = 1; + break; + case 17: + data32 = GetMonData(&gEnemyParty[a], MON_DATA_OT_ID); + buffer[0] = (data32 & 0x000000FF); + buffer[1] = (data32 & 0x0000FF00) >> 8; + buffer[2] = (data32 & 0x00FF0000) >> 16; + size = 3; + break; + case 18: + data32 = GetMonData(&gEnemyParty[a], MON_DATA_EXP); + buffer[0] = (data32 & 0x000000FF); + buffer[1] = (data32 & 0x0000FF00) >> 8; + buffer[2] = (data32 & 0x00FF0000) >> 16; + size = 3; + break; + case 19: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_HP_EV); + size = 1; + break; + case 20: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_ATK_EV); + size = 1; + break; + case 21: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_DEF_EV); + size = 1; + break; + case 22: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPD_EV); + size = 1; + break; + case 23: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPATK_EV); + size = 1; + break; + case 24: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF_EV); + size = 1; + break; + case 25: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_FRIENDSHIP); + size = 1; + break; + case 26: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_POKERUS); + size = 1; + break; + case 27: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_MET_LOCATION); + size = 1; + break; + case 28: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_MET_LEVEL); + size = 1; + break; + case 29: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_MET_GAME); + size = 1; + break; + case 30: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_POKEBALL); + size = 1; + break; + case 31: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_HP_IV); + buffer[1] = GetMonData(&gEnemyParty[a], MON_DATA_ATK_IV); + buffer[2] = GetMonData(&gEnemyParty[a], MON_DATA_DEF_IV); + buffer[3] = GetMonData(&gEnemyParty[a], MON_DATA_SPD_IV); + buffer[4] = GetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV); + buffer[5] = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV); + size = 6; + break; + case 32: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_HP_IV); + size = 1; + break; + case 33: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_ATK_IV); + size = 1; + break; + case 34: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_DEF_IV); + size = 1; + break; + case 35: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPD_IV); + size = 1; + break; + case 36: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV); + size = 1; + break; + case 37: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV); + size = 1; + break; + case 38: + data32 = GetMonData(&gEnemyParty[a], MON_DATA_PERSONALITY); + buffer[0] = (data32 & 0x000000FF); + buffer[1] = (data32 & 0x0000FF00) >> 8; + buffer[2] = (data32 & 0x00FF0000) >> 16; + buffer[3] = (data32 & 0xFF000000) >> 24; + size = 4; + break; + case 39: + data16 = GetMonData(&gEnemyParty[a], MON_DATA_CHECKSUM); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 40: + data32 = GetMonData(&gEnemyParty[a], MON_DATA_STATUS); + buffer[0] = (data32 & 0x000000FF); + buffer[1] = (data32 & 0x0000FF00) >> 8; + buffer[2] = (data32 & 0x00FF0000) >> 16; + buffer[3] = (data32 & 0xFF000000) >> 24; + size = 4; + break; + case 41: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_LEVEL); + size = 1; + break; + case 42: + data16 = GetMonData(&gEnemyParty[a], MON_DATA_HP); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 43: + data16 = GetMonData(&gEnemyParty[a], MON_DATA_MAX_HP); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 44: + data16 = GetMonData(&gEnemyParty[a], MON_DATA_ATK); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 45: + data16 = GetMonData(&gEnemyParty[a], MON_DATA_DEF); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 46: + data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPD); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 47: + data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPATK); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 48: + data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 49: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_COOL); + size = 1; + break; + case 50: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_BEAUTY); + size = 1; + break; + case 51: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_CUTE); + size = 1; + break; + case 52: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SMART); + size = 1; + break; + case 53: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_TOUGH); + size = 1; + break; + case 54: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SHEEN); + size = 1; + break; + case 55: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_COOL_RIBBON); + size = 1; + break; + case 56: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_BEAUTY_RIBBON); + size = 1; + break; + case 57: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_CUTE_RIBBON); + size = 1; + break; + case 58: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SMART_RIBBON); + size = 1; + break; + case 59: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_TOUGH_RIBBON); + size = 1; + break; + } + return size; +} + +void LinkOpponentHandlecmd1(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandleSetAttributes(void) +{ + u8 i; + u8 r4; + + if (gBattleBufferA[gActiveBank][2] == 0) + { + sub_8038900(gBattlePartyID[gActiveBank]); + } + else + { + r4 = gBattleBufferA[gActiveBank][2]; + for (i = 0; i < 6; i++) + { + if (r4 & 1) + sub_8038900(i); + r4 >>= 1; + } + } + LinkOpponentBufferExecCompleted(); +} + +void sub_8038900(u8 a) +{ + struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBank][3]; + struct UnknownStruct3 *moveData = (struct UnknownStruct3 *)&gBattleBufferA[gActiveBank][3]; + s32 i; + + switch (gBattleBufferA[gActiveBank][1]) + { + case 0: + { + u8 iv; + + SetMonData(&gEnemyParty[a], MON_DATA_SPECIES, (u8 *)&battlePokemon->species); + SetMonData(&gEnemyParty[a], MON_DATA_HELD_ITEM, (u8 *)&battlePokemon->item); + for (i = 0; i < 4; i++) + { + SetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + i, (u8 *)&battlePokemon->moves[i]); + SetMonData(&gEnemyParty[a], MON_DATA_PP1 + i, (u8 *)&battlePokemon->pp[i]); + } + SetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES, (u8 *)&battlePokemon->ppBonuses); + SetMonData(&gEnemyParty[a], MON_DATA_FRIENDSHIP, (u8 *)&battlePokemon->friendship); + SetMonData(&gEnemyParty[a], MON_DATA_EXP, (u8 *)&battlePokemon->experience); + iv = battlePokemon->hpIV; + SetMonData(&gEnemyParty[a], MON_DATA_HP_IV, (u8 *)&iv); + iv = battlePokemon->attackIV; + SetMonData(&gEnemyParty[a], MON_DATA_ATK_IV, (u8 *)&iv); + iv = battlePokemon->defenseIV; + SetMonData(&gEnemyParty[a], MON_DATA_DEF_IV, (u8 *)&iv); + iv = battlePokemon->speedIV; + SetMonData(&gEnemyParty[a], MON_DATA_SPD_IV, (u8 *)&iv); + iv = battlePokemon->spAttackIV; + SetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV, (u8 *)&iv); + iv = battlePokemon->spDefenseIV; + SetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV, (u8 *)&iv); + SetMonData(&gEnemyParty[a], MON_DATA_PERSONALITY, (u8 *)&battlePokemon->personality); + SetMonData(&gEnemyParty[a], MON_DATA_STATUS, (u8 *)&battlePokemon->status1); + SetMonData(&gEnemyParty[a], MON_DATA_LEVEL, (u8 *)&battlePokemon->level); + SetMonData(&gEnemyParty[a], MON_DATA_HP, (u8 *)&battlePokemon->hp); + SetMonData(&gEnemyParty[a], MON_DATA_MAX_HP, (u8 *)&battlePokemon->maxHP); + SetMonData(&gEnemyParty[a], MON_DATA_ATK, (u8 *)&battlePokemon->attack); + SetMonData(&gEnemyParty[a], MON_DATA_DEF, (u8 *)&battlePokemon->defense); + SetMonData(&gEnemyParty[a], MON_DATA_SPD, (u8 *)&battlePokemon->speed); + SetMonData(&gEnemyParty[a], MON_DATA_SPATK, (u8 *)&battlePokemon->spAttack); + SetMonData(&gEnemyParty[a], MON_DATA_SPDEF, (u8 *)&battlePokemon->spDefense); + } + break; + case 1: + SetMonData(&gEnemyParty[a], MON_DATA_SPECIES, &gBattleBufferA[gActiveBank][3]); + break; + case 2: + SetMonData(&gEnemyParty[a], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBank][3]); + break; + case 3: + for (i = 0; i < 4; i++) + { + SetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + i, (u8 *)&moveData->moves[i]); + SetMonData(&gEnemyParty[a], MON_DATA_PP1 + i, (u8 *)&moveData->pp[i]); + } + SetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES, &moveData->ppBonuses); + break; + case 4: + case 5: + case 6: + case 7: + SetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - 4, &gBattleBufferA[gActiveBank][3]); + break; + case 8: + SetMonData(&gEnemyParty[a], MON_DATA_PP1, &gBattleBufferA[gActiveBank][3]); + SetMonData(&gEnemyParty[a], MON_DATA_PP2, &gBattleBufferA[gActiveBank][4]); + SetMonData(&gEnemyParty[a], MON_DATA_PP3, &gBattleBufferA[gActiveBank][5]); + SetMonData(&gEnemyParty[a], MON_DATA_PP4, &gBattleBufferA[gActiveBank][6]); + SetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBank][7]); + break; + case 9: + case 10: + case 11: + case 12: + SetMonData(&gEnemyParty[a], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - 9, &gBattleBufferA[gActiveBank][3]); + break; + case 17: + SetMonData(&gEnemyParty[a], MON_DATA_OT_ID, &gBattleBufferA[gActiveBank][3]); + break; + case 18: + SetMonData(&gEnemyParty[a], MON_DATA_EXP, &gBattleBufferA[gActiveBank][3]); + break; + case 19: + SetMonData(&gEnemyParty[a], MON_DATA_HP_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 20: + SetMonData(&gEnemyParty[a], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 21: + SetMonData(&gEnemyParty[a], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 22: + SetMonData(&gEnemyParty[a], MON_DATA_SPD_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 23: + SetMonData(&gEnemyParty[a], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 24: + SetMonData(&gEnemyParty[a], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 25: + SetMonData(&gEnemyParty[a], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBank][3]); + break; + case 26: + SetMonData(&gEnemyParty[a], MON_DATA_POKERUS, &gBattleBufferA[gActiveBank][3]); + break; + case 27: + SetMonData(&gEnemyParty[a], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBank][3]); + break; + case 28: + SetMonData(&gEnemyParty[a], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBank][3]); + break; + case 29: + SetMonData(&gEnemyParty[a], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBank][3]); + break; + case 30: + SetMonData(&gEnemyParty[a], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBank][3]); + break; + case 31: + SetMonData(&gEnemyParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]); + SetMonData(&gEnemyParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][4]); + SetMonData(&gEnemyParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][5]); + SetMonData(&gEnemyParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][6]); + SetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][7]); + SetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][8]); + break; + case 32: + SetMonData(&gEnemyParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 33: + SetMonData(&gEnemyParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 34: + SetMonData(&gEnemyParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 35: + SetMonData(&gEnemyParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 36: + SetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 37: + SetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 38: + SetMonData(&gEnemyParty[a], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBank][3]); + break; + case 39: + SetMonData(&gEnemyParty[a], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBank][3]); + break; + case 40: + SetMonData(&gEnemyParty[a], MON_DATA_STATUS, &gBattleBufferA[gActiveBank][3]); + break; + case 41: + SetMonData(&gEnemyParty[a], MON_DATA_LEVEL, &gBattleBufferA[gActiveBank][3]); + break; + case 42: + SetMonData(&gEnemyParty[a], MON_DATA_HP, &gBattleBufferA[gActiveBank][3]); + break; + case 43: + SetMonData(&gEnemyParty[a], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBank][3]); + break; + case 44: + SetMonData(&gEnemyParty[a], MON_DATA_ATK, &gBattleBufferA[gActiveBank][3]); + break; + case 45: + SetMonData(&gEnemyParty[a], MON_DATA_DEF, &gBattleBufferA[gActiveBank][3]); + break; + case 46: + SetMonData(&gEnemyParty[a], MON_DATA_SPD, &gBattleBufferA[gActiveBank][3]); + break; + case 47: + SetMonData(&gEnemyParty[a], MON_DATA_SPATK, &gBattleBufferA[gActiveBank][3]); + break; + case 48: + SetMonData(&gEnemyParty[a], MON_DATA_SPDEF, &gBattleBufferA[gActiveBank][3]); + break; + case 49: + SetMonData(&gEnemyParty[a], MON_DATA_COOL, &gBattleBufferA[gActiveBank][3]); + break; + case 50: + SetMonData(&gEnemyParty[a], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBank][3]); + break; + case 51: + SetMonData(&gEnemyParty[a], MON_DATA_CUTE, &gBattleBufferA[gActiveBank][3]); + break; + case 52: + SetMonData(&gEnemyParty[a], MON_DATA_SMART, &gBattleBufferA[gActiveBank][3]); + break; + case 53: + SetMonData(&gEnemyParty[a], MON_DATA_TOUGH, &gBattleBufferA[gActiveBank][3]); + break; + case 54: + SetMonData(&gEnemyParty[a], MON_DATA_SHEEN, &gBattleBufferA[gActiveBank][3]); + break; + case 55: + SetMonData(&gEnemyParty[a], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBank][3]); + break; + case 56: + SetMonData(&gEnemyParty[a], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBank][3]); + break; + case 57: + SetMonData(&gEnemyParty[a], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBank][3]); + break; + case 58: + SetMonData(&gEnemyParty[a], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBank][3]); + break; + case 59: + SetMonData(&gEnemyParty[a], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBank][3]); + break; + } +} + +void LinkOpponentHandlecmd3(void) +{ + u8 *dst; + u8 i; + + dst = (u8 *)&gEnemyParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1]; + for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++) + dst[i] = gBattleBufferA[gActiveBank][3 + i]; + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandleLoadPokeSprite(void) +{ + u16 species = GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES); + + sub_8031794(&gEnemyParty[gBattlePartyID[gActiveBank]], gActiveBank); + GetMonSpriteTemplate_803C56C(species, GetBankIdentity(gActiveBank)); + gObjectBankIDs[gActiveBank] = CreateSprite( + &gUnknown_02024E8C, + sub_8077ABC(gActiveBank, 2), + sub_8077F68(gActiveBank), + sub_8079E90(gActiveBank)); + gSprites[gObjectBankIDs[gActiveBank]].pos2.x = -240; + gSprites[gObjectBankIDs[gActiveBank]].data0 = gActiveBank; + gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank; + StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], gBattleMonForms[gActiveBank]); + sub_8032984(gActiveBank, GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES)); + gBattleBankFunc[gActiveBank] = sub_8037A74; +} + +void LinkOpponentHandleSendOutPoke(void) +{ + gBattlePartyID[gActiveBank] = gBattleBufferA[gActiveBank][1]; + sub_8039430(gActiveBank, gBattleBufferA[gActiveBank][2]); + gBattleBankFunc[gActiveBank] = sub_8037E30; +} + +void sub_8039430(u8 a, u8 b) +{ + u16 species; + + sub_8032AA8(a, b); + gBattlePartyID[a] = gBattleBufferA[a][1]; + species = GetMonData(&gEnemyParty[gBattlePartyID[a]], MON_DATA_SPECIES); + gUnknown_0300434C[a] = CreateInvisibleSpriteWithCallback(sub_80312F0); + sub_8031794(&gEnemyParty[gBattlePartyID[a]], a); + GetMonSpriteTemplate_803C56C(species, GetBankIdentity(a)); + gObjectBankIDs[a] = CreateSprite( + &gUnknown_02024E8C, + sub_8077ABC(a, 2), + sub_8077F68(a), + sub_8079E90(a)); + gSprites[gUnknown_0300434C[a]].data1 = gObjectBankIDs[a]; + gSprites[gObjectBankIDs[a]].data0 = a; + gSprites[gObjectBankIDs[a]].data2 = species; + gSprites[gObjectBankIDs[a]].oam.paletteNum = a; + StartSpriteAnim(&gSprites[gObjectBankIDs[a]], gBattleMonForms[a]); + gSprites[gObjectBankIDs[a]].invisible = TRUE; + gSprites[gObjectBankIDs[a]].callback = SpriteCallbackDummy; + gSprites[gUnknown_0300434C[a]].data0 = sub_8046400(0, 0xFE); +} + +void LinkOpponentHandleReturnPokeToBall(void) +{ + if (gBattleBufferA[gActiveBank][1] == 0) + { + ewram17810[gActiveBank].unk4 = 0; + gBattleBankFunc[gActiveBank] = sub_8039648; + } + else + { + FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); + DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); + sub_8032A08(gActiveBank); + sub_8043DB0(gHealthboxIDs[gActiveBank]); + LinkOpponentBufferExecCompleted(); + } +} + +void sub_8039648(void) +{ + switch (ewram17810[gActiveBank].unk4) + { + case 0: + if (ewram17800[gActiveBank].unk0_2) + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); + ewram17810[gActiveBank].unk4 = 1; + break; + case 1: + if (!ewram17810[gActiveBank].unk0_6) + { + ewram17810[gActiveBank].unk4 = 0; + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 2); + gBattleBankFunc[gActiveBank] = sub_8037BBC; + } + break; + } +} + +void LinkOpponentHandleTrainerThrow(void) +{ + s16 xOffset; + u32 gender; + + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + if (GetBankIdentity(gActiveBank) & 2) + xOffset = -16; + else + xOffset = 16; + gender = gLinkPlayers[sub_803FC34(gActiveBank)].gender; + } + else + { + xOffset = 0; + gender = gLinkPlayers[GetMultiplayerId() ^ 1].gender; + } + sub_8031A6C(gender, gActiveBank); + GetMonSpriteTemplate_803C5A0(gender, GetBankIdentity(gActiveBank)); + gObjectBankIDs[gActiveBank] = CreateSprite( + &gUnknown_02024E8C, + 176 + xOffset, 40 + 4 * (8 - gTrainerFrontPicCoords[gender].coords), + sub_8079E90(gActiveBank)); + gSprites[gObjectBankIDs[gActiveBank]].pos2.x = -240; + gSprites[gObjectBankIDs[gActiveBank]].data0 = 2; + gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[gender].tag); + gSprites[gObjectBankIDs[gActiveBank]].data5 = gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum; + gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[gender].tag); + gSprites[gObjectBankIDs[gActiveBank]].oam.affineParam = gender; + gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0; + gBattleBankFunc[gActiveBank] = sub_803757C; +} + +void LinkOpponentHandleTrainerSlide(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandleTrainerSlideBack(void) +{ + oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]); + gSprites[gObjectBankIDs[gActiveBank]].data0 = 35; + gSprites[gObjectBankIDs[gActiveBank]].data2 = 280; + gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; + gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34; + oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], SpriteCallbackDummy); + gBattleBankFunc[gActiveBank] = sub_80375B4; +} + +void LinkOpponentHandlecmd10(void) +{ + if (ewram17810[gActiveBank].unk4 == 0) + { + if (ewram17800[gActiveBank].unk0_2) + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); + ewram17810[gActiveBank].unk4++; + } + else if (!ewram17810[gActiveBank].unk0_6) + { + ewram17810[gActiveBank].unk4 = 0; + PlaySE12WithPanning(SE_POKE_DEAD, 63); + gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8010384; + gBattleBankFunc[gActiveBank] = sub_8037B78; + } +} + +void LinkOpponentHandlecmd11(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd12(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandleBallThrow(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlePuase(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandleMoveAnimation(void) +{ + if (!mplay_80342A4(gActiveBank)) + { + u32 r0 = gBattleBufferA[gActiveBank][1] + | (gBattleBufferA[gActiveBank][2] << 8); + + gUnknown_0202F7C4 = gBattleBufferA[gActiveBank][3]; + gMovePowerMoveAnim = gBattleBufferA[gActiveBank][4] + | (gBattleBufferA[gActiveBank][5] << 8); + gMoveDmgMoveAnim = gBattleBufferA[gActiveBank][6] + | (gBattleBufferA[gActiveBank][7] << 8) + | (gBattleBufferA[gActiveBank][8] << 16) + | (gBattleBufferA[gActiveBank][9] << 24); + gHappinessMoveAnim = gBattleBufferA[gActiveBank][10]; + gWeatherMoveAnim = gBattleBufferA[gActiveBank][12] + | (gBattleBufferA[gActiveBank][13] << 8); + gDisableStructMoveAnim = (u32 *)&gBattleBufferA[gActiveBank][16]; + gPID_perBank[gActiveBank] = *gDisableStructMoveAnim; + + // Dead code. sub_8031720 always returns 0. + if (sub_8031720(r0, gUnknown_0202F7C4) != 0) + { + LinkOpponentBufferExecCompleted(); + } + else + { + ewram17810[gActiveBank].unk4 = 0; + gBattleBankFunc[gActiveBank] = sub_8039B64; + } + } +} + +void sub_8039B64(void) +{ + u16 r4 = gBattleBufferA[gActiveBank][1] + | (gBattleBufferA[gActiveBank][2] << 8); + u8 r7 = gBattleBufferA[gActiveBank][11]; + + switch (ewram17810[gActiveBank].unk4) + { + case 0: + if (ewram17800[gActiveBank].unk0_2 && !ewram17800[gActiveBank].unk0_3) + { + ewram17800[gActiveBank].unk0_3 = 1; + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); + } + ewram17810[gActiveBank].unk4 = 1; + break; + case 1: + if (!ewram17810[gActiveBank].unk0_6) + { + sub_80326EC(0); + ExecuteMoveAnim(r4); + ewram17810[gActiveBank].unk4 = 2; + } + break; + case 2: + gAnimScriptCallback(); + if (!gAnimScriptActive) + { + sub_80326EC(1); + if ((ewram17800[gActiveBank].unk0_2) && r7 <= 1) + { + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); + ewram17800[gActiveBank].unk0_3 = 0; + } + ewram17810[gActiveBank].unk4 = 3; + } + break; + case 3: + if (!ewram17810[gActiveBank].unk0_6) + { + sub_8031F24(); + sub_80324BC( + gActiveBank, + gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8)); + ewram17810[gActiveBank].unk4 = 0; + LinkOpponentBufferExecCompleted(); + } + break; + } +} + +void LinkOpponentHandlePrintString(void) +{ + gUnknown_030042A4 = 0; + gUnknown_030042A0 = 0; + BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]); + sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + gBattleBankFunc[gActiveBank] = sub_8037C2C; +} + +void LinkOpponentHandlePrintStringPlayerOnly(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd18(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd19(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd20(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandleOpenBag(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd22(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd23(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandleHealthBarUpdate(void) +{ + s16 r7; + + load_gfxc_health_bar(0); + r7 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); + if (r7 != 0x7FFF) + { + u32 maxHP = GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP); + u32 hp = GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_HP); + + sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, hp, r7); + } + else + { + u32 maxHP = GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP); + + sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, 0, r7); + } + gBattleBankFunc[gActiveBank] = sub_8037B24; +} + +void LinkOpponentHandleExpBarUpdate(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandleStatusIconUpdate(void) +{ + if (mplay_80342A4(gActiveBank) == 0) + { + sub_8045A5C(gHealthboxIDs[gActiveBank], &gEnemyParty[gBattlePartyID[gActiveBank]], 9); + ewram17810[gActiveBank].unk0_4 = 0; + gBattleBankFunc[gActiveBank] = sub_8037FAC; + } +} + +void LinkOpponentHandleStatusAnimation(void) +{ + if (mplay_80342A4(gActiveBank) == 0) + { + move_anim_start_t2_for_situation( + gBattleBufferA[gActiveBank][1], + gBattleBufferA[gActiveBank][2] + | (gBattleBufferA[gActiveBank][3] << 8) + | (gBattleBufferA[gActiveBank][4] << 16) + | (gBattleBufferA[gActiveBank][5] << 24)); + gBattleBankFunc[gActiveBank] = sub_8037FAC; + } +} + +void LinkOpponentHandleStatusXor(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd29(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandleDMATransfer(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd31(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd32(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd33(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd34(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd35(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd36(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd37(void) +{ + gUnknown_020238C8.unk0_0 = 0; + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd38(void) +{ + gUnknown_020238C8.unk0_0 = gBattleBufferA[gActiveBank][1]; + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd39(void) +{ + gUnknown_020238C8.unk0_7 = 0; + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd40(void) +{ + gUnknown_020238C8.unk0_7 ^= 1; + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandleHitAnimation(void) +{ + if (gSprites[gObjectBankIDs[gActiveBank]].invisible == TRUE) + { + LinkOpponentBufferExecCompleted(); + } + else + { + gDoingBattleAnim = TRUE; + gSprites[gObjectBankIDs[gActiveBank]].data1 = 0; + sub_8047858(gActiveBank); + gBattleBankFunc[gActiveBank] = dp01t_0F_4_move_anim; + } +} + +void LinkOpponentHandlecmd42(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandleEffectivenessSound(void) +{ + s8 pan; + + if (GetBankSide(gActiveBank) == 0) + pan = -64; + else + pan = 63; + PlaySE12WithPanning(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8), pan); + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd44(void) +{ + PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8)); + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandleFaintingCry(void) +{ + PlayCry3( + GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES), + 25, 5); + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandleIntroSlide(void) +{ + sub_80E43C0(gBattleBufferA[gActiveBank][1]); + gUnknown_02024DE8 |= 1; + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandleTrainerBallThrow(void) +{ + u8 taskId; + + oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]); + gSprites[gObjectBankIDs[gActiveBank]].data0 = 35; + gSprites[gObjectBankIDs[gActiveBank]].data2 = 280; + gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; + gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34; + oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], sub_803A3A8); + taskId = CreateTask(sub_803A2C4, 5); + gTasks[taskId].data[0] = gActiveBank; + if (ewram17810[gActiveBank].unk0_0) + gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0; + ewram17840.unk9_0 = 1; + gBattleBankFunc[gActiveBank] = nullsub_47; +} + +void sub_803A2C4(u8 taskId) +{ + u8 r9; + + r9 = gActiveBank; + gActiveBank = gTasks[taskId].data[0]; + if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI)) + { + gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; + sub_8039430(gActiveBank, 0); + } + else + { + gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; + sub_8039430(gActiveBank, 0); + gActiveBank ^= 2; + gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; + sub_8039430(gActiveBank, 0); + gActiveBank ^= 2; + } + gBattleBankFunc[gActiveBank] = sub_8037840; + gActiveBank = r9; + DestroyTask(taskId); +} + +void sub_803A3A8(struct Sprite *sprite) +{ + sub_8031B74(sprite->oam.affineParam); + sprite->oam.tileNum = sprite->data5; + FreeSpriteOamMatrix(sprite); + DestroySprite(sprite); +} + +void LinkOpponentHandlecmd48(void) +{ + if (gBattleBufferA[gActiveBank][1] != 0 && GetBankSide(gActiveBank) == 0) + { + LinkOpponentBufferExecCompleted(); + return; + } + + ewram17810[gActiveBank].unk0_0 = 1; + if (gBattleBufferA[gActiveBank][2] != 0) + { + if (ewram17810[gActiveBank].unk1_1 < 2) + { + ewram17810[gActiveBank].unk1_1++; + return; + } + else + { + ewram17810[gActiveBank].unk1_1 = 0; + } + } + gUnknown_02024E68[gActiveBank] = sub_8044804( + gActiveBank, + (struct BattleInterfaceStruct2 *)&gBattleBufferA[gActiveBank][4], + gBattleBufferA[gActiveBank][1], + gBattleBufferA[gActiveBank][2]); + ewram17810[gActiveBank].unk5 = 0; + if (gBattleBufferA[gActiveBank][2] != 0) + ewram17810[gActiveBank].unk5 = 0x5D; + gBattleBankFunc[gActiveBank] = sub_803A4E0; +} + +void sub_803A4E0(void) +{ + if (ewram17810[gActiveBank].unk5++ >= 93) + { + ewram17810[gActiveBank].unk5 = 0; + LinkOpponentBufferExecCompleted(); + } +} + +void LinkOpponentHandlecmd49(void) +{ + if (ewram17810[gActiveBank].unk0_0) + gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0; + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd50(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandleSpriteInvisibility(void) +{ + if (sub_8078874(gActiveBank) != 0) + { + gSprites[gObjectBankIDs[gActiveBank]].invisible = gBattleBufferA[gActiveBank][1]; + sub_8031F88(gActiveBank); + } + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandleBattleAnimation(void) +{ + if (mplay_80342A4(gActiveBank) == 0) + { + u8 r3 = gBattleBufferA[gActiveBank][1]; + u16 r4 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); + + if (move_anim_start_t3(gActiveBank, gActiveBank, gActiveBank, r3, r4) != 0) + LinkOpponentBufferExecCompleted(); + else + gBattleBankFunc[gActiveBank] = sub_8037FD8; + } +} + +void LinkOpponentHandleLinkStandbyMsg(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandleResetActionMoveSelection(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd55(void) +{ + if (gBattleBufferA[gActiveBank][1] == 3) + gBattleOutcome = gBattleBufferA[gActiveBank][1]; + else + gBattleOutcome = gBattleBufferA[gActiveBank][1] ^ 3; + FadeOutMapMusic(5); + BeginFastPaletteFade(3); + LinkOpponentBufferExecCompleted(); + gBattleBankFunc[gActiveBank] = sub_8037F34; +} + +void LinkOpponentHandlecmd56(void) +{ +} diff --git a/src/battle_controller_linkpartner.c b/src/battle_controller_linkpartner.c new file mode 100644 index 000000000..f516c9bce --- /dev/null +++ b/src/battle_controller_linkpartner.c @@ -0,0 +1,1728 @@ +#include "global.h" +#include "battle.h" +#include "battle_interface.h" +#include "data2.h" +#include "battle_811DA74.h" +#include "battle_anim_813F0F4.h" +#include "link.h" +#include "m4a.h" +#include "main.h" +#include "palette.h" +#include "pokeball.h" +#include "pokemon.h" +#include "rom3.h" +#include "rom_8077ABC.h" +#include "sound.h" +#include "songs.h" +#include "sprite.h" +#include "string_util.h" +#include "task.h" +#include "text.h" +#include "util.h" + +struct UnknownStruct1 +{ + u8 unk0; + u8 unk1; + u8 unk2[0x1FE]; +}; + +//Possibly PokemonSubstruct1 +struct UnknownStruct3 +{ + u16 moves[4]; + u8 pp[4]; + u8 ppBonuses; +}; + +extern u16 gBattleTypeFlags; +extern u8 gDisplayedStringBattle[]; +extern u8 gBattleBufferA[][0x200]; +extern u8 gActiveBank; +extern u32 gBattleExecBuffer; +extern u16 gBattlePartyID[]; +extern u8 gObjectBankIDs[]; +extern u8 gBattleOutcome; +extern u16 gUnknown_02024DE8; +extern u8 gUnknown_02024E68[]; +extern u8 gDoingBattleAnim; +extern u32 gPID_perBank[]; +extern struct SpriteTemplate gUnknown_02024E8C; +extern u32 *gDisableStructMoveAnim; +extern u32 gMoveDmgMoveAnim; +extern u16 gMovePowerMoveAnim; +extern u8 gHappinessMoveAnim; +extern u16 gWeatherMoveAnim; +extern u8 gUnknown_0202F7C4; +extern struct Window gUnknown_03004210; +extern u16 gUnknown_030042A0; +extern u16 gUnknown_030042A4; +extern MainCallback gPreBattleCallback1; +extern void (*gBattleBankFunc[])(void); +extern u8 gHealthboxIDs[]; +extern u8 gUnknown_0300434C[]; +extern u8 gBattleMonForms[]; +extern u8 gAnimScriptActive; +extern void (*gAnimScriptCallback)(void); + +extern u8 move_anim_start_t3(); +extern u8 sub_8078874(); +extern void sub_8044CA0(u8); +extern void sub_8030E38(struct Sprite *); +extern void sub_80E43C0(); +extern void sub_8047858(); +extern void move_anim_start_t2_for_situation(); +extern void load_gfxc_health_bar(); +extern void sub_8043D84(); +extern void BufferStringBattle(); +extern void sub_8031F24(void); +extern void sub_80326EC(); +extern void ExecuteMoveAnim(); +extern void sub_80324BC(); +extern u8 sub_8031720(); +extern u8 mplay_80342A4(); +extern void oamt_add_pos2_onto_pos1(); +extern void oamt_set_x3A_32(); +extern void sub_8078B34(struct Sprite *); +extern void sub_80105EC(struct Sprite *); +extern s32 sub_803FC34(u16); +extern void sub_8031AF4(); +extern void sub_80313A0(struct Sprite *); +extern u8 sub_8046400(); +extern void sub_80312F0(struct Sprite *); +extern u8 CreateInvisibleSpriteWithCallback(); +extern void sub_80318FC(); +extern u8 sub_8077ABC(); +extern u8 sub_8077F68(); +extern u8 sub_8079E90(); +extern void nullsub_10(); +extern void sub_8045A5C(); +extern void sub_804777C(); +extern void sub_8043DFC(); +//extern s16 sub_8045C78(); +extern void sub_80440EC(); +extern void sub_80324F8(); +extern void nullsub_9(u16); +extern void sub_8043DB0(); +extern void move_anim_start_t4(); +extern void c3_0802FDF4(u8); +extern void sub_8031F88(); +extern void sub_8141828(); +extern void c2_8011A1C(void); + +// this file's functions + +void LinkPartnerBufferRunCommand(void); +void sub_811E0A0(void); +void LinkPartnerBufferExecCompleted(void); +u32 dp01_getattr_by_ch1_for_player_pokemon(u8 a, u8 *b); +void sub_811EC68(u8); +void sub_811F864(u8, u8); +void sub_811FA5C(void); +void sub_811FF30(void); +void sub_812071C(u8); +void sub_81208E0(void); + +void LinkPartnerHandleGetAttributes(void); +void LinkPartnerHandlecmd1(void); +void LinkPartnerHandleSetAttributes(void); +void LinkPartnerHandlecmd3(void); +void LinkPartnerHandleLoadPokeSprite(void); +void LinkPartnerHandleSendOutPoke(void); +void LinkPartnerHandleReturnPokeToBall(void); +void LinkPartnerHandleTrainerThrow(void); +void LinkPartnerHandleTrainerSlide(void); +void LinkPartnerHandleTrainerSlideBack(void); +void LinkPartnerHandlecmd10(void); +void LinkPartnerHandlecmd11(void); +void LinkPartnerHandlecmd12(void); +void LinkPartnerHandleBallThrow(void); +void LinkPartnerHandlePuase(void); +void LinkPartnerHandleMoveAnimation(void); +void LinkPartnerHandlePrintString(void); +void LinkPartnerHandlePrintStringPlayerOnly(void); +void LinkPartnerHandlecmd18(void); +void LinkPartnerHandlecmd19(void); +void LinkPartnerHandlecmd20(void); +void LinkPartnerHandleOpenBag(void); +void LinkPartnerHandlecmd22(void); +void LinkPartnerHandlecmd23(void); +void LinkPartnerHandleHealthBarUpdate(void); +void LinkPartnerHandleExpBarUpdate(void); +void LinkPartnerHandleStatusIconUpdate(void); +void LinkPartnerHandleStatusAnimation(void); +void LinkPartnerHandleStatusXor(void); +void LinkPartnerHandlecmd29(void); +void LinkPartnerHandleDMATransfer(void); +void LinkPartnerHandlecmd31(void); +void LinkPartnerHandlecmd32(void); +void LinkPartnerHandlecmd33(void); +void LinkPartnerHandlecmd34(void); +void LinkPartnerHandlecmd35(void); +void LinkPartnerHandlecmd36(void); +void LinkPartnerHandlecmd37(void); +void LinkPartnerHandlecmd38(void); +void LinkPartnerHandlecmd39(void); +void LinkPartnerHandlecmd40(void); +void LinkPartnerHandleHitAnimation(void); +void LinkPartnerHandlecmd42(void); +void LinkPartnerHandleEffectivenessSound(void); +void LinkPartnerHandlecmd44(void); +void LinkPartnerHandleFaintingCry(void); +void LinkPartnerHandleIntroSlide(void); +void LinkPartnerHandleTrainerBallThrow(void); +void LinkPartnerHandlecmd48(void); +void LinkPartnerHandlecmd49(void); +void LinkPartnerHandlecmd50(void); +void LinkPartnerHandleSpriteInvisibility(void); +void LinkPartnerHandleBattleAnimation(void); +void LinkPartnerHandleLinkStandbyMsg(void); +void LinkPartnerHandleResetActionMoveSelection(void); +void LinkPartnerHandlecmd55(void); +void LinkPartnerHandlecmd56(void); + +// const data +typedef void (*BattleBufferCmd) (void); +static const BattleBufferCmd gLinkPartnerBufferCommands[] = +{ + LinkPartnerHandleGetAttributes, + LinkPartnerHandlecmd1, + LinkPartnerHandleSetAttributes, + LinkPartnerHandlecmd3, + LinkPartnerHandleLoadPokeSprite, + LinkPartnerHandleSendOutPoke, + LinkPartnerHandleReturnPokeToBall, + LinkPartnerHandleTrainerThrow, + LinkPartnerHandleTrainerSlide, + LinkPartnerHandleTrainerSlideBack, + LinkPartnerHandlecmd10, + LinkPartnerHandlecmd11, + LinkPartnerHandlecmd12, + LinkPartnerHandleBallThrow, + LinkPartnerHandlePuase, + LinkPartnerHandleMoveAnimation, + LinkPartnerHandlePrintString, + LinkPartnerHandlePrintStringPlayerOnly, + LinkPartnerHandlecmd18, + LinkPartnerHandlecmd19, + LinkPartnerHandlecmd20, + LinkPartnerHandleOpenBag, + LinkPartnerHandlecmd22, + LinkPartnerHandlecmd23, + LinkPartnerHandleHealthBarUpdate, + LinkPartnerHandleExpBarUpdate, + LinkPartnerHandleStatusIconUpdate, + LinkPartnerHandleStatusAnimation, + LinkPartnerHandleStatusXor, + LinkPartnerHandlecmd29, + LinkPartnerHandleDMATransfer, + LinkPartnerHandlecmd31, + LinkPartnerHandlecmd32, + LinkPartnerHandlecmd33, + LinkPartnerHandlecmd34, + LinkPartnerHandlecmd35, + LinkPartnerHandlecmd36, + LinkPartnerHandlecmd37, + LinkPartnerHandlecmd38, + LinkPartnerHandlecmd39, + LinkPartnerHandlecmd40, + LinkPartnerHandleHitAnimation, + LinkPartnerHandlecmd42, + LinkPartnerHandleEffectivenessSound, + LinkPartnerHandlecmd44, + LinkPartnerHandleFaintingCry, + LinkPartnerHandleIntroSlide, + LinkPartnerHandleTrainerBallThrow, + LinkPartnerHandlecmd48, + LinkPartnerHandlecmd49, + LinkPartnerHandlecmd50, + LinkPartnerHandleSpriteInvisibility, + LinkPartnerHandleBattleAnimation, + LinkPartnerHandleLinkStandbyMsg, + LinkPartnerHandleResetActionMoveSelection, + LinkPartnerHandlecmd55, + LinkPartnerHandlecmd56, +}; +// code starts here + +void nullsub_74(void) +{ +} + +void SetBankFuncToLinkPartnerBufferRunCommand(void) +{ + gBattleBankFunc[gActiveBank] = LinkPartnerBufferRunCommand; +} + +void LinkPartnerBufferRunCommand(void) +{ + if (gBattleExecBuffer & gBitTable[gActiveBank]) + { + if (gBattleBufferA[gActiveBank][0] <= 0x38) + gLinkPartnerBufferCommands[gBattleBufferA[gActiveBank][0]](); + else + LinkPartnerBufferExecCompleted(); + } +} + +void sub_811DAE4(void) +{ + if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy) + LinkPartnerBufferExecCompleted(); +} + +void sub_811DB1C(void) +{ + if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy) + { + nullsub_10(0); + FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); + DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); + LinkPartnerBufferExecCompleted(); + } +} + +void sub_811DB84(void) +{ + if ((--ewram17810[gActiveBank].unk9) == 0xFF) + { + ewram17810[gActiveBank].unk9 = 0; + LinkPartnerBufferExecCompleted(); + } +} + +void sub_811DBC0(void) +{ + bool8 r6 = FALSE; + + if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & 0x40))) + { + if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy) + r6 = TRUE; + } + else + { + if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy + && gSprites[gHealthboxIDs[gActiveBank ^ 2]].callback == SpriteCallbackDummy) + r6 = TRUE; + } + if (IsCryPlayingOrClearCrySongs()) + r6 = FALSE; + if (r6) + { + ewram17810[gActiveBank].unk9 = 3; + gBattleBankFunc[gActiveBank] = sub_811DB84; + } +} + +void sub_811DCA0(void) +{ + u8 r2; + + if (!ewram17810[gActiveBank].unk0_3) + { + // I couldn't get it to work as a bitfield here + r2 = *((u8 *)&ewram17810[gActiveBank ^ 2]) & 8; + if (!r2 && (++ewram17810[gActiveBank].unk9) != 1) + { + ewram17810[gActiveBank].unk9 = r2; + if (IsDoubleBattle() && !(gBattleTypeFlags & 0x40)) + { + DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank ^ 2]]); + sub_8045A5C(gHealthboxIDs[gActiveBank ^ 2], &gPlayerParty[gBattlePartyID[gActiveBank ^ 2]], 0); + sub_804777C(gActiveBank ^ 2); + sub_8043DFC(gHealthboxIDs[gActiveBank ^ 2]); + } + DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]); + sub_8045A5C(gHealthboxIDs[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], 0); + sub_804777C(gActiveBank); + sub_8043DFC(gHealthboxIDs[gActiveBank]); + (s8)ewram17810[4].unk9 &= ~1; + gBattleBankFunc[gActiveBank] = sub_811DBC0; + } + } +} + +void sub_811DDE8(void) +{ + if (gSprites[gObjectBankIDs[gActiveBank]].animEnded + && gSprites[gObjectBankIDs[gActiveBank]].pos2.x == 0) + LinkPartnerBufferExecCompleted(); +} + +void bx_t3_healthbar_update(void) +{ + s16 r4; + + r4 = sub_8045C78(gActiveBank, gHealthboxIDs[gActiveBank], 0, 0); + sub_8043DFC(gHealthboxIDs[gActiveBank]); + if (r4 != -1) + { + sub_80440EC(gHealthboxIDs[gActiveBank], r4, 0); + } + else + { + sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + LinkPartnerBufferExecCompleted(); + } +} + +void sub_811DE98(void) +{ + if (gSprites[gObjectBankIDs[gActiveBank]].pos1.y + gSprites[gObjectBankIDs[gActiveBank]].pos2.y > 160) + { + nullsub_9(GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES)); + FreeOamMatrix(gSprites[gObjectBankIDs[gActiveBank]].oam.matrixNum); + DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); + sub_8043DB0(gHealthboxIDs[gActiveBank]); + LinkPartnerBufferExecCompleted(); + } +} + +void sub_811DF34(void) +{ + if (!ewram17810[gActiveBank].unk0_6) + { + FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); + DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); + sub_8043DB0(gHealthboxIDs[gActiveBank]); + LinkPartnerBufferExecCompleted(); + } +} + +void sub_811DFA0(void) +{ + if (gUnknown_03004210.state == 0) + LinkPartnerBufferExecCompleted(); +} + +void bx_blink_t3(void) +{ + u8 spriteId = gObjectBankIDs[gActiveBank]; + if (gSprites[spriteId].data1 == 32) + { + gSprites[spriteId].data1 = 0; + gSprites[spriteId].invisible = FALSE; + gDoingBattleAnim = 0; + LinkPartnerBufferExecCompleted(); + } + else + { + if ((gSprites[spriteId].data1 % 4) == 0) + { + gSprites[spriteId].invisible ^= 1; + } + gSprites[spriteId].data1++; + } +} + +void sub_811E034(void) +{ + if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy) + { + if (ewram17800[gActiveBank].unk0_2) + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); + gBattleBankFunc[gActiveBank] = sub_811E0A0; + } +} + +void sub_811E0A0(void) +{ + if (!ewram17810[gActiveBank].unk0_6) + LinkPartnerBufferExecCompleted(); +} + +void sub_811E0CC(void) +{ + if (ewram17810[gActiveBank].unk1_0) + { + ewram17810[gActiveBank].unk0_7 = 0; + ewram17810[gActiveBank].unk1_0 = 0; + FreeSpriteTilesByTag(0x27F9); + FreeSpritePaletteByTag(0x27F9); + CreateTask(c3_0802FDF4, 10); + sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 0); + sub_8045A5C(gHealthboxIDs[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], 0); + sub_804777C(gActiveBank); + sub_8043DFC(gHealthboxIDs[gActiveBank]); + sub_8031F88(gActiveBank); + gBattleBankFunc[gActiveBank] = sub_811E034; + } +} + +void sub_811E1BC(void) +{ + if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7) + sub_8141828(gActiveBank, &gPlayerParty[gBattlePartyID[gActiveBank]]); + if (gSprites[gUnknown_0300434C[gActiveBank]].callback == SpriteCallbackDummy + && !ewram17810[gActiveBank].unk0_3) + { + DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]); + gBattleBankFunc[gActiveBank] = sub_811E0CC; + } +} + +void sub_811E258(void) +{ + if (gReceivedRemoteLinkPlayers == 0) + { + m4aSongNumStop(0x5A); + gMain.inBattle = FALSE; + gMain.callback1 = gPreBattleCallback1; + SetMainCallback2(c2_8011A1C); + } +} + +void sub_811E29C(void) +{ + if (!gPaletteFade.active) + { + if (gBattleTypeFlags & 2) + { + sub_800832C(); + gBattleBankFunc[gActiveBank] = sub_811E258; + } + else + { + m4aSongNumStop(0x5A); + gMain.inBattle = FALSE; + gMain.callback1 = gPreBattleCallback1; + SetMainCallback2(gMain.savedCallback); + } + } +} + +void LinkPartnerBufferExecCompleted(void) +{ + u8 multiplayerId; + + gBattleBankFunc[gActiveBank] = LinkPartnerBufferRunCommand; + if (gBattleTypeFlags & 2) + { + multiplayerId = GetMultiplayerId(); + dp01_prepare_buffer_wireless_probably(2, 4, &multiplayerId); + gBattleBufferA[gActiveBank][0] = 0x38; + } + else + { + gBattleExecBuffer &= ~gBitTable[gActiveBank]; + } +} + +void sub_811E38C(void) +{ + if (!ewram17810[gActiveBank].unk0_4) + LinkPartnerBufferExecCompleted(); +} + +void sub_811E3B8(void) +{ + if (!ewram17810[gActiveBank].unk0_5) + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandleGetAttributes(void) +{ + u8 unk[256]; + int r6 = 0; + s32 i; + + if (gBattleBufferA[gActiveBank][2] == 0) + { + r6 = dp01_getattr_by_ch1_for_player_pokemon(gBattlePartyID[gActiveBank], unk); + } + else + { + u8 r4 = gBattleBufferA[gActiveBank][2]; + + for (i = 0; i < 6; i++) + { + if (r4 & 1) + r6 += dp01_getattr_by_ch1_for_player_pokemon(i, unk + r6); + r4 >>= 1; + } + } + Emitcmd29(1, r6, unk); + LinkPartnerBufferExecCompleted(); +} + +// Duplicate of dp01_getattr_by_ch1_for_player_pokemon_ +u32 dp01_getattr_by_ch1_for_player_pokemon(u8 a, u8 *buffer) +{ + struct BattlePokemon battlePokemon; + struct UnknownStruct3 moveData; + u8 nickname[20]; + u8 *src; + s16 data16; + u32 data32; + s32 size = 0; + + switch (gBattleBufferA[gActiveBank][1]) + { + case 0: + battlePokemon.species = GetMonData(&gPlayerParty[a], MON_DATA_SPECIES); + battlePokemon.item = GetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM); + for (size = 0; size < 4; size++) + { + battlePokemon.moves[size] = GetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + size); + battlePokemon.pp[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size); + } + battlePokemon.ppBonuses = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES); + battlePokemon.friendship = GetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP); + battlePokemon.experience = GetMonData(&gPlayerParty[a], MON_DATA_EXP); + battlePokemon.hpIV = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV); + battlePokemon.attackIV = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV); + battlePokemon.defenseIV = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV); + battlePokemon.speedIV = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV); + battlePokemon.spAttackIV = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV); + battlePokemon.spDefenseIV = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV); + battlePokemon.personality = GetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY); + battlePokemon.status1 = GetMonData(&gPlayerParty[a], MON_DATA_STATUS); + battlePokemon.level = GetMonData(&gPlayerParty[a], MON_DATA_LEVEL); + battlePokemon.hp = GetMonData(&gPlayerParty[a], MON_DATA_HP); + battlePokemon.maxHP = GetMonData(&gPlayerParty[a], MON_DATA_MAX_HP); + battlePokemon.attack = GetMonData(&gPlayerParty[a], MON_DATA_ATK); + battlePokemon.defense = GetMonData(&gPlayerParty[a], MON_DATA_DEF); + battlePokemon.speed = GetMonData(&gPlayerParty[a], MON_DATA_SPD); + battlePokemon.spAttack = GetMonData(&gPlayerParty[a], MON_DATA_SPATK); + battlePokemon.spDefense = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF); + battlePokemon.isEgg = GetMonData(&gPlayerParty[a], MON_DATA_IS_EGG); + battlePokemon.altAbility = GetMonData(&gPlayerParty[a], MON_DATA_ALT_ABILITY); + battlePokemon.otId = GetMonData(&gPlayerParty[a], MON_DATA_OT_ID); + GetMonData(&gPlayerParty[a], MON_DATA_NICKNAME, nickname); + StringCopy10(battlePokemon.nickname, nickname); + GetMonData(&gPlayerParty[a], MON_DATA_OT_NAME, battlePokemon.otName); + src = (u8 *)&battlePokemon; + for (size = 0; size < sizeof(battlePokemon); size++) + buffer[size] = src[size]; + break; + case 1: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPECIES); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 2: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 3: + for (size = 0; size < 4; size++) + { + moveData.moves[size] = GetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + size); + moveData.pp[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size); + } + moveData.ppBonuses = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES); + src = (u8 *)&moveData; + for (size = 0; size < sizeof(moveData); size++) + buffer[size] = src[size]; + break; + case 4: + case 5: + case 6: + case 7: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - 4); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 8: + for (size = 0; size < 4; size++) + buffer[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size); + buffer[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES); + size++; + break; + case 9: + case 10: + case 11: + case 12: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - 9); + size = 1; + break; + case 17: + data32 = GetMonData(&gPlayerParty[a], MON_DATA_OT_ID); + buffer[0] = (data32 & 0x000000FF); + buffer[1] = (data32 & 0x0000FF00) >> 8; + buffer[2] = (data32 & 0x00FF0000) >> 16; + size = 3; + break; + case 18: + data32 = GetMonData(&gPlayerParty[a], MON_DATA_EXP); + buffer[0] = (data32 & 0x000000FF); + buffer[1] = (data32 & 0x0000FF00) >> 8; + buffer[2] = (data32 & 0x00FF0000) >> 16; + size = 3; + break; + case 19: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_EV); + size = 1; + break; + case 20: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_EV); + size = 1; + break; + case 21: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_EV); + size = 1; + break; + case 22: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_EV); + size = 1; + break; + case 23: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_EV); + size = 1; + break; + case 24: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_EV); + size = 1; + break; + case 25: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP); + size = 1; + break; + case 26: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_POKERUS); + size = 1; + break; + case 27: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_MET_LOCATION); + size = 1; + break; + case 28: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_MET_LEVEL); + size = 1; + break; + case 29: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_MET_GAME); + size = 1; + break; + case 30: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_POKEBALL); + size = 1; + break; + case 31: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV); + buffer[1] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV); + buffer[2] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV); + buffer[3] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV); + buffer[4] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV); + buffer[5] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV); + size = 6; + break; + case 32: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV); + size = 1; + break; + case 33: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV); + size = 1; + break; + case 34: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV); + size = 1; + break; + case 35: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV); + size = 1; + break; + case 36: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV); + size = 1; + break; + case 37: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV); + size = 1; + break; + case 38: + data32 = GetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY); + buffer[0] = (data32 & 0x000000FF); + buffer[1] = (data32 & 0x0000FF00) >> 8; + buffer[2] = (data32 & 0x00FF0000) >> 16; + buffer[3] = (data32 & 0xFF000000) >> 24; + size = 4; + break; + case 39: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_CHECKSUM); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 40: + data32 = GetMonData(&gPlayerParty[a], MON_DATA_STATUS); + buffer[0] = (data32 & 0x000000FF); + buffer[1] = (data32 & 0x0000FF00) >> 8; + buffer[2] = (data32 & 0x00FF0000) >> 16; + buffer[3] = (data32 & 0xFF000000) >> 24; + size = 4; + break; + case 41: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_LEVEL); + size = 1; + break; + case 42: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_HP); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 43: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_MAX_HP); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 44: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_ATK); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 45: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_DEF); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 46: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPD); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 47: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPATK); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 48: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 49: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_COOL); + size = 1; + break; + case 50: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_BEAUTY); + size = 1; + break; + case 51: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_CUTE); + size = 1; + break; + case 52: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SMART); + size = 1; + break; + case 53: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_TOUGH); + size = 1; + break; + case 54: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SHEEN); + size = 1; + break; + case 55: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_COOL_RIBBON); + size = 1; + break; + case 56: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_BEAUTY_RIBBON); + size = 1; + break; + case 57: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_CUTE_RIBBON); + size = 1; + break; + case 58: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SMART_RIBBON); + size = 1; + break; + case 59: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_TOUGH_RIBBON); + size = 1; + break; + } + return size; +} + +void LinkPartnerHandlecmd1(void) +{ + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandleSetAttributes(void) +{ + u8 i; + u8 r4; + + if (gBattleBufferA[gActiveBank][2] == 0) + { + sub_811EC68(gBattlePartyID[gActiveBank]); + } + else + { + r4 = gBattleBufferA[gActiveBank][2]; + for (i = 0; i < 6; i++) + { + if (r4 & 1) + sub_811EC68(i); + r4 >>= 1; + } + } + LinkPartnerBufferExecCompleted(); +} + +// Duplicate of dp01_setattr_by_ch1_for_player_pokemon +void sub_811EC68(u8 a) +{ + struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBank][3]; + struct UnknownStruct3 *moveData = (struct UnknownStruct3 *)&gBattleBufferA[gActiveBank][3]; + s32 i; + + switch (gBattleBufferA[gActiveBank][1]) + { + case 0: + { + u8 iv; + + SetMonData(&gPlayerParty[a], MON_DATA_SPECIES, (u8 *)&battlePokemon->species); + SetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM, (u8 *)&battlePokemon->item); + for (i = 0; i < 4; i++) + { + SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + i, (u8 *)&battlePokemon->moves[i]); + SetMonData(&gPlayerParty[a], MON_DATA_PP1 + i, (u8 *)&battlePokemon->pp[i]); + } + SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, (u8 *)&battlePokemon->ppBonuses); + SetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP, (u8 *)&battlePokemon->friendship); + SetMonData(&gPlayerParty[a], MON_DATA_EXP, (u8 *)&battlePokemon->experience); + iv = battlePokemon->hpIV; + SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, (u8 *)&iv); + iv = battlePokemon->attackIV; + SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, (u8 *)&iv); + iv = battlePokemon->defenseIV; + SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, (u8 *)&iv); + iv = battlePokemon->speedIV; + SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, (u8 *)&iv); + iv = battlePokemon->spAttackIV; + SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, (u8 *)&iv); + iv = battlePokemon->spDefenseIV; + SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, (u8 *)&iv); + SetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY, (u8 *)&battlePokemon->personality); + SetMonData(&gPlayerParty[a], MON_DATA_STATUS, (u8 *)&battlePokemon->status1); + SetMonData(&gPlayerParty[a], MON_DATA_LEVEL, (u8 *)&battlePokemon->level); + SetMonData(&gPlayerParty[a], MON_DATA_HP, (u8 *)&battlePokemon->hp); + SetMonData(&gPlayerParty[a], MON_DATA_MAX_HP, (u8 *)&battlePokemon->maxHP); + SetMonData(&gPlayerParty[a], MON_DATA_ATK, (u8 *)&battlePokemon->attack); + SetMonData(&gPlayerParty[a], MON_DATA_DEF, (u8 *)&battlePokemon->defense); + SetMonData(&gPlayerParty[a], MON_DATA_SPD, (u8 *)&battlePokemon->speed); + SetMonData(&gPlayerParty[a], MON_DATA_SPATK, (u8 *)&battlePokemon->spAttack); + SetMonData(&gPlayerParty[a], MON_DATA_SPDEF, (u8 *)&battlePokemon->spDefense); + } + break; + case 1: + SetMonData(&gPlayerParty[a], MON_DATA_SPECIES, &gBattleBufferA[gActiveBank][3]); + break; + case 2: + SetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBank][3]); + break; + case 3: + for (i = 0; i < 4; i++) + { + SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + i, (u8 *)&moveData->moves[i]); + SetMonData(&gPlayerParty[a], MON_DATA_PP1 + i, (u8 *)&moveData->pp[i]); + } + SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, &moveData->ppBonuses); + break; + case 4: + case 5: + case 6: + case 7: + SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - 4, &gBattleBufferA[gActiveBank][3]); + break; + case 8: + SetMonData(&gPlayerParty[a], MON_DATA_PP1, &gBattleBufferA[gActiveBank][3]); + SetMonData(&gPlayerParty[a], MON_DATA_PP2, &gBattleBufferA[gActiveBank][4]); + SetMonData(&gPlayerParty[a], MON_DATA_PP3, &gBattleBufferA[gActiveBank][5]); + SetMonData(&gPlayerParty[a], MON_DATA_PP4, &gBattleBufferA[gActiveBank][6]); + SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBank][7]); + break; + case 9: + case 10: + case 11: + case 12: + SetMonData(&gPlayerParty[a], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - 9, &gBattleBufferA[gActiveBank][3]); + break; + case 17: + SetMonData(&gPlayerParty[a], MON_DATA_OT_ID, &gBattleBufferA[gActiveBank][3]); + break; + case 18: + SetMonData(&gPlayerParty[a], MON_DATA_EXP, &gBattleBufferA[gActiveBank][3]); + break; + case 19: + SetMonData(&gPlayerParty[a], MON_DATA_HP_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 20: + SetMonData(&gPlayerParty[a], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 21: + SetMonData(&gPlayerParty[a], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 22: + SetMonData(&gPlayerParty[a], MON_DATA_SPD_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 23: + SetMonData(&gPlayerParty[a], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 24: + SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 25: + SetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBank][3]); + break; + case 26: + SetMonData(&gPlayerParty[a], MON_DATA_POKERUS, &gBattleBufferA[gActiveBank][3]); + break; + case 27: + SetMonData(&gPlayerParty[a], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBank][3]); + break; + case 28: + SetMonData(&gPlayerParty[a], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBank][3]); + break; + case 29: + SetMonData(&gPlayerParty[a], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBank][3]); + break; + case 30: + SetMonData(&gPlayerParty[a], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBank][3]); + break; + case 31: + SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]); + SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][4]); + SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][5]); + SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][6]); + SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][7]); + SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][8]); + break; + case 32: + SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 33: + SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 34: + SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 35: + SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 36: + SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 37: + SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 38: + SetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBank][3]); + break; + case 39: + SetMonData(&gPlayerParty[a], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBank][3]); + break; + case 40: + SetMonData(&gPlayerParty[a], MON_DATA_STATUS, &gBattleBufferA[gActiveBank][3]); + break; + case 41: + SetMonData(&gPlayerParty[a], MON_DATA_LEVEL, &gBattleBufferA[gActiveBank][3]); + break; + case 42: + SetMonData(&gPlayerParty[a], MON_DATA_HP, &gBattleBufferA[gActiveBank][3]); + break; + case 43: + SetMonData(&gPlayerParty[a], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBank][3]); + break; + case 44: + SetMonData(&gPlayerParty[a], MON_DATA_ATK, &gBattleBufferA[gActiveBank][3]); + break; + case 45: + SetMonData(&gPlayerParty[a], MON_DATA_DEF, &gBattleBufferA[gActiveBank][3]); + break; + case 46: + SetMonData(&gPlayerParty[a], MON_DATA_SPD, &gBattleBufferA[gActiveBank][3]); + break; + case 47: + SetMonData(&gPlayerParty[a], MON_DATA_SPATK, &gBattleBufferA[gActiveBank][3]); + break; + case 48: + SetMonData(&gPlayerParty[a], MON_DATA_SPDEF, &gBattleBufferA[gActiveBank][3]); + break; + case 49: + SetMonData(&gPlayerParty[a], MON_DATA_COOL, &gBattleBufferA[gActiveBank][3]); + break; + case 50: + SetMonData(&gPlayerParty[a], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBank][3]); + break; + case 51: + SetMonData(&gPlayerParty[a], MON_DATA_CUTE, &gBattleBufferA[gActiveBank][3]); + break; + case 52: + SetMonData(&gPlayerParty[a], MON_DATA_SMART, &gBattleBufferA[gActiveBank][3]); + break; + case 53: + SetMonData(&gPlayerParty[a], MON_DATA_TOUGH, &gBattleBufferA[gActiveBank][3]); + break; + case 54: + SetMonData(&gPlayerParty[a], MON_DATA_SHEEN, &gBattleBufferA[gActiveBank][3]); + break; + case 55: + SetMonData(&gPlayerParty[a], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBank][3]); + break; + case 56: + SetMonData(&gPlayerParty[a], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBank][3]); + break; + case 57: + SetMonData(&gPlayerParty[a], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBank][3]); + break; + case 58: + SetMonData(&gPlayerParty[a], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBank][3]); + break; + case 59: + SetMonData(&gPlayerParty[a], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBank][3]); + break; + } + sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); +} + +void LinkPartnerHandlecmd3(void) +{ + u8 *dst; + u8 i; + + dst = (u8 *)&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1]; + for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++) + dst[i] = gBattleBufferA[gActiveBank][3 + i]; + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandleLoadPokeSprite(void) +{ + sub_80318FC(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + GetMonSpriteTemplate_803C56C( + GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES), + GetBankIdentity(gActiveBank)); + gObjectBankIDs[gActiveBank] = CreateSprite( + &gUnknown_02024E8C, + sub_8077ABC(gActiveBank, 2), + sub_8077F68(gActiveBank), + sub_8079E90(gActiveBank)); + gSprites[gObjectBankIDs[gActiveBank]].pos2.x = -240; + gSprites[gObjectBankIDs[gActiveBank]].data0 = gActiveBank; + gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank; + StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], gBattleMonForms[gActiveBank]); + gBattleBankFunc[gActiveBank] = sub_811DDE8; +} + +void LinkPartnerHandleSendOutPoke(void) +{ + sub_8032AA8(gActiveBank, gBattleBufferA[gActiveBank][2]); + gBattlePartyID[gActiveBank] = gBattleBufferA[gActiveBank][1]; + sub_80318FC(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + sub_811F864(gActiveBank, gBattleBufferA[gActiveBank][2]); + gBattleBankFunc[gActiveBank] = sub_811E1BC; +} + +void sub_811F864(u8 a, u8 b) +{ + u16 species; + + sub_8032AA8(a, b); + gBattlePartyID[a] = gBattleBufferA[a][1]; + species = GetMonData(&gPlayerParty[gBattlePartyID[a]], MON_DATA_SPECIES); + gUnknown_0300434C[a] = CreateInvisibleSpriteWithCallback(sub_80312F0); + GetMonSpriteTemplate_803C56C(species, GetBankIdentity(a)); + gObjectBankIDs[a] = CreateSprite( + &gUnknown_02024E8C, + sub_8077ABC(a, 2), + sub_8077F68(a), + sub_8079E90(a)); + gSprites[gUnknown_0300434C[a]].data1 = gObjectBankIDs[a]; + gSprites[gObjectBankIDs[a]].data0 = a; + gSprites[gObjectBankIDs[a]].data2 = species; + gSprites[gObjectBankIDs[a]].oam.paletteNum = a; + StartSpriteAnim(&gSprites[gObjectBankIDs[a]], gBattleMonForms[a]); + gSprites[gObjectBankIDs[a]].invisible = TRUE; + gSprites[gObjectBankIDs[a]].callback = SpriteCallbackDummy; + gSprites[gUnknown_0300434C[a]].data0 = sub_8046400(0, 0xFF); +} + +void LinkPartnerHandleReturnPokeToBall(void) +{ + if (gBattleBufferA[gActiveBank][1] == 0) + { + ewram17810[gActiveBank].unk4 = 0; + gBattleBankFunc[gActiveBank] = sub_811FA5C; + } + else + { + FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); + DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); + sub_8043DB0(gHealthboxIDs[gActiveBank]); + LinkPartnerBufferExecCompleted(); + } +} + +void sub_811FA5C(void) +{ + switch (ewram17810[gActiveBank].unk4) + { + case 0: + if (ewram17800[gActiveBank].unk0_2) + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); + ewram17810[gActiveBank].unk4 = 1; + break; + case 1: + if (!ewram17810[gActiveBank].unk0_6) + { + ewram17810[gActiveBank].unk4 = 0; + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 1); + gBattleBankFunc[gActiveBank] = sub_811DF34; + } + break; + } +} + +void LinkPartnerHandleTrainerThrow(void) +{ + s16 xOffset; + u32 gender; + + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + if (GetBankIdentity(gActiveBank) & 2) + xOffset = 16; + else + xOffset = -16; + gender = gLinkPlayers[sub_803FC34(gActiveBank)].gender; + } + else + { + xOffset = 0; + gender = gLinkPlayers[GetMultiplayerId() ^ 1].gender; + } + sub_8031AF4(gender, gActiveBank); + GetMonSpriteTemplate_803C5A0(gender, GetBankIdentity(gActiveBank)); + gObjectBankIDs[gActiveBank] = CreateSprite( + &gUnknown_02024E8C, + 80 + xOffset, 80 + 4 * (8 - gTrainerBackPicCoords[gender].coords), + sub_8079E90(gActiveBank)); + gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank; + gSprites[gObjectBankIDs[gActiveBank]].pos2.x = 240; + gSprites[gObjectBankIDs[gActiveBank]].data0 = -2; + gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0; + gBattleBankFunc[gActiveBank] = sub_811DAE4; +} + +void LinkPartnerHandleTrainerSlide(void) +{ + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandleTrainerSlideBack(void) +{ + oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]); + gSprites[gObjectBankIDs[gActiveBank]].data0 = 35; + gSprites[gObjectBankIDs[gActiveBank]].data2 = -40; + gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; + gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34; + oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], SpriteCallbackDummy); + gBattleBankFunc[gActiveBank] = sub_811DB1C; +} + +void LinkPartnerHandlecmd10(void) +{ + if (ewram17810[gActiveBank].unk4 == 0) + { + if (ewram17800[gActiveBank].unk0_2) + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); + ewram17810[gActiveBank].unk4++; + } + else if (!ewram17810[gActiveBank].unk0_6) + { + ewram17810[gActiveBank].unk4 = 0; + sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + PlaySE12WithPanning(SE_POKE_DEAD, -64); + gSprites[gObjectBankIDs[gActiveBank]].data1 = 0; + gSprites[gObjectBankIDs[gActiveBank]].data2 = 5; + gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80105EC; + gBattleBankFunc[gActiveBank] = sub_811DE98; + } +} + +void LinkPartnerHandlecmd11(void) +{ + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandlecmd12(void) +{ + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandleBallThrow(void) +{ + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandlePuase(void) +{ + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandleMoveAnimation(void) +{ + if (!mplay_80342A4(gActiveBank)) + { + u32 r0 = gBattleBufferA[gActiveBank][1] + | (gBattleBufferA[gActiveBank][2] << 8); + + gUnknown_0202F7C4 = gBattleBufferA[gActiveBank][3]; + gMovePowerMoveAnim = gBattleBufferA[gActiveBank][4] + | (gBattleBufferA[gActiveBank][5] << 8); + gMoveDmgMoveAnim = gBattleBufferA[gActiveBank][6] + | (gBattleBufferA[gActiveBank][7] << 8) + | (gBattleBufferA[gActiveBank][8] << 16) + | (gBattleBufferA[gActiveBank][9] << 24); + gHappinessMoveAnim = gBattleBufferA[gActiveBank][10]; + gWeatherMoveAnim = gBattleBufferA[gActiveBank][12] + | (gBattleBufferA[gActiveBank][13] << 8); + gDisableStructMoveAnim = (u32 *)&gBattleBufferA[gActiveBank][16]; + gPID_perBank[gActiveBank] = *gDisableStructMoveAnim; + + if (sub_8031720(r0, gUnknown_0202F7C4) != 0) + LinkPartnerBufferExecCompleted(); + else + { + ewram17810[gActiveBank].unk4 = 0; + gBattleBankFunc[gActiveBank] = sub_811FF30; + } + } +} + +void sub_811FF30(void) +{ + u16 r4 = gBattleBufferA[gActiveBank][1] + | (gBattleBufferA[gActiveBank][2] << 8); + u8 r7 = gBattleBufferA[gActiveBank][11]; + + switch (ewram17810[gActiveBank].unk4) + { + case 0: + if (ewram17800[gActiveBank].unk0_2 && !ewram17800[gActiveBank].unk0_3) + { + ewram17800[gActiveBank].unk0_3 = 1; + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); + } + ewram17810[gActiveBank].unk4 = 1; + break; + case 1: + if (!ewram17810[gActiveBank].unk0_6) + { + sub_80326EC(0); + ExecuteMoveAnim(r4); + ewram17810[gActiveBank].unk4 = 2; + } + break; + case 2: + gAnimScriptCallback(); + if (!gAnimScriptActive) + { + sub_80326EC(1); + if ((ewram17800[gActiveBank].unk0_2) && r7 <= 1) + { + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); + ewram17800[gActiveBank].unk0_3 = 0; + } + ewram17810[gActiveBank].unk4 = 3; + } + break; + case 3: + if (!ewram17810[gActiveBank].unk0_6) + { + sub_8031F24(); + sub_80324BC( + gActiveBank, + gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8)); + ewram17810[gActiveBank].unk4 = 0; + LinkPartnerBufferExecCompleted(); + } + break; + } +} + +void LinkPartnerHandlePrintString(void) +{ + gUnknown_030042A4 = 0; + gUnknown_030042A0 = 0; + BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]); + sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + gBattleBankFunc[gActiveBank] = sub_811DFA0; +} + +void LinkPartnerHandlePrintStringPlayerOnly(void) +{ + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandlecmd18(void) +{ + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandlecmd19(void) +{ + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandlecmd20(void) +{ + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandleOpenBag(void) +{ + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandlecmd22(void) +{ + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandlecmd23(void) +{ + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandleHealthBarUpdate(void) +{ + s16 r7; + + load_gfxc_health_bar(0); + r7 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); + if (r7 != 0x7FFF) + { + u32 maxHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP); + u32 hp = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_HP); + + sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, hp, r7); + } + else + { + u32 maxHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP); + + sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, 0, r7); + } + gBattleBankFunc[gActiveBank] = bx_t3_healthbar_update; +} + +void LinkPartnerHandleExpBarUpdate(void) +{ + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandleStatusIconUpdate(void) +{ + if (mplay_80342A4(gActiveBank) == 0) + { + sub_8045A5C(gHealthboxIDs[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], 9); + ewram17810[gActiveBank].unk0_4 = 0; + gBattleBankFunc[gActiveBank] = sub_811E38C; + } +} + +void LinkPartnerHandleStatusAnimation(void) +{ + if (mplay_80342A4(gActiveBank) == 0) + { + move_anim_start_t2_for_situation( + gBattleBufferA[gActiveBank][1], + gBattleBufferA[gActiveBank][2] + | (gBattleBufferA[gActiveBank][3] << 8) + | (gBattleBufferA[gActiveBank][4] << 16) + | (gBattleBufferA[gActiveBank][5] << 24)); + gBattleBankFunc[gActiveBank] = sub_811E38C; + } +} + +void LinkPartnerHandleStatusXor(void) +{ + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandlecmd29(void) +{ + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandleDMATransfer(void) +{ + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandlecmd31(void) +{ + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandlecmd32(void) +{ + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandlecmd33(void) +{ + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandlecmd34(void) +{ + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandlecmd35(void) +{ + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandlecmd36(void) +{ + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandlecmd37(void) +{ + gUnknown_020238C8.unk0_0 = 0; + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandlecmd38(void) +{ + gUnknown_020238C8.unk0_0 = gBattleBufferA[gActiveBank][1]; + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandlecmd39(void) +{ + gUnknown_020238C8.unk0_7 = 0; + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandlecmd40(void) +{ + gUnknown_020238C8.unk0_7 ^= 1; + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandleHitAnimation(void) +{ + if (gSprites[gObjectBankIDs[gActiveBank]].invisible == TRUE) + { + LinkPartnerBufferExecCompleted(); + } + else + { + gDoingBattleAnim = TRUE; + gSprites[gObjectBankIDs[gActiveBank]].data1 = 0; + sub_8047858(gActiveBank); + gBattleBankFunc[gActiveBank] = bx_blink_t3; + } +} + +void LinkPartnerHandlecmd42(void) +{ + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandleEffectivenessSound(void) +{ + s8 pan; + + if (GetBankSide(gActiveBank) == 0) + pan = -64; + else + pan = 63; + PlaySE12WithPanning(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8), pan); + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandlecmd44(void) +{ + PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8)); + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandleFaintingCry(void) +{ + PlayCry3( + GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES), + -25, 5); + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandleIntroSlide(void) +{ + sub_80E43C0(gBattleBufferA[gActiveBank][1]); + gUnknown_02024DE8 |= 1; + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandleTrainerBallThrow(void) +{ + u8 r4; + u8 taskId; + + oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]); + gSprites[gObjectBankIDs[gActiveBank]].data0 = 50; + gSprites[gObjectBankIDs[gActiveBank]].data2 = -40; + gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; + gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34; + gSprites[gObjectBankIDs[gActiveBank]].data5 = gActiveBank; + oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], sub_8030E38); + StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 1); + r4 = AllocSpritePalette(0xD6F9); + LoadCompressedPalette( + gTrainerBackPicPaletteTable[gLinkPlayers[sub_803FC34(gActiveBank)].gender].data, + 0x100 + r4 * 16, 0x20); + gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = r4; + taskId = CreateTask(sub_812071C, 5); + gTasks[taskId].data[0] = gActiveBank; + if (ewram17810[gActiveBank].unk0_0) + gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0; + ewram17840.unk9_0 = 1; + gBattleBankFunc[gActiveBank] = nullsub_74; +} + +void sub_812071C(u8 taskId) +{ + u8 r9; + + if (gTasks[taskId].data[1] < 24) + { + gTasks[taskId].data[1]++; + return; + } + + r9 = gActiveBank; + gActiveBank = gTasks[taskId].data[0]; + if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI)) + { + gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; + sub_811F864(gActiveBank, 0); + } + else + { + gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; + sub_811F864(gActiveBank, 0); + gActiveBank ^= 2; + gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; + sub_80318FC(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + sub_811F864(gActiveBank, 0); + gActiveBank ^= 2; + } + gBattleBankFunc[gActiveBank] = sub_811DCA0; + gActiveBank = r9; + DestroyTask(taskId); +} + +void LinkPartnerHandlecmd48(void) +{ + if (gBattleBufferA[gActiveBank][1] != 0 && GetBankSide(gActiveBank) == 0) + { + LinkPartnerBufferExecCompleted(); + return; + } + + ewram17810[gActiveBank].unk0_0 = 1; + gUnknown_02024E68[gActiveBank] = sub_8044804( + gActiveBank, + (struct BattleInterfaceStruct2 *)&gBattleBufferA[gActiveBank][4], + gBattleBufferA[gActiveBank][1], + gBattleBufferA[gActiveBank][2]); + ewram17810[gActiveBank].unk5 = 0; + if (gBattleBufferA[gActiveBank][2] != 0) + ewram17810[gActiveBank].unk5 = 0x5D; + gBattleBankFunc[gActiveBank] = sub_81208E0; +} + +void sub_81208E0(void) +{ + if (ewram17810[gActiveBank].unk5++ >= 93) + { + ewram17810[gActiveBank].unk5 = 0; + LinkPartnerBufferExecCompleted(); + } +} + +void LinkPartnerHandlecmd49(void) +{ + if (ewram17810[gActiveBank].unk0_0) + gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0; + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandlecmd50(void) +{ + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandleSpriteInvisibility(void) +{ + if (sub_8078874(gActiveBank) != 0) + { + gSprites[gObjectBankIDs[gActiveBank]].invisible = gBattleBufferA[gActiveBank][1]; + sub_8031F88(gActiveBank); + } + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandleBattleAnimation(void) +{ + if (mplay_80342A4(gActiveBank) == 0) + { + u8 r3 = gBattleBufferA[gActiveBank][1]; + u16 r4 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); + + if (move_anim_start_t3(gActiveBank, gActiveBank, gActiveBank, r3, r4) != 0) + LinkPartnerBufferExecCompleted(); + else + gBattleBankFunc[gActiveBank] = sub_811E3B8; + } +} + +void LinkPartnerHandleLinkStandbyMsg(void) +{ + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandleResetActionMoveSelection(void) +{ + LinkPartnerBufferExecCompleted(); +} + +void LinkPartnerHandlecmd55(void) +{ + gBattleOutcome = gBattleBufferA[gActiveBank][1]; + FadeOutMapMusic(5); + BeginFastPaletteFade(3); + LinkPartnerBufferExecCompleted(); + gBattleBankFunc[gActiveBank] = sub_811E29C; +} + +void LinkPartnerHandlecmd56(void) +{ +} diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c new file mode 100644 index 000000000..b24130bb8 --- /dev/null +++ b/src/battle_controller_opponent.c @@ -0,0 +1,2055 @@ +#include "global.h" +#include "battle.h" +#include "battle_interface.h" +#include "data2.h" +#include "battle_811DA74.h" +#include "battle_anim_813F0F4.h" +#include "link.h" +#include "m4a.h" +#include "main.h" +#include "palette.h" +#include "pokeball.h" +#include "pokemon.h" +#include "rom3.h" +#include "rom_8077ABC.h" +#include "sound.h" +#include "songs.h" +#include "sprite.h" +#include "string_util.h" +#include "task.h" +#include "text.h" +#include "util.h" + +struct UnknownStruct3 +{ + u16 moves[4]; + u8 pp[4]; + u8 ppBonuses; +}; + +extern u8 gActiveBank; +extern u8 gBattleBufferA[][0x200]; +extern u16 gBattlePartyID[]; +extern u8 gObjectBankIDs[]; +extern u8 gBattleMonForms[]; +extern struct SpriteTemplate gUnknown_02024E8C; +extern void (*gBattleBankFunc[])(void); +extern u8 gUnknown_0300434C[]; +extern u8 gHealthboxIDs[]; +extern u16 gBattleTypeFlags; +extern u16 gTrainerBattleOpponent; +extern u32 *gDisableStructMoveAnim; +extern u32 gMoveDmgMoveAnim; +extern u16 gMovePowerMoveAnim; +extern u8 gHappinessMoveAnim; +extern u16 gWeatherMoveAnim; +extern u32 gPID_perBank[]; +extern u8 gUnknown_0202F7C4; +extern u8 gAnimScriptActive; +extern void (*gAnimScriptCallback)(void); +extern struct Window gUnknown_03004210; +extern u16 gUnknown_030042A0; +extern u16 gUnknown_030042A4; +extern u8 gDisplayedStringBattle[]; +extern u8 gBankTarget; +extern u8 gAbsentBankFlags; +extern bool8 gDoingBattleAnim; +extern u16 gUnknown_02024DE8; +extern u8 gUnknown_02024E68[]; +extern MainCallback gPreBattleCallback1; +extern void (*const gOpponentBufferCommands[])(void); +extern struct MusicPlayerInfo gMPlay_SE1; +extern struct MusicPlayerInfo gMPlay_SE2; +extern struct MusicPlayerInfo gMPlay_BGM; +extern u32 gBattleExecBuffer; + +extern u8 sub_8077ABC(); +extern u8 sub_8077F68(); +extern u8 sub_8079E90(); +extern void sub_8033018(void); +extern void sub_8031794(); +extern u8 GetBankIdentity(u8); +extern void sub_8032984(u8, u16); +extern void sub_80333D4(void); +extern void sub_80312F0(struct Sprite *); +extern u8 sub_8046400(); +extern void sub_8032A08(); +extern void sub_8043DB0(); +extern void sub_8033160(void); +extern u8 sub_8135FBC(void); +extern u8 get_trainer_class_pic_index(void); +extern void sub_80313A0(struct Sprite *); +extern void sub_8032B4C(void); +extern void sub_8031A6C(u16, u8); +extern void sub_8032B84(void); +extern void sub_8078B34(struct Sprite *); +extern void sub_8032BBC(void); +extern void oamt_add_pos2_onto_pos1(); +extern void oamt_set_x3A_32(); +extern void sub_803311C(void); +extern void sub_8010384(struct Sprite *); +extern bool8 mplay_80342A4(u8); +extern u8 sub_8031720(); +extern void ExecuteMoveAnim(); +extern void sub_80326EC(); +extern void sub_8031F24(void); +extern void sub_80324BC(); +extern void BufferStringBattle(); +extern void sub_80331D0(void); +extern void sub_8036B0C(void); +extern u8 GetBankByPlayerAI(u8); +extern u8 sub_8036CD4(void); +extern void sub_80330C8(void); +extern void sub_8043D84(); +extern void sub_8045A5C(); +void sub_8033494(void); +extern void move_anim_start_t2_for_situation(); +extern void bx_blink_t7(void); +extern void sub_8047858(); +extern u8 GetBankSide(u8); +extern void sub_80E43C0(); +extern void sub_8044CA0(u8); +extern void nullsub_45(void); +extern void sub_8031B74(); +extern bool8 IsDoubleBattle(void); +extern void sub_8032E2C(void); +extern u8 sub_8078874(); +extern u8 move_anim_start_t3(); +extern void sub_80334C0(void); + +// this file's functions + +void OpponentBufferExecCompleted(void); +void OpponentBufferRunCommand(void); +u32 sub_8033598(u8, u8 *); +void sub_8033E24(u8); +void sub_803495C(u8, u8); +void sub_8034B74(void); +void sub_8035238(void); +void sub_8035C10(struct Sprite *); +void sub_8035C44(u8); +void sub_8035E2C(void); +void sub_80332D0(void); + +void OpponentHandleGetAttributes(void); +void OpponentHandlecmd1(void); +void OpponentHandleSetAttributes(void); +void OpponentHandlecmd3(void); +void OpponentHandleLoadPokeSprite(void); +void OpponentHandleSendOutPoke(void); +void OpponentHandleReturnPokeToBall(void); +void OpponentHandleTrainerThrow(void); +void OpponentHandleTrainerSlide(void); +void OpponentHandleTrainerSlideBack(void); +void OpponentHandlecmd10(void); +void OpponentHandlecmd11(void); +void OpponentHandlecmd12(void); +void OpponentHandleBallThrow(void); +void OpponentHandlePuase(void); +void OpponentHandleMoveAnimation(void); +void OpponentHandlePrintString(void); +void OpponentHandlePrintStringPlayerOnly(void); +void OpponentHandlecmd18(void); +void OpponentHandlecmd19(void); +void OpponentHandlecmd20(void); +void OpponentHandleOpenBag(void); +void OpponentHandlecmd22(void); +void OpponentHandlecmd23(void); +void OpponentHandleHealthBarUpdate(void); +void OpponentHandleExpBarUpdate(void); +void OpponentHandleStatusIconUpdate(void); +void OpponentHandleStatusAnimation(void); +void OpponentHandleStatusXor(void); +void OpponentHandlecmd29(void); +void OpponentHandleDMATransfer(void); +void OpponentHandlecmd31(void); +void OpponentHandlecmd32(void); +void OpponentHandlecmd33(void); +void OpponentHandlecmd34(void); +void OpponentHandlecmd35(void); +void OpponentHandlecmd36(void); +void OpponentHandlecmd37(void); +void OpponentHandlecmd38(void); +void OpponentHandlecmd39(void); +void OpponentHandlecmd40(void); +void OpponentHandleHitAnimation(void); +void OpponentHandlecmd42(void); +void OpponentHandleEffectivenessSound(void); +void OpponentHandlecmd44(void); +void OpponentHandleFaintingCry(void); +void OpponentHandleIntroSlide(void); +void OpponentHandleTrainerBallThrow(void); +void OpponentHandlecmd48(void); +void OpponentHandlecmd49(void); +void OpponentHandlecmd50(void); +void OpponentHandleSpriteInvisibility(void); +void OpponentHandleBattleAnimation(void); +void OpponentHandleLinkStandbyMsg(void); +void OpponentHandleResetActionMoveSelection(void); +void OpponentHandlecmd55(void); +void OpponentHandlecmd56(void); + +// const data +typedef void (*BattleBufferCmd) (void); +static const BattleBufferCmd gOpponentBufferCommands[] = +{ + OpponentHandleGetAttributes, + OpponentHandlecmd1, + OpponentHandleSetAttributes, + OpponentHandlecmd3, + OpponentHandleLoadPokeSprite, + OpponentHandleSendOutPoke, + OpponentHandleReturnPokeToBall, + OpponentHandleTrainerThrow, + OpponentHandleTrainerSlide, + OpponentHandleTrainerSlideBack, + OpponentHandlecmd10, + OpponentHandlecmd11, + OpponentHandlecmd12, + OpponentHandleBallThrow, + OpponentHandlePuase, + OpponentHandleMoveAnimation, + OpponentHandlePrintString, + OpponentHandlePrintStringPlayerOnly, + OpponentHandlecmd18, + OpponentHandlecmd19, + OpponentHandlecmd20, + OpponentHandleOpenBag, + OpponentHandlecmd22, + OpponentHandlecmd23, + OpponentHandleHealthBarUpdate, + OpponentHandleExpBarUpdate, + OpponentHandleStatusIconUpdate, + OpponentHandleStatusAnimation, + OpponentHandleStatusXor, + OpponentHandlecmd29, + OpponentHandleDMATransfer, + OpponentHandlecmd31, + OpponentHandlecmd32, + OpponentHandlecmd33, + OpponentHandlecmd34, + OpponentHandlecmd35, + OpponentHandlecmd36, + OpponentHandlecmd37, + OpponentHandlecmd38, + OpponentHandlecmd39, + OpponentHandlecmd40, + OpponentHandleHitAnimation, + OpponentHandlecmd42, + OpponentHandleEffectivenessSound, + OpponentHandlecmd44, + OpponentHandleFaintingCry, + OpponentHandleIntroSlide, + OpponentHandleTrainerBallThrow, + OpponentHandlecmd48, + OpponentHandlecmd49, + OpponentHandlecmd50, + OpponentHandleSpriteInvisibility, + OpponentHandleBattleAnimation, + OpponentHandleLinkStandbyMsg, + OpponentHandleResetActionMoveSelection, + OpponentHandlecmd55, + OpponentHandlecmd56, +}; + +static const u8 sUnknownBytes[] = {0xB0, 0xB0, 0xC8, 0x98, 0x28, 0x28, 0x28, 0x20}; + +// code + +void nullsub_45(void) +{ +} + +void SetBankFuncToOpponentBufferRunCommand(void) +{ + gBattleBankFunc[gActiveBank] = OpponentBufferRunCommand; +} + +void OpponentBufferRunCommand(void) +{ + if (gBattleExecBuffer & gBitTable[gActiveBank]) + { + if (gBattleBufferA[gActiveBank][0] <= 0x38) + gOpponentBufferCommands[gBattleBufferA[gActiveBank][0]](); + else + OpponentBufferExecCompleted(); + } +} + +void sub_8032B4C(void) +{ + if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy) + OpponentBufferExecCompleted(); +} + +// Duplicate of sub_8032B4C +void sub_8032B84(void) +{ + if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy) + OpponentBufferExecCompleted(); +} + +void sub_8032BBC(void) +{ + if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy) + { + sub_8031B74(gSprites[gObjectBankIDs[gActiveBank]].oam.affineParam); + gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum = gSprites[gObjectBankIDs[gActiveBank]].data5; + FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); + DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); + OpponentBufferExecCompleted(); + } +} + +void sub_8032C4C(void) +{ + if ((--ewram17810[gActiveBank].unk9) == 0xFF) + { + ewram17810[gActiveBank].unk9 = 0; + OpponentBufferExecCompleted(); + } +} + +void sub_8032C88(void) +{ + bool8 r6 = FALSE; + + if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI))) + { + if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy) + r6 = TRUE; + } + else + { + if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy + && gSprites[gHealthboxIDs[gActiveBank ^ 2]].callback == SpriteCallbackDummy) + r6 = TRUE; + } + if (IsCryPlayingOrClearCrySongs()) + r6 = FALSE; + + if (r6 && ewram17810[gActiveBank].unk1_0 && ewram17810[gActiveBank ^ 2].unk1_0) + { + ewram17810[gActiveBank].unk0_7 = 0; + ewram17810[gActiveBank].unk1_0 = 0; + ewram17810[gActiveBank ^ 2].unk0_7 = 0; + ewram17810[gActiveBank ^ 2].unk1_0 = 0; + FreeSpriteTilesByTag(0x27F9); + FreeSpritePaletteByTag(0x27F9); + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + m4aMPlayContinue(&gMPlay_BGM); + else + m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 256); + ewram17810[gActiveBank].unk9 = 3; + gBattleBankFunc[gActiveBank] = sub_8032C4C; + } +} + +void sub_8032E2C(void) +{ + if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7) + sub_8141828(gActiveBank, &gEnemyParty[gBattlePartyID[gActiveBank]]); + if (!ewram17810[gActiveBank ^ 2].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_7) + sub_8141828(gActiveBank ^ 2, &gEnemyParty[gBattlePartyID[gActiveBank ^ 2]]); + if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_3) + { + if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) + { + DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank ^ 2]]); + sub_8045A5C( + gHealthboxIDs[gActiveBank ^ 2], + &gEnemyParty[gBattlePartyID[gActiveBank ^ 2]], + 0); + sub_804777C(gActiveBank ^ 2); + sub_8043DFC(gHealthboxIDs[gActiveBank ^ 2]); + sub_8032984( + gActiveBank ^ 2, + GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank ^ 2]], MON_DATA_SPECIES)); + } + DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]); + sub_8045A5C( + gHealthboxIDs[gActiveBank], + &gEnemyParty[gBattlePartyID[gActiveBank]], + 0); + sub_804777C(gActiveBank); + sub_8043DFC(gHealthboxIDs[gActiveBank]); + sub_8032984( + gActiveBank, + GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES)); + + ewram17840.unk9_0 = 0; + gBattleBankFunc[gActiveBank] = sub_8032C88; + } +} + +void sub_8033018(void) +{ + if (gSprites[gObjectBankIDs[gActiveBank]].animEnded == TRUE + && gSprites[gObjectBankIDs[gActiveBank]].pos2.x == 0) + { + if (!ewram17810[gActiveBank].unk0_7) + { + sub_8141828(gActiveBank, &gEnemyParty[gBattlePartyID[gActiveBank]]); + return; + } + if (ewram17810[gActiveBank].unk1_0) + { + ewram17810[gActiveBank].unk0_7 = 0; + ewram17810[gActiveBank].unk1_0 = 0; + FreeSpriteTilesByTag(0x27F9); + FreeSpritePaletteByTag(0x27F9); + OpponentBufferExecCompleted(); + return; + } + } +} + +void sub_80330C8(void) +{ + s16 r4 = sub_8045C78(gActiveBank, gHealthboxIDs[gActiveBank], 0, 0); + + sub_8043DFC(gHealthboxIDs[gActiveBank]); + if (r4 != -1) + sub_80440EC(gHealthboxIDs[gActiveBank], r4, 0); + else + OpponentBufferExecCompleted(); +} + +void sub_803311C(void) +{ + if (!gSprites[gObjectBankIDs[gActiveBank]].inUse) + { + sub_8043DB0(gHealthboxIDs[gActiveBank]); + OpponentBufferExecCompleted(); + } +} + +void sub_8033160(void) +{ + if (!ewram17810[gActiveBank].unk0_6) + { + FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); + DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); + sub_8032A08(gActiveBank); + sub_8043DB0(gHealthboxIDs[gActiveBank]); + OpponentBufferExecCompleted(); + } +} + +void sub_80331D0(void) +{ + if (gUnknown_03004210.state == 0) + OpponentBufferExecCompleted(); +} + +void bx_blink_t7(void) +{ + u8 spriteId = gObjectBankIDs[gActiveBank]; + + if (gSprites[spriteId].data1 == 32) + { + gSprites[spriteId].data1 = 0; + gSprites[spriteId].invisible = FALSE; + gDoingBattleAnim = 0; + OpponentBufferExecCompleted(); + } + else + { + if (((u16)gSprites[spriteId].data1 % 4) == 0) + gSprites[spriteId].invisible ^= 1; + gSprites[spriteId].data1++; + } +} + +void sub_8033264(void) +{ + if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy) + { + if (ewram17800[gActiveBank].unk0_2) + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); + gBattleBankFunc[gActiveBank] = sub_80332D0; + } +} + +void sub_80332D0(void) +{ + if (!ewram17810[gActiveBank].unk0_6) + { + CreateTask(c3_0802FDF4, 10); + OpponentBufferExecCompleted(); + } +} + +void sub_8033308(void) +{ + if (ewram17810[gActiveBank].unk1_0) + { + ewram17810[gActiveBank].unk0_7 = 0; + ewram17810[gActiveBank].unk1_0 = 0; + FreeSpriteTilesByTag(0x27F9); + FreeSpritePaletteByTag(0x27F9); + StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 0); + sub_8045A5C( + gHealthboxIDs[gActiveBank], + &gEnemyParty[gBattlePartyID[gActiveBank]], + 0); + sub_804777C(gActiveBank); + sub_8043DFC(gHealthboxIDs[gActiveBank]); + sub_8031F88(gActiveBank); + gBattleBankFunc[gActiveBank] = sub_8033264; + } +} + +void sub_80333D4(void) +{ + if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7) + sub_8141828(gActiveBank, &gEnemyParty[gBattlePartyID[gActiveBank]]); + if (gSprites[gUnknown_0300434C[gActiveBank]].callback == SpriteCallbackDummy + && !ewram17810[gActiveBank].unk0_3) + { + DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]); + sub_8032984(gActiveBank, GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES)); + gBattleBankFunc[gActiveBank] = sub_8033308; + } +} + +void sub_8033494(void) +{ + if (!ewram17810[gActiveBank].unk0_4) + OpponentBufferExecCompleted(); +} + +void sub_80334C0(void) +{ + if (!ewram17810[gActiveBank].unk0_5) + OpponentBufferExecCompleted(); +} + +void OpponentBufferExecCompleted(void) +{ + gBattleBankFunc[gActiveBank] = OpponentBufferRunCommand; + gBattleExecBuffer &= ~gBitTable[gActiveBank]; +} + +void OpponentHandleGetAttributes(void) +{ + u8 buffer[256]; + int r6 = 0; + s32 i; + + if (gBattleBufferA[gActiveBank][2] == 0) + { + r6 = sub_8033598(gBattlePartyID[gActiveBank], buffer); + } + else + { + u8 r4 = gBattleBufferA[gActiveBank][2]; + + for (i = 0; i < 6; i++) + { + if (r4 & 1) + r6 += sub_8033598(i, buffer + r6); + r4 >>= 1; + } + } + Emitcmd29(1, r6, buffer); + OpponentBufferExecCompleted(); +} + +u32 sub_8033598(u8 a, u8 *buffer) +{ + struct BattlePokemon battlePokemon; + struct UnknownStruct3 moveData; + u8 nickname[20]; + u8 *src; + s16 data16; + u32 data32; + s32 size = 0; + + switch (gBattleBufferA[gActiveBank][1]) + { + case 0: + battlePokemon.species = GetMonData(&gEnemyParty[a], MON_DATA_SPECIES); + battlePokemon.item = GetMonData(&gEnemyParty[a], MON_DATA_HELD_ITEM); + for (size = 0; size < 4; size++) + { + battlePokemon.moves[size] = GetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + size); + battlePokemon.pp[size] = GetMonData(&gEnemyParty[a], MON_DATA_PP1 + size); + } + battlePokemon.ppBonuses = GetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES); + battlePokemon.friendship = GetMonData(&gEnemyParty[a], MON_DATA_FRIENDSHIP); + battlePokemon.experience = GetMonData(&gEnemyParty[a], MON_DATA_EXP); + battlePokemon.hpIV = GetMonData(&gEnemyParty[a], MON_DATA_HP_IV); + battlePokemon.attackIV = GetMonData(&gEnemyParty[a], MON_DATA_ATK_IV); + battlePokemon.defenseIV = GetMonData(&gEnemyParty[a], MON_DATA_DEF_IV); + battlePokemon.speedIV = GetMonData(&gEnemyParty[a], MON_DATA_SPD_IV); + battlePokemon.spAttackIV = GetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV); + battlePokemon.spDefenseIV = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV); + battlePokemon.personality = GetMonData(&gEnemyParty[a], MON_DATA_PERSONALITY); + battlePokemon.status1 = GetMonData(&gEnemyParty[a], MON_DATA_STATUS); + battlePokemon.level = GetMonData(&gEnemyParty[a], MON_DATA_LEVEL); + battlePokemon.hp = GetMonData(&gEnemyParty[a], MON_DATA_HP); + battlePokemon.maxHP = GetMonData(&gEnemyParty[a], MON_DATA_MAX_HP); + battlePokemon.attack = GetMonData(&gEnemyParty[a], MON_DATA_ATK); + battlePokemon.defense = GetMonData(&gEnemyParty[a], MON_DATA_DEF); + battlePokemon.speed = GetMonData(&gEnemyParty[a], MON_DATA_SPD); + battlePokemon.spAttack = GetMonData(&gEnemyParty[a], MON_DATA_SPATK); + battlePokemon.spDefense = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF); + battlePokemon.isEgg = GetMonData(&gEnemyParty[a], MON_DATA_IS_EGG); + battlePokemon.altAbility = GetMonData(&gEnemyParty[a], MON_DATA_ALT_ABILITY); + battlePokemon.otId = GetMonData(&gEnemyParty[a], MON_DATA_OT_ID); + GetMonData(&gEnemyParty[a], MON_DATA_NICKNAME, nickname); + StringCopy10(battlePokemon.nickname, nickname); + GetMonData(&gEnemyParty[a], MON_DATA_OT_NAME, battlePokemon.otName); + src = (u8 *)&battlePokemon; + for (size = 0; size < sizeof(battlePokemon); size++) + buffer[size] = src[size]; + break; + case 1: + data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPECIES); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 2: + data16 = GetMonData(&gEnemyParty[a], MON_DATA_HELD_ITEM); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 3: + for (size = 0; size < 4; size++) + { + moveData.moves[size] = GetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + size); + moveData.pp[size] = GetMonData(&gEnemyParty[a], MON_DATA_PP1 + size); + } + moveData.ppBonuses = GetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES); + src = (u8 *)&moveData; + for (size = 0; size < sizeof(moveData); size++) + buffer[size] = src[size]; + break; + case 4: + case 5: + case 6: + case 7: + data16 = GetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - 4); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 8: + for (size = 0; size < 4; size++) + buffer[size] = GetMonData(&gEnemyParty[a], MON_DATA_PP1 + size); + buffer[size] = GetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES); + size++; + break; + case 9: + case 10: + case 11: + case 12: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - 9); + size = 1; + break; + case 17: + data32 = GetMonData(&gEnemyParty[a], MON_DATA_OT_ID); + buffer[0] = (data32 & 0x000000FF); + buffer[1] = (data32 & 0x0000FF00) >> 8; + buffer[2] = (data32 & 0x00FF0000) >> 16; + size = 3; + break; + case 18: + data32 = GetMonData(&gEnemyParty[a], MON_DATA_EXP); + buffer[0] = (data32 & 0x000000FF); + buffer[1] = (data32 & 0x0000FF00) >> 8; + buffer[2] = (data32 & 0x00FF0000) >> 16; + size = 3; + break; + case 19: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_HP_EV); + size = 1; + break; + case 20: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_ATK_EV); + size = 1; + break; + case 21: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_DEF_EV); + size = 1; + break; + case 22: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPD_EV); + size = 1; + break; + case 23: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPATK_EV); + size = 1; + break; + case 24: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF_EV); + size = 1; + break; + case 25: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_FRIENDSHIP); + size = 1; + break; + case 26: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_POKERUS); + size = 1; + break; + case 27: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_MET_LOCATION); + size = 1; + break; + case 28: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_MET_LEVEL); + size = 1; + break; + case 29: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_MET_GAME); + size = 1; + break; + case 30: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_POKEBALL); + size = 1; + break; + case 31: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_HP_IV); + buffer[1] = GetMonData(&gEnemyParty[a], MON_DATA_ATK_IV); + buffer[2] = GetMonData(&gEnemyParty[a], MON_DATA_DEF_IV); + buffer[3] = GetMonData(&gEnemyParty[a], MON_DATA_SPD_IV); + buffer[4] = GetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV); + buffer[5] = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV); + size = 6; + break; + case 32: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_HP_IV); + size = 1; + break; + case 33: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_ATK_IV); + size = 1; + break; + case 34: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_DEF_IV); + size = 1; + break; + case 35: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPD_IV); + size = 1; + break; + case 36: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV); + size = 1; + break; + case 37: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV); + size = 1; + break; + case 38: + data32 = GetMonData(&gEnemyParty[a], MON_DATA_PERSONALITY); + buffer[0] = (data32 & 0x000000FF); + buffer[1] = (data32 & 0x0000FF00) >> 8; + buffer[2] = (data32 & 0x00FF0000) >> 16; + buffer[3] = (data32 & 0xFF000000) >> 24; + size = 4; + break; + case 39: + data16 = GetMonData(&gEnemyParty[a], MON_DATA_CHECKSUM); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 40: + data32 = GetMonData(&gEnemyParty[a], MON_DATA_STATUS); + buffer[0] = (data32 & 0x000000FF); + buffer[1] = (data32 & 0x0000FF00) >> 8; + buffer[2] = (data32 & 0x00FF0000) >> 16; + buffer[3] = (data32 & 0xFF000000) >> 24; + size = 4; + break; + case 41: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_LEVEL); + size = 1; + break; + case 42: + data16 = GetMonData(&gEnemyParty[a], MON_DATA_HP); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 43: + data16 = GetMonData(&gEnemyParty[a], MON_DATA_MAX_HP); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 44: + data16 = GetMonData(&gEnemyParty[a], MON_DATA_ATK); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 45: + data16 = GetMonData(&gEnemyParty[a], MON_DATA_DEF); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 46: + data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPD); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 47: + data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPATK); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 48: + data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 49: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_COOL); + size = 1; + break; + case 50: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_BEAUTY); + size = 1; + break; + case 51: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_CUTE); + size = 1; + break; + case 52: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SMART); + size = 1; + break; + case 53: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_TOUGH); + size = 1; + break; + case 54: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SHEEN); + size = 1; + break; + case 55: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_COOL_RIBBON); + size = 1; + break; + case 56: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_BEAUTY_RIBBON); + size = 1; + break; + case 57: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_CUTE_RIBBON); + size = 1; + break; + case 58: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SMART_RIBBON); + size = 1; + break; + case 59: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_TOUGH_RIBBON); + size = 1; + break; + } + return size; +} + +void OpponentHandlecmd1(void) +{ + struct BattlePokemon buffer; + u8 *src = (u8 *)&gEnemyParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1]; + u8 *dst = (u8 *)&buffer + gBattleBufferA[gActiveBank][1]; + u8 i; + + for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++) + dst[i] = src[i]; + Emitcmd29(1, gBattleBufferA[gActiveBank][2], dst); + OpponentBufferExecCompleted(); +} + +void OpponentHandleSetAttributes(void) +{ + u8 i; + u8 r4; + + if (gBattleBufferA[gActiveBank][2] == 0) + { + sub_8033E24(gBattlePartyID[gActiveBank]); + } + else + { + r4 = gBattleBufferA[gActiveBank][2]; + for (i = 0; i < 6; i++) + { + if (r4 & 1) + sub_8033E24(i); + r4 >>= 1; + } + } + OpponentBufferExecCompleted(); +} + +void sub_8033E24(u8 a) +{ + struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBank][3]; + struct UnknownStruct3 *moveData = (struct UnknownStruct3 *)&gBattleBufferA[gActiveBank][3]; + s32 i; + + switch (gBattleBufferA[gActiveBank][1]) + { + case 0: + { + u8 iv; + + SetMonData(&gEnemyParty[a], MON_DATA_SPECIES, (u8 *)&battlePokemon->species); + SetMonData(&gEnemyParty[a], MON_DATA_HELD_ITEM, (u8 *)&battlePokemon->item); + for (i = 0; i < 4; i++) + { + SetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + i, (u8 *)&battlePokemon->moves[i]); + SetMonData(&gEnemyParty[a], MON_DATA_PP1 + i, (u8 *)&battlePokemon->pp[i]); + } + SetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES, (u8 *)&battlePokemon->ppBonuses); + SetMonData(&gEnemyParty[a], MON_DATA_FRIENDSHIP, (u8 *)&battlePokemon->friendship); + SetMonData(&gEnemyParty[a], MON_DATA_EXP, (u8 *)&battlePokemon->experience); + iv = battlePokemon->hpIV; + SetMonData(&gEnemyParty[a], MON_DATA_HP_IV, (u8 *)&iv); + iv = battlePokemon->attackIV; + SetMonData(&gEnemyParty[a], MON_DATA_ATK_IV, (u8 *)&iv); + iv = battlePokemon->defenseIV; + SetMonData(&gEnemyParty[a], MON_DATA_DEF_IV, (u8 *)&iv); + iv = battlePokemon->speedIV; + SetMonData(&gEnemyParty[a], MON_DATA_SPD_IV, (u8 *)&iv); + iv = battlePokemon->spAttackIV; + SetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV, (u8 *)&iv); + iv = battlePokemon->spDefenseIV; + SetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV, (u8 *)&iv); + SetMonData(&gEnemyParty[a], MON_DATA_PERSONALITY, (u8 *)&battlePokemon->personality); + SetMonData(&gEnemyParty[a], MON_DATA_STATUS, (u8 *)&battlePokemon->status1); + SetMonData(&gEnemyParty[a], MON_DATA_LEVEL, (u8 *)&battlePokemon->level); + SetMonData(&gEnemyParty[a], MON_DATA_HP, (u8 *)&battlePokemon->hp); + SetMonData(&gEnemyParty[a], MON_DATA_MAX_HP, (u8 *)&battlePokemon->maxHP); + SetMonData(&gEnemyParty[a], MON_DATA_ATK, (u8 *)&battlePokemon->attack); + SetMonData(&gEnemyParty[a], MON_DATA_DEF, (u8 *)&battlePokemon->defense); + SetMonData(&gEnemyParty[a], MON_DATA_SPD, (u8 *)&battlePokemon->speed); + SetMonData(&gEnemyParty[a], MON_DATA_SPATK, (u8 *)&battlePokemon->spAttack); + SetMonData(&gEnemyParty[a], MON_DATA_SPDEF, (u8 *)&battlePokemon->spDefense); + } + break; + case 1: + SetMonData(&gEnemyParty[a], MON_DATA_SPECIES, &gBattleBufferA[gActiveBank][3]); + break; + case 2: + SetMonData(&gEnemyParty[a], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBank][3]); + break; + case 3: + for (i = 0; i < 4; i++) + { + SetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + i, (u8 *)&moveData->moves[i]); + SetMonData(&gEnemyParty[a], MON_DATA_PP1 + i, (u8 *)&moveData->pp[i]); + } + SetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES, &moveData->ppBonuses); + break; + case 4: + case 5: + case 6: + case 7: + SetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - 4, &gBattleBufferA[gActiveBank][3]); + break; + case 8: + SetMonData(&gEnemyParty[a], MON_DATA_PP1, &gBattleBufferA[gActiveBank][3]); + SetMonData(&gEnemyParty[a], MON_DATA_PP2, &gBattleBufferA[gActiveBank][4]); + SetMonData(&gEnemyParty[a], MON_DATA_PP3, &gBattleBufferA[gActiveBank][5]); + SetMonData(&gEnemyParty[a], MON_DATA_PP4, &gBattleBufferA[gActiveBank][6]); + SetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBank][7]); + break; + case 9: + case 10: + case 11: + case 12: + SetMonData(&gEnemyParty[a], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - 9, &gBattleBufferA[gActiveBank][3]); + break; + case 17: + SetMonData(&gEnemyParty[a], MON_DATA_OT_ID, &gBattleBufferA[gActiveBank][3]); + break; + case 18: + SetMonData(&gEnemyParty[a], MON_DATA_EXP, &gBattleBufferA[gActiveBank][3]); + break; + case 19: + SetMonData(&gEnemyParty[a], MON_DATA_HP_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 20: + SetMonData(&gEnemyParty[a], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 21: + SetMonData(&gEnemyParty[a], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 22: + SetMonData(&gEnemyParty[a], MON_DATA_SPD_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 23: + SetMonData(&gEnemyParty[a], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 24: + SetMonData(&gEnemyParty[a], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 25: + SetMonData(&gEnemyParty[a], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBank][3]); + break; + case 26: + SetMonData(&gEnemyParty[a], MON_DATA_POKERUS, &gBattleBufferA[gActiveBank][3]); + break; + case 27: + SetMonData(&gEnemyParty[a], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBank][3]); + break; + case 28: + SetMonData(&gEnemyParty[a], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBank][3]); + break; + case 29: + SetMonData(&gEnemyParty[a], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBank][3]); + break; + case 30: + SetMonData(&gEnemyParty[a], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBank][3]); + break; + case 31: + SetMonData(&gEnemyParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]); + SetMonData(&gEnemyParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][4]); + SetMonData(&gEnemyParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][5]); + SetMonData(&gEnemyParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][6]); + SetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][7]); + SetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][8]); + break; + case 32: + SetMonData(&gEnemyParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 33: + SetMonData(&gEnemyParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 34: + SetMonData(&gEnemyParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 35: + SetMonData(&gEnemyParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 36: + SetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 37: + SetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 38: + SetMonData(&gEnemyParty[a], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBank][3]); + break; + case 39: + SetMonData(&gEnemyParty[a], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBank][3]); + break; + case 40: + SetMonData(&gEnemyParty[a], MON_DATA_STATUS, &gBattleBufferA[gActiveBank][3]); + break; + case 41: + SetMonData(&gEnemyParty[a], MON_DATA_LEVEL, &gBattleBufferA[gActiveBank][3]); + break; + case 42: + SetMonData(&gEnemyParty[a], MON_DATA_HP, &gBattleBufferA[gActiveBank][3]); + break; + case 43: + SetMonData(&gEnemyParty[a], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBank][3]); + break; + case 44: + SetMonData(&gEnemyParty[a], MON_DATA_ATK, &gBattleBufferA[gActiveBank][3]); + break; + case 45: + SetMonData(&gEnemyParty[a], MON_DATA_DEF, &gBattleBufferA[gActiveBank][3]); + break; + case 46: + SetMonData(&gEnemyParty[a], MON_DATA_SPD, &gBattleBufferA[gActiveBank][3]); + break; + case 47: + SetMonData(&gEnemyParty[a], MON_DATA_SPATK, &gBattleBufferA[gActiveBank][3]); + break; + case 48: + SetMonData(&gEnemyParty[a], MON_DATA_SPDEF, &gBattleBufferA[gActiveBank][3]); + break; + case 49: + SetMonData(&gEnemyParty[a], MON_DATA_COOL, &gBattleBufferA[gActiveBank][3]); + break; + case 50: + SetMonData(&gEnemyParty[a], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBank][3]); + break; + case 51: + SetMonData(&gEnemyParty[a], MON_DATA_CUTE, &gBattleBufferA[gActiveBank][3]); + break; + case 52: + SetMonData(&gEnemyParty[a], MON_DATA_SMART, &gBattleBufferA[gActiveBank][3]); + break; + case 53: + SetMonData(&gEnemyParty[a], MON_DATA_TOUGH, &gBattleBufferA[gActiveBank][3]); + break; + case 54: + SetMonData(&gEnemyParty[a], MON_DATA_SHEEN, &gBattleBufferA[gActiveBank][3]); + break; + case 55: + SetMonData(&gEnemyParty[a], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBank][3]); + break; + case 56: + SetMonData(&gEnemyParty[a], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBank][3]); + break; + case 57: + SetMonData(&gEnemyParty[a], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBank][3]); + break; + case 58: + SetMonData(&gEnemyParty[a], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBank][3]); + break; + case 59: + SetMonData(&gEnemyParty[a], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBank][3]); + break; + } +} + +void OpponentHandlecmd3(void) +{ + u8 *dst; + u8 i; + + dst = (u8 *)&gEnemyParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1]; + for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++) + dst[i] = gBattleBufferA[gActiveBank][3 + i]; + OpponentBufferExecCompleted(); +} + +void OpponentHandleLoadPokeSprite(void) +{ + u16 species = GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES); + + sub_8031794(&gEnemyParty[gBattlePartyID[gActiveBank]], gActiveBank); + GetMonSpriteTemplate_803C56C(species, GetBankIdentity(gActiveBank)); + gObjectBankIDs[gActiveBank] = CreateSprite( + &gUnknown_02024E8C, + sub_8077ABC(gActiveBank, 2), + sub_8077F68(gActiveBank), + sub_8079E90(gActiveBank)); + gSprites[gObjectBankIDs[gActiveBank]].pos2.x = -240; + gSprites[gObjectBankIDs[gActiveBank]].data0 = gActiveBank; + gSprites[gObjectBankIDs[gActiveBank]].data2 = species; + gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank; + StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], gBattleMonForms[gActiveBank]); + sub_8032984(gActiveBank, GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES)); + gBattleBankFunc[gActiveBank] = sub_8033018; +} + +void OpponentHandleSendOutPoke(void) +{ + gBattlePartyID[gActiveBank] = gBattleBufferA[gActiveBank][1]; + + sub_803495C(gActiveBank, gBattleBufferA[gActiveBank][2]); + gBattleBankFunc[gActiveBank] = sub_80333D4; +} + +void sub_803495C(u8 a, u8 b) +{ + u16 species; + + sub_8032AA8(a, b); + gBattlePartyID[a] = gBattleBufferA[a][1]; + species = GetMonData(&gEnemyParty[gBattlePartyID[a]], MON_DATA_SPECIES); + gUnknown_0300434C[a] = CreateInvisibleSpriteWithCallback(sub_80312F0); + sub_8031794(&gEnemyParty[gBattlePartyID[a]], a); + GetMonSpriteTemplate_803C56C(species, GetBankIdentity(a)); + gObjectBankIDs[a] = CreateSprite( + &gUnknown_02024E8C, + sub_8077ABC(a, 2), + sub_8077F68(a), + sub_8079E90(a)); + gSprites[gObjectBankIDs[a]].data0 = a; + gSprites[gObjectBankIDs[a]].data2 = species; + gSprites[gUnknown_0300434C[a]].data1 = gObjectBankIDs[a]; + gSprites[gObjectBankIDs[a]].oam.paletteNum = a; + StartSpriteAnim(&gSprites[gObjectBankIDs[a]], gBattleMonForms[a]); + gSprites[gObjectBankIDs[a]].invisible = TRUE; + gSprites[gObjectBankIDs[a]].callback = SpriteCallbackDummy; + gSprites[gUnknown_0300434C[a]].data0 = sub_8046400(0, 0xFE); +} + +void OpponentHandleReturnPokeToBall(void) +{ + if (gBattleBufferA[gActiveBank][1] == 0) + { + ewram17810[gActiveBank].unk4 = 0; + gBattleBankFunc[gActiveBank] = sub_8034B74; + } + else + { + FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); + DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); + sub_8032A08(gActiveBank); + sub_8043DB0(gHealthboxIDs[gActiveBank]); + OpponentBufferExecCompleted(); + } +} + +void sub_8034B74(void) +{ + switch (ewram17810[gActiveBank].unk4) + { + case 0: + if (ewram17800[gActiveBank].unk0_2) + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); + ewram17810[gActiveBank].unk4 = 1; + break; + case 1: + if (!ewram17810[gActiveBank].unk0_6) + { + ewram17810[gActiveBank].unk4 = 0; + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 2); + gBattleBankFunc[gActiveBank] = sub_8033160; + } + break; + } +} + +void OpponentHandleTrainerThrow(void) +{ + u32 trainerPicIndex; + + if (gTrainerBattleOpponent == 0x400) + trainerPicIndex = GetSecretBaseTrainerPicIndex(); + else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) + trainerPicIndex = get_trainer_class_pic_index(); + else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER) + trainerPicIndex = sub_8135FBC(); + else + trainerPicIndex = gTrainers[gTrainerBattleOpponent].trainerPic; + + sub_8031A6C(trainerPicIndex, gActiveBank); + GetMonSpriteTemplate_803C5A0(trainerPicIndex, GetBankIdentity(gActiveBank)); + gObjectBankIDs[gActiveBank] = CreateSprite( + &gUnknown_02024E8C, + 0xB0, + 40 + 4 * (8 - gTrainerFrontPicCoords[trainerPicIndex].coords), + sub_8079E90(gActiveBank)); + gSprites[gObjectBankIDs[gActiveBank]].pos2.x = -240; + gSprites[gObjectBankIDs[gActiveBank]].data0 = 2; + gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicIndex].tag); + gSprites[gObjectBankIDs[gActiveBank]].data5 = gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum; + gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[trainerPicIndex].tag); + gSprites[gObjectBankIDs[gActiveBank]].oam.affineParam = trainerPicIndex; + gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0; + gBattleBankFunc[gActiveBank] = sub_8032B4C; +} + +void OpponentHandleTrainerSlide(void) +{ + u32 trainerPicIndex; + + if (gTrainerBattleOpponent == 0x400) + trainerPicIndex = GetSecretBaseTrainerPicIndex(); + else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) + trainerPicIndex = get_trainer_class_pic_index(); + else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER) + trainerPicIndex = sub_8135FBC(); + else + trainerPicIndex = gTrainers[gTrainerBattleOpponent].trainerPic; + + sub_8031A6C(trainerPicIndex, gActiveBank); + GetMonSpriteTemplate_803C5A0(trainerPicIndex, GetBankIdentity(gActiveBank)); + gObjectBankIDs[gActiveBank] = CreateSprite( + &gUnknown_02024E8C, + 0xB0, + 40 + 4 * (8 - gTrainerFrontPicCoords[trainerPicIndex].coords), + 0x1E); + gSprites[gObjectBankIDs[gActiveBank]].pos2.x = 96; + gSprites[gObjectBankIDs[gActiveBank]].pos1.x += 32; + gSprites[gObjectBankIDs[gActiveBank]].data0 = -2; + gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicIndex].tag); + gSprites[gObjectBankIDs[gActiveBank]].data5 = gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum; + gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[trainerPicIndex].tag); + gSprites[gObjectBankIDs[gActiveBank]].oam.affineParam = trainerPicIndex; + gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0; + gBattleBankFunc[gActiveBank] = sub_8032B84; +} + +void OpponentHandleTrainerSlideBack(void) +{ + oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]); + gSprites[gObjectBankIDs[gActiveBank]].data0 = 35; + gSprites[gObjectBankIDs[gActiveBank]].data2 = 280; + gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; + gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34; + oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], SpriteCallbackDummy); + gBattleBankFunc[gActiveBank] = sub_8032BBC; +} + +void OpponentHandlecmd10(void) +{ + if (ewram17810[gActiveBank].unk4 == 0) + { + if (ewram17800[gActiveBank].unk0_2) + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); + ewram17810[gActiveBank].unk4++; + } + else if (!ewram17810[gActiveBank].unk0_6) + { + ewram17810[gActiveBank].unk4 = 0; + PlaySE12WithPanning(SE_POKE_DEAD, 63); + gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8010384; + gBattleBankFunc[gActiveBank] = sub_803311C; + } +} + +void OpponentHandlecmd11(void) +{ + OpponentBufferExecCompleted(); +} + +void OpponentHandlecmd12(void) +{ + OpponentBufferExecCompleted(); +} + +void OpponentHandleBallThrow(void) +{ + OpponentBufferExecCompleted(); +} + +void OpponentHandlePuase(void) +{ + OpponentBufferExecCompleted(); +} + +void OpponentHandleMoveAnimation(void) +{ + if (!mplay_80342A4(gActiveBank)) + { + u32 r0 = gBattleBufferA[gActiveBank][1] + | (gBattleBufferA[gActiveBank][2] << 8); + + gUnknown_0202F7C4 = gBattleBufferA[gActiveBank][3]; + gMovePowerMoveAnim = gBattleBufferA[gActiveBank][4] + | (gBattleBufferA[gActiveBank][5] << 8); + gMoveDmgMoveAnim = gBattleBufferA[gActiveBank][6] + | (gBattleBufferA[gActiveBank][7] << 8) + | (gBattleBufferA[gActiveBank][8] << 16) + | (gBattleBufferA[gActiveBank][9] << 24); + gHappinessMoveAnim = gBattleBufferA[gActiveBank][10]; + gWeatherMoveAnim = gBattleBufferA[gActiveBank][12] + | (gBattleBufferA[gActiveBank][13] << 8); + gDisableStructMoveAnim = (u32 *)&gBattleBufferA[gActiveBank][16]; + gPID_perBank[gActiveBank] = *gDisableStructMoveAnim; + + // Dead code. sub_8031720 always returns 0. + if (sub_8031720(r0, gUnknown_0202F7C4) != 0) + { + OpponentBufferExecCompleted(); + } + else + { + ewram17810[gActiveBank].unk4 = 0; + gBattleBankFunc[gActiveBank] = sub_8035238; + } + } +} + +void sub_8035238(void) +{ + u16 r4 = gBattleBufferA[gActiveBank][1] + | (gBattleBufferA[gActiveBank][2] << 8); + u8 r7 = gBattleBufferA[gActiveBank][11]; + + switch (ewram17810[gActiveBank].unk4) + { + case 0: + if (ewram17800[gActiveBank].unk0_2 && !ewram17800[gActiveBank].unk0_3) + { + ewram17800[gActiveBank].unk0_3 = 1; + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); + } + ewram17810[gActiveBank].unk4 = 1; + break; + case 1: + if (!ewram17810[gActiveBank].unk0_6) + { + sub_80326EC(0); + ExecuteMoveAnim(r4); + ewram17810[gActiveBank].unk4 = 2; + } + break; + case 2: + gAnimScriptCallback(); + if (!gAnimScriptActive) + { + sub_80326EC(1); + if ((ewram17800[gActiveBank].unk0_2) && r7 <= 1) + { + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); + ewram17800[gActiveBank].unk0_3 = 0; + } + ewram17810[gActiveBank].unk4 = 3; + } + break; + case 3: + if (!ewram17810[gActiveBank].unk0_6) + { + sub_8031F24(); + sub_80324BC( + gActiveBank, + gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8)); + ewram17810[gActiveBank].unk4 = 0; + OpponentBufferExecCompleted(); + } + break; + } +} + +void OpponentHandlePrintString(void) +{ + gUnknown_030042A4 = 0; + gUnknown_030042A0 = 0; + BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]); + sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + gBattleBankFunc[gActiveBank] = sub_80331D0; +} + +void OpponentHandlePrintStringPlayerOnly(void) +{ + OpponentBufferExecCompleted(); +} + +void OpponentHandlecmd18(void) +{ + sub_8036B0C(); + OpponentBufferExecCompleted(); +} + +void OpponentHandlecmd19(void) +{ + OpponentBufferExecCompleted(); +} + +#ifdef NONMATCHING +void OpponentHandlecmd20(void) +{ + u16 r4; + // Needed to match closer + struct {u16 moves[4];} *r5 = (void *)&gBattleBufferA[gActiveBank][4]; + + if (gBattleTypeFlags & 0x498) + { + BattleAI_SetupAIData(); + r4 = BattleAI_GetAIActionToUse(); + switch (r4) + { + case 5: + Emitcmd33(1, 4, 0); + break; + case 4: + Emitcmd33(1, 3, 0); + break; + default: + if (gBattleMoves[r5->moves[r4]].target & 0x12) + gBankTarget = gActiveBank; + if (gBattleMoves[r5->moves[r4]].target & 8) + { + gBankTarget = GetBankByPlayerAI(0); + if (gAbsentBankFlags & gBitTable[gBankTarget]) + gBankTarget = GetBankByPlayerAI(2); + } + r4 |= gBankTarget << 8; + Emitcmd33(1, 10, r4); + break; + } + OpponentBufferExecCompleted(); + } + else + { + u16 r2; + + do + { + // Can't for the life of me get this to match. + r4 = Random() % 4; + r2 = r5->moves[r4]; + } while (r2 == 0); + + if (gBattleMoves[r2].target & 0x12) + { + r4 |= gActiveBank << 8; + Emitcmd33(1, 10, r4); + } + else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + u16 r2 = GetBankByPlayerAI(Random() & 2) << 8; + + Emitcmd33(1, 10, r4 | r2); + } + else + { + u16 r2 = GetBankByPlayerAI(0) << 8; + + Emitcmd33(1, 10, r4 | r2); + } + OpponentBufferExecCompleted(); + } +} +#else +__attribute__((naked)) +void OpponentHandlecmd20(void) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + ldr r6, _0803545C @ =gActiveBank\n\ + ldrb r0, [r6]\n\ + lsls r0, 9\n\ + ldr r1, _08035460 @ =gUnknown_02023A64\n\ + adds r5, r0, r1\n\ + ldr r0, _08035464 @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + movs r0, 0x93\n\ + lsls r0, 3\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080354F8\n\ + bl BattleAI_SetupAIData\n\ + bl BattleAI_GetAIActionToUse\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + cmp r4, 0x4\n\ + beq _08035468\n\ + cmp r4, 0x5\n\ + bne _08035474\n\ + movs r0, 0x1\n\ + movs r1, 0x4\n\ + b _0803546C\n\ + .align 2, 0\n\ +_0803545C: .4byte gActiveBank\n\ +_08035460: .4byte gUnknown_02023A64\n\ +_08035464: .4byte gBattleTypeFlags\n\ +_08035468:\n\ + movs r0, 0x1\n\ + movs r1, 0x3\n\ +_0803546C:\n\ + movs r2, 0\n\ + bl Emitcmd33\n\ + b _080354E0\n\ +_08035474:\n\ + ldr r3, _080354E8 @ =gBattleMoves\n\ + lsls r0, r4, 1\n\ + adds r2, r5, r0\n\ + ldrh r1, [r2]\n\ + lsls r0, r1, 1\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r3\n\ + ldrb r1, [r0, 0x6]\n\ + movs r0, 0x12\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08035494\n\ + ldr r1, _080354EC @ =gBankTarget\n\ + ldrb r0, [r6]\n\ + strb r0, [r1]\n\ +_08035494:\n\ + ldrh r1, [r2]\n\ + lsls r0, r1, 1\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r3\n\ + ldrb r1, [r0, 0x6]\n\ + movs r0, 0x8\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080354CE\n\ + movs r0, 0\n\ + bl GetBankByPlayerAI\n\ + ldr r5, _080354EC @ =gBankTarget\n\ + strb r0, [r5]\n\ + ldr r0, _080354F0 @ =gAbsentBankFlags\n\ + ldrb r1, [r0]\n\ + ldr r2, _080354F4 @ =gBitTable\n\ + ldrb r0, [r5]\n\ + lsls r0, 2\n\ + adds r0, r2\n\ + ldr r0, [r0]\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + beq _080354CE\n\ + movs r0, 0x2\n\ + bl GetBankByPlayerAI\n\ + strb r0, [r5]\n\ +_080354CE:\n\ + ldr r0, _080354EC @ =gBankTarget\n\ + ldrb r0, [r0]\n\ + lsls r0, 8\n\ + orrs r4, r0\n\ + movs r0, 0x1\n\ + movs r1, 0xA\n\ + adds r2, r4, 0\n\ + bl Emitcmd33\n\ +_080354E0:\n\ + bl OpponentBufferExecCompleted\n\ + b _0803558A\n\ + .align 2, 0\n\ +_080354E8: .4byte gBattleMoves\n\ +_080354EC: .4byte gBankTarget\n\ +_080354F0: .4byte gAbsentBankFlags\n\ +_080354F4: .4byte gBitTable\n\ +_080354F8:\n\ + movs r6, 0x3\n\ +_080354FA:\n\ + bl Random\n\ + adds r4, r0, 0\n\ + ands r4, r6\n\ + lsls r0, r4, 1\n\ + adds r0, r5, r0\n\ + ldrh r2, [r0]\n\ + cmp r2, 0\n\ + beq _080354FA\n\ + ldr r1, _08035534 @ =gBattleMoves\n\ + lsls r0, r2, 1\n\ + adds r0, r2\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldrb r1, [r0, 0x6]\n\ + movs r0, 0x12\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0803553C\n\ + ldr r0, _08035538 @ =gActiveBank\n\ + ldrb r0, [r0]\n\ + lsls r0, 8\n\ + orrs r4, r0\n\ + movs r0, 0x1\n\ + movs r1, 0xA\n\ + adds r2, r4, 0\n\ + bl Emitcmd33\n\ + b _08035586\n\ + .align 2, 0\n\ +_08035534: .4byte gBattleMoves\n\ +_08035538: .4byte gActiveBank\n\ +_0803553C:\n\ + ldr r0, _0803556C @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08035570\n\ + bl Random\n\ + movs r1, 0x2\n\ + ands r1, r0\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + adds r0, r1, 0\n\ + bl GetBankByPlayerAI\n\ + adds r2, r0, 0\n\ + lsls r2, 24\n\ + lsrs r2, 16\n\ + orrs r2, r4\n\ + movs r0, 0x1\n\ + movs r1, 0xA\n\ + bl Emitcmd33\n\ + b _08035586\n\ + .align 2, 0\n\ +_0803556C: .4byte gBattleTypeFlags\n\ +_08035570:\n\ + movs r0, 0\n\ + bl GetBankByPlayerAI\n\ + adds r2, r0, 0\n\ + lsls r2, 24\n\ + lsrs r2, 16\n\ + orrs r2, r4\n\ + movs r0, 0x1\n\ + movs r1, 0xA\n\ + bl Emitcmd33\n\ +_08035586:\n\ + bl OpponentBufferExecCompleted\n\ +_0803558A:\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided\n"); +} +#endif + +void OpponentHandleOpenBag(void) +{ + // What is this? + Emitcmd35(1, ewram[0x160D4 + gActiveBank / 2 * 2]); + OpponentBufferExecCompleted(); +} + +void OpponentHandlecmd22(void) +{ + s32 r4; + + if (ewram[0x160C8 + GetBankIdentity(gActiveBank) / 2] == 6) + { + u8 r6; + u8 r5; + + r4 = sub_8036CD4(); + if (r4 == 6) + { + if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + { + r5 = GetBankByPlayerAI(1); + r6 = r5; + } + else + { + r6 = GetBankByPlayerAI(1); + r5 = GetBankByPlayerAI(3); + } + for (r4 = 0; r4 < 6; r4++) + { + if (GetMonData(&gEnemyParty[r4], MON_DATA_HP) != 0 + && r4 != gBattlePartyID[r6] + && r4 != gBattlePartyID[r5]) + break; + } + } + } + else + { + r4 = ewram[0x160C8 + GetBankIdentity(gActiveBank) / 2]; + ewram[0x160C8 + GetBankIdentity(gActiveBank) / 2] = 6; + } + ewram[0x16068 + gActiveBank] = r4; + Emitcmd34(1, r4, 0); + OpponentBufferExecCompleted(); +} + +void OpponentHandlecmd23(void) +{ + OpponentBufferExecCompleted(); +} + +void OpponentHandleHealthBarUpdate(void) +{ + s16 r7; + + load_gfxc_health_bar(0); + r7 = (gBattleBufferA[gActiveBank][3] << 8) | gBattleBufferA[gActiveBank][2]; + if (r7 != 0x7FFF) + { + u32 maxHP = GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP); + u32 hp = GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_HP); + + sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, hp, r7); + } + else + { + u32 maxHP = GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP); + + sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, 0, r7); + } + gBattleBankFunc[gActiveBank] = sub_80330C8; +} + +void OpponentHandleExpBarUpdate(void) +{ + OpponentBufferExecCompleted(); +} + +void OpponentHandleStatusIconUpdate(void) +{ + if (mplay_80342A4(gActiveBank) == 0) + { + sub_8045A5C(gHealthboxIDs[gActiveBank], &gEnemyParty[gBattlePartyID[gActiveBank]], 9); + ewram17810[gActiveBank].unk0_4 = 0; + gBattleBankFunc[gActiveBank] = sub_8033494; + } +} + +void OpponentHandleStatusAnimation(void) +{ + if (mplay_80342A4(gActiveBank) == 0) + { + move_anim_start_t2_for_situation( + gBattleBufferA[gActiveBank][1], + gBattleBufferA[gActiveBank][2] + | (gBattleBufferA[gActiveBank][3] << 8) + | (gBattleBufferA[gActiveBank][4] << 16) + | (gBattleBufferA[gActiveBank][5] << 24)); + gBattleBankFunc[gActiveBank] = sub_8033494; + } +} + +void OpponentHandleStatusXor(void) +{ + OpponentBufferExecCompleted(); +} + +void OpponentHandlecmd29(void) +{ + OpponentBufferExecCompleted(); +} + +void OpponentHandleDMATransfer(void) +{ + OpponentBufferExecCompleted(); +} + +void OpponentHandlecmd31(void) +{ + OpponentBufferExecCompleted(); +} + +void OpponentHandlecmd32(void) +{ + OpponentBufferExecCompleted(); +} + +void OpponentHandlecmd33(void) +{ + OpponentBufferExecCompleted(); +} + +void OpponentHandlecmd34(void) +{ + OpponentBufferExecCompleted(); +} + +void OpponentHandlecmd35(void) +{ + OpponentBufferExecCompleted(); +} + +void OpponentHandlecmd36(void) +{ + OpponentBufferExecCompleted(); +} + +void OpponentHandlecmd37(void) +{ + gUnknown_020238C8.unk0_0 = 0; + OpponentBufferExecCompleted(); +} + +void OpponentHandlecmd38(void) +{ + gUnknown_020238C8.unk0_0 = gBattleBufferA[gActiveBank][1]; + OpponentBufferExecCompleted(); +} + +void OpponentHandlecmd39(void) +{ + gUnknown_020238C8.unk0_7 = 0; + OpponentBufferExecCompleted(); +} + +void OpponentHandlecmd40(void) +{ + gUnknown_020238C8.unk0_7 ^= 1; + OpponentBufferExecCompleted(); +} + +void OpponentHandleHitAnimation(void) +{ + if (gSprites[gObjectBankIDs[gActiveBank]].invisible == TRUE) + { + OpponentBufferExecCompleted(); + } + else + { + gDoingBattleAnim = TRUE; + gSprites[gObjectBankIDs[gActiveBank]].data1 = 0; + sub_8047858(gActiveBank); + gBattleBankFunc[gActiveBank] = bx_blink_t7; + } +} + +void OpponentHandlecmd42(void) +{ + OpponentBufferExecCompleted(); +} + +void OpponentHandleEffectivenessSound(void) +{ + s8 pan; + + if (GetBankSide(gActiveBank) == 0) + pan = -64; + else + pan = 63; + PlaySE12WithPanning(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8), pan); + OpponentBufferExecCompleted(); +} + +void OpponentHandlecmd44(void) +{ + PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8)); + OpponentBufferExecCompleted(); +} + +void OpponentHandleFaintingCry(void) +{ + PlayCry3( + GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES), + 25, 5); + OpponentBufferExecCompleted(); +} + +void OpponentHandleIntroSlide(void) +{ + sub_80E43C0(gBattleBufferA[gActiveBank][1]); + gUnknown_02024DE8 |= 1; + OpponentBufferExecCompleted(); +} + +void OpponentHandleTrainerBallThrow(void) +{ + u8 taskId; + + oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]); + gSprites[gObjectBankIDs[gActiveBank]].data0 = 35; + gSprites[gObjectBankIDs[gActiveBank]].data2 = 280; + gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; + gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34; + oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], sub_8035C10); + taskId = CreateTask(sub_8035C44, 5); + gTasks[taskId].data[0] = gActiveBank; + if (ewram17810[gActiveBank].unk0_0) + gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0; + ewram17840.unk9_0 = 1; + gBattleBankFunc[gActiveBank] = nullsub_45; +} + +void sub_8035C10(struct Sprite *sprite) +{ + sub_8031B74(sprite->oam.affineParam); + sprite->oam.tileNum = sprite->data5; + FreeSpriteOamMatrix(sprite); + DestroySprite(sprite); +} + +void sub_8035C44(u8 taskId) +{ + u8 r9; + + r9 = gActiveBank; + gActiveBank = gTasks[taskId].data[0]; + if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI)) + { + gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; + sub_803495C(gActiveBank, 0); + } + else + { + gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; + sub_803495C(gActiveBank, 0); + gActiveBank ^= 2; + gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; + sub_803495C(gActiveBank, 0); + gActiveBank ^= 2; + } + gBattleBankFunc[gActiveBank] = sub_8032E2C; + gActiveBank = r9; + DestroyTask(taskId); +} + +void OpponentHandlecmd48(void) +{ + if (gBattleBufferA[gActiveBank][1] != 0 && GetBankSide(gActiveBank) == 0) + { + OpponentBufferExecCompleted(); + return; + } + + ewram17810[gActiveBank].unk0_0 = 1; + if (gBattleBufferA[gActiveBank][2] != 0) + { + if (ewram17810[gActiveBank].unk1_1 < 2) + { + ewram17810[gActiveBank].unk1_1++; + return; + } + else + { + ewram17810[gActiveBank].unk1_1 = 0; + } + } + gUnknown_02024E68[gActiveBank] = sub_8044804( + gActiveBank, + (struct BattleInterfaceStruct2 *)&gBattleBufferA[gActiveBank][4], + gBattleBufferA[gActiveBank][1], + gBattleBufferA[gActiveBank][2]); + ewram17810[gActiveBank].unk5 = 0; + if (gBattleBufferA[gActiveBank][2] != 0) + ewram17810[gActiveBank].unk5 = 0x5D; + gBattleBankFunc[gActiveBank] = sub_8035E2C; +} + +void sub_8035E2C(void) +{ + if (ewram17810[gActiveBank].unk5++ >= 93) + { + ewram17810[gActiveBank].unk5 = 0; + OpponentBufferExecCompleted(); + } +} + +void OpponentHandlecmd49(void) +{ + if (ewram17810[gActiveBank].unk0_0) + gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0; + OpponentBufferExecCompleted(); +} + +void OpponentHandlecmd50(void) +{ + OpponentBufferExecCompleted(); +} + +void OpponentHandleSpriteInvisibility(void) +{ + if (sub_8078874(gActiveBank) != 0) + { + gSprites[gObjectBankIDs[gActiveBank]].invisible = gBattleBufferA[gActiveBank][1]; + sub_8031F88(gActiveBank); + } + OpponentBufferExecCompleted(); +} + +void OpponentHandleBattleAnimation(void) +{ + if (mplay_80342A4(gActiveBank) == 0) + { + u8 r3 = gBattleBufferA[gActiveBank][1]; + u16 r4 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); + + if (move_anim_start_t3(gActiveBank, gActiveBank, gActiveBank, r3, r4) != 0) + OpponentBufferExecCompleted(); + else + gBattleBankFunc[gActiveBank] = sub_80334C0; + } +} + +void OpponentHandleLinkStandbyMsg(void) +{ + OpponentBufferExecCompleted(); +} + +void OpponentHandleResetActionMoveSelection(void) +{ + OpponentBufferExecCompleted(); +} + +void OpponentHandlecmd55(void) +{ + if ((gBattleTypeFlags & BATTLE_TYPE_LINK) && !(gBattleTypeFlags & BATTLE_TYPE_WILD)) + { + gMain.inBattle = FALSE; + gMain.callback1 = gPreBattleCallback1; + SetMainCallback2(gMain.savedCallback); + } + OpponentBufferExecCompleted(); +} + +void OpponentHandlecmd56(void) +{ +} diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c new file mode 100644 index 000000000..a537d9adb --- /dev/null +++ b/src/battle_controller_player.c @@ -0,0 +1,3066 @@ +#include "global.h" +#include "data2.h" +#include "battle.h" +#include "battle_interface.h" +#include "battle_message.h" +#include "item.h" +#include "items.h" +#include "link.h" +#include "m4a.h" +#include "main.h" +#include "menu_cursor.h" +#include "moves.h" +#include "palette.h" +#include "pokemon.h" +#include "rom3.h" +#include "songs.h" +#include "sound.h" +#include "string_util.h" +#include "task.h" +#include "text.h" +#include "util.h" + +//Possibly PokemonSubstruct1 +struct UnknownStruct3 +{ + u16 moves[4]; + u8 pp[4]; + u8 ppBonuses; +}; + +#if ENGLISH +#define SUB_803037C_TILE_DATA_OFFSET 440 +#elif GERMAN +#define SUB_803037C_TILE_DATA_OFFSET 444 +#endif + +extern u16 gUnknown_030042A4; +extern u16 gUnknown_030042A0; + +extern struct Window gUnknown_03004210; + +extern void (*gBattleBankFunc[])(void); + +extern u8 gActiveBank; +extern u8 gActionSelectionCursor[]; +extern u8 gDisplayedStringBattle[]; +extern u8 gMoveSelectionCursor[]; +extern u8 gBattleBufferA[][0x200]; +extern u8 gBankInMenu; +extern u16 gBattlePartyID[]; +extern u8 gHealthboxIDs[]; +extern u8 gDoingBattleAnim; +extern u8 gObjectBankIDs[]; +extern u16 gBattleTypeFlags; +extern u8 gBattleOutcome; +extern void (*gAnimScriptCallback)(void); +extern bool8 gAnimScriptActive; +extern u16 gMovePowerMoveAnim; +extern u32 gMoveDmgMoveAnim; +extern u8 gHappinessMoveAnim; +extern u16 gWeatherMoveAnim; +extern u32 *gDisableStructMoveAnim; +extern u32 gPID_perBank[]; +extern u8 gBattleMonForms[]; +extern u16 gUnknown_02024DE8; +extern u8 gUnknown_02024E68[]; +extern struct SpriteTemplate gUnknown_02024E8C; +extern u8 gUnknown_0202F7C4; +extern u8 gUnknown_02038470[]; +extern u16 gUnknown_030041B0; +extern u16 gUnknown_030041B4; +extern u16 gUnknown_030041B8; +extern u16 gUnknown_03004280; +extern u16 gUnknown_03004288; +extern u16 gUnknown_030042A4; +extern u16 gUnknown_030042C0; +extern u8 gUnknown_03004344; +extern u8 gUnknown_0300434C[]; + +extern const u8 gUnknown_08400CA8[]; +extern const u8 gUnknown_08400CF3[]; +extern const u8 gUnknown_08400D38[]; + +extern void sub_802C68C(void); +extern void sub_802E1B0(void); +extern void sub_802E220(); +extern void sub_802E2D4(); +extern void sub_802E004(void); +extern void sub_802DF30(void); +extern void BattleMusicStop(void); +extern void PlayerBufferExecCompleted(void); +extern void bx_t1_healthbar_update(void); +extern void nullsub_91(void); +extern void sub_802D924(u8); +extern void sub_802E434(void); +extern bool8 mplay_80342A4(u8); +extern void move_anim_start_t2_for_situation(); +extern void bx_blink_t1(void); +extern void sub_8047858(); +extern u8 GetBankSide(u8); +extern void sub_80E43C0(); +extern void oamt_add_pos2_onto_pos1(); +extern void sub_8078B34(struct Sprite *); +extern void oamt_set_x3A_32(); +extern void sub_80318FC(); +extern bool8 IsDoubleBattle(void); +extern void sub_802D500(void); +extern bool8 sub_8078874(u8); +extern bool8 move_anim_start_t3(); +extern void sub_802E460(void); +extern void b_link_standby_message(void); +extern void sub_802D18C(void); +extern void sub_802DF18(void); +extern void BufferStringBattle(); +extern void sub_80326EC(); +extern void ExecuteMoveAnim(); +extern void sub_8031F24(void); +extern void sub_80324BC(); +extern u8 sub_8031720(); +extern void bx_wait_t1(void); +extern u8 GetBankByPlayerAI(u8); +extern void sub_802DE10(void); +extern void sub_80105EC(struct Sprite *); +extern void sub_802D274(void); +extern void sub_802D23C(void); +extern u8 GetBankIdentity(u8); +extern void sub_8031AF4(); +extern void sub_80313A0(struct Sprite *); +extern void sub_802D204(void); +extern u8 sub_8079E90(); +extern void sub_802DEAC(void); +extern void sub_80312F0(struct Sprite *); +extern u8 sub_8077ABC(); +extern u8 sub_8077F68(); +extern u8 sub_8046400(); +extern void sub_802D798(void); +extern void bx_0802E404(void); +extern u8 gActiveBank; +extern void (*gBattleBankFunc[])(void); +extern bool8 gDoingBattleAnim; +extern u16 gBattleTypeFlags; +extern u32 gBattleExecBuffer; +extern u8 gBattleBufferA[][0x200]; +extern u8 gObjectBankIDs[]; +extern u8 gActionSelectionCursor[]; +extern u8 gMoveSelectionCursor[]; +extern u8 gAbsentBankFlags; +extern u8 gUnknown_03004344; +extern u8 gNoOfAllBanks; +extern u16 gBattlePartyID[]; +extern u16 gUnknown_030042A0; +extern u16 gUnknown_030042A4; +extern struct Window gUnknown_03004210; +extern const u8 gUnknown_08400D89[]; +extern u8 gUnknown_03004348; +extern struct BattlePokemon gBattleMons[]; +extern MainCallback gPreBattleCallback1; +extern u8 gHealthboxIDs[]; +extern struct MusicPlayerInfo gMPlay_BGM; +extern u8 gUnknown_0300434C[]; +extern u8 gUnknown_0202E8F4; +extern u8 gUnknown_0202E8F5; +extern u8 gUnknown_02038470[]; +extern u16 gScriptItemId; +extern u8 gDisplayedStringBattle[]; +extern const u8 gUnknown_08400CE0[]; + +extern void dp11b_obj_instanciate(u8, u8, s8, s8); +extern u8 GetBankIdentity(u8); +extern u8 GetBankByPlayerAI(u8); +extern void dp11b_obj_free(u8, u8); +extern void sub_8010520(struct Sprite *); +extern void sub_8010574(struct Sprite *); +extern bool8 IsDoubleBattle(); +extern void sub_804777C(); +extern void sub_8141828(); +extern void sub_8094E20(u8); +extern void nullsub_14(void); +extern void sub_80A6DCC(void); +extern void ReshowBattleScreenAfterMenu(void); + +void PlayerHandleGetAttributes(void); +void PlayerHandlecmd1(void); +void PlayerHandleSetAttributes(void); +void PlayerHandlecmd3(void); +void PlayerHandleLoadPokeSprite(void); +void PlayerHandleSendOutPoke(void); +void PlayerHandleReturnPokeToBall(void); +void PlayerHandleTrainerThrow(void); +void PlayerHandleTrainerSlide(void); +void PlayerHandleTrainerSlideBack(void); +void PlayerHandlecmd10(void); +void PlayerHandlecmd11(void); +void PlayerHandlecmd12(void); +void PlayerHandleBallThrow(void); +void PlayerHandlePuase(void); +void PlayerHandleMoveAnimation(void); +void PlayerHandlePrintString(void); +void PlayerHandlePrintStringPlayerOnly(void); +void PlayerHandlecmd18(void); +void PlayerHandlecmd19(void); +void PlayerHandlecmd20(void); +void PlayerHandleOpenBag(void); +void PlayerHandlecmd22(void); +void PlayerHandlecmd23(void); +void PlayerHandleHealthBarUpdate(void); +void PlayerHandleExpBarUpdate(void); +void PlayerHandleStatusIconUpdate(void); +void PlayerHandleStatusAnimation(void); +void PlayerHandleStatusXor(void); +void PlayerHandlecmd29(void); +void PlayerHandleDMATransfer(void); +void PlayerHandlecmd31(void); +void PlayerHandlecmd32(void); +void PlayerHandlecmd33(void); +void PlayerHandlecmd34(void); +void PlayerHandlecmd35(void); +void PlayerHandlecmd36(void); +void PlayerHandlecmd37(void); +void PlayerHandlecmd38(void); +void PlayerHandlecmd39(void); +void PlayerHandlecmd40(void); +void PlayerHandleHitAnimation(void); +void PlayerHandlecmd42(void); +void PlayerHandleEffectivenessSound(void); +void PlayerHandlecmd44(void); +void PlayerHandleFaintingCry(void); +void PlayerHandleIntroSlide(void); +void PlayerHandleTrainerBallThrow(void); +void PlayerHandlecmd48(void); +void PlayerHandlecmd49(void); +void PlayerHandlecmd50(void); +void PlayerHandleSpriteInvisibility(void); +void PlayerHandleBattleAnimation(void); +void PlayerHandleLinkStandbyMsg(void); +void PlayerHandleResetActionMoveSelection(void); +void PlayerHandlecmd55(void); +void PlayerHandlecmd56(void); + +const u8 gString_TurnJP[] = _("ターン"); + +void (*const gPlayerBufferCommands[])(void) = +{ + PlayerHandleGetAttributes, + PlayerHandlecmd1, + PlayerHandleSetAttributes, + PlayerHandlecmd3, + PlayerHandleLoadPokeSprite, + PlayerHandleSendOutPoke, + PlayerHandleReturnPokeToBall, + PlayerHandleTrainerThrow, + PlayerHandleTrainerSlide, + PlayerHandleTrainerSlideBack, + PlayerHandlecmd10, + PlayerHandlecmd11, + PlayerHandlecmd12, + PlayerHandleBallThrow, + PlayerHandlePuase, + PlayerHandleMoveAnimation, + PlayerHandlePrintString, + PlayerHandlePrintStringPlayerOnly, + PlayerHandlecmd18, + PlayerHandlecmd19, + PlayerHandlecmd20, + PlayerHandleOpenBag, + PlayerHandlecmd22, + PlayerHandlecmd23, + PlayerHandleHealthBarUpdate, + PlayerHandleExpBarUpdate, + PlayerHandleStatusIconUpdate, + PlayerHandleStatusAnimation, + PlayerHandleStatusXor, + PlayerHandlecmd29, + PlayerHandleDMATransfer, + PlayerHandlecmd31, + PlayerHandlecmd32, + PlayerHandlecmd33, + PlayerHandlecmd34, + PlayerHandlecmd35, + PlayerHandlecmd36, + PlayerHandlecmd37, + PlayerHandlecmd38, + PlayerHandlecmd39, + PlayerHandlecmd40, + PlayerHandleHitAnimation, + PlayerHandlecmd42, + PlayerHandleEffectivenessSound, + PlayerHandlecmd44, + PlayerHandleFaintingCry, + PlayerHandleIntroSlide, + PlayerHandleTrainerBallThrow, + PlayerHandlecmd48, + PlayerHandlecmd49, + PlayerHandlecmd50, + PlayerHandleSpriteInvisibility, + PlayerHandleBattleAnimation, + PlayerHandleLinkStandbyMsg, + PlayerHandleResetActionMoveSelection, + PlayerHandlecmd55, + PlayerHandlecmd56, +}; + +void PlayerBufferRunCommand(void); +void sub_802C2EC(void); +void sub_802C68C(void); +void sub_802CA60(void); +void sub_802D730(void); +void sub_802DA9C(u8); +void sub_802DB6C(u8); +void sub_802DCB0(u8); +void sub_802DD10(u8); +void sub_802DDC4(u8); +void sub_802DF88(void); +void sub_802E03C(void); +void sub_802E12C(s32, const u8 *); +void sub_802E1B0(void); +void sub_802E220(void); +void sub_802E2D4(void); +void sub_802E3B4(u8, int); +void nullsub_7(u8); +void b_link_standby_message(void); +u32 dp01_getattr_by_ch1_for_player_pokemon_(u8, u8 *); +void dp01_setattr_by_ch1_for_player_pokemon(u8); +void sub_802F934(u8, u8); +void sub_802FB2C(void); +void sub_8030190(void); +void sub_80304A8(void); +void sub_8030E38(struct Sprite *); +void task05_08033660(u8); +void sub_8031064(void); + +void nullsub_91(void) +{ +} + +void SetBankFuncToPlayerBufferRunCommand(void) +{ + gBattleBankFunc[gActiveBank] = PlayerBufferRunCommand; + gDoingBattleAnim = FALSE; +} + +void PlayerBufferExecCompleted(void) +{ + gBattleBankFunc[gActiveBank] = PlayerBufferRunCommand; + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + u8 playerId = GetMultiplayerId(); + + dp01_prepare_buffer_wireless_probably(2, 4, &playerId); + gBattleBufferA[gActiveBank][0] = 0x38; + } + else + { + gBattleExecBuffer &= ~gBitTable[gActiveBank]; + } +} + +void PlayerBufferRunCommand(void) +{ + if (gBattleExecBuffer & gBitTable[gActiveBank]) + { + if (gBattleBufferA[gActiveBank][0] < 0x39) + gPlayerBufferCommands[gBattleBufferA[gActiveBank][0]](); + else + PlayerBufferExecCompleted(); + } +} + +void bx_0802E404(void) +{ + if (gSprites[gObjectBankIDs[gActiveBank]].pos2.x == 0) + PlayerBufferExecCompleted(); +} + +void sub_802C098(void) +{ + u16 itemId = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); + + dp11b_obj_instanciate(gActiveBank, 1, 7, 1); + dp11b_obj_instanciate(gActiveBank, 0, 7, 1); + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + DestroyMenuCursor(); + + // Useless switch statement. + switch (gActionSelectionCursor[gActiveBank]) + { + case 0: + Emitcmd33(1, 0, 0); + break; + case 1: + Emitcmd33(1, 1, 0); + break; + case 2: + Emitcmd33(1, 2, 0); + break; + case 3: + Emitcmd33(1, 3, 0); + break; + } + PlayerBufferExecCompleted(); + } + else if (gMain.newKeys & DPAD_LEFT) + { + if (gActionSelectionCursor[gActiveBank] & 1) + { + PlaySE(SE_SELECT); + nullsub_8(gActionSelectionCursor[gActiveBank]); + gActionSelectionCursor[gActiveBank] ^= 1; + sub_802E3E4(gActionSelectionCursor[gActiveBank], 0); + } + } + else if (gMain.newKeys & DPAD_RIGHT) + { + if (!(gActionSelectionCursor[gActiveBank] & 1)) + { + PlaySE(SE_SELECT); + nullsub_8(gActionSelectionCursor[gActiveBank]); + gActionSelectionCursor[gActiveBank] ^= 1; + sub_802E3E4(gActionSelectionCursor[gActiveBank], 0); + } + } + else if (gMain.newKeys & DPAD_UP) + { + if (gActionSelectionCursor[gActiveBank] & 2) + { + PlaySE(SE_SELECT); + nullsub_8(gActionSelectionCursor[gActiveBank]); + gActionSelectionCursor[gActiveBank] ^= 2; + sub_802E3E4(gActionSelectionCursor[gActiveBank], 0); + } + } + else if (gMain.newKeys & DPAD_DOWN) + { + if (!(gActionSelectionCursor[gActiveBank] & 2)) + { + PlaySE(SE_SELECT); + nullsub_8(gActionSelectionCursor[gActiveBank]); + gActionSelectionCursor[gActiveBank] ^= 2; + sub_802E3E4(gActionSelectionCursor[gActiveBank], 0); + } + } + else if (gMain.newKeys & B_BUTTON) + { + if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + && GetBankIdentity(gActiveBank) == 2 + && !(gAbsentBankFlags & gBitTable[GetBankByPlayerAI(0)]) + && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) + { + if (gBattleBufferA[gActiveBank][1] == 1) + { + // Add item to bag if it is a ball + if (itemId <= ITEM_PREMIER_BALL) + AddBagItem(itemId, 1); + else + return; + } + PlaySE(SE_SELECT); + Emitcmd33(1, 12, 0); + PlayerBufferExecCompleted(); + DestroyMenuCursor(); + } + } + else if (gMain.newKeys & START_BUTTON) + { + sub_804454C(); + } +} + +void unref_sub_802C2B8(void) +{ + dp11b_obj_free(gActiveBank, 1); + dp11b_obj_free(gActiveBank, 0); + gBattleBankFunc[gActiveBank] = sub_802C2EC; +} + +// TODO: fix this function +void sub_802C2EC(void) +{ + u8 arr[4] = {0, 2, 3, 1}; + s32 i; + + dp11b_obj_instanciate(gUnknown_03004344, 1, 15, 1); + i = 0; + if (gNoOfAllBanks != 0) + { + do + { + if (i != gUnknown_03004344) + dp11b_obj_free(i, 1); + i++; + } while (i < gNoOfAllBanks); + } + if (gMain.newKeys & A_BUTTON) + { + DestroyMenuCursor(); + PlaySE(SE_SELECT); + gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010574; + Emitcmd33(1, 10, gMoveSelectionCursor[gActiveBank] | (gUnknown_03004344 << 8)); + dp11b_obj_free(gUnknown_03004344, 1); + PlayerBufferExecCompleted(); + } + //_0802C3A8 + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010574; + gBattleBankFunc[gActiveBank] = sub_802C68C; + dp11b_obj_instanciate(gActiveBank, 1, 7, 1); + dp11b_obj_instanciate(gActiveBank, 0, 7, 1); + dp11b_obj_free(gUnknown_03004344, 1); + } + else if (gMain.newKeys & 0x60) + { + PlaySE(SE_SELECT); + gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010574; + do + { + u8 var = GetBankIdentity(gUnknown_03004344); + + for (i = 0; i < 4; i++) + { + if (var == arr[i]) + break; + } + do + { + i--; + if (i < 0) + i = 3; + gUnknown_03004344 = GetBankByPlayerAI(arr[i]); + } while(gUnknown_03004344 == gNoOfAllBanks); + i = 0; + switch (GetBankIdentity(gUnknown_03004344)) + { + case 0: + case 2: + if (gActiveBank == gUnknown_03004344) + { + u32 moveId; + + asm("":::"memory"); + moveId = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBank]); + if (!(gBattleMoves[moveId].target & 2)) + break; + } + i++; + break; + case 1: + case 3: + i++; + } + //_0802C500 + if (gAbsentBankFlags & gBitTable[gUnknown_03004344]) + i = 0; + } while (i == 0); + gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010520; + } + //_0802C540 + else if (gMain.newKeys & 0x90) + { + PlaySE(SE_SELECT); + gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010574; + do + { + u8 var = GetBankIdentity(gUnknown_03004344); + + for (i = 0; i < 4; i++) + { + if (var == arr[i]) + break; + } + do + { + i++; + if (i > 3) + i = 0; + gUnknown_03004344 = GetBankByPlayerAI(arr[i]); + } while (gUnknown_03004344 == gNoOfAllBanks); + i = 0; + switch (GetBankIdentity(gUnknown_03004344)) + { + case 0: + case 2: + if (gActiveBank == gUnknown_03004344) + { + u32 moveId; + + asm("":::"memory"); + moveId = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBank]); + if (!(gBattleMoves[moveId].target & 2)) + break; + } + i++; + break; + case 1: + case 3: + i++; + } + if (gAbsentBankFlags & gBitTable[gUnknown_03004344]) + i = 0; + } while (i == 0); + gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010520; + } +} + +struct UnknownStruct1 +{ + u16 moves[4]; + u8 pp[4]; + u8 unkC[0x12-0xC]; + u8 unk12; + u8 unk13; + u8 filler14[0x20-0x14]; +}; + +const u8 gUnknown_081FAE80[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW WHITE LIGHT_BLUE WHITE2}"); + +void sub_802C68C(void) +{ + u32 r8 = 0; + struct UnknownStruct1 *r6 = (struct UnknownStruct1 *)(gBattleBufferA[gActiveBank] + 4); + + if (gMain.newKeys & A_BUTTON) + { + u32 r4; + + PlaySE(SE_SELECT); + + if (r6->moves[gMoveSelectionCursor[gActiveBank]] == MOVE_CURSE) + r4 = (r6->unk12 != TYPE_GHOST && (r6->unk13 ^ 7)) ? 0x10 : 0; + else + r4 = gBattleMoves[r6->moves[gMoveSelectionCursor[gActiveBank]]].target; + + if (r4 & 0x10) + gUnknown_03004344 = gActiveBank; + else + gUnknown_03004344 = GetBankByPlayerAI((GetBankIdentity(gActiveBank) & 1) ^ 1); + + if (gBattleBufferA[gActiveBank][1] == 0) + { + if ((r4 & 2) && gBattleBufferA[gActiveBank][2] == 0) + r8++; + } + else + { + if (!(r4 & 0x7D)) + r8++; + if (r6->pp[gMoveSelectionCursor[gActiveBank]] == 0) + { + r8 = 0; + } + else if (!(r4 & 0x12) && CountAliveMons(0) <= 1) + { + gUnknown_03004344 = sub_803C434(gActiveBank); + r8 = 0; + } + } + if (r8 == 0) + { + DestroyMenuCursor(); + Emitcmd33(1, 10, gMoveSelectionCursor[gActiveBank] | (gUnknown_03004344 << 8)); + PlayerBufferExecCompleted(); + } + else + { + gBattleBankFunc[gActiveBank] = sub_802C2EC; + if (r4 & 0x12) + gUnknown_03004344 = gActiveBank; + else if (gAbsentBankFlags & gBitTable[GetBankByPlayerAI(1)]) + gUnknown_03004344 = GetBankByPlayerAI(3); + else + gUnknown_03004344 = GetBankByPlayerAI(1); + gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010520; + } + } + else if (gMain.newKeys & B_BUTTON) + { + DestroyMenuCursor(); + PlaySE(SE_SELECT); + gUnknown_030042A4 = 0; + gUnknown_030042A0 = 320; + Emitcmd33(1, 10, 0xFFFF); + PlayerBufferExecCompleted(); + } + else if (gMain.newKeys & DPAD_LEFT) + { + if (gMoveSelectionCursor[gActiveBank] & 1) + { + nullsub_7(gMoveSelectionCursor[gActiveBank]); + gMoveSelectionCursor[gActiveBank] ^= 1; + PlaySE(SE_SELECT); + sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); + sub_802E220(); + sub_802E2D4(); + } + } + else if (gMain.newKeys & DPAD_RIGHT) + { + if (!(gMoveSelectionCursor[gActiveBank] & 1) + && (gMoveSelectionCursor[gActiveBank] ^ 1) < gUnknown_03004348) + { + nullsub_7(gMoveSelectionCursor[gActiveBank]); + gMoveSelectionCursor[gActiveBank] ^= 1; + PlaySE(SE_SELECT); + sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); + sub_802E220(); + sub_802E2D4(); + } + } + else if (gMain.newKeys & DPAD_UP) + { + if (gMoveSelectionCursor[gActiveBank] & 2) + { + nullsub_7(gMoveSelectionCursor[gActiveBank]); + gMoveSelectionCursor[gActiveBank] ^= 2; + PlaySE(SE_SELECT); + sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); + sub_802E220(); + sub_802E2D4(); + } + } + else if (gMain.newKeys & DPAD_DOWN) + { + if (!(gMoveSelectionCursor[gActiveBank] & 2) + && (gMoveSelectionCursor[gActiveBank] ^ 2) < gUnknown_03004348) + { + nullsub_7(gMoveSelectionCursor[gActiveBank]); + gMoveSelectionCursor[gActiveBank] ^= 2; + PlaySE(SE_SELECT); + sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); + sub_802E220(); + sub_802E2D4(); + } + } + else if (gMain.newKeys & SELECT_BUTTON) + { + if (gUnknown_03004348 > 1 && !(gBattleTypeFlags & BATTLE_TYPE_LINK)) + { + sub_802E12C(gMoveSelectionCursor[gActiveBank], gUnknown_081FAE80); + if (gMoveSelectionCursor[gActiveBank] != 0) + gUnknown_03004344 = 0; + else + gUnknown_03004344 = gMoveSelectionCursor[gActiveBank] + 1; + sub_802E3B4(gUnknown_03004344, 27); + FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); + InitWindow(&gUnknown_03004210, gUnknown_08400D89, 0x290, 0x17, 0x37); + sub_8002F44(&gUnknown_03004210); + gBattleBankFunc[gActiveBank] = sub_802CA60; + } + } +} + +extern const u8 gUnknown_08400D49[]; +extern const u8 gUnknown_08400D38[]; + +void sub_802CA60(void) +{ + u8 perMovePPBonuses[4]; + struct + { + u16 moves[4]; + u8 pp[4]; + u8 filler18[8]; // what is this? + } sp0; + //struct UnknownStruct1 sp0; + u8 totalPPBonuses; + + if (gMain.newKeys & (A_BUTTON | SELECT_BUTTON)) + { + PlaySE(SE_SELECT); + if (gMoveSelectionCursor[gActiveBank] != gUnknown_03004344) + { + struct UnknownStruct1 *r9 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4]; + s32 i; + + i = r9->moves[gMoveSelectionCursor[gActiveBank]]; + r9->moves[gMoveSelectionCursor[gActiveBank]] = r9->moves[gUnknown_03004344]; + r9->moves[gUnknown_03004344] = i; + + i = r9->pp[gMoveSelectionCursor[gActiveBank]]; + r9->pp[gMoveSelectionCursor[gActiveBank]] = r9->pp[gUnknown_03004344]; + r9->pp[gUnknown_03004344] = i; + + i = r9->unkC[gMoveSelectionCursor[gActiveBank]]; + r9->unkC[gMoveSelectionCursor[gActiveBank]] = r9->unkC[gUnknown_03004344]; + r9->unkC[gUnknown_03004344] = i; + + if (gDisableStructs[gActiveBank].unk18_b & gBitTable[gMoveSelectionCursor[gActiveBank]]) + { + gDisableStructs[gActiveBank].unk18_b &= ~gBitTable[gMoveSelectionCursor[gActiveBank]]; + gDisableStructs[gActiveBank].unk18_b |= gBitTable[gUnknown_03004344]; + } + + sub_802E1B0(); + + for (i = 0; i < 4; i++) + perMovePPBonuses[i] = (gBattleMons[gActiveBank].ppBonuses & (3 << (i * 2))) >> (i * 2); + totalPPBonuses = perMovePPBonuses[gMoveSelectionCursor[gActiveBank]]; + perMovePPBonuses[gMoveSelectionCursor[gActiveBank]] = perMovePPBonuses[gUnknown_03004344]; + perMovePPBonuses[gUnknown_03004344] = totalPPBonuses; + + totalPPBonuses = 0; + for (i = 0; i < 4; i++) + totalPPBonuses |= perMovePPBonuses[i] << (i * 2); + gBattleMons[gActiveBank].ppBonuses = totalPPBonuses; + + for (i = 0; i < 4; i++) + { + gBattleMons[gActiveBank].moves[i] = r9->moves[i]; + gBattleMons[gActiveBank].pp[i] = r9->pp[i]; + } + if (!(gBattleMons[gActiveBank].status2 & 0x200000)) + { + for (i = 0; i < 4; i++) + { + sp0.moves[i] = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + i); + sp0.pp[i] = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP1 + i); + } + + totalPPBonuses = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP_BONUSES); + for (i = 0; i < 4; i++) + perMovePPBonuses[i] = (totalPPBonuses & (3 << (i * 2))) >> (i * 2); + + i = sp0.moves[gMoveSelectionCursor[gActiveBank]]; + sp0.moves[gMoveSelectionCursor[gActiveBank]] = sp0.moves[gUnknown_03004344]; + sp0.moves[gUnknown_03004344] = i; + + i = sp0.pp[gMoveSelectionCursor[gActiveBank]]; + sp0.pp[gMoveSelectionCursor[gActiveBank]] = sp0.pp[gUnknown_03004344]; + sp0.pp[gUnknown_03004344] = i; + + totalPPBonuses = perMovePPBonuses[gMoveSelectionCursor[gActiveBank]]; + perMovePPBonuses[gMoveSelectionCursor[gActiveBank]] = perMovePPBonuses[gUnknown_03004344]; + perMovePPBonuses[gUnknown_03004344] = totalPPBonuses; + + totalPPBonuses = 0; + for (i = 0; i < 4; i++) + totalPPBonuses |= perMovePPBonuses[i] << (i * 2); + + for (i = 0; i < 4; i++) + { + SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + i, (u8 *)&sp0.moves[i]); + SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP1 + i, &sp0.pp[i]); + } + SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP_BONUSES, &totalPPBonuses); + } + } + else + { + sub_802E12C(gUnknown_03004344, gUnknown_08400D49); + } + gBattleBankFunc[gActiveBank] = sub_802C68C; + gMoveSelectionCursor[gActiveBank] = gUnknown_03004344; + sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); + FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); + InitWindow(&gUnknown_03004210, gUnknown_08400D38, 0x290, 0x17, 0x37); + sub_8002F44(&gUnknown_03004210); + sub_802E220(); + sub_802E2D4(); + } + if (gMain.newKeys & (B_BUTTON | SELECT_BUTTON)) + { + PlaySE(SE_SELECT); + nullsub_7(gUnknown_03004344); + sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); + sub_802E12C(gMoveSelectionCursor[gActiveBank], gUnknown_08400D49); + gBattleBankFunc[gActiveBank] = sub_802C68C; + FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); + InitWindow(&gUnknown_03004210, gUnknown_08400D38, 0x290, 0x17, 0x37); + sub_8002F44(&gUnknown_03004210); + sub_802E220(); + sub_802E2D4(); + } + if ((gMain.newKeys & DPAD_LEFT) && (gUnknown_03004344 & 1)) + { + if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) + sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D); + else + nullsub_7(gUnknown_03004344); + gUnknown_03004344 ^= 1; + PlaySE(SE_SELECT); + if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) + sub_802E3B4(gUnknown_03004344, 0); + else + sub_802E3B4(gUnknown_03004344, 0x1B); + } + if ((gMain.newKeys & DPAD_RIGHT) && !(gUnknown_03004344 & 1) && (gUnknown_03004344 ^ 1) < gUnknown_03004348) + { + if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) + sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D); + else + nullsub_7(gUnknown_03004344); + gUnknown_03004344 ^= 1; + PlaySE(SE_SELECT); + if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) + sub_802E3B4(gUnknown_03004344, 0); + else + sub_802E3B4(gUnknown_03004344, 0x1B); + } + if ((gMain.newKeys & DPAD_UP) && (gUnknown_03004344 & 2)) + { + if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) + sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D); + else + nullsub_7(gUnknown_03004344); + gUnknown_03004344 ^= 2; + PlaySE(SE_SELECT); + if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) + sub_802E3B4(gUnknown_03004344, 0); + else + sub_802E3B4(gUnknown_03004344, 0x1B); + } + if ((gMain.newKeys & DPAD_DOWN) && !(gUnknown_03004344 & 2) && (gUnknown_03004344 ^ 2) < gUnknown_03004348) + { + if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) + sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D); + else + nullsub_7(gUnknown_03004344); + gUnknown_03004344 ^= 2; + PlaySE(SE_SELECT); + if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank]) + sub_802E3B4(gUnknown_03004344, 0); + else + sub_802E3B4(gUnknown_03004344, 0x1B); + } +} + +void sub_802D148(void) +{ + if (gReceivedRemoteLinkPlayers == 0) + { + m4aSongNumStop(SE_HINSI); + gMain.inBattle = FALSE; + gMain.callback1 = gPreBattleCallback1; + SetMainCallback2(c2_8011A1C); + } +} + +void sub_802D18C(void) +{ + if (!gPaletteFade.active) + { + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + sub_800832C(); + gBattleBankFunc[gActiveBank] = sub_802D148; + } + else + { + m4aSongNumStop(SE_HINSI); + gMain.inBattle = FALSE; + gMain.callback1 = gPreBattleCallback1; + SetMainCallback2(gMain.savedCallback); + } + } +} + +void sub_802D204(void) +{ + if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy) + PlayerBufferExecCompleted(); +} + +// duplicate of sub_802D204 +void sub_802D23C(void) +{ + if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy) + PlayerBufferExecCompleted(); +} + +void sub_802D274(void) +{ + if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy) + { + nullsub_10(gSaveBlock2.playerGender); + FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); + DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); + PlayerBufferExecCompleted(); + } +} + +void sub_802D2E0(void) +{ + if (--ewram17810[gActiveBank].unk9 == 0xFF) + { + ewram17810[gActiveBank].unk9 = 0; + PlayerBufferExecCompleted(); + } +} + +void sub_802D31C(void) +{ + bool8 r6 = FALSE; + + if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI))) + { + if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy) + r6 = TRUE; + } + else + { + if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy + && gSprites[gHealthboxIDs[gActiveBank ^ 2]].callback == SpriteCallbackDummy) + r6 = TRUE; + } + if (IsCryPlayingOrClearCrySongs()) + r6 = FALSE; + + if (r6 && ewram17810[gActiveBank].unk1_0 && ewram17810[gActiveBank ^ 2].unk1_0) + { + ewram17810[gActiveBank].unk0_7 = 0; + ewram17810[gActiveBank].unk1_0 = 0; + ewram17810[gActiveBank ^ 2].unk0_7 = 0; + ewram17810[gActiveBank ^ 2].unk1_0 = 0; + FreeSpriteTilesByTag(0x27F9); + FreeSpritePaletteByTag(0x27F9); + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + m4aMPlayContinue(&gMPlay_BGM); + else + m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 256); + sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + if (IsDoubleBattle()) + sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank ^ 2]], gActiveBank ^ 2); + ewram17810[gActiveBank].unk9 = 3; + gBattleBankFunc[gActiveBank] = sub_802D2E0; + } +} + +void sub_802D500(void) +{ + if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7) + sub_8141828(gActiveBank, &gPlayerParty[gBattlePartyID[gActiveBank]]); + if (!ewram17810[gActiveBank ^ 2].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_7) + sub_8141828(gActiveBank ^ 2, &gPlayerParty[gBattlePartyID[gActiveBank ^ 2]]); + if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_3) + { + if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) + { + DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank ^ 2]]); + sub_8045A5C( + gHealthboxIDs[gActiveBank ^ 2], + &gPlayerParty[gBattlePartyID[gActiveBank ^ 2]], + 0); + sub_804777C(gActiveBank ^ 2); + sub_8043DFC(gHealthboxIDs[gActiveBank ^ 2]); + } + DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]); + sub_8045A5C( + gHealthboxIDs[gActiveBank], + &gPlayerParty[gBattlePartyID[gActiveBank]], + 0); + sub_804777C(gActiveBank); + sub_8043DFC(gHealthboxIDs[gActiveBank]); + ewram17840.unk9_0 = 0; + gBattleBankFunc[gActiveBank] = sub_802D31C; + } +} + +void sub_802D680(void) +{ + if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy + && ewram17810[gActiveBank].unk1_0) + { + ewram17810[gActiveBank].unk0_7 = 0; + ewram17810[gActiveBank].unk1_0 = 0; + FreeSpriteTilesByTag(0x27F9); + FreeSpritePaletteByTag(0x27F9); + if (ewram17800[gActiveBank].unk0_2) + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); + gBattleBankFunc[gActiveBank] = sub_802D730; + } +} + +void sub_802D730(void) +{ + if (!ewram17810[gActiveBank].unk0_6 && !IsCryPlayingOrClearCrySongs()) + { + m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100); + sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + PlayerBufferExecCompleted(); + } +} + +void sub_802D798(void) +{ + if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7) + sub_8141828(gActiveBank, &gPlayerParty[gBattlePartyID[gActiveBank]]); + if (gSprites[gUnknown_0300434C[gActiveBank]].callback == SpriteCallbackDummy + && !ewram17810[gActiveBank].unk0_3) + { + DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]); + sub_8045A5C(gHealthboxIDs[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], 0); + sub_804777C(gActiveBank); + sub_8043DFC(gHealthboxIDs[gActiveBank]); + sub_8031F88(gActiveBank); + gBattleBankFunc[gActiveBank] = sub_802D680; + } +} + +void c3_0802FDF4(u8 taskId) +{ + if (!IsCryPlayingOrClearCrySongs()) + { + m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100); + DestroyTask(taskId); + } +} + +void bx_t1_healthbar_update(void) +{ + s16 r4 = sub_8045C78(gActiveBank, gHealthboxIDs[gActiveBank], 0, 0); + + sub_8043DFC(gHealthboxIDs[gActiveBank]); + if (r4 != -1) + { + sub_80440EC(gHealthboxIDs[gActiveBank], r4, 0); + } + else + { + sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + PlayerBufferExecCompleted(); + } +} + +void sub_802D90C(void) +{ + if (gUnknown_03004210.state == 0) + PlayerBufferExecCompleted(); +} + +// Rare Candy usage, maybe? +void sub_802D924(u8 taskId) +{ + u32 pkmnIndex = (u8)gTasks[taskId].data[0]; + u8 bank = gTasks[taskId].data[2]; + s16 gainedExp = gTasks[taskId].data[1]; + + if (IsDoubleBattle() == TRUE || pkmnIndex != gBattlePartyID[bank]) + { + struct Pokemon *pkmn = &gPlayerParty[pkmnIndex]; + u16 species = GetMonData(pkmn, MON_DATA_SPECIES); + u8 level = GetMonData(pkmn, MON_DATA_LEVEL); + u32 currExp = GetMonData(pkmn, MON_DATA_EXP); + u32 nextLvlExp = gExperienceTables[gBaseStats[species].growthRate][level + 1]; + + if (currExp + gainedExp >= nextLvlExp) + { + u8 savedActiveBank; + + SetMonData(pkmn, MON_DATA_EXP, (u8 *)&nextLvlExp); + CalculateMonStats(pkmn); + gainedExp -= nextLvlExp - currExp; + savedActiveBank = gActiveBank; + gActiveBank = bank; + Emitcmd33(1, 11, gainedExp); + gActiveBank = savedActiveBank; + + if (IsDoubleBattle() == TRUE + && ((u16)pkmnIndex == gBattlePartyID[bank] || (u16)pkmnIndex == gBattlePartyID[bank ^ 2])) + gTasks[taskId].func = sub_802DCB0; + else + gTasks[taskId].func = sub_802DDC4; + } + else + { + currExp += gainedExp; + SetMonData(pkmn, MON_DATA_EXP, (u8 *)&currExp); + gBattleBankFunc[bank] = sub_802D90C; + DestroyTask(taskId); + } + } + else + { + gTasks[taskId].func = sub_802DA9C; + } +} + +void sub_802DA9C(u8 taskId) +{ + u8 pkmnIndex = gTasks[taskId].data[0]; + s32 r9 = gTasks[taskId].data[1]; + u8 bank = gTasks[taskId].data[2]; + struct Pokemon *pkmn = &gPlayerParty[pkmnIndex]; + u8 level = GetMonData(pkmn, MON_DATA_LEVEL); + u16 species = GetMonData(pkmn, MON_DATA_SPECIES); + u32 exp = GetMonData(pkmn, MON_DATA_EXP); + u32 currLvlExp = gExperienceTables[gBaseStats[species].growthRate][level]; + u32 expToNextLvl; + + exp -= currLvlExp; + expToNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLvlExp; + sub_8043D84(bank, gHealthboxIDs[bank], expToNextLvl, exp, -r9); + PlaySE(SE_EXP); + gTasks[taskId].func = sub_802DB6C; +} + +#ifdef NONMATCHING +void sub_802DB6C(u8 taskId) +{ + if (gTasks[taskId].data[10] < 13) + { + gTasks[taskId].data[10]++; + } + else + { + u8 r9 = gTasks[taskId].data[0]; + s32 r10 = gTasks[taskId].data[1]; //s16? + u8 r7 = gTasks[taskId].data[2]; + s16 r4; + + r4 = sub_8045C78(r7, gHealthboxIDs[r7], 1, 0); + sub_8043DFC(gHealthboxIDs[r7]); + if (r4 == -1) + { + struct Pokemon *pkmn; + u8 r4; + u32 sp4; + u16 r0; + u32 sp0; + + m4aSongNumStop(SE_EXP); + pkmn = &gPlayerParty[r9]; + r4 = GetMonData(pkmn, MON_DATA_LEVEL); + sp4 = GetMonData(pkmn, MON_DATA_EXP); + r0 = GetMonData(pkmn, MON_DATA_SPECIES); + sp0 = gExperienceTables[gBaseStats[r0].growthRate][r4 + 1]; + if (sp4 + r10 >= sp0) + { + u8 r5; + u32 asdf; + + SetMonData(pkmn, MON_DATA_EXP, (u8 *)&sp0); + CalculateMonStats(pkmn); + //r10 -= sp0 - sp4; + asdf = sp0 - sp4; + //asdf = r10 - (sp0 - sp4); + r10 -= asdf; + r5 = gActiveBank; + gActiveBank = r7; + Emitcmd33(1, 11, r10); + gActiveBank = r5; + gTasks[taskId].func = sub_802DCB0; + } + else + { + //u32 asdf = sp4 + r10; + sp4 += r10; + SetMonData(pkmn, MON_DATA_EXP, (u8 *)&sp4); + gBattleBankFunc[r7] = sub_802D90C; + DestroyTask(taskId); + } + } + } +} +#else +__attribute__((naked)) +void sub_802DB6C(u8 taskId) +{ + asm_unified("push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x8\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r8, r0\n\ + ldr r1, _0802DB98 @ =gTasks\n\ + lsls r0, 2\n\ + add r0, r8\n\ + lsls r0, 3\n\ + adds r6, r0, r1\n\ + ldrh r1, [r6, 0x1C]\n\ + movs r2, 0x1C\n\ + ldrsh r0, [r6, r2]\n\ + cmp r0, 0xC\n\ + bgt _0802DB9C\n\ + adds r0, r1, 0x1\n\ + strh r0, [r6, 0x1C]\n\ + b _0802DC98\n\ + .align 2, 0\n\ +_0802DB98: .4byte gTasks\n\ +_0802DB9C:\n\ + ldrb r0, [r6, 0x8]\n\ + mov r9, r0\n\ + ldrh r2, [r6, 0xA]\n\ + mov r10, r2\n\ + ldrb r7, [r6, 0xC]\n\ + ldr r5, _0802DC64 @ =gHealthboxIDs\n\ + adds r5, r7, r5\n\ + ldrb r1, [r5]\n\ + adds r0, r7, 0\n\ + movs r2, 0x1\n\ + movs r3, 0\n\ + bl sub_8045C78\n\ + adds r4, r0, 0\n\ + lsls r4, 16\n\ + lsrs r4, 16\n\ + ldrb r0, [r5]\n\ + bl sub_8043DFC\n\ + lsls r4, 16\n\ + asrs r4, 16\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + cmp r4, r0\n\ + bne _0802DC98\n\ + movs r0, 0x21\n\ + bl m4aSongNumStop\n\ + movs r0, 0x64\n\ + mov r1, r9\n\ + muls r1, r0\n\ + ldr r0, _0802DC68 @ =gPlayerParty\n\ + adds r5, r1, r0\n\ + adds r0, r5, 0\n\ + movs r1, 0x38\n\ + bl GetMonData\n\ + adds r4, r0, 0\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + adds r0, r5, 0\n\ + movs r1, 0x19\n\ + bl GetMonData\n\ + str r0, [sp, 0x4]\n\ + adds r0, r5, 0\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + ldr r3, _0802DC6C @ =gExperienceTables\n\ + adds r4, 0x1\n\ + lsls r4, 2\n\ + ldr r2, _0802DC70 @ =gBaseStats\n\ + lsls r1, r0, 3\n\ + subs r1, r0\n\ + lsls r1, 2\n\ + adds r1, r2\n\ + ldrb r1, [r1, 0x13]\n\ + movs r0, 0xCA\n\ + lsls r0, 1\n\ + muls r0, r1\n\ + adds r4, r0\n\ + adds r4, r3\n\ + ldr r1, [r4]\n\ + str r1, [sp]\n\ + mov r2, r10\n\ + lsls r0, r2, 16\n\ + asrs r4, r0, 16\n\ + ldr r0, [sp, 0x4]\n\ + adds r0, r4\n\ + cmp r0, r1\n\ + blt _0802DC7C\n\ + adds r0, r5, 0\n\ + movs r1, 0x19\n\ + mov r2, sp\n\ + bl SetMonData\n\ + adds r0, r5, 0\n\ + bl CalculateMonStats\n\ + ldr r2, [sp]\n\ + add r0, sp, 0x4\n\ + ldrh r0, [r0]\n\ + subs r2, r0\n\ + subs r2, r4, r2\n\ + ldr r4, _0802DC74 @ =gActiveBank\n\ + ldrb r5, [r4]\n\ + strb r7, [r4]\n\ + lsls r2, 16\n\ + lsrs r2, 16\n\ + movs r0, 0x1\n\ + movs r1, 0xB\n\ + bl Emitcmd33\n\ + strb r5, [r4]\n\ + ldr r0, _0802DC78 @ =sub_802DCB0\n\ + str r0, [r6]\n\ + b _0802DC98\n\ + .align 2, 0\n\ +_0802DC64: .4byte gHealthboxIDs\n\ +_0802DC68: .4byte gPlayerParty\n\ +_0802DC6C: .4byte gExperienceTables\n\ +_0802DC70: .4byte gBaseStats\n\ +_0802DC74: .4byte gActiveBank\n\ +_0802DC78: .4byte sub_802DCB0\n\ +_0802DC7C:\n\ + str r0, [sp, 0x4]\n\ + add r2, sp, 0x4\n\ + adds r0, r5, 0\n\ + movs r1, 0x19\n\ + bl SetMonData\n\ + ldr r1, _0802DCA8 @ =gBattleBankFunc\n\ + lsls r0, r7, 2\n\ + adds r0, r1\n\ + ldr r1, _0802DCAC @ =sub_802D90C\n\ + str r1, [r0]\n\ + mov r0, r8\n\ + bl DestroyTask\n\ +_0802DC98:\n\ + add sp, 0x8\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\ +_0802DCA8: .4byte gBattleBankFunc\n\ +_0802DCAC: .4byte sub_802D90C\n"); +} +#endif + +void sub_802DCB0(u8 taskId) +{ + u8 bank = gTasks[taskId].data[2]; + u8 pkmnIndex = gTasks[taskId].data[0]; + + if (IsDoubleBattle() == TRUE && pkmnIndex == gBattlePartyID[bank ^ 2]) + bank ^= 2; + move_anim_start_t4(bank, bank, bank, 0); + gTasks[taskId].func = sub_802DD10; +} + +void sub_802DD10(u8 taskId) +{ + u8 bank = gTasks[taskId].data[2]; + + if (!ewram17810[bank].unk0_6) + { + u8 pkmnIndex = gTasks[taskId].data[0]; + + GetMonData(&gPlayerParty[pkmnIndex], MON_DATA_LEVEL); // Unused return value + if (IsDoubleBattle() == TRUE && pkmnIndex == gBattlePartyID[bank ^ 2]) + sub_8045A5C(gHealthboxIDs[bank ^ 2], &gPlayerParty[pkmnIndex], 0); + else + sub_8045A5C(gHealthboxIDs[bank], &gPlayerParty[pkmnIndex], 0); + gTasks[taskId].func = sub_802DDC4; + } +} + +void sub_802DDC4(u8 taskId) +{ + u8 pkmnIndex; + u8 bank; + + pkmnIndex = gTasks[taskId].data[0]; + GetMonData(&gPlayerParty[pkmnIndex], MON_DATA_LEVEL); // Unused return value + bank = gTasks[taskId].data[2]; + gBattleBankFunc[bank] = sub_802D90C; + DestroyTask(taskId); +} + +void sub_802DE10(void) +{ + if (gSprites[gObjectBankIDs[gActiveBank]].pos1.y + gSprites[gObjectBankIDs[gActiveBank]].pos2.y > DISPLAY_HEIGHT) + { + u16 species = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES); + + nullsub_9(species); + FreeOamMatrix(gSprites[gObjectBankIDs[gActiveBank]].oam.matrixNum); + DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); + sub_8043DB0(gHealthboxIDs[gActiveBank]); + PlayerBufferExecCompleted(); + } +} + +void sub_802DEAC(void) +{ + if (!ewram17810[gActiveBank].unk0_6) + { + FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); + DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); + sub_8043DB0(gHealthboxIDs[gActiveBank]); + PlayerBufferExecCompleted(); + } +} + +// Duplicate of sub_802D90C +void sub_802DF18(void) +{ + if (gUnknown_03004210.state == 0) + PlayerBufferExecCompleted(); +} + +void sub_802DF30(void) +{ + if (!gPaletteFade.active) + { + u8 r4; + + gBattleBankFunc[gActiveBank] = sub_802DF88; + r4 = gTasks[gUnknown_0300434C[gActiveBank]].data[0]; + DestroyTask(gUnknown_0300434C[gActiveBank]); + sub_8094E20(r4); + } +} + +void sub_802DF88(void) +{ + if (gMain.callback2 == sub_800F808 && !gPaletteFade.active) + { + if (gUnknown_0202E8F4 == 1) + Emitcmd34(1, gUnknown_0202E8F5, gUnknown_02038470); + else + Emitcmd34(1, 6, NULL); + if ((gBattleBufferA[gActiveBank][1] & 0xF) == 1) + b_link_standby_message(); + PlayerBufferExecCompleted(); + } +} + +void sub_802E004(void) +{ + if (!gPaletteFade.active) + { + gBattleBankFunc[gActiveBank] = sub_802E03C; + nullsub_14(); + sub_80A6DCC(); + } +} + +void sub_802E03C(void) +{ + if (gMain.callback2 == sub_800F808 && !gPaletteFade.active) + { + Emitcmd35(1, gScriptItemId); + PlayerBufferExecCompleted(); + } +} + +void bx_wait_t1(void) +{ + if (!gDoingBattleAnim || !ewram17810[gActiveBank].unk0_6) + PlayerBufferExecCompleted(); +} + +void bx_blink_t1(void) +{ + u8 spriteId = gObjectBankIDs[gActiveBank]; + + if (gSprites[spriteId].data1 == 32) + { + gSprites[spriteId].data1 = 0; + gSprites[spriteId].invisible = FALSE; + gDoingBattleAnim = 0; + PlayerBufferExecCompleted(); + } + else + { + if (((u16)gSprites[spriteId].data1 % 4) == 0) + gSprites[spriteId].invisible ^= 1; + gSprites[spriteId].data1++; + } +} + +void sub_802E12C(s32 a, const u8 *b) +{ + struct UnknownStruct1 *r4 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4]; + + StringCopy(gDisplayedStringBattle, b); + StringAppend(gDisplayedStringBattle, gMoveNames[r4->moves[a]]); + InitWindow( + &gUnknown_03004210, + gDisplayedStringBattle, + 0x300 + a * 20, + (a & 1) ? 11 : 1, + (a < 2) ? 0x37 : 0x39); + sub_8002F44(&gUnknown_03004210); +} + +void sub_802E1B0(void) +{ + struct UnknownStruct1 *r4 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4]; + s32 i; + + gUnknown_03004348 = 0; + FillWindowRect(&gUnknown_03004210, 0x1016, 1, 0x37, 0x14, 0x3A); + for (i = 0; i < 4; i++) + { + nullsub_7(i); + sub_802E12C(i, gUnknown_08400D49); + if (r4->moves[i] != 0) + gUnknown_03004348++; + } +} + +void sub_802E220(void) +{ + if (gBattleBufferA[gActiveBank][2] != 1) + { + struct UnknownStruct1 *r4 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4]; + u8 *str = gDisplayedStringBattle; + + str = StringCopy(str, gUnknown_08400D49); + str[0] = EXT_CTRL_CODE_BEGIN; + str[1] = 0x11; + str[2] = 2; + str += 3; + str[0] = EXT_CTRL_CODE_BEGIN; + str[1] = 0x14; + str[2] = 6; + str += 3; + str = ConvertIntToDecimalStringN(str, r4->pp[gMoveSelectionCursor[gActiveBank]], 1, 2); + *str++ = CHAR_SLASH; + ConvertIntToDecimalStringN(str, r4->unkC[gMoveSelectionCursor[gActiveBank]], 1, 2); + InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 0x2A2, 0x19, 0x37); + sub_8002F44(&gUnknown_03004210); + } +} + +extern const u8 gUnknown_08400D52[]; +extern const u8 gTypeNames[][7]; + +void sub_802E2D4(void) +{ + if (gBattleBufferA[gActiveBank][2] == 1) + { + FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); + InitWindow(&gUnknown_03004210, gUnknown_08400D52, 0x290, 0x13, 0x37); + } + else + { + struct UnknownStruct1 *r4 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4]; + u8 *str = gDisplayedStringBattle; + + str = StringCopy(str, gUnknown_08400D49); + StringCopy(str, gTypeNames[gBattleMoves[r4->moves[gMoveSelectionCursor[gActiveBank]]].type]); + FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x39, 0x1C, 0x3A); + InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 0x2C0, 0x17, 0x39); + } + sub_8002F44(&gUnknown_03004210); +} + +const u8 gUnknown_081FAE89[][2] = +{ + { 8, 120}, + {88, 120}, + { 8, 136}, + {88, 136}, +}; + +const u8 gUnknown_081FAE91[][2] = +{ + {144, 120}, + {190, 120}, + {144, 136}, + {190, 136}, + { 72, 72}, + { 32, 90}, + { 80, 80}, + { 80, 88}, +}; + +void sub_802E3B4(u8 a, int unused) +{ + sub_814A958(0x48); + sub_814A880(gUnknown_081FAE89[a][0], gUnknown_081FAE89[a][1]); +} + +void nullsub_7(u8 a) +{ +} + +void sub_802E3E4(u8 a, int unused) +{ + sub_814A958(0x2A); + sub_814A880(gUnknown_081FAE91[a][0], gUnknown_081FAE91[a][1]); +} + +void nullsub_8(u8 a) +{ +} + +void sub_802E414(void) +{ + SetMainCallback2(ReshowBattleScreenAfterMenu); +} + +void sub_802E424(void) +{ + SetMainCallback2(ReshowBattleScreenAfterMenu); +} + +void sub_802E434(void) +{ + if (!ewram17810[gActiveBank].unk0_4) + PlayerBufferExecCompleted(); +} + +void sub_802E460(void) +{ + if (!ewram17810[gActiveBank].unk0_5) + PlayerBufferExecCompleted(); +} + +void b_link_standby_message(void) +{ + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + gUnknown_030042A4 = 0; + gUnknown_030042A0 = 0; + sub_8002EB0(&gUnknown_03004210, gUnknown_08400CE0, 0x90, 2, 15); + } +} + +void PlayerHandleGetAttributes(void) +{ + u8 unkData[0x100]; + u32 offset = 0; + u8 r4; + s32 i; + + if (gBattleBufferA[gActiveBank][2] == 0) + { + offset += dp01_getattr_by_ch1_for_player_pokemon_(gBattlePartyID[gActiveBank], unkData); + } + else + { + r4 = gBattleBufferA[gActiveBank][2]; + for (i = 0; i < 6; i++) + { + if (r4 & 1) + offset += dp01_getattr_by_ch1_for_player_pokemon_(i, unkData + offset); + r4 >>= 1; + } + } + Emitcmd29(1, offset, unkData); + PlayerBufferExecCompleted(); +} + +// Duplicate of dp01_getattr_by_ch1_for_player_pokemon +u32 dp01_getattr_by_ch1_for_player_pokemon_(u8 a, u8 *buffer) +{ + struct BattlePokemon battlePokemon; + struct UnknownStruct3 moveData; + u8 nickname[20]; + u8 *src; + s16 data16; + u32 data32; + s32 size = 0; + + switch (gBattleBufferA[gActiveBank][1]) + { + case 0: + battlePokemon.species = GetMonData(&gPlayerParty[a], MON_DATA_SPECIES); + battlePokemon.item = GetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM); + for (size = 0; size < 4; size++) + { + battlePokemon.moves[size] = GetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + size); + battlePokemon.pp[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size); + } + battlePokemon.ppBonuses = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES); + battlePokemon.friendship = GetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP); + battlePokemon.experience = GetMonData(&gPlayerParty[a], MON_DATA_EXP); + battlePokemon.hpIV = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV); + battlePokemon.attackIV = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV); + battlePokemon.defenseIV = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV); + battlePokemon.speedIV = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV); + battlePokemon.spAttackIV = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV); + battlePokemon.spDefenseIV = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV); + battlePokemon.personality = GetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY); + battlePokemon.status1 = GetMonData(&gPlayerParty[a], MON_DATA_STATUS); + battlePokemon.level = GetMonData(&gPlayerParty[a], MON_DATA_LEVEL); + battlePokemon.hp = GetMonData(&gPlayerParty[a], MON_DATA_HP); + battlePokemon.maxHP = GetMonData(&gPlayerParty[a], MON_DATA_MAX_HP); + battlePokemon.attack = GetMonData(&gPlayerParty[a], MON_DATA_ATK); + battlePokemon.defense = GetMonData(&gPlayerParty[a], MON_DATA_DEF); + battlePokemon.speed = GetMonData(&gPlayerParty[a], MON_DATA_SPD); + battlePokemon.spAttack = GetMonData(&gPlayerParty[a], MON_DATA_SPATK); + battlePokemon.spDefense = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF); + battlePokemon.isEgg = GetMonData(&gPlayerParty[a], MON_DATA_IS_EGG); + battlePokemon.altAbility = GetMonData(&gPlayerParty[a], MON_DATA_ALT_ABILITY); + battlePokemon.otId = GetMonData(&gPlayerParty[a], MON_DATA_OT_ID); + GetMonData(&gPlayerParty[a], MON_DATA_NICKNAME, nickname); + StringCopy10(battlePokemon.nickname, nickname); + GetMonData(&gPlayerParty[a], MON_DATA_OT_NAME, battlePokemon.otName); + src = (u8 *)&battlePokemon; + for (size = 0; size < sizeof(battlePokemon); size++) + buffer[size] = src[size]; + break; + case 1: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPECIES); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 2: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 3: + for (size = 0; size < 4; size++) + { + moveData.moves[size] = GetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + size); + moveData.pp[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size); + } + moveData.ppBonuses = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES); + src = (u8 *)&moveData; + for (size = 0; size < sizeof(moveData); size++) + buffer[size] = src[size]; + break; + case 4: + case 5: + case 6: + case 7: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - 4); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 8: + for (size = 0; size < 4; size++) + buffer[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size); + buffer[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES); + size++; + break; + case 9: + case 10: + case 11: + case 12: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - 9); + size = 1; + break; + case 17: + data32 = GetMonData(&gPlayerParty[a], MON_DATA_OT_ID); + buffer[0] = (data32 & 0x000000FF); + buffer[1] = (data32 & 0x0000FF00) >> 8; + buffer[2] = (data32 & 0x00FF0000) >> 16; + size = 3; + break; + case 18: + data32 = GetMonData(&gPlayerParty[a], MON_DATA_EXP); + buffer[0] = (data32 & 0x000000FF); + buffer[1] = (data32 & 0x0000FF00) >> 8; + buffer[2] = (data32 & 0x00FF0000) >> 16; + size = 3; + break; + case 19: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_EV); + size = 1; + break; + case 20: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_EV); + size = 1; + break; + case 21: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_EV); + size = 1; + break; + case 22: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_EV); + size = 1; + break; + case 23: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_EV); + size = 1; + break; + case 24: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_EV); + size = 1; + break; + case 25: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP); + size = 1; + break; + case 26: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_POKERUS); + size = 1; + break; + case 27: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_MET_LOCATION); + size = 1; + break; + case 28: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_MET_LEVEL); + size = 1; + break; + case 29: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_MET_GAME); + size = 1; + break; + case 30: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_POKEBALL); + size = 1; + break; + case 31: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV); + buffer[1] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV); + buffer[2] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV); + buffer[3] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV); + buffer[4] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV); + buffer[5] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV); + size = 6; + break; + case 32: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV); + size = 1; + break; + case 33: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV); + size = 1; + break; + case 34: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV); + size = 1; + break; + case 35: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV); + size = 1; + break; + case 36: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV); + size = 1; + break; + case 37: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV); + size = 1; + break; + case 38: + data32 = GetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY); + buffer[0] = (data32 & 0x000000FF); + buffer[1] = (data32 & 0x0000FF00) >> 8; + buffer[2] = (data32 & 0x00FF0000) >> 16; + buffer[3] = (data32 & 0xFF000000) >> 24; + size = 4; + break; + case 39: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_CHECKSUM); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 40: + data32 = GetMonData(&gPlayerParty[a], MON_DATA_STATUS); + buffer[0] = (data32 & 0x000000FF); + buffer[1] = (data32 & 0x0000FF00) >> 8; + buffer[2] = (data32 & 0x00FF0000) >> 16; + buffer[3] = (data32 & 0xFF000000) >> 24; + size = 4; + break; + case 41: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_LEVEL); + size = 1; + break; + case 42: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_HP); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 43: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_MAX_HP); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 44: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_ATK); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 45: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_DEF); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 46: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPD); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 47: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPATK); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 48: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 49: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_COOL); + size = 1; + break; + case 50: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_BEAUTY); + size = 1; + break; + case 51: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_CUTE); + size = 1; + break; + case 52: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SMART); + size = 1; + break; + case 53: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_TOUGH); + size = 1; + break; + case 54: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SHEEN); + size = 1; + break; + case 55: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_COOL_RIBBON); + size = 1; + break; + case 56: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_BEAUTY_RIBBON); + size = 1; + break; + case 57: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_CUTE_RIBBON); + size = 1; + break; + case 58: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SMART_RIBBON); + size = 1; + break; + case 59: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_TOUGH_RIBBON); + size = 1; + break; + } + return size; +} + +void PlayerHandlecmd1(void) +{ + struct BattlePokemon battleMon; // I think this is a BattlePokemon + u8 *src = (u8 *)&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1]; + u8 *dst = (u8 *)&battleMon + gBattleBufferA[gActiveBank][1]; + u8 i; + + for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++) + dst[i] = src[i]; + Emitcmd29(1, gBattleBufferA[gActiveBank][2], dst); + PlayerBufferExecCompleted(); +} + +void PlayerHandleSetAttributes(void) +{ + u8 r4; + u8 i; + + if (gBattleBufferA[gActiveBank][2] == 0) + { + dp01_setattr_by_ch1_for_player_pokemon(gBattlePartyID[gActiveBank]); + } + else + { + r4 = gBattleBufferA[gActiveBank][2]; + for (i = 0; i < 6; i++) + { + if (r4 & 1) + dp01_setattr_by_ch1_for_player_pokemon(i); + r4 >>= 1; + } + } + PlayerBufferExecCompleted(); +} + +// Duplicate of sub_811EC68 +void dp01_setattr_by_ch1_for_player_pokemon(u8 a) +{ + struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBank][3]; + struct UnknownStruct3 *moveData = (struct UnknownStruct3 *)&gBattleBufferA[gActiveBank][3]; + s32 i; + + switch (gBattleBufferA[gActiveBank][1]) + { + case 0: + { + u8 iv; + + SetMonData(&gPlayerParty[a], MON_DATA_SPECIES, (u8 *)&battlePokemon->species); + SetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM, (u8 *)&battlePokemon->item); + for (i = 0; i < 4; i++) + { + SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + i, (u8 *)&battlePokemon->moves[i]); + SetMonData(&gPlayerParty[a], MON_DATA_PP1 + i, (u8 *)&battlePokemon->pp[i]); + } + SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, (u8 *)&battlePokemon->ppBonuses); + SetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP, (u8 *)&battlePokemon->friendship); + SetMonData(&gPlayerParty[a], MON_DATA_EXP, (u8 *)&battlePokemon->experience); + iv = battlePokemon->hpIV; + SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, (u8 *)&iv); + iv = battlePokemon->attackIV; + SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, (u8 *)&iv); + iv = battlePokemon->defenseIV; + SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, (u8 *)&iv); + iv = battlePokemon->speedIV; + SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, (u8 *)&iv); + iv = battlePokemon->spAttackIV; + SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, (u8 *)&iv); + iv = battlePokemon->spDefenseIV; + SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, (u8 *)&iv); + SetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY, (u8 *)&battlePokemon->personality); + SetMonData(&gPlayerParty[a], MON_DATA_STATUS, (u8 *)&battlePokemon->status1); + SetMonData(&gPlayerParty[a], MON_DATA_LEVEL, (u8 *)&battlePokemon->level); + SetMonData(&gPlayerParty[a], MON_DATA_HP, (u8 *)&battlePokemon->hp); + SetMonData(&gPlayerParty[a], MON_DATA_MAX_HP, (u8 *)&battlePokemon->maxHP); + SetMonData(&gPlayerParty[a], MON_DATA_ATK, (u8 *)&battlePokemon->attack); + SetMonData(&gPlayerParty[a], MON_DATA_DEF, (u8 *)&battlePokemon->defense); + SetMonData(&gPlayerParty[a], MON_DATA_SPD, (u8 *)&battlePokemon->speed); + SetMonData(&gPlayerParty[a], MON_DATA_SPATK, (u8 *)&battlePokemon->spAttack); + SetMonData(&gPlayerParty[a], MON_DATA_SPDEF, (u8 *)&battlePokemon->spDefense); + } + break; + case 1: + SetMonData(&gPlayerParty[a], MON_DATA_SPECIES, &gBattleBufferA[gActiveBank][3]); + break; + case 2: + SetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBank][3]); + break; + case 3: + for (i = 0; i < 4; i++) + { + SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + i, (u8 *)&moveData->moves[i]); + SetMonData(&gPlayerParty[a], MON_DATA_PP1 + i, (u8 *)&moveData->pp[i]); + } + SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, &moveData->ppBonuses); + break; + case 4: + case 5: + case 6: + case 7: + SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - 4, &gBattleBufferA[gActiveBank][3]); + break; + case 8: + SetMonData(&gPlayerParty[a], MON_DATA_PP1, &gBattleBufferA[gActiveBank][3]); + SetMonData(&gPlayerParty[a], MON_DATA_PP2, &gBattleBufferA[gActiveBank][4]); + SetMonData(&gPlayerParty[a], MON_DATA_PP3, &gBattleBufferA[gActiveBank][5]); + SetMonData(&gPlayerParty[a], MON_DATA_PP4, &gBattleBufferA[gActiveBank][6]); + SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBank][7]); + break; + case 9: + case 10: + case 11: + case 12: + SetMonData(&gPlayerParty[a], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - 9, &gBattleBufferA[gActiveBank][3]); + break; + case 17: + SetMonData(&gPlayerParty[a], MON_DATA_OT_ID, &gBattleBufferA[gActiveBank][3]); + break; + case 18: + SetMonData(&gPlayerParty[a], MON_DATA_EXP, &gBattleBufferA[gActiveBank][3]); + break; + case 19: + SetMonData(&gPlayerParty[a], MON_DATA_HP_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 20: + SetMonData(&gPlayerParty[a], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 21: + SetMonData(&gPlayerParty[a], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 22: + SetMonData(&gPlayerParty[a], MON_DATA_SPD_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 23: + SetMonData(&gPlayerParty[a], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 24: + SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 25: + SetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBank][3]); + break; + case 26: + SetMonData(&gPlayerParty[a], MON_DATA_POKERUS, &gBattleBufferA[gActiveBank][3]); + break; + case 27: + SetMonData(&gPlayerParty[a], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBank][3]); + break; + case 28: + SetMonData(&gPlayerParty[a], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBank][3]); + break; + case 29: + SetMonData(&gPlayerParty[a], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBank][3]); + break; + case 30: + SetMonData(&gPlayerParty[a], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBank][3]); + break; + case 31: + SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]); + SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][4]); + SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][5]); + SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][6]); + SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][7]); + SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][8]); + break; + case 32: + SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 33: + SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 34: + SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 35: + SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 36: + SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 37: + SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 38: + SetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBank][3]); + break; + case 39: + SetMonData(&gPlayerParty[a], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBank][3]); + break; + case 40: + SetMonData(&gPlayerParty[a], MON_DATA_STATUS, &gBattleBufferA[gActiveBank][3]); + break; + case 41: + SetMonData(&gPlayerParty[a], MON_DATA_LEVEL, &gBattleBufferA[gActiveBank][3]); + break; + case 42: + SetMonData(&gPlayerParty[a], MON_DATA_HP, &gBattleBufferA[gActiveBank][3]); + break; + case 43: + SetMonData(&gPlayerParty[a], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBank][3]); + break; + case 44: + SetMonData(&gPlayerParty[a], MON_DATA_ATK, &gBattleBufferA[gActiveBank][3]); + break; + case 45: + SetMonData(&gPlayerParty[a], MON_DATA_DEF, &gBattleBufferA[gActiveBank][3]); + break; + case 46: + SetMonData(&gPlayerParty[a], MON_DATA_SPD, &gBattleBufferA[gActiveBank][3]); + break; + case 47: + SetMonData(&gPlayerParty[a], MON_DATA_SPATK, &gBattleBufferA[gActiveBank][3]); + break; + case 48: + SetMonData(&gPlayerParty[a], MON_DATA_SPDEF, &gBattleBufferA[gActiveBank][3]); + break; + case 49: + SetMonData(&gPlayerParty[a], MON_DATA_COOL, &gBattleBufferA[gActiveBank][3]); + break; + case 50: + SetMonData(&gPlayerParty[a], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBank][3]); + break; + case 51: + SetMonData(&gPlayerParty[a], MON_DATA_CUTE, &gBattleBufferA[gActiveBank][3]); + break; + case 52: + SetMonData(&gPlayerParty[a], MON_DATA_SMART, &gBattleBufferA[gActiveBank][3]); + break; + case 53: + SetMonData(&gPlayerParty[a], MON_DATA_TOUGH, &gBattleBufferA[gActiveBank][3]); + break; + case 54: + SetMonData(&gPlayerParty[a], MON_DATA_SHEEN, &gBattleBufferA[gActiveBank][3]); + break; + case 55: + SetMonData(&gPlayerParty[a], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBank][3]); + break; + case 56: + SetMonData(&gPlayerParty[a], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBank][3]); + break; + case 57: + SetMonData(&gPlayerParty[a], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBank][3]); + break; + case 58: + SetMonData(&gPlayerParty[a], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBank][3]); + break; + case 59: + SetMonData(&gPlayerParty[a], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBank][3]); + break; + } + sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); +} + +void PlayerHandlecmd3(void) +{ + u8 *dst = (u8 *)&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1]; + u8 i; + + for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++) + dst[i] = gBattleBufferA[gActiveBank][3 + i]; + PlayerBufferExecCompleted(); +} + +void PlayerHandleLoadPokeSprite(void) +{ + sub_80318FC(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank; + gBattleBankFunc[gActiveBank] = bx_0802E404; +} + +void PlayerHandleSendOutPoke(void) +{ + sub_8032AA8(gActiveBank, gBattleBufferA[gActiveBank][2]); + gBattlePartyID[gActiveBank] = gBattleBufferA[gActiveBank][1]; + sub_80318FC(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + gActionSelectionCursor[gActiveBank] = 0; + gMoveSelectionCursor[gActiveBank] = 0; + sub_802F934(gActiveBank, gBattleBufferA[gActiveBank][2]); + gBattleBankFunc[gActiveBank] = sub_802D798; +} + +void sub_802F934(u8 bank, u8 b) +{ + u16 species; + + sub_8032AA8(bank, b); + gBattlePartyID[bank] = gBattleBufferA[bank][1]; + species = GetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_SPECIES); + gUnknown_0300434C[bank] = CreateInvisibleSpriteWithCallback(sub_80312F0); + GetMonSpriteTemplate_803C56C(species, GetBankIdentity(bank)); + gObjectBankIDs[bank] = CreateSprite( + &gUnknown_02024E8C, + sub_8077ABC(bank, 2), + sub_8077F68(bank), + sub_8079E90(bank)); + gSprites[gUnknown_0300434C[bank]].data1 = gObjectBankIDs[bank]; + gSprites[gObjectBankIDs[bank]].data0 = bank; + gSprites[gObjectBankIDs[bank]].data2 = species; + gSprites[gObjectBankIDs[bank]].oam.paletteNum = bank; + StartSpriteAnim(&gSprites[gObjectBankIDs[bank]], gBattleMonForms[bank]); + gSprites[gObjectBankIDs[bank]].invisible = TRUE; + gSprites[gObjectBankIDs[bank]].callback = SpriteCallbackDummy; + gSprites[gUnknown_0300434C[bank]].data0 = sub_8046400(0, 0xFF); +} + +void PlayerHandleReturnPokeToBall(void) +{ + if (gBattleBufferA[gActiveBank][1] == 0) + { + ewram17810[gActiveBank].unk4 = 0; + gBattleBankFunc[gActiveBank] = sub_802FB2C; + } + else + { + FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); + DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); + sub_8043DB0(gHealthboxIDs[gActiveBank]); + PlayerBufferExecCompleted(); + } +} + +void sub_802FB2C(void) +{ + switch (ewram17810[gActiveBank].unk4) + { + case 0: + if (ewram17800[gActiveBank].unk0_2) + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); + ewram17810[gActiveBank].unk4 = 1; + break; + case 1: + if (!ewram17810[gActiveBank].unk0_6) + { + ewram17810[gActiveBank].unk4 = 0; + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 1); + gBattleBankFunc[gActiveBank] = sub_802DEAC; + } + } +} + +void PlayerHandleTrainerThrow(void) +{ + s16 r7; + + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + if (GetBankIdentity(gActiveBank) & 2) + r7 = 16; + else + r7 = -16; + } + else + { + r7 = 0; + } + sub_8031AF4(gSaveBlock2.playerGender, gActiveBank); + GetMonSpriteTemplate_803C5A0(gSaveBlock2.playerGender, GetBankIdentity(gActiveBank)); + gObjectBankIDs[gActiveBank] = CreateSprite( + &gUnknown_02024E8C, + r7 + 80, + (8 - gTrainerBackPicCoords[gSaveBlock2.playerGender].coords) * 4 + 80, + sub_8079E90(gActiveBank)); + gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank; + gSprites[gObjectBankIDs[gActiveBank]].pos2.x = 240; + gSprites[gObjectBankIDs[gActiveBank]].data0 = -2; + gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0; + gBattleBankFunc[gActiveBank] = sub_802D204; +} + +void PlayerHandleTrainerSlide(void) +{ + sub_8031AF4(gSaveBlock2.playerGender, gActiveBank); + GetMonSpriteTemplate_803C5A0(gSaveBlock2.playerGender, GetBankIdentity(gActiveBank)); + gObjectBankIDs[gActiveBank] = CreateSprite( + &gUnknown_02024E8C, + 80, + (8 - gTrainerBackPicCoords[gSaveBlock2.playerGender].coords) * 4 + 80, + 30); + gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank; + gSprites[gObjectBankIDs[gActiveBank]].pos2.x = -96; + gSprites[gObjectBankIDs[gActiveBank]].data0 = 2; + gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0; + gBattleBankFunc[gActiveBank] = sub_802D23C; +} + +void PlayerHandleTrainerSlideBack(void) +{ + oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]); + gSprites[gObjectBankIDs[gActiveBank]].data0 = 50; + gSprites[gObjectBankIDs[gActiveBank]].data2 = -40; + gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; + gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34; + oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], SpriteCallbackDummy); + StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 1); + gBattleBankFunc[gActiveBank] = sub_802D274; +} + +void PlayerHandlecmd10(void) +{ + if (ewram17810[gActiveBank].unk4 == 0) + { + if (ewram17800[gActiveBank].unk0_2) + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); + ewram17810[gActiveBank].unk4++; + } + else + { + if (ewram17810[gActiveBank].unk0_6 == 0) + { + ewram17810[gActiveBank].unk4 = 0; + sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + PlaySE12WithPanning(SE_POKE_DEAD, -64); + gSprites[gObjectBankIDs[gActiveBank]].data1 = 0; + gSprites[gObjectBankIDs[gActiveBank]].data2 = 5; + gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80105EC; + gBattleBankFunc[gActiveBank] = sub_802DE10; + } + } +} + +void PlayerHandlecmd11(void) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 2, 0, 16, 0); + PlayerBufferExecCompleted(); +} + +void PlayerHandlecmd12(void) +{ + ewram17840.unk8 = 4; + gDoingBattleAnim = 1; + move_anim_start_t4(gActiveBank, gActiveBank, GetBankByPlayerAI(1), 3); + gBattleBankFunc[gActiveBank] = bx_wait_t1; +} + +void PlayerHandleBallThrow(void) +{ + u8 var = gBattleBufferA[gActiveBank][1]; + + ewram17840.unk8 = var; + gDoingBattleAnim = 1; + move_anim_start_t4(gActiveBank, gActiveBank, GetBankByPlayerAI(1), 3); + gBattleBankFunc[gActiveBank] = bx_wait_t1; +} + +void PlayerHandlePuase(void) +{ + u8 var = gBattleBufferA[gActiveBank][1]; + + // WTF is this?? + while (var != 0) + var--; + + PlayerBufferExecCompleted(); +} + +void PlayerHandleMoveAnimation(void) +{ + if (!mplay_80342A4(gActiveBank)) + { + u16 r0 = gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8); + + gUnknown_0202F7C4 = gBattleBufferA[gActiveBank][3]; + gMovePowerMoveAnim = gBattleBufferA[gActiveBank][4] | (gBattleBufferA[gActiveBank][5] << 8); + gMoveDmgMoveAnim = gBattleBufferA[gActiveBank][6] | (gBattleBufferA[gActiveBank][7] << 8) | (gBattleBufferA[gActiveBank][8] << 16) | (gBattleBufferA[gActiveBank][9] << 24); + gHappinessMoveAnim = gBattleBufferA[gActiveBank][10]; + gWeatherMoveAnim = gBattleBufferA[gActiveBank][12] | (gBattleBufferA[gActiveBank][13] << 8); + gDisableStructMoveAnim = (u32 *)&gBattleBufferA[gActiveBank][16]; + gPID_perBank[gActiveBank] = *gDisableStructMoveAnim; + if (sub_8031720(r0, gUnknown_0202F7C4) != 0) + { + // Dead code. sub_8031720 always returns 0. + PlayerBufferExecCompleted(); + } + else + { + ewram17810[gActiveBank].unk4 = 0; + gBattleBankFunc[gActiveBank] = sub_8030190; + } + } +} + +void sub_8030190(void) +{ + u16 r4 = gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8); + u8 r7 = gBattleBufferA[gActiveBank][11]; + + switch (ewram17810[gActiveBank].unk4) + { + case 0: + if (ewram17800[gActiveBank].unk0_2 == 1 && ewram17800[gActiveBank].unk0_3 == 0) + { + ewram17800[gActiveBank].unk0_3 = 1; + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); + } + ewram17810[gActiveBank].unk4 = 1; + break; + case 1: + if (ewram17810[gActiveBank].unk0_6 == 0) + { + sub_80326EC(0); + ExecuteMoveAnim(r4); + ewram17810[gActiveBank].unk4 = 2; + } + break; + case 2: + gAnimScriptCallback(); + if (!gAnimScriptActive) + { + sub_80326EC(1); + if (ewram17800[gActiveBank].unk0_2 == 1 && r7 < 2) + { + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); + ewram17800[gActiveBank].unk0_3 = 0; + } + ewram17810[gActiveBank].unk4 = 3; + } + break; + case 3: + if (ewram17810[gActiveBank].unk0_6 == 0) + { + sub_8031F24(); + sub_80324BC(gActiveBank, gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8)); + ewram17810[gActiveBank].unk4 = 0; + PlayerBufferExecCompleted(); + } + break; + } +} + +void PlayerHandlePrintString(void) +{ + gUnknown_030042A4 = 0; + gUnknown_030042A0 = 0; + BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]); + sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 0x90, 2, 15); + gBattleBankFunc[gActiveBank] = sub_802DF18; +} + +void PlayerHandlePrintStringPlayerOnly(void) +{ + if (GetBankSide(gActiveBank) == 0) + PlayerHandlePrintString(); + else + PlayerBufferExecCompleted(); +} + +void PlayerHandlecmd18(void) +{ + int r4; + + gUnknown_030042A4 = 0; + gUnknown_030042A0 = 160; + FillWindowRect(&gUnknown_03004210, 10, 2, 15, 27, 18); + FillWindowRect(&gUnknown_03004210, 10, 2, 35, 16, 38); + + gBattleBankFunc[gActiveBank] = sub_802C098; + + InitWindow(&gUnknown_03004210, gUnknown_08400CF3, 400, 18, 35); + sub_8002F44(&gUnknown_03004210); + sub_814A5C0(0, 0xFFFF, 12, 11679, 0); + + for (r4 = 0; r4 < 4; r4++) + nullsub_8(r4); + + sub_802E3E4(gActionSelectionCursor[gActiveBank], 0); + + StrCpyDecodeToDisplayedStringBattle((u8 *) gUnknown_08400CA8); + InitWindow(&gUnknown_03004210, gDisplayedStringBattle, SUB_803037C_TILE_DATA_OFFSET, 2, 35); + sub_8002F44(&gUnknown_03004210); +} + +void PlayerHandlecmd19() +{ +} + +void PlayerHandlecmd20(void) +{ + sub_814A5C0(0, 0xFFFF, 12, 0x2D9F, 0); + sub_80304A8(); + gBattleBankFunc[gActiveBank] = sub_802C68C; +} + +void sub_80304A8(void) +{ + gUnknown_030042A4 = 0; + gUnknown_030042A0 = 320; + sub_802E1B0(); + gUnknown_03004344 = 0xFF; + sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); + if (gBattleBufferA[gActiveBank][2] != 1) + { + InitWindow(&gUnknown_03004210, gUnknown_08400D38, 656, 23, 55); + sub_8002F44(&gUnknown_03004210); + } + sub_802E220(); + sub_802E2D4(); +} + +void PlayerHandleOpenBag(void) +{ + s32 i; + + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gBattleBankFunc[gActiveBank] = sub_802E004; + gBankInMenu = gActiveBank; + for (i = 0; i < 3; i++) + gUnknown_02038470[i] = gBattleBufferA[gActiveBank][1 + i]; +} + +void PlayerHandlecmd22(void) +{ + s32 i; + + gUnknown_0300434C[gActiveBank] = CreateTask(TaskDummy, 0xFF); + gTasks[gUnknown_0300434C[gActiveBank]].data[0] = gBattleBufferA[gActiveBank][1] & 0xF; + ewram[0x16054] = gBattleBufferA[gActiveBank][1] >> 4; + ewram[0x1609D] = gBattleBufferA[gActiveBank][2]; + ewram[0x160C0] = gBattleBufferA[gActiveBank][3]; + for (i = 0; i < 3; i++) + gUnknown_02038470[i] = gBattleBufferA[gActiveBank][4 + i]; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gBattleBankFunc[gActiveBank] = sub_802DF30; + gBankInMenu = gActiveBank; +} + +void PlayerHandlecmd23(void) +{ + BattleMusicStop(); + BeginNormalPaletteFade(0xFFFFFFFF, 2, 0, 16, 0); + PlayerBufferExecCompleted(); +} + +void PlayerHandleHealthBarUpdate(void) +{ + s16 r7; + + load_gfxc_health_bar(0); + r7 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); + if (r7 != 0x7FFF) + { + u32 maxHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP); + u32 curHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_HP); + + sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, curHP, r7); + } + else + { + u32 maxHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP); + + sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, 0, r7); + sub_80440EC(gHealthboxIDs[gActiveBank], 0, 0); + } + gBattleBankFunc[gActiveBank] = bx_t1_healthbar_update; +} + +void PlayerHandleExpBarUpdate(void) +{ + u8 r7 = gBattleBufferA[gActiveBank][1]; + + if (GetMonData(&gPlayerParty[r7], MON_DATA_LEVEL) >= 100) + { + PlayerBufferExecCompleted(); + } + else + { + u16 r4; + u8 taskId; + + load_gfxc_health_bar(1); + GetMonData(&gPlayerParty[r7], MON_DATA_SPECIES); // unused return value + r4 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); + taskId = CreateTask(sub_802D924, 10); + gTasks[taskId].data[0] = r7; + gTasks[taskId].data[1] = r4; + gTasks[taskId].data[2] = gActiveBank; + gBattleBankFunc[gActiveBank] = nullsub_91; + } +} + +void PlayerHandleStatusIconUpdate(void) +{ + if (!mplay_80342A4(gActiveBank)) + { + sub_8045A5C(gHealthboxIDs[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], 9); + ewram17810[gActiveBank].unk0_4 = 0; + gBattleBankFunc[gActiveBank] = sub_802E434; + } +} + +void PlayerHandleStatusAnimation(void) +{ + if (!mplay_80342A4(gActiveBank)) + { + move_anim_start_t2_for_situation( + gBattleBufferA[gActiveBank][1], + gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8) | (gBattleBufferA[gActiveBank][4] << 16) | (gBattleBufferA[gActiveBank][5] << 24)); + gBattleBankFunc[gActiveBank] = sub_802E434; + } +} + +void PlayerHandleStatusXor(void) +{ + u8 val = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_STATUS) ^ gBattleBufferA[gActiveBank][1]; + + SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_STATUS, &val); + PlayerBufferExecCompleted(); +} + +void PlayerHandlecmd29(void) +{ + PlayerBufferExecCompleted(); +} + +void PlayerHandleDMATransfer(void) +{ + u32 val1 = gBattleBufferA[gActiveBank][1] + | (gBattleBufferA[gActiveBank][2] << 8) + | (gBattleBufferA[gActiveBank][3] << 16) + | (gBattleBufferA[gActiveBank][4] << 24); + u16 val2 = gBattleBufferA[gActiveBank][5] | (gBattleBufferA[gActiveBank][6] << 8); + + const u8 *src = &gBattleBufferA[gActiveBank][7]; + u8 *dst = (u8 *)val1; + u32 size = val2; + + while (1) + { + if (size <= 0x1000) + { + DmaCopy16(3, src, dst, size); + break; + } + DmaCopy16(3, src, dst, 0x1000); + src += 0x1000; + dst += 0x1000; + size -= 0x1000; + } + PlayerBufferExecCompleted(); +} + +void PlayerHandlecmd31(void) +{ + PlayBGM(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8)); + PlayerBufferExecCompleted(); +} + +void PlayerHandlecmd32(void) +{ + PlayerBufferExecCompleted(); +} + +void PlayerHandlecmd33(void) +{ + Emitcmd33(1, 0, 0); + PlayerBufferExecCompleted(); +} + +void PlayerHandlecmd34(void) +{ + Emitcmd34(1, 0, 0); + PlayerBufferExecCompleted(); +} + +void PlayerHandlecmd35(void) +{ + Emitcmd35(1, 0); + PlayerBufferExecCompleted(); +} + +void PlayerHandlecmd36(void) +{ + Emitcmd36(1, 0); + PlayerBufferExecCompleted(); +} + +void PlayerHandlecmd37(void) +{ + gUnknown_020238C8.unk0_0 = 0; + PlayerBufferExecCompleted(); +} + +void PlayerHandlecmd38(void) +{ + gUnknown_020238C8.unk0_0 = gBattleBufferA[gActiveBank][1]; + PlayerBufferExecCompleted(); +} + +void PlayerHandlecmd39(void) +{ + gUnknown_020238C8.unk0_7 = 0; + PlayerBufferExecCompleted(); +} + +void PlayerHandlecmd40(void) +{ + gUnknown_020238C8.unk0_7 ^= 1; + PlayerBufferExecCompleted(); +} + +void PlayerHandleHitAnimation(void) +{ + if (gSprites[gObjectBankIDs[gActiveBank]].invisible == TRUE) + { + PlayerBufferExecCompleted(); + } + else + { + gDoingBattleAnim = 1; + gSprites[gObjectBankIDs[gActiveBank]].data1 = 0; + sub_8047858(gActiveBank); + gBattleBankFunc[gActiveBank] = bx_blink_t1; + } +} + +void PlayerHandlecmd42(void) +{ + PlayerBufferExecCompleted(); +} + +void PlayerHandleEffectivenessSound(void) +{ + s8 pan; + + if (GetBankSide(gActiveBank) == 0) + pan = -64; + else + pan = 63; + PlaySE12WithPanning(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8), pan); + PlayerBufferExecCompleted(); +} + +void PlayerHandlecmd44(void) +{ + PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8)); + PlayerBufferExecCompleted(); +} + +void PlayerHandleFaintingCry(void) +{ + u16 species = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES); + + PlayCry3(species, -25, 5); + PlayerBufferExecCompleted(); +} + +void PlayerHandleIntroSlide(void) +{ + sub_80E43C0(gBattleBufferA[gActiveBank][1]); + gUnknown_02024DE8 |= 1; + PlayerBufferExecCompleted(); +} + +void PlayerHandleTrainerBallThrow(void) +{ + u8 paletteNum; + u8 taskId; + + oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]); + gSprites[gObjectBankIDs[gActiveBank]].data0 = 50; + gSprites[gObjectBankIDs[gActiveBank]].data2 = -40; + gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; + gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34; + gSprites[gObjectBankIDs[gActiveBank]].data5 = gActiveBank; + oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], sub_8030E38); + StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 1); + paletteNum = AllocSpritePalette(0xD6F8); + LoadCompressedPalette(gTrainerBackPicPaletteTable[gSaveBlock2.playerGender].data, 0x100 + paletteNum * 16, 32); + gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = paletteNum; + taskId = CreateTask(task05_08033660, 5); + gTasks[taskId].data[0] = gActiveBank; + if (ewram17810[gActiveBank].unk0_0) + gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0; + ewram17810[4].unk9 |= 1; + gBattleBankFunc[gActiveBank] = nullsub_91; +} + +void sub_8030E38(struct Sprite *sprite) +{ + u8 r4 = sprite->data5; + + FreeSpriteOamMatrix(sprite); + FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum)); + DestroySprite(sprite); + sub_80318FC(&gPlayerParty[gBattlePartyID[r4]], r4); + StartSpriteAnim(&gSprites[gObjectBankIDs[r4]], 0); +} + +void task05_08033660(u8 taskId) +{ + if (gTasks[taskId].data[1] < 31) + { + gTasks[taskId].data[1]++; + } + else + { + u8 savedActiveBank = gActiveBank; + + gActiveBank = gTasks[taskId].data[0]; + if (!IsDoubleBattle() || (gBattleTypeFlags & 0x40)) + { + gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; + sub_802F934(gActiveBank, 0); + } + else + { + gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; + sub_802F934(gActiveBank, 0); + gActiveBank ^= 2; + gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; + sub_80318FC(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + sub_802F934(gActiveBank, 0); + gActiveBank ^= 2; + } + gBattleBankFunc[gActiveBank] = sub_802D500; + gActiveBank = savedActiveBank; + DestroyTask(taskId); + } +} + +void PlayerHandlecmd48(void) +{ + if (gBattleBufferA[gActiveBank][1] != 0 && GetBankSide(gActiveBank) == 0) + { + PlayerBufferExecCompleted(); + } + else + { + ewram17810[gActiveBank].unk0_0 = 1; + gUnknown_02024E68[gActiveBank] = sub_8044804(gActiveBank, (struct BattleInterfaceStruct2 *)&gBattleBufferA[gActiveBank][4], gBattleBufferA[gActiveBank][1], gBattleBufferA[gActiveBank][2]); + ewram17810[gActiveBank].unk5 = 0; + if (gBattleBufferA[gActiveBank][2] != 0) + ewram17810[gActiveBank].unk5 = 0x5D; + gBattleBankFunc[gActiveBank] = sub_8031064; + } +} + +void sub_8031064(void) +{ + if (ewram17810[gActiveBank].unk5++ > 0x5C) + { + ewram17810[gActiveBank].unk5 = 0; + PlayerBufferExecCompleted(); + } +} + +void PlayerHandlecmd49(void) +{ + if (ewram17810[gActiveBank].unk0_0) + gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0; + PlayerBufferExecCompleted(); +} + +void PlayerHandlecmd50(void) +{ + dp11b_obj_free(gActiveBank, 1); + dp11b_obj_free(gActiveBank, 0); + PlayerBufferExecCompleted(); +} + +void PlayerHandleSpriteInvisibility(void) +{ + if (sub_8078874(gActiveBank)) + { + gSprites[gObjectBankIDs[gActiveBank]].invisible = gBattleBufferA[gActiveBank][1]; + sub_8031F88(gActiveBank); + } + PlayerBufferExecCompleted(); +} + +void PlayerHandleBattleAnimation(void) +{ + if (!mplay_80342A4(gActiveBank)) + { + u8 val2 = gBattleBufferA[gActiveBank][1]; + u16 val = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); + + if (move_anim_start_t3(gActiveBank, gActiveBank, gActiveBank, val2, val)) + PlayerBufferExecCompleted(); + else + gBattleBankFunc[gActiveBank] = sub_802E460; + } +} + +void PlayerHandleLinkStandbyMsg(void) +{ + switch (gBattleBufferA[gActiveBank][1]) + { + case 0: + b_link_standby_message(); + // fall through + case 1: + dp11b_obj_free(gActiveBank, 1); + dp11b_obj_free(gActiveBank, 0); + break; + case 2: + b_link_standby_message(); + break; + } + PlayerBufferExecCompleted(); +} + +void PlayerHandleResetActionMoveSelection(void) +{ + switch (gBattleBufferA[gActiveBank][1]) + { + case 0: + gActionSelectionCursor[gActiveBank] = 0; + gMoveSelectionCursor[gActiveBank] = 0; + break; + case 1: + gActionSelectionCursor[gActiveBank] = 0; + break; + case 2: + gMoveSelectionCursor[gActiveBank] = 0; + break; + } + PlayerBufferExecCompleted(); +} + +void PlayerHandlecmd55(void) +{ + gBattleOutcome = gBattleBufferA[gActiveBank][1]; + FadeOutMapMusic(5); + BeginFastPaletteFade(3); + PlayerBufferExecCompleted(); + gBattleBankFunc[gActiveBank] = sub_802D18C; +} + +void PlayerHandlecmd56(void) +{ +} diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c new file mode 100644 index 000000000..46e34589a --- /dev/null +++ b/src/battle_controller_safari.c @@ -0,0 +1,173 @@ +#include "global.h" +#include "battle_anim_81258BC.h" +#include "battle.h" +#include "battle_message.h" +#include "menu_cursor.h" +#include "text.h" + +extern struct Window gUnknown_03004210; +extern u8 gDisplayedStringBattle[]; +extern u8 gActionSelectionCursor[]; + +extern const u8 gUnknown_08400CBB[]; +extern u8 gActiveBank; +extern const u8 gUnknown_08400D15[]; + +extern void *gBattleBankFunc[]; +extern u16 gUnknown_030042A0; +extern u16 gUnknown_030042A4; + +#if ENGLISH +#define SUB_812BB10_TILE_DATA_OFFSET 440 +#elif GERMAN +#define SUB_812BB10_TILE_DATA_OFFSET 444 +#endif + +// this file's functions +void SafariHandleGetAttributes(void); +void SafariHandlecmd1(void); +void SafariHandleSetAttributes(void); +void SafariHandlecmd3(void); +void SafariHandleLoadPokeSprite(void); +void SafariHandleSendOutPoke(void); +void SafariHandleReturnPokeToBall(void); +void SafariHandleTrainerThrow(void); +void SafariHandleTrainerSlide(void); +void SafariHandleTrainerSlideBack(void); +void SafariHandlecmd10(void); +void SafariHandlecmd11(void); +void SafariHandlecmd12(void); +void SafariHandleBallThrow(void); +void SafariHandlePuase(void); +void SafariHandleMoveAnimation(void); +void SafariHandlePrintString(void); +void SafariHandlePrintStringPlayerOnly(void); +void SafariHandlecmd18(void); +void SafariHandlecmd19(void); +void SafariHandlecmd20(void); +void SafariHandleOpenBag(void); +void SafariHandlecmd22(void); +void SafariHandlecmd23(void); +void SafariHandleHealthBarUpdate(void); +void SafariHandleExpBarUpdate(void); +void SafariHandleStatusIconUpdate(void); +void SafariHandleStatusAnimation(void); +void SafariHandleStatusXor(void); +void SafariHandlecmd29(void); +void SafariHandleDMATransfer(void); +void SafariHandlecmd31(void); +void SafariHandlecmd32(void); +void SafariHandlecmd33(void); +void SafariHandlecmd34(void); +void SafariHandlecmd35(void); +void SafariHandlecmd36(void); +void SafariHandlecmd37(void); +void SafariHandlecmd38(void); +void SafariHandlecmd39(void); +void SafariHandlecmd40(void); +void SafariHandleHitAnimation(void); +void SafariHandlecmd42(void); +void SafariHandleEffectivenessSound(void); +void SafariHandlecmd44(void); +void SafariHandleFaintingCry(void); +void SafariHandleIntroSlide(void); +void SafariHandleTrainerBallThrow(void); +void SafariHandlecmd48(void); +void SafariHandlecmd49(void); +void SafariHandlecmd50(void); +void SafariHandleSpriteInvisibility(void); +void SafariHandleBattleAnimation(void); +void SafariHandleLinkStandbyMsg(void); +void SafariHandleResetActionMoveSelection(void); +void SafariHandlecmd55(void); +void SafariHandlecmd56(void); + +// const data +typedef void (*BattleBufferCmd) (void); +const BattleBufferCmd gSafariBufferCommands[] = +{ + SafariHandleGetAttributes, + SafariHandlecmd1, + SafariHandleSetAttributes, + SafariHandlecmd3, + SafariHandleLoadPokeSprite, + SafariHandleSendOutPoke, + SafariHandleReturnPokeToBall, + SafariHandleTrainerThrow, + SafariHandleTrainerSlide, + SafariHandleTrainerSlideBack, + SafariHandlecmd10, + SafariHandlecmd11, + SafariHandlecmd12, + SafariHandleBallThrow, + SafariHandlePuase, + SafariHandleMoveAnimation, + SafariHandlePrintString, + SafariHandlePrintStringPlayerOnly, + SafariHandlecmd18, + SafariHandlecmd19, + SafariHandlecmd20, + SafariHandleOpenBag, + SafariHandlecmd22, + SafariHandlecmd23, + SafariHandleHealthBarUpdate, + SafariHandleExpBarUpdate, + SafariHandleStatusIconUpdate, + SafariHandleStatusAnimation, + SafariHandleStatusXor, + SafariHandlecmd29, + SafariHandleDMATransfer, + SafariHandlecmd31, + SafariHandlecmd32, + SafariHandlecmd33, + SafariHandlecmd34, + SafariHandlecmd35, + SafariHandlecmd36, + SafariHandlecmd37, + SafariHandlecmd38, + SafariHandlecmd39, + SafariHandlecmd40, + SafariHandleHitAnimation, + SafariHandlecmd42, + SafariHandleEffectivenessSound, + SafariHandlecmd44, + SafariHandleFaintingCry, + SafariHandleIntroSlide, + SafariHandleTrainerBallThrow, + SafariHandlecmd48, + SafariHandlecmd49, + SafariHandlecmd50, + SafariHandleSpriteInvisibility, + SafariHandleBattleAnimation, + SafariHandleLinkStandbyMsg, + SafariHandleResetActionMoveSelection, + SafariHandlecmd55, + SafariHandlecmd56, +}; +// code + +void SafariHandlecmd18(void) { + int i; + + gUnknown_030042A4 = 0; + gUnknown_030042A0 = 160; + gUnknown_03004210.paletteNum = 0; + FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 15, 27, 18); + FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 35, 16, 36); + gBattleBankFunc[gActiveBank] = bx_battle_menu_t6_2; + + InitWindow(&gUnknown_03004210, gUnknown_08400D15, 400, 18, 35); + sub_8002F44(&gUnknown_03004210); + sub_814A5C0(0, 0xFFFF, 12, 11679, 0); + + for (i = 0; i < 4; i++) + { + nullsub_8(i); + } + + sub_802E3E4(gActionSelectionCursor[gActiveBank], 0); + StrCpyDecodeToDisplayedStringBattle((u8 *) gUnknown_08400CBB); + + InitWindow(&gUnknown_03004210, gDisplayedStringBattle, SUB_812BB10_TILE_DATA_OFFSET, 2, 35); + sub_8002F44(&gUnknown_03004210); +} diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c new file mode 100644 index 000000000..08bad3c12 --- /dev/null +++ b/src/battle_controller_wally.c @@ -0,0 +1,1611 @@ +#include "global.h" +#include "battle.h" +#include "battle_interface.h" +#include "battle_message.h" +#include "data2.h" +#include "link.h" +#include "main.h" +#include "menu_cursor.h" +#include "palette.h" +#include "pokemon.h" +#include "rom3.h" +#include "songs.h" +#include "sound.h" +#include "sprite.h" +#include "item_use.h" +#include "string_util.h" +#include "task.h" +#include "text.h" +#include "util.h" + +//Possibly PokemonSubstruct1 +struct UnknownStruct3 +{ + u16 moves[4]; + u8 pp[4]; + u8 ppBonuses; +}; + +extern u8 gActiveBank; +extern void (*gBattleBankFunc[])(void); +extern u32 gBattleExecBuffer; +extern u8 gBattleBufferA[][0x200]; +extern u8 gObjectBankIDs[]; +extern MainCallback gPreBattleCallback1; +extern bool8 gDoingBattleAnim; +extern u16 gBattlePartyID[]; +extern u8 gHealthboxIDs[]; +extern u16 gBattleTypeFlags; +extern u16 gMovePowerMoveAnim; +extern u32 gMoveDmgMoveAnim; +extern u8 gHappinessMoveAnim; +extern u16 gWeatherMoveAnim; +extern u32 *gDisableStructMoveAnim; +extern u32 gPID_perBank[]; +extern void (*gAnimScriptCallback)(void); +extern bool8 gAnimScriptActive; +extern u8 gDisplayedStringBattle[]; +extern u8 gBankInMenu; +extern u8 gBattleMonForms[]; +extern u8 gBattleOutcome; +extern u16 gUnknown_02024DE8; +extern u8 gUnknown_02024E68[]; +extern struct SpriteTemplate gUnknown_02024E8C; +extern u8 gUnknown_0202F7C4; +extern struct Window gUnknown_03004210; +extern u16 gUnknown_030042A0; +extern u16 gUnknown_030042A4; +extern u8 gUnknown_0300434C[]; +extern const u8 gUnknown_08400CCC[]; +extern const u8 gUnknown_08400CF3[]; + +// TODO: include rom3.h when my other PR gets merged +extern void Emitcmd33(u8, u8, u16); +extern void Emitcmd35(u8, u16); + +extern void nullsub_14(void); +extern void PrepareBagForWallyTutorial(void); +extern void sub_8141828(); +extern void sub_8045A5C(); +extern void sub_804777C(); +extern void sub_8043DFC(); +extern bool8 IsDoubleBattle(void); +extern void c3_0802FDF4(u8); +extern void PlayerHandlecmd1(void); +extern void sub_8031AF4(); +extern u8 GetBankIdentity(u8); +extern void sub_80313A0(struct Sprite *); +extern u8 GetBankByPlayerAI(u8); +extern u8 sub_8031720(); +extern void ExecuteMoveAnim(); +extern void sub_80326EC(); +extern void sub_8031F24(void); +extern void sub_80324BC(); +extern void BufferStringBattle(); +extern u8 GetBankSide(u8); +extern void sub_80304A8(void); +extern void sub_8047858(); +extern void sub_80E43C0(); +extern void oamt_add_pos2_onto_pos1(); +extern void sub_8078B34(struct Sprite *); +extern void sub_8030E38(struct Sprite *); +extern void oamt_set_x3A_32(); +extern u8 sub_8046400(); +extern u8 sub_8077ABC(); +extern u8 sub_8077F68(); +extern u8 sub_8079E90(); +extern void sub_80312F0(struct Sprite *); +extern bool8 move_anim_start_t3(); + +// this file's functions + +void WallyBufferRunCommand(void); +void sub_81374FC(void); +void sub_81376B8(void); +void WallyBufferExecCompleted(void); +u32 sub_8137A84(u8, u8 *); +void sub_8138294(u8); +void sub_81390D0(void); +void sub_8139A2C(u8); + +void WallyHandleGetAttributes(void); +void WallyHandlecmd1(void); +void WallyHandleSetAttributes(void); +void WallyHandlecmd3(void); +void WallyHandleLoadPokeSprite(void); +void WallyHandleSendOutPoke(void); +void WallyHandleReturnPokeToBall(void); +void WallyHandleTrainerThrow(void); +void WallyHandleTrainerSlide(void); +void WallyHandleTrainerSlideBack(void); +void WallyHandlecmd10(void); +void WallyHandlecmd11(void); +void WallyHandlecmd12(void); +void WallyHandleBallThrow(void); +void WallyHandlePuase(void); +void WallyHandleMoveAnimation(void); +void WallyHandlePrintString(void); +void WallyHandlePrintStringPlayerOnly(void); +void WallyHandlecmd18(void); +void WallyHandlecmd19(void); +void WallyHandlecmd20(void); +void WallyHandleOpenBag(void); +void WallyHandlecmd22(void); +void WallyHandlecmd23(void); +void WallyHandleHealthBarUpdate(void); +void WallyHandleExpBarUpdate(void); +void WallyHandleStatusIconUpdate(void); +void WallyHandleStatusAnimation(void); +void WallyHandleStatusXor(void); +void WallyHandlecmd29(void); +void WallyHandleDMATransfer(void); +void WallyHandlecmd31(void); +void WallyHandlecmd32(void); +void WallyHandlecmd33(void); +void WallyHandlecmd34(void); +void WallyHandlecmd35(void); +void WallyHandlecmd36(void); +void WallyHandlecmd37(void); +void WallyHandlecmd38(void); +void WallyHandlecmd39(void); +void WallyHandlecmd40(void); +void WallyHandleHitAnimation(void); +void WallyHandlecmd42(void); +void WallyHandleEffectivenessSound(void); +void WallyHandlecmd44(void); +void WallyHandleFaintingCry(void); +void WallyHandleIntroSlide(void); +void WallyHandleTrainerBallThrow(void); +void WallyHandlecmd48(void); +void WallyHandlecmd49(void); +void WallyHandlecmd50(void); +void WallyHandleSpriteInvisibility(void); +void WallyHandleBattleAnimation(void); +void WallyHandleLinkStandbyMsg(void); +void WallyHandleResetActionMoveSelection(void); +void WallyHandlecmd55(void); +void WallyHandlecmd56(void); + +// const data + +typedef void (*BattleBufferCmd) (void); +static const BattleBufferCmd gWallyBufferCommands[] = +{ + WallyHandleGetAttributes, + WallyHandlecmd1, + WallyHandleSetAttributes, + WallyHandlecmd3, + WallyHandleLoadPokeSprite, + WallyHandleSendOutPoke, + WallyHandleReturnPokeToBall, + WallyHandleTrainerThrow, + WallyHandleTrainerSlide, + WallyHandleTrainerSlideBack, + WallyHandlecmd10, + WallyHandlecmd11, + WallyHandlecmd12, + WallyHandleBallThrow, + WallyHandlePuase, + WallyHandleMoveAnimation, + WallyHandlePrintString, + WallyHandlePrintStringPlayerOnly, + WallyHandlecmd18, + WallyHandlecmd19, + WallyHandlecmd20, + WallyHandleOpenBag, + WallyHandlecmd22, + WallyHandlecmd23, + WallyHandleHealthBarUpdate, + WallyHandleExpBarUpdate, + WallyHandleStatusIconUpdate, + WallyHandleStatusAnimation, + WallyHandleStatusXor, + WallyHandlecmd29, + WallyHandleDMATransfer, + WallyHandlecmd31, + WallyHandlecmd32, + WallyHandlecmd33, + WallyHandlecmd34, + WallyHandlecmd35, + WallyHandlecmd36, + WallyHandlecmd37, + WallyHandlecmd38, + WallyHandlecmd39, + WallyHandlecmd40, + WallyHandleHitAnimation, + WallyHandlecmd42, + WallyHandleEffectivenessSound, + WallyHandlecmd44, + WallyHandleFaintingCry, + WallyHandleIntroSlide, + WallyHandleTrainerBallThrow, + WallyHandlecmd48, + WallyHandlecmd49, + WallyHandlecmd50, + WallyHandleSpriteInvisibility, + WallyHandleBattleAnimation, + WallyHandleLinkStandbyMsg, + WallyHandleResetActionMoveSelection, + WallyHandlecmd55, + WallyHandlecmd56, +}; + +// code + +void unref_sub_8137220(void) +{ +} + +void SetBankFuncToWallyBufferRunCommand(void) +{ + gBattleBankFunc[gActiveBank] = WallyBufferRunCommand; + ewram[0x160A8] = 0; + ewram[0x160A9] = 0; + ewram[0x160AA] = 0; + ewram[0x160AB] = 0; +} + +void WallyBufferRunCommand(void) +{ + if (gBattleExecBuffer & gBitTable[gActiveBank]) + { + if (gBattleBufferA[gActiveBank][0] < 0x39) + gWallyBufferCommands[gBattleBufferA[gActiveBank][0]](); + else + WallyBufferExecCompleted(); + } +} + +void sub_81372BC(void) +{ + u8 r4; + + switch (ewram[0x160A8]) + { + case 0: + ewram[0x160AA] = 64; + ewram[0x160A8]++; + // fall through + case 1: + r4 = --ewram[0x160AA]; + if (r4 == 0) + { + PlaySE(SE_SELECT); + Emitcmd33(1, 0, 0); + WallyBufferExecCompleted(); + ewram[0x160A8]++; + ewram[0x160A9] = r4; + ewram[0x160AA] = 64; + } + break; + case 2: + r4 = --ewram[0x160AA]; + if (r4 == 0) + { + PlaySE(SE_SELECT); + Emitcmd33(1, 0, 0); + WallyBufferExecCompleted(); + ewram[0x160A8]++; + ewram[0x160A9] = r4; + ewram[0x160AA] = 64; + } + break; + case 3: + r4 = --ewram[0x160AA]; + if (r4 == 0) + { + Emitcmd33(1, 9, 0); + WallyBufferExecCompleted(); + ewram[0x160A8]++; + ewram[0x160A9] = r4; + ewram[0x160AA] = 64; + } + break; + case 4: + if (--ewram[0x160AA] == 0) + { + PlaySE(SE_SELECT); + nullsub_8(0); + sub_802E3E4(1, 0); + ewram[0x160AA] = 64; + ewram[0x160A8]++; + } + break; + case 5: + if (--ewram[0x160AA] == 0) + { + PlaySE(SE_SELECT); + DestroyMenuCursor(); + Emitcmd33(1, 1, 0); + WallyBufferExecCompleted(); + } + break; + } +} + +void sub_813741C(void) +{ + if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy) + WallyBufferExecCompleted(); +} + +void sub_8137454(void) +{ + if (gUnknown_03004210.state == 0) + WallyBufferExecCompleted(); +} + +void sub_813746C(void) +{ + if (!gPaletteFade.active) + { + gMain.inBattle = FALSE; + gMain.callback1 = gPreBattleCallback1; + SetMainCallback2(gMain.savedCallback); + } +} + +void bx_wait_t5(void) +{ + if (!gDoingBattleAnim) + WallyBufferExecCompleted(); +} + +void sub_81374C4(void) +{ + if (!gPaletteFade.active) + { + gBattleBankFunc[gActiveBank] = sub_81374FC; + nullsub_14(); + PrepareBagForWallyTutorial(); + } +} + +void sub_81374FC(void) +{ + if (gMain.callback2 == sub_800F808 + && !gPaletteFade.active) + { + Emitcmd35(1, gScriptItemId); + WallyBufferExecCompleted(); + } +} + +void sub_8137538(void) +{ + if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7) + sub_8141828(gActiveBank, &gPlayerParty[gBattlePartyID[gActiveBank]]); + + if (!ewram17810[gActiveBank ^ 2].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_7) + sub_8141828(gActiveBank ^ 2, &gPlayerParty[gBattlePartyID[gActiveBank ^ 2]]); + + if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_3) + { + if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) + { + DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank ^ 2]]); + sub_8045A5C(gHealthboxIDs[gActiveBank ^ 2], &gPlayerParty[gBattlePartyID[gActiveBank ^ 2]], 0); + sub_804777C(gActiveBank ^ 2); + sub_8043DFC(gHealthboxIDs[gActiveBank ^ 2]); + } + DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]); + sub_8045A5C(gHealthboxIDs[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], 0); + sub_804777C(gActiveBank); + sub_8043DFC(gHealthboxIDs[gActiveBank]); + ewram17840.unk9_0 = 0; + gBattleBankFunc[gActiveBank] = sub_81376B8; + } +} + +void sub_81376B8(void) +{ + bool8 r4 = FALSE; + + if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy) + r4 = TRUE; + if (r4 && ewram17810[gActiveBank].unk1_0 && ewram17810[gActiveBank ^ 2].unk1_0) + { + ewram17810[gActiveBank].unk0_7 = 0; + ewram17810[gActiveBank].unk1_0 = 0; + ewram17810[gActiveBank ^ 2].unk0_7 = 0; + ewram17810[gActiveBank ^ 2].unk1_0 = 0; + FreeSpriteTilesByTag(0x27F9); + FreeSpritePaletteByTag(0x27F9); + CreateTask(c3_0802FDF4, 10); + sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + WallyBufferExecCompleted(); + } +} + +void sub_81377B0(void) +{ + s16 r4; + + r4 = sub_8045C78(gActiveBank, gHealthboxIDs[gActiveBank], 0, 0); + sub_8043DFC(gHealthboxIDs[gActiveBank]); + if (r4 != -1) + { + sub_80440EC(gHealthboxIDs[gActiveBank], r4, 0); + } + else + { + sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + WallyBufferExecCompleted(); + } +} + +void bx_blink_t5(void) +{ + u8 spriteId = gObjectBankIDs[gActiveBank]; + + if (gSprites[spriteId].data1 == 32) + { + gSprites[spriteId].data1 = 0; + gSprites[spriteId].invisible = FALSE; + gDoingBattleAnim = FALSE; + WallyBufferExecCompleted(); + } + else + { + if (((u16)gSprites[spriteId].data1 % 4) == 0) + gSprites[spriteId].invisible ^= 1; + gSprites[spriteId].data1++; + } +} + +void sub_813789C(void) +{ + if (!ewram17810[gActiveBank].unk0_6) + { + FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); + DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); + sub_8043DB0(gHealthboxIDs[gActiveBank]); + WallyBufferExecCompleted(); + } +} + +// Duplicate of sub_813741C +void sub_8137908(void) +{ + if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy) + WallyBufferExecCompleted(); +} + +void sub_8137940(void) +{ + if (!ewram17810[gActiveBank].unk0_5) + WallyBufferExecCompleted(); +} + +void WallyBufferExecCompleted(void) +{ + gBattleBankFunc[gActiveBank] = WallyBufferRunCommand; + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + u8 multiplayerId = GetMultiplayerId(); + + dp01_prepare_buffer_wireless_probably(2, 4, &multiplayerId); + gBattleBufferA[gActiveBank][0] = 0x38; + } + else + { + gBattleExecBuffer &= ~gBitTable[gActiveBank]; + } +} + +void unref_sub_81379E4(void) +{ + if (!ewram17810[gActiveBank].unk0_4) + WallyBufferExecCompleted(); +} + +void WallyHandleGetAttributes(void) +{ + u8 arr[0x100]; + u32 r6 = 0; + u8 r4; + s32 i; + + if (gBattleBufferA[gActiveBank][2] == 0) + { + r6 = sub_8137A84(gBattlePartyID[gActiveBank], arr); + } + else + { + r4 = gBattleBufferA[gActiveBank][2]; + for (i = 0; i < 6; i++) + { + if (r4 & 1) + r6 += sub_8137A84(i, arr + r6); + r4 >>= 1; + } + } + Emitcmd29(1, r6, arr); + WallyBufferExecCompleted(); +} + +u32 sub_8137A84(u8 a, u8 *buffer) +{ + struct BattlePokemon battlePokemon; + struct UnknownStruct3 moveData; + u8 nickname[20]; + u8 *src; + s16 data16; + u32 data32; + s32 size = 0; + + switch (gBattleBufferA[gActiveBank][1]) + { + case 0: + battlePokemon.species = GetMonData(&gPlayerParty[a], MON_DATA_SPECIES); + battlePokemon.item = GetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM); + for (size = 0; size < 4; size++) + { + battlePokemon.moves[size] = GetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + size); + battlePokemon.pp[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size); + } + battlePokemon.ppBonuses = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES); + battlePokemon.friendship = GetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP); + battlePokemon.experience = GetMonData(&gPlayerParty[a], MON_DATA_EXP); + battlePokemon.hpIV = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV); + battlePokemon.attackIV = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV); + battlePokemon.defenseIV = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV); + battlePokemon.speedIV = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV); + battlePokemon.spAttackIV = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV); + battlePokemon.spDefenseIV = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV); + battlePokemon.personality = GetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY); + battlePokemon.status1 = GetMonData(&gPlayerParty[a], MON_DATA_STATUS); + battlePokemon.level = GetMonData(&gPlayerParty[a], MON_DATA_LEVEL); + battlePokemon.hp = GetMonData(&gPlayerParty[a], MON_DATA_HP); + battlePokemon.maxHP = GetMonData(&gPlayerParty[a], MON_DATA_MAX_HP); + battlePokemon.attack = GetMonData(&gPlayerParty[a], MON_DATA_ATK); + battlePokemon.defense = GetMonData(&gPlayerParty[a], MON_DATA_DEF); + battlePokemon.speed = GetMonData(&gPlayerParty[a], MON_DATA_SPD); + battlePokemon.spAttack = GetMonData(&gPlayerParty[a], MON_DATA_SPATK); + battlePokemon.spDefense = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF); + battlePokemon.isEgg = GetMonData(&gPlayerParty[a], MON_DATA_IS_EGG); + battlePokemon.altAbility = GetMonData(&gPlayerParty[a], MON_DATA_ALT_ABILITY); + battlePokemon.otId = GetMonData(&gPlayerParty[a], MON_DATA_OT_ID); + GetMonData(&gPlayerParty[a], MON_DATA_NICKNAME, nickname); + StringCopy10(battlePokemon.nickname, nickname); + GetMonData(&gPlayerParty[a], MON_DATA_OT_NAME, battlePokemon.otName); + src = (u8 *)&battlePokemon; + for (size = 0; size < sizeof(battlePokemon); size++) + buffer[size] = src[size]; + break; + case 1: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPECIES); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 2: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 3: + for (size = 0; size < 4; size++) + { + moveData.moves[size] = GetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + size); + moveData.pp[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size); + } + moveData.ppBonuses = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES); + src = (u8 *)&moveData; + for (size = 0; size < sizeof(moveData); size++) + buffer[size] = src[size]; + break; + case 4: + case 5: + case 6: + case 7: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - 4); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 8: + for (size = 0; size < 4; size++) + buffer[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size); + buffer[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES); + size++; + break; + case 9: + case 10: + case 11: + case 12: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - 9); + size = 1; + break; + case 17: + data32 = GetMonData(&gPlayerParty[a], MON_DATA_OT_ID); + buffer[0] = (data32 & 0x000000FF); + buffer[1] = (data32 & 0x0000FF00) >> 8; + buffer[2] = (data32 & 0x00FF0000) >> 16; + size = 3; + break; + case 18: + data32 = GetMonData(&gPlayerParty[a], MON_DATA_EXP); + buffer[0] = (data32 & 0x000000FF); + buffer[1] = (data32 & 0x0000FF00) >> 8; + buffer[2] = (data32 & 0x00FF0000) >> 16; + size = 3; + break; + case 19: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_EV); + size = 1; + break; + case 20: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_EV); + size = 1; + break; + case 21: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_EV); + size = 1; + break; + case 22: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_EV); + size = 1; + break; + case 23: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_EV); + size = 1; + break; + case 24: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_EV); + size = 1; + break; + case 25: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP); + size = 1; + break; + case 26: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_POKERUS); + size = 1; + break; + case 27: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_MET_LOCATION); + size = 1; + break; + case 28: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_MET_LEVEL); + size = 1; + break; + case 29: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_MET_GAME); + size = 1; + break; + case 30: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_POKEBALL); + size = 1; + break; + case 31: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV); + buffer[1] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV); + buffer[2] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV); + buffer[3] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV); + buffer[4] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV); + buffer[5] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV); + size = 6; + break; + case 32: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV); + size = 1; + break; + case 33: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV); + size = 1; + break; + case 34: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV); + size = 1; + break; + case 35: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV); + size = 1; + break; + case 36: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV); + size = 1; + break; + case 37: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV); + size = 1; + break; + case 38: + data32 = GetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY); + buffer[0] = (data32 & 0x000000FF); + buffer[1] = (data32 & 0x0000FF00) >> 8; + buffer[2] = (data32 & 0x00FF0000) >> 16; + buffer[3] = (data32 & 0xFF000000) >> 24; + size = 4; + break; + case 39: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_CHECKSUM); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 40: + data32 = GetMonData(&gPlayerParty[a], MON_DATA_STATUS); + buffer[0] = (data32 & 0x000000FF); + buffer[1] = (data32 & 0x0000FF00) >> 8; + buffer[2] = (data32 & 0x00FF0000) >> 16; + buffer[3] = (data32 & 0xFF000000) >> 24; + size = 4; + break; + case 41: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_LEVEL); + size = 1; + break; + case 42: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_HP); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 43: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_MAX_HP); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 44: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_ATK); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 45: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_DEF); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 46: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPD); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 47: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPATK); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 48: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 49: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_COOL); + size = 1; + break; + case 50: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_BEAUTY); + size = 1; + break; + case 51: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_CUTE); + size = 1; + break; + case 52: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SMART); + size = 1; + break; + case 53: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_TOUGH); + size = 1; + break; + case 54: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SHEEN); + size = 1; + break; + case 55: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_COOL_RIBBON); + size = 1; + break; + case 56: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_BEAUTY_RIBBON); + size = 1; + break; + case 57: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_CUTE_RIBBON); + size = 1; + break; + case 58: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SMART_RIBBON); + size = 1; + break; + case 59: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_TOUGH_RIBBON); + size = 1; + break; + } + return size; +} + +void WallyHandlecmd1(void) +{ + PlayerHandlecmd1(); +} + +void WallyHandleSetAttributes(void) +{ + u8 r4; + u8 i; + + if (gBattleBufferA[gActiveBank][2] == 0) + { + sub_8138294(gBattlePartyID[gActiveBank]); + } + else + { + r4 = gBattleBufferA[gActiveBank][2]; + for (i = 0; i < 6; i++) + { + if (r4 & 1) + sub_8138294(i); + r4 >>= 1; + } + } + WallyBufferExecCompleted(); +} + +void sub_8138294(u8 a) +{ + struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBank][3]; + struct UnknownStruct3 *moveData = (struct UnknownStruct3 *)&gBattleBufferA[gActiveBank][3]; + s32 i; + + switch (gBattleBufferA[gActiveBank][1]) + { + case 0: + { + u8 iv; + + SetMonData(&gPlayerParty[a], MON_DATA_SPECIES, (u8 *)&battlePokemon->species); + SetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM, (u8 *)&battlePokemon->item); + for (i = 0; i < 4; i++) + { + SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + i, (u8 *)&battlePokemon->moves[i]); + SetMonData(&gPlayerParty[a], MON_DATA_PP1 + i, (u8 *)&battlePokemon->pp[i]); + } + SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, (u8 *)&battlePokemon->ppBonuses); + SetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP, (u8 *)&battlePokemon->friendship); + SetMonData(&gPlayerParty[a], MON_DATA_EXP, (u8 *)&battlePokemon->experience); + iv = battlePokemon->hpIV; + SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, (u8 *)&iv); + iv = battlePokemon->attackIV; + SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, (u8 *)&iv); + iv = battlePokemon->defenseIV; + SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, (u8 *)&iv); + iv = battlePokemon->speedIV; + SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, (u8 *)&iv); + iv = battlePokemon->spAttackIV; + SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, (u8 *)&iv); + iv = battlePokemon->spDefenseIV; + SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, (u8 *)&iv); + SetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY, (u8 *)&battlePokemon->personality); + SetMonData(&gPlayerParty[a], MON_DATA_STATUS, (u8 *)&battlePokemon->status1); + SetMonData(&gPlayerParty[a], MON_DATA_LEVEL, (u8 *)&battlePokemon->level); + SetMonData(&gPlayerParty[a], MON_DATA_HP, (u8 *)&battlePokemon->hp); + SetMonData(&gPlayerParty[a], MON_DATA_MAX_HP, (u8 *)&battlePokemon->maxHP); + SetMonData(&gPlayerParty[a], MON_DATA_ATK, (u8 *)&battlePokemon->attack); + SetMonData(&gPlayerParty[a], MON_DATA_DEF, (u8 *)&battlePokemon->defense); + SetMonData(&gPlayerParty[a], MON_DATA_SPD, (u8 *)&battlePokemon->speed); + SetMonData(&gPlayerParty[a], MON_DATA_SPATK, (u8 *)&battlePokemon->spAttack); + SetMonData(&gPlayerParty[a], MON_DATA_SPDEF, (u8 *)&battlePokemon->spDefense); + } + break; + case 1: + SetMonData(&gPlayerParty[a], MON_DATA_SPECIES, &gBattleBufferA[gActiveBank][3]); + break; + case 2: + SetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBank][3]); + break; + case 3: + for (i = 0; i < 4; i++) + { + SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + i, (u8 *)&moveData->moves[i]); + SetMonData(&gPlayerParty[a], MON_DATA_PP1 + i, (u8 *)&moveData->pp[i]); + } + SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, &moveData->ppBonuses); + break; + case 4: + case 5: + case 6: + case 7: + SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - 4, &gBattleBufferA[gActiveBank][3]); + break; + case 8: + SetMonData(&gPlayerParty[a], MON_DATA_PP1, &gBattleBufferA[gActiveBank][3]); + SetMonData(&gPlayerParty[a], MON_DATA_PP2, &gBattleBufferA[gActiveBank][4]); + SetMonData(&gPlayerParty[a], MON_DATA_PP3, &gBattleBufferA[gActiveBank][5]); + SetMonData(&gPlayerParty[a], MON_DATA_PP4, &gBattleBufferA[gActiveBank][6]); + SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBank][7]); + break; + case 9: + case 10: + case 11: + case 12: + SetMonData(&gPlayerParty[a], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - 9, &gBattleBufferA[gActiveBank][3]); + break; + case 17: + SetMonData(&gPlayerParty[a], MON_DATA_OT_ID, &gBattleBufferA[gActiveBank][3]); + break; + case 18: + SetMonData(&gPlayerParty[a], MON_DATA_EXP, &gBattleBufferA[gActiveBank][3]); + break; + case 19: + SetMonData(&gPlayerParty[a], MON_DATA_HP_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 20: + SetMonData(&gPlayerParty[a], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 21: + SetMonData(&gPlayerParty[a], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 22: + SetMonData(&gPlayerParty[a], MON_DATA_SPD_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 23: + SetMonData(&gPlayerParty[a], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 24: + SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 25: + SetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBank][3]); + break; + case 26: + SetMonData(&gPlayerParty[a], MON_DATA_POKERUS, &gBattleBufferA[gActiveBank][3]); + break; + case 27: + SetMonData(&gPlayerParty[a], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBank][3]); + break; + case 28: + SetMonData(&gPlayerParty[a], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBank][3]); + break; + case 29: + SetMonData(&gPlayerParty[a], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBank][3]); + break; + case 30: + SetMonData(&gPlayerParty[a], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBank][3]); + break; + case 31: + SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]); + SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][4]); + SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][5]); + SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][6]); + SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][7]); + SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][8]); + break; + case 32: + SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 33: + SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 34: + SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 35: + SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 36: + SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 37: + SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 38: + SetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBank][3]); + break; + case 39: + SetMonData(&gPlayerParty[a], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBank][3]); + break; + case 40: + SetMonData(&gPlayerParty[a], MON_DATA_STATUS, &gBattleBufferA[gActiveBank][3]); + break; + case 41: + SetMonData(&gPlayerParty[a], MON_DATA_LEVEL, &gBattleBufferA[gActiveBank][3]); + break; + case 42: + SetMonData(&gPlayerParty[a], MON_DATA_HP, &gBattleBufferA[gActiveBank][3]); + break; + case 43: + SetMonData(&gPlayerParty[a], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBank][3]); + break; + case 44: + SetMonData(&gPlayerParty[a], MON_DATA_ATK, &gBattleBufferA[gActiveBank][3]); + break; + case 45: + SetMonData(&gPlayerParty[a], MON_DATA_DEF, &gBattleBufferA[gActiveBank][3]); + break; + case 46: + SetMonData(&gPlayerParty[a], MON_DATA_SPD, &gBattleBufferA[gActiveBank][3]); + break; + case 47: + SetMonData(&gPlayerParty[a], MON_DATA_SPATK, &gBattleBufferA[gActiveBank][3]); + break; + case 48: + SetMonData(&gPlayerParty[a], MON_DATA_SPDEF, &gBattleBufferA[gActiveBank][3]); + break; + case 49: + SetMonData(&gPlayerParty[a], MON_DATA_COOL, &gBattleBufferA[gActiveBank][3]); + break; + case 50: + SetMonData(&gPlayerParty[a], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBank][3]); + break; + case 51: + SetMonData(&gPlayerParty[a], MON_DATA_CUTE, &gBattleBufferA[gActiveBank][3]); + break; + case 52: + SetMonData(&gPlayerParty[a], MON_DATA_SMART, &gBattleBufferA[gActiveBank][3]); + break; + case 53: + SetMonData(&gPlayerParty[a], MON_DATA_TOUGH, &gBattleBufferA[gActiveBank][3]); + break; + case 54: + SetMonData(&gPlayerParty[a], MON_DATA_SHEEN, &gBattleBufferA[gActiveBank][3]); + break; + case 55: + SetMonData(&gPlayerParty[a], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBank][3]); + break; + case 56: + SetMonData(&gPlayerParty[a], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBank][3]); + break; + case 57: + SetMonData(&gPlayerParty[a], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBank][3]); + break; + case 58: + SetMonData(&gPlayerParty[a], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBank][3]); + break; + case 59: + SetMonData(&gPlayerParty[a], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBank][3]); + break; + } + sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); +} + +void WallyHandlecmd3(void) +{ + WallyBufferExecCompleted(); +} + +void WallyHandleLoadPokeSprite(void) +{ + WallyBufferExecCompleted(); +} + +void WallyHandleSendOutPoke(void) +{ + WallyBufferExecCompleted(); +} + +void WallyHandleReturnPokeToBall(void) +{ + if (gBattleBufferA[gActiveBank][1] == 0) + { + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 1); + gBattleBankFunc[gActiveBank] = sub_813789C; + } + else + { + FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); + DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); + sub_8043DB0(gHealthboxIDs[gActiveBank]); + WallyBufferExecCompleted(); + } +} + +void WallyHandleTrainerThrow(void) +{ + sub_8031AF4(2, gActiveBank); + GetMonSpriteTemplate_803C5A0(2, GetBankIdentity(gActiveBank)); + gObjectBankIDs[gActiveBank] = CreateSprite( + &gUnknown_02024E8C, + 80, 80 + 4 * (8 - gTrainerBackPicCoords[2].coords), + 30); + gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank; + gSprites[gObjectBankIDs[gActiveBank]].pos2.x = 240; + gSprites[gObjectBankIDs[gActiveBank]].data0 = -2; + gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0; + gBattleBankFunc[gActiveBank] = sub_813741C; +} + +void WallyHandleTrainerSlide(void) +{ + sub_8031AF4(2, gActiveBank); + GetMonSpriteTemplate_803C5A0(2, GetBankIdentity(gActiveBank)); + gObjectBankIDs[gActiveBank] = CreateSprite( + &gUnknown_02024E8C, + 80, 80 + 4 * (8 - gTrainerBackPicCoords[2].coords), + 30); + gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank; + gSprites[gObjectBankIDs[gActiveBank]].pos2.x = -96; + gSprites[gObjectBankIDs[gActiveBank]].data0 = 2; + gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0; + gBattleBankFunc[gActiveBank] = sub_8137908; +} + +void WallyHandleTrainerSlideBack(void) +{ + WallyBufferExecCompleted(); +} + +void WallyHandlecmd10(void) +{ + WallyBufferExecCompleted(); +} + +void WallyHandlecmd11(void) +{ + WallyBufferExecCompleted(); +} + +void WallyHandlecmd12(void) +{ + ewram17840.unk8 = 4; + gDoingBattleAnim = TRUE; + move_anim_start_t4(gActiveBank, gActiveBank, GetBankByPlayerAI(1), 4); + gBattleBankFunc[gActiveBank] = bx_wait_t5; +} + +void WallyHandleBallThrow(void) +{ + u8 val = gBattleBufferA[gActiveBank][1]; + + ewram17840.unk8 = val; + gDoingBattleAnim = TRUE; + move_anim_start_t4(gActiveBank, gActiveBank, GetBankByPlayerAI(1), 4); + gBattleBankFunc[gActiveBank] = bx_wait_t5; +} + +void WallyHandlePuase(void) +{ + WallyBufferExecCompleted(); +} + +void WallyHandleMoveAnimation(void) +{ + u16 r0 = gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8); + + gUnknown_0202F7C4 = gBattleBufferA[gActiveBank][3]; + gMovePowerMoveAnim = gBattleBufferA[gActiveBank][4] | (gBattleBufferA[gActiveBank][5] << 8); + gMoveDmgMoveAnim = gBattleBufferA[gActiveBank][6] | (gBattleBufferA[gActiveBank][7] << 8) | (gBattleBufferA[gActiveBank][8] << 16) | (gBattleBufferA[gActiveBank][9] << 24); + gHappinessMoveAnim = gBattleBufferA[gActiveBank][10]; + gWeatherMoveAnim = gBattleBufferA[gActiveBank][12] | (gBattleBufferA[gActiveBank][13] << 8); + gDisableStructMoveAnim = (u32 *)&gBattleBufferA[gActiveBank][16]; + gPID_perBank[gActiveBank] = *gDisableStructMoveAnim; + if (sub_8031720(r0, gUnknown_0202F7C4) != 0) + { + // Dead code. sub_8031720 always returns 0. + WallyBufferExecCompleted(); + } + else + { + ewram17810[gActiveBank].unk4 = 0; + gBattleBankFunc[gActiveBank] = sub_81390D0; + } +} + +void sub_81390D0(void) +{ + u16 r4 = gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8); + +#ifndef NONMATCHING + asm("":::"r6"); +#endif + + switch (ewram17810[gActiveBank].unk4) + { + case 0: + if (ewram17800[gActiveBank].unk0_2 == 1) + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); + ewram17810[gActiveBank].unk4 = 1; + break; + case 1: + if (ewram17810[gActiveBank].unk0_6 == 0) + { + sub_80326EC(0); + ExecuteMoveAnim(r4); + ewram17810[gActiveBank].unk4 = 2; + } + break; + case 2: + gAnimScriptCallback(); + if (!gAnimScriptActive) + { + sub_80326EC(1); + if (ewram17800[gActiveBank].unk0_2 == 1) + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); + ewram17810[gActiveBank].unk4 = 3; + } + break; + case 3: + if (ewram17810[gActiveBank].unk0_6 == 0) + { + sub_8031F24(); + sub_80324BC(gActiveBank, gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8)); + ewram17810[gActiveBank].unk4 = 0; + WallyBufferExecCompleted(); + } + break; + } +} + +void WallyHandlePrintString(void) +{ + u16 *ptr; + + gUnknown_030042A4 = 0; + gUnknown_030042A0 = 0; + ptr = (u16 *)&gBattleBufferA[gActiveBank][2]; + if (*ptr == 2) + DestroyMenuCursor(); + BufferStringBattle(*ptr); + sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 0x90, 2, 15); + gBattleBankFunc[gActiveBank] = sub_8137454; +} + +void WallyHandlePrintStringPlayerOnly(void) +{ + if (GetBankSide(gActiveBank) == 0) + WallyHandlePrintString(); + else + WallyBufferExecCompleted(); +} + +void WallyHandlecmd18(void) +{ + s32 i; + + gUnknown_030042A4 = 0; + gUnknown_030042A0 = 160; + gUnknown_03004210.paletteNum = 0; + FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 15, 27, 18); + FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 35, 16, 36); + gBattleBankFunc[gActiveBank] = sub_81372BC; + InitWindow(&gUnknown_03004210, gUnknown_08400CF3, 400, 18, 35); + sub_8002F44(&gUnknown_03004210); + sub_814A5C0(0, 0xFFFF, 12, 0x2D9F, 0); + for (i = 0; i < 4; i++) + nullsub_8(i); + sub_802E3E4(0, 0); + StrCpyDecodeToDisplayedStringBattle(gUnknown_08400CCC); +#ifdef ENGLISH + InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 440, 2, 35); +#else + InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 444, 2, 35); +#endif + sub_8002F44(&gUnknown_03004210); +} + +void WallyHandlecmd19(void) +{ + WallyBufferExecCompleted(); +} + +void WallyHandlecmd20(void) +{ + switch (ewram[0x160A9]) + { + case 0: + sub_80304A8(); + ewram[0x160A9]++; + ewram[0x160AB] = 80; + // fall through + case 1: + ewram[0x160AB]--; + if (ewram[0x160AB] == 0) + { + DestroyMenuCursor(); + PlaySE(SE_SELECT); + Emitcmd33(1, 10, 256); + WallyBufferExecCompleted(); + } + break; + } +} + +void WallyHandleOpenBag(void) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gBattleBankFunc[gActiveBank] = sub_81374C4; + gBankInMenu = gActiveBank; +} + +void WallyHandlecmd22(void) +{ + WallyBufferExecCompleted(); +} + +void WallyHandlecmd23(void) +{ + WallyBufferExecCompleted(); +} + +void WallyHandleHealthBarUpdate(void) +{ + s16 r7; + + load_gfxc_health_bar(0); + r7 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); + if (r7 != 0x7FFF) + { + u32 maxHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP); + u32 curHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_HP); + + sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, curHP, r7); + } + else + { + u32 maxHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP); + + sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, 0, r7); + sub_80440EC(gHealthboxIDs[gActiveBank], 0, 0); + } + gBattleBankFunc[gActiveBank] = sub_81377B0; +} + +void WallyHandleExpBarUpdate(void) +{ + WallyBufferExecCompleted(); +} + +void WallyHandleStatusIconUpdate(void) +{ + WallyBufferExecCompleted(); +} + +void WallyHandleStatusAnimation(void) +{ + WallyBufferExecCompleted(); +} + +void WallyHandleStatusXor(void) +{ + WallyBufferExecCompleted(); +} + +void WallyHandlecmd29(void) +{ + WallyBufferExecCompleted(); +} + +void WallyHandleDMATransfer(void) +{ + WallyBufferExecCompleted(); +} + +void WallyHandlecmd31(void) +{ + WallyBufferExecCompleted(); +} + +void WallyHandlecmd32(void) +{ + WallyBufferExecCompleted(); +} + +void WallyHandlecmd33(void) +{ + WallyBufferExecCompleted(); +} + +void WallyHandlecmd34(void) +{ + WallyBufferExecCompleted(); +} + +void WallyHandlecmd35(void) +{ + WallyBufferExecCompleted(); +} + +void WallyHandlecmd36(void) +{ + WallyBufferExecCompleted(); +} + +void WallyHandlecmd37(void) +{ + WallyBufferExecCompleted(); +} + +void WallyHandlecmd38(void) +{ + WallyBufferExecCompleted(); +} + +void WallyHandlecmd39(void) +{ + WallyBufferExecCompleted(); +} + +void WallyHandlecmd40(void) +{ + WallyBufferExecCompleted(); +} + +void WallyHandleHitAnimation(void) +{ + if (gSprites[gObjectBankIDs[gActiveBank]].invisible == TRUE) + { + WallyBufferExecCompleted(); + } + else + { + gDoingBattleAnim = 1; + gSprites[gObjectBankIDs[gActiveBank]].data1 = 0; + sub_8047858(gActiveBank); + gBattleBankFunc[gActiveBank] = bx_blink_t5; + } +} + +void WallyHandlecmd42(void) +{ + WallyBufferExecCompleted(); +} + +void WallyHandleEffectivenessSound(void) +{ + PlaySE(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8)); + WallyBufferExecCompleted(); +} + +void WallyHandlecmd44(void) +{ + PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8)); + WallyBufferExecCompleted(); +} + +void WallyHandleFaintingCry(void) +{ + PlayCry1(GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES), 25); + WallyBufferExecCompleted(); +} + +void WallyHandleIntroSlide(void) +{ + sub_80E43C0(gBattleBufferA[gActiveBank][1]); + gUnknown_02024DE8 |= 1; + WallyBufferExecCompleted(); +} + +void WallyHandleTrainerBallThrow(void) +{ + u8 paletteNum; + u8 taskId; + + oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]); + gSprites[gObjectBankIDs[gActiveBank]].data0 = 50; + gSprites[gObjectBankIDs[gActiveBank]].data2 = -40; + gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; + gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34; + gSprites[gObjectBankIDs[gActiveBank]].data5 = gActiveBank; + oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], sub_8030E38); + StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 1); + paletteNum = AllocSpritePalette(0xD6F8); + LoadCompressedPalette(gTrainerBackPicPaletteTable[2].data, 0x100 + paletteNum * 16, 32); + gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = paletteNum; + taskId = CreateTask(sub_8139A2C, 5); + gTasks[taskId].data[0] = gActiveBank; + if (ewram17810[gActiveBank].unk0_0) + gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0; + ewram17810[4].unk9 |= 1; + gBattleBankFunc[gActiveBank] = nullsub_91; +} + +void sub_81398BC(u8 bank) +{ + u16 species; + + ewram17800[bank].unk2 = 0; + gBattlePartyID[bank] = gBattleBufferA[bank][1]; + species = GetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_SPECIES); + gUnknown_0300434C[bank] = CreateInvisibleSpriteWithCallback(sub_80312F0); + GetMonSpriteTemplate_803C56C(species, GetBankIdentity(bank)); + gObjectBankIDs[bank] = CreateSprite( + &gUnknown_02024E8C, + sub_8077ABC(bank, 2), + sub_8077F68(bank), + sub_8079E90(bank)); + gSprites[gUnknown_0300434C[bank]].data1 = gObjectBankIDs[bank]; + gSprites[gObjectBankIDs[bank]].data0 = bank; + gSprites[gObjectBankIDs[bank]].data2 = species; + gSprites[gObjectBankIDs[bank]].oam.paletteNum = bank; + StartSpriteAnim(&gSprites[gObjectBankIDs[bank]], gBattleMonForms[bank]); + gSprites[gObjectBankIDs[bank]].invisible = TRUE; + gSprites[gObjectBankIDs[bank]].callback = SpriteCallbackDummy; + gSprites[gUnknown_0300434C[bank]].data0 = sub_8046400(0, 0xFF); +} + +void sub_8139A2C(u8 taskId) +{ + if (gTasks[taskId].data[1] < 31) + { + gTasks[taskId].data[1]++; + } + else + { + u8 savedActiveBank = gActiveBank; + + gActiveBank = gTasks[taskId].data[0]; + gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; + sub_81398BC(gActiveBank); + gBattleBankFunc[gActiveBank] = sub_8137538; + gActiveBank = savedActiveBank; + DestroyTask(taskId); + } +} + +void WallyHandlecmd48(void) +{ + if (gBattleBufferA[gActiveBank][1] != 0 && GetBankSide(gActiveBank) == 0) + { + WallyBufferExecCompleted(); + } + else + { + ewram17810[gActiveBank].unk0_0 = 1; + gUnknown_02024E68[gActiveBank] = sub_8044804(gActiveBank, (struct BattleInterfaceStruct2 *)&gBattleBufferA[gActiveBank][4], gBattleBufferA[gActiveBank][1], gBattleBufferA[gActiveBank][2]); + WallyBufferExecCompleted(); + } +} + +void WallyHandlecmd49(void) +{ + WallyBufferExecCompleted(); +} + +void WallyHandlecmd50(void) +{ + WallyBufferExecCompleted(); +} + +void WallyHandleSpriteInvisibility(void) +{ + WallyBufferExecCompleted(); +} + +void WallyHandleBattleAnimation(void) +{ + u8 val2 = gBattleBufferA[gActiveBank][1]; + u16 val = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); + + if (move_anim_start_t3(gActiveBank, gActiveBank, gActiveBank, val2, val)) + WallyBufferExecCompleted(); + else + gBattleBankFunc[gActiveBank] = sub_8137940; +} + +void WallyHandleLinkStandbyMsg(void) +{ + WallyBufferExecCompleted(); +} + +void WallyHandleResetActionMoveSelection(void) +{ + WallyBufferExecCompleted(); +} + +void WallyHandlecmd55(void) +{ + gBattleOutcome = gBattleBufferA[gActiveBank][1]; + FadeOutMapMusic(5); + BeginFastPaletteFade(3); + WallyBufferExecCompleted(); + if ((gBattleTypeFlags & BATTLE_TYPE_LINK) && !(gBattleTypeFlags & BATTLE_TYPE_WILD)) + gBattleBankFunc[gActiveBank] = sub_813746C; +} + +void WallyHandlecmd56(void) +{ +} diff --git a/src/rom3.c b/src/rom3.c index 803bbf943..e9e664069 100644 --- a/src/rom3.c +++ b/src/rom3.c @@ -573,7 +573,7 @@ void EmitGetAttributes(u8 a, u8 b, u8 c) dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); } -void dp01_build_cmdbuf_x01_a_b_0(u8 a, u8 b, u8 c) +void Emitcmd1(u8 a, u8 b, u8 c) { gBattleBuffersTransferData[0] = 1; gBattleBuffersTransferData[1] = b; @@ -594,7 +594,7 @@ void EmitSetAttributes(u8 a, u8 b, u8 c, u8 d, void *e) dp01_prepare_buffer(a, gBattleBuffersTransferData, d + 3); } -void unref_sub_800C6A4(u8 a, u8 b, u8 c, u8 *d) +void Emitcmd3(u8 a, u8 b, u8 c, u8 *d) { int i; @@ -606,7 +606,7 @@ void unref_sub_800C6A4(u8 a, u8 b, u8 c, u8 *d) dp01_prepare_buffer(a, gBattleBuffersTransferData, c + 3); } -void dp01_build_cmdbuf_x04_4_4_4(u8 a) +void EmitLoadPokeSprite(u8 a) { gBattleBuffersTransferData[0] = 4; gBattleBuffersTransferData[1] = 4; @@ -615,7 +615,7 @@ void dp01_build_cmdbuf_x04_4_4_4(u8 a) dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); } -void EmitSwitchInAnim(u8 a, u8 b, u8 c) +void EmitSendOutPoke(u8 a, u8 b, u8 c) { gBattleBuffersTransferData[0] = 5; gBattleBuffersTransferData[1] = b; @@ -631,7 +631,7 @@ void EmitReturnPokeToBall(u8 a, u8 b) dp01_prepare_buffer(a, gBattleBuffersTransferData, 2); } -void dp01_build_cmdbuf_x07_7_7_7(u8 a) +void EmitTrainerThrow(u8 a) { gBattleBuffersTransferData[0] = 7; gBattleBuffersTransferData[1] = 7; @@ -649,7 +649,7 @@ void EmitTrainerSlide(u8 a) dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); } -void dp01_build_cmdbuf_x09_9_9_9(u8 a) +void EmitTrainerSlideBack(u8 a) { gBattleBuffersTransferData[0] = 9; gBattleBuffersTransferData[1] = 9; @@ -658,7 +658,7 @@ void dp01_build_cmdbuf_x09_9_9_9(u8 a) dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); } -void EmitFaintAnimation(u8 a) +void Emitcmd10(u8 a) { gBattleBuffersTransferData[0] = 10; gBattleBuffersTransferData[1] = 10; @@ -667,7 +667,7 @@ void EmitFaintAnimation(u8 a) dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); } -void dp01_build_cmdbuf_x0B_B_B_B(u8 a) +void Emitcmd11(u8 a) { gBattleBuffersTransferData[0] = 11; gBattleBuffersTransferData[1] = 11; @@ -676,7 +676,7 @@ void dp01_build_cmdbuf_x0B_B_B_B(u8 a) dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); } -void dp01_build_cmdbuf_x0C_C_C_C(u8 a) +void Emitcmd12(u8 a) { gBattleBuffersTransferData[0] = 12; gBattleBuffersTransferData[1] = 12; @@ -685,14 +685,14 @@ void dp01_build_cmdbuf_x0C_C_C_C(u8 a) dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); } -void EmitBallThrowAnim(u8 a, u8 b) +void EmitBallThrow(u8 a, u8 b) { gBattleBuffersTransferData[0] = 13; gBattleBuffersTransferData[1] = b; dp01_prepare_buffer(a, gBattleBuffersTransferData, 2); } -void unref_sub_800C828(u8 a, u8 b, u8 *c) +void EmitPuase(u8 a, u8 b, u8 *c) { int i; @@ -1021,7 +1021,7 @@ _0800CB54: .4byte gBattleTextBuff1\n\ .syntax divided\n"); } -void dp01_build_cmdbuf_x12_a_bb(u8 a, u8 b, u16 c) +void Emitcmd18(u8 a, u8 b, u16 c) { gBattleBuffersTransferData[0] = 18; gBattleBuffersTransferData[1] = b; @@ -1030,14 +1030,14 @@ void dp01_build_cmdbuf_x12_a_bb(u8 a, u8 b, u16 c) dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); } -void unref_sub_800CB84(u8 a, u8 b) +void Emitcmd19(u8 a, u8 b) { gBattleBuffersTransferData[0] = 19; gBattleBuffersTransferData[1] = b; dp01_prepare_buffer(a, gBattleBuffersTransferData, 2); } -void sub_800CBA4(u8 a, u8 b, u8 c, u8 *d) +void Emitcmd20(u8 a, u8 b, u8 c, u8 *d) { u32 i; @@ -1050,7 +1050,7 @@ void sub_800CBA4(u8 a, u8 b, u8 c, u8 *d) dp01_prepare_buffer(a, gBattleBuffersTransferData, 24); } -void sub_800CBE0(u8 a, u8 *b) +void EmitOpenBag(u8 a, u8 *b) { int i; @@ -1060,7 +1060,7 @@ void sub_800CBE0(u8 a, u8 *b) dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); } -void EmitChoosePokemon(u8 a, u8 b, u8 c, u8 d, u8 *e) +void Emitcmd22(u8 a, u8 b, u8 c, u8 d, u8 *e) { int i; @@ -1073,7 +1073,7 @@ void EmitChoosePokemon(u8 a, u8 b, u8 c, u8 d, u8 *e) dp01_prepare_buffer(a, gBattleBuffersTransferData, 8); //but only 7 bytes were written } -void dp01_build_cmdbuf_x17_17_17_17(u8 a) +void Emitcmd23(u8 a) { gBattleBuffersTransferData[0] = 23; gBattleBuffersTransferData[1] = 23; @@ -1136,7 +1136,7 @@ void EmitStatusXor(u8 a, u8 b) dp01_prepare_buffer(a, gBattleBuffersTransferData, 2); } -void dp01_build_cmdbuf_x1D_1D_numargs_varargs(u8 a, u16 b, u8 *c) +void Emitcmd29(u8 a, u16 b, u8 *c) { int i; @@ -1149,7 +1149,7 @@ void dp01_build_cmdbuf_x1D_1D_numargs_varargs(u8 a, u16 b, u8 *c) dp01_prepare_buffer(a, gBattleBuffersTransferData, b + 4); } -void unref_sub_800CDD4(u8 a, u32 b, u16 c, u8 *d) +void EmitDMATransfer(u8 a, u32 b, u16 c, u8 *d) { int i; @@ -1165,7 +1165,7 @@ void unref_sub_800CDD4(u8 a, u32 b, u16 c, u8 *d) dp01_prepare_buffer(a, gBattleBuffersTransferData, c + 7); } -void unref_sub_800CE3C(u8 a, u16 b, u8 *c) +void Emitcmd31(u8 a, u16 b, u8 *c) { int i; @@ -1177,7 +1177,7 @@ void unref_sub_800CE3C(u8 a, u16 b, u8 *c) dp01_prepare_buffer(a, gBattleBuffersTransferData, b + 3); } -void unref_sub_800CE84(u8 a, u16 b, u8 *c) +void Emitcmd32(u8 a, u16 b, u8 *c) { int i; @@ -1189,7 +1189,7 @@ void unref_sub_800CE84(u8 a, u16 b, u8 *c) dp01_prepare_buffer(a, gBattleBuffersTransferData, b + 3); } -void dp01_build_cmdbuf_x21_a_bb(u8 a, u8 b, u16 c) +void Emitcmd33(u8 a, u8 b, u16 c) { gBattleBuffersTransferData[0] = 33; gBattleBuffersTransferData[1] = b; @@ -1198,7 +1198,7 @@ void dp01_build_cmdbuf_x21_a_bb(u8 a, u8 b, u16 c) dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); } -void dp01_build_cmdbuf_x22_a_three_bytes(u8 a, u8 b, u8 *c) +void Emitcmd34(u8 a, u8 b, u8 *c) { int i; @@ -1209,7 +1209,7 @@ void dp01_build_cmdbuf_x22_a_three_bytes(u8 a, u8 b, u8 *c) dp01_prepare_buffer(a, gBattleBuffersTransferData, 5); } -void dp01_build_cmdbuf_x23_aa_0(u8 a, u16 b) +void Emitcmd35(u8 a, u16 b) { gBattleBuffersTransferData[0] = 35; gBattleBuffersTransferData[1] = b; @@ -1218,7 +1218,7 @@ void dp01_build_cmdbuf_x23_aa_0(u8 a, u16 b) dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); } -void dp01_build_cmdbuf_x24_aa_0(u8 a, u16 b) +void Emitcmd36(u8 a, u16 b) { gBattleBuffersTransferData[0] = 36; gBattleBuffersTransferData[1] = b; @@ -1227,7 +1227,7 @@ void dp01_build_cmdbuf_x24_aa_0(u8 a, u16 b) dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); } -void dp01_build_cmdbuf_x25_25_25_25(u8 a) +void Emitcmd37(u8 a) { gBattleBuffersTransferData[0] = 37; gBattleBuffersTransferData[1] = 37; @@ -1236,14 +1236,14 @@ void dp01_build_cmdbuf_x25_25_25_25(u8 a) dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); } -void dp01_build_cmdbuf_x26_a(u8 a, u8 b) +void Emitcmd38(u8 a, u8 b) { gBattleBuffersTransferData[0] = 38; gBattleBuffersTransferData[1] = b; dp01_prepare_buffer(a, gBattleBuffersTransferData, 2); } -void dp01_build_cmdbuf_x27_27_27_27(u8 a) +void Emitcmd39(u8 a) { gBattleBuffersTransferData[0] = 39; gBattleBuffersTransferData[1] = 39; @@ -1252,7 +1252,7 @@ void dp01_build_cmdbuf_x27_27_27_27(u8 a) dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); } -void dp01_build_cmdbuf_x28_28_28_28(u8 a) +void Emitcmd40(u8 a) { gBattleBuffersTransferData[0] = 40; gBattleBuffersTransferData[1] = 40; @@ -1270,7 +1270,7 @@ void EmitHitAnimation(u8 a) dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); } -void dp01_build_cmdbuf_x2A_2A_2A_2A(u8 a) +void Emitcmd42(u8 a) { gBattleBuffersTransferData[0] = 42; gBattleBuffersTransferData[1] = 42; @@ -1288,7 +1288,7 @@ void EmitEffectivenessSound(u8 a, u16 b) dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); } -void EmitPlaySound(u8 a, u16 b) +void Emitcmd44(u8 a, u16 b) { gBattleBuffersTransferData[0] = 44; gBattleBuffersTransferData[1] = b; @@ -1306,14 +1306,14 @@ void EmitFaintingCry(u8 a) dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); } -void EmitBattleIntroSlide(u8 a, u8 b) +void EmitIntroSlide(u8 a, u8 b) { gBattleBuffersTransferData[0] = 46; gBattleBuffersTransferData[1] = b; dp01_prepare_buffer(a, gBattleBuffersTransferData, 2); } -void dp01_build_cmdbuf_x2F_2F_2F_2F(u8 a) +void EmitTrainerBallThrow(u8 a) { gBattleBuffersTransferData[0] = 47; gBattleBuffersTransferData[1] = 47; @@ -1322,7 +1322,7 @@ void dp01_build_cmdbuf_x2F_2F_2F_2F(u8 a) dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); } -void dp01_build_cmdbuf_x30_TODO(u8 a, u8 *b, u8 c) +void Emitcmd48(u8 a, u8 *b, u8 c) { int i; @@ -1335,7 +1335,7 @@ void dp01_build_cmdbuf_x30_TODO(u8 a, u8 *b, u8 c) dp01_prepare_buffer(a, gBattleBuffersTransferData, 52); } -void dp01_build_cmdbuf_x31_31_31_31(u8 a) +void Emitcmd49(u8 a) { gBattleBuffersTransferData[0] = 49; gBattleBuffersTransferData[1] = 49; @@ -1344,7 +1344,7 @@ void dp01_build_cmdbuf_x31_31_31_31(u8 a) dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); } -void dp01_build_cmdbuf_x32_32_32_32(u8 a) +void Emitcmd50(u8 a) { gBattleBuffersTransferData[0] = 50; gBattleBuffersTransferData[1] = 50; @@ -1385,7 +1385,7 @@ void EmitResetActionMoveSelection(u8 a, u8 b) dp01_prepare_buffer(a, gBattleBuffersTransferData, 2); } -void dp01_build_cmdbuf_x37_a(u8 a, u8 b) +void Emitcmd55(u8 a, u8 b) { gBattleBuffersTransferData[0] = 55; gBattleBuffersTransferData[1] = b; -- cgit v1.2.3 From 42a36959b95aad5a55a2f7bb17dcdc941dd89750 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 26 Aug 2017 20:19:34 -0500 Subject: fix build --- asm/battle_controller_safari.s | 2 +- src/battle_2.c | 4 +- src/battle_7.c | 56 +- src/battle_8.c | 1642 --------------------------------- src/battle_811DA74.c | 1606 -------------------------------- src/battle_controller_linkopponent2.c | 14 +- src/battle_controller_linkpartner.c | 22 +- src/battle_controller_opponent.c | 16 +- src/battle_controller_player.c | 26 +- src/battle_controller_wally.c | 12 +- 10 files changed, 76 insertions(+), 3324 deletions(-) delete mode 100644 src/battle_8.c delete mode 100644 src/battle_811DA74.c diff --git a/asm/battle_controller_safari.s b/asm/battle_controller_safari.s index a92f74550..97bcd15b5 100644 --- a/asm/battle_controller_safari.s +++ b/asm/battle_controller_safari.s @@ -587,7 +587,7 @@ SafariHandleTrainerThrow: @ 812B8B8 ldrb r0, [r4, 0x8] ldr r5, _0812B970 @ =gActiveBank ldrb r1, [r5] - bl sub_8031AF4 + bl LoadPlayerTrainerBankSprite ldrb r6, [r4, 0x8] ldrb r0, [r5] bl GetBankIdentity diff --git a/src/battle_2.c b/src/battle_2.c index 06e20bb06..106d3333b 100644 --- a/src/battle_2.c +++ b/src/battle_2.c @@ -1347,8 +1347,8 @@ void sub_8010384(struct Sprite *sprite) u16 species; u8 yOffset; - if (ewram17800[r6].unk2 != 0) - species = ewram17800[r6].unk2; + if (ewram17800[r6].transformedSpecies != 0) + species = ewram17800[r6].transformedSpecies; else species = sprite->data2; diff --git a/src/battle_7.c b/src/battle_7.c index 4ae220f6c..cf3a3522e 100644 --- a/src/battle_7.c +++ b/src/battle_7.c @@ -177,9 +177,9 @@ bool8 move_anim_start_t3(u8 a, u8 b, u8 c, u8 d, u16 e) gBattleMonForms[a] = e & 0x7F; return TRUE; } - if (ewram17800[a].unk0_2 && sub_803163C(d) == 0) + if (ewram17800[a].substituteSprite && sub_803163C(d) == 0) return TRUE; - if (ewram17800[a].unk0_2 && d == 2 && gSprites[gObjectBankIDs[a]].invisible) + if (ewram17800[a].substituteSprite && d == 2 && gSprites[gObjectBankIDs[a]].invisible) { refresh_graphics_maybe(a, 1, gObjectBankIDs[a]); sub_80324E0(a); @@ -268,7 +268,7 @@ bool8 mplay_80342A4(u8 a) return TRUE; } -void sub_8031794(struct Pokemon *pkmn, u8 b) +void BattleLoadOpponentMonSprite(struct Pokemon *pkmn, u8 b) { u32 personalityValue; u16 species; @@ -279,14 +279,14 @@ void sub_8031794(struct Pokemon *pkmn, u8 b) const u8 *lzPaletteData; personalityValue = GetMonData(pkmn, MON_DATA_PERSONALITY); - if (ewram17800[b].unk2 == 0) + if (ewram17800[b].transformedSpecies == 0) { species = GetMonData(pkmn, MON_DATA_SPECIES); r7 = personalityValue; } else { - species = ewram17800[b].unk2; + species = ewram17800[b].transformedSpecies; r7 = gPID_perBank[b]; } otId = GetMonData(pkmn, MON_DATA_OT_ID); @@ -300,7 +300,7 @@ void sub_8031794(struct Pokemon *pkmn, u8 b) species, r7); paletteOffset = 0x100 + b * 16; - if (ewram17800[b].unk2 == 0) + if (ewram17800[b].transformedSpecies == 0) lzPaletteData = pokemon_get_pal(pkmn); else lzPaletteData = species_and_otid_get_pal(species, otId, personalityValue); @@ -313,14 +313,14 @@ void sub_8031794(struct Pokemon *pkmn, u8 b) sub_800D238(lzPaletteData, ewram + 0x16400); LoadPalette(ewram + 0x16400 + gBattleMonForms[b] * 32, paletteOffset, 0x20); } - if (ewram17800[b].unk2 != 0) + if (ewram17800[b].transformedSpecies != 0) { BlendPalette(paletteOffset, 16, 6, 0x7FFF); CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); } } -void sub_80318FC(struct Pokemon *pkmn, u8 b) +void BattleLoadPlayerMonSprite(struct Pokemon *pkmn, u8 b) { u32 personalityValue; u16 species; @@ -331,14 +331,14 @@ void sub_80318FC(struct Pokemon *pkmn, u8 b) const u8 *lzPaletteData; personalityValue = GetMonData(pkmn, MON_DATA_PERSONALITY); - if (ewram17800[b].unk2 == 0) + if (ewram17800[b].transformedSpecies == 0) { species = GetMonData(pkmn, MON_DATA_SPECIES); r7 = personalityValue; } else { - species = ewram17800[b].unk2; + species = ewram17800[b].transformedSpecies; r7 = gPID_perBank[b]; } otId = GetMonData(pkmn, MON_DATA_OT_ID); @@ -352,7 +352,7 @@ void sub_80318FC(struct Pokemon *pkmn, u8 b) species, r7); paletteOffset = 0x100 + b * 16; - if (ewram17800[b].unk2 == 0) + if (ewram17800[b].transformedSpecies == 0) lzPaletteData = pokemon_get_pal(pkmn); else lzPaletteData = species_and_otid_get_pal(species, otId, personalityValue); @@ -365,7 +365,7 @@ void sub_80318FC(struct Pokemon *pkmn, u8 b) sub_800D238(lzPaletteData, ewram + 0x16400); LoadPalette(ewram + 0x16400 + gBattleMonForms[b] * 32, paletteOffset, 0x20); } - if (ewram17800[b].unk2 != 0) + if (ewram17800[b].transformedSpecies != 0) { BlendPalette(paletteOffset, 16, 6, 0x7FFF); CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); @@ -400,7 +400,7 @@ void sub_8031A6C(u16 a, u8 b) LoadCompressedObjectPalette(&gTrainerFrontPicPaletteTable[a]); } -void sub_8031AF4(u16 a, u8 b) +void LoadPlayerTrainerBankSprite(u16 a, u8 b) { u8 status; @@ -602,12 +602,12 @@ void sub_8031F24(void) s32 i; for (i = 0; i < gNoOfAllBanks; i++) - ewram17800[i].unk0_0 = gSprites[gObjectBankIDs[i]].invisible; + ewram17800[i].invisible = gSprites[gObjectBankIDs[i]].invisible; } void sub_8031F88(u8 a) { - ewram17800[a].unk0_0 = gSprites[gObjectBankIDs[a]].invisible; + ewram17800[a].invisible = gSprites[gObjectBankIDs[a]].invisible; } void sub_8031FC4(u8 a, u8 b, bool8 c) @@ -625,7 +625,7 @@ void sub_8031FC4(u8 a, u8 b, bool8 c) paletteOffset = 0x100 + a * 16; LoadPalette(ewram + 0x16400 + ewram17840.unk0 * 32, paletteOffset, 32); gBattleMonForms[a] = ewram17840.unk0; - if (ewram17800[a].unk2 != 0) + if (ewram17800[a].transformedSpecies != 0) { BlendPalette(paletteOffset, 16, 6, 0x7FFF); CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); @@ -704,7 +704,7 @@ void sub_8031FC4(u8 a, u8 b, bool8 c) CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); if (!IsContest()) { - ewram17800[a].unk2 = species; + ewram17800[a].transformedSpecies = species; gBattleMonForms[a] = gBattleMonForms[b]; } gSprites[gObjectBankIDs[a]].pos1.y = sub_8077F68(a); @@ -712,7 +712,7 @@ void sub_8031FC4(u8 a, u8 b, bool8 c) } } -void sub_8032350(u8 a, u8 b) +void BattleLoadSubstituteSprite(u8 a, u8 b) { u8 r4; u16 foo; @@ -745,16 +745,16 @@ void sub_8032350(u8 a, u8 b) if (!IsContest()) { if (GetBankSide(a) != 0) - sub_8031794(&gEnemyParty[gBattlePartyID[a]], a); + BattleLoadOpponentMonSprite(&gEnemyParty[gBattlePartyID[a]], a); else - sub_80318FC(&gPlayerParty[gBattlePartyID[a]], a); + BattleLoadPlayerMonSprite(&gPlayerParty[gBattlePartyID[a]], a); } } } void refresh_graphics_maybe(u8 a, u8 b, u8 spriteId) { - sub_8032350(a, b); + BattleLoadSubstituteSprite(a, b); StartSpriteAnim(&gSprites[spriteId], gBattleMonForms[a]); if (b == 0) gSprites[spriteId].pos1.y = sub_8077F7C(a); @@ -765,12 +765,12 @@ void refresh_graphics_maybe(u8 a, u8 b, u8 spriteId) void sub_80324BC(u8 a, u16 b) { if (b == 0xA4) - ewram17800[a].unk0_2 = 1; + ewram17800[a].substituteSprite = 1; } void sub_80324E0(u8 a) { - ewram17800[a].unk0_2 = 0; + ewram17800[a].substituteSprite = 0; } void sub_80324F8(struct Pokemon *pkmn, u8 b) @@ -891,9 +891,9 @@ void sub_80328A4(struct Sprite *sprite) } if (gAnimScriptActive || r7->invisible) invisible = TRUE; - else if (ewram17800[r4].unk2 != 0 && gEnemyMonElevation[ewram17800[r4].unk2] == 0) + else if (ewram17800[r4].transformedSpecies != 0 && gEnemyMonElevation[ewram17800[r4].transformedSpecies] == 0) invisible = TRUE; - if (ewram17800[r4].unk0_2) + if (ewram17800[r4].substituteSprite) invisible = TRUE; sprite->pos1.x = r7->pos1.x; sprite->pos2.x = r7->pos2.x; @@ -909,8 +909,8 @@ void sub_8032984(u8 a, u16 b) { if (GetBankSide(a) != 0) { - if (ewram17800[a].unk2 != 0) - b = ewram17800[a].unk2; + if (ewram17800[a].transformedSpecies != 0) + b = ewram17800[a].transformedSpecies; if (gEnemyMonElevation[b] != 0) gSprites[ewram17810[a].unk7].callback = sub_80328A4; else @@ -948,7 +948,7 @@ void sub_8032A38(void) void sub_8032AA8(u8 a, u8 b) { - ewram17800[a].unk2 = 0; + ewram17800[a].transformedSpecies = 0; gBattleMonForms[a] = 0; if (b == 0) sub_80324E0(a); diff --git a/src/battle_8.c b/src/battle_8.c deleted file mode 100644 index 44e42d0d6..000000000 --- a/src/battle_8.c +++ /dev/null @@ -1,1642 +0,0 @@ -#include "global.h" -#include "battle.h" -#include "battle_ai.h" -#include "battle_interface.h" -#include "data2.h" -#include "graphics.h" -#include "main.h" -#include "pokemon.h" -#include "rng.h" -#include "rom3.h" -#include "songs.h" -#include "sound.h" -#include "sprite.h" -#include "string_util.h" -#include "task.h" -#include "text.h" -#include "util.h" - -struct UnknownStruct3 -{ - u16 moves[4]; - u8 pp[4]; - u8 ppBonuses; -}; - -extern u8 gActiveBank; -extern u8 gBattleBufferA[][0x200]; -extern u16 gBattlePartyID[]; -extern u8 gObjectBankIDs[]; -extern u8 gBattleMonForms[]; -extern struct SpriteTemplate gUnknown_02024E8C; -extern void (*gBattleBankFunc[])(void); -extern u8 gUnknown_0300434C[]; -extern u8 gHealthboxIDs[]; -extern u16 gBattleTypeFlags; -extern u16 gTrainerBattleOpponent; -extern u32 *gDisableStructMoveAnim; -extern u32 gMoveDmgMoveAnim; -extern u16 gMovePowerMoveAnim; -extern u8 gHappinessMoveAnim; -extern u16 gWeatherMoveAnim; -extern u32 gPID_perBank[]; -extern u8 gUnknown_0202F7C4; -extern u8 gAnimScriptActive; -extern void (*gAnimScriptCallback)(void); -extern struct Window gUnknown_03004210; -extern u16 gUnknown_030042A0; -extern u16 gUnknown_030042A4; -extern u8 gDisplayedStringBattle[]; -extern u8 gBankTarget; -extern u8 gAbsentBankFlags; -extern bool8 gDoingBattleAnim; -extern u16 gUnknown_02024DE8; -extern u8 gUnknown_02024E68[]; -extern MainCallback gPreBattleCallback1; - -extern u8 sub_8077ABC(); -extern u8 sub_8077F68(); -extern u8 sub_8079E90(); -extern void sub_8033018(void); -extern void BattleLoadOpponentMonSprite(); -extern u8 GetBankIdentity(u8); -extern void sub_8032984(u8, u16); -extern void sub_80333D4(void); -extern void sub_80312F0(struct Sprite *); -extern u8 sub_8046400(); -extern void sub_8032A08(); -extern void sub_8043DB0(); -extern void sub_8033160(void); -extern u8 sub_8135FBC(void); -extern u8 get_trainer_class_pic_index(void); -extern void sub_80313A0(struct Sprite *); -extern void sub_8032B4C(void); -extern void sub_8031A6C(u16, u8); -extern void sub_8032B84(void); -extern void sub_8078B34(struct Sprite *); -extern void sub_8032BBC(void); -extern void oamt_add_pos2_onto_pos1(); -extern void oamt_set_x3A_32(); -extern void sub_803311C(void); -extern void sub_8010384(struct Sprite *); -extern bool8 mplay_80342A4(u8); -extern u8 sub_8031720(); -extern void ExecuteMoveAnim(); -extern void sub_80326EC(); -extern void sub_8031F24(void); -extern void sub_80324BC(); -extern void BufferStringBattle(); -extern void sub_80331D0(void); -extern void sub_8036B0C(void); -extern u8 GetBankByPlayerAI(u8); -extern u8 sub_8036CD4(void); -extern void sub_80330C8(void); -extern void sub_8043D84(); -extern void sub_8045A5C(); -void sub_8033494(void); -extern void move_anim_start_t2_for_situation(); -extern void bx_blink_t7(void); -extern void sub_8047858(); -extern u8 GetBankSide(u8); -extern void sub_80E43C0(); -extern void sub_8044CA0(u8); -extern void nullsub_45(void); -extern void sub_8031B74(); -extern bool8 IsDoubleBattle(void); -extern void sub_8032E2C(void); -extern u8 sub_8078874(); -extern u8 move_anim_start_t3(); -extern void sub_80334C0(void); -extern void OpponentBufferExecCompleted(void); - -u32 sub_8033598(u8, u8 *); -void sub_8033E24(u8); -void sub_803495C(u8, u8); -void sub_8034B74(void); -void sub_8035238(void); -void sub_8035C10(struct Sprite *); -void sub_8035C44(u8); -void sub_8035E2C(void); - -void OpponentHandleGetAttributes(void) -{ - u8 buffer[256]; - int r6 = 0; - s32 i; - - if (gBattleBufferA[gActiveBank][2] == 0) - { - r6 = sub_8033598(gBattlePartyID[gActiveBank], buffer); - } - else - { - u8 r4 = gBattleBufferA[gActiveBank][2]; - - for (i = 0; i < 6; i++) - { - if (r4 & 1) - r6 += sub_8033598(i, buffer + r6); - r4 >>= 1; - } - } - dp01_build_cmdbuf_x1D_1D_numargs_varargs(1, r6, buffer); - OpponentBufferExecCompleted(); -} - -u32 sub_8033598(u8 a, u8 *buffer) -{ - struct BattlePokemon battlePokemon; - struct UnknownStruct3 moveData; - u8 nickname[20]; - u8 *src; - s16 data16; - u32 data32; - s32 size = 0; - - switch (gBattleBufferA[gActiveBank][1]) - { - case 0: - battlePokemon.species = GetMonData(&gEnemyParty[a], MON_DATA_SPECIES); - battlePokemon.item = GetMonData(&gEnemyParty[a], MON_DATA_HELD_ITEM); - for (size = 0; size < 4; size++) - { - battlePokemon.moves[size] = GetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + size); - battlePokemon.pp[size] = GetMonData(&gEnemyParty[a], MON_DATA_PP1 + size); - } - battlePokemon.ppBonuses = GetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES); - battlePokemon.friendship = GetMonData(&gEnemyParty[a], MON_DATA_FRIENDSHIP); - battlePokemon.experience = GetMonData(&gEnemyParty[a], MON_DATA_EXP); - battlePokemon.hpIV = GetMonData(&gEnemyParty[a], MON_DATA_HP_IV); - battlePokemon.attackIV = GetMonData(&gEnemyParty[a], MON_DATA_ATK_IV); - battlePokemon.defenseIV = GetMonData(&gEnemyParty[a], MON_DATA_DEF_IV); - battlePokemon.speedIV = GetMonData(&gEnemyParty[a], MON_DATA_SPD_IV); - battlePokemon.spAttackIV = GetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV); - battlePokemon.spDefenseIV = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV); - battlePokemon.personality = GetMonData(&gEnemyParty[a], MON_DATA_PERSONALITY); - battlePokemon.status1 = GetMonData(&gEnemyParty[a], MON_DATA_STATUS); - battlePokemon.level = GetMonData(&gEnemyParty[a], MON_DATA_LEVEL); - battlePokemon.hp = GetMonData(&gEnemyParty[a], MON_DATA_HP); - battlePokemon.maxHP = GetMonData(&gEnemyParty[a], MON_DATA_MAX_HP); - battlePokemon.attack = GetMonData(&gEnemyParty[a], MON_DATA_ATK); - battlePokemon.defense = GetMonData(&gEnemyParty[a], MON_DATA_DEF); - battlePokemon.speed = GetMonData(&gEnemyParty[a], MON_DATA_SPD); - battlePokemon.spAttack = GetMonData(&gEnemyParty[a], MON_DATA_SPATK); - battlePokemon.spDefense = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF); - battlePokemon.isEgg = GetMonData(&gEnemyParty[a], MON_DATA_IS_EGG); - battlePokemon.altAbility = GetMonData(&gEnemyParty[a], MON_DATA_ALT_ABILITY); - battlePokemon.otId = GetMonData(&gEnemyParty[a], MON_DATA_OT_ID); - GetMonData(&gEnemyParty[a], MON_DATA_NICKNAME, nickname); - StringCopy10(battlePokemon.nickname, nickname); - GetMonData(&gEnemyParty[a], MON_DATA_OT_NAME, battlePokemon.otName); - src = (u8 *)&battlePokemon; - for (size = 0; size < sizeof(battlePokemon); size++) - buffer[size] = src[size]; - break; - case 1: - data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPECIES); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 2: - data16 = GetMonData(&gEnemyParty[a], MON_DATA_HELD_ITEM); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 3: - for (size = 0; size < 4; size++) - { - moveData.moves[size] = GetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + size); - moveData.pp[size] = GetMonData(&gEnemyParty[a], MON_DATA_PP1 + size); - } - moveData.ppBonuses = GetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES); - src = (u8 *)&moveData; - for (size = 0; size < sizeof(moveData); size++) - buffer[size] = src[size]; - break; - case 4: - case 5: - case 6: - case 7: - data16 = GetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - 4); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 8: - for (size = 0; size < 4; size++) - buffer[size] = GetMonData(&gEnemyParty[a], MON_DATA_PP1 + size); - buffer[size] = GetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES); - size++; - break; - case 9: - case 10: - case 11: - case 12: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - 9); - size = 1; - break; - case 17: - data32 = GetMonData(&gEnemyParty[a], MON_DATA_OT_ID); - buffer[0] = (data32 & 0x000000FF); - buffer[1] = (data32 & 0x0000FF00) >> 8; - buffer[2] = (data32 & 0x00FF0000) >> 16; - size = 3; - break; - case 18: - data32 = GetMonData(&gEnemyParty[a], MON_DATA_EXP); - buffer[0] = (data32 & 0x000000FF); - buffer[1] = (data32 & 0x0000FF00) >> 8; - buffer[2] = (data32 & 0x00FF0000) >> 16; - size = 3; - break; - case 19: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_HP_EV); - size = 1; - break; - case 20: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_ATK_EV); - size = 1; - break; - case 21: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_DEF_EV); - size = 1; - break; - case 22: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPD_EV); - size = 1; - break; - case 23: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPATK_EV); - size = 1; - break; - case 24: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF_EV); - size = 1; - break; - case 25: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_FRIENDSHIP); - size = 1; - break; - case 26: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_POKERUS); - size = 1; - break; - case 27: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_MET_LOCATION); - size = 1; - break; - case 28: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_MET_LEVEL); - size = 1; - break; - case 29: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_MET_GAME); - size = 1; - break; - case 30: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_POKEBALL); - size = 1; - break; - case 31: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_HP_IV); - buffer[1] = GetMonData(&gEnemyParty[a], MON_DATA_ATK_IV); - buffer[2] = GetMonData(&gEnemyParty[a], MON_DATA_DEF_IV); - buffer[3] = GetMonData(&gEnemyParty[a], MON_DATA_SPD_IV); - buffer[4] = GetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV); - buffer[5] = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV); - size = 6; - break; - case 32: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_HP_IV); - size = 1; - break; - case 33: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_ATK_IV); - size = 1; - break; - case 34: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_DEF_IV); - size = 1; - break; - case 35: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPD_IV); - size = 1; - break; - case 36: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV); - size = 1; - break; - case 37: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV); - size = 1; - break; - case 38: - data32 = GetMonData(&gEnemyParty[a], MON_DATA_PERSONALITY); - buffer[0] = (data32 & 0x000000FF); - buffer[1] = (data32 & 0x0000FF00) >> 8; - buffer[2] = (data32 & 0x00FF0000) >> 16; - buffer[3] = (data32 & 0xFF000000) >> 24; - size = 4; - break; - case 39: - data16 = GetMonData(&gEnemyParty[a], MON_DATA_CHECKSUM); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 40: - data32 = GetMonData(&gEnemyParty[a], MON_DATA_STATUS); - buffer[0] = (data32 & 0x000000FF); - buffer[1] = (data32 & 0x0000FF00) >> 8; - buffer[2] = (data32 & 0x00FF0000) >> 16; - buffer[3] = (data32 & 0xFF000000) >> 24; - size = 4; - break; - case 41: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_LEVEL); - size = 1; - break; - case 42: - data16 = GetMonData(&gEnemyParty[a], MON_DATA_HP); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 43: - data16 = GetMonData(&gEnemyParty[a], MON_DATA_MAX_HP); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 44: - data16 = GetMonData(&gEnemyParty[a], MON_DATA_ATK); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 45: - data16 = GetMonData(&gEnemyParty[a], MON_DATA_DEF); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 46: - data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPD); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 47: - data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPATK); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 48: - data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 49: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_COOL); - size = 1; - break; - case 50: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_BEAUTY); - size = 1; - break; - case 51: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_CUTE); - size = 1; - break; - case 52: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SMART); - size = 1; - break; - case 53: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_TOUGH); - size = 1; - break; - case 54: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SHEEN); - size = 1; - break; - case 55: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_COOL_RIBBON); - size = 1; - break; - case 56: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_BEAUTY_RIBBON); - size = 1; - break; - case 57: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_CUTE_RIBBON); - size = 1; - break; - case 58: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SMART_RIBBON); - size = 1; - break; - case 59: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_TOUGH_RIBBON); - size = 1; - break; - } - return size; -} - -void dp01t_01_2_read_pokmon_data_slice(void) -{ - struct BattlePokemon buffer; - u8 *src = (u8 *)&gEnemyParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1]; - u8 *dst = (u8 *)&buffer + gBattleBufferA[gActiveBank][1]; - u8 i; - - for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++) - dst[i] = src[i]; - dp01_build_cmdbuf_x1D_1D_numargs_varargs(1, gBattleBufferA[gActiveBank][2], dst); - OpponentBufferExecCompleted(); -} - -void OpponentHandleSetAttributes(void) -{ - u8 i; - u8 r4; - - if (gBattleBufferA[gActiveBank][2] == 0) - { - sub_8033E24(gBattlePartyID[gActiveBank]); - } - else - { - r4 = gBattleBufferA[gActiveBank][2]; - for (i = 0; i < 6; i++) - { - if (r4 & 1) - sub_8033E24(i); - r4 >>= 1; - } - } - OpponentBufferExecCompleted(); -} - -void sub_8033E24(u8 a) -{ - struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBank][3]; - struct UnknownStruct3 *moveData = (struct UnknownStruct3 *)&gBattleBufferA[gActiveBank][3]; - s32 i; - - switch (gBattleBufferA[gActiveBank][1]) - { - case 0: - { - u8 iv; - - SetMonData(&gEnemyParty[a], MON_DATA_SPECIES, (u8 *)&battlePokemon->species); - SetMonData(&gEnemyParty[a], MON_DATA_HELD_ITEM, (u8 *)&battlePokemon->item); - for (i = 0; i < 4; i++) - { - SetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + i, (u8 *)&battlePokemon->moves[i]); - SetMonData(&gEnemyParty[a], MON_DATA_PP1 + i, (u8 *)&battlePokemon->pp[i]); - } - SetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES, (u8 *)&battlePokemon->ppBonuses); - SetMonData(&gEnemyParty[a], MON_DATA_FRIENDSHIP, (u8 *)&battlePokemon->friendship); - SetMonData(&gEnemyParty[a], MON_DATA_EXP, (u8 *)&battlePokemon->experience); - iv = battlePokemon->hpIV; - SetMonData(&gEnemyParty[a], MON_DATA_HP_IV, (u8 *)&iv); - iv = battlePokemon->attackIV; - SetMonData(&gEnemyParty[a], MON_DATA_ATK_IV, (u8 *)&iv); - iv = battlePokemon->defenseIV; - SetMonData(&gEnemyParty[a], MON_DATA_DEF_IV, (u8 *)&iv); - iv = battlePokemon->speedIV; - SetMonData(&gEnemyParty[a], MON_DATA_SPD_IV, (u8 *)&iv); - iv = battlePokemon->spAttackIV; - SetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV, (u8 *)&iv); - iv = battlePokemon->spDefenseIV; - SetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV, (u8 *)&iv); - SetMonData(&gEnemyParty[a], MON_DATA_PERSONALITY, (u8 *)&battlePokemon->personality); - SetMonData(&gEnemyParty[a], MON_DATA_STATUS, (u8 *)&battlePokemon->status1); - SetMonData(&gEnemyParty[a], MON_DATA_LEVEL, (u8 *)&battlePokemon->level); - SetMonData(&gEnemyParty[a], MON_DATA_HP, (u8 *)&battlePokemon->hp); - SetMonData(&gEnemyParty[a], MON_DATA_MAX_HP, (u8 *)&battlePokemon->maxHP); - SetMonData(&gEnemyParty[a], MON_DATA_ATK, (u8 *)&battlePokemon->attack); - SetMonData(&gEnemyParty[a], MON_DATA_DEF, (u8 *)&battlePokemon->defense); - SetMonData(&gEnemyParty[a], MON_DATA_SPD, (u8 *)&battlePokemon->speed); - SetMonData(&gEnemyParty[a], MON_DATA_SPATK, (u8 *)&battlePokemon->spAttack); - SetMonData(&gEnemyParty[a], MON_DATA_SPDEF, (u8 *)&battlePokemon->spDefense); - } - break; - case 1: - SetMonData(&gEnemyParty[a], MON_DATA_SPECIES, &gBattleBufferA[gActiveBank][3]); - break; - case 2: - SetMonData(&gEnemyParty[a], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBank][3]); - break; - case 3: - for (i = 0; i < 4; i++) - { - SetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + i, (u8 *)&moveData->moves[i]); - SetMonData(&gEnemyParty[a], MON_DATA_PP1 + i, (u8 *)&moveData->pp[i]); - } - SetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES, &moveData->ppBonuses); - break; - case 4: - case 5: - case 6: - case 7: - SetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - 4, &gBattleBufferA[gActiveBank][3]); - break; - case 8: - SetMonData(&gEnemyParty[a], MON_DATA_PP1, &gBattleBufferA[gActiveBank][3]); - SetMonData(&gEnemyParty[a], MON_DATA_PP2, &gBattleBufferA[gActiveBank][4]); - SetMonData(&gEnemyParty[a], MON_DATA_PP3, &gBattleBufferA[gActiveBank][5]); - SetMonData(&gEnemyParty[a], MON_DATA_PP4, &gBattleBufferA[gActiveBank][6]); - SetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBank][7]); - break; - case 9: - case 10: - case 11: - case 12: - SetMonData(&gEnemyParty[a], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - 9, &gBattleBufferA[gActiveBank][3]); - break; - case 17: - SetMonData(&gEnemyParty[a], MON_DATA_OT_ID, &gBattleBufferA[gActiveBank][3]); - break; - case 18: - SetMonData(&gEnemyParty[a], MON_DATA_EXP, &gBattleBufferA[gActiveBank][3]); - break; - case 19: - SetMonData(&gEnemyParty[a], MON_DATA_HP_EV, &gBattleBufferA[gActiveBank][3]); - break; - case 20: - SetMonData(&gEnemyParty[a], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBank][3]); - break; - case 21: - SetMonData(&gEnemyParty[a], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBank][3]); - break; - case 22: - SetMonData(&gEnemyParty[a], MON_DATA_SPD_EV, &gBattleBufferA[gActiveBank][3]); - break; - case 23: - SetMonData(&gEnemyParty[a], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBank][3]); - break; - case 24: - SetMonData(&gEnemyParty[a], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBank][3]); - break; - case 25: - SetMonData(&gEnemyParty[a], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBank][3]); - break; - case 26: - SetMonData(&gEnemyParty[a], MON_DATA_POKERUS, &gBattleBufferA[gActiveBank][3]); - break; - case 27: - SetMonData(&gEnemyParty[a], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBank][3]); - break; - case 28: - SetMonData(&gEnemyParty[a], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBank][3]); - break; - case 29: - SetMonData(&gEnemyParty[a], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBank][3]); - break; - case 30: - SetMonData(&gEnemyParty[a], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBank][3]); - break; - case 31: - SetMonData(&gEnemyParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]); - SetMonData(&gEnemyParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][4]); - SetMonData(&gEnemyParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][5]); - SetMonData(&gEnemyParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][6]); - SetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][7]); - SetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][8]); - break; - case 32: - SetMonData(&gEnemyParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]); - break; - case 33: - SetMonData(&gEnemyParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][3]); - break; - case 34: - SetMonData(&gEnemyParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][3]); - break; - case 35: - SetMonData(&gEnemyParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][3]); - break; - case 36: - SetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][3]); - break; - case 37: - SetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][3]); - break; - case 38: - SetMonData(&gEnemyParty[a], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBank][3]); - break; - case 39: - SetMonData(&gEnemyParty[a], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBank][3]); - break; - case 40: - SetMonData(&gEnemyParty[a], MON_DATA_STATUS, &gBattleBufferA[gActiveBank][3]); - break; - case 41: - SetMonData(&gEnemyParty[a], MON_DATA_LEVEL, &gBattleBufferA[gActiveBank][3]); - break; - case 42: - SetMonData(&gEnemyParty[a], MON_DATA_HP, &gBattleBufferA[gActiveBank][3]); - break; - case 43: - SetMonData(&gEnemyParty[a], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBank][3]); - break; - case 44: - SetMonData(&gEnemyParty[a], MON_DATA_ATK, &gBattleBufferA[gActiveBank][3]); - break; - case 45: - SetMonData(&gEnemyParty[a], MON_DATA_DEF, &gBattleBufferA[gActiveBank][3]); - break; - case 46: - SetMonData(&gEnemyParty[a], MON_DATA_SPD, &gBattleBufferA[gActiveBank][3]); - break; - case 47: - SetMonData(&gEnemyParty[a], MON_DATA_SPATK, &gBattleBufferA[gActiveBank][3]); - break; - case 48: - SetMonData(&gEnemyParty[a], MON_DATA_SPDEF, &gBattleBufferA[gActiveBank][3]); - break; - case 49: - SetMonData(&gEnemyParty[a], MON_DATA_COOL, &gBattleBufferA[gActiveBank][3]); - break; - case 50: - SetMonData(&gEnemyParty[a], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBank][3]); - break; - case 51: - SetMonData(&gEnemyParty[a], MON_DATA_CUTE, &gBattleBufferA[gActiveBank][3]); - break; - case 52: - SetMonData(&gEnemyParty[a], MON_DATA_SMART, &gBattleBufferA[gActiveBank][3]); - break; - case 53: - SetMonData(&gEnemyParty[a], MON_DATA_TOUGH, &gBattleBufferA[gActiveBank][3]); - break; - case 54: - SetMonData(&gEnemyParty[a], MON_DATA_SHEEN, &gBattleBufferA[gActiveBank][3]); - break; - case 55: - SetMonData(&gEnemyParty[a], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBank][3]); - break; - case 56: - SetMonData(&gEnemyParty[a], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBank][3]); - break; - case 57: - SetMonData(&gEnemyParty[a], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBank][3]); - break; - case 58: - SetMonData(&gEnemyParty[a], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBank][3]); - break; - case 59: - SetMonData(&gEnemyParty[a], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBank][3]); - break; - } -} - -void sub_8034744(void) -{ - u8 *dst; - u8 i; - - dst = (u8 *)&gEnemyParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1]; - for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++) - dst[i] = gBattleBufferA[gActiveBank][3 + i]; - OpponentBufferExecCompleted(); -} - -void OpponentHandleLoadPokeSprite(void) -{ - u16 species = GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES); - - BattleLoadOpponentMonSprite(&gEnemyParty[gBattlePartyID[gActiveBank]], gActiveBank); - GetMonSpriteTemplate_803C56C(species, GetBankIdentity(gActiveBank)); - gObjectBankIDs[gActiveBank] = CreateSprite( - &gUnknown_02024E8C, - sub_8077ABC(gActiveBank, 2), - sub_8077F68(gActiveBank), - sub_8079E90(gActiveBank)); - gSprites[gObjectBankIDs[gActiveBank]].pos2.x = -240; - gSprites[gObjectBankIDs[gActiveBank]].data0 = gActiveBank; - gSprites[gObjectBankIDs[gActiveBank]].data2 = species; - gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank; - StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], gBattleMonForms[gActiveBank]); - sub_8032984(gActiveBank, GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES)); - gBattleBankFunc[gActiveBank] = sub_8033018; -} - -void OpponentHandleSendOutPoke(void) -{ - gBattlePartyID[gActiveBank] = gBattleBufferA[gActiveBank][1]; - - sub_803495C(gActiveBank, gBattleBufferA[gActiveBank][2]); - gBattleBankFunc[gActiveBank] = sub_80333D4; -} - -void sub_803495C(u8 a, u8 b) -{ - u16 species; - - sub_8032AA8(a, b); - gBattlePartyID[a] = gBattleBufferA[a][1]; - species = GetMonData(&gEnemyParty[gBattlePartyID[a]], MON_DATA_SPECIES); - gUnknown_0300434C[a] = CreateInvisibleSpriteWithCallback(sub_80312F0); - BattleLoadOpponentMonSprite(&gEnemyParty[gBattlePartyID[a]], a); - GetMonSpriteTemplate_803C56C(species, GetBankIdentity(a)); - gObjectBankIDs[a] = CreateSprite( - &gUnknown_02024E8C, - sub_8077ABC(a, 2), - sub_8077F68(a), - sub_8079E90(a)); - gSprites[gObjectBankIDs[a]].data0 = a; - gSprites[gObjectBankIDs[a]].data2 = species; - gSprites[gUnknown_0300434C[a]].data1 = gObjectBankIDs[a]; - gSprites[gObjectBankIDs[a]].oam.paletteNum = a; - StartSpriteAnim(&gSprites[gObjectBankIDs[a]], gBattleMonForms[a]); - gSprites[gObjectBankIDs[a]].invisible = TRUE; - gSprites[gObjectBankIDs[a]].callback = SpriteCallbackDummy; - gSprites[gUnknown_0300434C[a]].data0 = sub_8046400(0, 0xFE); -} - -void OpponentHandleReturnPokeToBall(void) -{ - if (gBattleBufferA[gActiveBank][1] == 0) - { - ewram17810[gActiveBank].unk4 = 0; - gBattleBankFunc[gActiveBank] = sub_8034B74; - } - else - { - FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); - DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); - sub_8032A08(gActiveBank); - sub_8043DB0(gHealthboxIDs[gActiveBank]); - OpponentBufferExecCompleted(); - } -} - -void sub_8034B74(void) -{ - switch (ewram17810[gActiveBank].unk4) - { - case 0: - if (ewram17800[gActiveBank].substituteSprite) - move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); - ewram17810[gActiveBank].unk4 = 1; - break; - case 1: - if (!ewram17810[gActiveBank].unk0_6) - { - ewram17810[gActiveBank].unk4 = 0; - move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 2); - gBattleBankFunc[gActiveBank] = sub_8033160; - } - break; - } -} - -void OpponentHandleTrainerThrow(void) -{ - u32 trainerPicIndex; - - if (gTrainerBattleOpponent == 0x400) - trainerPicIndex = GetSecretBaseTrainerPicIndex(); - else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) - trainerPicIndex = get_trainer_class_pic_index(); - else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER) - trainerPicIndex = sub_8135FBC(); - else - trainerPicIndex = gTrainers[gTrainerBattleOpponent].trainerPic; - - sub_8031A6C(trainerPicIndex, gActiveBank); - GetMonSpriteTemplate_803C5A0(trainerPicIndex, GetBankIdentity(gActiveBank)); - gObjectBankIDs[gActiveBank] = CreateSprite( - &gUnknown_02024E8C, - 0xB0, - 40 + 4 * (8 - gTrainerFrontPicCoords[trainerPicIndex].coords), - sub_8079E90(gActiveBank)); - gSprites[gObjectBankIDs[gActiveBank]].pos2.x = -240; - gSprites[gObjectBankIDs[gActiveBank]].data0 = 2; - gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicIndex].tag); - gSprites[gObjectBankIDs[gActiveBank]].data5 = gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum; - gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[trainerPicIndex].tag); - gSprites[gObjectBankIDs[gActiveBank]].oam.affineParam = trainerPicIndex; - gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0; - gBattleBankFunc[gActiveBank] = sub_8032B4C; -} - -void OpponentHandleTrainerSlide(void) -{ - u32 trainerPicIndex; - - if (gTrainerBattleOpponent == 0x400) - trainerPicIndex = GetSecretBaseTrainerPicIndex(); - else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) - trainerPicIndex = get_trainer_class_pic_index(); - else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER) - trainerPicIndex = sub_8135FBC(); - else - trainerPicIndex = gTrainers[gTrainerBattleOpponent].trainerPic; - - sub_8031A6C(trainerPicIndex, gActiveBank); - GetMonSpriteTemplate_803C5A0(trainerPicIndex, GetBankIdentity(gActiveBank)); - gObjectBankIDs[gActiveBank] = CreateSprite( - &gUnknown_02024E8C, - 0xB0, - 40 + 4 * (8 - gTrainerFrontPicCoords[trainerPicIndex].coords), - 0x1E); - gSprites[gObjectBankIDs[gActiveBank]].pos2.x = 96; - gSprites[gObjectBankIDs[gActiveBank]].pos1.x += 32; - gSprites[gObjectBankIDs[gActiveBank]].data0 = -2; - gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicIndex].tag); - gSprites[gObjectBankIDs[gActiveBank]].data5 = gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum; - gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[trainerPicIndex].tag); - gSprites[gObjectBankIDs[gActiveBank]].oam.affineParam = trainerPicIndex; - gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0; - gBattleBankFunc[gActiveBank] = sub_8032B84; -} - -void OpponentHandleTrainerSlideBack(void) -{ - oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]); - gSprites[gObjectBankIDs[gActiveBank]].data0 = 35; - gSprites[gObjectBankIDs[gActiveBank]].data2 = 280; - gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; - gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34; - oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], SpriteCallbackDummy); - gBattleBankFunc[gActiveBank] = sub_8032BBC; -} - -void sub_8035030(void) -{ - if (ewram17810[gActiveBank].unk4 == 0) - { - if (ewram17800[gActiveBank].substituteSprite) - move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); - ewram17810[gActiveBank].unk4++; - } - else if (!ewram17810[gActiveBank].unk0_6) - { - ewram17810[gActiveBank].unk4 = 0; - PlaySE12WithPanning(SE_POKE_DEAD, 63); - gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8010384; - gBattleBankFunc[gActiveBank] = sub_803311C; - } -} - -void sub_80350D4(void) -{ - OpponentBufferExecCompleted(); -} - -void sub_80350E0(void) -{ - OpponentBufferExecCompleted(); -} - -void OpponentHandleBallThrow(void) -{ - OpponentBufferExecCompleted(); -} - -void OpponentHandlePause(void) -{ - OpponentBufferExecCompleted(); -} - -void OpponentHandleMoveAnimation(void) -{ - if (!mplay_80342A4(gActiveBank)) - { - u32 r0 = gBattleBufferA[gActiveBank][1] - | (gBattleBufferA[gActiveBank][2] << 8); - - gUnknown_0202F7C4 = gBattleBufferA[gActiveBank][3]; - gMovePowerMoveAnim = gBattleBufferA[gActiveBank][4] - | (gBattleBufferA[gActiveBank][5] << 8); - gMoveDmgMoveAnim = gBattleBufferA[gActiveBank][6] - | (gBattleBufferA[gActiveBank][7] << 8) - | (gBattleBufferA[gActiveBank][8] << 16) - | (gBattleBufferA[gActiveBank][9] << 24); - gHappinessMoveAnim = gBattleBufferA[gActiveBank][10]; - gWeatherMoveAnim = gBattleBufferA[gActiveBank][12] - | (gBattleBufferA[gActiveBank][13] << 8); - gDisableStructMoveAnim = (u32 *)&gBattleBufferA[gActiveBank][16]; - gPID_perBank[gActiveBank] = *gDisableStructMoveAnim; - - // Dead code. sub_8031720 always returns 0. - if (sub_8031720(r0, gUnknown_0202F7C4) != 0) - { - OpponentBufferExecCompleted(); - } - else - { - ewram17810[gActiveBank].unk4 = 0; - gBattleBankFunc[gActiveBank] = sub_8035238; - } - } -} - -void sub_8035238(void) -{ - u16 r4 = gBattleBufferA[gActiveBank][1] - | (gBattleBufferA[gActiveBank][2] << 8); - u8 r7 = gBattleBufferA[gActiveBank][11]; - - switch (ewram17810[gActiveBank].unk4) - { - case 0: - if (ewram17800[gActiveBank].substituteSprite && !ewram17800[gActiveBank].unk0_3) - { - ewram17800[gActiveBank].unk0_3 = 1; - move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); - } - ewram17810[gActiveBank].unk4 = 1; - break; - case 1: - if (!ewram17810[gActiveBank].unk0_6) - { - sub_80326EC(0); - ExecuteMoveAnim(r4); - ewram17810[gActiveBank].unk4 = 2; - } - break; - case 2: - gAnimScriptCallback(); - if (!gAnimScriptActive) - { - sub_80326EC(1); - if ((ewram17800[gActiveBank].substituteSprite) && r7 <= 1) - { - move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); - ewram17800[gActiveBank].unk0_3 = 0; - } - ewram17810[gActiveBank].unk4 = 3; - } - break; - case 3: - if (!ewram17810[gActiveBank].unk0_6) - { - sub_8031F24(); - sub_80324BC( - gActiveBank, - gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8)); - ewram17810[gActiveBank].unk4 = 0; - OpponentBufferExecCompleted(); - } - break; - } -} - -void OpponentHandlePrintString(void) -{ - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; - BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]); - sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); - gBattleBankFunc[gActiveBank] = sub_80331D0; -} - -void OpponentHandlePrintStringPlayerOnly(void) -{ - OpponentBufferExecCompleted(); -} - -void sub_803540C(void) -{ - sub_8036B0C(); - OpponentBufferExecCompleted(); -} - -void sub_803541C(void) -{ - OpponentBufferExecCompleted(); -} - -#ifdef NONMATCHING -void sub_8035428(void) -{ - u16 r4; - // Needed to match closer - struct {u16 moves[4];} *r5 = (void *)&gBattleBufferA[gActiveBank][4]; - - if (gBattleTypeFlags & 0x498) - { - BattleAI_SetupAIData(); - r4 = BattleAI_GetAIActionToUse(); - switch (r4) - { - case 5: - dp01_build_cmdbuf_x21_a_bb(1, 4, 0); - break; - case 4: - dp01_build_cmdbuf_x21_a_bb(1, 3, 0); - break; - default: - if (gBattleMoves[r5->moves[r4]].target & 0x12) - gBankTarget = gActiveBank; - if (gBattleMoves[r5->moves[r4]].target & 8) - { - gBankTarget = GetBankByPlayerAI(0); - if (gAbsentBankFlags & gBitTable[gBankTarget]) - gBankTarget = GetBankByPlayerAI(2); - } - r4 |= gBankTarget << 8; - dp01_build_cmdbuf_x21_a_bb(1, 10, r4); - break; - } - OpponentBufferExecCompleted(); - } - else - { - u16 r2; - - do - { - // Can't for the life of me get this to match. - r4 = Random() % 4; - r2 = r5->moves[r4]; - } while (r2 == 0); - - if (gBattleMoves[r2].target & 0x12) - { - r4 |= gActiveBank << 8; - dp01_build_cmdbuf_x21_a_bb(1, 10, r4); - } - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - { - u16 r2 = GetBankByPlayerAI(Random() & 2) << 8; - - dp01_build_cmdbuf_x21_a_bb(1, 10, r4 | r2); - } - else - { - u16 r2 = GetBankByPlayerAI(0) << 8; - - dp01_build_cmdbuf_x21_a_bb(1, 10, r4 | r2); - } - OpponentBufferExecCompleted(); - } -} -#else -__attribute__((naked)) -void sub_8035428(void) -{ - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - ldr r6, _0803545C @ =gActiveBank\n\ - ldrb r0, [r6]\n\ - lsls r0, 9\n\ - ldr r1, _08035460 @ =gUnknown_02023A64\n\ - adds r5, r0, r1\n\ - ldr r0, _08035464 @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - movs r0, 0x93\n\ - lsls r0, 3\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080354F8\n\ - bl BattleAI_SetupAIData\n\ - bl BattleAI_GetAIActionToUse\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - cmp r4, 0x4\n\ - beq _08035468\n\ - cmp r4, 0x5\n\ - bne _08035474\n\ - movs r0, 0x1\n\ - movs r1, 0x4\n\ - b _0803546C\n\ - .align 2, 0\n\ -_0803545C: .4byte gActiveBank\n\ -_08035460: .4byte gUnknown_02023A64\n\ -_08035464: .4byte gBattleTypeFlags\n\ -_08035468:\n\ - movs r0, 0x1\n\ - movs r1, 0x3\n\ -_0803546C:\n\ - movs r2, 0\n\ - bl dp01_build_cmdbuf_x21_a_bb\n\ - b _080354E0\n\ -_08035474:\n\ - ldr r3, _080354E8 @ =gBattleMoves\n\ - lsls r0, r4, 1\n\ - adds r2, r5, r0\n\ - ldrh r1, [r2]\n\ - lsls r0, r1, 1\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r3\n\ - ldrb r1, [r0, 0x6]\n\ - movs r0, 0x12\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08035494\n\ - ldr r1, _080354EC @ =gBankTarget\n\ - ldrb r0, [r6]\n\ - strb r0, [r1]\n\ -_08035494:\n\ - ldrh r1, [r2]\n\ - lsls r0, r1, 1\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r3\n\ - ldrb r1, [r0, 0x6]\n\ - movs r0, 0x8\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080354CE\n\ - movs r0, 0\n\ - bl GetBankByPlayerAI\n\ - ldr r5, _080354EC @ =gBankTarget\n\ - strb r0, [r5]\n\ - ldr r0, _080354F0 @ =gAbsentBankFlags\n\ - ldrb r1, [r0]\n\ - ldr r2, _080354F4 @ =gBitTable\n\ - ldrb r0, [r5]\n\ - lsls r0, 2\n\ - adds r0, r2\n\ - ldr r0, [r0]\n\ - ands r1, r0\n\ - cmp r1, 0\n\ - beq _080354CE\n\ - movs r0, 0x2\n\ - bl GetBankByPlayerAI\n\ - strb r0, [r5]\n\ -_080354CE:\n\ - ldr r0, _080354EC @ =gBankTarget\n\ - ldrb r0, [r0]\n\ - lsls r0, 8\n\ - orrs r4, r0\n\ - movs r0, 0x1\n\ - movs r1, 0xA\n\ - adds r2, r4, 0\n\ - bl dp01_build_cmdbuf_x21_a_bb\n\ -_080354E0:\n\ - bl OpponentBufferExecCompleted\n\ - b _0803558A\n\ - .align 2, 0\n\ -_080354E8: .4byte gBattleMoves\n\ -_080354EC: .4byte gBankTarget\n\ -_080354F0: .4byte gAbsentBankFlags\n\ -_080354F4: .4byte gBitTable\n\ -_080354F8:\n\ - movs r6, 0x3\n\ -_080354FA:\n\ - bl Random\n\ - adds r4, r0, 0\n\ - ands r4, r6\n\ - lsls r0, r4, 1\n\ - adds r0, r5, r0\n\ - ldrh r2, [r0]\n\ - cmp r2, 0\n\ - beq _080354FA\n\ - ldr r1, _08035534 @ =gBattleMoves\n\ - lsls r0, r2, 1\n\ - adds r0, r2\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldrb r1, [r0, 0x6]\n\ - movs r0, 0x12\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0803553C\n\ - ldr r0, _08035538 @ =gActiveBank\n\ - ldrb r0, [r0]\n\ - lsls r0, 8\n\ - orrs r4, r0\n\ - movs r0, 0x1\n\ - movs r1, 0xA\n\ - adds r2, r4, 0\n\ - bl dp01_build_cmdbuf_x21_a_bb\n\ - b _08035586\n\ - .align 2, 0\n\ -_08035534: .4byte gBattleMoves\n\ -_08035538: .4byte gActiveBank\n\ -_0803553C:\n\ - ldr r0, _0803556C @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08035570\n\ - bl Random\n\ - movs r1, 0x2\n\ - ands r1, r0\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - adds r0, r1, 0\n\ - bl GetBankByPlayerAI\n\ - adds r2, r0, 0\n\ - lsls r2, 24\n\ - lsrs r2, 16\n\ - orrs r2, r4\n\ - movs r0, 0x1\n\ - movs r1, 0xA\n\ - bl dp01_build_cmdbuf_x21_a_bb\n\ - b _08035586\n\ - .align 2, 0\n\ -_0803556C: .4byte gBattleTypeFlags\n\ -_08035570:\n\ - movs r0, 0\n\ - bl GetBankByPlayerAI\n\ - adds r2, r0, 0\n\ - lsls r2, 24\n\ - lsrs r2, 16\n\ - orrs r2, r4\n\ - movs r0, 0x1\n\ - movs r1, 0xA\n\ - bl dp01_build_cmdbuf_x21_a_bb\n\ -_08035586:\n\ - bl OpponentBufferExecCompleted\n\ -_0803558A:\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided\n"); -} -#endif - -void sub_8035590(void) -{ - // What is this? - dp01_build_cmdbuf_x23_aa_0(1, ewram[0x160D4 + gActiveBank / 2 * 2]); - OpponentBufferExecCompleted(); -} - -void sub_80355C0(void) -{ - s32 r4; - - if (ewram[0x160C8 + GetBankIdentity(gActiveBank) / 2] == 6) - { - u8 r6; - u8 r5; - - r4 = sub_8036CD4(); - if (r4 == 6) - { - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) - { - r5 = GetBankByPlayerAI(1); - r6 = r5; - } - else - { - r6 = GetBankByPlayerAI(1); - r5 = GetBankByPlayerAI(3); - } - for (r4 = 0; r4 < 6; r4++) - { - if (GetMonData(&gEnemyParty[r4], MON_DATA_HP) != 0 - && r4 != gBattlePartyID[r6] - && r4 != gBattlePartyID[r5]) - break; - } - } - } - else - { - r4 = ewram[0x160C8 + GetBankIdentity(gActiveBank) / 2]; - ewram[0x160C8 + GetBankIdentity(gActiveBank) / 2] = 6; - } - ewram[0x16068 + gActiveBank] = r4; - dp01_build_cmdbuf_x22_a_three_bytes(1, r4, 0); - OpponentBufferExecCompleted(); -} - -void sub_80356C0(void) -{ - OpponentBufferExecCompleted(); -} - -void OpponentHandleHealthBarUpdate(void) -{ - s16 r7; - - load_gfxc_health_bar(0); - r7 = (gBattleBufferA[gActiveBank][3] << 8) | gBattleBufferA[gActiveBank][2]; - if (r7 != 0x7FFF) - { - u32 maxHP = GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP); - u32 hp = GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_HP); - - sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, hp, r7); - } - else - { - u32 maxHP = GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP); - - sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, 0, r7); - } - gBattleBankFunc[gActiveBank] = sub_80330C8; -} - -void OpponentHandleExpBarUpdate(void) -{ - OpponentBufferExecCompleted(); -} - -void OpponentHandleStatusIconUpdate(void) -{ - if (mplay_80342A4(gActiveBank) == 0) - { - sub_8045A5C(gHealthboxIDs[gActiveBank], &gEnemyParty[gBattlePartyID[gActiveBank]], 9); - ewram17810[gActiveBank].unk0_4 = 0; - gBattleBankFunc[gActiveBank] = sub_8033494; - } -} - -void OpponentHandleStatusAnimation(void) -{ - if (mplay_80342A4(gActiveBank) == 0) - { - move_anim_start_t2_for_situation( - gBattleBufferA[gActiveBank][1], - gBattleBufferA[gActiveBank][2] - | (gBattleBufferA[gActiveBank][3] << 8) - | (gBattleBufferA[gActiveBank][4] << 16) - | (gBattleBufferA[gActiveBank][5] << 24)); - gBattleBankFunc[gActiveBank] = sub_8033494; - } -} - -void OpponentHandleStatusXor(void) -{ - OpponentBufferExecCompleted(); -} - -void sub_80358B0(void) -{ - OpponentBufferExecCompleted(); -} - -void OpponentHandleDMATransfer(void) -{ - OpponentBufferExecCompleted(); -} - -void sub_80358C8(void) -{ - OpponentBufferExecCompleted(); -} - -void sub_80358D4(void) -{ - OpponentBufferExecCompleted(); -} - -void sub_80358E0(void) -{ - OpponentBufferExecCompleted(); -} - -void sub_80358EC(void) -{ - OpponentBufferExecCompleted(); -} - -void sub_80358F8(void) -{ - OpponentBufferExecCompleted(); -} - -void sub_8035904(void) -{ - OpponentBufferExecCompleted(); -} - -void sub_8035910(void) -{ - gUnknown_020238C8.unk0_0 = 0; - OpponentBufferExecCompleted(); -} - -void sub_803592C(void) -{ - gUnknown_020238C8.unk0_0 = gBattleBufferA[gActiveBank][1]; - OpponentBufferExecCompleted(); -} - -void sub_8035964(void) -{ - gUnknown_020238C8.unk0_7 = 0; - OpponentBufferExecCompleted(); -} - -void sub_803597C(void) -{ - gUnknown_020238C8.unk0_7 ^= 1; - OpponentBufferExecCompleted(); -} - -void OpponentHandleHitAnimation(void) -{ - if (gSprites[gObjectBankIDs[gActiveBank]].invisible == TRUE) - { - OpponentBufferExecCompleted(); - } - else - { - gDoingBattleAnim = TRUE; - gSprites[gObjectBankIDs[gActiveBank]].data1 = 0; - sub_8047858(gActiveBank); - gBattleBankFunc[gActiveBank] = bx_blink_t7; - } -} - -void sub_8035A14(void) -{ - OpponentBufferExecCompleted(); -} - -void OpponentHandleEffectivenessSound(void) -{ - s8 pan; - - if (GetBankSide(gActiveBank) == 0) - pan = -64; - else - pan = 63; - PlaySE12WithPanning(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8), pan); - OpponentBufferExecCompleted(); -} - -void sub_8035A64(void) -{ - PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8)); - OpponentBufferExecCompleted(); -} - -void OpponentHandleFaintingCry(void) -{ - PlayCry3( - GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES), - 25, 5); - OpponentBufferExecCompleted(); -} - -void dp01t_2E_7_battle_intro(void) -{ - sub_80E43C0(gBattleBufferA[gActiveBank][1]); - gUnknown_02024DE8 |= 1; - OpponentBufferExecCompleted(); -} - -void sub_8035B04(void) -{ - u8 taskId; - - oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]); - gSprites[gObjectBankIDs[gActiveBank]].data0 = 35; - gSprites[gObjectBankIDs[gActiveBank]].data2 = 280; - gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; - gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34; - oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], sub_8035C10); - taskId = CreateTask(sub_8035C44, 5); - gTasks[taskId].data[0] = gActiveBank; - if (ewram17810[gActiveBank].unk0_0) - gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0; - ewram17840.unk9_0 = 1; - gBattleBankFunc[gActiveBank] = nullsub_45; -} - -void sub_8035C10(struct Sprite *sprite) -{ - sub_8031B74(sprite->oam.affineParam); - sprite->oam.tileNum = sprite->data5; - FreeSpriteOamMatrix(sprite); - DestroySprite(sprite); -} - -void sub_8035C44(u8 taskId) -{ - u8 r9; - - r9 = gActiveBank; - gActiveBank = gTasks[taskId].data[0]; - if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI)) - { - gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; - sub_803495C(gActiveBank, 0); - } - else - { - gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; - sub_803495C(gActiveBank, 0); - gActiveBank ^= 2; - gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; - sub_803495C(gActiveBank, 0); - gActiveBank ^= 2; - } - gBattleBankFunc[gActiveBank] = sub_8032E2C; - gActiveBank = r9; - DestroyTask(taskId); -} - -void dp01t_30_7_0803D67C(void) -{ - if (gBattleBufferA[gActiveBank][1] != 0 && GetBankSide(gActiveBank) == 0) - { - OpponentBufferExecCompleted(); - return; - } - - ewram17810[gActiveBank].unk0_0 = 1; - if (gBattleBufferA[gActiveBank][2] != 0) - { - if (ewram17810[gActiveBank].unk1_1 < 2) - { - ewram17810[gActiveBank].unk1_1++; - return; - } - else - { - ewram17810[gActiveBank].unk1_1 = 0; - } - } - gUnknown_02024E68[gActiveBank] = sub_8044804( - gActiveBank, - (struct BattleInterfaceStruct2 *)&gBattleBufferA[gActiveBank][4], - gBattleBufferA[gActiveBank][1], - gBattleBufferA[gActiveBank][2]); - ewram17810[gActiveBank].unk5 = 0; - if (gBattleBufferA[gActiveBank][2] != 0) - ewram17810[gActiveBank].unk5 = 0x5D; - gBattleBankFunc[gActiveBank] = sub_8035E2C; -} - -void sub_8035E2C(void) -{ - if (ewram17810[gActiveBank].unk5++ >= 93) - { - ewram17810[gActiveBank].unk5 = 0; - OpponentBufferExecCompleted(); - } -} - -void sub_8035E6C(void) -{ - if (ewram17810[gActiveBank].unk0_0) - gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0; - OpponentBufferExecCompleted(); -} - -void sub_8035EB8(void) -{ - OpponentBufferExecCompleted(); -} - -void OpponentHandleSpriteInvisibility(void) -{ - if (sub_8078874(gActiveBank) != 0) - { - gSprites[gObjectBankIDs[gActiveBank]].invisible = gBattleBufferA[gActiveBank][1]; - sub_8031F88(gActiveBank); - } - OpponentBufferExecCompleted(); -} - -void OpponentHandleBattleAnimation(void) -{ - if (mplay_80342A4(gActiveBank) == 0) - { - u8 r3 = gBattleBufferA[gActiveBank][1]; - u16 r4 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); - - if (move_anim_start_t3(gActiveBank, gActiveBank, gActiveBank, r3, r4) != 0) - OpponentBufferExecCompleted(); - else - gBattleBankFunc[gActiveBank] = sub_80334C0; - } -} - -void OpponentHandleLinkStandbyMsg(void) -{ - OpponentBufferExecCompleted(); -} - -void OpponentHandleResetActionMoveSelection(void) -{ - OpponentBufferExecCompleted(); -} - -void sub_8035FA4(void) -{ - if ((gBattleTypeFlags & BATTLE_TYPE_LINK) && !(gBattleTypeFlags & BATTLE_TYPE_WILD)) - { - gMain.inBattle = FALSE; - gMain.callback1 = gPreBattleCallback1; - SetMainCallback2(gMain.savedCallback); - } - OpponentBufferExecCompleted(); -} - -void nullsub_46(void) -{ -} diff --git a/src/battle_811DA74.c b/src/battle_811DA74.c deleted file mode 100644 index 14f547b82..000000000 --- a/src/battle_811DA74.c +++ /dev/null @@ -1,1606 +0,0 @@ -#include "global.h" -#include "battle.h" -#include "battle_interface.h" -#include "data2.h" -#include "battle_811DA74.h" -#include "battle_anim_813F0F4.h" -#include "link.h" -#include "m4a.h" -#include "main.h" -#include "palette.h" -#include "pokeball.h" -#include "pokemon.h" -#include "rom3.h" -#include "rom_8077ABC.h" -#include "sound.h" -#include "songs.h" -#include "sprite.h" -#include "string_util.h" -#include "task.h" -#include "text.h" -#include "util.h" - -struct UnknownStruct1 -{ - u8 unk0; - u8 unk1; - u8 unk2[0x1FE]; -}; - -//Possibly PokemonSubstruct1 -struct UnknownStruct3 -{ - u16 moves[4]; - u8 pp[4]; - u8 ppBonuses; -}; - -extern u16 gBattleTypeFlags; -extern u8 gDisplayedStringBattle[]; -extern u8 gBattleBufferA[][0x200]; -extern u8 gActiveBank; -extern u32 gBattleExecBuffer; -extern u16 gBattlePartyID[]; -extern u8 gObjectBankIDs[]; -extern u8 gBattleOutcome; -extern u16 gUnknown_02024DE8; -extern u8 gUnknown_02024E68[]; -extern u8 gDoingBattleAnim; -extern u32 gPID_perBank[]; -extern struct SpriteTemplate gUnknown_02024E8C; -extern u32 *gDisableStructMoveAnim; -extern u32 gMoveDmgMoveAnim; -extern u16 gMovePowerMoveAnim; -extern u8 gHappinessMoveAnim; -extern u16 gWeatherMoveAnim; -extern u8 gUnknown_0202F7C4; -extern struct Window gUnknown_03004210; -extern u16 gUnknown_030042A0; -extern u16 gUnknown_030042A4; -extern MainCallback gPreBattleCallback1; -extern void (*gBattleBankFunc[])(void); -extern u8 gHealthboxIDs[]; -extern u8 gUnknown_0300434C[]; -extern u8 gBattleMonForms[]; -extern u8 gAnimScriptActive; -extern void (*gAnimScriptCallback)(void); -extern void (*const gLinkPartnerBufferCommands[])(void); - -extern u8 move_anim_start_t3(); -extern u8 sub_8078874(); -extern void sub_8044CA0(u8); -extern void sub_8030E38(struct Sprite *); -extern void sub_80E43C0(); -extern void sub_8047858(); -extern void move_anim_start_t2_for_situation(); -extern void load_gfxc_health_bar(); -extern void sub_8043D84(); -extern void BufferStringBattle(); -extern void sub_8031F24(void); -extern void sub_80326EC(); -extern void ExecuteMoveAnim(); -extern void sub_80324BC(); -extern u8 sub_8031720(); -extern u8 mplay_80342A4(); -extern void oamt_add_pos2_onto_pos1(); -extern void oamt_set_x3A_32(); -extern void sub_8078B34(struct Sprite *); -extern void sub_80105EC(struct Sprite *); -extern s32 sub_803FC34(u16); -extern void LoadPlayerTrainerBankSprite(); -extern void sub_80313A0(struct Sprite *); -extern u8 sub_8046400(); -extern void sub_80312F0(struct Sprite *); -extern u8 CreateInvisibleSpriteWithCallback(); -extern void BattleLoadPlayerMonSprite(); -extern u8 sub_8077ABC(); -extern u8 sub_8077F68(); -extern u8 sub_8079E90(); -extern void nullsub_10(); -extern void sub_8045A5C(); -extern void sub_804777C(); -extern void sub_8043DFC(); -//extern s16 sub_8045C78(); -extern void sub_80440EC(); -extern void sub_80324F8(); -extern void nullsub_9(u16); -extern void sub_8043DB0(); -extern void move_anim_start_t4(); -extern void c3_0802FDF4(u8); -extern void sub_8031F88(); -extern void sub_8141828(); -extern void c2_8011A1C(void); - -void LinkPartnerBufferRunCommand(void); -void sub_811E0A0(void); -void LinkPartnerBufferExecCompleted(void); -u32 dp01_getattr_by_ch1_for_player_pokemon(u8 a, u8 *b); -void sub_811EC68(u8); -void sub_811F864(u8, u8); -void sub_811FA5C(void); -void sub_811FF30(void); -void sub_812071C(u8); -void sub_81208E0(void); - - -void nullsub_74(void) -{ -} - -void SetBankFuncToLinkPartnerBufferRunCommand(void) -{ - gBattleBankFunc[gActiveBank] = LinkPartnerBufferRunCommand; -} - -void LinkPartnerBufferRunCommand(void) -{ - if (gBattleExecBuffer & gBitTable[gActiveBank]) - { - if (gBattleBufferA[gActiveBank][0] <= 0x38) - gLinkPartnerBufferCommands[gBattleBufferA[gActiveBank][0]](); - else - LinkPartnerBufferExecCompleted(); - } -} - -void sub_811DAE4(void) -{ - if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy) - LinkPartnerBufferExecCompleted(); -} - -void sub_811DB1C(void) -{ - if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy) - { - nullsub_10(0); - FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); - DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); - LinkPartnerBufferExecCompleted(); - } -} - -void sub_811DB84(void) -{ - if ((--ewram17810[gActiveBank].unk9) == 0xFF) - { - ewram17810[gActiveBank].unk9 = 0; - LinkPartnerBufferExecCompleted(); - } -} - -void sub_811DBC0(void) -{ - bool8 r6 = FALSE; - - if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & 0x40))) - { - if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy) - r6 = TRUE; - } - else - { - if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy - && gSprites[gHealthboxIDs[gActiveBank ^ 2]].callback == SpriteCallbackDummy) - r6 = TRUE; - } - if (IsCryPlayingOrClearCrySongs()) - r6 = FALSE; - if (r6) - { - ewram17810[gActiveBank].unk9 = 3; - gBattleBankFunc[gActiveBank] = sub_811DB84; - } -} - -void sub_811DCA0(void) -{ - u8 r2; - - if (!ewram17810[gActiveBank].unk0_3) - { - // I couldn't get it to work as a bitfield here - r2 = *((u8 *)&ewram17810[gActiveBank ^ 2]) & 8; - if (!r2 && (++ewram17810[gActiveBank].unk9) != 1) - { - ewram17810[gActiveBank].unk9 = r2; - if (IsDoubleBattle() && !(gBattleTypeFlags & 0x40)) - { - DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank ^ 2]]); - sub_8045A5C(gHealthboxIDs[gActiveBank ^ 2], &gPlayerParty[gBattlePartyID[gActiveBank ^ 2]], 0); - sub_804777C(gActiveBank ^ 2); - sub_8043DFC(gHealthboxIDs[gActiveBank ^ 2]); - } - DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]); - sub_8045A5C(gHealthboxIDs[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], 0); - sub_804777C(gActiveBank); - sub_8043DFC(gHealthboxIDs[gActiveBank]); - (s8)ewram17810[4].unk9 &= ~1; - gBattleBankFunc[gActiveBank] = sub_811DBC0; - } - } -} - -void sub_811DDE8(void) -{ - if (gSprites[gObjectBankIDs[gActiveBank]].animEnded - && gSprites[gObjectBankIDs[gActiveBank]].pos2.x == 0) - LinkPartnerBufferExecCompleted(); -} - -void bx_t3_healthbar_update(void) -{ - s16 r4; - - r4 = sub_8045C78(gActiveBank, gHealthboxIDs[gActiveBank], 0, 0); - sub_8043DFC(gHealthboxIDs[gActiveBank]); - if (r4 != -1) - { - sub_80440EC(gHealthboxIDs[gActiveBank], r4, 0); - } - else - { - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); - LinkPartnerBufferExecCompleted(); - } -} - -void sub_811DE98(void) -{ - if (gSprites[gObjectBankIDs[gActiveBank]].pos1.y + gSprites[gObjectBankIDs[gActiveBank]].pos2.y > 160) - { - nullsub_9(GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES)); - FreeOamMatrix(gSprites[gObjectBankIDs[gActiveBank]].oam.matrixNum); - DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); - sub_8043DB0(gHealthboxIDs[gActiveBank]); - LinkPartnerBufferExecCompleted(); - } -} - -void sub_811DF34(void) -{ - if (!ewram17810[gActiveBank].unk0_6) - { - FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); - DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); - sub_8043DB0(gHealthboxIDs[gActiveBank]); - LinkPartnerBufferExecCompleted(); - } -} - -void sub_811DFA0(void) -{ - if (gUnknown_03004210.state == 0) - LinkPartnerBufferExecCompleted(); -} - -void bx_blink_t3(void) -{ - u8 spriteId = gObjectBankIDs[gActiveBank]; - if (gSprites[spriteId].data1 == 32) - { - gSprites[spriteId].data1 = 0; - gSprites[spriteId].invisible = FALSE; - gDoingBattleAnim = 0; - LinkPartnerBufferExecCompleted(); - } - else - { - if ((gSprites[spriteId].data1 % 4) == 0) - { - gSprites[spriteId].invisible ^= 1; - } - gSprites[spriteId].data1++; - } -} - -void sub_811E034(void) -{ - if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy) - { - if (ewram17800[gActiveBank].substituteSprite) - move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); - gBattleBankFunc[gActiveBank] = sub_811E0A0; - } -} - -void sub_811E0A0(void) -{ - if (!ewram17810[gActiveBank].unk0_6) - LinkPartnerBufferExecCompleted(); -} - -void sub_811E0CC(void) -{ - if (ewram17810[gActiveBank].unk1_0) - { - ewram17810[gActiveBank].unk0_7 = 0; - ewram17810[gActiveBank].unk1_0 = 0; - FreeSpriteTilesByTag(0x27F9); - FreeSpritePaletteByTag(0x27F9); - CreateTask(c3_0802FDF4, 10); - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); - StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 0); - sub_8045A5C(gHealthboxIDs[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], 0); - sub_804777C(gActiveBank); - sub_8043DFC(gHealthboxIDs[gActiveBank]); - sub_8031F88(gActiveBank); - gBattleBankFunc[gActiveBank] = sub_811E034; - } -} - -void sub_811E1BC(void) -{ - if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7) - sub_8141828(gActiveBank, &gPlayerParty[gBattlePartyID[gActiveBank]]); - if (gSprites[gUnknown_0300434C[gActiveBank]].callback == SpriteCallbackDummy - && !ewram17810[gActiveBank].unk0_3) - { - DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]); - gBattleBankFunc[gActiveBank] = sub_811E0CC; - } -} - -void sub_811E258(void) -{ - if (gReceivedRemoteLinkPlayers == 0) - { - m4aSongNumStop(0x5A); - gMain.inBattle = FALSE; - gMain.callback1 = gPreBattleCallback1; - SetMainCallback2(c2_8011A1C); - } -} - -void sub_811E29C(void) -{ - if (!gPaletteFade.active) - { - if (gBattleTypeFlags & 2) - { - sub_800832C(); - gBattleBankFunc[gActiveBank] = sub_811E258; - } - else - { - m4aSongNumStop(0x5A); - gMain.inBattle = FALSE; - gMain.callback1 = gPreBattleCallback1; - SetMainCallback2(gMain.savedCallback); - } - } -} - -void LinkPartnerBufferExecCompleted(void) -{ - u8 multiplayerId; - - gBattleBankFunc[gActiveBank] = LinkPartnerBufferRunCommand; - if (gBattleTypeFlags & 2) - { - multiplayerId = GetMultiplayerId(); - dp01_prepare_buffer_wireless_probably(2, 4, &multiplayerId); - gBattleBufferA[gActiveBank][0] = 0x38; - } - else - { - gBattleExecBuffer &= ~gBitTable[gActiveBank]; - } -} - -void sub_811E38C(void) -{ - if (!ewram17810[gActiveBank].unk0_4) - LinkPartnerBufferExecCompleted(); -} - -void sub_811E3B8(void) -{ - if (!ewram17810[gActiveBank].unk0_5) - LinkPartnerBufferExecCompleted(); -} - -void LinkPartnerHandleGetAttributes(void) -{ - u8 unk[256]; - int r6 = 0; - s32 i; - - if (gBattleBufferA[gActiveBank][2] == 0) - { - r6 = dp01_getattr_by_ch1_for_player_pokemon(gBattlePartyID[gActiveBank], unk); - } - else - { - u8 r4 = gBattleBufferA[gActiveBank][2]; - - for (i = 0; i < 6; i++) - { - if (r4 & 1) - r6 += dp01_getattr_by_ch1_for_player_pokemon(i, unk + r6); - r4 >>= 1; - } - } - dp01_build_cmdbuf_x1D_1D_numargs_varargs(1, r6, unk); - LinkPartnerBufferExecCompleted(); -} - -// Duplicate of dp01_getattr_by_ch1_for_player_pokemon_ -u32 dp01_getattr_by_ch1_for_player_pokemon(u8 a, u8 *buffer) -{ - struct BattlePokemon battlePokemon; - struct UnknownStruct3 moveData; - u8 nickname[20]; - u8 *src; - s16 data16; - u32 data32; - s32 size = 0; - - switch (gBattleBufferA[gActiveBank][1]) - { - case 0: - battlePokemon.species = GetMonData(&gPlayerParty[a], MON_DATA_SPECIES); - battlePokemon.item = GetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM); - for (size = 0; size < 4; size++) - { - battlePokemon.moves[size] = GetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + size); - battlePokemon.pp[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size); - } - battlePokemon.ppBonuses = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES); - battlePokemon.friendship = GetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP); - battlePokemon.experience = GetMonData(&gPlayerParty[a], MON_DATA_EXP); - battlePokemon.hpIV = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV); - battlePokemon.attackIV = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV); - battlePokemon.defenseIV = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV); - battlePokemon.speedIV = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV); - battlePokemon.spAttackIV = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV); - battlePokemon.spDefenseIV = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV); - battlePokemon.personality = GetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY); - battlePokemon.status1 = GetMonData(&gPlayerParty[a], MON_DATA_STATUS); - battlePokemon.level = GetMonData(&gPlayerParty[a], MON_DATA_LEVEL); - battlePokemon.hp = GetMonData(&gPlayerParty[a], MON_DATA_HP); - battlePokemon.maxHP = GetMonData(&gPlayerParty[a], MON_DATA_MAX_HP); - battlePokemon.attack = GetMonData(&gPlayerParty[a], MON_DATA_ATK); - battlePokemon.defense = GetMonData(&gPlayerParty[a], MON_DATA_DEF); - battlePokemon.speed = GetMonData(&gPlayerParty[a], MON_DATA_SPD); - battlePokemon.spAttack = GetMonData(&gPlayerParty[a], MON_DATA_SPATK); - battlePokemon.spDefense = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF); - battlePokemon.isEgg = GetMonData(&gPlayerParty[a], MON_DATA_IS_EGG); - battlePokemon.altAbility = GetMonData(&gPlayerParty[a], MON_DATA_ALT_ABILITY); - battlePokemon.otId = GetMonData(&gPlayerParty[a], MON_DATA_OT_ID); - GetMonData(&gPlayerParty[a], MON_DATA_NICKNAME, nickname); - StringCopy10(battlePokemon.nickname, nickname); - GetMonData(&gPlayerParty[a], MON_DATA_OT_NAME, battlePokemon.otName); - src = (u8 *)&battlePokemon; - for (size = 0; size < sizeof(battlePokemon); size++) - buffer[size] = src[size]; - break; - case 1: - data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPECIES); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 2: - data16 = GetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 3: - for (size = 0; size < 4; size++) - { - moveData.moves[size] = GetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + size); - moveData.pp[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size); - } - moveData.ppBonuses = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES); - src = (u8 *)&moveData; - for (size = 0; size < sizeof(moveData); size++) - buffer[size] = src[size]; - break; - case 4: - case 5: - case 6: - case 7: - data16 = GetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - 4); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 8: - for (size = 0; size < 4; size++) - buffer[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size); - buffer[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES); - size++; - break; - case 9: - case 10: - case 11: - case 12: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - 9); - size = 1; - break; - case 17: - data32 = GetMonData(&gPlayerParty[a], MON_DATA_OT_ID); - buffer[0] = (data32 & 0x000000FF); - buffer[1] = (data32 & 0x0000FF00) >> 8; - buffer[2] = (data32 & 0x00FF0000) >> 16; - size = 3; - break; - case 18: - data32 = GetMonData(&gPlayerParty[a], MON_DATA_EXP); - buffer[0] = (data32 & 0x000000FF); - buffer[1] = (data32 & 0x0000FF00) >> 8; - buffer[2] = (data32 & 0x00FF0000) >> 16; - size = 3; - break; - case 19: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_EV); - size = 1; - break; - case 20: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_EV); - size = 1; - break; - case 21: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_EV); - size = 1; - break; - case 22: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_EV); - size = 1; - break; - case 23: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_EV); - size = 1; - break; - case 24: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_EV); - size = 1; - break; - case 25: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP); - size = 1; - break; - case 26: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_POKERUS); - size = 1; - break; - case 27: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_MET_LOCATION); - size = 1; - break; - case 28: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_MET_LEVEL); - size = 1; - break; - case 29: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_MET_GAME); - size = 1; - break; - case 30: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_POKEBALL); - size = 1; - break; - case 31: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV); - buffer[1] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV); - buffer[2] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV); - buffer[3] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV); - buffer[4] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV); - buffer[5] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV); - size = 6; - break; - case 32: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV); - size = 1; - break; - case 33: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV); - size = 1; - break; - case 34: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV); - size = 1; - break; - case 35: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV); - size = 1; - break; - case 36: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV); - size = 1; - break; - case 37: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV); - size = 1; - break; - case 38: - data32 = GetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY); - buffer[0] = (data32 & 0x000000FF); - buffer[1] = (data32 & 0x0000FF00) >> 8; - buffer[2] = (data32 & 0x00FF0000) >> 16; - buffer[3] = (data32 & 0xFF000000) >> 24; - size = 4; - break; - case 39: - data16 = GetMonData(&gPlayerParty[a], MON_DATA_CHECKSUM); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 40: - data32 = GetMonData(&gPlayerParty[a], MON_DATA_STATUS); - buffer[0] = (data32 & 0x000000FF); - buffer[1] = (data32 & 0x0000FF00) >> 8; - buffer[2] = (data32 & 0x00FF0000) >> 16; - buffer[3] = (data32 & 0xFF000000) >> 24; - size = 4; - break; - case 41: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_LEVEL); - size = 1; - break; - case 42: - data16 = GetMonData(&gPlayerParty[a], MON_DATA_HP); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 43: - data16 = GetMonData(&gPlayerParty[a], MON_DATA_MAX_HP); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 44: - data16 = GetMonData(&gPlayerParty[a], MON_DATA_ATK); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 45: - data16 = GetMonData(&gPlayerParty[a], MON_DATA_DEF); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 46: - data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPD); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 47: - data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPATK); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 48: - data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 49: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_COOL); - size = 1; - break; - case 50: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_BEAUTY); - size = 1; - break; - case 51: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_CUTE); - size = 1; - break; - case 52: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SMART); - size = 1; - break; - case 53: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_TOUGH); - size = 1; - break; - case 54: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SHEEN); - size = 1; - break; - case 55: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_COOL_RIBBON); - size = 1; - break; - case 56: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_BEAUTY_RIBBON); - size = 1; - break; - case 57: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_CUTE_RIBBON); - size = 1; - break; - case 58: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SMART_RIBBON); - size = 1; - break; - case 59: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_TOUGH_RIBBON); - size = 1; - break; - } - return size; -} - -void sub_811EC04(void) -{ - LinkPartnerBufferExecCompleted(); -} - -void LinkPartnerHandleSetAttributes(void) -{ - u8 i; - u8 r4; - - if (gBattleBufferA[gActiveBank][2] == 0) - { - sub_811EC68(gBattlePartyID[gActiveBank]); - } - else - { - r4 = gBattleBufferA[gActiveBank][2]; - for (i = 0; i < 6; i++) - { - if (r4 & 1) - sub_811EC68(i); - r4 >>= 1; - } - } - LinkPartnerBufferExecCompleted(); -} - -// Duplicate of dp01_setattr_by_ch1_for_player_pokemon -void sub_811EC68(u8 a) -{ - struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBank][3]; - struct UnknownStruct3 *moveData = (struct UnknownStruct3 *)&gBattleBufferA[gActiveBank][3]; - s32 i; - - switch (gBattleBufferA[gActiveBank][1]) - { - case 0: - { - u8 iv; - - SetMonData(&gPlayerParty[a], MON_DATA_SPECIES, (u8 *)&battlePokemon->species); - SetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM, (u8 *)&battlePokemon->item); - for (i = 0; i < 4; i++) - { - SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + i, (u8 *)&battlePokemon->moves[i]); - SetMonData(&gPlayerParty[a], MON_DATA_PP1 + i, (u8 *)&battlePokemon->pp[i]); - } - SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, (u8 *)&battlePokemon->ppBonuses); - SetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP, (u8 *)&battlePokemon->friendship); - SetMonData(&gPlayerParty[a], MON_DATA_EXP, (u8 *)&battlePokemon->experience); - iv = battlePokemon->hpIV; - SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, (u8 *)&iv); - iv = battlePokemon->attackIV; - SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, (u8 *)&iv); - iv = battlePokemon->defenseIV; - SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, (u8 *)&iv); - iv = battlePokemon->speedIV; - SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, (u8 *)&iv); - iv = battlePokemon->spAttackIV; - SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, (u8 *)&iv); - iv = battlePokemon->spDefenseIV; - SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, (u8 *)&iv); - SetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY, (u8 *)&battlePokemon->personality); - SetMonData(&gPlayerParty[a], MON_DATA_STATUS, (u8 *)&battlePokemon->status1); - SetMonData(&gPlayerParty[a], MON_DATA_LEVEL, (u8 *)&battlePokemon->level); - SetMonData(&gPlayerParty[a], MON_DATA_HP, (u8 *)&battlePokemon->hp); - SetMonData(&gPlayerParty[a], MON_DATA_MAX_HP, (u8 *)&battlePokemon->maxHP); - SetMonData(&gPlayerParty[a], MON_DATA_ATK, (u8 *)&battlePokemon->attack); - SetMonData(&gPlayerParty[a], MON_DATA_DEF, (u8 *)&battlePokemon->defense); - SetMonData(&gPlayerParty[a], MON_DATA_SPD, (u8 *)&battlePokemon->speed); - SetMonData(&gPlayerParty[a], MON_DATA_SPATK, (u8 *)&battlePokemon->spAttack); - SetMonData(&gPlayerParty[a], MON_DATA_SPDEF, (u8 *)&battlePokemon->spDefense); - } - break; - case 1: - SetMonData(&gPlayerParty[a], MON_DATA_SPECIES, &gBattleBufferA[gActiveBank][3]); - break; - case 2: - SetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBank][3]); - break; - case 3: - for (i = 0; i < 4; i++) - { - SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + i, (u8 *)&moveData->moves[i]); - SetMonData(&gPlayerParty[a], MON_DATA_PP1 + i, (u8 *)&moveData->pp[i]); - } - SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, &moveData->ppBonuses); - break; - case 4: - case 5: - case 6: - case 7: - SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - 4, &gBattleBufferA[gActiveBank][3]); - break; - case 8: - SetMonData(&gPlayerParty[a], MON_DATA_PP1, &gBattleBufferA[gActiveBank][3]); - SetMonData(&gPlayerParty[a], MON_DATA_PP2, &gBattleBufferA[gActiveBank][4]); - SetMonData(&gPlayerParty[a], MON_DATA_PP3, &gBattleBufferA[gActiveBank][5]); - SetMonData(&gPlayerParty[a], MON_DATA_PP4, &gBattleBufferA[gActiveBank][6]); - SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBank][7]); - break; - case 9: - case 10: - case 11: - case 12: - SetMonData(&gPlayerParty[a], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - 9, &gBattleBufferA[gActiveBank][3]); - break; - case 17: - SetMonData(&gPlayerParty[a], MON_DATA_OT_ID, &gBattleBufferA[gActiveBank][3]); - break; - case 18: - SetMonData(&gPlayerParty[a], MON_DATA_EXP, &gBattleBufferA[gActiveBank][3]); - break; - case 19: - SetMonData(&gPlayerParty[a], MON_DATA_HP_EV, &gBattleBufferA[gActiveBank][3]); - break; - case 20: - SetMonData(&gPlayerParty[a], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBank][3]); - break; - case 21: - SetMonData(&gPlayerParty[a], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBank][3]); - break; - case 22: - SetMonData(&gPlayerParty[a], MON_DATA_SPD_EV, &gBattleBufferA[gActiveBank][3]); - break; - case 23: - SetMonData(&gPlayerParty[a], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBank][3]); - break; - case 24: - SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBank][3]); - break; - case 25: - SetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBank][3]); - break; - case 26: - SetMonData(&gPlayerParty[a], MON_DATA_POKERUS, &gBattleBufferA[gActiveBank][3]); - break; - case 27: - SetMonData(&gPlayerParty[a], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBank][3]); - break; - case 28: - SetMonData(&gPlayerParty[a], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBank][3]); - break; - case 29: - SetMonData(&gPlayerParty[a], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBank][3]); - break; - case 30: - SetMonData(&gPlayerParty[a], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBank][3]); - break; - case 31: - SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]); - SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][4]); - SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][5]); - SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][6]); - SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][7]); - SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][8]); - break; - case 32: - SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]); - break; - case 33: - SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][3]); - break; - case 34: - SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][3]); - break; - case 35: - SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][3]); - break; - case 36: - SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][3]); - break; - case 37: - SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][3]); - break; - case 38: - SetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBank][3]); - break; - case 39: - SetMonData(&gPlayerParty[a], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBank][3]); - break; - case 40: - SetMonData(&gPlayerParty[a], MON_DATA_STATUS, &gBattleBufferA[gActiveBank][3]); - break; - case 41: - SetMonData(&gPlayerParty[a], MON_DATA_LEVEL, &gBattleBufferA[gActiveBank][3]); - break; - case 42: - SetMonData(&gPlayerParty[a], MON_DATA_HP, &gBattleBufferA[gActiveBank][3]); - break; - case 43: - SetMonData(&gPlayerParty[a], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBank][3]); - break; - case 44: - SetMonData(&gPlayerParty[a], MON_DATA_ATK, &gBattleBufferA[gActiveBank][3]); - break; - case 45: - SetMonData(&gPlayerParty[a], MON_DATA_DEF, &gBattleBufferA[gActiveBank][3]); - break; - case 46: - SetMonData(&gPlayerParty[a], MON_DATA_SPD, &gBattleBufferA[gActiveBank][3]); - break; - case 47: - SetMonData(&gPlayerParty[a], MON_DATA_SPATK, &gBattleBufferA[gActiveBank][3]); - break; - case 48: - SetMonData(&gPlayerParty[a], MON_DATA_SPDEF, &gBattleBufferA[gActiveBank][3]); - break; - case 49: - SetMonData(&gPlayerParty[a], MON_DATA_COOL, &gBattleBufferA[gActiveBank][3]); - break; - case 50: - SetMonData(&gPlayerParty[a], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBank][3]); - break; - case 51: - SetMonData(&gPlayerParty[a], MON_DATA_CUTE, &gBattleBufferA[gActiveBank][3]); - break; - case 52: - SetMonData(&gPlayerParty[a], MON_DATA_SMART, &gBattleBufferA[gActiveBank][3]); - break; - case 53: - SetMonData(&gPlayerParty[a], MON_DATA_TOUGH, &gBattleBufferA[gActiveBank][3]); - break; - case 54: - SetMonData(&gPlayerParty[a], MON_DATA_SHEEN, &gBattleBufferA[gActiveBank][3]); - break; - case 55: - SetMonData(&gPlayerParty[a], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBank][3]); - break; - case 56: - SetMonData(&gPlayerParty[a], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBank][3]); - break; - case 57: - SetMonData(&gPlayerParty[a], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBank][3]); - break; - case 58: - SetMonData(&gPlayerParty[a], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBank][3]); - break; - case 59: - SetMonData(&gPlayerParty[a], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBank][3]); - break; - } - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); -} - -void sub_811F664(void) -{ - u8 *dst; - u8 i; - - dst = (u8 *)&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1]; - for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++) - dst[i] = gBattleBufferA[gActiveBank][3 + i]; - LinkPartnerBufferExecCompleted(); -} - -void sub_811F6D8(void) -{ - BattleLoadPlayerMonSprite(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); - GetMonSpriteTemplate_803C56C( - GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES), - GetBankIdentity(gActiveBank)); - gObjectBankIDs[gActiveBank] = CreateSprite( - &gUnknown_02024E8C, - sub_8077ABC(gActiveBank, 2), - sub_8077F68(gActiveBank), - sub_8079E90(gActiveBank)); - gSprites[gObjectBankIDs[gActiveBank]].pos2.x = -240; - gSprites[gObjectBankIDs[gActiveBank]].data0 = gActiveBank; - gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank; - StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], gBattleMonForms[gActiveBank]); - gBattleBankFunc[gActiveBank] = sub_811DDE8; -} - -void sub_811F7F4(void) -{ - sub_8032AA8(gActiveBank, gBattleBufferA[gActiveBank][2]); - gBattlePartyID[gActiveBank] = gBattleBufferA[gActiveBank][1]; - BattleLoadPlayerMonSprite(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); - sub_811F864(gActiveBank, gBattleBufferA[gActiveBank][2]); - gBattleBankFunc[gActiveBank] = sub_811E1BC; -} - -void sub_811F864(u8 a, u8 b) -{ - u16 species; - - sub_8032AA8(a, b); - gBattlePartyID[a] = gBattleBufferA[a][1]; - species = GetMonData(&gPlayerParty[gBattlePartyID[a]], MON_DATA_SPECIES); - gUnknown_0300434C[a] = CreateInvisibleSpriteWithCallback(sub_80312F0); - GetMonSpriteTemplate_803C56C(species, GetBankIdentity(a)); - gObjectBankIDs[a] = CreateSprite( - &gUnknown_02024E8C, - sub_8077ABC(a, 2), - sub_8077F68(a), - sub_8079E90(a)); - gSprites[gUnknown_0300434C[a]].data1 = gObjectBankIDs[a]; - gSprites[gObjectBankIDs[a]].data0 = a; - gSprites[gObjectBankIDs[a]].data2 = species; - gSprites[gObjectBankIDs[a]].oam.paletteNum = a; - StartSpriteAnim(&gSprites[gObjectBankIDs[a]], gBattleMonForms[a]); - gSprites[gObjectBankIDs[a]].invisible = TRUE; - gSprites[gObjectBankIDs[a]].callback = SpriteCallbackDummy; - gSprites[gUnknown_0300434C[a]].data0 = sub_8046400(0, 0xFF); -} - -void sub_811F9D0(void) -{ - if (gBattleBufferA[gActiveBank][1] == 0) - { - ewram17810[gActiveBank].unk4 = 0; - gBattleBankFunc[gActiveBank] = sub_811FA5C; - } - else - { - FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); - DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); - sub_8043DB0(gHealthboxIDs[gActiveBank]); - LinkPartnerBufferExecCompleted(); - } -} - -void sub_811FA5C(void) -{ - switch (ewram17810[gActiveBank].unk4) - { - case 0: - if (ewram17800[gActiveBank].substituteSprite) - move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); - ewram17810[gActiveBank].unk4 = 1; - break; - case 1: - if (!ewram17810[gActiveBank].unk0_6) - { - ewram17810[gActiveBank].unk4 = 0; - move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 1); - gBattleBankFunc[gActiveBank] = sub_811DF34; - } - break; - } -} - -void sub_811FAE4(void) -{ - s16 xOffset; - u32 gender; - - if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - { - if (GetBankIdentity(gActiveBank) & 2) - xOffset = 16; - else - xOffset = -16; - gender = gLinkPlayers[sub_803FC34(gActiveBank)].gender; - } - else - { - xOffset = 0; - gender = gLinkPlayers[GetMultiplayerId() ^ 1].gender; - } - LoadPlayerTrainerBankSprite(gender, gActiveBank); - GetMonSpriteTemplate_803C5A0(gender, GetBankIdentity(gActiveBank)); - gObjectBankIDs[gActiveBank] = CreateSprite( - &gUnknown_02024E8C, - 80 + xOffset, 80 + 4 * (8 - gTrainerBackPicCoords[gender].coords), - sub_8079E90(gActiveBank)); - gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank; - gSprites[gObjectBankIDs[gActiveBank]].pos2.x = 240; - gSprites[gObjectBankIDs[gActiveBank]].data0 = -2; - gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0; - gBattleBankFunc[gActiveBank] = sub_811DAE4; -} - -void sub_811FC30(void) -{ - LinkPartnerBufferExecCompleted(); -} - -void sub_811FC3C(void) -{ - oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]); - gSprites[gObjectBankIDs[gActiveBank]].data0 = 35; - gSprites[gObjectBankIDs[gActiveBank]].data2 = -40; - gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; - gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34; - oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], SpriteCallbackDummy); - gBattleBankFunc[gActiveBank] = sub_811DB1C; -} - -void sub_811FCE8(void) -{ - if (ewram17810[gActiveBank].unk4 == 0) - { - if (ewram17800[gActiveBank].substituteSprite) - move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); - ewram17810[gActiveBank].unk4++; - } - else if (!ewram17810[gActiveBank].unk0_6) - { - ewram17810[gActiveBank].unk4 = 0; - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); - PlaySE12WithPanning(SE_POKE_DEAD, -64); - gSprites[gObjectBankIDs[gActiveBank]].data1 = 0; - gSprites[gObjectBankIDs[gActiveBank]].data2 = 5; - gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80105EC; - gBattleBankFunc[gActiveBank] = sub_811DE98; - } -} - -void sub_811FDCC(void) -{ - LinkPartnerBufferExecCompleted(); -} - -void sub_811FDD8(void) -{ - LinkPartnerBufferExecCompleted(); -} - -void sub_811FDE4(void) -{ - LinkPartnerBufferExecCompleted(); -} - -void sub_811FDF0(void) -{ - LinkPartnerBufferExecCompleted(); -} - -void sub_811FDFC(void) -{ - if (!mplay_80342A4(gActiveBank)) - { - u32 r0 = gBattleBufferA[gActiveBank][1] - | (gBattleBufferA[gActiveBank][2] << 8); - - gUnknown_0202F7C4 = gBattleBufferA[gActiveBank][3]; - gMovePowerMoveAnim = gBattleBufferA[gActiveBank][4] - | (gBattleBufferA[gActiveBank][5] << 8); - gMoveDmgMoveAnim = gBattleBufferA[gActiveBank][6] - | (gBattleBufferA[gActiveBank][7] << 8) - | (gBattleBufferA[gActiveBank][8] << 16) - | (gBattleBufferA[gActiveBank][9] << 24); - gHappinessMoveAnim = gBattleBufferA[gActiveBank][10]; - gWeatherMoveAnim = gBattleBufferA[gActiveBank][12] - | (gBattleBufferA[gActiveBank][13] << 8); - gDisableStructMoveAnim = (u32 *)&gBattleBufferA[gActiveBank][16]; - gPID_perBank[gActiveBank] = *gDisableStructMoveAnim; - - if (sub_8031720(r0, gUnknown_0202F7C4) != 0) - LinkPartnerBufferExecCompleted(); - else - { - ewram17810[gActiveBank].unk4 = 0; - gBattleBankFunc[gActiveBank] = sub_811FF30; - } - } -} - -void sub_811FF30(void) -{ - u16 r4 = gBattleBufferA[gActiveBank][1] - | (gBattleBufferA[gActiveBank][2] << 8); - u8 r7 = gBattleBufferA[gActiveBank][11]; - - switch (ewram17810[gActiveBank].unk4) - { - case 0: - if (ewram17800[gActiveBank].substituteSprite && !ewram17800[gActiveBank].unk0_3) - { - ewram17800[gActiveBank].unk0_3 = 1; - move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); - } - ewram17810[gActiveBank].unk4 = 1; - break; - case 1: - if (!ewram17810[gActiveBank].unk0_6) - { - sub_80326EC(0); - ExecuteMoveAnim(r4); - ewram17810[gActiveBank].unk4 = 2; - } - break; - case 2: - gAnimScriptCallback(); - if (!gAnimScriptActive) - { - sub_80326EC(1); - if ((ewram17800[gActiveBank].substituteSprite) && r7 <= 1) - { - move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); - ewram17800[gActiveBank].unk0_3 = 0; - } - ewram17810[gActiveBank].unk4 = 3; - } - break; - case 3: - if (!ewram17810[gActiveBank].unk0_6) - { - sub_8031F24(); - sub_80324BC( - gActiveBank, - gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8)); - ewram17810[gActiveBank].unk4 = 0; - LinkPartnerBufferExecCompleted(); - } - break; - } -} - -void sub_8120094(void) -{ - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; - BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]); - sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); - gBattleBankFunc[gActiveBank] = sub_811DFA0; -} - -void sub_81200F8(void) -{ - LinkPartnerBufferExecCompleted(); -} - -void sub_8120104(void) -{ - LinkPartnerBufferExecCompleted(); -} - -void sub_8120110(void) -{ - LinkPartnerBufferExecCompleted(); -} - -void sub_812011C(void) -{ - LinkPartnerBufferExecCompleted(); -} - -void sub_8120128(void) -{ - LinkPartnerBufferExecCompleted(); -} - -void sub_8120134(void) -{ - LinkPartnerBufferExecCompleted(); -} - -void sub_8120140(void) -{ - LinkPartnerBufferExecCompleted(); -} - -void LinkPartnerHandleHealthBarUpdate(void) -{ - s16 r7; - - load_gfxc_health_bar(0); - r7 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); - if (r7 != 0x7FFF) - { - u32 maxHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP); - u32 hp = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_HP); - - sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, hp, r7); - } - else - { - u32 maxHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP); - - sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, 0, r7); - } - gBattleBankFunc[gActiveBank] = bx_t3_healthbar_update; -} - -void LinkPartnerHandleExpBarUpdate(void) -{ - LinkPartnerBufferExecCompleted(); -} - -void LinkPartnerHandleStatusIconUpdate(void) -{ - if (mplay_80342A4(gActiveBank) == 0) - { - sub_8045A5C(gHealthboxIDs[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], 9); - ewram17810[gActiveBank].unk0_4 = 0; - gBattleBankFunc[gActiveBank] = sub_811E38C; - } -} - -void LinkPartnerHandleStatusAnimation(void) -{ - if (mplay_80342A4(gActiveBank) == 0) - { - move_anim_start_t2_for_situation( - gBattleBufferA[gActiveBank][1], - gBattleBufferA[gActiveBank][2] - | (gBattleBufferA[gActiveBank][3] << 8) - | (gBattleBufferA[gActiveBank][4] << 16) - | (gBattleBufferA[gActiveBank][5] << 24)); - gBattleBankFunc[gActiveBank] = sub_811E38C; - } -} - -void sub_8120324(void) -{ - LinkPartnerBufferExecCompleted(); -} - -void sub_8120330(void) -{ - LinkPartnerBufferExecCompleted(); -} - -void sub_812033C(void) -{ - LinkPartnerBufferExecCompleted(); -} - -void sub_8120348(void) -{ - LinkPartnerBufferExecCompleted(); -} - -void sub_8120354(void) -{ - LinkPartnerBufferExecCompleted(); -} - -void sub_8120360(void) -{ - LinkPartnerBufferExecCompleted(); -} - -void sub_812036C(void) -{ - LinkPartnerBufferExecCompleted(); -} - -void sub_8120378(void) -{ - LinkPartnerBufferExecCompleted(); -} - -void sub_8120384(void) -{ - LinkPartnerBufferExecCompleted(); -} - -void sub_8120390(void) -{ - gUnknown_020238C8.unk0_0 = 0; - LinkPartnerBufferExecCompleted(); -} - -void sub_81203AC(void) -{ - gUnknown_020238C8.unk0_0 = gBattleBufferA[gActiveBank][1]; - LinkPartnerBufferExecCompleted(); -} - -void sub_81203E4(void) -{ - gUnknown_020238C8.unk0_7 = 0; - LinkPartnerBufferExecCompleted(); -} - -void sub_81203FC(void) -{ - gUnknown_020238C8.unk0_7 ^= 1; - LinkPartnerBufferExecCompleted(); -} - -void LinkPartnerHandleHitAnimation(void) -{ - if (gSprites[gObjectBankIDs[gActiveBank]].invisible == TRUE) - { - LinkPartnerBufferExecCompleted(); - } - else - { - gDoingBattleAnim = TRUE; - gSprites[gObjectBankIDs[gActiveBank]].data1 = 0; - sub_8047858(gActiveBank); - gBattleBankFunc[gActiveBank] = bx_blink_t3; - } -} - -void sub_8120494(void) -{ - LinkPartnerBufferExecCompleted(); -} - -void LinkPartnerHandleEffectivenessSound(void) -{ - s8 pan; - - if (GetBankSide(gActiveBank) == 0) - pan = -64; - else - pan = 63; - PlaySE12WithPanning(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8), pan); - LinkPartnerBufferExecCompleted(); -} - -void sub_81204E4(void) -{ - PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8)); - LinkPartnerBufferExecCompleted(); -} - -void LinkPartnerHandleFaintingCry(void) -{ - PlayCry3( - GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES), - -25, 5); - LinkPartnerBufferExecCompleted(); -} - -void dp01t_2E_3_battle_intro(void) -{ - sub_80E43C0(gBattleBufferA[gActiveBank][1]); - gUnknown_02024DE8 |= 1; - LinkPartnerBufferExecCompleted(); -} - -void sub_8120588(void) -{ - u8 r4; - u8 taskId; - - oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]); - gSprites[gObjectBankIDs[gActiveBank]].data0 = 50; - gSprites[gObjectBankIDs[gActiveBank]].data2 = -40; - gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; - gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34; - gSprites[gObjectBankIDs[gActiveBank]].data5 = gActiveBank; - oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], sub_8030E38); - StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 1); - r4 = AllocSpritePalette(0xD6F9); - LoadCompressedPalette( - gTrainerBackPicPaletteTable[gLinkPlayers[sub_803FC34(gActiveBank)].gender].data, - 0x100 + r4 * 16, 0x20); - gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = r4; - taskId = CreateTask(sub_812071C, 5); - gTasks[taskId].data[0] = gActiveBank; - if (ewram17810[gActiveBank].unk0_0) - gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0; - ewram17840.unk9_0 = 1; - gBattleBankFunc[gActiveBank] = nullsub_74; -} - -void sub_812071C(u8 taskId) -{ - u8 r9; - - if (gTasks[taskId].data[1] < 24) - { - gTasks[taskId].data[1]++; - return; - } - - r9 = gActiveBank; - gActiveBank = gTasks[taskId].data[0]; - if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI)) - { - gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; - sub_811F864(gActiveBank, 0); - } - else - { - gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; - sub_811F864(gActiveBank, 0); - gActiveBank ^= 2; - gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; - BattleLoadPlayerMonSprite(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); - sub_811F864(gActiveBank, 0); - gActiveBank ^= 2; - } - gBattleBankFunc[gActiveBank] = sub_811DCA0; - gActiveBank = r9; - DestroyTask(taskId); -} - -void dp01t_30_3_80EB11C(void) -{ - if (gBattleBufferA[gActiveBank][1] != 0 && GetBankSide(gActiveBank) == 0) - { - LinkPartnerBufferExecCompleted(); - return; - } - - ewram17810[gActiveBank].unk0_0 = 1; - gUnknown_02024E68[gActiveBank] = sub_8044804( - gActiveBank, - (struct BattleInterfaceStruct2 *)&gBattleBufferA[gActiveBank][4], - gBattleBufferA[gActiveBank][1], - gBattleBufferA[gActiveBank][2]); - ewram17810[gActiveBank].unk5 = 0; - if (gBattleBufferA[gActiveBank][2] != 0) - ewram17810[gActiveBank].unk5 = 0x5D; - gBattleBankFunc[gActiveBank] = sub_81208E0; -} - -void sub_81208E0(void) -{ - if (ewram17810[gActiveBank].unk5++ >= 93) - { - ewram17810[gActiveBank].unk5 = 0; - LinkPartnerBufferExecCompleted(); - } -} - -void sub_8120920(void) -{ - if (ewram17810[gActiveBank].unk0_0) - gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0; - LinkPartnerBufferExecCompleted(); -} - -void sub_812096C(void) -{ - LinkPartnerBufferExecCompleted(); -} - -void sub_8120978(void) -{ - if (sub_8078874(gActiveBank) != 0) - { - gSprites[gObjectBankIDs[gActiveBank]].invisible = gBattleBufferA[gActiveBank][1]; - sub_8031F88(gActiveBank); - } - LinkPartnerBufferExecCompleted(); -} - -void sub_81209D8(void) -{ - if (mplay_80342A4(gActiveBank) == 0) - { - u8 r3 = gBattleBufferA[gActiveBank][1]; - u16 r4 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); - - if (move_anim_start_t3(gActiveBank, gActiveBank, gActiveBank, r3, r4) != 0) - LinkPartnerBufferExecCompleted(); - else - gBattleBankFunc[gActiveBank] = sub_811E3B8; - } -} - -void sub_8120A40(void) -{ - LinkPartnerBufferExecCompleted(); -} - -void sub_8120A4C(void) -{ - LinkPartnerBufferExecCompleted(); -} - -void sub_8120A58(void) -{ - gBattleOutcome = gBattleBufferA[gActiveBank][1]; - FadeOutMapMusic(5); - BeginFastPaletteFade(3); - LinkPartnerBufferExecCompleted(); - gBattleBankFunc[gActiveBank] = sub_811E29C; -} - -void nullsub_75(void) -{ -} diff --git a/src/battle_controller_linkopponent2.c b/src/battle_controller_linkopponent2.c index 57932131b..2ca7c7970 100644 --- a/src/battle_controller_linkopponent2.c +++ b/src/battle_controller_linkopponent2.c @@ -52,7 +52,7 @@ extern u8 gUnknown_0300434C[]; extern u8 sub_8077F68(); extern u8 sub_8079E90(); extern u8 GetBankIdentity(u8); -extern void sub_8031794(struct Pokemon *, u8); +extern void BattleLoadOpponentMonSprite(struct Pokemon *, u8); extern void sub_8037A74(void); extern void sub_8032984(u8, u16); extern void sub_8037E30(void); @@ -822,7 +822,7 @@ void LinkOpponentHandleLoadPokeSprite(void) { u16 species = GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES); - sub_8031794(&gEnemyParty[gBattlePartyID[gActiveBank]], gActiveBank); + BattleLoadOpponentMonSprite(&gEnemyParty[gBattlePartyID[gActiveBank]], gActiveBank); GetMonSpriteTemplate_803C56C(species, GetBankIdentity(gActiveBank)); gObjectBankIDs[gActiveBank] = CreateSprite( &gUnknown_02024E8C, @@ -852,7 +852,7 @@ void sub_8039430(u8 a, u8 b) gBattlePartyID[a] = gBattleBufferA[a][1]; species = GetMonData(&gEnemyParty[gBattlePartyID[a]], MON_DATA_SPECIES); gUnknown_0300434C[a] = CreateInvisibleSpriteWithCallback(sub_80312F0); - sub_8031794(&gEnemyParty[gBattlePartyID[a]], a); + BattleLoadOpponentMonSprite(&gEnemyParty[gBattlePartyID[a]], a); GetMonSpriteTemplate_803C56C(species, GetBankIdentity(a)); gObjectBankIDs[a] = CreateSprite( &gUnknown_02024E8C, @@ -891,7 +891,7 @@ void sub_8039648(void) switch (ewram17810[gActiveBank].unk4) { case 0: - if (ewram17800[gActiveBank].unk0_2) + if (ewram17800[gActiveBank].substituteSprite) move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); ewram17810[gActiveBank].unk4 = 1; break; @@ -960,7 +960,7 @@ void LinkOpponentHandlecmd10(void) { if (ewram17810[gActiveBank].unk4 == 0) { - if (ewram17800[gActiveBank].unk0_2) + if (ewram17800[gActiveBank].substituteSprite) move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); ewram17810[gActiveBank].unk4++; } @@ -1035,7 +1035,7 @@ void sub_8039B64(void) switch (ewram17810[gActiveBank].unk4) { case 0: - if (ewram17800[gActiveBank].unk0_2 && !ewram17800[gActiveBank].unk0_3) + if (ewram17800[gActiveBank].substituteSprite && !ewram17800[gActiveBank].unk0_3) { ewram17800[gActiveBank].unk0_3 = 1; move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); @@ -1055,7 +1055,7 @@ void sub_8039B64(void) if (!gAnimScriptActive) { sub_80326EC(1); - if ((ewram17800[gActiveBank].unk0_2) && r7 <= 1) + if ((ewram17800[gActiveBank].substituteSprite) && r7 <= 1) { move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); ewram17800[gActiveBank].unk0_3 = 0; diff --git a/src/battle_controller_linkpartner.c b/src/battle_controller_linkpartner.c index f516c9bce..4308a8a5c 100644 --- a/src/battle_controller_linkpartner.c +++ b/src/battle_controller_linkpartner.c @@ -86,12 +86,12 @@ extern void oamt_set_x3A_32(); extern void sub_8078B34(struct Sprite *); extern void sub_80105EC(struct Sprite *); extern s32 sub_803FC34(u16); -extern void sub_8031AF4(); +extern void LoadPlayerTrainerBankSprite(); extern void sub_80313A0(struct Sprite *); extern u8 sub_8046400(); extern void sub_80312F0(struct Sprite *); extern u8 CreateInvisibleSpriteWithCallback(); -extern void sub_80318FC(); +extern void BattleLoadPlayerMonSprite(); extern u8 sub_8077ABC(); extern u8 sub_8077F68(); extern u8 sub_8079E90(); @@ -420,7 +420,7 @@ void sub_811E034(void) { if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy) { - if (ewram17800[gActiveBank].unk0_2) + if (ewram17800[gActiveBank].substituteSprite) move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); gBattleBankFunc[gActiveBank] = sub_811E0A0; } @@ -1111,7 +1111,7 @@ void LinkPartnerHandlecmd3(void) void LinkPartnerHandleLoadPokeSprite(void) { - sub_80318FC(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + BattleLoadPlayerMonSprite(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); GetMonSpriteTemplate_803C56C( GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES), GetBankIdentity(gActiveBank)); @@ -1131,7 +1131,7 @@ void LinkPartnerHandleSendOutPoke(void) { sub_8032AA8(gActiveBank, gBattleBufferA[gActiveBank][2]); gBattlePartyID[gActiveBank] = gBattleBufferA[gActiveBank][1]; - sub_80318FC(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + BattleLoadPlayerMonSprite(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); sub_811F864(gActiveBank, gBattleBufferA[gActiveBank][2]); gBattleBankFunc[gActiveBank] = sub_811E1BC; } @@ -1181,7 +1181,7 @@ void sub_811FA5C(void) switch (ewram17810[gActiveBank].unk4) { case 0: - if (ewram17800[gActiveBank].unk0_2) + if (ewram17800[gActiveBank].substituteSprite) move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); ewram17810[gActiveBank].unk4 = 1; break; @@ -1214,7 +1214,7 @@ void LinkPartnerHandleTrainerThrow(void) xOffset = 0; gender = gLinkPlayers[GetMultiplayerId() ^ 1].gender; } - sub_8031AF4(gender, gActiveBank); + LoadPlayerTrainerBankSprite(gender, gActiveBank); GetMonSpriteTemplate_803C5A0(gender, GetBankIdentity(gActiveBank)); gObjectBankIDs[gActiveBank] = CreateSprite( &gUnknown_02024E8C, @@ -1247,7 +1247,7 @@ void LinkPartnerHandlecmd10(void) { if (ewram17810[gActiveBank].unk4 == 0) { - if (ewram17800[gActiveBank].unk0_2) + if (ewram17800[gActiveBank].substituteSprite) move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); ewram17810[gActiveBank].unk4++; } @@ -1322,7 +1322,7 @@ void sub_811FF30(void) switch (ewram17810[gActiveBank].unk4) { case 0: - if (ewram17800[gActiveBank].unk0_2 && !ewram17800[gActiveBank].unk0_3) + if (ewram17800[gActiveBank].substituteSprite && !ewram17800[gActiveBank].unk0_3) { ewram17800[gActiveBank].unk0_3 = 1; move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); @@ -1342,7 +1342,7 @@ void sub_811FF30(void) if (!gAnimScriptActive) { sub_80326EC(1); - if ((ewram17800[gActiveBank].unk0_2) && r7 <= 1) + if ((ewram17800[gActiveBank].substituteSprite) && r7 <= 1) { move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); ewram17800[gActiveBank].unk0_3 = 0; @@ -1630,7 +1630,7 @@ void sub_812071C(u8 taskId) sub_811F864(gActiveBank, 0); gActiveBank ^= 2; gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; - sub_80318FC(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + BattleLoadPlayerMonSprite(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); sub_811F864(gActiveBank, 0); gActiveBank ^= 2; } diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index b24130bb8..abfa3fef2 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -67,7 +67,7 @@ extern u8 sub_8077ABC(); extern u8 sub_8077F68(); extern u8 sub_8079E90(); extern void sub_8033018(void); -extern void sub_8031794(); +extern void BattleLoadOpponentMonSprite(); extern u8 GetBankIdentity(u8); extern void sub_8032984(u8, u16); extern void sub_80333D4(void); @@ -465,7 +465,7 @@ void sub_8033264(void) { if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy) { - if (ewram17800[gActiveBank].unk0_2) + if (ewram17800[gActiveBank].substituteSprite) move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); gBattleBankFunc[gActiveBank] = sub_80332D0; } @@ -1127,7 +1127,7 @@ void OpponentHandleLoadPokeSprite(void) { u16 species = GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES); - sub_8031794(&gEnemyParty[gBattlePartyID[gActiveBank]], gActiveBank); + BattleLoadOpponentMonSprite(&gEnemyParty[gBattlePartyID[gActiveBank]], gActiveBank); GetMonSpriteTemplate_803C56C(species, GetBankIdentity(gActiveBank)); gObjectBankIDs[gActiveBank] = CreateSprite( &gUnknown_02024E8C, @@ -1159,7 +1159,7 @@ void sub_803495C(u8 a, u8 b) gBattlePartyID[a] = gBattleBufferA[a][1]; species = GetMonData(&gEnemyParty[gBattlePartyID[a]], MON_DATA_SPECIES); gUnknown_0300434C[a] = CreateInvisibleSpriteWithCallback(sub_80312F0); - sub_8031794(&gEnemyParty[gBattlePartyID[a]], a); + BattleLoadOpponentMonSprite(&gEnemyParty[gBattlePartyID[a]], a); GetMonSpriteTemplate_803C56C(species, GetBankIdentity(a)); gObjectBankIDs[a] = CreateSprite( &gUnknown_02024E8C, @@ -1198,7 +1198,7 @@ void sub_8034B74(void) switch (ewram17810[gActiveBank].unk4) { case 0: - if (ewram17800[gActiveBank].unk0_2) + if (ewram17800[gActiveBank].substituteSprite) move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); ewram17810[gActiveBank].unk4 = 1; break; @@ -1289,7 +1289,7 @@ void OpponentHandlecmd10(void) { if (ewram17810[gActiveBank].unk4 == 0) { - if (ewram17800[gActiveBank].unk0_2) + if (ewram17800[gActiveBank].substituteSprite) move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); ewram17810[gActiveBank].unk4++; } @@ -1364,7 +1364,7 @@ void sub_8035238(void) switch (ewram17810[gActiveBank].unk4) { case 0: - if (ewram17800[gActiveBank].unk0_2 && !ewram17800[gActiveBank].unk0_3) + if (ewram17800[gActiveBank].substituteSprite && !ewram17800[gActiveBank].unk0_3) { ewram17800[gActiveBank].unk0_3 = 1; move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); @@ -1384,7 +1384,7 @@ void sub_8035238(void) if (!gAnimScriptActive) { sub_80326EC(1); - if ((ewram17800[gActiveBank].unk0_2) && r7 <= 1) + if ((ewram17800[gActiveBank].substituteSprite) && r7 <= 1) { move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); ewram17800[gActiveBank].unk0_3 = 0; diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index a537d9adb..269f20642 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -102,7 +102,7 @@ extern void sub_80E43C0(); extern void oamt_add_pos2_onto_pos1(); extern void sub_8078B34(struct Sprite *); extern void oamt_set_x3A_32(); -extern void sub_80318FC(); +extern void BattleLoadPlayerMonSprite(); extern bool8 IsDoubleBattle(void); extern void sub_802D500(void); extern bool8 sub_8078874(u8); @@ -124,7 +124,7 @@ extern void sub_80105EC(struct Sprite *); extern void sub_802D274(void); extern void sub_802D23C(void); extern u8 GetBankIdentity(u8); -extern void sub_8031AF4(); +extern void LoadPlayerTrainerBankSprite(); extern void sub_80313A0(struct Sprite *); extern void sub_802D204(void); extern u8 sub_8079E90(); @@ -1067,7 +1067,7 @@ void sub_802D680(void) ewram17810[gActiveBank].unk1_0 = 0; FreeSpriteTilesByTag(0x27F9); FreeSpritePaletteByTag(0x27F9); - if (ewram17800[gActiveBank].unk0_2) + if (ewram17800[gActiveBank].substituteSprite) move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); gBattleBankFunc[gActiveBank] = sub_802D730; } @@ -2298,7 +2298,7 @@ void PlayerHandlecmd3(void) void PlayerHandleLoadPokeSprite(void) { - sub_80318FC(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + BattleLoadPlayerMonSprite(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank; gBattleBankFunc[gActiveBank] = bx_0802E404; } @@ -2307,7 +2307,7 @@ void PlayerHandleSendOutPoke(void) { sub_8032AA8(gActiveBank, gBattleBufferA[gActiveBank][2]); gBattlePartyID[gActiveBank] = gBattleBufferA[gActiveBank][1]; - sub_80318FC(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + BattleLoadPlayerMonSprite(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); gActionSelectionCursor[gActiveBank] = 0; gMoveSelectionCursor[gActiveBank] = 0; sub_802F934(gActiveBank, gBattleBufferA[gActiveBank][2]); @@ -2359,7 +2359,7 @@ void sub_802FB2C(void) switch (ewram17810[gActiveBank].unk4) { case 0: - if (ewram17800[gActiveBank].unk0_2) + if (ewram17800[gActiveBank].substituteSprite) move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); ewram17810[gActiveBank].unk4 = 1; break; @@ -2388,7 +2388,7 @@ void PlayerHandleTrainerThrow(void) { r7 = 0; } - sub_8031AF4(gSaveBlock2.playerGender, gActiveBank); + LoadPlayerTrainerBankSprite(gSaveBlock2.playerGender, gActiveBank); GetMonSpriteTemplate_803C5A0(gSaveBlock2.playerGender, GetBankIdentity(gActiveBank)); gObjectBankIDs[gActiveBank] = CreateSprite( &gUnknown_02024E8C, @@ -2404,7 +2404,7 @@ void PlayerHandleTrainerThrow(void) void PlayerHandleTrainerSlide(void) { - sub_8031AF4(gSaveBlock2.playerGender, gActiveBank); + LoadPlayerTrainerBankSprite(gSaveBlock2.playerGender, gActiveBank); GetMonSpriteTemplate_803C5A0(gSaveBlock2.playerGender, GetBankIdentity(gActiveBank)); gObjectBankIDs[gActiveBank] = CreateSprite( &gUnknown_02024E8C, @@ -2434,7 +2434,7 @@ void PlayerHandlecmd10(void) { if (ewram17810[gActiveBank].unk4 == 0) { - if (ewram17800[gActiveBank].unk0_2) + if (ewram17800[gActiveBank].substituteSprite) move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); ewram17810[gActiveBank].unk4++; } @@ -2522,7 +2522,7 @@ void sub_8030190(void) switch (ewram17810[gActiveBank].unk4) { case 0: - if (ewram17800[gActiveBank].unk0_2 == 1 && ewram17800[gActiveBank].unk0_3 == 0) + if (ewram17800[gActiveBank].substituteSprite == 1 && ewram17800[gActiveBank].unk0_3 == 0) { ewram17800[gActiveBank].unk0_3 = 1; move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); @@ -2542,7 +2542,7 @@ void sub_8030190(void) if (!gAnimScriptActive) { sub_80326EC(1); - if (ewram17800[gActiveBank].unk0_2 == 1 && r7 < 2) + if (ewram17800[gActiveBank].substituteSprite == 1 && r7 < 2) { move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); ewram17800[gActiveBank].unk0_3 = 0; @@ -2916,7 +2916,7 @@ void sub_8030E38(struct Sprite *sprite) FreeSpriteOamMatrix(sprite); FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum)); DestroySprite(sprite); - sub_80318FC(&gPlayerParty[gBattlePartyID[r4]], r4); + BattleLoadPlayerMonSprite(&gPlayerParty[gBattlePartyID[r4]], r4); StartSpriteAnim(&gSprites[gObjectBankIDs[r4]], 0); } @@ -2942,7 +2942,7 @@ void task05_08033660(u8 taskId) sub_802F934(gActiveBank, 0); gActiveBank ^= 2; gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; - sub_80318FC(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + BattleLoadPlayerMonSprite(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); sub_802F934(gActiveBank, 0); gActiveBank ^= 2; } diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c index 08bad3c12..36e525bcc 100644 --- a/src/battle_controller_wally.c +++ b/src/battle_controller_wally.c @@ -72,7 +72,7 @@ extern void sub_8043DFC(); extern bool8 IsDoubleBattle(void); extern void c3_0802FDF4(u8); extern void PlayerHandlecmd1(void); -extern void sub_8031AF4(); +extern void LoadPlayerTrainerBankSprite(); extern u8 GetBankIdentity(u8); extern void sub_80313A0(struct Sprite *); extern u8 GetBankByPlayerAI(u8); @@ -1106,7 +1106,7 @@ void WallyHandleReturnPokeToBall(void) void WallyHandleTrainerThrow(void) { - sub_8031AF4(2, gActiveBank); + LoadPlayerTrainerBankSprite(2, gActiveBank); GetMonSpriteTemplate_803C5A0(2, GetBankIdentity(gActiveBank)); gObjectBankIDs[gActiveBank] = CreateSprite( &gUnknown_02024E8C, @@ -1121,7 +1121,7 @@ void WallyHandleTrainerThrow(void) void WallyHandleTrainerSlide(void) { - sub_8031AF4(2, gActiveBank); + LoadPlayerTrainerBankSprite(2, gActiveBank); GetMonSpriteTemplate_803C5A0(2, GetBankIdentity(gActiveBank)); gObjectBankIDs[gActiveBank] = CreateSprite( &gUnknown_02024E8C, @@ -1206,7 +1206,7 @@ void sub_81390D0(void) switch (ewram17810[gActiveBank].unk4) { case 0: - if (ewram17800[gActiveBank].unk0_2 == 1) + if (ewram17800[gActiveBank].substituteSprite == 1) move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); ewram17810[gActiveBank].unk4 = 1; break; @@ -1223,7 +1223,7 @@ void sub_81390D0(void) if (!gAnimScriptActive) { sub_80326EC(1); - if (ewram17800[gActiveBank].unk0_2 == 1) + if (ewram17800[gActiveBank].substituteSprite == 1) move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); ewram17810[gActiveBank].unk4 = 3; } @@ -1507,7 +1507,7 @@ void sub_81398BC(u8 bank) { u16 species; - ewram17800[bank].unk2 = 0; + ewram17800[bank].transformedSpecies = 0; gBattlePartyID[bank] = gBattleBufferA[bank][1]; species = GetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_SPECIES); gUnknown_0300434C[bank] = CreateInvisibleSpriteWithCallback(sub_80312F0); -- cgit v1.2.3 From d4a7bcf4808f94e6d961d7788330ce8842d7cf97 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 27 Aug 2017 14:00:07 +0200 Subject: halfway there, two important functions done --- asm/evolution_scene.s | 2671 ------------------------------------------------- src/evolution_scene.c | 488 ++++++++- src/pokemon_3.c | 2 +- 3 files changed, 437 insertions(+), 2724 deletions(-) diff --git a/asm/evolution_scene.s b/asm/evolution_scene.s index fd0b5cbd9..d90772070 100644 --- a/asm/evolution_scene.s +++ b/asm/evolution_scene.s @@ -7,2677 +7,6 @@ .text - - thumb_func_start Task_EvolutionScene -Task_EvolutionScene: @ 811240C - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x18 - lsls r0, 24 - lsrs r7, r0, 24 - ldr r2, _08112490 @ =gTasks - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - adds r3, r0, r2 - movs r1, 0xA - ldrsh r0, [r3, r1] - mov r9, r0 - movs r1, 0xC - ldrsh r0, [r3, r1] - lsls r0, 16 - mov r1, r9 - orrs r1, r0 - mov r9, r1 - ldr r0, _08112494 @ =gMain - ldrh r1, [r0, 0x2C] - adds r6, r2, 0 - adds r4, r0, 0 - cmp r1, 0x2 - bne _0811246E - movs r2, 0x8 - ldrsh r0, [r3, r2] - cmp r0, 0x8 - bne _0811246E - ldrh r1, [r3, 0x12] - movs r2, 0x1 - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - beq _0811246E - movs r0, 0x10 - strh r0, [r3, 0x8] - ldr r0, _08112498 @ =gBattleCommunication - ldrb r1, [r0, 0x2] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r1, r0, r6 - ldrb r0, [r1, 0x4] - cmp r0, 0 - beq _0811246E - strh r2, [r1, 0x18] -_0811246E: - lsls r1, r7, 2 - adds r0, r1, r7 - lsls r0, 3 - adds r0, r6 - movs r3, 0x8 - ldrsh r0, [r0, r3] - mov r8, r1 - cmp r0, 0x15 - bls _08112484 - bl _08112FD0 -_08112484: - lsls r0, 2 - ldr r1, _0811249C @ =_081124A0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08112490: .4byte gTasks -_08112494: .4byte gMain -_08112498: .4byte gBattleCommunication -_0811249C: .4byte _081124A0 - .align 2, 0 -_081124A0: - .4byte _081124F8 - .4byte _0811253C - .4byte _08112588 - .4byte _08112594 - .4byte _081125BC - .4byte _081125FC - .4byte _08112630 - .4byte _0811266C - .4byte _081126A0 - .4byte _081126E0 - .4byte _081126FC - .4byte _08112728 - .4byte _08112754 - .4byte _081127A0 - .4byte _0811284C - .4byte _081128E4 - .4byte _08112934 - .4byte _08112974 - .4byte _081129A0 - .4byte _081129E8 - .4byte _08112A4C - .4byte _08112A88 -_081124F8: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - ldr r2, _08112530 @ =gSprites - ldr r0, _08112534 @ =0x02014800 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - adds r0, 0x3E - ldrb r2, [r0] - movs r1, 0x5 - negs r1, r1 - ands r1, r2 - strb r1, [r0] - ldr r0, _08112538 @ =gTasks - mov r2, r8 - adds r1, r2, r7 - lsls r1, 3 - adds r1, r0 - b _08112A2E - .align 2, 0 -_08112530: .4byte gSprites -_08112534: .4byte 0x02014800 -_08112538: .4byte gTasks -_0811253C: - ldr r0, _08112574 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0811254C - bl _08112FD0 -_0811254C: - ldr r4, _08112578 @ =gStringVar4 - ldr r1, _0811257C @ =gUnknown_08400C4A - adds r0, r4, 0 - bl StringExpandPlaceholders - ldr r0, _08112580 @ =gUnknown_03004210 - movs r1, 0xF - str r1, [sp] - adds r1, r4, 0 - movs r2, 0x90 - movs r3, 0x2 - bl sub_8002EB0 - ldr r0, _08112584 @ =gTasks - mov r3, r8 - adds r1, r3, r7 - lsls r1, 3 - adds r1, r0 - b _08112A2E - .align 2, 0 -_08112574: .4byte gPaletteFade -_08112578: .4byte gStringVar4 -_0811257C: .4byte gUnknown_08400C4A -_08112580: .4byte gUnknown_03004210 -_08112584: .4byte gTasks -_08112588: - ldr r0, _08112590 @ =gUnknown_03004210 - ldrh r0, [r0, 0x16] - b _0811297C - .align 2, 0 -_08112590: .4byte gUnknown_03004210 -_08112594: - bl IsCryFinished - lsls r0, 24 - cmp r0, 0 - bne _081125A2 - bl _08112FD0 -_081125A2: - movs r0, 0xBC - lsls r0, 1 - bl PlaySE - ldr r0, _081125B8 @ =gTasks - mov r2, r8 - adds r1, r2, r7 - lsls r1, 3 - adds r1, r0 - b _08112A2E - .align 2, 0 -_081125B8: .4byte gTasks -_081125BC: - bl IsSEPlaying - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - beq _081125CC - bl _08112FD0 -_081125CC: - ldr r0, _081125F4 @ =0x00000179 - bl PlayNewMapMusic - ldr r0, _081125F8 @ =gTasks - mov r3, r8 - adds r1, r3, r7 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - str r4, [sp] - movs r0, 0x1C - movs r1, 0x4 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - bl _08112FD0 - .align 2, 0 -_081125F4: .4byte 0x00000179 -_081125F8: .4byte gTasks -_081125FC: - ldr r0, _08112624 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0811260C - bl _08112FD0 -_0811260C: - movs r0, 0x11 - bl LaunchTask_PreEvoSparklesSet1 - ldr r1, _08112628 @ =gBattleCommunication - strb r0, [r1, 0x2] - ldr r0, _0811262C @ =gTasks - mov r2, r8 - adds r1, r2, r7 - lsls r1, 3 - adds r1, r0 - b _08112A2E - .align 2, 0 -_08112624: .4byte gPaletteFade -_08112628: .4byte gBattleCommunication -_0811262C: .4byte gTasks -_08112630: - ldr r4, _08112664 @ =gBattleCommunication - ldrb r0, [r4, 0x2] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r6 - ldrb r0, [r1, 0x4] - cmp r0, 0 - beq _08112646 - bl _08112FD0 -_08112646: - mov r3, r8 - adds r1, r3, r7 - lsls r1, 3 - adds r1, r6 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - ldr r1, _08112668 @ =0x02014800 - movs r0, 0x1 - strb r0, [r1, 0x3] - bl LaunchTask_PreEvoSparklesSet2 - strb r0, [r4, 0x2] - bl _08112FD0 - .align 2, 0 -_08112664: .4byte gBattleCommunication -_08112668: .4byte 0x02014800 -_0811266C: - ldr r4, _08112698 @ =gBattleCommunication - ldrb r0, [r4, 0x2] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r6 - ldrb r0, [r1, 0x4] - cmp r0, 0 - beq _08112682 - bl _08112FD0 -_08112682: - ldr r1, _0811269C @ =0x02014800 - ldrb r0, [r1] - ldrb r1, [r1, 0x1] - bl sub_8149E7C - strb r0, [r4, 0x2] - mov r0, r8 - adds r1, r0, r7 - lsls r1, 3 - adds r1, r6 - b _08112A2E - .align 2, 0 -_08112698: .4byte gBattleCommunication -_0811269C: .4byte 0x02014800 -_081126A0: - ldr r1, _081126D8 @ =0x02014800 - ldrb r0, [r1, 0x3] - subs r0, 0x1 - strb r0, [r1, 0x3] - lsls r0, 24 - cmp r0, 0 - beq _081126B2 - bl _08112FD0 -_081126B2: - movs r0, 0x3 - strb r0, [r1, 0x3] - ldr r0, _081126DC @ =gBattleCommunication - ldrb r1, [r0, 0x2] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r6 - ldrb r0, [r0, 0x4] - cmp r0, 0 - beq _081126CC - bl _08112FD0 -_081126CC: - mov r2, r8 - adds r1, r2, r7 - lsls r1, 3 - adds r1, r6 - b _08112A2E - .align 2, 0 -_081126D8: .4byte 0x02014800 -_081126DC: .4byte gBattleCommunication -_081126E0: - bl LaunchTask_PostEvoSparklesSet1 - ldr r1, _081126F4 @ =gBattleCommunication - strb r0, [r1, 0x2] - ldr r0, _081126F8 @ =gTasks - mov r3, r8 - adds r1, r3, r7 - lsls r1, 3 - adds r1, r0 - b _08112A2E - .align 2, 0 -_081126F4: .4byte gBattleCommunication -_081126F8: .4byte gTasks -_081126FC: - ldr r5, _08112724 @ =gBattleCommunication - ldrb r0, [r5, 0x2] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r6 - ldrb r0, [r1, 0x4] - cmp r0, 0 - beq _08112712 - bl _08112FD0 -_08112712: - mov r0, r8 - adds r4, r0, r7 - lsls r4, 3 - adds r4, r6 - ldrh r0, [r4, 0x10] - bl LaunchTask_PostEvoSparklesSet2AndFlash - strb r0, [r5, 0x2] - b _08112992 - .align 2, 0 -_08112724: .4byte gBattleCommunication -_08112728: - ldr r0, _08112750 @ =gBattleCommunication - ldrb r1, [r0, 0x2] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r6 - ldrb r0, [r0, 0x4] - cmp r0, 0 - beq _0811273E - bl _08112FD0 -_0811273E: - movs r0, 0x21 - bl PlaySE - mov r2, r8 - adds r1, r2, r7 - lsls r1, 3 - adds r1, r6 - b _08112A2E - .align 2, 0 -_08112750: .4byte gBattleCommunication -_08112754: - bl IsSEPlaying - lsls r0, 24 - cmp r0, 0 - bne _08112762 - bl _08112FD0 -_08112762: - bl m4aMPlayAllStop - ldr r0, _08112794 @ =gTasks - mov r3, r8 - adds r4, r3, r7 - lsls r4, 3 - adds r4, r0 - ldrh r0, [r4, 0x10] - movs r1, 0 - bl PlayCry1 - ldr r0, _08112798 @ =gPlttBufferUnfaded + 0x40 - ldr r1, _0811279C @ =0x02009000 - movs r2, 0x60 - bl memcpy - movs r0, 0 - str r0, [sp] - movs r0, 0x1C - movs r1, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - b _08112992 - .align 2, 0 -_08112794: .4byte gTasks -_08112798: .4byte gPlttBufferUnfaded + 0x40 -_0811279C: .4byte 0x02009000 -_081127A0: - bl IsCryFinished - lsls r0, 24 - cmp r0, 0 - bne _081127AE - bl _08112FD0 -_081127AE: - ldr r0, _08112834 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _081127BE - bl _08112FD0 -_081127BE: - ldr r4, _08112838 @ =gStringVar4 - ldr r1, _0811283C @ =gUnknown_08400C60 - adds r0, r4, 0 - bl StringExpandPlaceholders - ldr r0, _08112840 @ =gUnknown_03004210 - movs r1, 0xF - str r1, [sp] - adds r1, r4, 0 - movs r2, 0x90 - movs r3, 0x2 - bl sub_8002EB0 - ldr r0, _08112844 @ =0x00000173 - bl PlayBGM - ldr r2, _08112848 @ =gTasks - mov r0, r8 - adds r1, r0, r7 - lsls r1, 3 - adds r4, r1, r2 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - adds r2, r1 - adds r2, 0x10 - mov r0, r9 - movs r1, 0xB - bl SetMonData - mov r0, r9 - bl CalculateMonStats - ldrh r1, [r4, 0xE] - ldrh r2, [r4, 0x10] - mov r0, r9 - bl EvolutionRenameMon - ldrh r0, [r4, 0x10] - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x2 - bl GetNationalPokedexFlag - ldrh r0, [r4, 0x10] - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x3 - bl GetNationalPokedexFlag - movs r0, 0xE - bl IncrementGameStat - b _08112FD0 - .align 2, 0 -_08112834: .4byte gPaletteFade -_08112838: .4byte gStringVar4 -_0811283C: .4byte gUnknown_08400C60 -_08112840: .4byte gUnknown_03004210 -_08112844: .4byte 0x00000173 -_08112848: .4byte gTasks -_0811284C: - ldr r0, _081128A4 @ =gUnknown_03004210 - ldrh r0, [r0, 0x16] - cmp r0, 0 - beq _08112856 - b _08112FD0 -_08112856: - mov r1, r8 - adds r0, r1, r7 - lsls r0, 3 - adds r5, r0, r6 - ldrb r1, [r5, 0x14] - mov r0, r9 - bl sub_803B7C8 - lsls r0, 16 - lsrs r6, r0, 16 - cmp r6, 0 - beq _081128C4 - movs r2, 0x1E - ldrsh r4, [r5, r2] - cmp r4, 0 - bne _081128C4 - bl sub_8053E90 - ldrh r1, [r5, 0x12] - movs r0, 0x80 - orrs r0, r1 - strh r0, [r5, 0x12] - strh r4, [r5, 0x14] - strh r4, [r5, 0x18] - mov r0, r9 - movs r1, 0x2 - add r2, sp, 0x4 - bl GetMonData - ldr r0, _081128A8 @ =gBattleTextBuff1 - add r1, sp, 0x4 - bl StringCopy10 - ldr r0, _081128AC @ =0x0000ffff - cmp r6, r0 - bne _081128B0 - movs r0, 0x15 - strh r0, [r5, 0x8] - b _08112FD0 - .align 2, 0 -_081128A4: .4byte gUnknown_03004210 -_081128A8: .4byte gBattleTextBuff1 -_081128AC: .4byte 0x0000ffff -_081128B0: - ldr r0, _081128C0 @ =0x0000fffe - cmp r6, r0 - bne _081128B8 - b _08112FD0 -_081128B8: - movs r0, 0x13 - strh r0, [r5, 0x8] - b _08112FD0 - .align 2, 0 -_081128C0: .4byte 0x0000fffe -_081128C4: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _081128E0 @ =gTasks - mov r3, r8 - adds r1, r3, r7 - lsls r1, 3 - adds r1, r0 - b _08112A2E - .align 2, 0 -_081128E0: .4byte gTasks -_081128E4: - ldr r0, _0811292C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r2, 0x80 - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - beq _081128F4 - b _08112FD0 -_081128F4: - mov r1, r8 - adds r0, r1, r7 - lsls r0, 3 - adds r4, r0, r6 - ldrh r1, [r4, 0x12] - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - bne _0811290A - bl sub_8053E90 -_0811290A: - movs r2, 0x1E - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _0811291A - ldrh r0, [r4, 0xE] - mov r1, r9 - bl CreateShedinja -_0811291A: - adds r0, r7, 0 - bl DestroyTask - ldr r0, _08112930 @ =gUnknown_03005E94 - ldr r0, [r0] - bl SetMainCallback2 - b _08112FD0 - .align 2, 0 -_0811292C: .4byte gPaletteFade -_08112930: .4byte gUnknown_03005E94 -_08112934: - ldr r0, _08112968 @ =gBattleCommunication - ldrb r1, [r0, 0x2] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r6 - ldrb r0, [r0, 0x4] - cmp r0, 0 - beq _08112948 - b _08112FD0 -_08112948: - bl m4aMPlayAllStop - ldr r0, _0811296C @ =0x0006001c - ldr r1, _08112970 @ =0x00007fff - str r1, [sp] - movs r1, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - mov r3, r8 - adds r1, r3, r7 - lsls r1, 3 - adds r1, r6 - b _08112A2E - .align 2, 0 -_08112968: .4byte gBattleCommunication -_0811296C: .4byte 0x0006001c -_08112970: .4byte 0x00007fff -_08112974: - ldr r0, _0811299C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 -_0811297C: - cmp r0, 0 - beq _08112982 - b _08112FD0 -_08112982: - mov r0, r8 - adds r4, r0, r7 - lsls r4, 3 - adds r4, r6 - ldrh r0, [r4, 0xE] - movs r1, 0 - bl PlayCry1 -_08112992: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _08112FD0 - .align 2, 0 -_0811299C: .4byte gPaletteFade -_081129A0: - bl IsCryFinished - lsls r0, 24 - cmp r0, 0 - bne _081129AC - b _08112FD0 -_081129AC: - ldr r4, _081129D8 @ =gStringVar4 - ldr r1, _081129DC @ =gUnknown_08400C8D - adds r0, r4, 0 - bl StringExpandPlaceholders - ldr r0, _081129E0 @ =gUnknown_03004210 - movs r1, 0xF - str r1, [sp] - adds r1, r4, 0 - movs r2, 0x90 - movs r3, 0x2 - bl sub_8002EB0 - ldr r1, _081129E4 @ =gTasks - mov r2, r8 - adds r0, r2, r7 - lsls r0, 3 - adds r0, r1 - movs r1, 0x1 - strh r1, [r0, 0x1E] - b _08112F9A - .align 2, 0 -_081129D8: .4byte gStringVar4 -_081129DC: .4byte gUnknown_08400C8D -_081129E0: .4byte gUnknown_03004210 -_081129E4: .4byte gTasks -_081129E8: - ldr r4, _08112A38 @ =gUnknown_03004210 - ldrh r0, [r4, 0x16] - cmp r0, 0 - beq _081129F2 - b _08112FD0 -_081129F2: - bl IsSEPlaying - lsls r0, 24 - cmp r0, 0 - beq _081129FE - b _08112FD0 -_081129FE: - bl sub_8024CEC - ldr r0, _08112A3C @ =0x0000016f - bl PlayFanfare - ldr r0, _08112A40 @ =gBattleStringsTable - ldr r0, [r0, 0xC] - bl StrCpyDecodeToDisplayedStringBattle - ldr r1, _08112A44 @ =gDisplayedStringBattle - movs r0, 0xF - str r0, [sp] - adds r0, r4, 0 - movs r2, 0x90 - movs r3, 0x2 - bl sub_8002EB0 - ldr r0, _08112A48 @ =gTasks - mov r3, r8 - adds r1, r3, r7 - lsls r1, 3 - adds r1, r0 - movs r0, 0x40 - strh r0, [r1, 0x14] -_08112A2E: - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - b _08112FD0 - .align 2, 0 -_08112A38: .4byte gUnknown_03004210 -_08112A3C: .4byte 0x0000016f -_08112A40: .4byte gBattleStringsTable -_08112A44: .4byte gDisplayedStringBattle -_08112A48: .4byte gTasks -_08112A4C: - ldr r0, _08112A80 @ =gUnknown_03004210 - ldrh r0, [r0, 0x16] - cmp r0, 0 - beq _08112A56 - b _08112FD0 -_08112A56: - bl IsSEPlaying - lsls r0, 24 - cmp r0, 0 - beq _08112A62 - b _08112FD0 -_08112A62: - ldr r0, _08112A84 @ =gTasks - mov r2, r8 - adds r1, r2, r7 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x14] - subs r0, 0x1 - strh r0, [r1, 0x14] - lsls r0, 16 - cmp r0, 0 - beq _08112A7A - b _08112FD0 -_08112A7A: - movs r0, 0xE - strh r0, [r1, 0x8] - b _08112FD0 - .align 2, 0 -_08112A80: .4byte gUnknown_03004210 -_08112A84: .4byte gTasks -_08112A88: - mov r3, r8 - adds r0, r3, r7 - lsls r0, 3 - adds r0, r6 - movs r1, 0x18 - ldrsh r0, [r0, r1] - cmp r0, 0xB - bls _08112A9A - b _08112FD0 -_08112A9A: - lsls r0, 2 - ldr r1, _08112AA4 @ =_08112AA8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08112AA4: .4byte _08112AA8 - .align 2, 0 -_08112AA8: - .4byte _08112AD8 - .4byte _08112B2C - .4byte _08112B7C - .4byte _08112BC0 - .4byte _08112C0C - .4byte _08112D3C - .4byte _08112D8C - .4byte _08112E98 - .4byte _08112EE8 - .4byte _08112F38 - .4byte _08112F78 - .4byte _08112FB0 -_08112AD8: - ldr r4, _08112B1C @ =gUnknown_03004210 - ldrh r0, [r4, 0x16] - cmp r0, 0 - beq _08112AE2 - b _08112FD0 -_08112AE2: - bl IsSEPlaying - lsls r0, 24 - cmp r0, 0 - beq _08112AEE - b _08112FD0 -_08112AEE: - bl sub_8024CEC - ldr r0, _08112B20 @ =gBattleStringsTable - ldr r0, [r0, 0x10] - bl StrCpyDecodeToDisplayedStringBattle - ldr r1, _08112B24 @ =gDisplayedStringBattle - movs r0, 0xF - str r0, [sp] - adds r0, r4, 0 - movs r2, 0x90 - movs r3, 0x2 - bl sub_8002EB0 - ldr r0, _08112B28 @ =gTasks - mov r2, r8 - adds r1, r2, r7 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x18] - adds r0, 0x1 - b _08112FCE - .align 2, 0 -_08112B1C: .4byte gUnknown_03004210 -_08112B20: .4byte gBattleStringsTable -_08112B24: .4byte gDisplayedStringBattle -_08112B28: .4byte gTasks -_08112B2C: - ldr r4, _08112B6C @ =gUnknown_03004210 - ldrh r0, [r4, 0x16] - cmp r0, 0 - beq _08112B36 - b _08112FD0 -_08112B36: - bl IsSEPlaying - lsls r0, 24 - cmp r0, 0 - beq _08112B42 - b _08112FD0 -_08112B42: - ldr r0, _08112B70 @ =gBattleStringsTable - ldr r0, [r0, 0x14] - bl StrCpyDecodeToDisplayedStringBattle - ldr r1, _08112B74 @ =gDisplayedStringBattle - movs r0, 0xF - str r0, [sp] - adds r0, r4, 0 - movs r2, 0x90 - movs r3, 0x2 - bl sub_8002EB0 - ldr r0, _08112B78 @ =gTasks - mov r3, r8 - adds r1, r3, r7 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x18] - adds r0, 0x1 - b _08112FCE - .align 2, 0 -_08112B6C: .4byte gUnknown_03004210 -_08112B70: .4byte gBattleStringsTable -_08112B74: .4byte gDisplayedStringBattle -_08112B78: .4byte gTasks -_08112B7C: - ldr r4, _08112BF8 @ =gUnknown_03004210 - ldrh r0, [r4, 0x16] - cmp r0, 0 - beq _08112B86 - b _08112FD0 -_08112B86: - bl IsSEPlaying - lsls r0, 24 - cmp r0, 0 - bne _08112BC0 - ldr r0, _08112BFC @ =gBattleStringsTable - ldr r0, [r0, 0x18] - bl StrCpyDecodeToDisplayedStringBattle - ldr r1, _08112C00 @ =gDisplayedStringBattle - movs r0, 0xF - str r0, [sp] - adds r0, r4, 0 - movs r2, 0x90 - movs r3, 0x2 - bl sub_8002EB0 - ldr r0, _08112C04 @ =gTasks - mov r2, r8 - adds r1, r2, r7 - lsls r1, 3 - adds r1, r0 - movs r0, 0x5 - strh r0, [r1, 0x1A] - movs r0, 0x9 - strh r0, [r1, 0x1C] - ldrh r0, [r1, 0x18] - adds r0, 0x1 - strh r0, [r1, 0x18] -_08112BC0: - ldr r0, _08112BF8 @ =gUnknown_03004210 - ldrh r0, [r0, 0x16] - cmp r0, 0 - beq _08112BCA - b _08112FD0 -_08112BCA: - bl IsSEPlaying - lsls r0, 24 - cmp r0, 0 - beq _08112BD6 - b _08112FD0 -_08112BD6: - bl sub_8023A80 - ldr r0, _08112C04 @ =gTasks - mov r3, r8 - adds r1, r3, r7 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x18] - adds r0, 0x1 - movs r2, 0 - strh r0, [r1, 0x18] - ldr r0, _08112C08 @ =gBattleCommunication - strb r2, [r0, 0x1] - bl sub_802BC6C - b _08112FD0 - .align 2, 0 -_08112BF8: .4byte gUnknown_03004210 -_08112BFC: .4byte gBattleStringsTable -_08112C00: .4byte gDisplayedStringBattle -_08112C04: .4byte gTasks -_08112C08: .4byte gBattleCommunication -_08112C0C: - ldr r0, _08112CA4 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08112C32 - ldr r4, _08112CA8 @ =gBattleCommunication - ldrb r0, [r4, 0x1] - cmp r0, 0 - beq _08112C32 - movs r0, 0x5 - bl PlaySE - bl nullsub_6 - movs r0, 0 - strb r0, [r4, 0x1] - bl sub_802BC6C -_08112C32: - ldr r0, _08112CA4 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08112C58 - ldr r4, _08112CA8 @ =gBattleCommunication - ldrb r0, [r4, 0x1] - cmp r0, 0 - bne _08112C58 - movs r0, 0x5 - bl PlaySE - bl nullsub_6 - movs r0, 0x1 - strb r0, [r4, 0x1] - bl sub_802BC6C -_08112C58: - ldr r0, _08112CA4 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08112CE2 - bl sub_8023AD8 - ldr r0, _08112CAC @ =gBattleStringsTable - movs r1, 0x92 - lsls r1, 3 - adds r0, r1 - ldr r0, [r0] - bl StrCpyDecodeToDisplayedStringBattle - ldr r0, _08112CB0 @ =gUnknown_03004210 - ldr r1, _08112CB4 @ =gDisplayedStringBattle - movs r2, 0xF - str r2, [sp] - movs r2, 0x90 - movs r3, 0x2 - bl sub_8002EB0 - movs r0, 0x5 - bl PlaySE - ldr r0, _08112CA8 @ =gBattleCommunication - ldrb r2, [r0, 0x1] - cmp r2, 0 - beq _08112CBC - ldr r0, _08112CB8 @ =gTasks - mov r2, r8 - adds r1, r2, r7 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x1C] - strh r0, [r1, 0x18] - b _08112CE2 - .align 2, 0 -_08112CA4: .4byte gMain -_08112CA8: .4byte gBattleCommunication -_08112CAC: .4byte gBattleStringsTable -_08112CB0: .4byte gUnknown_03004210 -_08112CB4: .4byte gDisplayedStringBattle -_08112CB8: .4byte gTasks -_08112CBC: - ldr r0, _08112D28 @ =gTasks - mov r3, r8 - adds r1, r3, r7 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x1A] - strh r0, [r1, 0x18] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x5 - bne _08112CE2 - movs r0, 0x1 - negs r0, r0 - str r2, [sp] - movs r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade -_08112CE2: - ldr r0, _08112D2C @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _08112CF0 - b _08112FD0 -_08112CF0: - bl sub_8023AD8 - ldr r0, _08112D30 @ =gBattleStringsTable - movs r1, 0x92 - lsls r1, 3 - adds r0, r1 - ldr r0, [r0] - bl StrCpyDecodeToDisplayedStringBattle - ldr r0, _08112D34 @ =gUnknown_03004210 - ldr r1, _08112D38 @ =gDisplayedStringBattle - movs r2, 0xF - str r2, [sp] - movs r2, 0x90 - movs r3, 0x2 - bl sub_8002EB0 - movs r0, 0x5 - bl PlaySE - ldr r1, _08112D28 @ =gTasks - mov r2, r8 - adds r0, r2, r7 - lsls r0, 3 - adds r0, r1 - ldrh r1, [r0, 0x1C] - strh r1, [r0, 0x18] - b _08112FD0 - .align 2, 0 -_08112D28: .4byte gTasks -_08112D2C: .4byte gMain -_08112D30: .4byte gBattleStringsTable -_08112D34: .4byte gUnknown_03004210 -_08112D38: .4byte gDisplayedStringBattle -_08112D3C: - ldr r0, _08112D78 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08112D4A - b _08112FD0 -_08112D4A: - ldr r0, _08112D7C @ =gPlayerParty - mov r3, r8 - adds r5, r3, r7 - lsls r5, 3 - adds r5, r6 - ldrh r1, [r5, 0x20] - lsls r1, 24 - lsrs r1, 24 - ldr r2, _08112D80 @ =gPlayerPartyCount - ldrb r2, [r2] - subs r2, 0x1 - lsls r2, 24 - lsrs r2, 24 - ldr r3, _08112D84 @ =CB2_EvolutionSceneLoadGraphics - ldr r4, _08112D88 @ =word_2024E82 - ldrh r4, [r4] - str r4, [sp] - bl sub_809D9F0 - ldrh r0, [r5, 0x18] - adds r0, 0x1 - strh r0, [r5, 0x18] - b _08112FD0 - .align 2, 0 -_08112D78: .4byte gPaletteFade -_08112D7C: .4byte gPlayerParty -_08112D80: .4byte gPlayerPartyCount -_08112D84: .4byte CB2_EvolutionSceneLoadGraphics -_08112D88: .4byte word_2024E82 -_08112D8C: - ldr r0, _08112DC0 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08112D9A - b _08112FD0 -_08112D9A: - ldr r1, [r4, 0x4] - ldr r0, _08112DC4 @ =CB2_EvolutionSceneUpdate - cmp r1, r0 - beq _08112DA4 - b _08112FD0 -_08112DA4: - bl sub_809FA30 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0x4 - bne _08112DCC - ldr r0, _08112DC8 @ =gTasks - mov r2, r8 - adds r1, r2, r7 - lsls r1, 3 - adds r1, r0 - movs r0, 0x9 - b _08112FCE - .align 2, 0 -_08112DC0: .4byte gPaletteFade -_08112DC4: .4byte CB2_EvolutionSceneUpdate -_08112DC8: .4byte gTasks -_08112DCC: - adds r1, r6, 0 - adds r1, 0xD - mov r0, r9 - bl GetMonData - lsls r0, 16 - lsrs r4, r0, 16 - adds r0, r4, 0 - bl IsHMMove2 - cmp r0, 0 - beq _08112E24 - ldr r0, _08112E10 @ =gBattleStringsTable - ldr r3, _08112E14 @ =0x000004cc - adds r0, r3 - ldr r0, [r0] - bl StrCpyDecodeToDisplayedStringBattle - ldr r0, _08112E18 @ =gUnknown_03004210 - ldr r1, _08112E1C @ =gDisplayedStringBattle - movs r2, 0xF - str r2, [sp] - movs r2, 0x90 - movs r3, 0x2 - bl sub_8002EB0 - ldr r1, _08112E20 @ =gTasks - mov r2, r8 - adds r0, r2, r7 - lsls r0, 3 - adds r0, r1 - movs r1, 0xB - strh r1, [r0, 0x18] - b _08112FD0 - .align 2, 0 -_08112E10: .4byte gBattleStringsTable -_08112E14: .4byte 0x000004cc -_08112E18: .4byte gUnknown_03004210 -_08112E1C: .4byte gDisplayedStringBattle -_08112E20: .4byte gTasks -_08112E24: - ldr r1, _08112E80 @ =gBattleTextBuff2 - movs r0, 0xFD - strb r0, [r1] - movs r0, 0x2 - strb r0, [r1, 0x1] - strb r4, [r1, 0x2] - lsrs r0, r4, 8 - strb r0, [r1, 0x3] - movs r0, 0xFF - strb r0, [r1, 0x4] - lsls r4, r6, 24 - lsrs r4, 24 - mov r0, r9 - adds r1, r4, 0 - bl RemoveMonPPBonus - ldr r0, _08112E84 @ =word_2024E82 - ldrh r1, [r0] - mov r0, r9 - adds r2, r4, 0 - bl SetMonMoveSlot - ldr r0, _08112E88 @ =gBattleStringsTable - movs r3, 0xCF - lsls r3, 2 - adds r0, r3 - ldr r0, [r0] - bl StrCpyDecodeToDisplayedStringBattle - ldr r0, _08112E8C @ =gUnknown_03004210 - ldr r1, _08112E90 @ =gDisplayedStringBattle - movs r2, 0xF - str r2, [sp] - movs r2, 0x90 - movs r3, 0x2 - bl sub_8002EB0 - ldr r0, _08112E94 @ =gTasks - mov r2, r8 - adds r1, r2, r7 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x18] - adds r0, 0x1 - b _08112FCE - .align 2, 0 -_08112E80: .4byte gBattleTextBuff2 -_08112E84: .4byte word_2024E82 -_08112E88: .4byte gBattleStringsTable -_08112E8C: .4byte gUnknown_03004210 -_08112E90: .4byte gDisplayedStringBattle -_08112E94: .4byte gTasks -_08112E98: - ldr r4, _08112ED8 @ =gUnknown_03004210 - ldrh r0, [r4, 0x16] - cmp r0, 0 - beq _08112EA2 - b _08112FD0 -_08112EA2: - bl IsSEPlaying - lsls r0, 24 - cmp r0, 0 - beq _08112EAE - b _08112FD0 -_08112EAE: - ldr r0, _08112EDC @ =gBattleStringsTable - ldr r0, [r0, 0x1C] - bl StrCpyDecodeToDisplayedStringBattle - ldr r1, _08112EE0 @ =gDisplayedStringBattle - movs r0, 0xF - str r0, [sp] - adds r0, r4, 0 - movs r2, 0x90 - movs r3, 0x2 - bl sub_8002EB0 - ldr r0, _08112EE4 @ =gTasks - mov r3, r8 - adds r1, r3, r7 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x18] - adds r0, 0x1 - b _08112FCE - .align 2, 0 -_08112ED8: .4byte gUnknown_03004210 -_08112EDC: .4byte gBattleStringsTable -_08112EE0: .4byte gDisplayedStringBattle -_08112EE4: .4byte gTasks -_08112EE8: - ldr r4, _08112F28 @ =gUnknown_03004210 - ldrh r0, [r4, 0x16] - cmp r0, 0 - bne _08112FD0 - bl IsSEPlaying - lsls r0, 24 - cmp r0, 0 - bne _08112FD0 - ldr r0, _08112F2C @ =gBattleStringsTable - movs r1, 0xD0 - lsls r1, 2 - adds r0, r1 - ldr r0, [r0] - bl StrCpyDecodeToDisplayedStringBattle - ldr r1, _08112F30 @ =gDisplayedStringBattle - movs r0, 0xF - str r0, [sp] - adds r0, r4, 0 - movs r2, 0x90 - movs r3, 0x2 - bl sub_8002EB0 - ldr r1, _08112F34 @ =gTasks - mov r2, r8 - adds r0, r2, r7 - lsls r0, 3 - adds r0, r1 - movs r1, 0x13 - strh r1, [r0, 0x8] - b _08112FD0 - .align 2, 0 -_08112F28: .4byte gUnknown_03004210 -_08112F2C: .4byte gBattleStringsTable -_08112F30: .4byte gDisplayedStringBattle -_08112F34: .4byte gTasks -_08112F38: - ldr r0, _08112F68 @ =gBattleStringsTable - ldr r0, [r0, 0x20] - bl StrCpyDecodeToDisplayedStringBattle - ldr r0, _08112F6C @ =gUnknown_03004210 - ldr r1, _08112F70 @ =gDisplayedStringBattle - movs r2, 0xF - str r2, [sp] - movs r2, 0x90 - movs r3, 0x2 - bl sub_8002EB0 - ldr r1, _08112F74 @ =gTasks - mov r3, r8 - adds r0, r3, r7 - lsls r0, 3 - adds r0, r1 - movs r2, 0 - movs r1, 0xA - strh r1, [r0, 0x1A] - strh r2, [r0, 0x1C] - movs r1, 0x3 - strh r1, [r0, 0x18] - b _08112FD0 - .align 2, 0 -_08112F68: .4byte gBattleStringsTable -_08112F6C: .4byte gUnknown_03004210 -_08112F70: .4byte gDisplayedStringBattle -_08112F74: .4byte gTasks -_08112F78: - ldr r0, _08112FA0 @ =gBattleStringsTable - ldr r0, [r0, 0x24] - bl StrCpyDecodeToDisplayedStringBattle - ldr r0, _08112FA4 @ =gUnknown_03004210 - ldr r1, _08112FA8 @ =gDisplayedStringBattle - movs r2, 0xF - str r2, [sp] - movs r2, 0x90 - movs r3, 0x2 - bl sub_8002EB0 - ldr r1, _08112FAC @ =gTasks - mov r2, r8 - adds r0, r2, r7 - lsls r0, 3 - adds r0, r1 -_08112F9A: - movs r1, 0xE - strh r1, [r0, 0x8] - b _08112FD0 - .align 2, 0 -_08112FA0: .4byte gBattleStringsTable -_08112FA4: .4byte gUnknown_03004210 -_08112FA8: .4byte gDisplayedStringBattle -_08112FAC: .4byte gTasks -_08112FB0: - ldr r0, _08112FE0 @ =gUnknown_03004210 - ldrh r0, [r0, 0x16] - cmp r0, 0 - bne _08112FD0 - bl IsSEPlaying - lsls r0, 24 - cmp r0, 0 - bne _08112FD0 - ldr r0, _08112FE4 @ =gTasks - mov r3, r8 - adds r1, r3, r7 - lsls r1, 3 - adds r1, r0 - movs r0, 0x5 -_08112FCE: - strh r0, [r1, 0x18] -_08112FD0: - add sp, 0x18 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08112FE0: .4byte gUnknown_03004210 -_08112FE4: .4byte gTasks - thumb_func_end Task_EvolutionScene - - thumb_func_start Task_TradeEvolutionScene -Task_TradeEvolutionScene: @ 8112FE8 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x18 - lsls r0, 24 - lsrs r7, r0, 24 - ldr r2, _0811302C @ =gTasks - lsls r1, r7, 2 - adds r1, r7 - lsls r1, 3 - adds r1, r2 - movs r3, 0xA - ldrsh r0, [r1, r3] - mov r8, r0 - movs r3, 0xC - ldrsh r0, [r1, r3] - lsls r0, 16 - mov r3, r8 - orrs r3, r0 - mov r8, r3 - movs r3, 0x8 - ldrsh r0, [r1, r3] - adds r6, r2, 0 - cmp r0, 0x11 - bls _08113020 - bl _08113B3A -_08113020: - lsls r0, 2 - ldr r1, _08113030 @ =_08113034 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0811302C: .4byte gTasks -_08113030: .4byte _08113034 - .align 2, 0 -_08113034: - .4byte _0811307C - .4byte _081130B8 - .4byte _081130DC - .4byte _0811310C - .4byte _0811314C - .4byte _0811318C - .4byte _081131C8 - .4byte _081131F4 - .4byte _0811322C - .4byte _08113248 - .4byte _08113274 - .4byte _081132A8 - .4byte _081132F8 - .4byte _081133A8 - .4byte _0811346C - .4byte _08113490 - .4byte _081134F8 - .4byte _08113538 -_0811307C: - ldr r4, _081130A8 @ =gStringVar4 - ldr r1, _081130AC @ =gUnknown_08400C4A - adds r0, r4, 0 - bl StringExpandPlaceholders - ldr r0, _081130B0 @ =gUnknown_03004828 - ldr r1, [r0] - adds r0, r1, 0x4 - adds r1, 0x34 - ldrb r2, [r1] - movs r1, 0xF - str r1, [sp] - adds r1, r4, 0 - movs r3, 0x2 - bl sub_8002EB0 - ldr r1, _081130B4 @ =gTasks - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - adds r0, r1 - b _08113298 - .align 2, 0 -_081130A8: .4byte gStringVar4 -_081130AC: .4byte gUnknown_08400C4A -_081130B0: .4byte gUnknown_03004828 -_081130B4: .4byte gTasks -_081130B8: - ldr r0, _081130D8 @ =gUnknown_03004828 - ldr r0, [r0] - ldrh r0, [r0, 0x1A] - cmp r0, 0 - beq _081130C6 - bl _08113B3A -_081130C6: - lsls r4, r7, 2 - adds r4, r7 - lsls r4, 3 - adds r4, r6 - ldrh r0, [r4, 0xE] - movs r1, 0 - bl PlayCry1 - b _081132E2 - .align 2, 0 -_081130D8: .4byte gUnknown_03004828 -_081130DC: - bl IsCryFinished - lsls r0, 24 - cmp r0, 0 - bne _081130EA - bl _08113B3A -_081130EA: - ldr r0, _08113104 @ =0x00000179 - bl m4aSongNumStop - movs r0, 0xBC - lsls r0, 1 - bl PlaySE - ldr r1, _08113108 @ =gTasks - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - adds r0, r1 - b _08113298 - .align 2, 0 -_08113104: .4byte 0x00000179 -_08113108: .4byte gTasks -_0811310C: - bl IsSEPlaying - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - beq _0811311C - bl _08113B3A -_0811311C: - ldr r0, _08113144 @ =0x00000179 - bl PlayBGM - ldr r1, _08113148 @ =gTasks - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - adds r0, r1 - ldrh r1, [r0, 0x8] - adds r1, 0x1 - strh r1, [r0, 0x8] - str r5, [sp] - movs r0, 0x1C - movs r1, 0x4 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - bl _08113B3A - .align 2, 0 -_08113144: .4byte 0x00000179 -_08113148: .4byte gTasks -_0811314C: - ldr r0, _08113180 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0811315C - bl _08113B3A -_0811315C: - movs r1, 0x80 - lsls r1, 19 - movs r2, 0x9A - lsls r2, 5 - adds r0, r2, 0 - strh r0, [r1] - movs r0, 0x11 - bl LaunchTask_PreEvoSparklesSet1 - ldr r1, _08113184 @ =gBattleCommunication - strb r0, [r1, 0x2] - ldr r1, _08113188 @ =gTasks - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - adds r0, r1 - b _08113298 - .align 2, 0 -_08113180: .4byte gPaletteFade -_08113184: .4byte gBattleCommunication -_08113188: .4byte gTasks -_0811318C: - ldr r4, _081131C0 @ =gBattleCommunication - ldrb r0, [r4, 0x2] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r6 - ldrb r0, [r1, 0x4] - cmp r0, 0 - beq _081131A2 - bl _08113B3A -_081131A2: - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - adds r0, r6 - ldrh r1, [r0, 0x8] - adds r1, 0x1 - strh r1, [r0, 0x8] - ldr r1, _081131C4 @ =0x02014800 - movs r0, 0x1 - strb r0, [r1, 0x3] - bl LaunchTask_PreEvoSparklesSet2 - strb r0, [r4, 0x2] - bl _08113B3A - .align 2, 0 -_081131C0: .4byte gBattleCommunication -_081131C4: .4byte 0x02014800 -_081131C8: - ldr r4, _081131EC @ =gBattleCommunication - ldrb r0, [r4, 0x2] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r6 - ldrb r0, [r1, 0x4] - cmp r0, 0 - beq _081131DE - bl _08113B3A -_081131DE: - ldr r1, _081131F0 @ =0x02014800 - ldrb r0, [r1] - ldrb r1, [r1, 0x1] - bl sub_8149E7C - strb r0, [r4, 0x2] - b _08113290 - .align 2, 0 -_081131EC: .4byte gBattleCommunication -_081131F0: .4byte 0x02014800 -_081131F4: - ldr r1, _08113224 @ =0x02014800 - ldrb r0, [r1, 0x3] - subs r0, 0x1 - strb r0, [r1, 0x3] - lsls r0, 24 - cmp r0, 0 - beq _08113206 - bl _08113B3A -_08113206: - movs r0, 0x3 - strb r0, [r1, 0x3] - ldr r0, _08113228 @ =gBattleCommunication - ldrb r1, [r0, 0x2] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r6 - ldrb r0, [r0, 0x4] - cmp r0, 0 - beq _08113220 - bl _08113B3A -_08113220: - b _08113290 - .align 2, 0 -_08113224: .4byte 0x02014800 -_08113228: .4byte gBattleCommunication -_0811322C: - bl LaunchTask_PostEvoSparklesSet1 - ldr r1, _08113240 @ =gBattleCommunication - strb r0, [r1, 0x2] - ldr r1, _08113244 @ =gTasks - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - adds r0, r1 - b _08113298 - .align 2, 0 -_08113240: .4byte gBattleCommunication -_08113244: .4byte gTasks -_08113248: - ldr r5, _08113270 @ =gBattleCommunication - ldrb r0, [r5, 0x2] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r6 - ldrb r0, [r1, 0x4] - cmp r0, 0 - beq _0811325E - bl _08113B3A -_0811325E: - lsls r4, r7, 2 - adds r4, r7 - lsls r4, 3 - adds r4, r6 - ldrh r0, [r4, 0x10] - bl LaunchTask_PostEvoSparklesSet2AndFlash_Trade - strb r0, [r5, 0x2] - b _081132E2 - .align 2, 0 -_08113270: .4byte gBattleCommunication -_08113274: - ldr r0, _081132A4 @ =gBattleCommunication - ldrb r1, [r0, 0x2] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r6 - ldrb r0, [r0, 0x4] - cmp r0, 0 - beq _0811328A - bl _08113B3A -_0811328A: - movs r0, 0x21 - bl PlaySE -_08113290: - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - adds r0, r6 -_08113298: - ldrh r1, [r0, 0x8] - adds r1, 0x1 - strh r1, [r0, 0x8] - bl _08113B3A - .align 2, 0 -_081132A4: .4byte gBattleCommunication -_081132A8: - bl IsSEPlaying - lsls r0, 24 - cmp r0, 0 - bne _081132B6 - bl _08113B3A -_081132B6: - ldr r0, _081132EC @ =gTasks - lsls r4, r7, 2 - adds r4, r7 - lsls r4, 3 - adds r4, r0 - ldrh r0, [r4, 0x10] - movs r1, 0 - bl PlayCry1 - ldr r0, _081132F0 @ =gPlttBufferUnfaded + 0x40 - ldr r1, _081132F4 @ =0x02009000 - movs r2, 0x60 - bl memcpy - movs r0, 0 - str r0, [sp] - movs r0, 0x1 - movs r1, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade -_081132E2: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - bl _08113B3A - .align 2, 0 -_081132EC: .4byte gTasks -_081132F0: .4byte gPlttBufferUnfaded + 0x40 -_081132F4: .4byte 0x02009000 -_081132F8: - bl IsCryFinished - lsls r0, 24 - cmp r0, 0 - bne _08113306 - bl _08113B3A -_08113306: - ldr r0, _08113390 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08113316 - bl _08113B3A -_08113316: - ldr r4, _08113394 @ =gStringVar4 - ldr r1, _08113398 @ =gUnknown_08400C60 - adds r0, r4, 0 - bl StringExpandPlaceholders - ldr r0, _0811339C @ =gUnknown_03004828 - ldr r1, [r0] - adds r0, r1, 0x4 - adds r1, 0x34 - ldrb r2, [r1] - movs r1, 0xF - str r1, [sp] - adds r1, r4, 0 - movs r3, 0x2 - bl sub_8002EB0 - ldr r0, _081133A0 @ =0x00000173 - bl PlayFanfare - ldr r2, _081133A4 @ =gTasks - lsls r1, r7, 2 - adds r1, r7 - lsls r1, 3 - adds r4, r1, r2 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - adds r2, r1 - adds r2, 0x10 - mov r0, r8 - movs r1, 0xB - bl SetMonData - mov r0, r8 - bl CalculateMonStats - ldrh r1, [r4, 0xE] - ldrh r2, [r4, 0x10] - mov r0, r8 - bl EvolutionRenameMon - ldrh r0, [r4, 0x10] - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x2 - bl GetNationalPokedexFlag - ldrh r0, [r4, 0x10] - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x3 - bl GetNationalPokedexFlag - movs r0, 0xE - bl IncrementGameStat - b _08113B3A - .align 2, 0 -_08113390: .4byte gPaletteFade -_08113394: .4byte gStringVar4 -_08113398: .4byte gUnknown_08400C60 -_0811339C: .4byte gUnknown_03004828 -_081133A0: .4byte 0x00000173 -_081133A4: .4byte gTasks -_081133A8: - ldr r0, _08113410 @ =gUnknown_03004828 - ldr r0, [r0] - ldrh r0, [r0, 0x1A] - cmp r0, 0 - beq _081133B4 - b _08113B3A -_081133B4: - bl IsFanfareTaskInactive - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _081133C2 - b _08113B3A -_081133C2: - ldr r1, _08113414 @ =gTasks - lsls r4, r7, 2 - adds r0, r4, r7 - lsls r0, 3 - adds r5, r0, r1 - ldrb r1, [r5, 0x14] - mov r0, r8 - bl sub_803B7C8 - lsls r0, 16 - lsrs r6, r0, 16 - mov r9, r4 - cmp r6, 0 - beq _08113434 - movs r3, 0x1E - ldrsh r2, [r5, r3] - cmp r2, 0 - bne _08113434 - ldrh r1, [r5, 0x12] - movs r0, 0x80 - orrs r0, r1 - strh r0, [r5, 0x12] - strh r2, [r5, 0x14] - strh r2, [r5, 0x18] - mov r0, r8 - movs r1, 0x2 - add r2, sp, 0x4 - bl GetMonData - ldr r0, _08113418 @ =gBattleTextBuff1 - add r1, sp, 0x4 - bl StringCopy10 - ldr r0, _0811341C @ =0x0000ffff - cmp r6, r0 - bne _08113420 - movs r0, 0x11 - strh r0, [r5, 0x8] - b _08113B3A - .align 2, 0 -_08113410: .4byte gUnknown_03004828 -_08113414: .4byte gTasks -_08113418: .4byte gBattleTextBuff1 -_0811341C: .4byte 0x0000ffff -_08113420: - ldr r0, _08113430 @ =0x0000fffe - cmp r6, r0 - bne _08113428 - b _08113B3A -_08113428: - movs r0, 0xF - strh r0, [r5, 0x8] - b _08113B3A - .align 2, 0 -_08113430: .4byte 0x0000fffe -_08113434: - ldr r0, _0811345C @ =0x00000179 - bl PlayBGM - ldr r0, _08113460 @ =gUnknown_03004828 - ldr r2, [r0] - adds r0, r2, 0x4 - ldr r1, _08113464 @ =gOtherText_LinkStandby2 - adds r2, 0x34 - ldrb r2, [r2] - movs r3, 0xF - str r3, [sp] - movs r3, 0x2 - bl sub_8002EB0 - ldr r0, _08113468 @ =gTasks - mov r2, r9 - adds r1, r2, r7 - lsls r1, 3 - adds r1, r0 - b _081134DC - .align 2, 0 -_0811345C: .4byte 0x00000179 -_08113460: .4byte gUnknown_03004828 -_08113464: .4byte gOtherText_LinkStandby2 -_08113468: .4byte gTasks -_0811346C: - ldr r0, _08113488 @ =gUnknown_03004828 - ldr r0, [r0] - ldrh r0, [r0, 0x1A] - cmp r0, 0 - beq _08113478 - b _08113B3A -_08113478: - adds r0, r7, 0 - bl DestroyTask - ldr r0, _0811348C @ =gUnknown_03005E94 - ldr r0, [r0] - bl SetMainCallback2 - b _08113B3A - .align 2, 0 -_08113488: .4byte gUnknown_03004828 -_0811348C: .4byte gUnknown_03005E94 -_08113490: - ldr r4, _081134E4 @ =gUnknown_03004828 - ldr r0, [r4] - ldrh r0, [r0, 0x1A] - cmp r0, 0 - beq _0811349C - b _08113B3A -_0811349C: - bl IsSEPlaying - lsls r0, 24 - cmp r0, 0 - beq _081134A8 - b _08113B3A -_081134A8: - bl sub_8024CEC - ldr r0, _081134E8 @ =0x0000016f - bl PlayFanfare - ldr r0, _081134EC @ =gBattleStringsTable - ldr r0, [r0, 0xC] - bl StrCpyDecodeToDisplayedStringBattle - ldr r2, [r4] - adds r0, r2, 0x4 - ldr r1, _081134F0 @ =gDisplayedStringBattle - adds r2, 0x34 - ldrb r2, [r2] - movs r3, 0xF - str r3, [sp] - movs r3, 0x2 - bl sub_8002EB0 - ldr r0, _081134F4 @ =gTasks - lsls r1, r7, 2 - adds r1, r7 - lsls r1, 3 - adds r1, r0 - movs r0, 0x40 - strh r0, [r1, 0x14] -_081134DC: - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - b _08113B3A - .align 2, 0 -_081134E4: .4byte gUnknown_03004828 -_081134E8: .4byte 0x0000016f -_081134EC: .4byte gBattleStringsTable -_081134F0: .4byte gDisplayedStringBattle -_081134F4: .4byte gTasks -_081134F8: - ldr r0, _08113530 @ =gUnknown_03004828 - ldr r0, [r0] - ldrh r0, [r0, 0x1A] - cmp r0, 0 - beq _08113504 - b _08113B3A -_08113504: - bl IsFanfareTaskInactive - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08113512 - b _08113B3A -_08113512: - ldr r0, _08113534 @ =gTasks - lsls r1, r7, 2 - adds r1, r7 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x14] - subs r0, 0x1 - strh r0, [r1, 0x14] - lsls r0, 16 - cmp r0, 0 - beq _0811352A - b _08113B3A -_0811352A: - movs r0, 0xD - strh r0, [r1, 0x8] - b _08113B3A - .align 2, 0 -_08113530: .4byte gUnknown_03004828 -_08113534: .4byte gTasks -_08113538: - lsls r1, r7, 2 - adds r0, r1, r7 - lsls r0, 3 - adds r0, r6 - movs r3, 0x18 - ldrsh r0, [r0, r3] - mov r9, r1 - cmp r0, 0xB - bls _0811354C - b _08113B3A -_0811354C: - lsls r0, 2 - ldr r1, _08113558 @ =_0811355C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08113558: .4byte _0811355C - .align 2, 0 -_0811355C: - .4byte _0811358C - .4byte _081135E4 - .4byte _08113638 - .4byte _08113682 - .4byte _0811371C - .4byte _0811387C - .4byte _081138CC - .4byte _081139E8 - .4byte _08113A3C - .4byte _08113A90 - .4byte _08113AD8 - .4byte _08113B18 -_0811358C: - ldr r4, _081135D4 @ =gUnknown_03004828 - ldr r0, [r4] - ldrh r0, [r0, 0x1A] - cmp r0, 0 - beq _08113598 - b _08113B3A -_08113598: - bl IsSEPlaying - lsls r0, 24 - cmp r0, 0 - beq _081135A4 - b _08113B3A -_081135A4: - bl sub_8024CEC - ldr r0, _081135D8 @ =gBattleStringsTable - ldr r0, [r0, 0x10] - bl StrCpyDecodeToDisplayedStringBattle - ldr r2, [r4] - adds r0, r2, 0x4 - ldr r1, _081135DC @ =gDisplayedStringBattle - adds r2, 0x34 - ldrb r2, [r2] - movs r3, 0xF - str r3, [sp] - movs r3, 0x2 - bl sub_8002EB0 - ldr r0, _081135E0 @ =gTasks - mov r2, r9 - adds r1, r2, r7 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x18] - adds r0, 0x1 - b _08113B38 - .align 2, 0 -_081135D4: .4byte gUnknown_03004828 -_081135D8: .4byte gBattleStringsTable -_081135DC: .4byte gDisplayedStringBattle -_081135E0: .4byte gTasks -_081135E4: - ldr r4, _08113628 @ =gUnknown_03004828 - ldr r0, [r4] - ldrh r0, [r0, 0x1A] - cmp r0, 0 - beq _081135F0 - b _08113B3A -_081135F0: - bl IsSEPlaying - lsls r0, 24 - cmp r0, 0 - beq _081135FC - b _08113B3A -_081135FC: - ldr r0, _0811362C @ =gBattleStringsTable - ldr r0, [r0, 0x14] - bl StrCpyDecodeToDisplayedStringBattle - ldr r2, [r4] - adds r0, r2, 0x4 - ldr r1, _08113630 @ =gDisplayedStringBattle - adds r2, 0x34 - ldrb r2, [r2] - movs r3, 0xF - str r3, [sp] - movs r3, 0x2 - bl sub_8002EB0 - ldr r0, _08113634 @ =gTasks - mov r3, r9 - adds r1, r3, r7 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x18] - adds r0, 0x1 - b _08113B38 - .align 2, 0 -_08113628: .4byte gUnknown_03004828 -_0811362C: .4byte gBattleStringsTable -_08113630: .4byte gDisplayedStringBattle -_08113634: .4byte gTasks -_08113638: - ldr r4, _081136FC @ =gUnknown_03004828 - ldr r0, [r4] - ldrh r0, [r0, 0x1A] - cmp r0, 0 - beq _08113644 - b _08113B3A -_08113644: - bl IsSEPlaying - lsls r0, 24 - cmp r0, 0 - bne _08113682 - ldr r0, _08113700 @ =gBattleStringsTable - ldr r0, [r0, 0x18] - bl StrCpyDecodeToDisplayedStringBattle - ldr r2, [r4] - adds r0, r2, 0x4 - ldr r1, _08113704 @ =gDisplayedStringBattle - adds r2, 0x34 - ldrb r2, [r2] - movs r3, 0xF - str r3, [sp] - movs r3, 0x2 - bl sub_8002EB0 - ldr r0, _08113708 @ =gTasks - mov r2, r9 - adds r1, r2, r7 - lsls r1, 3 - adds r1, r0 - movs r0, 0x5 - strh r0, [r1, 0x1A] - movs r0, 0x9 - strh r0, [r1, 0x1C] - ldrh r0, [r1, 0x18] - adds r0, 0x1 - strh r0, [r1, 0x18] -_08113682: - ldr r5, _081136FC @ =gUnknown_03004828 - ldr r0, [r5] - ldrh r0, [r0, 0x1A] - cmp r0, 0 - beq _0811368E - b _08113B3A -_0811368E: - bl IsSEPlaying - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0 - beq _0811369C - b _08113B3A -_0811369C: - ldr r0, [r5] - adds r0, 0x4 - movs r1, 0xD - str r1, [sp] - movs r1, 0x18 - movs r2, 0x8 - movs r3, 0x1D - bl DrawTextWindow - ldr r4, _0811370C @ =gBattleCommunication - strb r6, [r4, 0x1] - ldr r2, [r5] - adds r0, r2, 0x4 - ldr r1, _08113710 @ =gOtherText_YesNoAndPlayer - adds r2, 0x34 - ldrb r2, [r2] - adds r2, 0x80 - movs r3, 0x9 - str r3, [sp] - movs r3, 0x19 - bl InitWindow - ldr r0, [r5] - adds r0, 0x4 - bl sub_8002F44 - ldr r1, _08113714 @ =0x0000ffff - ldr r3, _08113718 @ =0x00002d9f - movs r0, 0x20 - str r0, [sp] - movs r0, 0 - movs r2, 0xC - bl sub_814A5C0 - bl sub_81150D8 - ldr r0, _08113708 @ =gTasks - mov r3, r9 - adds r1, r3, r7 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x18] - adds r0, 0x1 - movs r2, 0 - strh r0, [r1, 0x18] - strb r2, [r4, 0x1] - b _08113B3A - .align 2, 0 -_081136FC: .4byte gUnknown_03004828 -_08113700: .4byte gBattleStringsTable -_08113704: .4byte gDisplayedStringBattle -_08113708: .4byte gTasks -_0811370C: .4byte gBattleCommunication -_08113710: .4byte gOtherText_YesNoAndPlayer -_08113714: .4byte 0x0000ffff -_08113718: .4byte 0x00002d9f -_0811371C: - ldr r0, _081137CC @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08113742 - ldr r4, _081137D0 @ =gBattleCommunication - ldrb r0, [r4, 0x1] - cmp r0, 0 - beq _08113742 - movs r0, 0x5 - bl PlaySE - bl HBlankCB_TradeEvolutionScene - movs r0, 0 - strb r0, [r4, 0x1] - bl sub_81150D8 -_08113742: - ldr r0, _081137CC @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08113768 - ldr r4, _081137D0 @ =gBattleCommunication - ldrb r0, [r4, 0x1] - cmp r0, 0 - bne _08113768 - movs r0, 0x5 - bl PlaySE - bl HBlankCB_TradeEvolutionScene - movs r0, 0x1 - strb r0, [r4, 0x1] - bl sub_81150D8 -_08113768: - ldr r0, _081137CC @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0811380A - ldr r4, _081137D4 @ =gUnknown_03004828 - ldr r0, [r4] - adds r0, 0x4 - movs r1, 0xD - str r1, [sp] - movs r1, 0x18 - movs r2, 0x8 - movs r3, 0x1D - bl ZeroFillWindowRect - bl DestroyMenuCursor - ldr r0, _081137D8 @ =gBattleStringsTable - movs r1, 0x92 - lsls r1, 3 - adds r0, r1 - ldr r0, [r0] - bl StrCpyDecodeToDisplayedStringBattle - ldr r2, [r4] - adds r0, r2, 0x4 - ldr r1, _081137DC @ =gDisplayedStringBattle - adds r2, 0x34 - ldrb r2, [r2] - movs r3, 0xF - str r3, [sp] - movs r3, 0x2 - bl sub_8002EB0 - movs r0, 0x5 - bl PlaySE - ldr r0, _081137D0 @ =gBattleCommunication - ldrb r2, [r0, 0x1] - cmp r2, 0 - beq _081137E4 - ldr r0, _081137E0 @ =gTasks - mov r2, r9 - adds r1, r2, r7 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x1C] - strh r0, [r1, 0x18] - b _0811380A - .align 2, 0 -_081137CC: .4byte gMain -_081137D0: .4byte gBattleCommunication -_081137D4: .4byte gUnknown_03004828 -_081137D8: .4byte gBattleStringsTable -_081137DC: .4byte gDisplayedStringBattle -_081137E0: .4byte gTasks -_081137E4: - ldr r0, _08113868 @ =gTasks - mov r3, r9 - adds r1, r3, r7 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x1A] - strh r0, [r1, 0x18] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x5 - bne _0811380A - movs r0, 0x1 - negs r0, r0 - str r2, [sp] - movs r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade -_0811380A: - ldr r0, _0811386C @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _08113818 - b _08113B3A -_08113818: - ldr r4, _08113870 @ =gUnknown_03004828 - ldr r0, [r4] - adds r0, 0x4 - movs r1, 0xD - str r1, [sp] - movs r1, 0x18 - movs r2, 0x8 - movs r3, 0x1D - bl ZeroFillWindowRect - bl DestroyMenuCursor - ldr r0, _08113874 @ =gBattleStringsTable - movs r1, 0x92 - lsls r1, 3 - adds r0, r1 - ldr r0, [r0] - bl StrCpyDecodeToDisplayedStringBattle - ldr r2, [r4] - adds r0, r2, 0x4 - ldr r1, _08113878 @ =gDisplayedStringBattle - adds r2, 0x34 - ldrb r2, [r2] - movs r3, 0xF - str r3, [sp] - movs r3, 0x2 - bl sub_8002EB0 - movs r0, 0x5 - bl PlaySE - ldr r1, _08113868 @ =gTasks - mov r2, r9 - adds r0, r2, r7 - lsls r0, 3 - adds r0, r1 - ldrh r1, [r0, 0x1C] - strh r1, [r0, 0x18] - b _08113B3A - .align 2, 0 -_08113868: .4byte gTasks -_0811386C: .4byte gMain -_08113870: .4byte gUnknown_03004828 -_08113874: .4byte gBattleStringsTable -_08113878: .4byte gDisplayedStringBattle -_0811387C: - ldr r0, _081138B8 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0811388A - b _08113B3A -_0811388A: - ldr r0, _081138BC @ =gPlayerParty - mov r3, r9 - adds r5, r3, r7 - lsls r5, 3 - adds r5, r6 - ldrh r1, [r5, 0x20] - lsls r1, 24 - lsrs r1, 24 - ldr r2, _081138C0 @ =gPlayerPartyCount - ldrb r2, [r2] - subs r2, 0x1 - lsls r2, 24 - lsrs r2, 24 - ldr r3, _081138C4 @ =CB2_TradeEvolutionSceneLoadGraphics - ldr r4, _081138C8 @ =word_2024E82 - ldrh r4, [r4] - str r4, [sp] - bl sub_809D9F0 - ldrh r0, [r5, 0x18] - adds r0, 0x1 - strh r0, [r5, 0x18] - b _08113B3A - .align 2, 0 -_081138B8: .4byte gPaletteFade -_081138BC: .4byte gPlayerParty -_081138C0: .4byte gPlayerPartyCount -_081138C4: .4byte CB2_TradeEvolutionSceneLoadGraphics -_081138C8: .4byte word_2024E82 -_081138CC: - ldr r0, _08113900 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _081138DA - b _08113B3A -_081138DA: - ldr r0, _08113904 @ =gMain - ldr r1, [r0, 0x4] - ldr r0, _08113908 @ =CB2_TradeEvolutionSceneUpdate - cmp r1, r0 - beq _081138E6 - b _08113B3A -_081138E6: - bl sub_809FA30 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0x4 - bne _08113910 - ldr r0, _0811390C @ =gTasks - mov r2, r9 - adds r1, r2, r7 - lsls r1, 3 - adds r1, r0 - movs r0, 0x9 - b _08113B38 - .align 2, 0 -_08113900: .4byte gPaletteFade -_08113904: .4byte gMain -_08113908: .4byte CB2_TradeEvolutionSceneUpdate -_0811390C: .4byte gTasks -_08113910: - adds r1, r6, 0 - adds r1, 0xD - mov r0, r8 - bl GetMonData - lsls r0, 16 - lsrs r4, r0, 16 - adds r0, r4, 0 - bl IsHMMove2 - cmp r0, 0 - beq _08113970 - ldr r0, _0811395C @ =gBattleStringsTable - ldr r3, _08113960 @ =0x000004cc - adds r0, r3 - ldr r0, [r0] - bl StrCpyDecodeToDisplayedStringBattle - ldr r0, _08113964 @ =gUnknown_03004828 - ldr r2, [r0] - adds r0, r2, 0x4 - ldr r1, _08113968 @ =gDisplayedStringBattle - adds r2, 0x34 - ldrb r2, [r2] - movs r3, 0xF - str r3, [sp] - movs r3, 0x2 - bl sub_8002EB0 - ldr r1, _0811396C @ =gTasks - mov r2, r9 - adds r0, r2, r7 - lsls r0, 3 - adds r0, r1 - movs r1, 0xB - strh r1, [r0, 0x18] - b _08113B3A - .align 2, 0 -_0811395C: .4byte gBattleStringsTable -_08113960: .4byte 0x000004cc -_08113964: .4byte gUnknown_03004828 -_08113968: .4byte gDisplayedStringBattle -_0811396C: .4byte gTasks -_08113970: - ldr r1, _081139D0 @ =gBattleTextBuff2 - movs r0, 0xFD - strb r0, [r1] - movs r0, 0x2 - strb r0, [r1, 0x1] - strb r4, [r1, 0x2] - lsrs r0, r4, 8 - strb r0, [r1, 0x3] - movs r0, 0xFF - strb r0, [r1, 0x4] - lsls r4, r6, 24 - lsrs r4, 24 - mov r0, r8 - adds r1, r4, 0 - bl RemoveMonPPBonus - ldr r0, _081139D4 @ =word_2024E82 - ldrh r1, [r0] - mov r0, r8 - adds r2, r4, 0 - bl SetMonMoveSlot - ldr r0, _081139D8 @ =gBattleStringsTable - movs r3, 0xCF - lsls r3, 2 - adds r0, r3 - ldr r0, [r0] - bl StrCpyDecodeToDisplayedStringBattle - ldr r0, _081139DC @ =gUnknown_03004828 - ldr r2, [r0] - adds r0, r2, 0x4 - ldr r1, _081139E0 @ =gDisplayedStringBattle - adds r2, 0x34 - ldrb r2, [r2] - movs r3, 0xF - str r3, [sp] - movs r3, 0x2 - bl sub_8002EB0 - ldr r0, _081139E4 @ =gTasks - mov r2, r9 - adds r1, r2, r7 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x18] - adds r0, 0x1 - b _08113B38 - .align 2, 0 -_081139D0: .4byte gBattleTextBuff2 -_081139D4: .4byte word_2024E82 -_081139D8: .4byte gBattleStringsTable -_081139DC: .4byte gUnknown_03004828 -_081139E0: .4byte gDisplayedStringBattle -_081139E4: .4byte gTasks -_081139E8: - ldr r4, _08113A2C @ =gUnknown_03004828 - ldr r0, [r4] - ldrh r0, [r0, 0x1A] - cmp r0, 0 - beq _081139F4 - b _08113B3A -_081139F4: - bl IsSEPlaying - lsls r0, 24 - cmp r0, 0 - beq _08113A00 - b _08113B3A -_08113A00: - ldr r0, _08113A30 @ =gBattleStringsTable - ldr r0, [r0, 0x1C] - bl StrCpyDecodeToDisplayedStringBattle - ldr r2, [r4] - adds r0, r2, 0x4 - ldr r1, _08113A34 @ =gDisplayedStringBattle - adds r2, 0x34 - ldrb r2, [r2] - movs r3, 0xF - str r3, [sp] - movs r3, 0x2 - bl sub_8002EB0 - ldr r0, _08113A38 @ =gTasks - mov r3, r9 - adds r1, r3, r7 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x18] - adds r0, 0x1 - b _08113B38 - .align 2, 0 -_08113A2C: .4byte gUnknown_03004828 -_08113A30: .4byte gBattleStringsTable -_08113A34: .4byte gDisplayedStringBattle -_08113A38: .4byte gTasks -_08113A3C: - ldr r4, _08113A80 @ =gUnknown_03004828 - ldr r0, [r4] - ldrh r0, [r0, 0x1A] - cmp r0, 0 - bne _08113B3A - bl IsSEPlaying - lsls r0, 24 - cmp r0, 0 - bne _08113B3A - ldr r0, _08113A84 @ =gBattleStringsTable - movs r1, 0xD0 - lsls r1, 2 - adds r0, r1 - ldr r0, [r0] - bl StrCpyDecodeToDisplayedStringBattle - ldr r2, [r4] - adds r0, r2, 0x4 - ldr r1, _08113A88 @ =gDisplayedStringBattle - adds r2, 0x34 - ldrb r2, [r2] - movs r4, 0xF - str r4, [sp] - movs r3, 0x2 - bl sub_8002EB0 - ldr r1, _08113A8C @ =gTasks - mov r2, r9 - adds r0, r2, r7 - lsls r0, 3 - adds r0, r1 - strh r4, [r0, 0x8] - b _08113B3A - .align 2, 0 -_08113A80: .4byte gUnknown_03004828 -_08113A84: .4byte gBattleStringsTable -_08113A88: .4byte gDisplayedStringBattle -_08113A8C: .4byte gTasks -_08113A90: - ldr r0, _08113AC8 @ =gBattleStringsTable - ldr r0, [r0, 0x20] - bl StrCpyDecodeToDisplayedStringBattle - ldr r0, _08113ACC @ =gUnknown_03004828 - ldr r2, [r0] - adds r0, r2, 0x4 - ldr r1, _08113AD0 @ =gDisplayedStringBattle - adds r2, 0x34 - ldrb r2, [r2] - movs r3, 0xF - str r3, [sp] - movs r3, 0x2 - bl sub_8002EB0 - ldr r1, _08113AD4 @ =gTasks - mov r3, r9 - adds r0, r3, r7 - lsls r0, 3 - adds r0, r1 - movs r2, 0 - movs r1, 0xA - strh r1, [r0, 0x1A] - strh r2, [r0, 0x1C] - movs r1, 0x3 - strh r1, [r0, 0x18] - b _08113B3A - .align 2, 0 -_08113AC8: .4byte gBattleStringsTable -_08113ACC: .4byte gUnknown_03004828 -_08113AD0: .4byte gDisplayedStringBattle -_08113AD4: .4byte gTasks -_08113AD8: - ldr r0, _08113B08 @ =gBattleStringsTable - ldr r0, [r0, 0x24] - bl StrCpyDecodeToDisplayedStringBattle - ldr r0, _08113B0C @ =gUnknown_03004828 - ldr r2, [r0] - adds r0, r2, 0x4 - ldr r1, _08113B10 @ =gDisplayedStringBattle - adds r2, 0x34 - ldrb r2, [r2] - movs r3, 0xF - str r3, [sp] - movs r3, 0x2 - bl sub_8002EB0 - ldr r1, _08113B14 @ =gTasks - mov r2, r9 - adds r0, r2, r7 - lsls r0, 3 - adds r0, r1 - movs r1, 0xD - strh r1, [r0, 0x8] - b _08113B3A - .align 2, 0 -_08113B08: .4byte gBattleStringsTable -_08113B0C: .4byte gUnknown_03004828 -_08113B10: .4byte gDisplayedStringBattle -_08113B14: .4byte gTasks -_08113B18: - ldr r0, _08113B48 @ =gUnknown_03004828 - ldr r0, [r0] - ldrh r0, [r0, 0x1A] - cmp r0, 0 - bne _08113B3A - bl IsSEPlaying - lsls r0, 24 - cmp r0, 0 - bne _08113B3A - ldr r0, _08113B4C @ =gTasks - mov r3, r9 - adds r1, r3, r7 - lsls r1, 3 - adds r1, r0 - movs r0, 0x5 -_08113B38: - strh r0, [r1, 0x18] -_08113B3A: - add sp, 0x18 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08113B48: .4byte gUnknown_03004828 -_08113B4C: .4byte gTasks - thumb_func_end Task_TradeEvolutionScene - thumb_func_start unref_sub_8113B50 unref_sub_8113B50: @ 8113B50 push {r4-r7,lr} diff --git a/src/evolution_scene.c b/src/evolution_scene.c index dff128236..77054c233 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -21,6 +21,8 @@ #include "rom4.h" #include "battle_message.h" #include "pokemon_summary_screen.h" +#include "menu_cursor.h" +#include "strings2.h" struct EvoInfo { @@ -36,7 +38,10 @@ void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies); void sub_8024CEC(void); void sub_8023A80(void); void sub_802BC6C(void); +void sub_8023AD8(void); +void sub_81150D8(void); void nullsub_6(void); +bool32 IsHMMove2(u16 move); extern struct Window gUnknown_03004210; extern u16 gUnknown_030042A4; @@ -58,6 +63,8 @@ extern struct SpriteTemplate gUnknown_02024E8C; extern u8 gUnk_2009000[]; // won't match if I 'ewram' it extern bool8 gAffineAnimsDisabled; extern MainCallback gUnknown_03005E94; +extern u8 gDisplayedStringBattle[]; +extern u8 gBattleTextBuff2[]; extern u8 gBattleCommunication[]; #define sEvoCursorPos gBattleCommunication[1] // when learning a new move @@ -72,6 +79,7 @@ void VBlankCB_TradeEvolutionScene(void); void HBlankCB_EvolutionScene(void); void CB2_EvolutionSceneUpdate(void); void CB2_TradeEvolutionSceneUpdate(void); +void HBlankCB_TradeEvolutionScene(void); void CB2_BeginEvolutionScene(void) { @@ -87,14 +95,14 @@ void CB2_BeginEvolutionScene(void) #define tCanStop data[5] // in first fast data[5] only checks that #define tBits data[5] // in the second task, it works as a bitfield #define tData6 data[6] -#define tData8 data[8] +#define tLearnMoveState data[8] #define tData9 data[9] #define tData10 data[10] #define tEvoWasStopped data[11] #define tPartyID data[12] #define TASK_BIT_CAN_STOP 0x1 -#define TASK_BIT_x80 0x80 +#define TASK_BIT_LEARN_MOVE 0x80 void Task_BeginEvolutionScene(u8 taskID) { @@ -501,10 +509,11 @@ extern const u8 gUnknown_08400C8D[]; void Task_EvolutionScene(u8 taskID) { + u32 var; struct Pokemon* mon = (struct Pokemon*)(gTasks[taskID].tMonPtrHI | (gTasks[taskID].tMonPtrLO << 0x10)); // check if B Button was held, so the evolution gets stopped - if (gMain.newAndRepeatedKeys == B_BUTTON && gTasks[taskID].tState != 8 && gTasks[taskID].tBits & TASK_BIT_CAN_STOP) + if (gMain.heldKeys == B_BUTTON && gTasks[taskID].tState == 8 && gTasks[taskID].tBits & TASK_BIT_CAN_STOP) { gTasks[taskID].tState = 16; if (gTasks[sEvoGraphicsTaskID].isActive) @@ -517,7 +526,7 @@ void Task_EvolutionScene(u8 taskID) gSprites[sEvoInfo.preEvoSpriteID].invisible = 0; gTasks[taskID].tState++; break; - case 1: + case 1: // print 'whoa, poke is evolving!!!' msg if (!gPaletteFade.active) { StringExpandPlaceholders(gStringVar4, gUnknown_08400C4A); @@ -525,36 +534,36 @@ void Task_EvolutionScene(u8 taskID) gTasks[taskID].tState++; } break; - case 2: + case 2: // wait for string, play cry if (gUnknown_03004210.state == 0) { PlayCry1(gTasks[taskID].tPreEvoSpecies, 0); gTasks[taskID].tState++; } break; - case 3: - if (IsCryFinished) + case 3: // wait for cry, play tu du SE + if (IsCryFinished()) { PlaySE(BGM_ME_SHINKA); gTasks[taskID].tState++; } break; - case 4: - if (!IsSEPlaying) + case 4: // play evolution music and fade screen black + if (!IsSEPlaying()) { PlayNewMapMusic(BGM_SHINKA); gTasks[taskID].tState++; BeginNormalPaletteFade(0x1C, 4, 0, 0x10, 0); } break; - case 5: + case 5: // after screen fade, preapre evo sparkles if (!gPaletteFade.active) { sEvoGraphicsTaskID = LaunchTask_PreEvoSparklesSet1(17); gTasks[taskID].tState++; } break; - case 6: + case 6: // another set of evo sparkles if (!gTasks[sEvoGraphicsTaskID].isActive) { gTasks[taskID].tState++; @@ -562,14 +571,14 @@ void Task_EvolutionScene(u8 taskID) sEvoGraphicsTaskID = LaunchTask_PreEvoSparklesSet2(); } break; - case 7: + case 7: // launch task that flashes pre evo with post evo sprites if (!gTasks[sEvoGraphicsTaskID].isActive) { sEvoGraphicsTaskID = sub_8149E7C(sEvoInfo.preEvoSpriteID, sEvoInfo.postEvoSpriteID); gTasks[taskID].tState++; } break; - case 8: + case 8: // wait for the above task to finish if (--sEvoInfo.field_3 == 0) { sEvoInfo.field_3 = 3; @@ -577,7 +586,7 @@ void Task_EvolutionScene(u8 taskID) gTasks[taskID].tState++; } break; - case 9: + case 9: // post evo sparkles sEvoGraphicsTaskID = LaunchTask_PostEvoSparklesSet1(); gTasks[taskID].tState++; break; @@ -588,25 +597,25 @@ void Task_EvolutionScene(u8 taskID) gTasks[taskID].tState++; } break; - case 11: + case 11: // play tu du sound after evolution if (!gTasks[sEvoGraphicsTaskID].isActive) { PlaySE(SE_EXP); gTasks[taskID].tState++; } break; - case 12: - if (!IsSEPlaying) + case 12: // play poke cry after evolution and return screed to pre-fade state + if (IsSEPlaying()) { m4aMPlayAllStop(); PlayCry1(gTasks[taskID].tPostEvoSpecies, 0); memcpy(&gPlttBufferUnfaded[0x20], gUnk_2009000, 0x60); - BeginNormalPaletteFade(0x1C, 0, 0, 0x10, 0); + BeginNormalPaletteFade(0x1C, 0, 0x10, 0, 0); gTasks[taskID].tState++; } break; - case 13: - if (IsCryFinished && !gPaletteFade.active) + case 13: // congratulations string and rename prompt + if (IsCryFinished() && !gPaletteFade.active) { StringExpandPlaceholders(gStringVar4, gUnknown_08400C60); sub_8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15); @@ -620,27 +629,28 @@ void Task_EvolutionScene(u8 taskID) IncrementGameStat(14); } break; - case 14: + case 14: // check if it wants to learn a new move if (gUnknown_03004210.state == 0) { - u16 var = sub_803B7C8(mon, gTasks[taskID].tData6); + var = sub_803B7C8(mon, gTasks[taskID].tData6); if (var != 0 && !gTasks[taskID].tEvoWasStopped) { - u8 text[11]; + u8 text[20]; - gTasks[taskID].tBits |= TASK_BIT_x80; + sub_8053E90(); + gTasks[taskID].tBits |= TASK_BIT_LEARN_MOVE; gTasks[taskID].tData6 = 0; - gTasks[taskID].tData8 = 0; + gTasks[taskID].tLearnMoveState = 0; GetMonData(mon, MON_DATA_NICKNAME, text); StringCopy10(gBattleTextBuff1, text); - if (var == 0xFFFF) + if (var == 0xFFFF) // no place to learn it gTasks[taskID].tState = 21; - else if (var == 0xFFFE) + else if (var == 0xFFFE) // it already knows that move break; else - gTasks[taskID].tState = 19; + gTasks[taskID].tState = 19; // has less than 4 moves, so it's been learned } - else + else // no move to learn { BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); gTasks[taskID].tState++; @@ -650,7 +660,7 @@ void Task_EvolutionScene(u8 taskID) case 15: // task has finished, return if (!gPaletteFade.active) { - if (!(gTasks[taskID].tBits & TASK_BIT_x80)) + if (!(gTasks[taskID].tBits & TASK_BIT_LEARN_MOVE)) sub_8053E90(); if (!gTasks[taskID].tEvoWasStopped) CreateShedinja(gTasks[taskID].tPreEvoSpecies, mon); @@ -658,7 +668,7 @@ void Task_EvolutionScene(u8 taskID) SetMainCallback2(gUnknown_03005E94); } break; - case 16: // evolution has been canceled + case 16: // evolution has been canceled, stop music and re-fade palette if (!gTasks[sEvoGraphicsTaskID].isActive) { m4aMPlayAllStop(); @@ -674,7 +684,7 @@ void Task_EvolutionScene(u8 taskID) } break; case 18: // after the cry, print the string 'WHOA IT DID NOT EVOLVE!!!' - if (IsCryFinished) + if (IsCryFinished()) { StringExpandPlaceholders(gStringVar4, gUnknown_08400C8D); sub_8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15); @@ -682,39 +692,39 @@ void Task_EvolutionScene(u8 taskID) gTasks[taskID].tState = 14; } break; - case 19: // yay, your poke evolved so it would be nice to print a msg that says it + case 19: // pokemon learned a new move, print string and play a fanfare if (gUnknown_03004210.state == 0 && !IsSEPlaying()) { sub_8024CEC(); PlayFanfare(BGM_FANFA1); StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[3]); - sub_8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15); + sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); gTasks[taskID].tData6 = 0x40; gTasks[taskID].tState++; } break; - case 20: + case 20: // wait a bit and check if can learn another move if (gUnknown_03004210.state == 0 && !IsSEPlaying() && --gTasks[taskID].tData6 == 0) gTasks[taskID].tState = 14; break; case 21: // try to learn a new move - switch (gTasks[taskID].tData8) + switch (gTasks[taskID].tLearnMoveState) { case 0: if (gUnknown_03004210.state == 0 && !IsSEPlaying()) { sub_8024CEC(); StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[4]); - sub_8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15); - gTasks[taskID].tData8++; + sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + gTasks[taskID].tLearnMoveState++; } break; case 1: if (gUnknown_03004210.state == 0 && !IsSEPlaying()) { StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[5]); - sub_8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15); - gTasks[taskID].tData8++; + sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + gTasks[taskID].tLearnMoveState++; } break; case 2: @@ -723,16 +733,16 @@ void Task_EvolutionScene(u8 taskID) if (!IsSEPlaying()) { StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[6]); - sub_8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15); + sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); gTasks[taskID].tData9 = 5; gTasks[taskID].tData10 = 9; - gTasks[taskID].tData8++; + gTasks[taskID].tLearnMoveState++; } case 3: if (gUnknown_03004210.state == 0 && !IsSEPlaying()) { sub_8023A80(); - gTasks[taskID].tData8++; + gTasks[taskID].tLearnMoveState++; sEvoCursorPos = 0; sub_802BC6C(); } @@ -754,24 +764,26 @@ void Task_EvolutionScene(u8 taskID) } if (gMain.newKeys & A_BUTTON) { + sub_8023AD8(); StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[292]); - sub_8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15); + sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); PlaySE(SE_SELECT); if (sEvoCursorPos != 0) - gTasks[taskID].tData8 = gTasks[taskID].tData10; + gTasks[taskID].tLearnMoveState = gTasks[taskID].tData10; else { - gTasks[taskID].tData8 = gTasks[taskID].tData9; - if (gTasks[taskID].tData8 == 5) + gTasks[taskID].tLearnMoveState = gTasks[taskID].tData9; + if (gTasks[taskID].tLearnMoveState == 5) BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); } } if (gMain.newKeys & B_BUTTON) { + sub_8023AD8(); StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[292]); - sub_8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15); + sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); PlaySE(SE_SELECT); - gTasks[taskID].tData8 = gTasks[taskID].tData10; + gTasks[taskID].tLearnMoveState = gTasks[taskID].tData10; } break; case 5: @@ -780,19 +792,391 @@ void Task_EvolutionScene(u8 taskID) sub_809D9F0(gPlayerParty, gTasks[taskID].tPartyID, gPlayerPartyCount - 1, CB2_EvolutionSceneLoadGraphics, word_2024E82); - gTasks[taskID].tData8++; + gTasks[taskID].tLearnMoveState++; } break; case 6: if (!gPaletteFade.active && gMain.callback2 == CB2_EvolutionSceneUpdate) { - if (sub_809FA30() == 4) - gTasks[taskID].tData8 = 9; + var = sub_809FA30(); // moveID + if (var == 4) + gTasks[taskID].tLearnMoveState = 9; else { + u16 move = GetMonData(mon, var + MON_DATA_MOVE1); + if (IsHMMove2(move)) + { + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[307]); + sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + gTasks[taskID].tLearnMoveState = 11; + } + else + { + gBattleTextBuff2[0] = 0xFD; + gBattleTextBuff2[1] = 2; + gBattleTextBuff2[2] = move; + gBattleTextBuff2[3] = (move & 0xFF00) >> 8; + gBattleTextBuff2[4] = EOS; + RemoveMonPPBonus(mon, var); + SetMonMoveSlot(mon, word_2024E82, var); + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[207]); + sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + gTasks[taskID].tLearnMoveState++; + } + } + } + break; + case 7: + if (gUnknown_03004210.state == 0 && !IsSEPlaying()) + { + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[7]); + sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + gTasks[taskID].tLearnMoveState++; + } + break; + case 8: + if (gUnknown_03004210.state == 0 && !IsSEPlaying()) + { + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[208]); + sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + gTasks[taskID].tState = 19; + } + break; + case 9: + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[8]); + sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + gTasks[taskID].tData9 = 10; + gTasks[taskID].tData10 = 0; + gTasks[taskID].tLearnMoveState = 3; + break; + case 10: + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[9]); + sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + gTasks[taskID].tState = 14; + break; + case 11: + if (gUnknown_03004210.state == 0 && !IsSEPlaying()) + gTasks[taskID].tLearnMoveState = 5; + break; + } + break; + } +} +void Task_TradeEvolutionScene(u8 taskID) +{ + u32 var; + struct Pokemon* mon = (struct Pokemon*)(gTasks[taskID].tMonPtrHI | (gTasks[taskID].tMonPtrLO << 0x10)); + + switch (gTasks[taskID].tState) + { + case 0: + StringExpandPlaceholders(gStringVar4, gUnknown_08400C4A); + sub_8002EB0(&gUnknown_03004828->field_4, gStringVar4, gUnknown_03004828->field_34, 2, 15); + gTasks[taskID].tState++; + break; + case 1: + if (gUnknown_03004828->field_4.state == 0) + { + PlayCry1(gTasks[taskID].tPreEvoSpecies, 0); + gTasks[taskID].tState++; + } + break; + case 2: + if (IsCryFinished()) + { + m4aSongNumStop(BGM_SHINKA); + PlaySE(BGM_ME_SHINKA); + gTasks[taskID].tState++; + } + break; + case 3: + if (!IsSEPlaying()) + { + PlayBGM(BGM_SHINKA); + gTasks[taskID].tState++; + BeginNormalPaletteFade(0x1C, 4, 0, 0x10, 0); + } + break; + case 4: + if (!gPaletteFade.active) + { + REG_DISPCNT = DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_1D_MAP; + sEvoGraphicsTaskID = LaunchTask_PreEvoSparklesSet1(17); + gTasks[taskID].tState++; + } + break; + case 5: + if (!gTasks[sEvoGraphicsTaskID].isActive) + { + gTasks[taskID].tState++; + sEvoInfo.field_3 = 1; + sEvoGraphicsTaskID = LaunchTask_PreEvoSparklesSet2(); + } + break; + case 6: + if (!gTasks[sEvoGraphicsTaskID].isActive) + { + sEvoGraphicsTaskID = sub_8149E7C(sEvoInfo.preEvoSpriteID, sEvoInfo.postEvoSpriteID); + gTasks[taskID].tState++; + } + break; + case 7: + if (--sEvoInfo.field_3 == 0) + { + sEvoInfo.field_3 = 3; + if (!gTasks[sEvoGraphicsTaskID].isActive) + gTasks[taskID].tState++; + } + break; + case 8: + sEvoGraphicsTaskID = LaunchTask_PostEvoSparklesSet1(); + gTasks[taskID].tState++; + break; + case 9: + if (!gTasks[sEvoGraphicsTaskID].isActive) + { + sEvoGraphicsTaskID = LaunchTask_PostEvoSparklesSet2AndFlash_Trade(gTasks[taskID].tPostEvoSpecies); + gTasks[taskID].tState++; + } + break; + case 10: + if (!gTasks[sEvoGraphicsTaskID].isActive) + { + PlaySE(SE_EXP); + gTasks[taskID].tState++; + } + break; + case 11: + if (IsSEPlaying()) + { + PlayCry1(gTasks[taskID].tPostEvoSpecies, 0); + memcpy(&gPlttBufferUnfaded[0x20], gUnk_2009000, 0x60); + BeginNormalPaletteFade(1, 0, 0x10, 0, 0); + gTasks[taskID].tState++; + } + break; + case 12: + if (IsCryFinished() && !gPaletteFade.active) + { + StringExpandPlaceholders(gStringVar4, gUnknown_08400C60); + sub_8002EB0(&gUnknown_03004828->field_4, gStringVar4, gUnknown_03004828->field_34, 2, 15); + PlayFanfare(BGM_FANFA5); + gTasks[taskID].tState++; + SetMonData(mon, MON_DATA_SPECIES, (void*)(&gTasks[taskID].tPostEvoSpecies)); + CalculateMonStats(mon); + EvolutionRenameMon(mon, gTasks[taskID].tPreEvoSpecies, gTasks[taskID].tPostEvoSpecies); + GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskID].tPostEvoSpecies), 2); + GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskID].tPostEvoSpecies), 3); + IncrementGameStat(14); + } + break; + case 13: + if (gUnknown_03004828->field_4.state == 0 && IsFanfareTaskInactive() == TRUE) + { + var = sub_803B7C8(mon, gTasks[taskID].tData6); + if (var != 0 && !gTasks[taskID].tEvoWasStopped) + { + u8 text[20]; + + gTasks[taskID].tBits |= TASK_BIT_LEARN_MOVE; + gTasks[taskID].tData6 = 0; + gTasks[taskID].tLearnMoveState = 0; + GetMonData(mon, MON_DATA_NICKNAME, text); + StringCopy10(gBattleTextBuff1, text); + if (var == 0xFFFF) + gTasks[taskID].tState = 17; + else if (var == 0xFFFE) + break; + else + gTasks[taskID].tState = 15; + } + else + { + PlayBGM(BGM_SHINKA); + sub_8002EB0(&gUnknown_03004828->field_4, gOtherText_LinkStandby2, gUnknown_03004828->field_34, 2, 15); + gTasks[taskID].tState++; + } + } + break; + case 14: + if (gUnknown_03004828->field_4.state == 0) + { + DestroyTask(taskID); + SetMainCallback2(gUnknown_03005E94); + } + break; + case 15: + if (gUnknown_03004828->field_4.state == 0 && !IsSEPlaying()) + { + sub_8024CEC(); + PlayFanfare(BGM_FANFA1); + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[3]); + sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15); + gTasks[taskID].tData6 = 0x40; + gTasks[taskID].tState++; + } + break; + case 16: + if (gUnknown_03004828->field_4.state == 0 && IsFanfareTaskInactive() == TRUE && --gTasks[taskID].tData6 == 0) + gTasks[taskID].tState = 13; + break; + case 17: + switch (gTasks[taskID].tLearnMoveState) + { + case 0: + if (gUnknown_03004828->field_4.state == 0 && !IsSEPlaying()) + { + sub_8024CEC(); + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[4]); + sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15); + gTasks[taskID].tLearnMoveState++; + } + break; + case 1: + if (gUnknown_03004828->field_4.state == 0 && !IsSEPlaying()) + { + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[5]); + sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15); + gTasks[taskID].tLearnMoveState++; + } + break; + case 2: + if (gUnknown_03004828->field_4.state != 0) + break; + if (!IsSEPlaying()) + { + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[6]); + sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15); + gTasks[taskID].tData9 = 5; + gTasks[taskID].tData10 = 9; + gTasks[taskID].tLearnMoveState++; + } + case 3: + if (gUnknown_03004828->field_4.state == 0 && !IsSEPlaying()) + { + DrawTextWindow(&gUnknown_03004828->field_4, 24, 8, 29, 13); + sEvoCursorPos = 0; + InitWindow(&gUnknown_03004828->field_4, gOtherText_YesNoAndPlayer, gUnknown_03004828->field_34 + 128, 25, 9); + sub_8002F44(&gUnknown_03004828->field_4); + sub_814A5C0(0, 0xFFFF, 0xC, 0x2D9F, 0x20); + sub_81150D8(); + gTasks[taskID].tLearnMoveState++; + sEvoCursorPos = 0; + } + break; + case 4: + if (gMain.newKeys & DPAD_UP && sEvoCursorPos != 0) + { + PlaySE(SE_SELECT); + HBlankCB_TradeEvolutionScene(); + sEvoCursorPos = 0; + sub_81150D8(); + } + if (gMain.newKeys & DPAD_DOWN && sEvoCursorPos == 0) + { + PlaySE(SE_SELECT); + HBlankCB_TradeEvolutionScene(); + sEvoCursorPos = 1; + sub_81150D8(); + } + if (gMain.newKeys & A_BUTTON) + { + ZeroFillWindowRect(&gUnknown_03004828->field_4, 0x18, 8, 0x1D, 0xD); + DestroyMenuCursor(); + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[292]); + sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15); + PlaySE(SE_SELECT); + if (sEvoCursorPos != 0) + gTasks[taskID].tLearnMoveState = gTasks[taskID].tData10; + else + { + gTasks[taskID].tLearnMoveState = gTasks[taskID].tData9; + if (gTasks[taskID].tLearnMoveState == 5) + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); } } + if (gMain.newKeys & B_BUTTON) + { + ZeroFillWindowRect(&gUnknown_03004828->field_4, 0x18, 8, 0x1D, 0xD); + DestroyMenuCursor(); + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[292]); + sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15); + PlaySE(SE_SELECT); + gTasks[taskID].tLearnMoveState = gTasks[taskID].tData10; + } + break; + case 5: + if (!gPaletteFade.active) + { + sub_809D9F0(gPlayerParty, gTasks[taskID].tPartyID, + gPlayerPartyCount - 1, CB2_TradeEvolutionSceneLoadGraphics, + word_2024E82); + gTasks[taskID].tLearnMoveState++; + } + break; + case 6: + if (!gPaletteFade.active && gMain.callback2 == CB2_TradeEvolutionSceneUpdate) + { + var = sub_809FA30(); // moveID + if (var == 4) + gTasks[taskID].tLearnMoveState = 9; + else + { + u16 move = GetMonData(mon, var + MON_DATA_MOVE1); + if (IsHMMove2(move)) + { + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[307]); + sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15); + gTasks[taskID].tLearnMoveState = 11; + } + else + { + gBattleTextBuff2[0] = 0xFD; + gBattleTextBuff2[1] = 2; + gBattleTextBuff2[2] = move; + gBattleTextBuff2[3] = (move & 0xFF00) >> 8; + gBattleTextBuff2[4] = EOS; + RemoveMonPPBonus(mon, var); + SetMonMoveSlot(mon, word_2024E82, var); + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[207]); + sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15); + gTasks[taskID].tLearnMoveState++; + } + } + } + break; + case 7: + if (gUnknown_03004828->field_4.state == 0 && !IsSEPlaying()) + { + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[7]); + sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15); + gTasks[taskID].tLearnMoveState++; + } + break; + case 8: + if (gUnknown_03004828->field_4.state == 0 && !IsSEPlaying()) + { + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[208]); + sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15); + gTasks[taskID].tState = 15; + } + break; + case 9: + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[8]); + sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15); + gTasks[taskID].tData9 = 10; + gTasks[taskID].tData10 = 0; + gTasks[taskID].tLearnMoveState = 3; + break; + case 10: + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[9]); + sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15); + gTasks[taskID].tState = 13; + break; + case 11: + if (gUnknown_03004828->field_4.state == 0 && !IsSEPlaying()) + gTasks[taskID].tLearnMoveState = 5; break; } break; diff --git a/src/pokemon_3.c b/src/pokemon_3.c index e449af0a1..306119be2 100644 --- a/src/pokemon_3.c +++ b/src/pokemon_3.c @@ -1197,7 +1197,7 @@ const struct CompressedSpritePalette *sub_80409C8(u16 species, u32 otId , u32 pe return &gMonPaletteTable[species]; } -bool8 IsHMMove2(u16 move) +bool32 IsHMMove2(u16 move) { int i = 0; while (gHMMoves[i] != 0xFFFF) -- cgit v1.2.3 From 77ae82fc51c8c84e338b15e801f0a98dd5cbe1ef Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 27 Aug 2017 14:15:39 +0200 Subject: move data to C --- data/evolution_scene.s | 14 -------------- ld_script.txt | 2 +- src/evolution_scene.c | 28 +++++++++++++++++----------- 3 files changed, 18 insertions(+), 26 deletions(-) delete mode 100644 data/evolution_scene.s diff --git a/data/evolution_scene.s b/data/evolution_scene.s deleted file mode 100644 index 24744a196..000000000 --- a/data/evolution_scene.s +++ /dev/null @@ -1,14 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - -gUnknown_083F868C:: @ 83F868C - .string "ヌケニン$" - - .string "{COLOR DARK_GREY}{HIGHLIGHT WHITE2}{SHADOW LIGHT_GREY}$" - .string "▶\n $" - .string " \n▶$" - .string " \n $" - - .space 9 diff --git a/ld_script.txt b/ld_script.txt index e43de493d..c051cc743 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -441,7 +441,7 @@ SECTIONS { src/time_events.o(.rodata); src/field_specials.o(.rodata); data/pokedex_area_screen.o(.rodata); - data/evolution_scene.o(.rodata); + src/evolution_scene.o(.rodata); data/roulette.o(.rodata); data/pokedex_cry_screen.o(.rodata); data/landmark.o(.rodata); diff --git a/src/evolution_scene.c b/src/evolution_scene.c index 77054c233..f46ed52a3 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -55,10 +55,6 @@ extern u16 gUnknown_030041B8; extern u8 gBattleTerrain; extern u8 gReservedSpritePaletteCount; extern u16 word_2024E82; - -extern void * const gUnknown_081FAF4C[]; -extern const u8* const gBattleStringsTable[]; - extern struct SpriteTemplate gUnknown_02024E8C; extern u8 gUnk_2009000[]; // won't match if I 'ewram' it extern bool8 gAffineAnimsDisabled; @@ -70,6 +66,12 @@ extern u8 gBattleCommunication[]; #define sEvoCursorPos gBattleCommunication[1] // when learning a new move #define sEvoGraphicsTaskID gBattleCommunication[2] +extern const u8 gUnknown_08400C4A[]; +extern const u8 gUnknown_08400C60[]; +extern const u8 gUnknown_08400C8D[]; +extern void * const gUnknown_081FAF4C[]; +extern const u8* const gBattleStringsTable[]; + // this file's functions void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, u8 partyID); void Task_EvolutionScene(u8 taskID); @@ -81,6 +83,16 @@ void CB2_EvolutionSceneUpdate(void); void CB2_TradeEvolutionSceneUpdate(void); void HBlankCB_TradeEvolutionScene(void); +// const data +static const u8 sUnknownShedinjaJpnString[] = _("ヌケニン"); +static const u8 sUnusedString0[] = _("{COLOR DARK_GREY}{HIGHLIGHT WHITE2}{SHADOW LIGHT_GREY}"); +static const u8 sUnusedString1[] = _("▶\n "); +static const u8 sUnusedString2[] = _(" \n▶"); +static const u8 sUnusedString3[] = _(" \n "); +static const u8 sPadding[9] = {0}; + +// code + void CB2_BeginEvolutionScene(void) { UpdatePaletteFade(); @@ -461,8 +473,6 @@ void CB2_TradeEvolutionSceneUpdate(void) RunTasks(); } -extern const u8 gUnknown_083F868C[]; - void CreateShedinja(u16 preEvoSpecies, struct Pokemon* mon) { u32 data = 0; @@ -499,14 +509,10 @@ void CreateShedinja(u16 preEvoSpecies, struct Pokemon* mon) if (GetMonData(Shedinja, MON_DATA_SPECIES) == SPECIES_SHEDINJA && GetMonData(Shedinja, MON_DATA_LANGUAGE) == LANGUAGE_JAPANESE && GetMonData(mon, MON_DATA_SPECIES) == SPECIES_NINJASK) - SetMonData(Shedinja, MON_DATA_NICKNAME, gUnknown_083F868C); + SetMonData(Shedinja, MON_DATA_NICKNAME, sUnknownShedinjaJpnString); } } -extern const u8 gUnknown_08400C4A[]; -extern const u8 gUnknown_08400C60[]; -extern const u8 gUnknown_08400C8D[]; - void Task_EvolutionScene(u8 taskID) { u32 var; -- cgit v1.2.3 From 4e5e0f18ff3ee5f4bfd55e9739d7ed6733547c30 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 27 Aug 2017 14:46:46 +0200 Subject: label move learning functions and vars --- asm/party_menu.s | 12 +++++------ include/pokemon.h | 2 +- src/battle_4.c | 20 +++++++++--------- src/daycare.c | 6 +++--- src/evolution_scene.c | 58 ++++++++++++++++++++++++++------------------------- src/pokemon_1.c | 28 ++++++++++++++----------- sym_ewram.txt | 2 +- 7 files changed, 67 insertions(+), 61 deletions(-) diff --git a/asm/party_menu.s b/asm/party_menu.s index 8a7c153b9..20b5b0ff4 100644 --- a/asm/party_menu.s +++ b/asm/party_menu.s @@ -7645,7 +7645,7 @@ _08070AF4: ldr r7, _08070B28 @ =0x0201c000 ldr r0, [r7] movs r1, 0x1 - bl sub_803B7C8 + bl MonTryLearningNewMove lsls r0, 16 lsrs r4, r0, 16 ldr r1, _08070B2C @ =0xfffff282 @@ -7703,7 +7703,7 @@ _08070B7C: ldr r1, _08070BBC @ =gStringVar1 bl GetMonNickname ldr r0, _08070BC0 @ =gStringVar2 - ldr r5, _08070BC4 @ =word_2024E82 + ldr r5, _08070BC4 @ =gMoveToLearn ldrh r2, [r5] movs r1, 0xD muls r1, r2 @@ -7729,7 +7729,7 @@ _08070B7C: .align 2, 0 _08070BBC: .4byte gStringVar1 _08070BC0: .4byte gStringVar2 -_08070BC4: .4byte word_2024E82 +_08070BC4: .4byte gMoveToLearn _08070BC8: .4byte gMoveNames _08070BCC: .4byte gStringVar4 _08070BD0: .4byte gOtherText_WantsToLearn @@ -7796,7 +7796,7 @@ sub_8070C54: @ 8070C54 ldr r7, _08070C78 @ =0x0201c000 ldr r0, [r7] movs r1, 0 - bl sub_803B7C8 + bl MonTryLearningNewMove lsls r0, 16 lsrs r4, r0, 16 ldr r0, _08070C7C @ =0x0000fffe @@ -7849,7 +7849,7 @@ _08070CC8: ldr r1, _08070D08 @ =gStringVar1 bl GetMonNickname ldr r0, _08070D0C @ =gStringVar2 - ldr r5, _08070D10 @ =word_2024E82 + ldr r5, _08070D10 @ =gMoveToLearn ldrh r2, [r5] movs r1, 0xD muls r1, r2 @@ -7875,7 +7875,7 @@ _08070CC8: .align 2, 0 _08070D08: .4byte gStringVar1 _08070D0C: .4byte gStringVar2 -_08070D10: .4byte word_2024E82 +_08070D10: .4byte gMoveToLearn _08070D14: .4byte gMoveNames _08070D18: .4byte gStringVar4 _08070D1C: .4byte gOtherText_WantsToLearn diff --git a/include/pokemon.h b/include/pokemon.h index d0ceaf15e..e86f80ca1 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -520,7 +520,7 @@ void SetMonMoveSlot(struct Pokemon *mon, u16 move, u8 slot); void SetBattleMonMoveSlot(struct BattlePokemon *mon, u16 move, u8 slot); void GiveMonInitialMoveset(struct Pokemon *mon); void GiveBoxMonInitialMoveset(struct BoxPokemon *boxMon); -u16 sub_803B7C8(struct Pokemon *mon, u8 a2); +u16 MonTryLearningNewMove(struct Pokemon *mon, bool8 a2); void DeleteFirstMoveAndGiveMoveToMon(struct Pokemon *mon, u16 move); void DeleteFirstMoveAndGiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move); diff --git a/src/battle_4.c b/src/battle_4.c index 6dd5d7df6..fb30b2030 100644 --- a/src/battle_4.c +++ b/src/battle_4.c @@ -82,7 +82,7 @@ extern void (*gBattleMainFunc)(void); extern struct Window gUnknown_03004210; extern const u8 gUnknown_08400D7A[]; extern u8 gPlayerPartyCount; -extern u16 word_2024E82; //move to learn +extern u16 gMoveToLearn; //move to learn extern const u8 gTrainerMoney[]; extern u16 gRandomMove; extern u8* gBattleScriptsEffectsTable[]; @@ -129,7 +129,7 @@ u16 sub_803FBFC(u8 a); u8 GetBankByPlayerAI(u8 ID); void sub_8012258(u8); void sub_80157C4(u8 bank); //update sent pokes in battle -//sub_803B7C8 teach poke a move +//MonTryLearningNewMove teach poke a move u16 GiveMoveToBattleMon(struct BattlePokemon *mon, u16 move); void IncrementGameStat(u8 index); u8 GetScaledHPFraction(s16 hp, s16 maxhp, u8 scale); @@ -11460,9 +11460,9 @@ void atk59_learnmove_inbattle(void) u8* loc1 = BSScriptReadPtr(gBattlescriptCurrInstr + 1); u8* loc2 = BSScriptReadPtr(gBattlescriptCurrInstr + 5); - u16 ret = sub_803B7C8(&gPlayerParty[BATTLE_STRUCT->expGetterID], BSScriptRead8(gBattlescriptCurrInstr + 9)); + u16 ret = MonTryLearningNewMove(&gPlayerParty[BATTLE_STRUCT->expGetterID], BSScriptRead8(gBattlescriptCurrInstr + 9)); while (ret == 0xFFFE) - ret = sub_803B7C8(&gPlayerParty[BATTLE_STRUCT->expGetterID], 0); + ret = MonTryLearningNewMove(&gPlayerParty[BATTLE_STRUCT->expGetterID], 0); if (ret == 0) { @@ -11549,7 +11549,7 @@ static void atk5A(void) case 2: if (!gPaletteFade.active) { - sub_809D9F0(gPlayerParty, BATTLE_STRUCT->expGetterID, gPlayerPartyCount - 1, ReshowBattleScreenAfterMenu, word_2024E82); + sub_809D9F0(gPlayerParty, BATTLE_STRUCT->expGetterID, gPlayerPartyCount - 1, ReshowBattleScreenAfterMenu, gMoveToLearn); BATTLE_STRUCT->atk5A_StateTracker++; } break; @@ -11584,18 +11584,18 @@ static void atk5A(void) } ptr[0] = 0xFF; RemoveMonPPBonus(&gPlayerParty[BATTLE_STRUCT->expGetterID], move_pos); - SetMonMoveSlot(&gPlayerParty[BATTLE_STRUCT->expGetterID], word_2024E82, move_pos); + SetMonMoveSlot(&gPlayerParty[BATTLE_STRUCT->expGetterID], gMoveToLearn, move_pos); if (gBattlePartyID[0] == BATTLE_STRUCT->expGetterID && !(gBattleMons[0].status2 & STATUS2_TRANSFORMED) && !(gDisableStructs[0].unk18_b & gBitTable[move_pos])) { RemoveBattleMonPPBonus(&gBattleMons[0], move_pos); - SetBattleMonMoveSlot(&gBattleMons[0], word_2024E82, move_pos); + SetBattleMonMoveSlot(&gBattleMons[0], gMoveToLearn, move_pos); } if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattlePartyID[2] == BATTLE_STRUCT->expGetterID && !(gBattleMons[2].status2 & STATUS2_TRANSFORMED) && !(gDisableStructs[2].unk18_b & gBitTable[move_pos])) { RemoveBattleMonPPBonus(&gBattleMons[2], move_pos); - SetBattleMonMoveSlot(&gBattleMons[2], word_2024E82, move_pos); + SetBattleMonMoveSlot(&gBattleMons[2], gMoveToLearn, move_pos); } } } @@ -12653,8 +12653,8 @@ void sub_8024CEC(void) { gBattleTextBuff2[0] = 0xFD; gBattleTextBuff2[1] = 2; - gBattleTextBuff2[2] = (word_2024E82); - gBattleTextBuff2[3] = uBYTE1_16(word_2024E82); + gBattleTextBuff2[2] = (gMoveToLearn); + gBattleTextBuff2[3] = uBYTE1_16(gMoveToLearn); gBattleTextBuff2[4] = 0xFF; } diff --git a/src/daycare.c b/src/daycare.c index cded18207..7f688016a 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -209,7 +209,7 @@ void sub_80414C0(struct BoxPokemon * daycare_data) } u8 TryIncrementMonLevel(struct Pokemon *); -extern u16 word_2024E82; +extern u16 gMoveToLearn; void sub_804151C(struct Pokemon * mon) { @@ -221,10 +221,10 @@ void sub_804151C(struct Pokemon * mon) if(TryIncrementMonLevel(mon) == FALSE) goto end; r6 = 1; - while((temp = sub_803B7C8(mon, r6)) != 0){ + while((temp = MonTryLearningNewMove(mon, r6)) != 0){ r6 = 0; if(temp == 0xffff){ - DeleteFirstMoveAndGiveMoveToMon(mon, word_2024E82); + DeleteFirstMoveAndGiveMoveToMon(mon, gMoveToLearn); } } } diff --git a/src/evolution_scene.c b/src/evolution_scene.c index f46ed52a3..baac64c35 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -54,7 +54,7 @@ extern u16 gUnknown_030041B0; extern u16 gUnknown_030041B8; extern u8 gBattleTerrain; extern u8 gReservedSpritePaletteCount; -extern u16 word_2024E82; +extern u16 gMoveToLearn; extern struct SpriteTemplate gUnknown_02024E8C; extern u8 gUnk_2009000[]; // won't match if I 'ewram' it extern bool8 gAffineAnimsDisabled; @@ -99,19 +99,19 @@ void CB2_BeginEvolutionScene(void) RunTasks(); } -#define tState data[0] -#define tMonPtrHI data[1] -#define tMonPtrLO data[2] -#define tPreEvoSpecies data[3] -#define tPostEvoSpecies data[4] -#define tCanStop data[5] // in first fast data[5] only checks that -#define tBits data[5] // in the second task, it works as a bitfield -#define tData6 data[6] -#define tLearnMoveState data[8] -#define tData9 data[9] -#define tData10 data[10] -#define tEvoWasStopped data[11] -#define tPartyID data[12] +#define tState data[0] +#define tMonPtrHI data[1] +#define tMonPtrLO data[2] +#define tPreEvoSpecies data[3] +#define tPostEvoSpecies data[4] +#define tCanStop data[5] // in first fast data[5] only checks that +#define tBits data[5] // in the second task, it works as a bitfield +#define tLearnsFirstMove data[6] +#define tLearnMoveState data[8] +#define tData9 data[9] +#define tData10 data[10] +#define tEvoWasStopped data[11] +#define tPartyID data[12] #define TASK_BIT_CAN_STOP 0x1 #define TASK_BIT_LEARN_MOVE 0x80 @@ -248,7 +248,7 @@ void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, gTasks[ID].tMonPtrHI = (u32)(mon); gTasks[ID].tMonPtrLO = (u32)(mon) >> 0x10; gTasks[ID].tCanStop = canStopEvo; - gTasks[ID].tData6 = 1; + gTasks[ID].tLearnsFirstMove = TRUE; gTasks[ID].tEvoWasStopped = FALSE; gTasks[ID].tPartyID = partyID; @@ -448,7 +448,7 @@ void TradeEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8 preEvoSpri gTasks[ID].tPostEvoSpecies = speciesToEvolve; gTasks[ID].tMonPtrHI = (u32)(mon); gTasks[ID].tMonPtrLO = (u32)(mon) >> 0x10; - gTasks[ID].tData6 = 1; + gTasks[ID].tLearnsFirstMove = TRUE; gTasks[ID].tEvoWasStopped = FALSE; gTasks[ID].tPartyID = partyID; @@ -638,14 +638,14 @@ void Task_EvolutionScene(u8 taskID) case 14: // check if it wants to learn a new move if (gUnknown_03004210.state == 0) { - var = sub_803B7C8(mon, gTasks[taskID].tData6); + var = MonTryLearningNewMove(mon, gTasks[taskID].tLearnsFirstMove); if (var != 0 && !gTasks[taskID].tEvoWasStopped) { u8 text[20]; sub_8053E90(); gTasks[taskID].tBits |= TASK_BIT_LEARN_MOVE; - gTasks[taskID].tData6 = 0; + gTasks[taskID].tLearnsFirstMove = FALSE; gTasks[taskID].tLearnMoveState = 0; GetMonData(mon, MON_DATA_NICKNAME, text); StringCopy10(gBattleTextBuff1, text); @@ -705,12 +705,12 @@ void Task_EvolutionScene(u8 taskID) PlayFanfare(BGM_FANFA1); StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[3]); sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); - gTasks[taskID].tData6 = 0x40; + gTasks[taskID].tLearnsFirstMove = 0x40; // re-used as a counter gTasks[taskID].tState++; } break; case 20: // wait a bit and check if can learn another move - if (gUnknown_03004210.state == 0 && !IsSEPlaying() && --gTasks[taskID].tData6 == 0) + if (gUnknown_03004210.state == 0 && !IsSEPlaying() && --gTasks[taskID].tLearnsFirstMove == 0) gTasks[taskID].tState = 14; break; case 21: // try to learn a new move @@ -797,7 +797,7 @@ void Task_EvolutionScene(u8 taskID) { sub_809D9F0(gPlayerParty, gTasks[taskID].tPartyID, gPlayerPartyCount - 1, CB2_EvolutionSceneLoadGraphics, - word_2024E82); + gMoveToLearn); gTasks[taskID].tLearnMoveState++; } break; @@ -824,7 +824,7 @@ void Task_EvolutionScene(u8 taskID) gBattleTextBuff2[3] = (move & 0xFF00) >> 8; gBattleTextBuff2[4] = EOS; RemoveMonPPBonus(mon, var); - SetMonMoveSlot(mon, word_2024E82, var); + SetMonMoveSlot(mon, gMoveToLearn, var); StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[207]); sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); gTasks[taskID].tLearnMoveState++; @@ -980,13 +980,13 @@ void Task_TradeEvolutionScene(u8 taskID) case 13: if (gUnknown_03004828->field_4.state == 0 && IsFanfareTaskInactive() == TRUE) { - var = sub_803B7C8(mon, gTasks[taskID].tData6); + var = MonTryLearningNewMove(mon, gTasks[taskID].tLearnsFirstMove); if (var != 0 && !gTasks[taskID].tEvoWasStopped) { u8 text[20]; gTasks[taskID].tBits |= TASK_BIT_LEARN_MOVE; - gTasks[taskID].tData6 = 0; + gTasks[taskID].tLearnsFirstMove = FALSE; gTasks[taskID].tLearnMoveState = 0; GetMonData(mon, MON_DATA_NICKNAME, text); StringCopy10(gBattleTextBuff1, text); @@ -1019,12 +1019,12 @@ void Task_TradeEvolutionScene(u8 taskID) PlayFanfare(BGM_FANFA1); StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[3]); sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15); - gTasks[taskID].tData6 = 0x40; + gTasks[taskID].tLearnsFirstMove = 0x40; // re-used as a counter gTasks[taskID].tState++; } break; case 16: - if (gUnknown_03004828->field_4.state == 0 && IsFanfareTaskInactive() == TRUE && --gTasks[taskID].tData6 == 0) + if (gUnknown_03004828->field_4.state == 0 && IsFanfareTaskInactive() == TRUE && --gTasks[taskID].tLearnsFirstMove == 0) gTasks[taskID].tState = 13; break; case 17: @@ -1117,7 +1117,7 @@ void Task_TradeEvolutionScene(u8 taskID) { sub_809D9F0(gPlayerParty, gTasks[taskID].tPartyID, gPlayerPartyCount - 1, CB2_TradeEvolutionSceneLoadGraphics, - word_2024E82); + gMoveToLearn); gTasks[taskID].tLearnMoveState++; } break; @@ -1144,7 +1144,7 @@ void Task_TradeEvolutionScene(u8 taskID) gBattleTextBuff2[3] = (move & 0xFF00) >> 8; gBattleTextBuff2[4] = EOS; RemoveMonPPBonus(mon, var); - SetMonMoveSlot(mon, word_2024E82, var); + SetMonMoveSlot(mon, gMoveToLearn, var); StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[207]); sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15); gTasks[taskID].tLearnMoveState++; @@ -1188,3 +1188,5 @@ void Task_TradeEvolutionScene(u8 taskID) break; } } + + diff --git a/src/pokemon_1.c b/src/pokemon_1.c index c65bfa185..9c46e54d5 100644 --- a/src/pokemon_1.c +++ b/src/pokemon_1.c @@ -17,9 +17,9 @@ #define LOHALF(n) ((n) & 0xFFFF) extern u8 unk_2000000[]; -extern u16 word_2024E82; +extern u16 gMoveToLearn; -static EWRAM_DATA u8 byte_2024E88 = 0; +static EWRAM_DATA u8 sLearningMoveTableID = 0; u8 gPlayerPartyCount; struct Pokemon gPlayerParty[6]; @@ -583,29 +583,33 @@ void GiveBoxMonInitialMoveset(struct BoxPokemon *boxMon) } } -u16 sub_803B7C8(struct Pokemon *mon, u8 a2) +u16 MonTryLearningNewMove(struct Pokemon *mon, bool8 firstMove) { u32 retVal = 0; u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); u8 level = GetMonData(mon, MON_DATA_LEVEL, NULL); - if (a2) + // since you can learn more than one move per level + // the game needs to know whether you decided to + // learn it or keep the old set to avoid asking + // you to learn the same move over and over again + if (firstMove) { - byte_2024E88 = retVal; + sLearningMoveTableID = 0; - while ((gLevelUpLearnsets[species][byte_2024E88] & 0xFE00) != (level << 9)) + while ((gLevelUpLearnsets[species][sLearningMoveTableID] & 0xFE00) != (level << 9)) { - byte_2024E88++; - if (gLevelUpLearnsets[species][byte_2024E88] == (u16)-1) + sLearningMoveTableID++; + if (gLevelUpLearnsets[species][sLearningMoveTableID] == 0xFFFF) return 0; } } - if ((gLevelUpLearnsets[species][byte_2024E88] & 0xFE00) == (level << 9)) + if ((gLevelUpLearnsets[species][sLearningMoveTableID] & 0xFE00) == (level << 9)) { - word_2024E82 = (gLevelUpLearnsets[species][byte_2024E88] & 0x1FF); - byte_2024E88++; - retVal = GiveMoveToMon(mon, word_2024E82); + gMoveToLearn = (gLevelUpLearnsets[species][sLearningMoveTableID] & 0x1FF); + sLearningMoveTableID++; + retVal = GiveMoveToMon(mon, gMoveToLearn); } return retVal; diff --git a/sym_ewram.txt b/sym_ewram.txt index ac6b8b728..db6332fc4 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -287,7 +287,7 @@ gPID_perBank: @ 2024E70 gBattleMovePower: @ 2024E80 .space 0x2 -word_2024E82: @ 2024E82 +gMoveToLearn: @ 2024E82 .space 0x2 gBattleMonForms: @ 2024E84 -- cgit v1.2.3 From d6d4af77deb23001647583d3c52d4f3b738ca439 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 27 Aug 2017 15:56:57 +0200 Subject: evolution scene file is done --- asm/battle_2.s | 4 +- asm/evolution_scene.s | 2774 -------------------------------------- asm/party_menu.s | 12 +- asm/trade.s | 8 +- common_syms/evolution_scene.txt | 1 + include/evolution_scene.h | 10 + ld_script.txt | 1 - shared_syms.txt | 3 + src/evolution_scene.c | 2804 ++++++++++++++++++++++++++++++++++++++- sym_common.txt | 7 +- 10 files changed, 2782 insertions(+), 2842 deletions(-) delete mode 100644 asm/evolution_scene.s create mode 100644 common_syms/evolution_scene.txt create mode 100644 include/evolution_scene.h diff --git a/asm/battle_2.s b/asm/battle_2.s index 804cefa76..6e773d40d 100644 --- a/asm/battle_2.s +++ b/asm/battle_2.s @@ -3144,7 +3144,7 @@ _08013D4C: ldr r1, _08013D6C @ =gBattleMainFunc ldr r0, _08013D70 @ =sub_8013DA8 str r0, [r1] - ldr r1, _08013D74 @ =gUnknown_03005E94 + ldr r1, _08013D74 @ =gCB2_AfterEvolution ldr r0, _08013D78 @ =sub_800F808 str r0, [r1] b _08013D96 @@ -3152,7 +3152,7 @@ _08013D4C: _08013D68: .4byte gNoOfAllBanks _08013D6C: .4byte gBattleMainFunc _08013D70: .4byte sub_8013DA8 -_08013D74: .4byte gUnknown_03005E94 +_08013D74: .4byte gCB2_AfterEvolution _08013D78: .4byte sub_800F808 _08013D7C: ldr r0, _08013D9C @ =gBattleExecBuffer diff --git a/asm/evolution_scene.s b/asm/evolution_scene.s deleted file mode 100644 index d90772070..000000000 --- a/asm/evolution_scene.s +++ /dev/null @@ -1,2774 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - - thumb_func_start unref_sub_8113B50 -unref_sub_8113B50: @ 8113B50 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x3C - str r0, [sp] - str r1, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0xC] - movs r1, 0 - str r1, [sp, 0x10] - movs r2, 0 - str r2, [sp, 0x8] - ldr r3, _08113C60 @ =0x02014800 - mov r12, r3 - ldr r4, _08113C64 @ =0x000018c4 - add r4, r12 - mov r10, r4 - ldr r5, _08113C68 @ =0x000020c4 - add r5, r12 - mov r8, r5 -_08113B7C: - adds r0, r3, 0 - adds r0, 0x84 - ldr r1, [sp, 0x8] - adds r0, r1, r0 - strb r2, [r0] - adds r0, r3, 0x4 - adds r0, r1, r0 - strb r2, [r0] - ldr r4, _08113C6C @ =0x02014844 - adds r0, r1, r4 - strb r2, [r0] - movs r6, 0 - lsls r1, 5 - mov r9, r1 - ldr r5, [sp, 0x8] - lsls r4, r5, 6 -_08113B9C: - mov r0, r9 - adds r1, r6, r0 - ldr r5, _08113C70 @ =0x020158c4 - adds r0, r1, r5 - strb r2, [r0] - mov r5, r10 - adds r0, r1, r5 - strb r2, [r0] - mov r5, r8 - adds r0, r1, r5 - strb r2, [r0] - ldr r5, _08113C74 @ =0x020170c4 - adds r0, r1, r5 - strb r2, [r0] - adds r7, r3, 0 - adds r7, 0xC4 - adds r0, r1, r7 - strb r2, [r0] - ldr r5, _08113C78 @ =0x000008c4 - adds r0, r3, r5 - adds r0, r1, r0 - strb r2, [r0] - ldr r5, _08113C7C @ =0x000030c4 - adds r0, r3, r5 - adds r0, r1, r0 - strb r2, [r0] - ldr r5, _08113C80 @ =0x000038c4 - adds r0, r3, r5 - adds r1, r0 - strb r2, [r1] - lsls r1, r6, 1 - adds r1, r4 - ldr r5, _08113C84 @ =0x000060c4 - adds r0, r3, r5 - adds r0, r1, r0 - strh r2, [r0] - ldr r5, _08113C88 @ =0x000070c4 - adds r0, r3, r5 - adds r0, r1, r0 - strh r2, [r0] - ldr r5, _08113C8C @ =0x000080c4 - adds r0, r3, r5 - adds r0, r1, r0 - strh r2, [r0] - ldr r5, _08113C90 @ =0x000090c4 - adds r0, r3, r5 - adds r1, r0 - strh r2, [r1] - adds r6, 0x1 - cmp r6, 0x1F - ble _08113B9C - ldr r0, [sp, 0x8] - adds r0, 0x1 - str r0, [sp, 0x8] - cmp r0, 0x3F - ble _08113B7C - ldr r1, _08113C94 @ =0x0000a0c4 - add r1, r12 - movs r0, 0x40 - strb r0, [r1] - movs r1, 0 - mov r8, r1 - movs r2, 0 - str r2, [sp, 0x8] - movs r3, 0x80 - lsls r3, 5 - adds r3, r7 - mov r12, r3 - movs r4, 0xC0 - lsls r4, 5 - adds r4, r7 - mov r9, r4 - movs r5, 0 - adds r4, r7, 0 - subs r4, 0xC0 -_08113C32: - movs r3, 0 - ldr r2, [sp] - add r2, r8 - movs r6, 0 - ldr r0, [sp, 0x8] - adds r0, 0x1 - str r0, [sp, 0x30] - ldr r1, [sp, 0x8] - lsls r1, 7 - mov r10, r1 - movs r7, 0x1 - negs r7, r7 -_08113C4A: - asrs r0, r6, 1 - lsls r0, 2 - add r0, r10 - ldr r1, _08113C98 @ =0x020188c4 - adds r0, r1 - str r2, [r0] - cmp r3, 0 - beq _08113C9C - cmp r3, 0x1 - beq _08113CC6 - b _08113CF4 - .align 2, 0 -_08113C60: .4byte 0x02014800 -_08113C64: .4byte 0x000018c4 -_08113C68: .4byte 0x000020c4 -_08113C6C: .4byte 0x02014844 -_08113C70: .4byte 0x020158c4 -_08113C74: .4byte 0x020170c4 -_08113C78: .4byte 0x000008c4 -_08113C7C: .4byte 0x000030c4 -_08113C80: .4byte 0x000038c4 -_08113C84: .4byte 0x000060c4 -_08113C88: .4byte 0x000070c4 -_08113C8C: .4byte 0x000080c4 -_08113C90: .4byte 0x000090c4 -_08113C94: .4byte 0x0000a0c4 -_08113C98: .4byte 0x020188c4 -_08113C9C: - movs r0, 0x1 - ands r0, r6 - cmp r0, 0 - beq _08113CAA - cmp r0, 0x1 - beq _08113CB0 - b _08113CF4 -_08113CAA: - ldrb r1, [r2] - movs r0, 0xF - b _08113CB4 -_08113CB0: - ldrb r1, [r2] - movs r0, 0xF0 -_08113CB4: - ands r0, r1 - cmp r0, 0 - beq _08113CF4 - ldrb r0, [r4] - adds r0, r5 - add r0, r12 - strb r6, [r0] - movs r3, 0x1 - b _08113CF4 -_08113CC6: - adds r0, r6, 0 - ands r0, r3 - cmp r0, 0 - beq _08113CD4 - cmp r0, 0x1 - beq _08113CDA - b _08113CF4 -_08113CD4: - ldrb r1, [r2] - movs r0, 0xF - b _08113CDE -_08113CDA: - ldrb r1, [r2] - movs r0, 0xF0 -_08113CDE: - ands r0, r1 - cmp r0, 0 - bne _08113CF4 - ldrb r0, [r4] - adds r0, r5 - add r0, r9 - strb r7, [r0] - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - movs r3, 0 -_08113CF4: - adds r0, r6, 0x1 - movs r1, 0x7 - ands r0, r1 - cmp r0, 0 - bne _08113D02 - adds r2, 0x1D - b _08113D0C -_08113D02: - movs r0, 0x1 - ands r0, r6 - cmp r0, 0 - beq _08113D0C - adds r2, 0x1 -_08113D0C: - adds r7, 0x1 - adds r6, 0x1 - cmp r6, 0x3F - ble _08113C4A - cmp r3, 0 - beq _08113D26 - ldrb r0, [r4] - adds r0, r5 - add r0, r9 - strb r6, [r0] - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] -_08113D26: - movs r0, 0x7 - ldr r2, [sp, 0x30] - ands r2, r0 - cmp r2, 0 - bne _08113D36 - movs r3, 0xE4 - add r8, r3 - b _08113D3A -_08113D36: - movs r0, 0x4 - add r8, r0 -_08113D3A: - adds r5, 0x20 - adds r4, 0x1 - ldr r1, [sp, 0x8] - adds r1, 0x1 - str r1, [sp, 0x8] - cmp r1, 0x3F - bgt _08113D4A - b _08113C32 -_08113D4A: - movs r2, 0 - mov r8, r2 - movs r3, 0 - str r3, [sp, 0x8] - ldr r0, _08113D84 @ =0x02014844 - movs r4, 0x82 - lsls r4, 6 - adds r4, r0 - mov r10, r4 - movs r5, 0xA2 - lsls r5, 6 - adds r7, r0, r5 - movs r5, 0 - adds r4, r0, 0 - movs r0, 0x1 - mov r9, r0 -_08113D6A: - movs r3, 0 - ldr r2, [sp, 0x4] - add r2, r8 - movs r6, 0 - ldr r1, [sp, 0x8] - adds r1, 0x1 - str r1, [sp, 0x30] -_08113D78: - cmp r3, 0 - beq _08113D88 - cmp r3, 0x1 - beq _08113DB4 - b _08113DE4 - .align 2, 0 -_08113D84: .4byte 0x02014844 -_08113D88: - adds r0, r6, 0 - mov r1, r9 - ands r0, r1 - cmp r0, 0 - beq _08113D98 - cmp r0, 0x1 - beq _08113D9E - b _08113DE4 -_08113D98: - ldrb r1, [r2] - movs r0, 0xF - b _08113DA2 -_08113D9E: - ldrb r1, [r2] - movs r0, 0xF0 -_08113DA2: - ands r0, r1 - cmp r0, 0 - beq _08113DE4 - ldrb r0, [r4] - adds r0, r5 - add r0, r10 - strb r6, [r0] - movs r3, 0x1 - b _08113DE4 -_08113DB4: - adds r0, r6, 0 - ands r0, r3 - cmp r0, 0 - beq _08113DC2 - cmp r0, 0x1 - beq _08113DC8 - b _08113DE4 -_08113DC2: - ldrb r1, [r2] - movs r0, 0xF - b _08113DCC -_08113DC8: - ldrb r1, [r2] - movs r0, 0xF0 -_08113DCC: - ands r0, r1 - cmp r0, 0 - bne _08113DE4 - ldrb r0, [r4] - adds r0, r5 - adds r0, r7 - subs r1, r6, 0x1 - strb r1, [r0] - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - movs r3, 0 -_08113DE4: - adds r1, r6, 0x1 - movs r0, 0x7 - ands r0, r1 - cmp r0, 0 - bne _08113DF2 - adds r2, 0x1D - b _08113DFC -_08113DF2: - mov r0, r9 - ands r6, r0 - cmp r6, 0 - beq _08113DFC - adds r2, 0x1 -_08113DFC: - adds r6, r1, 0 - cmp r6, 0x3F - ble _08113D78 - cmp r3, 0 - beq _08113E14 - ldrb r0, [r4] - adds r0, r5 - adds r0, r7 - strb r6, [r0] - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] -_08113E14: - movs r0, 0x7 - ldr r1, [sp, 0x30] - ands r1, r0 - cmp r1, 0 - bne _08113E24 - movs r2, 0xE4 - add r8, r2 - b _08113E28 -_08113E24: - movs r3, 0x4 - add r8, r3 -_08113E28: - adds r5, 0x20 - adds r4, 0x1 - ldr r0, [sp, 0x8] - adds r0, 0x1 - str r0, [sp, 0x8] - cmp r0, 0x3F - ble _08113D6A - movs r1, 0 - str r1, [sp, 0x8] -_08113E3A: - ldr r3, [sp, 0x8] - ldr r4, _08113EBC @ =0x02014804 - adds r2, r3, r4 - ldr r5, _08113EC0 @ =0x02014844 - adds r1, r3, r5 - ldrb r0, [r2] - adds r3, 0x1 - str r3, [sp, 0x30] - ldrb r1, [r1] - cmp r0, r1 - bcc _08113E52 - b _08113F9E -_08113E52: - movs r0, 0 - str r0, [sp, 0xC] - ldrb r2, [r2] - cmp r0, r2 - bge _08113F54 - ldr r0, _08113EC4 @ =0x02014800 - adds r0, 0x4 - ldr r1, [sp, 0x8] - adds r0, r1, r0 - str r0, [sp, 0x18] -_08113E66: - movs r2, 0x80 - lsls r2, 1 - str r2, [sp, 0x14] - movs r6, 0 - ldr r3, [sp, 0x8] - ldr r4, _08113EC0 @ =0x02014844 - adds r0, r3, r4 - ldr r5, [sp, 0xC] - adds r5, 0x1 - str r5, [sp, 0x34] - ldrb r0, [r0] - cmp r6, r0 - bge _08113F3E - ldr r0, _08113EC4 @ =0x02014800 - mov r10, r0 - lsls r0, r3, 5 - ldr r2, [sp, 0xC] - adds r1, r2, r0 - mov r9, r0 - ldr r0, _08113EC4 @ =0x02014800 - adds r0, 0xC4 - mov r3, r9 - adds r7, r3, r0 - mov r5, r9 - ldr r4, _08113EC4 @ =0x02014800 - ldr r2, _08113EC8 @ =0x000010c4 - adds r0, r4, r2 - adds r1, r0 - mov r8, r1 - ldrb r3, [r1] - str r3, [sp, 0x1C] -_08113EA4: - ldr r0, _08113ECC @ =0x000020c4 - add r0, r10 - adds r0, r5, r0 - ldr r4, [sp, 0x1C] - ldrb r1, [r0] - cmp r4, r1 - bls _08113ED0 - mov r2, r8 - ldrb r1, [r2] - ldrb r0, [r0] - b _08113ED6 - .align 2, 0 -_08113EBC: .4byte 0x02014804 -_08113EC0: .4byte 0x02014844 -_08113EC4: .4byte 0x02014800 -_08113EC8: .4byte 0x000010c4 -_08113ECC: .4byte 0x000020c4 -_08113ED0: - ldrb r1, [r0] - mov r3, r8 - ldrb r0, [r3] -_08113ED6: - subs r3, r1, r0 - ldr r1, [sp, 0xC] - add r1, r9 - ldr r0, _08113EFC @ =0x000018c4 - add r0, r10 - adds r4, r1, r0 - ldr r0, _08113F00 @ =0x000028c4 - add r0, r10 - adds r2, r5, r0 - ldrb r0, [r4] - ldr r1, _08113F04 @ =0x02014800 - mov r12, r1 - ldrb r1, [r2] - cmp r0, r1 - bls _08113F08 - adds r1, r0, 0 - ldrb r0, [r2] - b _08113F0C - .align 2, 0 -_08113EFC: .4byte 0x000018c4 -_08113F00: .4byte 0x000028c4 -_08113F04: .4byte 0x02014800 -_08113F08: - ldrb r1, [r2] - ldrb r0, [r4] -_08113F0C: - subs r1, r0 - adds r3, r1 - ldr r2, [sp, 0x14] - cmp r2, r3 - ble _08113F2C - ldrb r0, [r7] - cmp r0, 0 - bne _08113F2C - ldr r0, _08114050 @ =0x000008c4 - add r0, r12 - adds r0, r5, r0 - ldrb r0, [r0] - cmp r0, 0 - bne _08113F2C - str r6, [sp, 0x10] - str r3, [sp, 0x14] -_08113F2C: - adds r7, 0x1 - adds r5, 0x1 - adds r6, 0x1 - ldr r3, [sp, 0x8] - ldr r4, _08114054 @ =0x02014844 - adds r0, r3, r4 - ldrb r0, [r0] - cmp r6, r0 - blt _08113EA4 -_08113F3E: - ldr r0, [sp, 0xC] - ldr r1, [sp, 0x10] - ldr r2, [sp, 0x8] - bl sub_81141F0 - ldr r5, [sp, 0x34] - str r5, [sp, 0xC] - ldr r0, [sp, 0x18] - ldrb r0, [r0] - cmp r5, r0 - blt _08113E66 -_08113F54: - movs r6, 0 - ldr r2, _08114058 @ =0x02014800 - ldr r1, [sp, 0x8] - ldr r3, _08114054 @ =0x02014844 - adds r0, r1, r3 - adds r4, r2, 0 - mov r12, r4 - ldrb r0, [r0] - cmp r6, r0 - bge _08113F9E - mov r0, r12 - adds r0, 0x44 - adds r4, r1, r0 -_08113F6E: - ldr r5, [sp, 0x8] - lsls r0, r5, 5 - adds r1, r6, r0 - adds r0, r2, 0 - adds r0, 0xC4 - adds r0, r1, r0 - ldrb r0, [r0] - cmp r0, 0 - bne _08113F94 - ldr r3, _08114050 @ =0x000008c4 - adds r0, r2, r3 - adds r0, r1, r0 - ldrb r0, [r0] - cmp r0, 0 - bne _08113F94 - adds r0, r6, 0 - adds r1, r5, 0 - bl sub_811430C -_08113F94: - adds r6, 0x1 - ldr r2, _08114058 @ =0x02014800 - ldrb r5, [r4] - cmp r6, r5 - blt _08113F6E -_08113F9E: - ldr r0, [sp, 0x8] - ldr r1, _0811405C @ =0x02014804 - adds r2, r0, r1 - ldr r3, _08114054 @ =0x02014844 - adds r1, r0, r3 - ldrb r0, [r2] - ldrb r1, [r1] - cmp r0, r1 - bne _08113FCC - movs r6, 0 - ldrb r4, [r2] - cmp r6, r4 - bge _08113FCC - adds r4, r2, 0 -_08113FBA: - adds r0, r6, 0 - adds r1, r6, 0 - ldr r2, [sp, 0x8] - bl sub_81141F0 - adds r6, 0x1 - ldrb r5, [r4] - cmp r6, r5 - blt _08113FBA -_08113FCC: - ldr r0, [sp, 0x8] - ldr r1, _0811405C @ =0x02014804 - adds r2, r0, r1 - ldr r3, _08114054 @ =0x02014844 - adds r1, r0, r3 - ldrb r0, [r2] - ldr r4, _08114058 @ =0x02014800 - ldrb r5, [r1] - cmp r0, r5 - bhi _08113FE2 - b _081141C4 -_08113FE2: - movs r0, 0 - str r0, [sp, 0x10] - ldrb r1, [r1] - cmp r0, r1 - blt _08113FEE - b _08114104 -_08113FEE: - str r2, [sp, 0x2C] - ldr r1, [sp, 0x8] - lsls r1, 5 - mov r9, r1 - adds r0, r4, 0 - adds r0, 0x44 - ldr r2, [sp, 0x8] - adds r0, r2, r0 - str r0, [sp, 0x20] - mov r3, r9 - str r3, [sp, 0x24] -_08114004: - movs r4, 0x80 - lsls r4, 1 - str r4, [sp, 0x14] - movs r6, 0 - ldr r5, [sp, 0x10] - adds r5, 0x1 - str r5, [sp, 0x38] - ldr r0, [sp, 0x2C] - ldrb r0, [r0] - cmp r6, r0 - bge _081140C4 - ldr r1, [sp, 0x10] - ldr r2, [sp, 0x24] - adds r1, r2 - mov r10, r1 - ldr r0, _08114058 @ =0x02014800 - adds r0, 0xC4 - adds r2, r0 - mov r8, r2 - ldr r7, [sp, 0x24] - ldr r3, _08114058 @ =0x02014800 - ldr r4, _08114060 @ =0x000010c4 - adds r0, r3, r4 - adds r5, r7, r0 - ldr r0, _08114064 @ =0x020168c4 - add r0, r10 - mov r12, r0 - ldrb r1, [r0] - str r1, [sp, 0x28] -_0811403E: - ldrb r0, [r5] - ldr r2, [sp, 0x28] - cmp r0, r2 - bls _08114068 - adds r1, r0, 0 - mov r3, r12 - ldrb r0, [r3] - b _0811406E - .align 2, 0 -_08114050: .4byte 0x000008c4 -_08114054: .4byte 0x02014844 -_08114058: .4byte 0x02014800 -_0811405C: .4byte 0x02014804 -_08114060: .4byte 0x000010c4 -_08114064: .4byte 0x020168c4 -_08114068: - mov r4, r12 - ldrb r1, [r4] - ldrb r0, [r5] -_0811406E: - subs r3, r1, r0 - ldr r1, _0811408C @ =0x02014800 - ldr r2, _08114090 @ =0x000018c4 - adds r0, r1, r2 - adds r4, r7, r0 - ldr r2, _08114094 @ =0x020170c4 - add r2, r10 - ldrb r0, [r4] - ldrb r1, [r2] - cmp r0, r1 - bls _08114098 - adds r1, r0, 0 - ldrb r0, [r2] - b _0811409C - .align 2, 0 -_0811408C: .4byte 0x02014800 -_08114090: .4byte 0x000018c4 -_08114094: .4byte 0x020170c4 -_08114098: - ldrb r1, [r2] - ldrb r0, [r4] -_0811409C: - subs r1, r0 - adds r3, r1 - ldr r2, [sp, 0x14] - cmp r2, r3 - ble _081140B2 - mov r4, r8 - ldrb r0, [r4] - cmp r0, 0 - bne _081140B2 - str r6, [sp, 0xC] - str r3, [sp, 0x14] -_081140B2: - movs r0, 0x1 - add r8, r0 - adds r7, 0x1 - adds r5, 0x1 - adds r6, 0x1 - ldr r1, [sp, 0x2C] - ldrb r1, [r1] - cmp r6, r1 - blt _0811403E -_081140C4: - ldr r3, [sp, 0xC] - add r3, r9 - ldr r2, _08114164 @ =0x02014800 - ldr r4, _08114168 @ =0x000030c4 - adds r1, r2, r4 - adds r1, r3, r1 - ldr r2, [sp, 0x10] - add r2, r9 - ldr r5, _0811416C @ =0x020168c4 - adds r0, r2, r5 - ldrb r0, [r0] - strb r0, [r1] - ldr r0, _08114164 @ =0x02014800 - ldr r4, _08114170 @ =0x000038c4 - adds r1, r0, r4 - adds r1, r3, r1 - ldr r5, _08114174 @ =0x020170c4 - adds r2, r5 - ldrb r0, [r2] - strb r0, [r1] - ldr r0, _08114164 @ =0x02014800 - adds r0, 0xC4 - adds r3, r0 - movs r0, 0x1 - strb r0, [r3] - ldr r0, [sp, 0x38] - str r0, [sp, 0x10] - ldr r1, [sp, 0x20] - ldrb r1, [r1] - cmp r0, r1 - bge _08114104 - b _08114004 -_08114104: - movs r6, 0 - ldr r4, _08114164 @ =0x02014800 - ldr r2, [sp, 0x8] - ldr r3, _08114178 @ =0x02014804 - adds r0, r2, r3 - ldrb r0, [r0] - cmp r6, r0 - bge _081141C4 - adds r7, r4, 0 - mov r9, r6 - movs r5, 0xC4 - adds r5, r7 - mov r8, r5 -_0811411E: - ldr r1, [sp, 0x8] - lsls r0, r1, 5 - adds r2, r6, r0 - ldr r3, _0811417C @ =0x000020c4 - adds r0, r7, r3 - adds r0, r2 - mov r10, r0 - ldr r5, _08114168 @ =0x000030c4 - adds r0, r7, r5 - adds r0, r2, r0 - ldrb r0, [r0] - mov r1, r10 - strb r0, [r1] - ldr r3, _08114180 @ =0x000028c4 - adds r0, r7, r3 - adds r3, r2, r0 - ldr r5, _08114170 @ =0x000038c4 - adds r0, r7, r5 - adds r0, r2, r0 - ldrb r0, [r0] - strb r0, [r3] - mov r0, r8 - adds r1, r2, r0 - ldrb r0, [r1] - cmp r0, 0 - beq _08114184 - mov r2, r9 - strb r2, [r1] - adds r0, r6, 0 - adds r1, r6, 0 - ldr r2, [sp, 0x8] - bl sub_81141F0 - b _081141B4 - .align 2, 0 -_08114164: .4byte 0x02014800 -_08114168: .4byte 0x000030c4 -_0811416C: .4byte 0x020168c4 -_08114170: .4byte 0x000038c4 -_08114174: .4byte 0x020170c4 -_08114178: .4byte 0x02014804 -_0811417C: .4byte 0x000020c4 -_08114180: .4byte 0x000028c4 -_08114184: - ldr r5, _081141E0 @ =0x000010c4 - adds r1, r4, r5 - adds r1, r2, r1 - ldr r5, _081141E4 @ =0x000018c4 - adds r0, r4, r5 - adds r0, r2, r0 - ldrb r0, [r0] - ldrb r2, [r1] - subs r0, r2 - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - adds r2, r0 - strb r2, [r3] - mov r0, r10 - strb r2, [r0] - ldrb r0, [r3] - subs r0, 0x1 - strb r0, [r3] - adds r0, r6, 0 - adds r1, r6, 0 - ldr r2, [sp, 0x8] - bl sub_81141F0 -_081141B4: - adds r6, 0x1 - ldr r4, _081141E8 @ =0x02014800 - ldr r1, [sp, 0x8] - ldr r2, _081141EC @ =0x02014804 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r6, r0 - blt _0811411E -_081141C4: - ldr r3, [sp, 0x30] - str r3, [sp, 0x8] - cmp r3, 0x3F - bgt _081141CE - b _08113E3A -_081141CE: - add sp, 0x3C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081141E0: .4byte 0x000010c4 -_081141E4: .4byte 0x000018c4 -_081141E8: .4byte 0x02014800 -_081141EC: .4byte 0x02014804 - thumb_func_end unref_sub_8113B50 - - thumb_func_start sub_81141F0 -sub_81141F0: @ 81141F0 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r6, r0, 0 - mov r8, r1 - mov r9, r2 - ldr r3, _0811424C @ =0x02014800 - lsls r1, r2, 5 - mov r0, r8 - adds r4, r0, r1 - ldr r5, _08114250 @ =0x000030c4 - adds r2, r3, r5 - adds r2, r4, r2 - adds r1, r6, r1 - ldr r7, _08114254 @ =0x000010c4 - adds r0, r3, r7 - adds r5, r1, r0 - ldrb r0, [r5] - strb r0, [r2] - ldr r0, _08114258 @ =0x000038c4 - adds r2, r3, r0 - adds r2, r4, r2 - ldr r7, _0811425C @ =0x000018c4 - adds r0, r3, r7 - adds r1, r0 - ldrb r0, [r1] - strb r0, [r2] - movs r7, 0 - ldr r1, _08114260 @ =0x000020c4 - adds r0, r3, r1 - adds r2, r4, r0 - ldrb r1, [r5] - ldrb r0, [r2] - mov r12, r3 - cmp r1, r0 - bcs _08114264 - mov r0, r12 - adds r0, 0xC4 - adds r0, r4, r0 - movs r1, 0x4 - strb r1, [r0] - ldrb r1, [r2] - ldrb r0, [r5] - b _08114276 - .align 2, 0 -_0811424C: .4byte 0x02014800 -_08114250: .4byte 0x000030c4 -_08114254: .4byte 0x000010c4 -_08114258: .4byte 0x000038c4 -_0811425C: .4byte 0x000018c4 -_08114260: .4byte 0x000020c4 -_08114264: - cmp r1, r0 - bls _08114278 - mov r0, r12 - adds r0, 0xC4 - adds r0, r4, r0 - movs r1, 0x1 - strb r1, [r0] - ldrb r1, [r5] - ldrb r0, [r2] -_08114276: - subs r7, r1, r0 -_08114278: - mov r5, r8 - lsls r3, r5, 1 - mov r0, r9 - lsls r4, r0, 6 - adds r0, r3, r4 - ldr r1, _081142BC @ =0x000080c4 - add r1, r12 - adds r0, r1 - lsls r1, r7, 4 - strh r1, [r0] - movs r7, 0 - mov r1, r9 - lsls r2, r1, 5 - adds r1, r6, r2 - ldr r0, _081142C0 @ =0x000018c4 - add r0, r12 - adds r6, r1, r0 - adds r1, r5, r2 - ldr r0, _081142C4 @ =0x000028c4 - add r0, r12 - adds r5, r1, r0 - ldrb r2, [r6] - ldrb r0, [r5] - cmp r2, r0 - bcs _081142CC - ldr r0, _081142C8 @ =0x000008c4 - add r0, r12 - adds r0, r1, r0 - movs r1, 0x3 - strb r1, [r0] - ldrb r1, [r5] - ldrb r0, [r6] - b _081142DE - .align 2, 0 -_081142BC: .4byte 0x000080c4 -_081142C0: .4byte 0x000018c4 -_081142C4: .4byte 0x000028c4 -_081142C8: .4byte 0x000008c4 -_081142CC: - cmp r2, r0 - bls _081142E0 - ldr r0, _08114304 @ =0x000008c4 - add r0, r12 - adds r0, r1, r0 - movs r1, 0x2 - strb r1, [r0] - ldrb r1, [r6] - ldrb r0, [r5] -_081142DE: - subs r7, r1, r0 -_081142E0: - adds r0, r3, r4 - ldr r1, _08114308 @ =0x000090c4 - add r1, r12 - adds r0, r1 - lsls r1, r7, 4 - strh r1, [r0] - mov r1, r12 - adds r1, 0x84 - add r1, r9 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08114304: .4byte 0x000008c4 -_08114308: .4byte 0x000090c4 - thumb_func_end sub_81141F0 - - thumb_func_start sub_811430C -sub_811430C: @ 811430C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r5, _081143AC @ =0x02014800 - lsls r4, r1, 5 - adds r4, r0, r4 - ldr r2, _081143B0 @ =0x000028c4 - adds r2, r5 - mov r10, r2 - add r10, r4 - mov r3, r10 - ldrb r2, [r3] - ldr r6, _081143B4 @ =0x000020c4 - adds r6, r5 - mov r8, r6 - add r8, r4 - mov r6, r8 - ldrb r3, [r6] - subs r7, r2, r3 - ldr r2, _081143B8 @ =0x000030c4 - adds r6, r5, r2 - adds r6, r4, r6 - ldr r2, _081143BC @ =0x000038c4 - adds r2, r5 - mov r9, r2 - add r9, r4 - lsrs r2, r7, 31 - adds r2, r7, r2 - asrs r2, 1 - adds r3, r2 - mov r2, r9 - strb r3, [r2] - strb r3, [r6] - adds r2, r5, 0 - adds r2, 0xC4 - adds r2, r4, r2 - movs r3, 0x5 - strb r3, [r2] - ldr r3, _081143C0 @ =0x000008c4 - adds r2, r5, r3 - adds r4, r2 - movs r2, 0x7 - strb r2, [r4] - adds r3, r5, 0 - adds r3, 0x84 - adds r3, r1, r3 - ldrb r2, [r3] - adds r2, 0x1 - strb r2, [r3] - ldrb r3, [r6] - mov r4, r8 - ldrb r2, [r4] - subs r7, r3, r2 - lsls r0, 1 - lsls r1, 6 - adds r0, r1 - ldr r6, _081143C4 @ =0x000080c4 - adds r1, r5, r6 - adds r1, r0, r1 - lsls r2, r7, 4 - strh r2, [r1] - mov r1, r10 - ldrb r2, [r1] - mov r3, r9 - ldrb r1, [r3] - subs r7, r2, r1 - ldr r4, _081143C8 @ =0x000090c4 - adds r5, r4 - adds r0, r5 - lsls r1, r7, 4 - strh r1, [r0] - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081143AC: .4byte 0x02014800 -_081143B0: .4byte 0x000028c4 -_081143B4: .4byte 0x000020c4 -_081143B8: .4byte 0x000030c4 -_081143BC: .4byte 0x000038c4 -_081143C0: .4byte 0x000008c4 -_081143C4: .4byte 0x000080c4 -_081143C8: .4byte 0x000090c4 - thumb_func_end sub_811430C - - thumb_func_start unref_sub_81143CC -unref_sub_81143CC: @ 81143CC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x14 - movs r0, 0x1 - str r0, [sp, 0x4] - ldr r0, _08114408 @ =0x02014800 - ldr r2, _0811440C @ =0x0000a0c4 - adds r1, r0, r2 - ldrb r3, [r1] - adds r4, r0, 0 - cmp r3, 0 - beq _081143EE - subs r0, r3, 0x1 - strb r0, [r1] -_081143EE: - movs r5, 0 - str r5, [sp] -_081143F2: - movs r3, 0 - adds r2, r4, 0 - adds r0, r4, 0 - adds r0, 0x84 - ldr r1, [sp] - adds r0, r1, r0 - adds r1, 0x1 - str r1, [sp, 0x8] - bl _08114D84 - .align 2, 0 -_08114408: .4byte 0x02014800 -_0811440C: .4byte 0x0000a0c4 -_08114410: - ldr r5, [sp] - lsls r0, r5, 5 - adds r1, r3, r0 - adds r2, 0xC4 - adds r1, r2 - ldrb r2, [r1] - mov r8, r0 - adds r0, r3, 0x1 - mov r10, r0 - cmp r2, 0xC - bls _08114428 - b _081148D2 -_08114428: - lsls r0, r2, 2 - ldr r1, _08114434 @ =_08114438 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08114434: .4byte _08114438 - .align 2, 0 -_08114438: - .4byte _081148D2 - .4byte _0811446C - .4byte _081144F0 - .4byte _0811457C - .4byte _08114600 - .4byte _0811468C - .4byte _081146C8 - .4byte _08114704 - .4byte _08114740 - .4byte _0811477C - .4byte _081147D0 - .4byte _08114810 - .4byte _08114858 -_0811446C: - movs r1, 0 - str r1, [sp, 0x4] - lsls r0, r3, 1 - ldr r2, [sp] - lsls r1, r2, 6 - adds r0, r1 - ldr r5, _081144E0 @ =0x000060c4 - adds r2, r4, r5 - adds r2, r0, r2 - ldr r5, _081144E4 @ =0x000080c4 - adds r1, r4, r5 - adds r0, r1 - ldrh r1, [r0] - ldrh r0, [r2] - adds r1, r0 - movs r0, 0xFF - lsls r0, 8 - ands r0, r1 - lsrs r5, r0, 8 - movs r0, 0xFF - ands r1, r0 - strh r1, [r2] - movs r6, 0 - adds r1, r3, 0x1 - mov r10, r1 - ldr r2, [sp, 0x4] - cmp r2, r5 - blt _081144A6 - b _081148D2 -_081144A6: - mov r9, r4 - mov r4, r8 - adds r7, r3, r4 - ldr r0, _081144E8 @ =0x000030c4 - add r0, r9 - adds r4, r7, r0 - ldr r0, _081144EC @ =0x000020c4 - add r0, r9 - adds r2, r7, r0 -_081144B8: - ldrb r0, [r4] - subs r0, 0x1 - strb r0, [r4] - ldrb r1, [r4] - ldr r0, [sp] - str r2, [sp, 0xC] - str r3, [sp, 0x10] - bl sub_8114DB4 - ldrb r0, [r4] - ldr r2, [sp, 0xC] - ldr r3, [sp, 0x10] - ldrb r1, [r2] - cmp r0, r1 - bne _081144D8 - b _081148A0 -_081144D8: - adds r6, 0x1 - cmp r6, r5 - blt _081144B8 - b _081148D2 - .align 2, 0 -_081144E0: .4byte 0x000060c4 -_081144E4: .4byte 0x000080c4 -_081144E8: .4byte 0x000030c4 -_081144EC: .4byte 0x000020c4 -_081144F0: - movs r2, 0 - str r2, [sp, 0x4] - ldr r4, _08114568 @ =0x02014800 - lsls r0, r3, 1 - ldr r5, [sp] - lsls r1, r5, 6 - adds r0, r1 - ldr r1, _0811456C @ =0x000060c4 - adds r2, r4, r1 - adds r2, r0, r2 - ldr r5, _08114570 @ =0x000080c4 - adds r1, r4, r5 - adds r0, r1 - ldrh r1, [r0] - ldrh r0, [r2] - adds r1, r0 - movs r0, 0xFF - lsls r0, 8 - ands r0, r1 - lsrs r5, r0, 8 - movs r0, 0xFF - ands r1, r0 - strh r1, [r2] - movs r6, 0 - adds r1, r3, 0x1 - mov r10, r1 - ldr r2, [sp, 0x4] - cmp r2, r5 - blt _0811452C - b _081148D2 -_0811452C: - mov r9, r4 - mov r4, r8 - adds r7, r3, r4 - ldr r0, _08114574 @ =0x000030c4 - add r0, r9 - adds r4, r7, r0 - ldr r0, _08114578 @ =0x000020c4 - add r0, r9 - adds r2, r7, r0 -_0811453E: - ldrb r0, [r4] - ldrb r1, [r2] - cmp r0, r1 - bne _08114548 - b _081148B8 -_08114548: - adds r1, r0, 0 - ldr r0, [sp] - str r2, [sp, 0xC] - str r3, [sp, 0x10] - bl sub_8114DF0 - ldrb r0, [r4] - subs r0, 0x1 - strb r0, [r4] - adds r6, 0x1 - ldr r2, [sp, 0xC] - ldr r3, [sp, 0x10] - cmp r6, r5 - blt _0811453E - b _081148D2 - .align 2, 0 -_08114568: .4byte 0x02014800 -_0811456C: .4byte 0x000060c4 -_08114570: .4byte 0x000080c4 -_08114574: .4byte 0x000030c4 -_08114578: .4byte 0x000020c4 -_0811457C: - movs r2, 0 - str r2, [sp, 0x4] - lsls r0, r3, 1 - ldr r5, [sp] - lsls r1, r5, 6 - adds r0, r1 - ldr r1, _081145F0 @ =0x000060c4 - adds r2, r4, r1 - adds r2, r0, r2 - ldr r5, _081145F4 @ =0x000080c4 - adds r1, r4, r5 - adds r0, r1 - ldrh r1, [r0] - ldrh r0, [r2] - adds r1, r0 - movs r0, 0xFF - lsls r0, 8 - ands r0, r1 - lsrs r5, r0, 8 - movs r0, 0xFF - ands r1, r0 - strh r1, [r2] - movs r6, 0 - adds r1, r3, 0x1 - mov r10, r1 - ldr r2, [sp, 0x4] - cmp r2, r5 - blt _081145B6 - b _081148D2 -_081145B6: - mov r9, r4 - mov r4, r8 - adds r7, r3, r4 - ldr r0, _081145F8 @ =0x000030c4 - add r0, r9 - adds r4, r7, r0 - ldr r0, _081145FC @ =0x000020c4 - add r0, r9 - adds r2, r7, r0 -_081145C8: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - ldrb r1, [r4] - ldr r0, [sp] - str r2, [sp, 0xC] - str r3, [sp, 0x10] - bl sub_8114DB4 - ldrb r0, [r4] - ldr r2, [sp, 0xC] - ldr r3, [sp, 0x10] - ldrb r1, [r2] - cmp r0, r1 - bne _081145E8 - b _081148AC -_081145E8: - adds r6, 0x1 - cmp r6, r5 - blt _081145C8 - b _081148D2 - .align 2, 0 -_081145F0: .4byte 0x000060c4 -_081145F4: .4byte 0x000080c4 -_081145F8: .4byte 0x000030c4 -_081145FC: .4byte 0x000020c4 -_08114600: - movs r2, 0 - str r2, [sp, 0x4] - ldr r4, _08114678 @ =0x02014800 - lsls r0, r3, 1 - ldr r5, [sp] - lsls r1, r5, 6 - adds r0, r1 - ldr r1, _0811467C @ =0x000060c4 - adds r2, r4, r1 - adds r2, r0, r2 - ldr r5, _08114680 @ =0x000080c4 - adds r1, r4, r5 - adds r0, r1 - ldrh r1, [r0] - ldrh r0, [r2] - adds r1, r0 - movs r0, 0xFF - lsls r0, 8 - ands r0, r1 - lsrs r5, r0, 8 - movs r0, 0xFF - ands r1, r0 - strh r1, [r2] - movs r6, 0 - adds r1, r3, 0x1 - mov r10, r1 - ldr r2, [sp, 0x4] - cmp r2, r5 - blt _0811463C - b _081148D2 -_0811463C: - mov r9, r4 - mov r4, r8 - adds r7, r3, r4 - ldr r0, _08114684 @ =0x000030c4 - add r0, r9 - adds r4, r7, r0 - ldr r0, _08114688 @ =0x000020c4 - add r0, r9 - adds r2, r7, r0 -_0811464E: - ldrb r0, [r4] - ldrb r1, [r2] - cmp r0, r1 - bne _08114658 - b _081148B8 -_08114658: - adds r1, r0, 0 - ldr r0, [sp] - str r2, [sp, 0xC] - str r3, [sp, 0x10] - bl sub_8114DF0 - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - adds r6, 0x1 - ldr r2, [sp, 0xC] - ldr r3, [sp, 0x10] - cmp r6, r5 - blt _0811464E - b _081148D2 - .align 2, 0 -_08114678: .4byte 0x02014800 -_0811467C: .4byte 0x000060c4 -_08114680: .4byte 0x000080c4 -_08114684: .4byte 0x000030c4 -_08114688: .4byte 0x000020c4 -_0811468C: - movs r2, 0 - str r2, [sp, 0x4] - ldr r5, _081146C0 @ =0x02014800 - mov r0, r8 - adds r4, r3, r0 - ldr r1, _081146C4 @ =0x000030c4 - adds r0, r5, r1 - adds r0, r4, r0 - ldrb r1, [r0] - ldr r0, [sp] - str r3, [sp, 0x10] - bl sub_8114E48 - lsls r0, 24 - ldr r3, [sp, 0x10] - adds r2, r3, 0x1 - mov r10, r2 - cmp r0, 0 - bne _081146B4 - b _081148D2 -_081146B4: - adds r0, r5, 0 - adds r0, 0xC4 - adds r0, r4, r0 - movs r1, 0x9 - strb r1, [r0] - b _081148D2 - .align 2, 0 -_081146C0: .4byte 0x02014800 -_081146C4: .4byte 0x000030c4 -_081146C8: - movs r4, 0 - str r4, [sp, 0x4] - ldr r5, _081146FC @ =0x02014800 - mov r0, r8 - adds r4, r3, r0 - ldr r1, _08114700 @ =0x000030c4 - adds r0, r5, r1 - adds r0, r4, r0 - ldrb r1, [r0] - ldr r0, [sp] - str r3, [sp, 0x10] - bl sub_8114E48 - lsls r0, 24 - ldr r3, [sp, 0x10] - adds r2, r3, 0x1 - mov r10, r2 - cmp r0, 0 - bne _081146F0 - b _081148D2 -_081146F0: - adds r0, r5, 0 - adds r0, 0xC4 - adds r0, r4, r0 - movs r1, 0xA - strb r1, [r0] - b _081148D2 - .align 2, 0 -_081146FC: .4byte 0x02014800 -_08114700: .4byte 0x000030c4 -_08114704: - movs r4, 0 - str r4, [sp, 0x4] - ldr r5, _08114738 @ =0x02014800 - mov r0, r8 - adds r4, r3, r0 - ldr r1, _0811473C @ =0x000030c4 - adds r0, r5, r1 - adds r0, r4, r0 - ldrb r1, [r0] - ldr r0, [sp] - str r3, [sp, 0x10] - bl sub_8114E48 - lsls r0, 24 - ldr r3, [sp, 0x10] - adds r2, r3, 0x1 - mov r10, r2 - cmp r0, 0 - bne _0811472C - b _081148D2 -_0811472C: - adds r0, r5, 0 - adds r0, 0xC4 - adds r0, r4, r0 - movs r1, 0xB - strb r1, [r0] - b _081148D2 - .align 2, 0 -_08114738: .4byte 0x02014800 -_0811473C: .4byte 0x000030c4 -_08114740: - movs r4, 0 - str r4, [sp, 0x4] - ldr r5, _08114774 @ =0x02014800 - mov r0, r8 - adds r4, r3, r0 - ldr r1, _08114778 @ =0x000030c4 - adds r0, r5, r1 - adds r0, r4, r0 - ldrb r1, [r0] - ldr r0, [sp] - str r3, [sp, 0x10] - bl sub_8114E48 - lsls r0, 24 - ldr r3, [sp, 0x10] - adds r2, r3, 0x1 - mov r10, r2 - cmp r0, 0 - bne _08114768 - b _081148D2 -_08114768: - adds r0, r5, 0 - adds r0, 0xC4 - adds r0, r4, r0 - movs r1, 0xC - strb r1, [r0] - b _081148D2 - .align 2, 0 -_08114774: .4byte 0x02014800 -_08114778: .4byte 0x000030c4 -_0811477C: - movs r4, 0 - str r4, [sp, 0x4] - ldr r6, _081147B4 @ =0x02014800 - mov r0, r8 - adds r5, r3, r0 - ldr r1, _081147B8 @ =0x000030c4 - adds r4, r6, r1 - adds r4, r5, r4 - ldrb r1, [r4] - ldr r0, [sp] - str r3, [sp, 0x10] - bl sub_8114DB4 - ldr r2, _081147BC @ =0x000020c4 - adds r0, r6, r2 - adds r0, r5, r0 - ldrb r1, [r4] - ldr r3, [sp, 0x10] - ldrb r0, [r0] - cmp r1, r0 - bne _081147C0 - adds r0, r6, 0 - adds r0, 0xC4 - adds r0, r5, r0 - mov r4, sp - ldrb r4, [r4, 0x4] - strb r4, [r0] - b _08114844 - .align 2, 0 -_081147B4: .4byte 0x02014800 -_081147B8: .4byte 0x000030c4 -_081147BC: .4byte 0x000020c4 -_081147C0: - adds r0, r6, 0 - adds r0, 0xC4 - adds r0, r5, r0 - movs r1, 0x1 - strb r1, [r0] - adds r0, r3, 0x1 - mov r10, r0 - b _081148D2 -_081147D0: - movs r1, 0 - str r1, [sp, 0x4] - ldr r6, _08114804 @ =0x02014800 - mov r2, r8 - adds r5, r3, r2 - ldr r0, _08114808 @ =0x000030c4 - adds r4, r6, r0 - adds r4, r5, r4 - ldrb r1, [r4] - ldr r0, [sp] - str r3, [sp, 0x10] - bl sub_8114DF0 - ldr r1, _0811480C @ =0x000020c4 - adds r0, r6, r1 - adds r0, r5, r0 - ldrb r1, [r4] - ldr r3, [sp, 0x10] - ldrb r0, [r0] - cmp r1, r0 - beq _08114882 - adds r0, r6, 0 - adds r0, 0xC4 - adds r0, r5, r0 - movs r1, 0x2 - b _08114842 - .align 2, 0 -_08114804: .4byte 0x02014800 -_08114808: .4byte 0x000030c4 -_0811480C: .4byte 0x000020c4 -_08114810: - movs r0, 0 - str r0, [sp, 0x4] - ldr r6, _0811484C @ =0x02014800 - mov r1, r8 - adds r5, r3, r1 - ldr r2, _08114850 @ =0x000030c4 - adds r4, r6, r2 - adds r4, r5, r4 - ldrb r1, [r4] - ldr r0, [sp] - str r3, [sp, 0x10] - bl sub_8114DB4 - ldr r1, _08114854 @ =0x000020c4 - adds r0, r6, r1 - adds r0, r5, r0 - ldrb r1, [r4] - ldr r3, [sp, 0x10] - ldrb r0, [r0] - cmp r1, r0 - beq _08114882 - adds r0, r6, 0 - adds r0, 0xC4 - adds r0, r5, r0 - movs r1, 0x3 -_08114842: - strb r1, [r0] -_08114844: - adds r5, r3, 0x1 - mov r10, r5 - b _081148D2 - .align 2, 0 -_0811484C: .4byte 0x02014800 -_08114850: .4byte 0x000030c4 -_08114854: .4byte 0x000020c4 -_08114858: - movs r0, 0 - str r0, [sp, 0x4] - ldr r6, _08114894 @ =0x02014800 - mov r1, r8 - adds r5, r3, r1 - ldr r2, _08114898 @ =0x000030c4 - adds r4, r6, r2 - adds r4, r5, r4 - ldrb r1, [r4] - ldr r0, [sp] - str r3, [sp, 0x10] - bl sub_8114DF0 - ldr r1, _0811489C @ =0x000020c4 - adds r0, r6, r1 - adds r0, r5, r0 - ldrb r1, [r4] - ldr r3, [sp, 0x10] - ldrb r0, [r0] - cmp r1, r0 - bne _081148C4 -_08114882: - adds r0, r6, 0 - adds r0, 0xC4 - adds r0, r5, r0 - mov r2, sp - ldrb r2, [r2, 0x4] - strb r2, [r0] - adds r4, r3, 0x1 - mov r10, r4 - b _081148D2 - .align 2, 0 -_08114894: .4byte 0x02014800 -_08114898: .4byte 0x000030c4 -_0811489C: .4byte 0x000020c4 -_081148A0: - mov r0, r9 - adds r0, 0xC4 - adds r0, r7, r0 - movs r5, 0 - strb r5, [r0] - b _081148D2 -_081148AC: - mov r0, r9 - adds r0, 0xC4 - adds r0, r7, r0 - movs r1, 0 - strb r1, [r0] - b _081148D2 -_081148B8: - mov r0, r9 - adds r0, 0xC4 - adds r0, r7, r0 - movs r1, 0 - strb r1, [r0] - b _081148D2 -_081148C4: - adds r0, r6, 0 - adds r0, 0xC4 - adds r0, r5, r0 - movs r1, 0x4 - strb r1, [r0] - adds r2, r3, 0x1 - mov r10, r2 -_081148D2: - ldr r0, _081148F4 @ =0x02014800 - mov r4, r8 - adds r1, r3, r4 - ldr r5, _081148F8 @ =0x000008c4 - adds r2, r0, r5 - adds r1, r2 - ldrb r1, [r1] - adds r4, r0, 0 - cmp r1, 0xC - bls _081148E8 - b _08114D76 -_081148E8: - lsls r0, r1, 2 - ldr r1, _081148FC @ =_08114900 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_081148F4: .4byte 0x02014800 -_081148F8: .4byte 0x000008c4 -_081148FC: .4byte _08114900 - .align 2, 0 -_08114900: - .4byte _08114D76 - .4byte _08114934 - .4byte _081149B8 - .4byte _08114A3C - .4byte _08114AC0 - .4byte _08114B44 - .4byte _08114B7C - .4byte _08114BB4 - .4byte _08114BEC - .4byte _08114C24 - .4byte _08114C78 - .4byte _08114CB8 - .4byte _08114CF8 -_08114934: - movs r0, 0 - str r0, [sp, 0x4] - lsls r0, r3, 1 - ldr r2, [sp] - lsls r1, r2, 6 - adds r0, r1 - ldr r5, _081149A8 @ =0x000070c4 - adds r2, r4, r5 - adds r2, r0, r2 - ldr r5, _081149AC @ =0x000090c4 - adds r1, r4, r5 - adds r0, r1 - ldrh r1, [r0] - ldrh r0, [r2] - adds r1, r0 - movs r0, 0xFF - lsls r0, 8 - ands r0, r1 - lsrs r5, r0, 8 - movs r0, 0xFF - ands r1, r0 - strh r1, [r2] - movs r6, 0 - ldr r1, [sp, 0x4] - cmp r1, r5 - blt _0811496A - b _08114D76 -_0811496A: - mov r9, r4 - mov r2, r8 - adds r7, r3, r2 - ldr r0, _081149B0 @ =0x000038c4 - add r0, r9 - adds r4, r7, r0 - movs r3, 0 - ldr r0, _081149B4 @ =0x000028c4 - add r0, r9 - adds r2, r7, r0 -_0811497E: - ldrb r0, [r4] - subs r0, 0x1 - strb r0, [r4] - ldrb r1, [r4] - ldr r0, [sp] - str r2, [sp, 0xC] - str r3, [sp, 0x10] - bl sub_8114DB4 - ldrb r0, [r4] - ldr r2, [sp, 0xC] - ldr r3, [sp, 0x10] - ldrb r1, [r2] - cmp r0, r1 - bne _0811499E - b _08114D4C -_0811499E: - adds r6, 0x1 - cmp r6, r5 - blt _0811497E - b _08114D76 - .align 2, 0 -_081149A8: .4byte 0x000070c4 -_081149AC: .4byte 0x000090c4 -_081149B0: .4byte 0x000038c4 -_081149B4: .4byte 0x000028c4 -_081149B8: - movs r2, 0 - str r2, [sp, 0x4] - ldr r4, _08114A28 @ =0x02014800 - lsls r0, r3, 1 - ldr r5, [sp] - lsls r1, r5, 6 - adds r0, r1 - ldr r1, _08114A2C @ =0x000070c4 - adds r2, r4, r1 - adds r2, r0, r2 - ldr r5, _08114A30 @ =0x000090c4 - adds r1, r4, r5 - adds r0, r1 - ldrh r1, [r0] - ldrh r0, [r2] - adds r1, r0 - movs r0, 0xFF - lsls r0, 8 - ands r0, r1 - lsrs r5, r0, 8 - movs r0, 0xFF - ands r1, r0 - strh r1, [r2] - movs r6, 0 - ldr r1, [sp, 0x4] - cmp r1, r5 - blt _081149F0 - b _08114D76 -_081149F0: - mov r9, r4 - mov r2, r8 - adds r7, r3, r2 - ldr r0, _08114A34 @ =0x000038c4 - add r0, r9 - adds r4, r7, r0 - ldr r0, _08114A38 @ =0x000028c4 - add r0, r9 - adds r2, r7, r0 -_08114A02: - ldrb r0, [r4] - ldrb r1, [r2] - cmp r0, r1 - bne _08114A0C - b _08114D3C -_08114A0C: - adds r1, r0, 0 - ldr r0, [sp] - str r2, [sp, 0xC] - bl sub_8114DF0 - ldrb r0, [r4] - subs r0, 0x1 - strb r0, [r4] - adds r6, 0x1 - ldr r2, [sp, 0xC] - cmp r6, r5 - blt _08114A02 - b _08114D76 - .align 2, 0 -_08114A28: .4byte 0x02014800 -_08114A2C: .4byte 0x000070c4 -_08114A30: .4byte 0x000090c4 -_08114A34: .4byte 0x000038c4 -_08114A38: .4byte 0x000028c4 -_08114A3C: - movs r2, 0 - str r2, [sp, 0x4] - lsls r0, r3, 1 - ldr r5, [sp] - lsls r1, r5, 6 - adds r0, r1 - ldr r1, _08114AB0 @ =0x000070c4 - adds r2, r4, r1 - adds r2, r0, r2 - ldr r5, _08114AB4 @ =0x000090c4 - adds r1, r4, r5 - adds r0, r1 - ldrh r1, [r0] - ldrh r0, [r2] - adds r1, r0 - movs r0, 0xFF - lsls r0, 8 - ands r0, r1 - lsrs r5, r0, 8 - movs r0, 0xFF - ands r1, r0 - strh r1, [r2] - movs r6, 0 - ldr r1, [sp, 0x4] - cmp r1, r5 - blt _08114A72 - b _08114D76 -_08114A72: - mov r9, r4 - mov r2, r8 - adds r7, r3, r2 - ldr r0, _08114AB8 @ =0x000038c4 - add r0, r9 - adds r4, r7, r0 - movs r3, 0 - ldr r0, _08114ABC @ =0x000028c4 - add r0, r9 - adds r2, r7, r0 -_08114A86: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - ldrb r1, [r4] - ldr r0, [sp] - str r2, [sp, 0xC] - str r3, [sp, 0x10] - bl sub_8114DB4 - ldrb r0, [r4] - ldr r2, [sp, 0xC] - ldr r3, [sp, 0x10] - ldrb r1, [r2] - cmp r0, r1 - bne _08114AA6 - b _08114D4C -_08114AA6: - adds r6, 0x1 - cmp r6, r5 - blt _08114A86 - b _08114D76 - .align 2, 0 -_08114AB0: .4byte 0x000070c4 -_08114AB4: .4byte 0x000090c4 -_08114AB8: .4byte 0x000038c4 -_08114ABC: .4byte 0x000028c4 -_08114AC0: - movs r2, 0 - str r2, [sp, 0x4] - ldr r4, _08114B30 @ =0x02014800 - lsls r0, r3, 1 - ldr r5, [sp] - lsls r1, r5, 6 - adds r0, r1 - ldr r1, _08114B34 @ =0x000070c4 - adds r2, r4, r1 - adds r2, r0, r2 - ldr r5, _08114B38 @ =0x000090c4 - adds r1, r4, r5 - adds r0, r1 - ldrh r1, [r0] - ldrh r0, [r2] - adds r1, r0 - movs r0, 0xFF - lsls r0, 8 - ands r0, r1 - lsrs r5, r0, 8 - movs r0, 0xFF - ands r1, r0 - strh r1, [r2] - movs r6, 0 - ldr r1, [sp, 0x4] - cmp r1, r5 - blt _08114AF8 - b _08114D76 -_08114AF8: - mov r9, r4 - mov r2, r8 - adds r7, r3, r2 - ldr r0, _08114B3C @ =0x000038c4 - add r0, r9 - adds r4, r7, r0 - ldr r0, _08114B40 @ =0x000028c4 - add r0, r9 - adds r2, r7, r0 -_08114B0A: - ldrb r0, [r4] - ldrb r1, [r2] - cmp r0, r1 - bne _08114B14 - b _08114D5C -_08114B14: - adds r1, r0, 0 - ldr r0, [sp] - str r2, [sp, 0xC] - bl sub_8114DF0 - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - adds r6, 0x1 - ldr r2, [sp, 0xC] - cmp r6, r5 - blt _08114B0A - b _08114D76 - .align 2, 0 -_08114B30: .4byte 0x02014800 -_08114B34: .4byte 0x000070c4 -_08114B38: .4byte 0x000090c4 -_08114B3C: .4byte 0x000038c4 -_08114B40: .4byte 0x000028c4 -_08114B44: - movs r2, 0 - str r2, [sp, 0x4] - ldr r5, _08114B70 @ =0x02014800 - mov r0, r8 - adds r4, r3, r0 - ldr r1, _08114B74 @ =0x000038c4 - adds r0, r5, r1 - adds r0, r4, r0 - ldrb r1, [r0] - ldr r0, [sp] - bl sub_8114E48 - lsls r0, 24 - cmp r0, 0 - bne _08114B64 - b _08114D76 -_08114B64: - ldr r2, _08114B78 @ =0x000008c4 - adds r0, r5, r2 - adds r0, r4, r0 - movs r1, 0x9 - b _08114D74 - .align 2, 0 -_08114B70: .4byte 0x02014800 -_08114B74: .4byte 0x000038c4 -_08114B78: .4byte 0x000008c4 -_08114B7C: - movs r4, 0 - str r4, [sp, 0x4] - ldr r5, _08114BA8 @ =0x02014800 - mov r0, r8 - adds r4, r3, r0 - ldr r1, _08114BAC @ =0x000038c4 - adds r0, r5, r1 - adds r0, r4, r0 - ldrb r1, [r0] - ldr r0, [sp] - bl sub_8114E48 - lsls r0, 24 - cmp r0, 0 - bne _08114B9C - b _08114D76 -_08114B9C: - ldr r2, _08114BB0 @ =0x000008c4 - adds r0, r5, r2 - adds r0, r4, r0 - movs r1, 0xA - b _08114D74 - .align 2, 0 -_08114BA8: .4byte 0x02014800 -_08114BAC: .4byte 0x000038c4 -_08114BB0: .4byte 0x000008c4 -_08114BB4: - movs r4, 0 - str r4, [sp, 0x4] - ldr r5, _08114BE0 @ =0x02014800 - mov r0, r8 - adds r4, r3, r0 - ldr r1, _08114BE4 @ =0x000038c4 - adds r0, r5, r1 - adds r0, r4, r0 - ldrb r1, [r0] - ldr r0, [sp] - bl sub_8114E48 - lsls r0, 24 - cmp r0, 0 - bne _08114BD4 - b _08114D76 -_08114BD4: - ldr r2, _08114BE8 @ =0x000008c4 - adds r0, r5, r2 - adds r0, r4, r0 - movs r1, 0xB - b _08114D74 - .align 2, 0 -_08114BE0: .4byte 0x02014800 -_08114BE4: .4byte 0x000038c4 -_08114BE8: .4byte 0x000008c4 -_08114BEC: - movs r4, 0 - str r4, [sp, 0x4] - ldr r5, _08114C18 @ =0x02014800 - mov r0, r8 - adds r4, r3, r0 - ldr r1, _08114C1C @ =0x000038c4 - adds r0, r5, r1 - adds r0, r4, r0 - ldrb r1, [r0] - ldr r0, [sp] - bl sub_8114E48 - lsls r0, 24 - cmp r0, 0 - bne _08114C0C - b _08114D76 -_08114C0C: - ldr r2, _08114C20 @ =0x000008c4 - adds r0, r5, r2 - adds r0, r4, r0 - movs r1, 0xC - b _08114D74 - .align 2, 0 -_08114C18: .4byte 0x02014800 -_08114C1C: .4byte 0x000038c4 -_08114C20: .4byte 0x000008c4 -_08114C24: - movs r4, 0 - str r4, [sp, 0x4] - ldr r6, _08114C58 @ =0x02014800 - mov r0, r8 - adds r5, r3, r0 - ldr r1, _08114C5C @ =0x000038c4 - adds r4, r6, r1 - adds r4, r5, r4 - ldrb r1, [r4] - ldr r0, [sp] - bl sub_8114DB4 - ldr r2, _08114C60 @ =0x000028c4 - adds r0, r6, r2 - adds r0, r5, r0 - ldrb r1, [r4] - ldrb r0, [r0] - cmp r1, r0 - bne _08114C68 - ldr r4, _08114C64 @ =0x000008c4 - adds r0, r6, r4 - adds r0, r5, r0 - mov r5, sp - ldrb r5, [r5, 0x4] - strb r5, [r0] - b _08114D76 - .align 2, 0 -_08114C58: .4byte 0x02014800 -_08114C5C: .4byte 0x000038c4 -_08114C60: .4byte 0x000028c4 -_08114C64: .4byte 0x000008c4 -_08114C68: - ldr r1, _08114C74 @ =0x000008c4 - adds r0, r6, r1 - adds r0, r5, r0 - movs r1, 0x1 - b _08114D74 - .align 2, 0 -_08114C74: .4byte 0x000008c4 -_08114C78: - movs r2, 0 - str r2, [sp, 0x4] - ldr r6, _08114CA8 @ =0x02014800 - mov r4, r8 - adds r5, r3, r4 - ldr r0, _08114CAC @ =0x000038c4 - adds r4, r6, r0 - adds r4, r5, r4 - ldrb r1, [r4] - ldr r0, [sp] - bl sub_8114DF0 - ldr r1, _08114CB0 @ =0x000028c4 - adds r0, r6, r1 - adds r0, r5, r0 - ldrb r1, [r4] - ldrb r0, [r0] - cmp r1, r0 - beq _08114D1E - ldr r1, _08114CB4 @ =0x000008c4 - adds r0, r6, r1 - adds r0, r5, r0 - movs r1, 0x2 - b _08114D74 - .align 2, 0 -_08114CA8: .4byte 0x02014800 -_08114CAC: .4byte 0x000038c4 -_08114CB0: .4byte 0x000028c4 -_08114CB4: .4byte 0x000008c4 -_08114CB8: - movs r2, 0 - str r2, [sp, 0x4] - ldr r6, _08114CE8 @ =0x02014800 - mov r4, r8 - adds r5, r3, r4 - ldr r0, _08114CEC @ =0x000038c4 - adds r4, r6, r0 - adds r4, r5, r4 - ldrb r1, [r4] - ldr r0, [sp] - bl sub_8114DB4 - ldr r1, _08114CF0 @ =0x000028c4 - adds r0, r6, r1 - adds r0, r5, r0 - ldrb r1, [r4] - ldrb r0, [r0] - cmp r1, r0 - beq _08114D1E - ldr r1, _08114CF4 @ =0x000008c4 - adds r0, r6, r1 - adds r0, r5, r0 - movs r1, 0x3 - b _08114D74 - .align 2, 0 -_08114CE8: .4byte 0x02014800 -_08114CEC: .4byte 0x000038c4 -_08114CF0: .4byte 0x000028c4 -_08114CF4: .4byte 0x000008c4 -_08114CF8: - movs r2, 0 - str r2, [sp, 0x4] - ldr r6, _08114D2C @ =0x02014800 - mov r4, r8 - adds r5, r3, r4 - ldr r0, _08114D30 @ =0x000038c4 - adds r4, r6, r0 - adds r4, r5, r4 - ldrb r1, [r4] - ldr r0, [sp] - bl sub_8114DF0 - ldr r1, _08114D34 @ =0x000028c4 - adds r0, r6, r1 - adds r0, r5, r0 - ldrb r1, [r4] - ldrb r0, [r0] - cmp r1, r0 - bne _08114D6C -_08114D1E: - ldr r2, _08114D38 @ =0x000008c4 - adds r0, r6, r2 - adds r0, r5, r0 - mov r4, sp - ldrb r4, [r4, 0x4] - strb r4, [r0] - b _08114D76 - .align 2, 0 -_08114D2C: .4byte 0x02014800 -_08114D30: .4byte 0x000038c4 -_08114D34: .4byte 0x000028c4 -_08114D38: .4byte 0x000008c4 -_08114D3C: - ldr r0, _08114D48 @ =0x000008c4 - add r0, r9 - adds r0, r7, r0 - movs r1, 0 - b _08114D74 - .align 2, 0 -_08114D48: .4byte 0x000008c4 -_08114D4C: - ldr r0, _08114D58 @ =0x000008c4 - add r0, r9 - adds r0, r7, r0 - strb r3, [r0] - b _08114D76 - .align 2, 0 -_08114D58: .4byte 0x000008c4 -_08114D5C: - ldr r0, _08114D68 @ =0x000008c4 - add r0, r9 - adds r0, r7, r0 - movs r1, 0 - b _08114D74 - .align 2, 0 -_08114D68: .4byte 0x000008c4 -_08114D6C: - ldr r1, _08114DAC @ =0x000008c4 - adds r0, r6, r1 - adds r0, r5, r0 - movs r1, 0x4 -_08114D74: - strb r1, [r0] -_08114D76: - mov r3, r10 - ldr r2, _08114DB0 @ =0x02014800 - adds r0, r2, 0 - adds r0, 0x84 - ldr r4, [sp] - adds r0, r4, r0 - adds r4, r2, 0 -_08114D84: - ldrb r0, [r0] - cmp r3, r0 - bge _08114D8E - bl _08114410 -_08114D8E: - ldr r5, [sp, 0x8] - str r5, [sp] - cmp r5, 0x3F - bgt _08114D9A - bl _081143F2 -_08114D9A: - ldr r0, [sp, 0x4] - add sp, 0x14 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08114DAC: .4byte 0x000008c4 -_08114DB0: .4byte 0x02014800 - thumb_func_end unref_sub_81143CC - - thumb_func_start sub_8114DB4 -sub_8114DB4: @ 8114DB4 - push {lr} - lsls r1, 24 - lsrs r3, r1, 24 - ldr r2, _08114DDC @ =0x02014800 - lsrs r1, 25 - lsls r1, 2 - lsls r0, 7 - adds r1, r0 - ldr r0, _08114DE0 @ =0x000040c4 - adds r2, r0 - adds r1, r2 - ldr r2, [r1] - movs r0, 0x1 - ands r3, r0 - cmp r3, 0 - beq _08114DE4 - ldrb r0, [r2] - movs r1, 0xF0 - b _08114DE8 - .align 2, 0 -_08114DDC: .4byte 0x02014800 -_08114DE0: .4byte 0x000040c4 -_08114DE4: - ldrb r0, [r2] - movs r1, 0xF -_08114DE8: - orrs r0, r1 - strb r0, [r2] - pop {r0} - bx r0 - thumb_func_end sub_8114DB4 - - thumb_func_start sub_8114DF0 -sub_8114DF0: @ 8114DF0 - push {lr} - lsls r1, 24 - lsrs r3, r1, 24 - ldr r2, _08114E28 @ =0x02014800 - lsrs r1, 25 - lsls r1, 2 - lsls r0, 7 - adds r1, r0 - ldr r0, _08114E2C @ =0x000040c4 - adds r2, r0 - adds r1, r2 - ldr r2, [r1] - movs r0, 0xC0 - lsls r0, 7 - adds r1, r2, r0 - movs r0, 0x1 - ands r3, r0 - cmp r3, 0 - beq _08114E30 - ldrb r1, [r1] - movs r0, 0xF0 - ands r0, r1 - cmp r0, 0 - bne _08114E42 - ldrb r1, [r2] - movs r0, 0xF - b _08114E3E - .align 2, 0 -_08114E28: .4byte 0x02014800 -_08114E2C: .4byte 0x000040c4 -_08114E30: - ldrb r1, [r1] - movs r0, 0xF - ands r0, r1 - cmp r0, 0 - bne _08114E42 - ldrb r1, [r2] - movs r0, 0xF0 -_08114E3E: - ands r0, r1 - strb r0, [r2] -_08114E42: - pop {r0} - bx r0 - thumb_func_end sub_8114DF0 - - thumb_func_start sub_8114E48 -sub_8114E48: @ 8114E48 - push {r4-r7,lr} - adds r4, r0, 0 - lsls r1, 24 - lsrs r6, r1, 24 - ldr r1, _08114E6C @ =0x02014800 - ldr r2, _08114E70 @ =0x0000a0c4 - adds r0, r1, r2 - ldrb r0, [r0] - adds r5, r1, 0 - cmp r0, 0 - bne _08114E60 - b _08114F5E -_08114E60: - movs r1, 0 - movs r3, 0 - cmp r4, 0 - bne _08114E74 - movs r1, 0x1 - b _08114EA6 - .align 2, 0 -_08114E6C: .4byte 0x02014800 -_08114E70: .4byte 0x0000a0c4 -_08114E74: - subs r0, r4, 0x1 - lsls r0, 5 - adds r2, r3, r0 - adds r0, r5, 0 - adds r0, 0xC4 - adds r0, r2, r0 - ldrb r0, [r0] - cmp r0, 0 - bne _08114EA6 - ldr r7, _08114EC4 @ =0x000008c4 - adds r0, r5, r7 - adds r0, r2, r0 - ldrb r0, [r0] - cmp r0, 0 - bne _08114EA6 - adds r3, 0x1 - cmp r3, 0x1F - bgt _08114EA6 - cmp r4, 0 - bne _08114E74 - lsls r0, r1, 24 - movs r1, 0x80 - lsls r1, 17 - adds r0, r1 - lsrs r1, r0, 24 -_08114EA6: - cmp r3, 0x20 - bne _08114EB4 - lsls r0, r1, 24 - movs r2, 0x80 - lsls r2, 17 - adds r0, r2 - lsrs r1, r0, 24 -_08114EB4: - movs r3, 0 - cmp r4, 0x3F - bne _08114EC8 - lsls r0, r1, 24 - movs r7, 0x80 - lsls r7, 17 - adds r0, r7 - b _08114EF8 - .align 2, 0 -_08114EC4: .4byte 0x000008c4 -_08114EC8: - adds r0, r4, 0x1 - lsls r0, 5 - adds r2, r3, r0 - adds r0, r5, 0 - adds r0, 0xC4 - adds r0, r2, r0 - ldrb r0, [r0] - cmp r0, 0 - bne _08114EFA - ldr r7, _08114F64 @ =0x000008c4 - adds r0, r5, r7 - adds r0, r2, r0 - ldrb r0, [r0] - cmp r0, 0 - bne _08114EFA - adds r3, 0x1 - cmp r3, 0x1F - bgt _08114EFA - cmp r4, 0x3F - bne _08114EC8 - lsls r0, r1, 24 - movs r1, 0x80 - lsls r1, 17 - adds r0, r1 -_08114EF8: - lsrs r1, r0, 24 -_08114EFA: - cmp r3, 0x20 - bne _08114F08 - lsls r0, r1, 24 - movs r2, 0x80 - lsls r2, 17 - adds r0, r2 - lsrs r1, r0, 24 -_08114F08: - cmp r1, 0x2 - beq _08114F5E - subs r0, r6, 0x2 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r0, 0 - bge _08114F18 - movs r1, 0 -_08114F18: - adds r0, r6, 0x2 - lsls r0, 24 - lsrs r2, r0, 24 - asrs r0, 24 - cmp r0, 0x3F - ble _08114F26 - movs r2, 0x3F -_08114F26: - lsls r1, 24 - asrs r3, r1, 24 - lsls r0, r2, 24 - asrs r2, r0, 24 - adds r6, r1, 0 - adds r7, r0, 0 - cmp r3, r2 - bge _08114F7C - cmp r4, 0 - beq _08114F7C - subs r0, r4, 0x1 - lsls r5, r0, 7 - ldr r0, _08114F68 @ =0x020188c4 - mov r12, r0 -_08114F42: - asrs r0, r3, 1 - lsls r0, 2 - adds r0, r5 - add r0, r12 - ldr r1, [r0] - movs r0, 0x1 - ands r0, r3 - cmp r0, 0 - beq _08114F6C - ldrb r1, [r1] - movs r0, 0xF0 -_08114F58: - ands r0, r1 - cmp r0, 0 - beq _08114F72 -_08114F5E: - movs r0, 0x1 - b _08114FCA - .align 2, 0 -_08114F64: .4byte 0x000008c4 -_08114F68: .4byte 0x020188c4 -_08114F6C: - ldrb r1, [r1] - movs r0, 0xF - b _08114F58 -_08114F72: - adds r3, 0x1 - cmp r3, r2 - bge _08114F7C - cmp r4, 0 - bne _08114F42 -_08114F7C: - asrs r3, r6, 24 - asrs r1, r7, 24 - cmp r3, r1 - bge _08114FC8 - cmp r4, 0x3F - beq _08114FC8 - adds r0, r4, 0x1 - lsls r5, r0, 7 - ldr r6, _08114FB0 @ =0x020188c4 - adds r2, r1, 0 -_08114F90: - asrs r0, r3, 1 - lsls r0, 2 - adds r0, r5 - adds r0, r6 - ldr r1, [r0] - movs r0, 0x1 - ands r0, r3 - cmp r0, 0 - beq _08114FB4 - ldrb r1, [r1] - movs r0, 0xF0 - ands r0, r1 - cmp r0, 0 - beq _08114FBE - b _08114F5E - .align 2, 0 -_08114FB0: .4byte 0x020188c4 -_08114FB4: - ldrb r1, [r1] - movs r0, 0xF - ands r0, r1 - cmp r0, 0 - bne _08114F5E -_08114FBE: - adds r3, 0x1 - cmp r3, r2 - bge _08114FC8 - cmp r4, 0x3F - bne _08114F90 -_08114FC8: - movs r0, 0 -_08114FCA: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8114E48 - - thumb_func_start HBlankCB_EvolutionScene -HBlankCB_EvolutionScene: @ 8114FD0 - bx lr - thumb_func_end HBlankCB_EvolutionScene - - thumb_func_start VBlankCB_EvolutionScene -VBlankCB_EvolutionScene: @ 8114FD4 - push {lr} - ldr r1, _08115034 @ =REG_BG0CNT - ldr r2, _08115038 @ =0x00009803 - adds r0, r2, 0 - strh r0, [r1] - adds r1, 0x8 - ldr r0, _0811503C @ =gUnknown_030042A4 - ldrh r0, [r0] - strh r0, [r1] - adds r1, 0x2 - ldr r0, _08115040 @ =gUnknown_030042A0 - ldrh r0, [r0] - strh r0, [r1] - adds r1, 0x2 - ldr r0, _08115044 @ =gUnknown_030042C0 - ldrh r0, [r0] - strh r0, [r1] - adds r1, 0x2 - ldr r0, _08115048 @ =gUnknown_030041B4 - ldrh r0, [r0] - strh r0, [r1] - adds r1, 0x2 - ldr r0, _0811504C @ =gUnknown_03004288 - ldrh r0, [r0] - strh r0, [r1] - adds r1, 0x2 - ldr r0, _08115050 @ =gUnknown_03004280 - ldrh r0, [r0] - strh r0, [r1] - adds r1, 0x2 - ldr r0, _08115054 @ =gUnknown_030041B0 - ldrh r0, [r0] - strh r0, [r1] - adds r1, 0x2 - ldr r0, _08115058 @ =gUnknown_030041B8 - ldrh r0, [r0] - strh r0, [r1] - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - bl sub_8089668 - pop {r0} - bx r0 - .align 2, 0 -_08115034: .4byte REG_BG0CNT -_08115038: .4byte 0x00009803 -_0811503C: .4byte gUnknown_030042A4 -_08115040: .4byte gUnknown_030042A0 -_08115044: .4byte gUnknown_030042C0 -_08115048: .4byte gUnknown_030041B4 -_0811504C: .4byte gUnknown_03004288 -_08115050: .4byte gUnknown_03004280 -_08115054: .4byte gUnknown_030041B0 -_08115058: .4byte gUnknown_030041B8 - thumb_func_end VBlankCB_EvolutionScene - - thumb_func_start VBlankCB_TradeEvolutionScene -VBlankCB_TradeEvolutionScene: @ 811505C - push {lr} - ldr r1, _081150B4 @ =REG_BG0HOFS - ldr r0, _081150B8 @ =gUnknown_030042A4 - ldrh r0, [r0] - strh r0, [r1] - adds r1, 0x2 - ldr r0, _081150BC @ =gUnknown_030042A0 - ldrh r0, [r0] - strh r0, [r1] - adds r1, 0x2 - ldr r0, _081150C0 @ =gUnknown_030042C0 - ldrh r0, [r0] - strh r0, [r1] - adds r1, 0x2 - ldr r0, _081150C4 @ =gUnknown_030041B4 - ldrh r0, [r0] - strh r0, [r1] - adds r1, 0x2 - ldr r0, _081150C8 @ =gUnknown_03004288 - ldrh r0, [r0] - strh r0, [r1] - adds r1, 0x2 - ldr r0, _081150CC @ =gUnknown_03004280 - ldrh r0, [r0] - strh r0, [r1] - adds r1, 0x2 - ldr r0, _081150D0 @ =gUnknown_030041B0 - ldrh r0, [r0] - strh r0, [r1] - adds r1, 0x2 - ldr r0, _081150D4 @ =gUnknown_030041B8 - ldrh r0, [r0] - strh r0, [r1] - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - bl sub_8089668 - pop {r0} - bx r0 - .align 2, 0 -_081150B4: .4byte REG_BG0HOFS -_081150B8: .4byte gUnknown_030042A4 -_081150BC: .4byte gUnknown_030042A0 -_081150C0: .4byte gUnknown_030042C0 -_081150C4: .4byte gUnknown_030041B4 -_081150C8: .4byte gUnknown_03004288 -_081150CC: .4byte gUnknown_03004280 -_081150D0: .4byte gUnknown_030041B0 -_081150D4: .4byte gUnknown_030041B8 - thumb_func_end VBlankCB_TradeEvolutionScene - - thumb_func_start sub_81150D8 -sub_81150D8: @ 81150D8 - push {lr} - ldr r0, _081150F4 @ =gBattleCommunication - ldrb r1, [r0, 0x1] - lsls r1, 28 - movs r0, 0x90 - lsls r0, 23 - adds r1, r0 - lsrs r1, 24 - movs r0, 0xC8 - bl sub_814A880 - pop {r0} - bx r0 - .align 2, 0 -_081150F4: .4byte gBattleCommunication - thumb_func_end sub_81150D8 - - thumb_func_start HBlankCB_TradeEvolutionScene -HBlankCB_TradeEvolutionScene: @ 81150F8 - bx lr - thumb_func_end HBlankCB_TradeEvolutionScene - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/party_menu.s b/asm/party_menu.s index 20b5b0ff4..ec6754b86 100644 --- a/asm/party_menu.s +++ b/asm/party_menu.s @@ -7680,7 +7680,7 @@ _08070B40: lsrs r2, r0, 16 cmp r2, 0 beq _08070B74 - ldr r1, _08070B6C @ =gUnknown_03005E94 + ldr r1, _08070B6C @ =gCB2_AfterEvolution ldr r0, _08070B70 @ =sub_80A53F8 str r0, [r1] ldr r0, [r7] @@ -7692,7 +7692,7 @@ _08070B40: bl DestroyTask b _08070C2C .align 2, 0 -_08070B6C: .4byte gUnknown_03005E94 +_08070B6C: .4byte gCB2_AfterEvolution _08070B70: .4byte sub_80A53F8 _08070B74: adds r0, r6, 0 @@ -7826,7 +7826,7 @@ _08070C8C: lsrs r2, r0, 16 cmp r2, 0 beq _08070CC0 - ldr r1, _08070CB8 @ =gUnknown_03005E94 + ldr r1, _08070CB8 @ =gCB2_AfterEvolution ldr r0, _08070CBC @ =sub_80A53F8 str r0, [r1] ldr r0, [r7] @@ -7838,7 +7838,7 @@ _08070C8C: bl DestroyTask b _08070D68 .align 2, 0 -_08070CB8: .4byte gUnknown_03005E94 +_08070CB8: .4byte gCB2_AfterEvolution _08070CBC: .4byte sub_80A53F8 _08070CC0: adds r0, r6, 0 @@ -7971,7 +7971,7 @@ DoEvolutionStoneItemEffect: @ 8070DBC adds r1, r6, 0 adds r2, r5, 0 bl sub_806E8D0 - ldr r1, _08070E20 @ =gUnknown_03005E94 + ldr r1, _08070E20 @ =gCB2_AfterEvolution ldr r0, _08070E24 @ =sub_80A53F8 str r0, [r1] ldr r0, _08070E28 @ =0x0201c000 @@ -7995,7 +7995,7 @@ DoEvolutionStoneItemEffect: @ 8070DBC .align 2, 0 _08070E18: .4byte gTasks _08070E1C: .4byte TaskDummy -_08070E20: .4byte gUnknown_03005E94 +_08070E20: .4byte gCB2_AfterEvolution _08070E24: .4byte sub_80A53F8 _08070E28: .4byte 0x0201c000 _08070E2C: .4byte gUnknown_0202E8F4 diff --git a/asm/trade.s b/asm/trade.s index 223f62474..b07a3b632 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -10512,7 +10512,7 @@ _0804D4CC: ldrb r0, [r0] movs r1, 0 bl sub_804BA94 - ldr r1, _0804D514 @ =gUnknown_03005E94 + ldr r1, _0804D514 @ =gCB2_AfterEvolution ldr r0, _0804D518 @ =sub_804BBCC str r0, [r1] ldr r7, _0804D51C @ =gUnknown_020297D8 @@ -10541,7 +10541,7 @@ _0804D4CC: b _0804D538 .align 2, 0 _0804D510: .4byte gSpecialVar_0x8005 -_0804D514: .4byte gUnknown_03005E94 +_0804D514: .4byte gCB2_AfterEvolution _0804D518: .4byte sub_804BBCC _0804D51C: .4byte gUnknown_020297D8 _0804D520: .4byte gPlayerParty @@ -10623,7 +10623,7 @@ _0804D5A8: .align 2, 0 _0804D5B4: .4byte gSoftResetDisabled _0804D5B8: - ldr r0, _0804D5F4 @ =gUnknown_03005E94 + ldr r0, _0804D5F4 @ =gCB2_AfterEvolution ldr r1, _0804D5F8 @ =sub_804DC88 mov r8, r1 str r1, [r0] @@ -10652,7 +10652,7 @@ _0804D5B8: bl TradeEvolutionScene b _0804D60E .align 2, 0 -_0804D5F4: .4byte gUnknown_03005E94 +_0804D5F4: .4byte gCB2_AfterEvolution _0804D5F8: .4byte sub_804DC88 _0804D5FC: .4byte gUnknown_020297D8 _0804D600: .4byte gPlayerParty diff --git a/common_syms/evolution_scene.txt b/common_syms/evolution_scene.txt new file mode 100644 index 000000000..137cd3e05 --- /dev/null +++ b/common_syms/evolution_scene.txt @@ -0,0 +1 @@ +gCB2_AfterEvolution diff --git a/include/evolution_scene.h b/include/evolution_scene.h new file mode 100644 index 000000000..48bd6ebe1 --- /dev/null +++ b/include/evolution_scene.h @@ -0,0 +1,10 @@ +#ifndef GUARD_EVOLUTION_SCENE_H +#define GUARD_EVOLUTION_SCENE_H + +void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, u8 partyID); +void BeginEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, u8 partyID); +void TradeEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8 preEvoSpriteID, u8 partyID); + +extern void (*gCB2_AfterEvolution)(void); + +#endif // GUARD_EVOLUTION_SCENE_H diff --git a/ld_script.txt b/ld_script.txt index c051cc743..f0a3d100d 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -219,7 +219,6 @@ SECTIONS { src/battle_records.o(.text); asm/pokedex_area_screen.o(.text); src/evolution_scene.o(.text); - asm/evolution_scene.o(.text); asm/roulette.o(.text); asm/pokedex_cry_screen.o(.text); src/pokedex_cry_screen.o(.text); diff --git a/shared_syms.txt b/shared_syms.txt index 571e0633e..17fc63271 100644 --- a/shared_syms.txt +++ b/shared_syms.txt @@ -10,6 +10,9 @@ unk_2007900 = 0x2007900; unk_2008000 = 0x2008000; +gEvoInfo = 0x2014800; + + unk_2015de0 = 0x2015de0; unk_2015e00 = 0x2015e00; unk_2016000 = 0x2016000; diff --git a/src/evolution_scene.c b/src/evolution_scene.c index baac64c35..c4e7292b0 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -1,5 +1,6 @@ #include "global.h" #include "task.h" +#include "evolution_scene.h" #include "evolution_graphics.h" #include "palette.h" #include "main.h" @@ -32,14 +33,13 @@ struct EvoInfo u8 field_3; }; -#define sEvoInfo (*(struct EvoInfo *)(ewram + 0x14800)) +extern struct EvoInfo gEvoInfo; void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies); void sub_8024CEC(void); void sub_8023A80(void); void sub_802BC6C(void); void sub_8023AD8(void); -void sub_81150D8(void); void nullsub_6(void); bool32 IsHMMove2(u16 move); @@ -58,7 +58,6 @@ extern u16 gMoveToLearn; extern struct SpriteTemplate gUnknown_02024E8C; extern u8 gUnk_2009000[]; // won't match if I 'ewram' it extern bool8 gAffineAnimsDisabled; -extern MainCallback gUnknown_03005E94; extern u8 gDisplayedStringBattle[]; extern u8 gBattleTextBuff2[]; @@ -73,15 +72,18 @@ extern void * const gUnknown_081FAF4C[]; extern const u8* const gBattleStringsTable[]; // this file's functions -void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, u8 partyID); -void Task_EvolutionScene(u8 taskID); -void Task_TradeEvolutionScene(u8 taskID); -void VBlankCB_EvolutionScene(void); -void VBlankCB_TradeEvolutionScene(void); -void HBlankCB_EvolutionScene(void); -void CB2_EvolutionSceneUpdate(void); -void CB2_TradeEvolutionSceneUpdate(void); -void HBlankCB_TradeEvolutionScene(void); +static void Task_EvolutionScene(u8 taskID); +static void Task_TradeEvolutionScene(u8 taskID); +static void CB2_EvolutionSceneUpdate(void); +static void CB2_TradeEvolutionSceneUpdate(void); +static void EvoDummyFunc(void); +static void EvoDummyFunc2(void); +static void VBlankCB_EvolutionScene(void); +static void VBlankCB_TradeEvolutionScene(void); +static void sub_81150D8(void); + +// iwram common +MainCallback gCB2_AfterEvolution; // const data static const u8 sUnknownShedinjaJpnString[] = _("ヌケニン"); @@ -93,7 +95,7 @@ static const u8 sPadding[9] = {0}; // code -void CB2_BeginEvolutionScene(void) +static void CB2_BeginEvolutionScene(void) { UpdatePaletteFade(); RunTasks(); @@ -116,7 +118,7 @@ void CB2_BeginEvolutionScene(void) #define TASK_BIT_CAN_STOP 0x1 #define TASK_BIT_LEARN_MOVE 0x80 -void Task_BeginEvolutionScene(u8 taskID) +static void Task_BeginEvolutionScene(u8 taskID) { struct Pokemon* mon = NULL; switch (gTasks[taskID].tState) @@ -217,7 +219,7 @@ void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, GetMonSpriteTemplate_803C56C(currSpecies, 1); gUnknown_02024E8C.affineAnims = gDummySpriteAffineAnimTable; - sEvoInfo.preEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30); + gEvoInfo.preEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30); gSprites[ID].callback = nullsub_37; gSprites[ID].oam.paletteNum = 1; @@ -234,14 +236,14 @@ void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, GetMonSpriteTemplate_803C56C(speciesToEvolve, 3); gUnknown_02024E8C.affineAnims = gDummySpriteAffineAnimTable; - sEvoInfo.postEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30); + gEvoInfo.postEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30); gSprites[ID].callback = nullsub_37; gSprites[ID].oam.paletteNum = 2; gSprites[ID].invisible = 1; LoadEvoSparkleSpriteAndPal(); - sEvoInfo.evoTaskID = ID = CreateTask(Task_EvolutionScene, 0); + gEvoInfo.evoTaskID = ID = CreateTask(Task_EvolutionScene, 0); gTasks[ID].tState = 0; gTasks[ID].tPreEvoSpecies = currSpecies; gTasks[ID].tPostEvoSpecies = speciesToEvolve; @@ -255,21 +257,21 @@ void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, memcpy(gUnk_2009000, &gPlttBufferUnfaded[0x20], 0x60); REG_DISPCNT = DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_1D_MAP; - SetHBlankCallback(HBlankCB_EvolutionScene); + SetHBlankCallback(EvoDummyFunc); SetVBlankCallback(VBlankCB_EvolutionScene); m4aMPlayAllStop(); SetMainCallback2(CB2_EvolutionSceneUpdate); } -void CB2_EvolutionSceneLoadGraphics(void) +static void CB2_EvolutionSceneLoadGraphics(void) { u8 ID; const struct CompressedSpritePalette** pokePal; u16 postEvoSpecies; u32 TiD, PiD; - struct Pokemon* Mon = &gPlayerParty[gTasks[sEvoInfo.evoTaskID].tPartyID]; + struct Pokemon* Mon = &gPlayerParty[gTasks[gEvoInfo.evoTaskID].tPartyID]; - postEvoSpecies = gTasks[sEvoInfo.evoTaskID].tPostEvoSpecies; + postEvoSpecies = gTasks[gEvoInfo.evoTaskID].tPostEvoSpecies; TiD = GetMonData(Mon, MON_DATA_OT_ID); PiD = GetMonData(Mon, MON_DATA_PERSONALITY); @@ -314,22 +316,22 @@ void CB2_EvolutionSceneLoadGraphics(void) GetMonSpriteTemplate_803C56C(postEvoSpecies, 3); gUnknown_02024E8C.affineAnims = gDummySpriteAffineAnimTable; - sEvoInfo.postEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30); + gEvoInfo.postEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30); gSprites[ID].callback = nullsub_37; gSprites[ID].oam.paletteNum = 2; REG_DISPCNT = DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_1D_MAP; - SetHBlankCallback(HBlankCB_EvolutionScene); + SetHBlankCallback(EvoDummyFunc); SetVBlankCallback(VBlankCB_EvolutionScene); SetMainCallback2(CB2_EvolutionSceneUpdate); BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); } -void CB2_TradeEvolutionSceneLoadGraphics(void) +static void CB2_TradeEvolutionSceneLoadGraphics(void) { - struct Pokemon* Mon = &gPlayerParty[gTasks[sEvoInfo.evoTaskID].tPartyID]; - u16 postEvoSpecies = gTasks[sEvoInfo.evoTaskID].tPostEvoSpecies; + struct Pokemon* Mon = &gPlayerParty[gTasks[gEvoInfo.evoTaskID].tPartyID]; + u16 postEvoSpecies = gTasks[gEvoInfo.evoTaskID].tPostEvoSpecies; switch (gMain.state) { @@ -362,7 +364,7 @@ void CB2_TradeEvolutionSceneLoadGraphics(void) MenuZeroFillScreen(); ResetPaletteFade(); gMain.state++; - SetHBlankCallback(HBlankCB_EvolutionScene); + SetHBlankCallback(EvoDummyFunc); SetVBlankCallback(VBlankCB_TradeEvolutionScene); break; case 3: @@ -390,7 +392,7 @@ void CB2_TradeEvolutionSceneLoadGraphics(void) GetMonSpriteTemplate_803C56C(postEvoSpecies, 3); gUnknown_02024E8C.affineAnims = gDummySpriteAffineAnimTable; - sEvoInfo.postEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30); + gEvoInfo.postEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30); gSprites[ID].callback = nullsub_37; gSprites[ID].oam.paletteNum = 2; @@ -423,7 +425,7 @@ void TradeEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8 preEvoSpri currSpecies = GetMonData(mon, MON_DATA_SPECIES); PiD = GetMonData(mon, MON_DATA_PERSONALITY); TiD = GetMonData(mon, MON_DATA_OT_ID); - sEvoInfo.preEvoSpriteID = preEvoSpriteID; + gEvoInfo.preEvoSpriteID = preEvoSpriteID; DecompressPicFromTable_2(&gMonFrontPicTable[speciesToEvolve], gMonFrontPicCoords[speciesToEvolve].coords, gMonFrontPicCoords[speciesToEvolve].y_offset, @@ -434,7 +436,7 @@ void TradeEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8 preEvoSpri GetMonSpriteTemplate_803C56C(speciesToEvolve, 1); gUnknown_02024E8C.affineAnims = gDummySpriteAffineAnimTable; - sEvoInfo.postEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30); + gEvoInfo.postEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30); gSprites[ID].callback = nullsub_37; gSprites[ID].oam.paletteNum = 2; @@ -442,7 +444,7 @@ void TradeEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8 preEvoSpri LoadEvoSparkleSpriteAndPal(); - sEvoInfo.evoTaskID = ID = CreateTask(Task_TradeEvolutionScene, 0); + gEvoInfo.evoTaskID = ID = CreateTask(Task_TradeEvolutionScene, 0); gTasks[ID].tState = 0; gTasks[ID].tPreEvoSpecies = currSpecies; gTasks[ID].tPostEvoSpecies = speciesToEvolve; @@ -455,7 +457,7 @@ void TradeEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8 preEvoSpri SetMainCallback2(CB2_TradeEvolutionSceneUpdate); } -void CB2_EvolutionSceneUpdate(void) +static void CB2_EvolutionSceneUpdate(void) { AnimateSprites(); BuildOamBuffer(); @@ -464,7 +466,7 @@ void CB2_EvolutionSceneUpdate(void) RunTasks(); } -void CB2_TradeEvolutionSceneUpdate(void) +static void CB2_TradeEvolutionSceneUpdate(void) { AnimateSprites(); BuildOamBuffer(); @@ -473,7 +475,7 @@ void CB2_TradeEvolutionSceneUpdate(void) RunTasks(); } -void CreateShedinja(u16 preEvoSpecies, struct Pokemon* mon) +static void CreateShedinja(u16 preEvoSpecies, struct Pokemon* mon) { u32 data = 0; if (gEvolutionTable[preEvoSpecies].evolutions[0].method == EVO_LEVEL_NINJASK && gPlayerPartyCount < 6) @@ -513,7 +515,7 @@ void CreateShedinja(u16 preEvoSpecies, struct Pokemon* mon) } } -void Task_EvolutionScene(u8 taskID) +static void Task_EvolutionScene(u8 taskID) { u32 var; struct Pokemon* mon = (struct Pokemon*)(gTasks[taskID].tMonPtrHI | (gTasks[taskID].tMonPtrLO << 0x10)); @@ -529,7 +531,7 @@ void Task_EvolutionScene(u8 taskID) { case 0: BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); - gSprites[sEvoInfo.preEvoSpriteID].invisible = 0; + gSprites[gEvoInfo.preEvoSpriteID].invisible = 0; gTasks[taskID].tState++; break; case 1: // print 'whoa, poke is evolving!!!' msg @@ -573,21 +575,21 @@ void Task_EvolutionScene(u8 taskID) if (!gTasks[sEvoGraphicsTaskID].isActive) { gTasks[taskID].tState++; - sEvoInfo.field_3 = 1; + gEvoInfo.field_3 = 1; sEvoGraphicsTaskID = LaunchTask_PreEvoSparklesSet2(); } break; case 7: // launch task that flashes pre evo with post evo sprites if (!gTasks[sEvoGraphicsTaskID].isActive) { - sEvoGraphicsTaskID = sub_8149E7C(sEvoInfo.preEvoSpriteID, sEvoInfo.postEvoSpriteID); + sEvoGraphicsTaskID = sub_8149E7C(gEvoInfo.preEvoSpriteID, gEvoInfo.postEvoSpriteID); gTasks[taskID].tState++; } break; case 8: // wait for the above task to finish - if (--sEvoInfo.field_3 == 0) + if (--gEvoInfo.field_3 == 0) { - sEvoInfo.field_3 = 3; + gEvoInfo.field_3 = 3; if (!gTasks[sEvoGraphicsTaskID].isActive) gTasks[taskID].tState++; } @@ -671,7 +673,7 @@ void Task_EvolutionScene(u8 taskID) if (!gTasks[taskID].tEvoWasStopped) CreateShedinja(gTasks[taskID].tPreEvoSpecies, mon); DestroyTask(taskID); - SetMainCallback2(gUnknown_03005E94); + SetMainCallback2(gCB2_AfterEvolution); } break; case 16: // evolution has been canceled, stop music and re-fade palette @@ -869,7 +871,7 @@ void Task_EvolutionScene(u8 taskID) } } -void Task_TradeEvolutionScene(u8 taskID) +static void Task_TradeEvolutionScene(u8 taskID) { u32 var; struct Pokemon* mon = (struct Pokemon*)(gTasks[taskID].tMonPtrHI | (gTasks[taskID].tMonPtrLO << 0x10)); @@ -916,21 +918,21 @@ void Task_TradeEvolutionScene(u8 taskID) if (!gTasks[sEvoGraphicsTaskID].isActive) { gTasks[taskID].tState++; - sEvoInfo.field_3 = 1; + gEvoInfo.field_3 = 1; sEvoGraphicsTaskID = LaunchTask_PreEvoSparklesSet2(); } break; case 6: if (!gTasks[sEvoGraphicsTaskID].isActive) { - sEvoGraphicsTaskID = sub_8149E7C(sEvoInfo.preEvoSpriteID, sEvoInfo.postEvoSpriteID); + sEvoGraphicsTaskID = sub_8149E7C(gEvoInfo.preEvoSpriteID, gEvoInfo.postEvoSpriteID); gTasks[taskID].tState++; } break; case 7: - if (--sEvoInfo.field_3 == 0) + if (--gEvoInfo.field_3 == 0) { - sEvoInfo.field_3 = 3; + gEvoInfo.field_3 = 3; if (!gTasks[sEvoGraphicsTaskID].isActive) gTasks[taskID].tState++; } @@ -1009,7 +1011,7 @@ void Task_TradeEvolutionScene(u8 taskID) if (gUnknown_03004828->field_4.state == 0) { DestroyTask(taskID); - SetMainCallback2(gUnknown_03005E94); + SetMainCallback2(gCB2_AfterEvolution); } break; case 15: @@ -1075,14 +1077,14 @@ void Task_TradeEvolutionScene(u8 taskID) if (gMain.newKeys & DPAD_UP && sEvoCursorPos != 0) { PlaySE(SE_SELECT); - HBlankCB_TradeEvolutionScene(); + EvoDummyFunc2(); sEvoCursorPos = 0; sub_81150D8(); } if (gMain.newKeys & DPAD_DOWN && sEvoCursorPos == 0) { PlaySE(SE_SELECT); - HBlankCB_TradeEvolutionScene(); + EvoDummyFunc2(); sEvoCursorPos = 1; sub_81150D8(); } @@ -1189,4 +1191,2708 @@ void Task_TradeEvolutionScene(u8 taskID) } } +/* +DizzyEgg, 27.08.2017 +NOTE: + Functions below are all unused. + What's more, they do NOT exist in Emerald. + That's why I think there is no reason to decompile those, + as they probably were prototypes for the evolution + functions. +*/ + +__attribute__((naked)) +void unref_sub_8113B50() +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x3C\n\ + str r0, [sp]\n\ + str r1, [sp, 0x4]\n\ + movs r0, 0\n\ + str r0, [sp, 0xC]\n\ + movs r1, 0\n\ + str r1, [sp, 0x10]\n\ + movs r2, 0\n\ + str r2, [sp, 0x8]\n\ + ldr r3, _08113C60 @ =0x02014800\n\ + mov r12, r3\n\ + ldr r4, _08113C64 @ =0x000018c4\n\ + add r4, r12\n\ + mov r10, r4\n\ + ldr r5, _08113C68 @ =0x000020c4\n\ + add r5, r12\n\ + mov r8, r5\n\ +_08113B7C:\n\ + adds r0, r3, 0\n\ + adds r0, 0x84\n\ + ldr r1, [sp, 0x8]\n\ + adds r0, r1, r0\n\ + strb r2, [r0]\n\ + adds r0, r3, 0x4\n\ + adds r0, r1, r0\n\ + strb r2, [r0]\n\ + ldr r4, _08113C6C @ =0x02014844\n\ + adds r0, r1, r4\n\ + strb r2, [r0]\n\ + movs r6, 0\n\ + lsls r1, 5\n\ + mov r9, r1\n\ + ldr r5, [sp, 0x8]\n\ + lsls r4, r5, 6\n\ +_08113B9C:\n\ + mov r0, r9\n\ + adds r1, r6, r0\n\ + ldr r5, _08113C70 @ =0x020158c4\n\ + adds r0, r1, r5\n\ + strb r2, [r0]\n\ + mov r5, r10\n\ + adds r0, r1, r5\n\ + strb r2, [r0]\n\ + mov r5, r8\n\ + adds r0, r1, r5\n\ + strb r2, [r0]\n\ + ldr r5, _08113C74 @ =0x020170c4\n\ + adds r0, r1, r5\n\ + strb r2, [r0]\n\ + adds r7, r3, 0\n\ + adds r7, 0xC4\n\ + adds r0, r1, r7\n\ + strb r2, [r0]\n\ + ldr r5, _08113C78 @ =0x000008c4\n\ + adds r0, r3, r5\n\ + adds r0, r1, r0\n\ + strb r2, [r0]\n\ + ldr r5, _08113C7C @ =0x000030c4\n\ + adds r0, r3, r5\n\ + adds r0, r1, r0\n\ + strb r2, [r0]\n\ + ldr r5, _08113C80 @ =0x000038c4\n\ + adds r0, r3, r5\n\ + adds r1, r0\n\ + strb r2, [r1]\n\ + lsls r1, r6, 1\n\ + adds r1, r4\n\ + ldr r5, _08113C84 @ =0x000060c4\n\ + adds r0, r3, r5\n\ + adds r0, r1, r0\n\ + strh r2, [r0]\n\ + ldr r5, _08113C88 @ =0x000070c4\n\ + adds r0, r3, r5\n\ + adds r0, r1, r0\n\ + strh r2, [r0]\n\ + ldr r5, _08113C8C @ =0x000080c4\n\ + adds r0, r3, r5\n\ + adds r0, r1, r0\n\ + strh r2, [r0]\n\ + ldr r5, _08113C90 @ =0x000090c4\n\ + adds r0, r3, r5\n\ + adds r1, r0\n\ + strh r2, [r1]\n\ + adds r6, 0x1\n\ + cmp r6, 0x1F\n\ + ble _08113B9C\n\ + ldr r0, [sp, 0x8]\n\ + adds r0, 0x1\n\ + str r0, [sp, 0x8]\n\ + cmp r0, 0x3F\n\ + ble _08113B7C\n\ + ldr r1, _08113C94 @ =0x0000a0c4\n\ + add r1, r12\n\ + movs r0, 0x40\n\ + strb r0, [r1]\n\ + movs r1, 0\n\ + mov r8, r1\n\ + movs r2, 0\n\ + str r2, [sp, 0x8]\n\ + movs r3, 0x80\n\ + lsls r3, 5\n\ + adds r3, r7\n\ + mov r12, r3\n\ + movs r4, 0xC0\n\ + lsls r4, 5\n\ + adds r4, r7\n\ + mov r9, r4\n\ + movs r5, 0\n\ + adds r4, r7, 0\n\ + subs r4, 0xC0\n\ +_08113C32:\n\ + movs r3, 0\n\ + ldr r2, [sp]\n\ + add r2, r8\n\ + movs r6, 0\n\ + ldr r0, [sp, 0x8]\n\ + adds r0, 0x1\n\ + str r0, [sp, 0x30]\n\ + ldr r1, [sp, 0x8]\n\ + lsls r1, 7\n\ + mov r10, r1\n\ + movs r7, 0x1\n\ + negs r7, r7\n\ +_08113C4A:\n\ + asrs r0, r6, 1\n\ + lsls r0, 2\n\ + add r0, r10\n\ + ldr r1, _08113C98 @ =0x020188c4\n\ + adds r0, r1\n\ + str r2, [r0]\n\ + cmp r3, 0\n\ + beq _08113C9C\n\ + cmp r3, 0x1\n\ + beq _08113CC6\n\ + b _08113CF4\n\ + .align 2, 0\n\ +_08113C60: .4byte 0x02014800\n\ +_08113C64: .4byte 0x000018c4\n\ +_08113C68: .4byte 0x000020c4\n\ +_08113C6C: .4byte 0x02014844\n\ +_08113C70: .4byte 0x020158c4\n\ +_08113C74: .4byte 0x020170c4\n\ +_08113C78: .4byte 0x000008c4\n\ +_08113C7C: .4byte 0x000030c4\n\ +_08113C80: .4byte 0x000038c4\n\ +_08113C84: .4byte 0x000060c4\n\ +_08113C88: .4byte 0x000070c4\n\ +_08113C8C: .4byte 0x000080c4\n\ +_08113C90: .4byte 0x000090c4\n\ +_08113C94: .4byte 0x0000a0c4\n\ +_08113C98: .4byte 0x020188c4\n\ +_08113C9C:\n\ + movs r0, 0x1\n\ + ands r0, r6\n\ + cmp r0, 0\n\ + beq _08113CAA\n\ + cmp r0, 0x1\n\ + beq _08113CB0\n\ + b _08113CF4\n\ +_08113CAA:\n\ + ldrb r1, [r2]\n\ + movs r0, 0xF\n\ + b _08113CB4\n\ +_08113CB0:\n\ + ldrb r1, [r2]\n\ + movs r0, 0xF0\n\ +_08113CB4:\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08113CF4\n\ + ldrb r0, [r4]\n\ + adds r0, r5\n\ + add r0, r12\n\ + strb r6, [r0]\n\ + movs r3, 0x1\n\ + b _08113CF4\n\ +_08113CC6:\n\ + adds r0, r6, 0\n\ + ands r0, r3\n\ + cmp r0, 0\n\ + beq _08113CD4\n\ + cmp r0, 0x1\n\ + beq _08113CDA\n\ + b _08113CF4\n\ +_08113CD4:\n\ + ldrb r1, [r2]\n\ + movs r0, 0xF\n\ + b _08113CDE\n\ +_08113CDA:\n\ + ldrb r1, [r2]\n\ + movs r0, 0xF0\n\ +_08113CDE:\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08113CF4\n\ + ldrb r0, [r4]\n\ + adds r0, r5\n\ + add r0, r9\n\ + strb r7, [r0]\n\ + ldrb r0, [r4]\n\ + adds r0, 0x1\n\ + strb r0, [r4]\n\ + movs r3, 0\n\ +_08113CF4:\n\ + adds r0, r6, 0x1\n\ + movs r1, 0x7\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08113D02\n\ + adds r2, 0x1D\n\ + b _08113D0C\n\ +_08113D02:\n\ + movs r0, 0x1\n\ + ands r0, r6\n\ + cmp r0, 0\n\ + beq _08113D0C\n\ + adds r2, 0x1\n\ +_08113D0C:\n\ + adds r7, 0x1\n\ + adds r6, 0x1\n\ + cmp r6, 0x3F\n\ + ble _08113C4A\n\ + cmp r3, 0\n\ + beq _08113D26\n\ + ldrb r0, [r4]\n\ + adds r0, r5\n\ + add r0, r9\n\ + strb r6, [r0]\n\ + ldrb r0, [r4]\n\ + adds r0, 0x1\n\ + strb r0, [r4]\n\ +_08113D26:\n\ + movs r0, 0x7\n\ + ldr r2, [sp, 0x30]\n\ + ands r2, r0\n\ + cmp r2, 0\n\ + bne _08113D36\n\ + movs r3, 0xE4\n\ + add r8, r3\n\ + b _08113D3A\n\ +_08113D36:\n\ + movs r0, 0x4\n\ + add r8, r0\n\ +_08113D3A:\n\ + adds r5, 0x20\n\ + adds r4, 0x1\n\ + ldr r1, [sp, 0x8]\n\ + adds r1, 0x1\n\ + str r1, [sp, 0x8]\n\ + cmp r1, 0x3F\n\ + bgt _08113D4A\n\ + b _08113C32\n\ +_08113D4A:\n\ + movs r2, 0\n\ + mov r8, r2\n\ + movs r3, 0\n\ + str r3, [sp, 0x8]\n\ + ldr r0, _08113D84 @ =0x02014844\n\ + movs r4, 0x82\n\ + lsls r4, 6\n\ + adds r4, r0\n\ + mov r10, r4\n\ + movs r5, 0xA2\n\ + lsls r5, 6\n\ + adds r7, r0, r5\n\ + movs r5, 0\n\ + adds r4, r0, 0\n\ + movs r0, 0x1\n\ + mov r9, r0\n\ +_08113D6A:\n\ + movs r3, 0\n\ + ldr r2, [sp, 0x4]\n\ + add r2, r8\n\ + movs r6, 0\n\ + ldr r1, [sp, 0x8]\n\ + adds r1, 0x1\n\ + str r1, [sp, 0x30]\n\ +_08113D78:\n\ + cmp r3, 0\n\ + beq _08113D88\n\ + cmp r3, 0x1\n\ + beq _08113DB4\n\ + b _08113DE4\n\ + .align 2, 0\n\ +_08113D84: .4byte 0x02014844\n\ +_08113D88:\n\ + adds r0, r6, 0\n\ + mov r1, r9\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08113D98\n\ + cmp r0, 0x1\n\ + beq _08113D9E\n\ + b _08113DE4\n\ +_08113D98:\n\ + ldrb r1, [r2]\n\ + movs r0, 0xF\n\ + b _08113DA2\n\ +_08113D9E:\n\ + ldrb r1, [r2]\n\ + movs r0, 0xF0\n\ +_08113DA2:\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08113DE4\n\ + ldrb r0, [r4]\n\ + adds r0, r5\n\ + add r0, r10\n\ + strb r6, [r0]\n\ + movs r3, 0x1\n\ + b _08113DE4\n\ +_08113DB4:\n\ + adds r0, r6, 0\n\ + ands r0, r3\n\ + cmp r0, 0\n\ + beq _08113DC2\n\ + cmp r0, 0x1\n\ + beq _08113DC8\n\ + b _08113DE4\n\ +_08113DC2:\n\ + ldrb r1, [r2]\n\ + movs r0, 0xF\n\ + b _08113DCC\n\ +_08113DC8:\n\ + ldrb r1, [r2]\n\ + movs r0, 0xF0\n\ +_08113DCC:\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08113DE4\n\ + ldrb r0, [r4]\n\ + adds r0, r5\n\ + adds r0, r7\n\ + subs r1, r6, 0x1\n\ + strb r1, [r0]\n\ + ldrb r0, [r4]\n\ + adds r0, 0x1\n\ + strb r0, [r4]\n\ + movs r3, 0\n\ +_08113DE4:\n\ + adds r1, r6, 0x1\n\ + movs r0, 0x7\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08113DF2\n\ + adds r2, 0x1D\n\ + b _08113DFC\n\ +_08113DF2:\n\ + mov r0, r9\n\ + ands r6, r0\n\ + cmp r6, 0\n\ + beq _08113DFC\n\ + adds r2, 0x1\n\ +_08113DFC:\n\ + adds r6, r1, 0\n\ + cmp r6, 0x3F\n\ + ble _08113D78\n\ + cmp r3, 0\n\ + beq _08113E14\n\ + ldrb r0, [r4]\n\ + adds r0, r5\n\ + adds r0, r7\n\ + strb r6, [r0]\n\ + ldrb r0, [r4]\n\ + adds r0, 0x1\n\ + strb r0, [r4]\n\ +_08113E14:\n\ + movs r0, 0x7\n\ + ldr r1, [sp, 0x30]\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + bne _08113E24\n\ + movs r2, 0xE4\n\ + add r8, r2\n\ + b _08113E28\n\ +_08113E24:\n\ + movs r3, 0x4\n\ + add r8, r3\n\ +_08113E28:\n\ + adds r5, 0x20\n\ + adds r4, 0x1\n\ + ldr r0, [sp, 0x8]\n\ + adds r0, 0x1\n\ + str r0, [sp, 0x8]\n\ + cmp r0, 0x3F\n\ + ble _08113D6A\n\ + movs r1, 0\n\ + str r1, [sp, 0x8]\n\ +_08113E3A:\n\ + ldr r3, [sp, 0x8]\n\ + ldr r4, _08113EBC @ =0x02014804\n\ + adds r2, r3, r4\n\ + ldr r5, _08113EC0 @ =0x02014844\n\ + adds r1, r3, r5\n\ + ldrb r0, [r2]\n\ + adds r3, 0x1\n\ + str r3, [sp, 0x30]\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + bcc _08113E52\n\ + b _08113F9E\n\ +_08113E52:\n\ + movs r0, 0\n\ + str r0, [sp, 0xC]\n\ + ldrb r2, [r2]\n\ + cmp r0, r2\n\ + bge _08113F54\n\ + ldr r0, _08113EC4 @ =0x02014800\n\ + adds r0, 0x4\n\ + ldr r1, [sp, 0x8]\n\ + adds r0, r1, r0\n\ + str r0, [sp, 0x18]\n\ +_08113E66:\n\ + movs r2, 0x80\n\ + lsls r2, 1\n\ + str r2, [sp, 0x14]\n\ + movs r6, 0\n\ + ldr r3, [sp, 0x8]\n\ + ldr r4, _08113EC0 @ =0x02014844\n\ + adds r0, r3, r4\n\ + ldr r5, [sp, 0xC]\n\ + adds r5, 0x1\n\ + str r5, [sp, 0x34]\n\ + ldrb r0, [r0]\n\ + cmp r6, r0\n\ + bge _08113F3E\n\ + ldr r0, _08113EC4 @ =0x02014800\n\ + mov r10, r0\n\ + lsls r0, r3, 5\n\ + ldr r2, [sp, 0xC]\n\ + adds r1, r2, r0\n\ + mov r9, r0\n\ + ldr r0, _08113EC4 @ =0x02014800\n\ + adds r0, 0xC4\n\ + mov r3, r9\n\ + adds r7, r3, r0\n\ + mov r5, r9\n\ + ldr r4, _08113EC4 @ =0x02014800\n\ + ldr r2, _08113EC8 @ =0x000010c4\n\ + adds r0, r4, r2\n\ + adds r1, r0\n\ + mov r8, r1\n\ + ldrb r3, [r1]\n\ + str r3, [sp, 0x1C]\n\ +_08113EA4:\n\ + ldr r0, _08113ECC @ =0x000020c4\n\ + add r0, r10\n\ + adds r0, r5, r0\n\ + ldr r4, [sp, 0x1C]\n\ + ldrb r1, [r0]\n\ + cmp r4, r1\n\ + bls _08113ED0\n\ + mov r2, r8\n\ + ldrb r1, [r2]\n\ + ldrb r0, [r0]\n\ + b _08113ED6\n\ + .align 2, 0\n\ +_08113EBC: .4byte 0x02014804\n\ +_08113EC0: .4byte 0x02014844\n\ +_08113EC4: .4byte 0x02014800\n\ +_08113EC8: .4byte 0x000010c4\n\ +_08113ECC: .4byte 0x000020c4\n\ +_08113ED0:\n\ + ldrb r1, [r0]\n\ + mov r3, r8\n\ + ldrb r0, [r3]\n\ +_08113ED6:\n\ + subs r3, r1, r0\n\ + ldr r1, [sp, 0xC]\n\ + add r1, r9\n\ + ldr r0, _08113EFC @ =0x000018c4\n\ + add r0, r10\n\ + adds r4, r1, r0\n\ + ldr r0, _08113F00 @ =0x000028c4\n\ + add r0, r10\n\ + adds r2, r5, r0\n\ + ldrb r0, [r4]\n\ + ldr r1, _08113F04 @ =0x02014800\n\ + mov r12, r1\n\ + ldrb r1, [r2]\n\ + cmp r0, r1\n\ + bls _08113F08\n\ + adds r1, r0, 0\n\ + ldrb r0, [r2]\n\ + b _08113F0C\n\ + .align 2, 0\n\ +_08113EFC: .4byte 0x000018c4\n\ +_08113F00: .4byte 0x000028c4\n\ +_08113F04: .4byte 0x02014800\n\ +_08113F08:\n\ + ldrb r1, [r2]\n\ + ldrb r0, [r4]\n\ +_08113F0C:\n\ + subs r1, r0\n\ + adds r3, r1\n\ + ldr r2, [sp, 0x14]\n\ + cmp r2, r3\n\ + ble _08113F2C\n\ + ldrb r0, [r7]\n\ + cmp r0, 0\n\ + bne _08113F2C\n\ + ldr r0, _08114050 @ =0x000008c4\n\ + add r0, r12\n\ + adds r0, r5, r0\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + bne _08113F2C\n\ + str r6, [sp, 0x10]\n\ + str r3, [sp, 0x14]\n\ +_08113F2C:\n\ + adds r7, 0x1\n\ + adds r5, 0x1\n\ + adds r6, 0x1\n\ + ldr r3, [sp, 0x8]\n\ + ldr r4, _08114054 @ =0x02014844\n\ + adds r0, r3, r4\n\ + ldrb r0, [r0]\n\ + cmp r6, r0\n\ + blt _08113EA4\n\ +_08113F3E:\n\ + ldr r0, [sp, 0xC]\n\ + ldr r1, [sp, 0x10]\n\ + ldr r2, [sp, 0x8]\n\ + bl sub_81141F0\n\ + ldr r5, [sp, 0x34]\n\ + str r5, [sp, 0xC]\n\ + ldr r0, [sp, 0x18]\n\ + ldrb r0, [r0]\n\ + cmp r5, r0\n\ + blt _08113E66\n\ +_08113F54:\n\ + movs r6, 0\n\ + ldr r2, _08114058 @ =0x02014800\n\ + ldr r1, [sp, 0x8]\n\ + ldr r3, _08114054 @ =0x02014844\n\ + adds r0, r1, r3\n\ + adds r4, r2, 0\n\ + mov r12, r4\n\ + ldrb r0, [r0]\n\ + cmp r6, r0\n\ + bge _08113F9E\n\ + mov r0, r12\n\ + adds r0, 0x44\n\ + adds r4, r1, r0\n\ +_08113F6E:\n\ + ldr r5, [sp, 0x8]\n\ + lsls r0, r5, 5\n\ + adds r1, r6, r0\n\ + adds r0, r2, 0\n\ + adds r0, 0xC4\n\ + adds r0, r1, r0\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + bne _08113F94\n\ + ldr r3, _08114050 @ =0x000008c4\n\ + adds r0, r2, r3\n\ + adds r0, r1, r0\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + bne _08113F94\n\ + adds r0, r6, 0\n\ + adds r1, r5, 0\n\ + bl sub_811430C\n\ +_08113F94:\n\ + adds r6, 0x1\n\ + ldr r2, _08114058 @ =0x02014800\n\ + ldrb r5, [r4]\n\ + cmp r6, r5\n\ + blt _08113F6E\n\ +_08113F9E:\n\ + ldr r0, [sp, 0x8]\n\ + ldr r1, _0811405C @ =0x02014804\n\ + adds r2, r0, r1\n\ + ldr r3, _08114054 @ =0x02014844\n\ + adds r1, r0, r3\n\ + ldrb r0, [r2]\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + bne _08113FCC\n\ + movs r6, 0\n\ + ldrb r4, [r2]\n\ + cmp r6, r4\n\ + bge _08113FCC\n\ + adds r4, r2, 0\n\ +_08113FBA:\n\ + adds r0, r6, 0\n\ + adds r1, r6, 0\n\ + ldr r2, [sp, 0x8]\n\ + bl sub_81141F0\n\ + adds r6, 0x1\n\ + ldrb r5, [r4]\n\ + cmp r6, r5\n\ + blt _08113FBA\n\ +_08113FCC:\n\ + ldr r0, [sp, 0x8]\n\ + ldr r1, _0811405C @ =0x02014804\n\ + adds r2, r0, r1\n\ + ldr r3, _08114054 @ =0x02014844\n\ + adds r1, r0, r3\n\ + ldrb r0, [r2]\n\ + ldr r4, _08114058 @ =0x02014800\n\ + ldrb r5, [r1]\n\ + cmp r0, r5\n\ + bhi _08113FE2\n\ + b _081141C4\n\ +_08113FE2:\n\ + movs r0, 0\n\ + str r0, [sp, 0x10]\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + blt _08113FEE\n\ + b _08114104\n\ +_08113FEE:\n\ + str r2, [sp, 0x2C]\n\ + ldr r1, [sp, 0x8]\n\ + lsls r1, 5\n\ + mov r9, r1\n\ + adds r0, r4, 0\n\ + adds r0, 0x44\n\ + ldr r2, [sp, 0x8]\n\ + adds r0, r2, r0\n\ + str r0, [sp, 0x20]\n\ + mov r3, r9\n\ + str r3, [sp, 0x24]\n\ +_08114004:\n\ + movs r4, 0x80\n\ + lsls r4, 1\n\ + str r4, [sp, 0x14]\n\ + movs r6, 0\n\ + ldr r5, [sp, 0x10]\n\ + adds r5, 0x1\n\ + str r5, [sp, 0x38]\n\ + ldr r0, [sp, 0x2C]\n\ + ldrb r0, [r0]\n\ + cmp r6, r0\n\ + bge _081140C4\n\ + ldr r1, [sp, 0x10]\n\ + ldr r2, [sp, 0x24]\n\ + adds r1, r2\n\ + mov r10, r1\n\ + ldr r0, _08114058 @ =0x02014800\n\ + adds r0, 0xC4\n\ + adds r2, r0\n\ + mov r8, r2\n\ + ldr r7, [sp, 0x24]\n\ + ldr r3, _08114058 @ =0x02014800\n\ + ldr r4, _08114060 @ =0x000010c4\n\ + adds r0, r3, r4\n\ + adds r5, r7, r0\n\ + ldr r0, _08114064 @ =0x020168c4\n\ + add r0, r10\n\ + mov r12, r0\n\ + ldrb r1, [r0]\n\ + str r1, [sp, 0x28]\n\ +_0811403E:\n\ + ldrb r0, [r5]\n\ + ldr r2, [sp, 0x28]\n\ + cmp r0, r2\n\ + bls _08114068\n\ + adds r1, r0, 0\n\ + mov r3, r12\n\ + ldrb r0, [r3]\n\ + b _0811406E\n\ + .align 2, 0\n\ +_08114050: .4byte 0x000008c4\n\ +_08114054: .4byte 0x02014844\n\ +_08114058: .4byte 0x02014800\n\ +_0811405C: .4byte 0x02014804\n\ +_08114060: .4byte 0x000010c4\n\ +_08114064: .4byte 0x020168c4\n\ +_08114068:\n\ + mov r4, r12\n\ + ldrb r1, [r4]\n\ + ldrb r0, [r5]\n\ +_0811406E:\n\ + subs r3, r1, r0\n\ + ldr r1, _0811408C @ =0x02014800\n\ + ldr r2, _08114090 @ =0x000018c4\n\ + adds r0, r1, r2\n\ + adds r4, r7, r0\n\ + ldr r2, _08114094 @ =0x020170c4\n\ + add r2, r10\n\ + ldrb r0, [r4]\n\ + ldrb r1, [r2]\n\ + cmp r0, r1\n\ + bls _08114098\n\ + adds r1, r0, 0\n\ + ldrb r0, [r2]\n\ + b _0811409C\n\ + .align 2, 0\n\ +_0811408C: .4byte 0x02014800\n\ +_08114090: .4byte 0x000018c4\n\ +_08114094: .4byte 0x020170c4\n\ +_08114098:\n\ + ldrb r1, [r2]\n\ + ldrb r0, [r4]\n\ +_0811409C:\n\ + subs r1, r0\n\ + adds r3, r1\n\ + ldr r2, [sp, 0x14]\n\ + cmp r2, r3\n\ + ble _081140B2\n\ + mov r4, r8\n\ + ldrb r0, [r4]\n\ + cmp r0, 0\n\ + bne _081140B2\n\ + str r6, [sp, 0xC]\n\ + str r3, [sp, 0x14]\n\ +_081140B2:\n\ + movs r0, 0x1\n\ + add r8, r0\n\ + adds r7, 0x1\n\ + adds r5, 0x1\n\ + adds r6, 0x1\n\ + ldr r1, [sp, 0x2C]\n\ + ldrb r1, [r1]\n\ + cmp r6, r1\n\ + blt _0811403E\n\ +_081140C4:\n\ + ldr r3, [sp, 0xC]\n\ + add r3, r9\n\ + ldr r2, _08114164 @ =0x02014800\n\ + ldr r4, _08114168 @ =0x000030c4\n\ + adds r1, r2, r4\n\ + adds r1, r3, r1\n\ + ldr r2, [sp, 0x10]\n\ + add r2, r9\n\ + ldr r5, _0811416C @ =0x020168c4\n\ + adds r0, r2, r5\n\ + ldrb r0, [r0]\n\ + strb r0, [r1]\n\ + ldr r0, _08114164 @ =0x02014800\n\ + ldr r4, _08114170 @ =0x000038c4\n\ + adds r1, r0, r4\n\ + adds r1, r3, r1\n\ + ldr r5, _08114174 @ =0x020170c4\n\ + adds r2, r5\n\ + ldrb r0, [r2]\n\ + strb r0, [r1]\n\ + ldr r0, _08114164 @ =0x02014800\n\ + adds r0, 0xC4\n\ + adds r3, r0\n\ + movs r0, 0x1\n\ + strb r0, [r3]\n\ + ldr r0, [sp, 0x38]\n\ + str r0, [sp, 0x10]\n\ + ldr r1, [sp, 0x20]\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + bge _08114104\n\ + b _08114004\n\ +_08114104:\n\ + movs r6, 0\n\ + ldr r4, _08114164 @ =0x02014800\n\ + ldr r2, [sp, 0x8]\n\ + ldr r3, _08114178 @ =0x02014804\n\ + adds r0, r2, r3\n\ + ldrb r0, [r0]\n\ + cmp r6, r0\n\ + bge _081141C4\n\ + adds r7, r4, 0\n\ + mov r9, r6\n\ + movs r5, 0xC4\n\ + adds r5, r7\n\ + mov r8, r5\n\ +_0811411E:\n\ + ldr r1, [sp, 0x8]\n\ + lsls r0, r1, 5\n\ + adds r2, r6, r0\n\ + ldr r3, _0811417C @ =0x000020c4\n\ + adds r0, r7, r3\n\ + adds r0, r2\n\ + mov r10, r0\n\ + ldr r5, _08114168 @ =0x000030c4\n\ + adds r0, r7, r5\n\ + adds r0, r2, r0\n\ + ldrb r0, [r0]\n\ + mov r1, r10\n\ + strb r0, [r1]\n\ + ldr r3, _08114180 @ =0x000028c4\n\ + adds r0, r7, r3\n\ + adds r3, r2, r0\n\ + ldr r5, _08114170 @ =0x000038c4\n\ + adds r0, r7, r5\n\ + adds r0, r2, r0\n\ + ldrb r0, [r0]\n\ + strb r0, [r3]\n\ + mov r0, r8\n\ + adds r1, r2, r0\n\ + ldrb r0, [r1]\n\ + cmp r0, 0\n\ + beq _08114184\n\ + mov r2, r9\n\ + strb r2, [r1]\n\ + adds r0, r6, 0\n\ + adds r1, r6, 0\n\ + ldr r2, [sp, 0x8]\n\ + bl sub_81141F0\n\ + b _081141B4\n\ + .align 2, 0\n\ +_08114164: .4byte 0x02014800\n\ +_08114168: .4byte 0x000030c4\n\ +_0811416C: .4byte 0x020168c4\n\ +_08114170: .4byte 0x000038c4\n\ +_08114174: .4byte 0x020170c4\n\ +_08114178: .4byte 0x02014804\n\ +_0811417C: .4byte 0x000020c4\n\ +_08114180: .4byte 0x000028c4\n\ +_08114184:\n\ + ldr r5, _081141E0 @ =0x000010c4\n\ + adds r1, r4, r5\n\ + adds r1, r2, r1\n\ + ldr r5, _081141E4 @ =0x000018c4\n\ + adds r0, r4, r5\n\ + adds r0, r2, r0\n\ + ldrb r0, [r0]\n\ + ldrb r2, [r1]\n\ + subs r0, r2\n\ + lsrs r1, r0, 31\n\ + adds r0, r1\n\ + asrs r0, 1\n\ + adds r2, r0\n\ + strb r2, [r3]\n\ + mov r0, r10\n\ + strb r2, [r0]\n\ + ldrb r0, [r3]\n\ + subs r0, 0x1\n\ + strb r0, [r3]\n\ + adds r0, r6, 0\n\ + adds r1, r6, 0\n\ + ldr r2, [sp, 0x8]\n\ + bl sub_81141F0\n\ +_081141B4:\n\ + adds r6, 0x1\n\ + ldr r4, _081141E8 @ =0x02014800\n\ + ldr r1, [sp, 0x8]\n\ + ldr r2, _081141EC @ =0x02014804\n\ + adds r0, r1, r2\n\ + ldrb r0, [r0]\n\ + cmp r6, r0\n\ + blt _0811411E\n\ +_081141C4:\n\ + ldr r3, [sp, 0x30]\n\ + str r3, [sp, 0x8]\n\ + cmp r3, 0x3F\n\ + bgt _081141CE\n\ + b _08113E3A\n\ +_081141CE:\n\ + add sp, 0x3C\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\ +_081141E0: .4byte 0x000010c4\n\ +_081141E4: .4byte 0x000018c4\n\ +_081141E8: .4byte 0x02014800\n\ +_081141EC: .4byte 0x02014804\n\ + .syntax divided"); +} + +__attribute__((naked)) +void sub_81141F0() +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r9\n\ + mov r6, r8\n\ + push {r6,r7}\n\ + adds r6, r0, 0\n\ + mov r8, r1\n\ + mov r9, r2\n\ + ldr r3, _0811424C @ =0x02014800\n\ + lsls r1, r2, 5\n\ + mov r0, r8\n\ + adds r4, r0, r1\n\ + ldr r5, _08114250 @ =0x000030c4\n\ + adds r2, r3, r5\n\ + adds r2, r4, r2\n\ + adds r1, r6, r1\n\ + ldr r7, _08114254 @ =0x000010c4\n\ + adds r0, r3, r7\n\ + adds r5, r1, r0\n\ + ldrb r0, [r5]\n\ + strb r0, [r2]\n\ + ldr r0, _08114258 @ =0x000038c4\n\ + adds r2, r3, r0\n\ + adds r2, r4, r2\n\ + ldr r7, _0811425C @ =0x000018c4\n\ + adds r0, r3, r7\n\ + adds r1, r0\n\ + ldrb r0, [r1]\n\ + strb r0, [r2]\n\ + movs r7, 0\n\ + ldr r1, _08114260 @ =0x000020c4\n\ + adds r0, r3, r1\n\ + adds r2, r4, r0\n\ + ldrb r1, [r5]\n\ + ldrb r0, [r2]\n\ + mov r12, r3\n\ + cmp r1, r0\n\ + bcs _08114264\n\ + mov r0, r12\n\ + adds r0, 0xC4\n\ + adds r0, r4, r0\n\ + movs r1, 0x4\n\ + strb r1, [r0]\n\ + ldrb r1, [r2]\n\ + ldrb r0, [r5]\n\ + b _08114276\n\ + .align 2, 0\n\ +_0811424C: .4byte 0x02014800\n\ +_08114250: .4byte 0x000030c4\n\ +_08114254: .4byte 0x000010c4\n\ +_08114258: .4byte 0x000038c4\n\ +_0811425C: .4byte 0x000018c4\n\ +_08114260: .4byte 0x000020c4\n\ +_08114264:\n\ + cmp r1, r0\n\ + bls _08114278\n\ + mov r0, r12\n\ + adds r0, 0xC4\n\ + adds r0, r4, r0\n\ + movs r1, 0x1\n\ + strb r1, [r0]\n\ + ldrb r1, [r5]\n\ + ldrb r0, [r2]\n\ +_08114276:\n\ + subs r7, r1, r0\n\ +_08114278:\n\ + mov r5, r8\n\ + lsls r3, r5, 1\n\ + mov r0, r9\n\ + lsls r4, r0, 6\n\ + adds r0, r3, r4\n\ + ldr r1, _081142BC @ =0x000080c4\n\ + add r1, r12\n\ + adds r0, r1\n\ + lsls r1, r7, 4\n\ + strh r1, [r0]\n\ + movs r7, 0\n\ + mov r1, r9\n\ + lsls r2, r1, 5\n\ + adds r1, r6, r2\n\ + ldr r0, _081142C0 @ =0x000018c4\n\ + add r0, r12\n\ + adds r6, r1, r0\n\ + adds r1, r5, r2\n\ + ldr r0, _081142C4 @ =0x000028c4\n\ + add r0, r12\n\ + adds r5, r1, r0\n\ + ldrb r2, [r6]\n\ + ldrb r0, [r5]\n\ + cmp r2, r0\n\ + bcs _081142CC\n\ + ldr r0, _081142C8 @ =0x000008c4\n\ + add r0, r12\n\ + adds r0, r1, r0\n\ + movs r1, 0x3\n\ + strb r1, [r0]\n\ + ldrb r1, [r5]\n\ + ldrb r0, [r6]\n\ + b _081142DE\n\ + .align 2, 0\n\ +_081142BC: .4byte 0x000080c4\n\ +_081142C0: .4byte 0x000018c4\n\ +_081142C4: .4byte 0x000028c4\n\ +_081142C8: .4byte 0x000008c4\n\ +_081142CC:\n\ + cmp r2, r0\n\ + bls _081142E0\n\ + ldr r0, _08114304 @ =0x000008c4\n\ + add r0, r12\n\ + adds r0, r1, r0\n\ + movs r1, 0x2\n\ + strb r1, [r0]\n\ + ldrb r1, [r6]\n\ + ldrb r0, [r5]\n\ +_081142DE:\n\ + subs r7, r1, r0\n\ +_081142E0:\n\ + adds r0, r3, r4\n\ + ldr r1, _08114308 @ =0x000090c4\n\ + add r1, r12\n\ + adds r0, r1\n\ + lsls r1, r7, 4\n\ + strh r1, [r0]\n\ + mov r1, r12\n\ + adds r1, 0x84\n\ + add r1, r9\n\ + ldrb r0, [r1]\n\ + adds r0, 0x1\n\ + strb r0, [r1]\n\ + pop {r3,r4}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08114304: .4byte 0x000008c4\n\ +_08114308: .4byte 0x000090c4\n\ + .syntax divided"); +} +__attribute__((naked)) +void sub_811430C() +{ + 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\ + ldr r5, _081143AC @ =0x02014800\n\ + lsls r4, r1, 5\n\ + adds r4, r0, r4\n\ + ldr r2, _081143B0 @ =0x000028c4\n\ + adds r2, r5\n\ + mov r10, r2\n\ + add r10, r4\n\ + mov r3, r10\n\ + ldrb r2, [r3]\n\ + ldr r6, _081143B4 @ =0x000020c4\n\ + adds r6, r5\n\ + mov r8, r6\n\ + add r8, r4\n\ + mov r6, r8\n\ + ldrb r3, [r6]\n\ + subs r7, r2, r3\n\ + ldr r2, _081143B8 @ =0x000030c4\n\ + adds r6, r5, r2\n\ + adds r6, r4, r6\n\ + ldr r2, _081143BC @ =0x000038c4\n\ + adds r2, r5\n\ + mov r9, r2\n\ + add r9, r4\n\ + lsrs r2, r7, 31\n\ + adds r2, r7, r2\n\ + asrs r2, 1\n\ + adds r3, r2\n\ + mov r2, r9\n\ + strb r3, [r2]\n\ + strb r3, [r6]\n\ + adds r2, r5, 0\n\ + adds r2, 0xC4\n\ + adds r2, r4, r2\n\ + movs r3, 0x5\n\ + strb r3, [r2]\n\ + ldr r3, _081143C0 @ =0x000008c4\n\ + adds r2, r5, r3\n\ + adds r4, r2\n\ + movs r2, 0x7\n\ + strb r2, [r4]\n\ + adds r3, r5, 0\n\ + adds r3, 0x84\n\ + adds r3, r1, r3\n\ + ldrb r2, [r3]\n\ + adds r2, 0x1\n\ + strb r2, [r3]\n\ + ldrb r3, [r6]\n\ + mov r4, r8\n\ + ldrb r2, [r4]\n\ + subs r7, r3, r2\n\ + lsls r0, 1\n\ + lsls r1, 6\n\ + adds r0, r1\n\ + ldr r6, _081143C4 @ =0x000080c4\n\ + adds r1, r5, r6\n\ + adds r1, r0, r1\n\ + lsls r2, r7, 4\n\ + strh r2, [r1]\n\ + mov r1, r10\n\ + ldrb r2, [r1]\n\ + mov r3, r9\n\ + ldrb r1, [r3]\n\ + subs r7, r2, r1\n\ + ldr r4, _081143C8 @ =0x000090c4\n\ + adds r5, r4\n\ + adds r0, r5\n\ + lsls r1, r7, 4\n\ + strh r1, [r0]\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\ +_081143AC: .4byte 0x02014800\n\ +_081143B0: .4byte 0x000028c4\n\ +_081143B4: .4byte 0x000020c4\n\ +_081143B8: .4byte 0x000030c4\n\ +_081143BC: .4byte 0x000038c4\n\ +_081143C0: .4byte 0x000008c4\n\ +_081143C4: .4byte 0x000080c4\n\ +_081143C8: .4byte 0x000090c4\n\ + .syntax divided"); +} + +__attribute__((naked)) +void unref_sub_81143CC() +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x14\n\ + movs r0, 0x1\n\ + str r0, [sp, 0x4]\n\ + ldr r0, _08114408 @ =0x02014800\n\ + ldr r2, _0811440C @ =0x0000a0c4\n\ + adds r1, r0, r2\n\ + ldrb r3, [r1]\n\ + adds r4, r0, 0\n\ + cmp r3, 0\n\ + beq _081143EE\n\ + subs r0, r3, 0x1\n\ + strb r0, [r1]\n\ +_081143EE:\n\ + movs r5, 0\n\ + str r5, [sp]\n\ +_081143F2:\n\ + movs r3, 0\n\ + adds r2, r4, 0\n\ + adds r0, r4, 0\n\ + adds r0, 0x84\n\ + ldr r1, [sp]\n\ + adds r0, r1, r0\n\ + adds r1, 0x1\n\ + str r1, [sp, 0x8]\n\ + bl _08114D84\n\ + .align 2, 0\n\ +_08114408: .4byte 0x02014800\n\ +_0811440C: .4byte 0x0000a0c4\n\ +_08114410:\n\ + ldr r5, [sp]\n\ + lsls r0, r5, 5\n\ + adds r1, r3, r0\n\ + adds r2, 0xC4\n\ + adds r1, r2\n\ + ldrb r2, [r1]\n\ + mov r8, r0\n\ + adds r0, r3, 0x1\n\ + mov r10, r0\n\ + cmp r2, 0xC\n\ + bls _08114428\n\ + b _081148D2\n\ +_08114428:\n\ + lsls r0, r2, 2\n\ + ldr r1, _08114434 @ =_08114438\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_08114434: .4byte _08114438\n\ + .align 2, 0\n\ +_08114438:\n\ + .4byte _081148D2\n\ + .4byte _0811446C\n\ + .4byte _081144F0\n\ + .4byte _0811457C\n\ + .4byte _08114600\n\ + .4byte _0811468C\n\ + .4byte _081146C8\n\ + .4byte _08114704\n\ + .4byte _08114740\n\ + .4byte _0811477C\n\ + .4byte _081147D0\n\ + .4byte _08114810\n\ + .4byte _08114858\n\ +_0811446C:\n\ + movs r1, 0\n\ + str r1, [sp, 0x4]\n\ + lsls r0, r3, 1\n\ + ldr r2, [sp]\n\ + lsls r1, r2, 6\n\ + adds r0, r1\n\ + ldr r5, _081144E0 @ =0x000060c4\n\ + adds r2, r4, r5\n\ + adds r2, r0, r2\n\ + ldr r5, _081144E4 @ =0x000080c4\n\ + adds r1, r4, r5\n\ + adds r0, r1\n\ + ldrh r1, [r0]\n\ + ldrh r0, [r2]\n\ + adds r1, r0\n\ + movs r0, 0xFF\n\ + lsls r0, 8\n\ + ands r0, r1\n\ + lsrs r5, r0, 8\n\ + movs r0, 0xFF\n\ + ands r1, r0\n\ + strh r1, [r2]\n\ + movs r6, 0\n\ + adds r1, r3, 0x1\n\ + mov r10, r1\n\ + ldr r2, [sp, 0x4]\n\ + cmp r2, r5\n\ + blt _081144A6\n\ + b _081148D2\n\ +_081144A6:\n\ + mov r9, r4\n\ + mov r4, r8\n\ + adds r7, r3, r4\n\ + ldr r0, _081144E8 @ =0x000030c4\n\ + add r0, r9\n\ + adds r4, r7, r0\n\ + ldr r0, _081144EC @ =0x000020c4\n\ + add r0, r9\n\ + adds r2, r7, r0\n\ +_081144B8:\n\ + ldrb r0, [r4]\n\ + subs r0, 0x1\n\ + strb r0, [r4]\n\ + ldrb r1, [r4]\n\ + ldr r0, [sp]\n\ + str r2, [sp, 0xC]\n\ + str r3, [sp, 0x10]\n\ + bl sub_8114DB4\n\ + ldrb r0, [r4]\n\ + ldr r2, [sp, 0xC]\n\ + ldr r3, [sp, 0x10]\n\ + ldrb r1, [r2]\n\ + cmp r0, r1\n\ + bne _081144D8\n\ + b _081148A0\n\ +_081144D8:\n\ + adds r6, 0x1\n\ + cmp r6, r5\n\ + blt _081144B8\n\ + b _081148D2\n\ + .align 2, 0\n\ +_081144E0: .4byte 0x000060c4\n\ +_081144E4: .4byte 0x000080c4\n\ +_081144E8: .4byte 0x000030c4\n\ +_081144EC: .4byte 0x000020c4\n\ +_081144F0:\n\ + movs r2, 0\n\ + str r2, [sp, 0x4]\n\ + ldr r4, _08114568 @ =0x02014800\n\ + lsls r0, r3, 1\n\ + ldr r5, [sp]\n\ + lsls r1, r5, 6\n\ + adds r0, r1\n\ + ldr r1, _0811456C @ =0x000060c4\n\ + adds r2, r4, r1\n\ + adds r2, r0, r2\n\ + ldr r5, _08114570 @ =0x000080c4\n\ + adds r1, r4, r5\n\ + adds r0, r1\n\ + ldrh r1, [r0]\n\ + ldrh r0, [r2]\n\ + adds r1, r0\n\ + movs r0, 0xFF\n\ + lsls r0, 8\n\ + ands r0, r1\n\ + lsrs r5, r0, 8\n\ + movs r0, 0xFF\n\ + ands r1, r0\n\ + strh r1, [r2]\n\ + movs r6, 0\n\ + adds r1, r3, 0x1\n\ + mov r10, r1\n\ + ldr r2, [sp, 0x4]\n\ + cmp r2, r5\n\ + blt _0811452C\n\ + b _081148D2\n\ +_0811452C:\n\ + mov r9, r4\n\ + mov r4, r8\n\ + adds r7, r3, r4\n\ + ldr r0, _08114574 @ =0x000030c4\n\ + add r0, r9\n\ + adds r4, r7, r0\n\ + ldr r0, _08114578 @ =0x000020c4\n\ + add r0, r9\n\ + adds r2, r7, r0\n\ +_0811453E:\n\ + ldrb r0, [r4]\n\ + ldrb r1, [r2]\n\ + cmp r0, r1\n\ + bne _08114548\n\ + b _081148B8\n\ +_08114548:\n\ + adds r1, r0, 0\n\ + ldr r0, [sp]\n\ + str r2, [sp, 0xC]\n\ + str r3, [sp, 0x10]\n\ + bl sub_8114DF0\n\ + ldrb r0, [r4]\n\ + subs r0, 0x1\n\ + strb r0, [r4]\n\ + adds r6, 0x1\n\ + ldr r2, [sp, 0xC]\n\ + ldr r3, [sp, 0x10]\n\ + cmp r6, r5\n\ + blt _0811453E\n\ + b _081148D2\n\ + .align 2, 0\n\ +_08114568: .4byte 0x02014800\n\ +_0811456C: .4byte 0x000060c4\n\ +_08114570: .4byte 0x000080c4\n\ +_08114574: .4byte 0x000030c4\n\ +_08114578: .4byte 0x000020c4\n\ +_0811457C:\n\ + movs r2, 0\n\ + str r2, [sp, 0x4]\n\ + lsls r0, r3, 1\n\ + ldr r5, [sp]\n\ + lsls r1, r5, 6\n\ + adds r0, r1\n\ + ldr r1, _081145F0 @ =0x000060c4\n\ + adds r2, r4, r1\n\ + adds r2, r0, r2\n\ + ldr r5, _081145F4 @ =0x000080c4\n\ + adds r1, r4, r5\n\ + adds r0, r1\n\ + ldrh r1, [r0]\n\ + ldrh r0, [r2]\n\ + adds r1, r0\n\ + movs r0, 0xFF\n\ + lsls r0, 8\n\ + ands r0, r1\n\ + lsrs r5, r0, 8\n\ + movs r0, 0xFF\n\ + ands r1, r0\n\ + strh r1, [r2]\n\ + movs r6, 0\n\ + adds r1, r3, 0x1\n\ + mov r10, r1\n\ + ldr r2, [sp, 0x4]\n\ + cmp r2, r5\n\ + blt _081145B6\n\ + b _081148D2\n\ +_081145B6:\n\ + mov r9, r4\n\ + mov r4, r8\n\ + adds r7, r3, r4\n\ + ldr r0, _081145F8 @ =0x000030c4\n\ + add r0, r9\n\ + adds r4, r7, r0\n\ + ldr r0, _081145FC @ =0x000020c4\n\ + add r0, r9\n\ + adds r2, r7, r0\n\ +_081145C8:\n\ + ldrb r0, [r4]\n\ + adds r0, 0x1\n\ + strb r0, [r4]\n\ + ldrb r1, [r4]\n\ + ldr r0, [sp]\n\ + str r2, [sp, 0xC]\n\ + str r3, [sp, 0x10]\n\ + bl sub_8114DB4\n\ + ldrb r0, [r4]\n\ + ldr r2, [sp, 0xC]\n\ + ldr r3, [sp, 0x10]\n\ + ldrb r1, [r2]\n\ + cmp r0, r1\n\ + bne _081145E8\n\ + b _081148AC\n\ +_081145E8:\n\ + adds r6, 0x1\n\ + cmp r6, r5\n\ + blt _081145C8\n\ + b _081148D2\n\ + .align 2, 0\n\ +_081145F0: .4byte 0x000060c4\n\ +_081145F4: .4byte 0x000080c4\n\ +_081145F8: .4byte 0x000030c4\n\ +_081145FC: .4byte 0x000020c4\n\ +_08114600:\n\ + movs r2, 0\n\ + str r2, [sp, 0x4]\n\ + ldr r4, _08114678 @ =0x02014800\n\ + lsls r0, r3, 1\n\ + ldr r5, [sp]\n\ + lsls r1, r5, 6\n\ + adds r0, r1\n\ + ldr r1, _0811467C @ =0x000060c4\n\ + adds r2, r4, r1\n\ + adds r2, r0, r2\n\ + ldr r5, _08114680 @ =0x000080c4\n\ + adds r1, r4, r5\n\ + adds r0, r1\n\ + ldrh r1, [r0]\n\ + ldrh r0, [r2]\n\ + adds r1, r0\n\ + movs r0, 0xFF\n\ + lsls r0, 8\n\ + ands r0, r1\n\ + lsrs r5, r0, 8\n\ + movs r0, 0xFF\n\ + ands r1, r0\n\ + strh r1, [r2]\n\ + movs r6, 0\n\ + adds r1, r3, 0x1\n\ + mov r10, r1\n\ + ldr r2, [sp, 0x4]\n\ + cmp r2, r5\n\ + blt _0811463C\n\ + b _081148D2\n\ +_0811463C:\n\ + mov r9, r4\n\ + mov r4, r8\n\ + adds r7, r3, r4\n\ + ldr r0, _08114684 @ =0x000030c4\n\ + add r0, r9\n\ + adds r4, r7, r0\n\ + ldr r0, _08114688 @ =0x000020c4\n\ + add r0, r9\n\ + adds r2, r7, r0\n\ +_0811464E:\n\ + ldrb r0, [r4]\n\ + ldrb r1, [r2]\n\ + cmp r0, r1\n\ + bne _08114658\n\ + b _081148B8\n\ +_08114658:\n\ + adds r1, r0, 0\n\ + ldr r0, [sp]\n\ + str r2, [sp, 0xC]\n\ + str r3, [sp, 0x10]\n\ + bl sub_8114DF0\n\ + ldrb r0, [r4]\n\ + adds r0, 0x1\n\ + strb r0, [r4]\n\ + adds r6, 0x1\n\ + ldr r2, [sp, 0xC]\n\ + ldr r3, [sp, 0x10]\n\ + cmp r6, r5\n\ + blt _0811464E\n\ + b _081148D2\n\ + .align 2, 0\n\ +_08114678: .4byte 0x02014800\n\ +_0811467C: .4byte 0x000060c4\n\ +_08114680: .4byte 0x000080c4\n\ +_08114684: .4byte 0x000030c4\n\ +_08114688: .4byte 0x000020c4\n\ +_0811468C:\n\ + movs r2, 0\n\ + str r2, [sp, 0x4]\n\ + ldr r5, _081146C0 @ =0x02014800\n\ + mov r0, r8\n\ + adds r4, r3, r0\n\ + ldr r1, _081146C4 @ =0x000030c4\n\ + adds r0, r5, r1\n\ + adds r0, r4, r0\n\ + ldrb r1, [r0]\n\ + ldr r0, [sp]\n\ + str r3, [sp, 0x10]\n\ + bl sub_8114E48\n\ + lsls r0, 24\n\ + ldr r3, [sp, 0x10]\n\ + adds r2, r3, 0x1\n\ + mov r10, r2\n\ + cmp r0, 0\n\ + bne _081146B4\n\ + b _081148D2\n\ +_081146B4:\n\ + adds r0, r5, 0\n\ + adds r0, 0xC4\n\ + adds r0, r4, r0\n\ + movs r1, 0x9\n\ + strb r1, [r0]\n\ + b _081148D2\n\ + .align 2, 0\n\ +_081146C0: .4byte 0x02014800\n\ +_081146C4: .4byte 0x000030c4\n\ +_081146C8:\n\ + movs r4, 0\n\ + str r4, [sp, 0x4]\n\ + ldr r5, _081146FC @ =0x02014800\n\ + mov r0, r8\n\ + adds r4, r3, r0\n\ + ldr r1, _08114700 @ =0x000030c4\n\ + adds r0, r5, r1\n\ + adds r0, r4, r0\n\ + ldrb r1, [r0]\n\ + ldr r0, [sp]\n\ + str r3, [sp, 0x10]\n\ + bl sub_8114E48\n\ + lsls r0, 24\n\ + ldr r3, [sp, 0x10]\n\ + adds r2, r3, 0x1\n\ + mov r10, r2\n\ + cmp r0, 0\n\ + bne _081146F0\n\ + b _081148D2\n\ +_081146F0:\n\ + adds r0, r5, 0\n\ + adds r0, 0xC4\n\ + adds r0, r4, r0\n\ + movs r1, 0xA\n\ + strb r1, [r0]\n\ + b _081148D2\n\ + .align 2, 0\n\ +_081146FC: .4byte 0x02014800\n\ +_08114700: .4byte 0x000030c4\n\ +_08114704:\n\ + movs r4, 0\n\ + str r4, [sp, 0x4]\n\ + ldr r5, _08114738 @ =0x02014800\n\ + mov r0, r8\n\ + adds r4, r3, r0\n\ + ldr r1, _0811473C @ =0x000030c4\n\ + adds r0, r5, r1\n\ + adds r0, r4, r0\n\ + ldrb r1, [r0]\n\ + ldr r0, [sp]\n\ + str r3, [sp, 0x10]\n\ + bl sub_8114E48\n\ + lsls r0, 24\n\ + ldr r3, [sp, 0x10]\n\ + adds r2, r3, 0x1\n\ + mov r10, r2\n\ + cmp r0, 0\n\ + bne _0811472C\n\ + b _081148D2\n\ +_0811472C:\n\ + adds r0, r5, 0\n\ + adds r0, 0xC4\n\ + adds r0, r4, r0\n\ + movs r1, 0xB\n\ + strb r1, [r0]\n\ + b _081148D2\n\ + .align 2, 0\n\ +_08114738: .4byte 0x02014800\n\ +_0811473C: .4byte 0x000030c4\n\ +_08114740:\n\ + movs r4, 0\n\ + str r4, [sp, 0x4]\n\ + ldr r5, _08114774 @ =0x02014800\n\ + mov r0, r8\n\ + adds r4, r3, r0\n\ + ldr r1, _08114778 @ =0x000030c4\n\ + adds r0, r5, r1\n\ + adds r0, r4, r0\n\ + ldrb r1, [r0]\n\ + ldr r0, [sp]\n\ + str r3, [sp, 0x10]\n\ + bl sub_8114E48\n\ + lsls r0, 24\n\ + ldr r3, [sp, 0x10]\n\ + adds r2, r3, 0x1\n\ + mov r10, r2\n\ + cmp r0, 0\n\ + bne _08114768\n\ + b _081148D2\n\ +_08114768:\n\ + adds r0, r5, 0\n\ + adds r0, 0xC4\n\ + adds r0, r4, r0\n\ + movs r1, 0xC\n\ + strb r1, [r0]\n\ + b _081148D2\n\ + .align 2, 0\n\ +_08114774: .4byte 0x02014800\n\ +_08114778: .4byte 0x000030c4\n\ +_0811477C:\n\ + movs r4, 0\n\ + str r4, [sp, 0x4]\n\ + ldr r6, _081147B4 @ =0x02014800\n\ + mov r0, r8\n\ + adds r5, r3, r0\n\ + ldr r1, _081147B8 @ =0x000030c4\n\ + adds r4, r6, r1\n\ + adds r4, r5, r4\n\ + ldrb r1, [r4]\n\ + ldr r0, [sp]\n\ + str r3, [sp, 0x10]\n\ + bl sub_8114DB4\n\ + ldr r2, _081147BC @ =0x000020c4\n\ + adds r0, r6, r2\n\ + adds r0, r5, r0\n\ + ldrb r1, [r4]\n\ + ldr r3, [sp, 0x10]\n\ + ldrb r0, [r0]\n\ + cmp r1, r0\n\ + bne _081147C0\n\ + adds r0, r6, 0\n\ + adds r0, 0xC4\n\ + adds r0, r5, r0\n\ + mov r4, sp\n\ + ldrb r4, [r4, 0x4]\n\ + strb r4, [r0]\n\ + b _08114844\n\ + .align 2, 0\n\ +_081147B4: .4byte 0x02014800\n\ +_081147B8: .4byte 0x000030c4\n\ +_081147BC: .4byte 0x000020c4\n\ +_081147C0:\n\ + adds r0, r6, 0\n\ + adds r0, 0xC4\n\ + adds r0, r5, r0\n\ + movs r1, 0x1\n\ + strb r1, [r0]\n\ + adds r0, r3, 0x1\n\ + mov r10, r0\n\ + b _081148D2\n\ +_081147D0:\n\ + movs r1, 0\n\ + str r1, [sp, 0x4]\n\ + ldr r6, _08114804 @ =0x02014800\n\ + mov r2, r8\n\ + adds r5, r3, r2\n\ + ldr r0, _08114808 @ =0x000030c4\n\ + adds r4, r6, r0\n\ + adds r4, r5, r4\n\ + ldrb r1, [r4]\n\ + ldr r0, [sp]\n\ + str r3, [sp, 0x10]\n\ + bl sub_8114DF0\n\ + ldr r1, _0811480C @ =0x000020c4\n\ + adds r0, r6, r1\n\ + adds r0, r5, r0\n\ + ldrb r1, [r4]\n\ + ldr r3, [sp, 0x10]\n\ + ldrb r0, [r0]\n\ + cmp r1, r0\n\ + beq _08114882\n\ + adds r0, r6, 0\n\ + adds r0, 0xC4\n\ + adds r0, r5, r0\n\ + movs r1, 0x2\n\ + b _08114842\n\ + .align 2, 0\n\ +_08114804: .4byte 0x02014800\n\ +_08114808: .4byte 0x000030c4\n\ +_0811480C: .4byte 0x000020c4\n\ +_08114810:\n\ + movs r0, 0\n\ + str r0, [sp, 0x4]\n\ + ldr r6, _0811484C @ =0x02014800\n\ + mov r1, r8\n\ + adds r5, r3, r1\n\ + ldr r2, _08114850 @ =0x000030c4\n\ + adds r4, r6, r2\n\ + adds r4, r5, r4\n\ + ldrb r1, [r4]\n\ + ldr r0, [sp]\n\ + str r3, [sp, 0x10]\n\ + bl sub_8114DB4\n\ + ldr r1, _08114854 @ =0x000020c4\n\ + adds r0, r6, r1\n\ + adds r0, r5, r0\n\ + ldrb r1, [r4]\n\ + ldr r3, [sp, 0x10]\n\ + ldrb r0, [r0]\n\ + cmp r1, r0\n\ + beq _08114882\n\ + adds r0, r6, 0\n\ + adds r0, 0xC4\n\ + adds r0, r5, r0\n\ + movs r1, 0x3\n\ +_08114842:\n\ + strb r1, [r0]\n\ +_08114844:\n\ + adds r5, r3, 0x1\n\ + mov r10, r5\n\ + b _081148D2\n\ + .align 2, 0\n\ +_0811484C: .4byte 0x02014800\n\ +_08114850: .4byte 0x000030c4\n\ +_08114854: .4byte 0x000020c4\n\ +_08114858:\n\ + movs r0, 0\n\ + str r0, [sp, 0x4]\n\ + ldr r6, _08114894 @ =0x02014800\n\ + mov r1, r8\n\ + adds r5, r3, r1\n\ + ldr r2, _08114898 @ =0x000030c4\n\ + adds r4, r6, r2\n\ + adds r4, r5, r4\n\ + ldrb r1, [r4]\n\ + ldr r0, [sp]\n\ + str r3, [sp, 0x10]\n\ + bl sub_8114DF0\n\ + ldr r1, _0811489C @ =0x000020c4\n\ + adds r0, r6, r1\n\ + adds r0, r5, r0\n\ + ldrb r1, [r4]\n\ + ldr r3, [sp, 0x10]\n\ + ldrb r0, [r0]\n\ + cmp r1, r0\n\ + bne _081148C4\n\ +_08114882:\n\ + adds r0, r6, 0\n\ + adds r0, 0xC4\n\ + adds r0, r5, r0\n\ + mov r2, sp\n\ + ldrb r2, [r2, 0x4]\n\ + strb r2, [r0]\n\ + adds r4, r3, 0x1\n\ + mov r10, r4\n\ + b _081148D2\n\ + .align 2, 0\n\ +_08114894: .4byte 0x02014800\n\ +_08114898: .4byte 0x000030c4\n\ +_0811489C: .4byte 0x000020c4\n\ +_081148A0:\n\ + mov r0, r9\n\ + adds r0, 0xC4\n\ + adds r0, r7, r0\n\ + movs r5, 0\n\ + strb r5, [r0]\n\ + b _081148D2\n\ +_081148AC:\n\ + mov r0, r9\n\ + adds r0, 0xC4\n\ + adds r0, r7, r0\n\ + movs r1, 0\n\ + strb r1, [r0]\n\ + b _081148D2\n\ +_081148B8:\n\ + mov r0, r9\n\ + adds r0, 0xC4\n\ + adds r0, r7, r0\n\ + movs r1, 0\n\ + strb r1, [r0]\n\ + b _081148D2\n\ +_081148C4:\n\ + adds r0, r6, 0\n\ + adds r0, 0xC4\n\ + adds r0, r5, r0\n\ + movs r1, 0x4\n\ + strb r1, [r0]\n\ + adds r2, r3, 0x1\n\ + mov r10, r2\n\ +_081148D2:\n\ + ldr r0, _081148F4 @ =0x02014800\n\ + mov r4, r8\n\ + adds r1, r3, r4\n\ + ldr r5, _081148F8 @ =0x000008c4\n\ + adds r2, r0, r5\n\ + adds r1, r2\n\ + ldrb r1, [r1]\n\ + adds r4, r0, 0\n\ + cmp r1, 0xC\n\ + bls _081148E8\n\ + b _08114D76\n\ +_081148E8:\n\ + lsls r0, r1, 2\n\ + ldr r1, _081148FC @ =_08114900\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_081148F4: .4byte 0x02014800\n\ +_081148F8: .4byte 0x000008c4\n\ +_081148FC: .4byte _08114900\n\ + .align 2, 0\n\ +_08114900:\n\ + .4byte _08114D76\n\ + .4byte _08114934\n\ + .4byte _081149B8\n\ + .4byte _08114A3C\n\ + .4byte _08114AC0\n\ + .4byte _08114B44\n\ + .4byte _08114B7C\n\ + .4byte _08114BB4\n\ + .4byte _08114BEC\n\ + .4byte _08114C24\n\ + .4byte _08114C78\n\ + .4byte _08114CB8\n\ + .4byte _08114CF8\n\ +_08114934:\n\ + movs r0, 0\n\ + str r0, [sp, 0x4]\n\ + lsls r0, r3, 1\n\ + ldr r2, [sp]\n\ + lsls r1, r2, 6\n\ + adds r0, r1\n\ + ldr r5, _081149A8 @ =0x000070c4\n\ + adds r2, r4, r5\n\ + adds r2, r0, r2\n\ + ldr r5, _081149AC @ =0x000090c4\n\ + adds r1, r4, r5\n\ + adds r0, r1\n\ + ldrh r1, [r0]\n\ + ldrh r0, [r2]\n\ + adds r1, r0\n\ + movs r0, 0xFF\n\ + lsls r0, 8\n\ + ands r0, r1\n\ + lsrs r5, r0, 8\n\ + movs r0, 0xFF\n\ + ands r1, r0\n\ + strh r1, [r2]\n\ + movs r6, 0\n\ + ldr r1, [sp, 0x4]\n\ + cmp r1, r5\n\ + blt _0811496A\n\ + b _08114D76\n\ +_0811496A:\n\ + mov r9, r4\n\ + mov r2, r8\n\ + adds r7, r3, r2\n\ + ldr r0, _081149B0 @ =0x000038c4\n\ + add r0, r9\n\ + adds r4, r7, r0\n\ + movs r3, 0\n\ + ldr r0, _081149B4 @ =0x000028c4\n\ + add r0, r9\n\ + adds r2, r7, r0\n\ +_0811497E:\n\ + ldrb r0, [r4]\n\ + subs r0, 0x1\n\ + strb r0, [r4]\n\ + ldrb r1, [r4]\n\ + ldr r0, [sp]\n\ + str r2, [sp, 0xC]\n\ + str r3, [sp, 0x10]\n\ + bl sub_8114DB4\n\ + ldrb r0, [r4]\n\ + ldr r2, [sp, 0xC]\n\ + ldr r3, [sp, 0x10]\n\ + ldrb r1, [r2]\n\ + cmp r0, r1\n\ + bne _0811499E\n\ + b _08114D4C\n\ +_0811499E:\n\ + adds r6, 0x1\n\ + cmp r6, r5\n\ + blt _0811497E\n\ + b _08114D76\n\ + .align 2, 0\n\ +_081149A8: .4byte 0x000070c4\n\ +_081149AC: .4byte 0x000090c4\n\ +_081149B0: .4byte 0x000038c4\n\ +_081149B4: .4byte 0x000028c4\n\ +_081149B8:\n\ + movs r2, 0\n\ + str r2, [sp, 0x4]\n\ + ldr r4, _08114A28 @ =0x02014800\n\ + lsls r0, r3, 1\n\ + ldr r5, [sp]\n\ + lsls r1, r5, 6\n\ + adds r0, r1\n\ + ldr r1, _08114A2C @ =0x000070c4\n\ + adds r2, r4, r1\n\ + adds r2, r0, r2\n\ + ldr r5, _08114A30 @ =0x000090c4\n\ + adds r1, r4, r5\n\ + adds r0, r1\n\ + ldrh r1, [r0]\n\ + ldrh r0, [r2]\n\ + adds r1, r0\n\ + movs r0, 0xFF\n\ + lsls r0, 8\n\ + ands r0, r1\n\ + lsrs r5, r0, 8\n\ + movs r0, 0xFF\n\ + ands r1, r0\n\ + strh r1, [r2]\n\ + movs r6, 0\n\ + ldr r1, [sp, 0x4]\n\ + cmp r1, r5\n\ + blt _081149F0\n\ + b _08114D76\n\ +_081149F0:\n\ + mov r9, r4\n\ + mov r2, r8\n\ + adds r7, r3, r2\n\ + ldr r0, _08114A34 @ =0x000038c4\n\ + add r0, r9\n\ + adds r4, r7, r0\n\ + ldr r0, _08114A38 @ =0x000028c4\n\ + add r0, r9\n\ + adds r2, r7, r0\n\ +_08114A02:\n\ + ldrb r0, [r4]\n\ + ldrb r1, [r2]\n\ + cmp r0, r1\n\ + bne _08114A0C\n\ + b _08114D3C\n\ +_08114A0C:\n\ + adds r1, r0, 0\n\ + ldr r0, [sp]\n\ + str r2, [sp, 0xC]\n\ + bl sub_8114DF0\n\ + ldrb r0, [r4]\n\ + subs r0, 0x1\n\ + strb r0, [r4]\n\ + adds r6, 0x1\n\ + ldr r2, [sp, 0xC]\n\ + cmp r6, r5\n\ + blt _08114A02\n\ + b _08114D76\n\ + .align 2, 0\n\ +_08114A28: .4byte 0x02014800\n\ +_08114A2C: .4byte 0x000070c4\n\ +_08114A30: .4byte 0x000090c4\n\ +_08114A34: .4byte 0x000038c4\n\ +_08114A38: .4byte 0x000028c4\n\ +_08114A3C:\n\ + movs r2, 0\n\ + str r2, [sp, 0x4]\n\ + lsls r0, r3, 1\n\ + ldr r5, [sp]\n\ + lsls r1, r5, 6\n\ + adds r0, r1\n\ + ldr r1, _08114AB0 @ =0x000070c4\n\ + adds r2, r4, r1\n\ + adds r2, r0, r2\n\ + ldr r5, _08114AB4 @ =0x000090c4\n\ + adds r1, r4, r5\n\ + adds r0, r1\n\ + ldrh r1, [r0]\n\ + ldrh r0, [r2]\n\ + adds r1, r0\n\ + movs r0, 0xFF\n\ + lsls r0, 8\n\ + ands r0, r1\n\ + lsrs r5, r0, 8\n\ + movs r0, 0xFF\n\ + ands r1, r0\n\ + strh r1, [r2]\n\ + movs r6, 0\n\ + ldr r1, [sp, 0x4]\n\ + cmp r1, r5\n\ + blt _08114A72\n\ + b _08114D76\n\ +_08114A72:\n\ + mov r9, r4\n\ + mov r2, r8\n\ + adds r7, r3, r2\n\ + ldr r0, _08114AB8 @ =0x000038c4\n\ + add r0, r9\n\ + adds r4, r7, r0\n\ + movs r3, 0\n\ + ldr r0, _08114ABC @ =0x000028c4\n\ + add r0, r9\n\ + adds r2, r7, r0\n\ +_08114A86:\n\ + ldrb r0, [r4]\n\ + adds r0, 0x1\n\ + strb r0, [r4]\n\ + ldrb r1, [r4]\n\ + ldr r0, [sp]\n\ + str r2, [sp, 0xC]\n\ + str r3, [sp, 0x10]\n\ + bl sub_8114DB4\n\ + ldrb r0, [r4]\n\ + ldr r2, [sp, 0xC]\n\ + ldr r3, [sp, 0x10]\n\ + ldrb r1, [r2]\n\ + cmp r0, r1\n\ + bne _08114AA6\n\ + b _08114D4C\n\ +_08114AA6:\n\ + adds r6, 0x1\n\ + cmp r6, r5\n\ + blt _08114A86\n\ + b _08114D76\n\ + .align 2, 0\n\ +_08114AB0: .4byte 0x000070c4\n\ +_08114AB4: .4byte 0x000090c4\n\ +_08114AB8: .4byte 0x000038c4\n\ +_08114ABC: .4byte 0x000028c4\n\ +_08114AC0:\n\ + movs r2, 0\n\ + str r2, [sp, 0x4]\n\ + ldr r4, _08114B30 @ =0x02014800\n\ + lsls r0, r3, 1\n\ + ldr r5, [sp]\n\ + lsls r1, r5, 6\n\ + adds r0, r1\n\ + ldr r1, _08114B34 @ =0x000070c4\n\ + adds r2, r4, r1\n\ + adds r2, r0, r2\n\ + ldr r5, _08114B38 @ =0x000090c4\n\ + adds r1, r4, r5\n\ + adds r0, r1\n\ + ldrh r1, [r0]\n\ + ldrh r0, [r2]\n\ + adds r1, r0\n\ + movs r0, 0xFF\n\ + lsls r0, 8\n\ + ands r0, r1\n\ + lsrs r5, r0, 8\n\ + movs r0, 0xFF\n\ + ands r1, r0\n\ + strh r1, [r2]\n\ + movs r6, 0\n\ + ldr r1, [sp, 0x4]\n\ + cmp r1, r5\n\ + blt _08114AF8\n\ + b _08114D76\n\ +_08114AF8:\n\ + mov r9, r4\n\ + mov r2, r8\n\ + adds r7, r3, r2\n\ + ldr r0, _08114B3C @ =0x000038c4\n\ + add r0, r9\n\ + adds r4, r7, r0\n\ + ldr r0, _08114B40 @ =0x000028c4\n\ + add r0, r9\n\ + adds r2, r7, r0\n\ +_08114B0A:\n\ + ldrb r0, [r4]\n\ + ldrb r1, [r2]\n\ + cmp r0, r1\n\ + bne _08114B14\n\ + b _08114D5C\n\ +_08114B14:\n\ + adds r1, r0, 0\n\ + ldr r0, [sp]\n\ + str r2, [sp, 0xC]\n\ + bl sub_8114DF0\n\ + ldrb r0, [r4]\n\ + adds r0, 0x1\n\ + strb r0, [r4]\n\ + adds r6, 0x1\n\ + ldr r2, [sp, 0xC]\n\ + cmp r6, r5\n\ + blt _08114B0A\n\ + b _08114D76\n\ + .align 2, 0\n\ +_08114B30: .4byte 0x02014800\n\ +_08114B34: .4byte 0x000070c4\n\ +_08114B38: .4byte 0x000090c4\n\ +_08114B3C: .4byte 0x000038c4\n\ +_08114B40: .4byte 0x000028c4\n\ +_08114B44:\n\ + movs r2, 0\n\ + str r2, [sp, 0x4]\n\ + ldr r5, _08114B70 @ =0x02014800\n\ + mov r0, r8\n\ + adds r4, r3, r0\n\ + ldr r1, _08114B74 @ =0x000038c4\n\ + adds r0, r5, r1\n\ + adds r0, r4, r0\n\ + ldrb r1, [r0]\n\ + ldr r0, [sp]\n\ + bl sub_8114E48\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _08114B64\n\ + b _08114D76\n\ +_08114B64:\n\ + ldr r2, _08114B78 @ =0x000008c4\n\ + adds r0, r5, r2\n\ + adds r0, r4, r0\n\ + movs r1, 0x9\n\ + b _08114D74\n\ + .align 2, 0\n\ +_08114B70: .4byte 0x02014800\n\ +_08114B74: .4byte 0x000038c4\n\ +_08114B78: .4byte 0x000008c4\n\ +_08114B7C:\n\ + movs r4, 0\n\ + str r4, [sp, 0x4]\n\ + ldr r5, _08114BA8 @ =0x02014800\n\ + mov r0, r8\n\ + adds r4, r3, r0\n\ + ldr r1, _08114BAC @ =0x000038c4\n\ + adds r0, r5, r1\n\ + adds r0, r4, r0\n\ + ldrb r1, [r0]\n\ + ldr r0, [sp]\n\ + bl sub_8114E48\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _08114B9C\n\ + b _08114D76\n\ +_08114B9C:\n\ + ldr r2, _08114BB0 @ =0x000008c4\n\ + adds r0, r5, r2\n\ + adds r0, r4, r0\n\ + movs r1, 0xA\n\ + b _08114D74\n\ + .align 2, 0\n\ +_08114BA8: .4byte 0x02014800\n\ +_08114BAC: .4byte 0x000038c4\n\ +_08114BB0: .4byte 0x000008c4\n\ +_08114BB4:\n\ + movs r4, 0\n\ + str r4, [sp, 0x4]\n\ + ldr r5, _08114BE0 @ =0x02014800\n\ + mov r0, r8\n\ + adds r4, r3, r0\n\ + ldr r1, _08114BE4 @ =0x000038c4\n\ + adds r0, r5, r1\n\ + adds r0, r4, r0\n\ + ldrb r1, [r0]\n\ + ldr r0, [sp]\n\ + bl sub_8114E48\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _08114BD4\n\ + b _08114D76\n\ +_08114BD4:\n\ + ldr r2, _08114BE8 @ =0x000008c4\n\ + adds r0, r5, r2\n\ + adds r0, r4, r0\n\ + movs r1, 0xB\n\ + b _08114D74\n\ + .align 2, 0\n\ +_08114BE0: .4byte 0x02014800\n\ +_08114BE4: .4byte 0x000038c4\n\ +_08114BE8: .4byte 0x000008c4\n\ +_08114BEC:\n\ + movs r4, 0\n\ + str r4, [sp, 0x4]\n\ + ldr r5, _08114C18 @ =0x02014800\n\ + mov r0, r8\n\ + adds r4, r3, r0\n\ + ldr r1, _08114C1C @ =0x000038c4\n\ + adds r0, r5, r1\n\ + adds r0, r4, r0\n\ + ldrb r1, [r0]\n\ + ldr r0, [sp]\n\ + bl sub_8114E48\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _08114C0C\n\ + b _08114D76\n\ +_08114C0C:\n\ + ldr r2, _08114C20 @ =0x000008c4\n\ + adds r0, r5, r2\n\ + adds r0, r4, r0\n\ + movs r1, 0xC\n\ + b _08114D74\n\ + .align 2, 0\n\ +_08114C18: .4byte 0x02014800\n\ +_08114C1C: .4byte 0x000038c4\n\ +_08114C20: .4byte 0x000008c4\n\ +_08114C24:\n\ + movs r4, 0\n\ + str r4, [sp, 0x4]\n\ + ldr r6, _08114C58 @ =0x02014800\n\ + mov r0, r8\n\ + adds r5, r3, r0\n\ + ldr r1, _08114C5C @ =0x000038c4\n\ + adds r4, r6, r1\n\ + adds r4, r5, r4\n\ + ldrb r1, [r4]\n\ + ldr r0, [sp]\n\ + bl sub_8114DB4\n\ + ldr r2, _08114C60 @ =0x000028c4\n\ + adds r0, r6, r2\n\ + adds r0, r5, r0\n\ + ldrb r1, [r4]\n\ + ldrb r0, [r0]\n\ + cmp r1, r0\n\ + bne _08114C68\n\ + ldr r4, _08114C64 @ =0x000008c4\n\ + adds r0, r6, r4\n\ + adds r0, r5, r0\n\ + mov r5, sp\n\ + ldrb r5, [r5, 0x4]\n\ + strb r5, [r0]\n\ + b _08114D76\n\ + .align 2, 0\n\ +_08114C58: .4byte 0x02014800\n\ +_08114C5C: .4byte 0x000038c4\n\ +_08114C60: .4byte 0x000028c4\n\ +_08114C64: .4byte 0x000008c4\n\ +_08114C68:\n\ + ldr r1, _08114C74 @ =0x000008c4\n\ + adds r0, r6, r1\n\ + adds r0, r5, r0\n\ + movs r1, 0x1\n\ + b _08114D74\n\ + .align 2, 0\n\ +_08114C74: .4byte 0x000008c4\n\ +_08114C78:\n\ + movs r2, 0\n\ + str r2, [sp, 0x4]\n\ + ldr r6, _08114CA8 @ =0x02014800\n\ + mov r4, r8\n\ + adds r5, r3, r4\n\ + ldr r0, _08114CAC @ =0x000038c4\n\ + adds r4, r6, r0\n\ + adds r4, r5, r4\n\ + ldrb r1, [r4]\n\ + ldr r0, [sp]\n\ + bl sub_8114DF0\n\ + ldr r1, _08114CB0 @ =0x000028c4\n\ + adds r0, r6, r1\n\ + adds r0, r5, r0\n\ + ldrb r1, [r4]\n\ + ldrb r0, [r0]\n\ + cmp r1, r0\n\ + beq _08114D1E\n\ + ldr r1, _08114CB4 @ =0x000008c4\n\ + adds r0, r6, r1\n\ + adds r0, r5, r0\n\ + movs r1, 0x2\n\ + b _08114D74\n\ + .align 2, 0\n\ +_08114CA8: .4byte 0x02014800\n\ +_08114CAC: .4byte 0x000038c4\n\ +_08114CB0: .4byte 0x000028c4\n\ +_08114CB4: .4byte 0x000008c4\n\ +_08114CB8:\n\ + movs r2, 0\n\ + str r2, [sp, 0x4]\n\ + ldr r6, _08114CE8 @ =0x02014800\n\ + mov r4, r8\n\ + adds r5, r3, r4\n\ + ldr r0, _08114CEC @ =0x000038c4\n\ + adds r4, r6, r0\n\ + adds r4, r5, r4\n\ + ldrb r1, [r4]\n\ + ldr r0, [sp]\n\ + bl sub_8114DB4\n\ + ldr r1, _08114CF0 @ =0x000028c4\n\ + adds r0, r6, r1\n\ + adds r0, r5, r0\n\ + ldrb r1, [r4]\n\ + ldrb r0, [r0]\n\ + cmp r1, r0\n\ + beq _08114D1E\n\ + ldr r1, _08114CF4 @ =0x000008c4\n\ + adds r0, r6, r1\n\ + adds r0, r5, r0\n\ + movs r1, 0x3\n\ + b _08114D74\n\ + .align 2, 0\n\ +_08114CE8: .4byte 0x02014800\n\ +_08114CEC: .4byte 0x000038c4\n\ +_08114CF0: .4byte 0x000028c4\n\ +_08114CF4: .4byte 0x000008c4\n\ +_08114CF8:\n\ + movs r2, 0\n\ + str r2, [sp, 0x4]\n\ + ldr r6, _08114D2C @ =0x02014800\n\ + mov r4, r8\n\ + adds r5, r3, r4\n\ + ldr r0, _08114D30 @ =0x000038c4\n\ + adds r4, r6, r0\n\ + adds r4, r5, r4\n\ + ldrb r1, [r4]\n\ + ldr r0, [sp]\n\ + bl sub_8114DF0\n\ + ldr r1, _08114D34 @ =0x000028c4\n\ + adds r0, r6, r1\n\ + adds r0, r5, r0\n\ + ldrb r1, [r4]\n\ + ldrb r0, [r0]\n\ + cmp r1, r0\n\ + bne _08114D6C\n\ +_08114D1E:\n\ + ldr r2, _08114D38 @ =0x000008c4\n\ + adds r0, r6, r2\n\ + adds r0, r5, r0\n\ + mov r4, sp\n\ + ldrb r4, [r4, 0x4]\n\ + strb r4, [r0]\n\ + b _08114D76\n\ + .align 2, 0\n\ +_08114D2C: .4byte 0x02014800\n\ +_08114D30: .4byte 0x000038c4\n\ +_08114D34: .4byte 0x000028c4\n\ +_08114D38: .4byte 0x000008c4\n\ +_08114D3C:\n\ + ldr r0, _08114D48 @ =0x000008c4\n\ + add r0, r9\n\ + adds r0, r7, r0\n\ + movs r1, 0\n\ + b _08114D74\n\ + .align 2, 0\n\ +_08114D48: .4byte 0x000008c4\n\ +_08114D4C:\n\ + ldr r0, _08114D58 @ =0x000008c4\n\ + add r0, r9\n\ + adds r0, r7, r0\n\ + strb r3, [r0]\n\ + b _08114D76\n\ + .align 2, 0\n\ +_08114D58: .4byte 0x000008c4\n\ +_08114D5C:\n\ + ldr r0, _08114D68 @ =0x000008c4\n\ + add r0, r9\n\ + adds r0, r7, r0\n\ + movs r1, 0\n\ + b _08114D74\n\ + .align 2, 0\n\ +_08114D68: .4byte 0x000008c4\n\ +_08114D6C:\n\ + ldr r1, _08114DAC @ =0x000008c4\n\ + adds r0, r6, r1\n\ + adds r0, r5, r0\n\ + movs r1, 0x4\n\ +_08114D74:\n\ + strb r1, [r0]\n\ +_08114D76:\n\ + mov r3, r10\n\ + ldr r2, _08114DB0 @ =0x02014800\n\ + adds r0, r2, 0\n\ + adds r0, 0x84\n\ + ldr r4, [sp]\n\ + adds r0, r4, r0\n\ + adds r4, r2, 0\n\ +_08114D84:\n\ + ldrb r0, [r0]\n\ + cmp r3, r0\n\ + bge _08114D8E\n\ + bl _08114410\n\ +_08114D8E:\n\ + ldr r5, [sp, 0x8]\n\ + str r5, [sp]\n\ + cmp r5, 0x3F\n\ + bgt _08114D9A\n\ + bl _081143F2\n\ +_08114D9A:\n\ + ldr r0, [sp, 0x4]\n\ + add sp, 0x14\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\ +_08114DAC: .4byte 0x000008c4\n\ +_08114DB0: .4byte 0x02014800\n\ + .syntax divided"); +} + +__attribute__((naked)) +void sub_8114DB4() +{ + asm(".syntax unified\n\ + push {lr}\n\ + lsls r1, 24\n\ + lsrs r3, r1, 24\n\ + ldr r2, _08114DDC @ =0x02014800\n\ + lsrs r1, 25\n\ + lsls r1, 2\n\ + lsls r0, 7\n\ + adds r1, r0\n\ + ldr r0, _08114DE0 @ =0x000040c4\n\ + adds r2, r0\n\ + adds r1, r2\n\ + ldr r2, [r1]\n\ + movs r0, 0x1\n\ + ands r3, r0\n\ + cmp r3, 0\n\ + beq _08114DE4\n\ + ldrb r0, [r2]\n\ + movs r1, 0xF0\n\ + b _08114DE8\n\ + .align 2, 0\n\ +_08114DDC: .4byte 0x02014800\n\ +_08114DE0: .4byte 0x000040c4\n\ +_08114DE4:\n\ + ldrb r0, [r2]\n\ + movs r1, 0xF\n\ +_08114DE8:\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided"); +} + +__attribute__((naked)) +void sub_8114DF0() +{ + asm(".syntax unified\n\ + push {lr}\n\ + lsls r1, 24\n\ + lsrs r3, r1, 24\n\ + ldr r2, _08114E28 @ =0x02014800\n\ + lsrs r1, 25\n\ + lsls r1, 2\n\ + lsls r0, 7\n\ + adds r1, r0\n\ + ldr r0, _08114E2C @ =0x000040c4\n\ + adds r2, r0\n\ + adds r1, r2\n\ + ldr r2, [r1]\n\ + movs r0, 0xC0\n\ + lsls r0, 7\n\ + adds r1, r2, r0\n\ + movs r0, 0x1\n\ + ands r3, r0\n\ + cmp r3, 0\n\ + beq _08114E30\n\ + ldrb r1, [r1]\n\ + movs r0, 0xF0\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08114E42\n\ + ldrb r1, [r2]\n\ + movs r0, 0xF\n\ + b _08114E3E\n\ + .align 2, 0\n\ +_08114E28: .4byte 0x02014800\n\ +_08114E2C: .4byte 0x000040c4\n\ +_08114E30:\n\ + ldrb r1, [r1]\n\ + movs r0, 0xF\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08114E42\n\ + ldrb r1, [r2]\n\ + movs r0, 0xF0\n\ +_08114E3E:\n\ + ands r0, r1\n\ + strb r0, [r2]\n\ +_08114E42:\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided"); +} + +__attribute__((naked)) +void sub_8114E48() +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + adds r4, r0, 0\n\ + lsls r1, 24\n\ + lsrs r6, r1, 24\n\ + ldr r1, _08114E6C @ =0x02014800\n\ + ldr r2, _08114E70 @ =0x0000a0c4\n\ + adds r0, r1, r2\n\ + ldrb r0, [r0]\n\ + adds r5, r1, 0\n\ + cmp r0, 0\n\ + bne _08114E60\n\ + b _08114F5E\n\ +_08114E60:\n\ + movs r1, 0\n\ + movs r3, 0\n\ + cmp r4, 0\n\ + bne _08114E74\n\ + movs r1, 0x1\n\ + b _08114EA6\n\ + .align 2, 0\n\ +_08114E6C: .4byte 0x02014800\n\ +_08114E70: .4byte 0x0000a0c4\n\ +_08114E74:\n\ + subs r0, r4, 0x1\n\ + lsls r0, 5\n\ + adds r2, r3, r0\n\ + adds r0, r5, 0\n\ + adds r0, 0xC4\n\ + adds r0, r2, r0\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + bne _08114EA6\n\ + ldr r7, _08114EC4 @ =0x000008c4\n\ + adds r0, r5, r7\n\ + adds r0, r2, r0\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + bne _08114EA6\n\ + adds r3, 0x1\n\ + cmp r3, 0x1F\n\ + bgt _08114EA6\n\ + cmp r4, 0\n\ + bne _08114E74\n\ + lsls r0, r1, 24\n\ + movs r1, 0x80\n\ + lsls r1, 17\n\ + adds r0, r1\n\ + lsrs r1, r0, 24\n\ +_08114EA6:\n\ + cmp r3, 0x20\n\ + bne _08114EB4\n\ + lsls r0, r1, 24\n\ + movs r2, 0x80\n\ + lsls r2, 17\n\ + adds r0, r2\n\ + lsrs r1, r0, 24\n\ +_08114EB4:\n\ + movs r3, 0\n\ + cmp r4, 0x3F\n\ + bne _08114EC8\n\ + lsls r0, r1, 24\n\ + movs r7, 0x80\n\ + lsls r7, 17\n\ + adds r0, r7\n\ + b _08114EF8\n\ + .align 2, 0\n\ +_08114EC4: .4byte 0x000008c4\n\ +_08114EC8:\n\ + adds r0, r4, 0x1\n\ + lsls r0, 5\n\ + adds r2, r3, r0\n\ + adds r0, r5, 0\n\ + adds r0, 0xC4\n\ + adds r0, r2, r0\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + bne _08114EFA\n\ + ldr r7, _08114F64 @ =0x000008c4\n\ + adds r0, r5, r7\n\ + adds r0, r2, r0\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + bne _08114EFA\n\ + adds r3, 0x1\n\ + cmp r3, 0x1F\n\ + bgt _08114EFA\n\ + cmp r4, 0x3F\n\ + bne _08114EC8\n\ + lsls r0, r1, 24\n\ + movs r1, 0x80\n\ + lsls r1, 17\n\ + adds r0, r1\n\ +_08114EF8:\n\ + lsrs r1, r0, 24\n\ +_08114EFA:\n\ + cmp r3, 0x20\n\ + bne _08114F08\n\ + lsls r0, r1, 24\n\ + movs r2, 0x80\n\ + lsls r2, 17\n\ + adds r0, r2\n\ + lsrs r1, r0, 24\n\ +_08114F08:\n\ + cmp r1, 0x2\n\ + beq _08114F5E\n\ + subs r0, r6, 0x2\n\ + lsls r0, 24\n\ + lsrs r1, r0, 24\n\ + cmp r0, 0\n\ + bge _08114F18\n\ + movs r1, 0\n\ +_08114F18:\n\ + adds r0, r6, 0x2\n\ + lsls r0, 24\n\ + lsrs r2, r0, 24\n\ + asrs r0, 24\n\ + cmp r0, 0x3F\n\ + ble _08114F26\n\ + movs r2, 0x3F\n\ +_08114F26:\n\ + lsls r1, 24\n\ + asrs r3, r1, 24\n\ + lsls r0, r2, 24\n\ + asrs r2, r0, 24\n\ + adds r6, r1, 0\n\ + adds r7, r0, 0\n\ + cmp r3, r2\n\ + bge _08114F7C\n\ + cmp r4, 0\n\ + beq _08114F7C\n\ + subs r0, r4, 0x1\n\ + lsls r5, r0, 7\n\ + ldr r0, _08114F68 @ =0x020188c4\n\ + mov r12, r0\n\ +_08114F42:\n\ + asrs r0, r3, 1\n\ + lsls r0, 2\n\ + adds r0, r5\n\ + add r0, r12\n\ + ldr r1, [r0]\n\ + movs r0, 0x1\n\ + ands r0, r3\n\ + cmp r0, 0\n\ + beq _08114F6C\n\ + ldrb r1, [r1]\n\ + movs r0, 0xF0\n\ +_08114F58:\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08114F72\n\ +_08114F5E:\n\ + movs r0, 0x1\n\ + b _08114FCA\n\ + .align 2, 0\n\ +_08114F64: .4byte 0x000008c4\n\ +_08114F68: .4byte 0x020188c4\n\ +_08114F6C:\n\ + ldrb r1, [r1]\n\ + movs r0, 0xF\n\ + b _08114F58\n\ +_08114F72:\n\ + adds r3, 0x1\n\ + cmp r3, r2\n\ + bge _08114F7C\n\ + cmp r4, 0\n\ + bne _08114F42\n\ +_08114F7C:\n\ + asrs r3, r6, 24\n\ + asrs r1, r7, 24\n\ + cmp r3, r1\n\ + bge _08114FC8\n\ + cmp r4, 0x3F\n\ + beq _08114FC8\n\ + adds r0, r4, 0x1\n\ + lsls r5, r0, 7\n\ + ldr r6, _08114FB0 @ =0x020188c4\n\ + adds r2, r1, 0\n\ +_08114F90:\n\ + asrs r0, r3, 1\n\ + lsls r0, 2\n\ + adds r0, r5\n\ + adds r0, r6\n\ + ldr r1, [r0]\n\ + movs r0, 0x1\n\ + ands r0, r3\n\ + cmp r0, 0\n\ + beq _08114FB4\n\ + ldrb r1, [r1]\n\ + movs r0, 0xF0\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08114FBE\n\ + b _08114F5E\n\ + .align 2, 0\n\ +_08114FB0: .4byte 0x020188c4\n\ +_08114FB4:\n\ + ldrb r1, [r1]\n\ + movs r0, 0xF\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08114F5E\n\ +_08114FBE:\n\ + adds r3, 0x1\n\ + cmp r3, r2\n\ + bge _08114FC8\n\ + cmp r4, 0x3F\n\ + bne _08114F90\n\ +_08114FC8:\n\ + movs r0, 0\n\ +_08114FCA:\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n\ + .syntax divided"); +} + +// Functions below are vblank callbacks and are used + +static void EvoDummyFunc(void) +{ + +} + +static void VBlankCB_EvolutionScene(void) +{ + REG_BG0CNT = BGCNT_SCREENBASE(24) | BGCNT_16COLOR | BGCNT_TXT256x256 | BGCNT_AFF512x512 | BGCNT_PRIORITY(3); // 0x9803 + REG_BG0HOFS = gUnknown_030042A4; + REG_BG0VOFS = gUnknown_030042A0; + REG_BG1HOFS = gUnknown_030042C0; + REG_BG1VOFS = gUnknown_030041B4; + REG_BG2HOFS = gUnknown_03004288; + REG_BG2VOFS = gUnknown_03004280; + REG_BG3HOFS = gUnknown_030041B0; + REG_BG3VOFS = gUnknown_030041B8; + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + sub_8089668(); +} + +static void VBlankCB_TradeEvolutionScene(void) +{ + REG_BG0HOFS = gUnknown_030042A4; + REG_BG0VOFS = gUnknown_030042A0; + REG_BG1HOFS = gUnknown_030042C0; + REG_BG1VOFS = gUnknown_030041B4; + REG_BG2HOFS = gUnknown_03004288; + REG_BG2VOFS = gUnknown_03004280; + REG_BG3HOFS = gUnknown_030041B0; + REG_BG3VOFS = gUnknown_030041B8; + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + sub_8089668(); +} + +static void sub_81150D8(void) +{ + sub_814A880(200, 72 + (sEvoCursorPos * 16)); +} + +static void EvoDummyFunc2(void) +{ + +} diff --git a/sym_common.txt b/sym_common.txt index 5a535ae87..d6a955a63 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -244,12 +244,7 @@ gUnknown_03005E0C: @ 3005E0C .space 0x4 .include "contest_painting.o" - -@ evolution_scene - - .align 2 -gUnknown_03005E94: @ 3005E94 - .space 0x4 + .include "evolution_scene.o" @ pokedex_cry_screen -- cgit v1.2.3 From 9202e8d4c0b8ae285d0dae4ead2582c04c5d100f Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 27 Aug 2017 11:13:32 -0500 Subject: data2c.s -> battle_moves.s --- data/battle_moves.inc | 3906 ------------------------------------------------ data/battle_moves.s | 3911 +++++++++++++++++++++++++++++++++++++++++++++++++ data/data2c.s | 10 - ld_script.txt | 2 +- 4 files changed, 3912 insertions(+), 3917 deletions(-) delete mode 100644 data/battle_moves.inc create mode 100644 data/battle_moves.s delete mode 100644 data/data2c.s diff --git a/data/battle_moves.inc b/data/battle_moves.inc deleted file mode 100644 index ff7e2cb33..000000000 --- a/data/battle_moves.inc +++ /dev/null @@ -1,3906 +0,0 @@ - .align 2 -gBattleMoves:: @ 81FB12C -@ NONE - .byte EFFECT_HIT - .byte 0 @ power - .byte TYPE_NORMAL - .byte 0 @ accuracy - .byte 0 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte 0 @ misc. flags - -@ POUND - .byte EFFECT_HIT - .byte 40 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 35 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ KARATE_CHOP - .byte EFFECT_HIGH_CRITICAL - .byte 50 @ power - .byte TYPE_FIGHTING - .byte 100 @ accuracy - .byte 25 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ DOUBLE_SLAP - .byte EFFECT_MULTI_HIT - .byte 15 @ power - .byte TYPE_NORMAL - .byte 85 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ COMET_PUNCH - .byte EFFECT_MULTI_HIT - .byte 18 @ power - .byte TYPE_NORMAL - .byte 85 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ MEGA_PUNCH - .byte EFFECT_HIT - .byte 80 @ power - .byte TYPE_NORMAL - .byte 85 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ PAY_DAY - .byte EFFECT_PAY_DAY - .byte 40 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 20 @ PP - .byte 100 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ FIRE_PUNCH - .byte EFFECT_BURN_HIT - .byte 75 @ power - .byte TYPE_FIRE - .byte 100 @ accuracy - .byte 15 @ PP - .byte 10 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ ICE_PUNCH - .byte EFFECT_FREEZE_HIT - .byte 75 @ power - .byte TYPE_ICE - .byte 100 @ accuracy - .byte 15 @ PP - .byte 10 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ THUNDER_PUNCH - .byte EFFECT_PARALYZE_HIT - .byte 75 @ power - .byte TYPE_ELECTRIC - .byte 100 @ accuracy - .byte 15 @ PP - .byte 10 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ SCRATCH - .byte EFFECT_HIT - .byte 40 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 35 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ VICE_GRIP - .byte EFFECT_HIT - .byte 55 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 30 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ GUILLOTINE - .byte EFFECT_OHKO - .byte 1 @ power - .byte TYPE_NORMAL - .byte 30 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ RAZOR_WIND - .byte EFFECT_RAZOR_WIND - .byte 80 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_BOTH_ENEMIES - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ SWORDS_DANCE - .byte EFFECT_ATTACK_UP_2 - .byte 0 @ power - .byte TYPE_NORMAL - .byte 0 @ accuracy - .byte 30 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ CUT - .byte EFFECT_HIT - .byte 50 @ power - .byte TYPE_NORMAL - .byte 95 @ accuracy - .byte 30 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ GUST - .byte EFFECT_GUST - .byte 40 @ power - .byte TYPE_FLYING - .byte 100 @ accuracy - .byte 35 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ WING_ATTACK - .byte EFFECT_HIT - .byte 60 @ power - .byte TYPE_FLYING - .byte 100 @ accuracy - .byte 35 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ WHIRLWIND - .byte EFFECT_ROAR - .byte 0 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte -6 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ FLY - .byte EFFECT_FLY - .byte 70 @ power - .byte TYPE_FLYING - .byte 95 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ BIND - .byte EFFECT_TRAP - .byte 15 @ power - .byte TYPE_NORMAL - .byte 75 @ accuracy - .byte 20 @ PP - .byte 100 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ SLAM - .byte EFFECT_HIT - .byte 80 @ power - .byte TYPE_NORMAL - .byte 75 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ VINE_WHIP - .byte EFFECT_HIT - .byte 35 @ power - .byte TYPE_GRASS - .byte 100 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ STOMP - .byte EFFECT_FLINCH_HIT_2 - .byte 65 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 20 @ PP - .byte 30 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ DOUBLE_KICK - .byte EFFECT_DOUBLE_HIT - .byte 30 @ power - .byte TYPE_FIGHTING - .byte 100 @ accuracy - .byte 30 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ MEGA_KICK - .byte EFFECT_HIT - .byte 120 @ power - .byte TYPE_NORMAL - .byte 75 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ JUMP_KICK - .byte EFFECT_RECOIL_IF_MISS - .byte 70 @ power - .byte TYPE_FIGHTING - .byte 95 @ accuracy - .byte 25 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ ROLLING_KICK - .byte EFFECT_FLINCH_HIT - .byte 60 @ power - .byte TYPE_FIGHTING - .byte 85 @ accuracy - .byte 15 @ PP - .byte 30 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ SAND_ATTACK - .byte EFFECT_ACCURACY_DOWN - .byte 0 @ power - .byte TYPE_GROUND - .byte 100 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ HEADBUTT - .byte EFFECT_FLINCH_HIT - .byte 70 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 15 @ PP - .byte 30 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ HORN_ATTACK - .byte EFFECT_HIT - .byte 65 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 25 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ FURY_ATTACK - .byte EFFECT_MULTI_HIT - .byte 15 @ power - .byte TYPE_NORMAL - .byte 85 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ HORN_DRILL - .byte EFFECT_OHKO - .byte 1 @ power - .byte TYPE_NORMAL - .byte 30 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ TACKLE - .byte EFFECT_HIT - .byte 35 @ power - .byte TYPE_NORMAL - .byte 95 @ accuracy - .byte 35 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ BODY_SLAM - .byte EFFECT_PARALYZE_HIT - .byte 85 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 15 @ PP - .byte 30 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ WRAP - .byte EFFECT_TRAP - .byte 15 @ power - .byte TYPE_NORMAL - .byte 85 @ accuracy - .byte 20 @ PP - .byte 100 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ TAKE_DOWN - .byte EFFECT_RECOIL - .byte 90 @ power - .byte TYPE_NORMAL - .byte 85 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ THRASH - .byte EFFECT_RAMPAGE - .byte 90 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 20 @ PP - .byte 100 @ secondary effect chance - .byte F_TARGET_RANDOM - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ DOUBLE_EDGE - .byte EFFECT_DOUBLE_EDGE - .byte 120 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ TAIL_WHIP - .byte EFFECT_DEFENSE_DOWN - .byte 0 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 30 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_BOTH_ENEMIES - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ POISON_STING - .byte EFFECT_POISON_HIT - .byte 15 @ power - .byte TYPE_POISON - .byte 100 @ accuracy - .byte 35 @ PP - .byte 30 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ TWINEEDLE - .byte EFFECT_TWINEEDLE - .byte 25 @ power - .byte TYPE_BUG - .byte 100 @ accuracy - .byte 20 @ PP - .byte 20 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ PIN_MISSILE - .byte EFFECT_MULTI_HIT - .byte 14 @ power - .byte TYPE_BUG - .byte 85 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ LEER - .byte EFFECT_DEFENSE_DOWN - .byte 0 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 30 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_BOTH_ENEMIES - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ BITE - .byte EFFECT_FLINCH_HIT - .byte 60 @ power - .byte TYPE_DARK - .byte 100 @ accuracy - .byte 25 @ PP - .byte 30 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ GROWL - .byte EFFECT_ATTACK_DOWN - .byte 0 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 40 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_BOTH_ENEMIES - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ ROAR - .byte EFFECT_ROAR - .byte 0 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte -6 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ SING - .byte EFFECT_SLEEP - .byte 0 @ power - .byte TYPE_NORMAL - .byte 55 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ SUPERSONIC - .byte EFFECT_CONFUSE - .byte 0 @ power - .byte TYPE_NORMAL - .byte 55 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ SONIC_BOOM - .byte EFFECT_SONICBOOM - .byte 1 @ power - .byte TYPE_NORMAL - .byte 90 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ DISABLE - .byte EFFECT_DISABLE - .byte 0 @ power - .byte TYPE_NORMAL - .byte 55 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ ACID - .byte EFFECT_DEFENSE_DOWN_HIT - .byte 40 @ power - .byte TYPE_POISON - .byte 100 @ accuracy - .byte 30 @ PP - .byte 10 @ secondary effect chance - .byte F_TARGET_BOTH_ENEMIES - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ EMBER - .byte EFFECT_BURN_HIT - .byte 40 @ power - .byte TYPE_FIRE - .byte 100 @ accuracy - .byte 25 @ PP - .byte 10 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ FLAMETHROWER - .byte EFFECT_BURN_HIT - .byte 95 @ power - .byte TYPE_FIRE - .byte 100 @ accuracy - .byte 15 @ PP - .byte 10 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ MIST - .byte EFFECT_MIST - .byte 0 @ power - .byte TYPE_ICE - .byte 0 @ accuracy - .byte 30 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ WATER_GUN - .byte EFFECT_HIT - .byte 40 @ power - .byte TYPE_WATER - .byte 100 @ accuracy - .byte 25 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ HYDRO_PUMP - .byte EFFECT_HIT - .byte 120 @ power - .byte TYPE_WATER - .byte 80 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ SURF - .byte EFFECT_HIT - .byte 95 @ power - .byte TYPE_WATER - .byte 100 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_BOTH_ENEMIES - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ ICE_BEAM - .byte EFFECT_FREEZE_HIT - .byte 95 @ power - .byte TYPE_ICE - .byte 100 @ accuracy - .byte 10 @ PP - .byte 10 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ BLIZZARD - .byte EFFECT_FREEZE_HIT - .byte 120 @ power - .byte TYPE_ICE - .byte 70 @ accuracy - .byte 5 @ PP - .byte 10 @ secondary effect chance - .byte F_TARGET_BOTH_ENEMIES - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ PSYBEAM - .byte EFFECT_CONFUSE_HIT - .byte 65 @ power - .byte TYPE_PSYCHIC - .byte 100 @ accuracy - .byte 20 @ PP - .byte 10 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ BUBBLE_BEAM - .byte EFFECT_SPEED_DOWN_HIT - .byte 65 @ power - .byte TYPE_WATER - .byte 100 @ accuracy - .byte 20 @ PP - .byte 10 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ AURORA_BEAM - .byte EFFECT_ATTACK_DOWN_HIT - .byte 65 @ power - .byte TYPE_ICE - .byte 100 @ accuracy - .byte 20 @ PP - .byte 10 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ HYPER_BEAM - .byte EFFECT_RECHARGE - .byte 150 @ power - .byte TYPE_NORMAL - .byte 90 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ PECK - .byte EFFECT_HIT - .byte 35 @ power - .byte TYPE_FLYING - .byte 100 @ accuracy - .byte 35 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ DRILL_PECK - .byte EFFECT_HIT - .byte 80 @ power - .byte TYPE_FLYING - .byte 100 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ SUBMISSION - .byte EFFECT_RECOIL - .byte 80 @ power - .byte TYPE_FIGHTING - .byte 80 @ accuracy - .byte 25 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ LOW_KICK - .byte EFFECT_LOW_KICK - .byte 1 @ power - .byte TYPE_FIGHTING - .byte 100 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ COUNTER - .byte EFFECT_COUNTER - .byte 1 @ power - .byte TYPE_FIGHTING - .byte 100 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_SPECIAL - .byte -5 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_MAKES_CONTACT @ misc. flags - -@ SEISMIC_TOSS - .byte EFFECT_LEVEL_DAMAGE - .byte 1 @ power - .byte TYPE_FIGHTING - .byte 100 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ STRENGTH - .byte EFFECT_HIT - .byte 80 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ ABSORB - .byte EFFECT_ABSORB - .byte 20 @ power - .byte TYPE_GRASS - .byte 100 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ MEGA_DRAIN - .byte EFFECT_ABSORB - .byte 40 @ power - .byte TYPE_GRASS - .byte 100 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ LEECH_SEED - .byte EFFECT_LEECH_SEED - .byte 0 @ power - .byte TYPE_GRASS - .byte 90 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ GROWTH - .byte EFFECT_SPECIAL_ATTACK_UP - .byte 0 @ power - .byte TYPE_NORMAL - .byte 0 @ accuracy - .byte 40 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ RAZOR_LEAF - .byte EFFECT_HIGH_CRITICAL - .byte 55 @ power - .byte TYPE_GRASS - .byte 95 @ accuracy - .byte 25 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_BOTH_ENEMIES - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ SOLAR_BEAM - .byte EFFECT_SOLARBEAM - .byte 120 @ power - .byte TYPE_GRASS - .byte 100 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ POISON_POWDER - .byte EFFECT_POISON - .byte 0 @ power - .byte TYPE_POISON - .byte 75 @ accuracy - .byte 35 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ STUN_SPORE - .byte EFFECT_PARALYZE - .byte 0 @ power - .byte TYPE_GRASS - .byte 75 @ accuracy - .byte 30 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ SLEEP_POWDER - .byte EFFECT_SLEEP - .byte 0 @ power - .byte TYPE_GRASS - .byte 75 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ PETAL_DANCE - .byte EFFECT_RAMPAGE - .byte 70 @ power - .byte TYPE_GRASS - .byte 100 @ accuracy - .byte 20 @ PP - .byte 100 @ secondary effect chance - .byte F_TARGET_RANDOM - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ STRING_SHOT - .byte EFFECT_SPEED_DOWN - .byte 0 @ power - .byte TYPE_BUG - .byte 95 @ accuracy - .byte 40 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_BOTH_ENEMIES - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ DRAGON_RAGE - .byte EFFECT_DRAGON_RAGE - .byte 1 @ power - .byte TYPE_DRAGON - .byte 100 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ FIRE_SPIN - .byte EFFECT_TRAP - .byte 15 @ power - .byte TYPE_FIRE - .byte 70 @ accuracy - .byte 15 @ PP - .byte 100 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ THUNDER_SHOCK - .byte EFFECT_PARALYZE_HIT - .byte 40 @ power - .byte TYPE_ELECTRIC - .byte 100 @ accuracy - .byte 30 @ PP - .byte 10 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ THUNDERBOLT - .byte EFFECT_PARALYZE_HIT - .byte 95 @ power - .byte TYPE_ELECTRIC - .byte 100 @ accuracy - .byte 15 @ PP - .byte 10 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ THUNDER_WAVE - .byte EFFECT_PARALYZE - .byte 0 @ power - .byte TYPE_ELECTRIC - .byte 100 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ THUNDER - .byte EFFECT_THUNDER - .byte 120 @ power - .byte TYPE_ELECTRIC - .byte 70 @ accuracy - .byte 10 @ PP - .byte 30 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ ROCK_THROW - .byte EFFECT_HIT - .byte 50 @ power - .byte TYPE_ROCK - .byte 90 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ EARTHQUAKE - .byte EFFECT_EARTHQUAKE - .byte 100 @ power - .byte TYPE_GROUND - .byte 100 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_ALL_EXCEPT_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ FISSURE - .byte EFFECT_OHKO - .byte 1 @ power - .byte TYPE_GROUND - .byte 30 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ DIG - .byte EFFECT_FLY - .byte 60 @ power - .byte TYPE_GROUND - .byte 100 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ TOXIC - .byte EFFECT_TOXIC - .byte 0 @ power - .byte TYPE_POISON - .byte 85 @ accuracy - .byte 10 @ PP - .byte 100 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ CONFUSION - .byte EFFECT_CONFUSE_HIT - .byte 50 @ power - .byte TYPE_PSYCHIC - .byte 100 @ accuracy - .byte 25 @ PP - .byte 10 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ PSYCHIC - .byte EFFECT_SPECIAL_DEFENSE_DOWN_HIT - .byte 90 @ power - .byte TYPE_PSYCHIC - .byte 100 @ accuracy - .byte 10 @ PP - .byte 10 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ HYPNOSIS - .byte EFFECT_SLEEP - .byte 0 @ power - .byte TYPE_PSYCHIC - .byte 60 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ MEDITATE - .byte EFFECT_ATTACK_UP - .byte 0 @ power - .byte TYPE_PSYCHIC - .byte 0 @ accuracy - .byte 40 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ AGILITY - .byte EFFECT_SPEED_UP_2 - .byte 0 @ power - .byte TYPE_PSYCHIC - .byte 0 @ accuracy - .byte 30 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ QUICK_ATTACK - .byte EFFECT_QUICK_ATTACK - .byte 40 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 30 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 1 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ RAGE - .byte EFFECT_RAGE - .byte 20 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ TELEPORT - .byte EFFECT_TELEPORT - .byte 0 @ power - .byte TYPE_PSYCHIC - .byte 0 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte 0 @ misc. flags - -@ NIGHT_SHADE - .byte EFFECT_LEVEL_DAMAGE - .byte 1 @ power - .byte TYPE_GHOST - .byte 100 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ MIMIC - .byte EFFECT_MIMIC - .byte 0 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_PROTECT @ misc. flags - -@ SCREECH - .byte EFFECT_DEFENSE_DOWN_2 - .byte 0 @ power - .byte TYPE_NORMAL - .byte 85 @ accuracy - .byte 40 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ DOUBLE_TEAM - .byte EFFECT_EVASION_UP - .byte 0 @ power - .byte TYPE_NORMAL - .byte 0 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ RECOVER - .byte EFFECT_RESTORE_HP - .byte 0 @ power - .byte TYPE_NORMAL - .byte 0 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ HARDEN - .byte EFFECT_DEFENSE_UP - .byte 0 @ power - .byte TYPE_NORMAL - .byte 0 @ accuracy - .byte 30 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ MINIMIZE - .byte EFFECT_MINIMIZE - .byte 0 @ power - .byte TYPE_NORMAL - .byte 0 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ SMOKESCREEN - .byte EFFECT_ACCURACY_DOWN - .byte 0 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ CONFUSE_RAY - .byte EFFECT_CONFUSE - .byte 0 @ power - .byte TYPE_GHOST - .byte 100 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ WITHDRAW - .byte EFFECT_DEFENSE_UP - .byte 0 @ power - .byte TYPE_WATER - .byte 0 @ accuracy - .byte 40 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ DEFENSE_CURL - .byte EFFECT_DEFENSE_CURL - .byte 0 @ power - .byte TYPE_NORMAL - .byte 0 @ accuracy - .byte 40 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ BARRIER - .byte EFFECT_DEFENSE_UP_2 - .byte 0 @ power - .byte TYPE_PSYCHIC - .byte 0 @ accuracy - .byte 30 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ LIGHT_SCREEN - .byte EFFECT_LIGHT_SCREEN - .byte 0 @ power - .byte TYPE_PSYCHIC - .byte 0 @ accuracy - .byte 30 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ HAZE - .byte EFFECT_HAZE - .byte 0 @ power - .byte TYPE_ICE - .byte 0 @ accuracy - .byte 30 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_PROTECT @ misc. flags - -@ REFLECT - .byte EFFECT_REFLECT - .byte 0 @ power - .byte TYPE_PSYCHIC - .byte 0 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ FOCUS_ENERGY - .byte EFFECT_FOCUS_ENERGY - .byte 0 @ power - .byte TYPE_NORMAL - .byte 0 @ accuracy - .byte 30 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ BIDE - .byte EFFECT_BIDE - .byte 1 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ METRONOME - .byte EFFECT_METRONOME - .byte 0 @ power - .byte TYPE_NORMAL - .byte 0 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_SPECIAL - .byte 0 @ priority - .4byte 0 @ misc. flags - -@ MIRROR_MOVE - .byte EFFECT_MIRROR_MOVE - .byte 0 @ power - .byte TYPE_FLYING - .byte 0 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_SPECIAL - .byte 0 @ priority - .4byte 0 @ misc. flags - -@ SELF_DESTRUCT - .byte EFFECT_EXPLOSION - .byte 200 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_ALL_EXCEPT_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ EGG_BOMB - .byte EFFECT_HIT - .byte 100 @ power - .byte TYPE_NORMAL - .byte 75 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ LICK - .byte EFFECT_PARALYZE_HIT - .byte 20 @ power - .byte TYPE_GHOST - .byte 100 @ accuracy - .byte 30 @ PP - .byte 30 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ SMOG - .byte EFFECT_POISON_HIT - .byte 20 @ power - .byte TYPE_POISON - .byte 70 @ accuracy - .byte 20 @ PP - .byte 40 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ SLUDGE - .byte EFFECT_POISON_HIT - .byte 65 @ power - .byte TYPE_POISON - .byte 100 @ accuracy - .byte 20 @ PP - .byte 30 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ BONE_CLUB - .byte EFFECT_FLINCH_HIT - .byte 65 @ power - .byte TYPE_GROUND - .byte 85 @ accuracy - .byte 20 @ PP - .byte 10 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ FIRE_BLAST - .byte EFFECT_BURN_HIT - .byte 120 @ power - .byte TYPE_FIRE - .byte 85 @ accuracy - .byte 5 @ PP - .byte 10 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ WATERFALL - .byte EFFECT_HIT - .byte 80 @ power - .byte TYPE_WATER - .byte 100 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ CLAMP - .byte EFFECT_TRAP - .byte 35 @ power - .byte TYPE_WATER - .byte 75 @ accuracy - .byte 10 @ PP - .byte 100 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ SWIFT - .byte EFFECT_ALWAYS_HIT - .byte 60 @ power - .byte TYPE_NORMAL - .byte 0 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_BOTH_ENEMIES - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ SKULL_BASH - .byte EFFECT_SKULL_BASH - .byte 100 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ SPIKE_CANNON - .byte EFFECT_MULTI_HIT - .byte 20 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ CONSTRICT - .byte EFFECT_SPEED_DOWN_HIT - .byte 10 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 35 @ PP - .byte 10 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ AMNESIA - .byte EFFECT_SPECIAL_DEFENSE_UP_2 - .byte 0 @ power - .byte TYPE_PSYCHIC - .byte 0 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ KINESIS - .byte EFFECT_ACCURACY_DOWN - .byte 0 @ power - .byte TYPE_PSYCHIC - .byte 80 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ SOFT_BOILED - .byte EFFECT_SOFTBOILED - .byte 0 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_SNATCH @ misc. flags - -@ HI_JUMP_KICK - .byte EFFECT_RECOIL_IF_MISS - .byte 85 @ power - .byte TYPE_FIGHTING - .byte 90 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ GLARE - .byte EFFECT_PARALYZE - .byte 0 @ power - .byte TYPE_NORMAL - .byte 75 @ accuracy - .byte 30 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ DREAM_EATER - .byte EFFECT_DREAM_EATER - .byte 100 @ power - .byte TYPE_PSYCHIC - .byte 100 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ POISON_GAS - .byte EFFECT_POISON - .byte 0 @ power - .byte TYPE_POISON - .byte 55 @ accuracy - .byte 40 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ BARRAGE - .byte EFFECT_MULTI_HIT - .byte 15 @ power - .byte TYPE_NORMAL - .byte 85 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ LEECH_LIFE - .byte EFFECT_ABSORB - .byte 20 @ power - .byte TYPE_BUG - .byte 100 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ LOVELY_KISS - .byte EFFECT_SLEEP - .byte 0 @ power - .byte TYPE_NORMAL - .byte 75 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ SKY_ATTACK - .byte EFFECT_SKY_ATTACK - .byte 140 @ power - .byte TYPE_FLYING - .byte 90 @ accuracy - .byte 5 @ PP - .byte 30 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ TRANSFORM - .byte EFFECT_TRANSFORM - .byte 0 @ power - .byte TYPE_NORMAL - .byte 0 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte 0 @ misc. flags - -@ BUBBLE - .byte EFFECT_SPEED_DOWN_HIT - .byte 20 @ power - .byte TYPE_WATER - .byte 100 @ accuracy - .byte 30 @ PP - .byte 10 @ secondary effect chance - .byte F_TARGET_BOTH_ENEMIES - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ DIZZY_PUNCH - .byte EFFECT_CONFUSE_HIT - .byte 70 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 10 @ PP - .byte 20 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ SPORE - .byte EFFECT_SLEEP - .byte 0 @ power - .byte TYPE_GRASS - .byte 100 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ FLASH - .byte EFFECT_ACCURACY_DOWN - .byte 0 @ power - .byte TYPE_NORMAL - .byte 70 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ PSYWAVE - .byte EFFECT_PSYWAVE - .byte 1 @ power - .byte TYPE_PSYCHIC - .byte 80 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ SPLASH - .byte EFFECT_SPLASH - .byte 0 @ power - .byte TYPE_NORMAL - .byte 0 @ accuracy - .byte 40 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte 0 @ misc. flags - -@ ACID_ARMOR - .byte EFFECT_DEFENSE_UP_2 - .byte 0 @ power - .byte TYPE_POISON - .byte 0 @ accuracy - .byte 40 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ CRABHAMMER - .byte EFFECT_HIGH_CRITICAL - .byte 90 @ power - .byte TYPE_WATER - .byte 85 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ EXPLOSION - .byte EFFECT_EXPLOSION - .byte 250 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_ALL_EXCEPT_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ FURY_SWIPES - .byte EFFECT_MULTI_HIT - .byte 18 @ power - .byte TYPE_NORMAL - .byte 80 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ BONEMERANG - .byte EFFECT_DOUBLE_HIT - .byte 50 @ power - .byte TYPE_GROUND - .byte 90 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ REST - .byte EFFECT_REST - .byte 0 @ power - .byte TYPE_PSYCHIC - .byte 0 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ ROCK_SLIDE - .byte EFFECT_FLINCH_HIT - .byte 75 @ power - .byte TYPE_ROCK - .byte 90 @ accuracy - .byte 10 @ PP - .byte 30 @ secondary effect chance - .byte F_TARGET_BOTH_ENEMIES - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ HYPER_FANG - .byte EFFECT_FLINCH_HIT - .byte 80 @ power - .byte TYPE_NORMAL - .byte 90 @ accuracy - .byte 15 @ PP - .byte 10 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ SHARPEN - .byte EFFECT_ATTACK_UP - .byte 0 @ power - .byte TYPE_NORMAL - .byte 0 @ accuracy - .byte 30 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ CONVERSION - .byte EFFECT_CONVERSION - .byte 0 @ power - .byte TYPE_NORMAL - .byte 0 @ accuracy - .byte 30 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte 0 @ misc. flags - -@ TRI_ATTACK - .byte EFFECT_TRI_ATTACK - .byte 80 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 10 @ PP - .byte 20 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ SUPER_FANG - .byte EFFECT_SUPER_FANG - .byte 1 @ power - .byte TYPE_NORMAL - .byte 90 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ SLASH - .byte EFFECT_HIGH_CRITICAL - .byte 70 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ SUBSTITUTE - .byte EFFECT_SUBSTITUTE - .byte 0 @ power - .byte TYPE_NORMAL - .byte 0 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ STRUGGLE - .byte EFFECT_RECOIL - .byte 50 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 1 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ SKETCH - .byte EFFECT_SKETCH - .byte 0 @ power - .byte TYPE_NORMAL - .byte 0 @ accuracy - .byte 1 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte 0 @ misc. flags - -@ TRIPLE_KICK - .byte EFFECT_TRIPLE_KICK - .byte 10 @ power - .byte TYPE_FIGHTING - .byte 90 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ THIEF - .byte EFFECT_THIEF - .byte 40 @ power - .byte TYPE_DARK - .byte 100 @ accuracy - .byte 10 @ PP - .byte 100 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ SPIDER_WEB - .byte EFFECT_MEAN_LOOK - .byte 0 @ power - .byte TYPE_BUG - .byte 100 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ MIND_READER - .byte EFFECT_LOCK_ON - .byte 0 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ NIGHTMARE - .byte EFFECT_NIGHTMARE - .byte 0 @ power - .byte TYPE_GHOST - .byte 100 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ FLAME_WHEEL - .byte EFFECT_THAW_HIT - .byte 60 @ power - .byte TYPE_FIRE - .byte 100 @ accuracy - .byte 25 @ PP - .byte 10 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ SNORE - .byte EFFECT_SNORE - .byte 40 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 15 @ PP - .byte 30 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ CURSE - .byte EFFECT_CURSE - .byte 0 @ power - .byte TYPE_MYSTERY - .byte 0 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte 0 @ misc. flags - -@ FLAIL - .byte EFFECT_FLAIL - .byte 1 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ CONVERSION_2 - .byte EFFECT_CONVERSION_2 - .byte 0 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 30 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte 0 @ misc. flags - -@ AEROBLAST - .byte EFFECT_HIGH_CRITICAL - .byte 100 @ power - .byte TYPE_FLYING - .byte 95 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ COTTON_SPORE - .byte EFFECT_SPEED_DOWN_2 - .byte 0 @ power - .byte TYPE_GRASS - .byte 85 @ accuracy - .byte 40 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ REVERSAL - .byte EFFECT_FLAIL - .byte 1 @ power - .byte TYPE_FIGHTING - .byte 100 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ SPITE - .byte EFFECT_SPITE - .byte 0 @ power - .byte TYPE_GHOST - .byte 100 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ POWDER_SNOW - .byte EFFECT_FREEZE_HIT - .byte 40 @ power - .byte TYPE_ICE - .byte 100 @ accuracy - .byte 25 @ PP - .byte 10 @ secondary effect chance - .byte F_TARGET_BOTH_ENEMIES - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ PROTECT - .byte EFFECT_PROTECT - .byte 0 @ power - .byte TYPE_NORMAL - .byte 0 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 3 @ priority - .4byte 0 @ misc. flags - -@ MACH_PUNCH - .byte EFFECT_QUICK_ATTACK - .byte 40 @ power - .byte TYPE_FIGHTING - .byte 100 @ accuracy - .byte 30 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 1 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ SCARY_FACE - .byte EFFECT_SPEED_DOWN_2 - .byte 0 @ power - .byte TYPE_NORMAL - .byte 90 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ FAINT_ATTACK - .byte EFFECT_ALWAYS_HIT - .byte 60 @ power - .byte TYPE_DARK - .byte 0 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ SWEET_KISS - .byte EFFECT_CONFUSE - .byte 0 @ power - .byte TYPE_NORMAL - .byte 75 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ BELLY_DRUM - .byte EFFECT_BELLY_DRUM - .byte 0 @ power - .byte TYPE_NORMAL - .byte 0 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ SLUDGE_BOMB - .byte EFFECT_POISON_HIT - .byte 90 @ power - .byte TYPE_POISON - .byte 100 @ accuracy - .byte 10 @ PP - .byte 30 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ MUD_SLAP - .byte EFFECT_ACCURACY_DOWN_HIT - .byte 20 @ power - .byte TYPE_GROUND - .byte 100 @ accuracy - .byte 10 @ PP - .byte 100 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ OCTAZOOKA - .byte EFFECT_ACCURACY_DOWN_HIT - .byte 65 @ power - .byte TYPE_WATER - .byte 85 @ accuracy - .byte 10 @ PP - .byte 50 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ SPIKES - .byte EFFECT_SPIKES - .byte 0 @ power - .byte TYPE_GROUND - .byte 0 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_ENEMY_SIDE - .byte 0 @ priority - .4byte 0 @ misc. flags - -@ ZAP_CANNON - .byte EFFECT_PARALYZE_HIT - .byte 100 @ power - .byte TYPE_ELECTRIC - .byte 50 @ accuracy - .byte 5 @ PP - .byte 100 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ FORESIGHT - .byte EFFECT_FORESIGHT - .byte 0 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 40 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ DESTINY_BOND - .byte EFFECT_DESTINY_BOND - .byte 0 @ power - .byte TYPE_GHOST - .byte 0 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte 0 @ misc. flags - -@ PERISH_SONG - .byte EFFECT_PERISH_SONG - .byte 0 @ power - .byte TYPE_NORMAL - .byte 0 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte 0 @ misc. flags - -@ ICY_WIND - .byte EFFECT_SPEED_DOWN_HIT - .byte 55 @ power - .byte TYPE_ICE - .byte 95 @ accuracy - .byte 15 @ PP - .byte 100 @ secondary effect chance - .byte F_TARGET_BOTH_ENEMIES - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ DETECT - .byte EFFECT_PROTECT - .byte 0 @ power - .byte TYPE_FIGHTING - .byte 0 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 3 @ priority - .4byte 0 @ misc. flags - -@ BONE_RUSH - .byte EFFECT_MULTI_HIT - .byte 25 @ power - .byte TYPE_GROUND - .byte 80 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ LOCK_ON - .byte EFFECT_LOCK_ON - .byte 0 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ OUTRAGE - .byte EFFECT_RAMPAGE - .byte 90 @ power - .byte TYPE_DRAGON - .byte 100 @ accuracy - .byte 15 @ PP - .byte 100 @ secondary effect chance - .byte F_TARGET_RANDOM - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ SANDSTORM - .byte EFFECT_SANDSTORM - .byte 0 @ power - .byte TYPE_ROCK - .byte 0 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte 0 @ misc. flags - -@ GIGA_DRAIN - .byte EFFECT_ABSORB - .byte 60 @ power - .byte TYPE_GRASS - .byte 100 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ ENDURE - .byte EFFECT_ENDURE - .byte 0 @ power - .byte TYPE_NORMAL - .byte 0 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 3 @ priority - .4byte 0 @ misc. flags - -@ CHARM - .byte EFFECT_ATTACK_DOWN_2 - .byte 0 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ ROLLOUT - .byte EFFECT_ROLLOUT - .byte 30 @ power - .byte TYPE_ROCK - .byte 90 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ FALSE_SWIPE - .byte EFFECT_FALSE_SWIPE - .byte 40 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 40 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ SWAGGER - .byte EFFECT_SWAGGER - .byte 0 @ power - .byte TYPE_NORMAL - .byte 90 @ accuracy - .byte 15 @ PP - .byte 100 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ MILK_DRINK - .byte EFFECT_SOFTBOILED - .byte 0 @ power - .byte TYPE_NORMAL - .byte 0 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH | F_AFFECTED_BY_PROTECT @ misc. flags - -@ SPARK - .byte EFFECT_PARALYZE_HIT - .byte 65 @ power - .byte TYPE_ELECTRIC - .byte 100 @ accuracy - .byte 20 @ PP - .byte 30 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ FURY_CUTTER - .byte EFFECT_FURY_CUTTER - .byte 10 @ power - .byte TYPE_BUG - .byte 95 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ STEEL_WING - .byte EFFECT_DEFENSE_UP_HIT - .byte 70 @ power - .byte TYPE_STEEL - .byte 90 @ accuracy - .byte 25 @ PP - .byte 10 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ MEAN_LOOK - .byte EFFECT_MEAN_LOOK - .byte 0 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ ATTRACT - .byte EFFECT_ATTRACT - .byte 0 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ SLEEP_TALK - .byte EFFECT_SLEEP_TALK - .byte 0 @ power - .byte TYPE_NORMAL - .byte 0 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_SPECIAL - .byte 0 @ priority - .4byte 0 @ misc. flags - -@ HEAL_BELL - .byte EFFECT_HEAL_BELL - .byte 0 @ power - .byte TYPE_NORMAL - .byte 0 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ RETURN - .byte EFFECT_RETURN - .byte 1 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ PRESENT - .byte EFFECT_PRESENT - .byte 1 @ power - .byte TYPE_NORMAL - .byte 90 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ FRUSTRATION - .byte EFFECT_FRUSTRATION - .byte 1 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ SAFEGUARD - .byte EFFECT_SAFEGUARD - .byte 0 @ power - .byte TYPE_NORMAL - .byte 0 @ accuracy - .byte 25 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ PAIN_SPLIT - .byte EFFECT_PAIN_SPLIT - .byte 0 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ SACRED_FIRE - .byte EFFECT_THAW_HIT - .byte 100 @ power - .byte TYPE_FIRE - .byte 95 @ accuracy - .byte 5 @ PP - .byte 50 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ MAGNITUDE - .byte EFFECT_MAGNITUDE - .byte 1 @ power - .byte TYPE_GROUND - .byte 100 @ accuracy - .byte 30 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_ALL_EXCEPT_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ DYNAMIC_PUNCH - .byte EFFECT_CONFUSE_HIT - .byte 100 @ power - .byte TYPE_FIGHTING - .byte 50 @ accuracy - .byte 5 @ PP - .byte 100 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ MEGAHORN - .byte EFFECT_HIT - .byte 120 @ power - .byte TYPE_BUG - .byte 85 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ DRAGON_BREATH - .byte EFFECT_PARALYZE_HIT - .byte 60 @ power - .byte TYPE_DRAGON - .byte 100 @ accuracy - .byte 20 @ PP - .byte 30 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ BATON_PASS - .byte EFFECT_BATON_PASS - .byte 0 @ power - .byte TYPE_NORMAL - .byte 0 @ accuracy - .byte 40 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte 0 @ misc. flags - -@ ENCORE - .byte EFFECT_ENCORE - .byte 0 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ PURSUIT - .byte EFFECT_PURSUIT - .byte 40 @ power - .byte TYPE_DARK - .byte 100 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ RAPID_SPIN - .byte EFFECT_RAPID_SPIN - .byte 20 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 40 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ SWEET_SCENT - .byte EFFECT_EVASION_DOWN - .byte 0 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_BOTH_ENEMIES - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ IRON_TAIL - .byte EFFECT_DEFENSE_DOWN_HIT - .byte 100 @ power - .byte TYPE_STEEL - .byte 75 @ accuracy - .byte 15 @ PP - .byte 30 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ METAL_CLAW - .byte EFFECT_ATTACK_UP_HIT - .byte 50 @ power - .byte TYPE_STEEL - .byte 95 @ accuracy - .byte 35 @ PP - .byte 10 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ VITAL_THROW - .byte EFFECT_VITAL_THROW - .byte 70 @ power - .byte TYPE_FIGHTING - .byte 100 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte -1 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ MORNING_SUN - .byte EFFECT_MORNING_SUN - .byte 0 @ power - .byte TYPE_NORMAL - .byte 0 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ SYNTHESIS - .byte EFFECT_SYNTHESIS - .byte 0 @ power - .byte TYPE_GRASS - .byte 0 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ MOONLIGHT - .byte EFFECT_MOONLIGHT - .byte 0 @ power - .byte TYPE_NORMAL - .byte 0 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ HIDDEN_POWER - .byte EFFECT_HIDDEN_POWER - .byte 1 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ CROSS_CHOP - .byte EFFECT_HIGH_CRITICAL - .byte 100 @ power - .byte TYPE_FIGHTING - .byte 80 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ TWISTER - .byte EFFECT_TWISTER - .byte 40 @ power - .byte TYPE_DRAGON - .byte 100 @ accuracy - .byte 20 @ PP - .byte 20 @ secondary effect chance - .byte F_TARGET_BOTH_ENEMIES - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ RAIN_DANCE - .byte EFFECT_RAIN_DANCE - .byte 0 @ power - .byte TYPE_WATER - .byte 0 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte 0 @ misc. flags - -@ SUNNY_DAY - .byte EFFECT_SUNNY_DAY - .byte 0 @ power - .byte TYPE_FIRE - .byte 0 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte 0 @ misc. flags - -@ CRUNCH - .byte EFFECT_SPECIAL_DEFENSE_DOWN_HIT - .byte 80 @ power - .byte TYPE_DARK - .byte 100 @ accuracy - .byte 15 @ PP - .byte 20 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ MIRROR_COAT - .byte EFFECT_MIRROR_COAT - .byte 1 @ power - .byte TYPE_PSYCHIC - .byte 100 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_SPECIAL - .byte -5 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE @ misc. flags - -@ PSYCH_UP - .byte EFFECT_PSYCH_UP - .byte 0 @ power - .byte TYPE_NORMAL - .byte 0 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ EXTREME_SPEED - .byte EFFECT_QUICK_ATTACK - .byte 80 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 1 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ ANCIENT_POWER - .byte EFFECT_ALL_STATS_UP_HIT - .byte 60 @ power - .byte TYPE_ROCK - .byte 100 @ accuracy - .byte 5 @ PP - .byte 10 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ SHADOW_BALL - .byte EFFECT_SPECIAL_DEFENSE_DOWN_HIT - .byte 80 @ power - .byte TYPE_GHOST - .byte 100 @ accuracy - .byte 15 @ PP - .byte 20 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ FUTURE_SIGHT - .byte EFFECT_FUTURE_SIGHT - .byte 80 @ power - .byte TYPE_PSYCHIC - .byte 90 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte 0 @ misc. flags - -@ ROCK_SMASH - .byte EFFECT_DEFENSE_DOWN_HIT - .byte 20 @ power - .byte TYPE_FIGHTING - .byte 100 @ accuracy - .byte 15 @ PP - .byte 50 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ WHIRLPOOL - .byte EFFECT_TRAP - .byte 15 @ power - .byte TYPE_WATER - .byte 70 @ accuracy - .byte 15 @ PP - .byte 100 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ BEAT_UP - .byte EFFECT_BEAT_UP - .byte 10 @ power - .byte TYPE_DARK - .byte 100 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ FAKE_OUT - .byte EFFECT_FAKE_OUT - .byte 40 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 1 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ UPROAR - .byte EFFECT_UPROAR - .byte 50 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 10 @ PP - .byte 100 @ secondary effect chance - .byte F_TARGET_RANDOM - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ STOCKPILE - .byte EFFECT_STOCKPILE - .byte 0 @ power - .byte TYPE_NORMAL - .byte 0 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ SPIT_UP - .byte EFFECT_SPIT_UP - .byte 100 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_AFFECTED_BY_PROTECT @ misc. flags - -@ SWALLOW - .byte EFFECT_SWALLOW - .byte 0 @ power - .byte TYPE_NORMAL - .byte 0 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ HEAT_WAVE - .byte EFFECT_BURN_HIT - .byte 100 @ power - .byte TYPE_FIRE - .byte 90 @ accuracy - .byte 10 @ PP - .byte 10 @ secondary effect chance - .byte F_TARGET_BOTH_ENEMIES - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ HAIL - .byte EFFECT_HAIL - .byte 0 @ power - .byte TYPE_ICE - .byte 0 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_PROTECT @ misc. flags - -@ TORMENT - .byte EFFECT_TORMENT - .byte 0 @ power - .byte TYPE_DARK - .byte 100 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ FLATTER - .byte EFFECT_FLATTER - .byte 0 @ power - .byte TYPE_DARK - .byte 100 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ WILL_O_WISP - .byte EFFECT_WILL_O_WISP - .byte 0 @ power - .byte TYPE_FIRE - .byte 75 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ MEMENTO - .byte EFFECT_MEMENTO - .byte 0 @ power - .byte TYPE_DARK - .byte 100 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ FACADE - .byte EFFECT_FACADE - .byte 70 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ FOCUS_PUNCH - .byte EFFECT_FOCUS_PUNCH - .byte 150 @ power - .byte TYPE_FIGHTING - .byte 100 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte -3 @ priority - .4byte F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ SMELLING_SALT - .byte EFFECT_SMELLINGSALT - .byte 60 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ FOLLOW_ME - .byte EFFECT_FOLLOW_ME - .byte 0 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 3 @ priority - .4byte 0 @ misc. flags - -@ NATURE_POWER - .byte EFFECT_NATURE_POWER - .byte 0 @ power - .byte TYPE_NORMAL - .byte 95 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_SPECIAL - .byte 0 @ priority - .4byte 0 @ misc. flags - -@ CHARGE - .byte EFFECT_CHARGE - .byte 0 @ power - .byte TYPE_ELECTRIC - .byte 100 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ TAUNT - .byte EFFECT_TAUNT - .byte 0 @ power - .byte TYPE_DARK - .byte 100 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_PROTECT @ misc. flags - -@ HELPING_HAND - .byte EFFECT_HELPING_HAND - .byte 0 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 5 @ priority - .4byte 0 @ misc. flags - -@ TRICK - .byte EFFECT_TRICK - .byte 0 @ power - .byte TYPE_PSYCHIC - .byte 100 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ ROLE_PLAY - .byte EFFECT_ROLE_PLAY - .byte 0 @ power - .byte TYPE_PSYCHIC - .byte 100 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte 0 @ misc. flags - -@ WISH - .byte EFFECT_WISH - .byte 0 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_PROTECT @ misc. flags - -@ ASSIST - .byte EFFECT_ASSIST - .byte 0 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_SPECIAL - .byte 0 @ priority - .4byte 0 @ misc. flags - -@ INGRAIN - .byte EFFECT_INGRAIN - .byte 0 @ power - .byte TYPE_GRASS - .byte 100 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ SUPERPOWER - .byte EFFECT_SUPERPOWER - .byte 120 @ power - .byte TYPE_FIGHTING - .byte 100 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ MAGIC_COAT - .byte EFFECT_MAGIC_COAT - .byte 0 @ power - .byte TYPE_PSYCHIC - .byte 100 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_SPECIAL - .byte 4 @ priority - .4byte 0 @ misc. flags - -@ RECYCLE - .byte EFFECT_RECYCLE - .byte 0 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte 0 @ misc. flags - -@ REVENGE - .byte EFFECT_REVENGE - .byte 60 @ power - .byte TYPE_FIGHTING - .byte 100 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte -4 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ BRICK_BREAK - .byte EFFECT_BRICK_BREAK - .byte 75 @ power - .byte TYPE_FIGHTING - .byte 100 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ YAWN - .byte EFFECT_YAWN - .byte 0 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ KNOCK_OFF - .byte EFFECT_KNOCK_OFF - .byte 20 @ power - .byte TYPE_DARK - .byte 100 @ accuracy - .byte 20 @ PP - .byte 100 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ ENDEAVOR - .byte EFFECT_ENDEAVOR - .byte 1 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ ERUPTION - .byte EFFECT_ERUPTION - .byte 150 @ power - .byte TYPE_FIRE - .byte 100 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_BOTH_ENEMIES - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ SKILL_SWAP - .byte EFFECT_SKILL_SWAP - .byte 0 @ power - .byte TYPE_PSYCHIC - .byte 100 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ IMPRISON - .byte EFFECT_IMPRISON - .byte 0 @ power - .byte TYPE_PSYCHIC - .byte 100 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_PROTECT @ misc. flags - -@ REFRESH - .byte EFFECT_REFRESH - .byte 0 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ GRUDGE - .byte EFFECT_GRUDGE - .byte 0 @ power - .byte TYPE_GHOST - .byte 100 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ SNATCH - .byte EFFECT_SNATCH - .byte 0 @ power - .byte TYPE_DARK - .byte 100 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_SPECIAL - .byte 4 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE @ misc. flags - -@ SECRET_POWER - .byte EFFECT_SECRET_POWER - .byte 70 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 20 @ PP - .byte 30 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ DIVE - .byte EFFECT_FLY - .byte 60 @ power - .byte TYPE_WATER - .byte 100 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ ARM_THRUST - .byte EFFECT_MULTI_HIT - .byte 15 @ power - .byte TYPE_FIGHTING - .byte 100 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ CAMOUFLAGE - .byte EFFECT_CAMOUFLAGE - .byte 0 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ TAIL_GLOW - .byte EFFECT_SPECIAL_ATTACK_UP_2 - .byte 0 @ power - .byte TYPE_BUG - .byte 100 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ LUSTER_PURGE - .byte EFFECT_SPECIAL_DEFENSE_DOWN_HIT - .byte 70 @ power - .byte TYPE_PSYCHIC - .byte 100 @ accuracy - .byte 5 @ PP - .byte 50 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ MIST_BALL - .byte EFFECT_SPECIAL_ATTACK_DOWN_HIT - .byte 70 @ power - .byte TYPE_PSYCHIC - .byte 100 @ accuracy - .byte 5 @ PP - .byte 50 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ FEATHER_DANCE - .byte EFFECT_ATTACK_DOWN_2 - .byte 0 @ power - .byte TYPE_FLYING - .byte 100 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ TEETER_DANCE - .byte EFFECT_TEETER_DANCE - .byte 0 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_ALL_EXCEPT_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_PROTECT @ misc. flags - -@ BLAZE_KICK - .byte EFFECT_BLAZE_KICK - .byte 85 @ power - .byte TYPE_FIRE - .byte 90 @ accuracy - .byte 10 @ PP - .byte 10 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ MUD_SPORT - .byte EFFECT_MUD_SPORT - .byte 0 @ power - .byte TYPE_GROUND - .byte 100 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte 0 @ misc. flags - -@ ICE_BALL - .byte EFFECT_ROLLOUT - .byte 30 @ power - .byte TYPE_ICE - .byte 90 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ NEEDLE_ARM - .byte EFFECT_FLINCH_HIT_2 - .byte 60 @ power - .byte TYPE_GRASS - .byte 100 @ accuracy - .byte 15 @ PP - .byte 30 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ SLACK_OFF - .byte EFFECT_RESTORE_HP - .byte 0 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ HYPER_VOICE - .byte EFFECT_HIT - .byte 90 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_BOTH_ENEMIES - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ POISON_FANG - .byte EFFECT_POISON_FANG - .byte 50 @ power - .byte TYPE_POISON - .byte 100 @ accuracy - .byte 15 @ PP - .byte 30 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ CRUSH_CLAW - .byte EFFECT_DEFENSE_DOWN_HIT - .byte 75 @ power - .byte TYPE_NORMAL - .byte 95 @ accuracy - .byte 10 @ PP - .byte 50 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ BLAST_BURN - .byte EFFECT_RECHARGE - .byte 150 @ power - .byte TYPE_FIRE - .byte 90 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ HYDRO_CANNON - .byte EFFECT_RECHARGE - .byte 150 @ power - .byte TYPE_WATER - .byte 90 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ METEOR_MASH - .byte EFFECT_ATTACK_UP_HIT - .byte 100 @ power - .byte TYPE_STEEL - .byte 85 @ accuracy - .byte 10 @ PP - .byte 20 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ ASTONISH - .byte EFFECT_FLINCH_HIT_2 - .byte 30 @ power - .byte TYPE_GHOST - .byte 100 @ accuracy - .byte 15 @ PP - .byte 30 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ WEATHER_BALL - .byte EFFECT_WEATHER_BALL - .byte 50 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ AROMATHERAPY - .byte EFFECT_HEAL_BELL - .byte 0 @ power - .byte TYPE_GRASS - .byte 0 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ FAKE_TEARS - .byte EFFECT_SPECIAL_DEFENSE_DOWN_2 - .byte 0 @ power - .byte TYPE_DARK - .byte 100 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ AIR_CUTTER - .byte EFFECT_HIGH_CRITICAL - .byte 55 @ power - .byte TYPE_FLYING - .byte 95 @ accuracy - .byte 25 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_BOTH_ENEMIES - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ OVERHEAT - .byte EFFECT_OVERHEAT - .byte 140 @ power - .byte TYPE_FIRE - .byte 90 @ accuracy - .byte 5 @ PP - .byte 100 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ ODOR_SLEUTH - .byte EFFECT_FORESIGHT - .byte 0 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 40 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ ROCK_TOMB - .byte EFFECT_SPEED_DOWN_HIT - .byte 50 @ power - .byte TYPE_ROCK - .byte 80 @ accuracy - .byte 10 @ PP - .byte 100 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ SILVER_WIND - .byte EFFECT_ALL_STATS_UP_HIT - .byte 60 @ power - .byte TYPE_BUG - .byte 100 @ accuracy - .byte 5 @ PP - .byte 10 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ METAL_SOUND - .byte EFFECT_SPECIAL_DEFENSE_DOWN_2 - .byte 0 @ power - .byte TYPE_STEEL - .byte 85 @ accuracy - .byte 40 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ GRASS_WHISTLE - .byte EFFECT_SLEEP - .byte 0 @ power - .byte TYPE_GRASS - .byte 55 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ TICKLE - .byte EFFECT_TICKLE - .byte 0 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ COSMIC_POWER - .byte EFFECT_COSMIC_POWER - .byte 0 @ power - .byte TYPE_PSYCHIC - .byte 0 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ WATER_SPOUT - .byte EFFECT_ERUPTION - .byte 150 @ power - .byte TYPE_WATER - .byte 100 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_BOTH_ENEMIES - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ SIGNAL_BEAM - .byte EFFECT_CONFUSE_HIT - .byte 75 @ power - .byte TYPE_BUG - .byte 100 @ accuracy - .byte 15 @ PP - .byte 10 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ SHADOW_PUNCH - .byte EFFECT_ALWAYS_HIT - .byte 60 @ power - .byte TYPE_GHOST - .byte 0 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ EXTRASENSORY - .byte EFFECT_FLINCH_HIT_2 - .byte 80 @ power - .byte TYPE_PSYCHIC - .byte 100 @ accuracy - .byte 30 @ PP - .byte 10 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ SKY_UPPERCUT - .byte EFFECT_SKY_UPPERCUT - .byte 85 @ power - .byte TYPE_FIGHTING - .byte 90 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ SAND_TOMB - .byte EFFECT_TRAP - .byte 15 @ power - .byte TYPE_GROUND - .byte 70 @ accuracy - .byte 15 @ PP - .byte 100 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ SHEER_COLD - .byte EFFECT_OHKO - .byte 1 @ power - .byte TYPE_ICE - .byte 30 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ MUDDY_WATER - .byte EFFECT_ACCURACY_DOWN_HIT - .byte 95 @ power - .byte TYPE_WATER - .byte 85 @ accuracy - .byte 10 @ PP - .byte 30 @ secondary effect chance - .byte F_TARGET_BOTH_ENEMIES - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ BULLET_SEED - .byte EFFECT_MULTI_HIT - .byte 10 @ power - .byte TYPE_GRASS - .byte 100 @ accuracy - .byte 30 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ AERIAL_ACE - .byte EFFECT_ALWAYS_HIT - .byte 60 @ power - .byte TYPE_FLYING - .byte 0 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ ICICLE_SPEAR - .byte EFFECT_MULTI_HIT - .byte 10 @ power - .byte TYPE_ICE - .byte 100 @ accuracy - .byte 30 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ IRON_DEFENSE - .byte EFFECT_DEFENSE_UP_2 - .byte 0 @ power - .byte TYPE_STEEL - .byte 0 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ BLOCK - .byte EFFECT_MEAN_LOOK - .byte 0 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags - -@ HOWL - .byte EFFECT_ATTACK_UP - .byte 0 @ power - .byte TYPE_NORMAL - .byte 0 @ accuracy - .byte 40 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ DRAGON_CLAW - .byte EFFECT_HIT - .byte 80 @ power - .byte TYPE_DRAGON - .byte 100 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ FRENZY_PLANT - .byte EFFECT_RECHARGE - .byte 150 @ power - .byte TYPE_GRASS - .byte 90 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ BULK_UP - .byte EFFECT_BULK_UP - .byte 0 @ power - .byte TYPE_FIGHTING - .byte 0 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ BOUNCE - .byte EFFECT_FLY - .byte 85 @ power - .byte TYPE_FLYING - .byte 85 @ accuracy - .byte 5 @ PP - .byte 30 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ MUD_SHOT - .byte EFFECT_SPEED_DOWN_HIT - .byte 55 @ power - .byte TYPE_GROUND - .byte 95 @ accuracy - .byte 15 @ PP - .byte 100 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ POISON_TAIL - .byte EFFECT_POISON_TAIL - .byte 50 @ power - .byte TYPE_POISON - .byte 100 @ accuracy - .byte 25 @ PP - .byte 10 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ COVET - .byte EFFECT_THIEF - .byte 40 @ power - .byte TYPE_NORMAL - .byte 100 @ accuracy - .byte 40 @ PP - .byte 100 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ VOLT_TACKLE - .byte EFFECT_DOUBLE_EDGE - .byte 120 @ power - .byte TYPE_ELECTRIC - .byte 100 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ MAGICAL_LEAF - .byte EFFECT_ALWAYS_HIT - .byte 60 @ power - .byte TYPE_GRASS - .byte 0 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ WATER_SPORT - .byte EFFECT_WATER_SPORT - .byte 0 @ power - .byte TYPE_WATER - .byte 100 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte 0 @ misc. flags - -@ CALM_MIND - .byte EFFECT_CALM_MIND - .byte 0 @ power - .byte TYPE_PSYCHIC - .byte 0 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ LEAF_BLADE - .byte EFFECT_HIGH_CRITICAL - .byte 70 @ power - .byte TYPE_GRASS - .byte 100 @ accuracy - .byte 15 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags - -@ DRAGON_DANCE - .byte EFFECT_DRAGON_DANCE - .byte 0 @ power - .byte TYPE_DRAGON - .byte 0 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte F_TARGET_USER - .byte 0 @ priority - .4byte F_AFFECTED_BY_SNATCH @ misc. flags - -@ ROCK_BLAST - .byte EFFECT_MULTI_HIT - .byte 25 @ power - .byte TYPE_ROCK - .byte 80 @ accuracy - .byte 10 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ SHOCK_WAVE - .byte EFFECT_ALWAYS_HIT - .byte 60 @ power - .byte TYPE_ELECTRIC - .byte 0 @ accuracy - .byte 20 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ WATER_PULSE - .byte EFFECT_CONFUSE_HIT - .byte 60 @ power - .byte TYPE_WATER - .byte 100 @ accuracy - .byte 20 @ PP - .byte 20 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags - -@ DOOM_DESIRE - .byte EFFECT_FUTURE_SIGHT - .byte 120 @ power - .byte TYPE_STEEL - .byte 85 @ accuracy - .byte 5 @ PP - .byte 0 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte 0 @ misc. flags - -@ PSYCHO_BOOST - .byte EFFECT_OVERHEAT - .byte 140 @ power - .byte TYPE_PSYCHIC - .byte 90 @ accuracy - .byte 5 @ PP - .byte 100 @ secondary effect chance - .byte TARGET_SELECTED_POKEMON - .byte 0 @ priority - .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags diff --git a/data/battle_moves.s b/data/battle_moves.s new file mode 100644 index 000000000..ea32446d2 --- /dev/null +++ b/data/battle_moves.s @@ -0,0 +1,3911 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .section .rodata + + .align 2 +gBattleMoves:: @ 81FB12C +@ NONE + .byte EFFECT_HIT + .byte 0 @ power + .byte TYPE_NORMAL + .byte 0 @ accuracy + .byte 0 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte 0 @ misc. flags + +@ POUND + .byte EFFECT_HIT + .byte 40 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 35 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ KARATE_CHOP + .byte EFFECT_HIGH_CRITICAL + .byte 50 @ power + .byte TYPE_FIGHTING + .byte 100 @ accuracy + .byte 25 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ DOUBLE_SLAP + .byte EFFECT_MULTI_HIT + .byte 15 @ power + .byte TYPE_NORMAL + .byte 85 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ COMET_PUNCH + .byte EFFECT_MULTI_HIT + .byte 18 @ power + .byte TYPE_NORMAL + .byte 85 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ MEGA_PUNCH + .byte EFFECT_HIT + .byte 80 @ power + .byte TYPE_NORMAL + .byte 85 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ PAY_DAY + .byte EFFECT_PAY_DAY + .byte 40 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 20 @ PP + .byte 100 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ FIRE_PUNCH + .byte EFFECT_BURN_HIT + .byte 75 @ power + .byte TYPE_FIRE + .byte 100 @ accuracy + .byte 15 @ PP + .byte 10 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ ICE_PUNCH + .byte EFFECT_FREEZE_HIT + .byte 75 @ power + .byte TYPE_ICE + .byte 100 @ accuracy + .byte 15 @ PP + .byte 10 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ THUNDER_PUNCH + .byte EFFECT_PARALYZE_HIT + .byte 75 @ power + .byte TYPE_ELECTRIC + .byte 100 @ accuracy + .byte 15 @ PP + .byte 10 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ SCRATCH + .byte EFFECT_HIT + .byte 40 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 35 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ VICE_GRIP + .byte EFFECT_HIT + .byte 55 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 30 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ GUILLOTINE + .byte EFFECT_OHKO + .byte 1 @ power + .byte TYPE_NORMAL + .byte 30 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ RAZOR_WIND + .byte EFFECT_RAZOR_WIND + .byte 80 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_BOTH_ENEMIES + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ SWORDS_DANCE + .byte EFFECT_ATTACK_UP_2 + .byte 0 @ power + .byte TYPE_NORMAL + .byte 0 @ accuracy + .byte 30 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ CUT + .byte EFFECT_HIT + .byte 50 @ power + .byte TYPE_NORMAL + .byte 95 @ accuracy + .byte 30 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ GUST + .byte EFFECT_GUST + .byte 40 @ power + .byte TYPE_FLYING + .byte 100 @ accuracy + .byte 35 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ WING_ATTACK + .byte EFFECT_HIT + .byte 60 @ power + .byte TYPE_FLYING + .byte 100 @ accuracy + .byte 35 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ WHIRLWIND + .byte EFFECT_ROAR + .byte 0 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte -6 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ FLY + .byte EFFECT_FLY + .byte 70 @ power + .byte TYPE_FLYING + .byte 95 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ BIND + .byte EFFECT_TRAP + .byte 15 @ power + .byte TYPE_NORMAL + .byte 75 @ accuracy + .byte 20 @ PP + .byte 100 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ SLAM + .byte EFFECT_HIT + .byte 80 @ power + .byte TYPE_NORMAL + .byte 75 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ VINE_WHIP + .byte EFFECT_HIT + .byte 35 @ power + .byte TYPE_GRASS + .byte 100 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ STOMP + .byte EFFECT_FLINCH_HIT_2 + .byte 65 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 20 @ PP + .byte 30 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ DOUBLE_KICK + .byte EFFECT_DOUBLE_HIT + .byte 30 @ power + .byte TYPE_FIGHTING + .byte 100 @ accuracy + .byte 30 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ MEGA_KICK + .byte EFFECT_HIT + .byte 120 @ power + .byte TYPE_NORMAL + .byte 75 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ JUMP_KICK + .byte EFFECT_RECOIL_IF_MISS + .byte 70 @ power + .byte TYPE_FIGHTING + .byte 95 @ accuracy + .byte 25 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ ROLLING_KICK + .byte EFFECT_FLINCH_HIT + .byte 60 @ power + .byte TYPE_FIGHTING + .byte 85 @ accuracy + .byte 15 @ PP + .byte 30 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ SAND_ATTACK + .byte EFFECT_ACCURACY_DOWN + .byte 0 @ power + .byte TYPE_GROUND + .byte 100 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ HEADBUTT + .byte EFFECT_FLINCH_HIT + .byte 70 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 15 @ PP + .byte 30 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ HORN_ATTACK + .byte EFFECT_HIT + .byte 65 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 25 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ FURY_ATTACK + .byte EFFECT_MULTI_HIT + .byte 15 @ power + .byte TYPE_NORMAL + .byte 85 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ HORN_DRILL + .byte EFFECT_OHKO + .byte 1 @ power + .byte TYPE_NORMAL + .byte 30 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ TACKLE + .byte EFFECT_HIT + .byte 35 @ power + .byte TYPE_NORMAL + .byte 95 @ accuracy + .byte 35 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ BODY_SLAM + .byte EFFECT_PARALYZE_HIT + .byte 85 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 15 @ PP + .byte 30 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ WRAP + .byte EFFECT_TRAP + .byte 15 @ power + .byte TYPE_NORMAL + .byte 85 @ accuracy + .byte 20 @ PP + .byte 100 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ TAKE_DOWN + .byte EFFECT_RECOIL + .byte 90 @ power + .byte TYPE_NORMAL + .byte 85 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ THRASH + .byte EFFECT_RAMPAGE + .byte 90 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 20 @ PP + .byte 100 @ secondary effect chance + .byte F_TARGET_RANDOM + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ DOUBLE_EDGE + .byte EFFECT_DOUBLE_EDGE + .byte 120 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ TAIL_WHIP + .byte EFFECT_DEFENSE_DOWN + .byte 0 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 30 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_BOTH_ENEMIES + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ POISON_STING + .byte EFFECT_POISON_HIT + .byte 15 @ power + .byte TYPE_POISON + .byte 100 @ accuracy + .byte 35 @ PP + .byte 30 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ TWINEEDLE + .byte EFFECT_TWINEEDLE + .byte 25 @ power + .byte TYPE_BUG + .byte 100 @ accuracy + .byte 20 @ PP + .byte 20 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ PIN_MISSILE + .byte EFFECT_MULTI_HIT + .byte 14 @ power + .byte TYPE_BUG + .byte 85 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ LEER + .byte EFFECT_DEFENSE_DOWN + .byte 0 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 30 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_BOTH_ENEMIES + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ BITE + .byte EFFECT_FLINCH_HIT + .byte 60 @ power + .byte TYPE_DARK + .byte 100 @ accuracy + .byte 25 @ PP + .byte 30 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ GROWL + .byte EFFECT_ATTACK_DOWN + .byte 0 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 40 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_BOTH_ENEMIES + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ ROAR + .byte EFFECT_ROAR + .byte 0 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte -6 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ SING + .byte EFFECT_SLEEP + .byte 0 @ power + .byte TYPE_NORMAL + .byte 55 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ SUPERSONIC + .byte EFFECT_CONFUSE + .byte 0 @ power + .byte TYPE_NORMAL + .byte 55 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ SONIC_BOOM + .byte EFFECT_SONICBOOM + .byte 1 @ power + .byte TYPE_NORMAL + .byte 90 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ DISABLE + .byte EFFECT_DISABLE + .byte 0 @ power + .byte TYPE_NORMAL + .byte 55 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ ACID + .byte EFFECT_DEFENSE_DOWN_HIT + .byte 40 @ power + .byte TYPE_POISON + .byte 100 @ accuracy + .byte 30 @ PP + .byte 10 @ secondary effect chance + .byte F_TARGET_BOTH_ENEMIES + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ EMBER + .byte EFFECT_BURN_HIT + .byte 40 @ power + .byte TYPE_FIRE + .byte 100 @ accuracy + .byte 25 @ PP + .byte 10 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ FLAMETHROWER + .byte EFFECT_BURN_HIT + .byte 95 @ power + .byte TYPE_FIRE + .byte 100 @ accuracy + .byte 15 @ PP + .byte 10 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ MIST + .byte EFFECT_MIST + .byte 0 @ power + .byte TYPE_ICE + .byte 0 @ accuracy + .byte 30 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ WATER_GUN + .byte EFFECT_HIT + .byte 40 @ power + .byte TYPE_WATER + .byte 100 @ accuracy + .byte 25 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ HYDRO_PUMP + .byte EFFECT_HIT + .byte 120 @ power + .byte TYPE_WATER + .byte 80 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ SURF + .byte EFFECT_HIT + .byte 95 @ power + .byte TYPE_WATER + .byte 100 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_BOTH_ENEMIES + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ ICE_BEAM + .byte EFFECT_FREEZE_HIT + .byte 95 @ power + .byte TYPE_ICE + .byte 100 @ accuracy + .byte 10 @ PP + .byte 10 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ BLIZZARD + .byte EFFECT_FREEZE_HIT + .byte 120 @ power + .byte TYPE_ICE + .byte 70 @ accuracy + .byte 5 @ PP + .byte 10 @ secondary effect chance + .byte F_TARGET_BOTH_ENEMIES + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ PSYBEAM + .byte EFFECT_CONFUSE_HIT + .byte 65 @ power + .byte TYPE_PSYCHIC + .byte 100 @ accuracy + .byte 20 @ PP + .byte 10 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ BUBBLE_BEAM + .byte EFFECT_SPEED_DOWN_HIT + .byte 65 @ power + .byte TYPE_WATER + .byte 100 @ accuracy + .byte 20 @ PP + .byte 10 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ AURORA_BEAM + .byte EFFECT_ATTACK_DOWN_HIT + .byte 65 @ power + .byte TYPE_ICE + .byte 100 @ accuracy + .byte 20 @ PP + .byte 10 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ HYPER_BEAM + .byte EFFECT_RECHARGE + .byte 150 @ power + .byte TYPE_NORMAL + .byte 90 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ PECK + .byte EFFECT_HIT + .byte 35 @ power + .byte TYPE_FLYING + .byte 100 @ accuracy + .byte 35 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ DRILL_PECK + .byte EFFECT_HIT + .byte 80 @ power + .byte TYPE_FLYING + .byte 100 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ SUBMISSION + .byte EFFECT_RECOIL + .byte 80 @ power + .byte TYPE_FIGHTING + .byte 80 @ accuracy + .byte 25 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ LOW_KICK + .byte EFFECT_LOW_KICK + .byte 1 @ power + .byte TYPE_FIGHTING + .byte 100 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ COUNTER + .byte EFFECT_COUNTER + .byte 1 @ power + .byte TYPE_FIGHTING + .byte 100 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_SPECIAL + .byte -5 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_MAKES_CONTACT @ misc. flags + +@ SEISMIC_TOSS + .byte EFFECT_LEVEL_DAMAGE + .byte 1 @ power + .byte TYPE_FIGHTING + .byte 100 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ STRENGTH + .byte EFFECT_HIT + .byte 80 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ ABSORB + .byte EFFECT_ABSORB + .byte 20 @ power + .byte TYPE_GRASS + .byte 100 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ MEGA_DRAIN + .byte EFFECT_ABSORB + .byte 40 @ power + .byte TYPE_GRASS + .byte 100 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ LEECH_SEED + .byte EFFECT_LEECH_SEED + .byte 0 @ power + .byte TYPE_GRASS + .byte 90 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ GROWTH + .byte EFFECT_SPECIAL_ATTACK_UP + .byte 0 @ power + .byte TYPE_NORMAL + .byte 0 @ accuracy + .byte 40 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ RAZOR_LEAF + .byte EFFECT_HIGH_CRITICAL + .byte 55 @ power + .byte TYPE_GRASS + .byte 95 @ accuracy + .byte 25 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_BOTH_ENEMIES + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ SOLAR_BEAM + .byte EFFECT_SOLARBEAM + .byte 120 @ power + .byte TYPE_GRASS + .byte 100 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ POISON_POWDER + .byte EFFECT_POISON + .byte 0 @ power + .byte TYPE_POISON + .byte 75 @ accuracy + .byte 35 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ STUN_SPORE + .byte EFFECT_PARALYZE + .byte 0 @ power + .byte TYPE_GRASS + .byte 75 @ accuracy + .byte 30 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ SLEEP_POWDER + .byte EFFECT_SLEEP + .byte 0 @ power + .byte TYPE_GRASS + .byte 75 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ PETAL_DANCE + .byte EFFECT_RAMPAGE + .byte 70 @ power + .byte TYPE_GRASS + .byte 100 @ accuracy + .byte 20 @ PP + .byte 100 @ secondary effect chance + .byte F_TARGET_RANDOM + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ STRING_SHOT + .byte EFFECT_SPEED_DOWN + .byte 0 @ power + .byte TYPE_BUG + .byte 95 @ accuracy + .byte 40 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_BOTH_ENEMIES + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ DRAGON_RAGE + .byte EFFECT_DRAGON_RAGE + .byte 1 @ power + .byte TYPE_DRAGON + .byte 100 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ FIRE_SPIN + .byte EFFECT_TRAP + .byte 15 @ power + .byte TYPE_FIRE + .byte 70 @ accuracy + .byte 15 @ PP + .byte 100 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ THUNDER_SHOCK + .byte EFFECT_PARALYZE_HIT + .byte 40 @ power + .byte TYPE_ELECTRIC + .byte 100 @ accuracy + .byte 30 @ PP + .byte 10 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ THUNDERBOLT + .byte EFFECT_PARALYZE_HIT + .byte 95 @ power + .byte TYPE_ELECTRIC + .byte 100 @ accuracy + .byte 15 @ PP + .byte 10 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ THUNDER_WAVE + .byte EFFECT_PARALYZE + .byte 0 @ power + .byte TYPE_ELECTRIC + .byte 100 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ THUNDER + .byte EFFECT_THUNDER + .byte 120 @ power + .byte TYPE_ELECTRIC + .byte 70 @ accuracy + .byte 10 @ PP + .byte 30 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ ROCK_THROW + .byte EFFECT_HIT + .byte 50 @ power + .byte TYPE_ROCK + .byte 90 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ EARTHQUAKE + .byte EFFECT_EARTHQUAKE + .byte 100 @ power + .byte TYPE_GROUND + .byte 100 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_ALL_EXCEPT_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ FISSURE + .byte EFFECT_OHKO + .byte 1 @ power + .byte TYPE_GROUND + .byte 30 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ DIG + .byte EFFECT_FLY + .byte 60 @ power + .byte TYPE_GROUND + .byte 100 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ TOXIC + .byte EFFECT_TOXIC + .byte 0 @ power + .byte TYPE_POISON + .byte 85 @ accuracy + .byte 10 @ PP + .byte 100 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ CONFUSION + .byte EFFECT_CONFUSE_HIT + .byte 50 @ power + .byte TYPE_PSYCHIC + .byte 100 @ accuracy + .byte 25 @ PP + .byte 10 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ PSYCHIC + .byte EFFECT_SPECIAL_DEFENSE_DOWN_HIT + .byte 90 @ power + .byte TYPE_PSYCHIC + .byte 100 @ accuracy + .byte 10 @ PP + .byte 10 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ HYPNOSIS + .byte EFFECT_SLEEP + .byte 0 @ power + .byte TYPE_PSYCHIC + .byte 60 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ MEDITATE + .byte EFFECT_ATTACK_UP + .byte 0 @ power + .byte TYPE_PSYCHIC + .byte 0 @ accuracy + .byte 40 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ AGILITY + .byte EFFECT_SPEED_UP_2 + .byte 0 @ power + .byte TYPE_PSYCHIC + .byte 0 @ accuracy + .byte 30 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ QUICK_ATTACK + .byte EFFECT_QUICK_ATTACK + .byte 40 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 30 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 1 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ RAGE + .byte EFFECT_RAGE + .byte 20 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ TELEPORT + .byte EFFECT_TELEPORT + .byte 0 @ power + .byte TYPE_PSYCHIC + .byte 0 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte 0 @ misc. flags + +@ NIGHT_SHADE + .byte EFFECT_LEVEL_DAMAGE + .byte 1 @ power + .byte TYPE_GHOST + .byte 100 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ MIMIC + .byte EFFECT_MIMIC + .byte 0 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_PROTECT @ misc. flags + +@ SCREECH + .byte EFFECT_DEFENSE_DOWN_2 + .byte 0 @ power + .byte TYPE_NORMAL + .byte 85 @ accuracy + .byte 40 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ DOUBLE_TEAM + .byte EFFECT_EVASION_UP + .byte 0 @ power + .byte TYPE_NORMAL + .byte 0 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ RECOVER + .byte EFFECT_RESTORE_HP + .byte 0 @ power + .byte TYPE_NORMAL + .byte 0 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ HARDEN + .byte EFFECT_DEFENSE_UP + .byte 0 @ power + .byte TYPE_NORMAL + .byte 0 @ accuracy + .byte 30 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ MINIMIZE + .byte EFFECT_MINIMIZE + .byte 0 @ power + .byte TYPE_NORMAL + .byte 0 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ SMOKESCREEN + .byte EFFECT_ACCURACY_DOWN + .byte 0 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ CONFUSE_RAY + .byte EFFECT_CONFUSE + .byte 0 @ power + .byte TYPE_GHOST + .byte 100 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ WITHDRAW + .byte EFFECT_DEFENSE_UP + .byte 0 @ power + .byte TYPE_WATER + .byte 0 @ accuracy + .byte 40 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ DEFENSE_CURL + .byte EFFECT_DEFENSE_CURL + .byte 0 @ power + .byte TYPE_NORMAL + .byte 0 @ accuracy + .byte 40 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ BARRIER + .byte EFFECT_DEFENSE_UP_2 + .byte 0 @ power + .byte TYPE_PSYCHIC + .byte 0 @ accuracy + .byte 30 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ LIGHT_SCREEN + .byte EFFECT_LIGHT_SCREEN + .byte 0 @ power + .byte TYPE_PSYCHIC + .byte 0 @ accuracy + .byte 30 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ HAZE + .byte EFFECT_HAZE + .byte 0 @ power + .byte TYPE_ICE + .byte 0 @ accuracy + .byte 30 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_PROTECT @ misc. flags + +@ REFLECT + .byte EFFECT_REFLECT + .byte 0 @ power + .byte TYPE_PSYCHIC + .byte 0 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ FOCUS_ENERGY + .byte EFFECT_FOCUS_ENERGY + .byte 0 @ power + .byte TYPE_NORMAL + .byte 0 @ accuracy + .byte 30 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ BIDE + .byte EFFECT_BIDE + .byte 1 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ METRONOME + .byte EFFECT_METRONOME + .byte 0 @ power + .byte TYPE_NORMAL + .byte 0 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_SPECIAL + .byte 0 @ priority + .4byte 0 @ misc. flags + +@ MIRROR_MOVE + .byte EFFECT_MIRROR_MOVE + .byte 0 @ power + .byte TYPE_FLYING + .byte 0 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_SPECIAL + .byte 0 @ priority + .4byte 0 @ misc. flags + +@ SELF_DESTRUCT + .byte EFFECT_EXPLOSION + .byte 200 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_ALL_EXCEPT_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ EGG_BOMB + .byte EFFECT_HIT + .byte 100 @ power + .byte TYPE_NORMAL + .byte 75 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ LICK + .byte EFFECT_PARALYZE_HIT + .byte 20 @ power + .byte TYPE_GHOST + .byte 100 @ accuracy + .byte 30 @ PP + .byte 30 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ SMOG + .byte EFFECT_POISON_HIT + .byte 20 @ power + .byte TYPE_POISON + .byte 70 @ accuracy + .byte 20 @ PP + .byte 40 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ SLUDGE + .byte EFFECT_POISON_HIT + .byte 65 @ power + .byte TYPE_POISON + .byte 100 @ accuracy + .byte 20 @ PP + .byte 30 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ BONE_CLUB + .byte EFFECT_FLINCH_HIT + .byte 65 @ power + .byte TYPE_GROUND + .byte 85 @ accuracy + .byte 20 @ PP + .byte 10 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ FIRE_BLAST + .byte EFFECT_BURN_HIT + .byte 120 @ power + .byte TYPE_FIRE + .byte 85 @ accuracy + .byte 5 @ PP + .byte 10 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ WATERFALL + .byte EFFECT_HIT + .byte 80 @ power + .byte TYPE_WATER + .byte 100 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ CLAMP + .byte EFFECT_TRAP + .byte 35 @ power + .byte TYPE_WATER + .byte 75 @ accuracy + .byte 10 @ PP + .byte 100 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ SWIFT + .byte EFFECT_ALWAYS_HIT + .byte 60 @ power + .byte TYPE_NORMAL + .byte 0 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_BOTH_ENEMIES + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ SKULL_BASH + .byte EFFECT_SKULL_BASH + .byte 100 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ SPIKE_CANNON + .byte EFFECT_MULTI_HIT + .byte 20 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ CONSTRICT + .byte EFFECT_SPEED_DOWN_HIT + .byte 10 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 35 @ PP + .byte 10 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ AMNESIA + .byte EFFECT_SPECIAL_DEFENSE_UP_2 + .byte 0 @ power + .byte TYPE_PSYCHIC + .byte 0 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ KINESIS + .byte EFFECT_ACCURACY_DOWN + .byte 0 @ power + .byte TYPE_PSYCHIC + .byte 80 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ SOFT_BOILED + .byte EFFECT_SOFTBOILED + .byte 0 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_SNATCH @ misc. flags + +@ HI_JUMP_KICK + .byte EFFECT_RECOIL_IF_MISS + .byte 85 @ power + .byte TYPE_FIGHTING + .byte 90 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ GLARE + .byte EFFECT_PARALYZE + .byte 0 @ power + .byte TYPE_NORMAL + .byte 75 @ accuracy + .byte 30 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ DREAM_EATER + .byte EFFECT_DREAM_EATER + .byte 100 @ power + .byte TYPE_PSYCHIC + .byte 100 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ POISON_GAS + .byte EFFECT_POISON + .byte 0 @ power + .byte TYPE_POISON + .byte 55 @ accuracy + .byte 40 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ BARRAGE + .byte EFFECT_MULTI_HIT + .byte 15 @ power + .byte TYPE_NORMAL + .byte 85 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ LEECH_LIFE + .byte EFFECT_ABSORB + .byte 20 @ power + .byte TYPE_BUG + .byte 100 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ LOVELY_KISS + .byte EFFECT_SLEEP + .byte 0 @ power + .byte TYPE_NORMAL + .byte 75 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ SKY_ATTACK + .byte EFFECT_SKY_ATTACK + .byte 140 @ power + .byte TYPE_FLYING + .byte 90 @ accuracy + .byte 5 @ PP + .byte 30 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ TRANSFORM + .byte EFFECT_TRANSFORM + .byte 0 @ power + .byte TYPE_NORMAL + .byte 0 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte 0 @ misc. flags + +@ BUBBLE + .byte EFFECT_SPEED_DOWN_HIT + .byte 20 @ power + .byte TYPE_WATER + .byte 100 @ accuracy + .byte 30 @ PP + .byte 10 @ secondary effect chance + .byte F_TARGET_BOTH_ENEMIES + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ DIZZY_PUNCH + .byte EFFECT_CONFUSE_HIT + .byte 70 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 10 @ PP + .byte 20 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ SPORE + .byte EFFECT_SLEEP + .byte 0 @ power + .byte TYPE_GRASS + .byte 100 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ FLASH + .byte EFFECT_ACCURACY_DOWN + .byte 0 @ power + .byte TYPE_NORMAL + .byte 70 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ PSYWAVE + .byte EFFECT_PSYWAVE + .byte 1 @ power + .byte TYPE_PSYCHIC + .byte 80 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ SPLASH + .byte EFFECT_SPLASH + .byte 0 @ power + .byte TYPE_NORMAL + .byte 0 @ accuracy + .byte 40 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte 0 @ misc. flags + +@ ACID_ARMOR + .byte EFFECT_DEFENSE_UP_2 + .byte 0 @ power + .byte TYPE_POISON + .byte 0 @ accuracy + .byte 40 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ CRABHAMMER + .byte EFFECT_HIGH_CRITICAL + .byte 90 @ power + .byte TYPE_WATER + .byte 85 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ EXPLOSION + .byte EFFECT_EXPLOSION + .byte 250 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_ALL_EXCEPT_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ FURY_SWIPES + .byte EFFECT_MULTI_HIT + .byte 18 @ power + .byte TYPE_NORMAL + .byte 80 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ BONEMERANG + .byte EFFECT_DOUBLE_HIT + .byte 50 @ power + .byte TYPE_GROUND + .byte 90 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ REST + .byte EFFECT_REST + .byte 0 @ power + .byte TYPE_PSYCHIC + .byte 0 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ ROCK_SLIDE + .byte EFFECT_FLINCH_HIT + .byte 75 @ power + .byte TYPE_ROCK + .byte 90 @ accuracy + .byte 10 @ PP + .byte 30 @ secondary effect chance + .byte F_TARGET_BOTH_ENEMIES + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ HYPER_FANG + .byte EFFECT_FLINCH_HIT + .byte 80 @ power + .byte TYPE_NORMAL + .byte 90 @ accuracy + .byte 15 @ PP + .byte 10 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ SHARPEN + .byte EFFECT_ATTACK_UP + .byte 0 @ power + .byte TYPE_NORMAL + .byte 0 @ accuracy + .byte 30 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ CONVERSION + .byte EFFECT_CONVERSION + .byte 0 @ power + .byte TYPE_NORMAL + .byte 0 @ accuracy + .byte 30 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte 0 @ misc. flags + +@ TRI_ATTACK + .byte EFFECT_TRI_ATTACK + .byte 80 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 10 @ PP + .byte 20 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ SUPER_FANG + .byte EFFECT_SUPER_FANG + .byte 1 @ power + .byte TYPE_NORMAL + .byte 90 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ SLASH + .byte EFFECT_HIGH_CRITICAL + .byte 70 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ SUBSTITUTE + .byte EFFECT_SUBSTITUTE + .byte 0 @ power + .byte TYPE_NORMAL + .byte 0 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ STRUGGLE + .byte EFFECT_RECOIL + .byte 50 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 1 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ SKETCH + .byte EFFECT_SKETCH + .byte 0 @ power + .byte TYPE_NORMAL + .byte 0 @ accuracy + .byte 1 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte 0 @ misc. flags + +@ TRIPLE_KICK + .byte EFFECT_TRIPLE_KICK + .byte 10 @ power + .byte TYPE_FIGHTING + .byte 90 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ THIEF + .byte EFFECT_THIEF + .byte 40 @ power + .byte TYPE_DARK + .byte 100 @ accuracy + .byte 10 @ PP + .byte 100 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ SPIDER_WEB + .byte EFFECT_MEAN_LOOK + .byte 0 @ power + .byte TYPE_BUG + .byte 100 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ MIND_READER + .byte EFFECT_LOCK_ON + .byte 0 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ NIGHTMARE + .byte EFFECT_NIGHTMARE + .byte 0 @ power + .byte TYPE_GHOST + .byte 100 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ FLAME_WHEEL + .byte EFFECT_THAW_HIT + .byte 60 @ power + .byte TYPE_FIRE + .byte 100 @ accuracy + .byte 25 @ PP + .byte 10 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ SNORE + .byte EFFECT_SNORE + .byte 40 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 15 @ PP + .byte 30 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ CURSE + .byte EFFECT_CURSE + .byte 0 @ power + .byte TYPE_MYSTERY + .byte 0 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte 0 @ misc. flags + +@ FLAIL + .byte EFFECT_FLAIL + .byte 1 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ CONVERSION_2 + .byte EFFECT_CONVERSION_2 + .byte 0 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 30 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte 0 @ misc. flags + +@ AEROBLAST + .byte EFFECT_HIGH_CRITICAL + .byte 100 @ power + .byte TYPE_FLYING + .byte 95 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ COTTON_SPORE + .byte EFFECT_SPEED_DOWN_2 + .byte 0 @ power + .byte TYPE_GRASS + .byte 85 @ accuracy + .byte 40 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ REVERSAL + .byte EFFECT_FLAIL + .byte 1 @ power + .byte TYPE_FIGHTING + .byte 100 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ SPITE + .byte EFFECT_SPITE + .byte 0 @ power + .byte TYPE_GHOST + .byte 100 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ POWDER_SNOW + .byte EFFECT_FREEZE_HIT + .byte 40 @ power + .byte TYPE_ICE + .byte 100 @ accuracy + .byte 25 @ PP + .byte 10 @ secondary effect chance + .byte F_TARGET_BOTH_ENEMIES + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ PROTECT + .byte EFFECT_PROTECT + .byte 0 @ power + .byte TYPE_NORMAL + .byte 0 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 3 @ priority + .4byte 0 @ misc. flags + +@ MACH_PUNCH + .byte EFFECT_QUICK_ATTACK + .byte 40 @ power + .byte TYPE_FIGHTING + .byte 100 @ accuracy + .byte 30 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 1 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ SCARY_FACE + .byte EFFECT_SPEED_DOWN_2 + .byte 0 @ power + .byte TYPE_NORMAL + .byte 90 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ FAINT_ATTACK + .byte EFFECT_ALWAYS_HIT + .byte 60 @ power + .byte TYPE_DARK + .byte 0 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ SWEET_KISS + .byte EFFECT_CONFUSE + .byte 0 @ power + .byte TYPE_NORMAL + .byte 75 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ BELLY_DRUM + .byte EFFECT_BELLY_DRUM + .byte 0 @ power + .byte TYPE_NORMAL + .byte 0 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ SLUDGE_BOMB + .byte EFFECT_POISON_HIT + .byte 90 @ power + .byte TYPE_POISON + .byte 100 @ accuracy + .byte 10 @ PP + .byte 30 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ MUD_SLAP + .byte EFFECT_ACCURACY_DOWN_HIT + .byte 20 @ power + .byte TYPE_GROUND + .byte 100 @ accuracy + .byte 10 @ PP + .byte 100 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ OCTAZOOKA + .byte EFFECT_ACCURACY_DOWN_HIT + .byte 65 @ power + .byte TYPE_WATER + .byte 85 @ accuracy + .byte 10 @ PP + .byte 50 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ SPIKES + .byte EFFECT_SPIKES + .byte 0 @ power + .byte TYPE_GROUND + .byte 0 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_ENEMY_SIDE + .byte 0 @ priority + .4byte 0 @ misc. flags + +@ ZAP_CANNON + .byte EFFECT_PARALYZE_HIT + .byte 100 @ power + .byte TYPE_ELECTRIC + .byte 50 @ accuracy + .byte 5 @ PP + .byte 100 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ FORESIGHT + .byte EFFECT_FORESIGHT + .byte 0 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 40 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ DESTINY_BOND + .byte EFFECT_DESTINY_BOND + .byte 0 @ power + .byte TYPE_GHOST + .byte 0 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte 0 @ misc. flags + +@ PERISH_SONG + .byte EFFECT_PERISH_SONG + .byte 0 @ power + .byte TYPE_NORMAL + .byte 0 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte 0 @ misc. flags + +@ ICY_WIND + .byte EFFECT_SPEED_DOWN_HIT + .byte 55 @ power + .byte TYPE_ICE + .byte 95 @ accuracy + .byte 15 @ PP + .byte 100 @ secondary effect chance + .byte F_TARGET_BOTH_ENEMIES + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ DETECT + .byte EFFECT_PROTECT + .byte 0 @ power + .byte TYPE_FIGHTING + .byte 0 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 3 @ priority + .4byte 0 @ misc. flags + +@ BONE_RUSH + .byte EFFECT_MULTI_HIT + .byte 25 @ power + .byte TYPE_GROUND + .byte 80 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ LOCK_ON + .byte EFFECT_LOCK_ON + .byte 0 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ OUTRAGE + .byte EFFECT_RAMPAGE + .byte 90 @ power + .byte TYPE_DRAGON + .byte 100 @ accuracy + .byte 15 @ PP + .byte 100 @ secondary effect chance + .byte F_TARGET_RANDOM + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ SANDSTORM + .byte EFFECT_SANDSTORM + .byte 0 @ power + .byte TYPE_ROCK + .byte 0 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte 0 @ misc. flags + +@ GIGA_DRAIN + .byte EFFECT_ABSORB + .byte 60 @ power + .byte TYPE_GRASS + .byte 100 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ ENDURE + .byte EFFECT_ENDURE + .byte 0 @ power + .byte TYPE_NORMAL + .byte 0 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 3 @ priority + .4byte 0 @ misc. flags + +@ CHARM + .byte EFFECT_ATTACK_DOWN_2 + .byte 0 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ ROLLOUT + .byte EFFECT_ROLLOUT + .byte 30 @ power + .byte TYPE_ROCK + .byte 90 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ FALSE_SWIPE + .byte EFFECT_FALSE_SWIPE + .byte 40 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 40 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ SWAGGER + .byte EFFECT_SWAGGER + .byte 0 @ power + .byte TYPE_NORMAL + .byte 90 @ accuracy + .byte 15 @ PP + .byte 100 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ MILK_DRINK + .byte EFFECT_SOFTBOILED + .byte 0 @ power + .byte TYPE_NORMAL + .byte 0 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH | F_AFFECTED_BY_PROTECT @ misc. flags + +@ SPARK + .byte EFFECT_PARALYZE_HIT + .byte 65 @ power + .byte TYPE_ELECTRIC + .byte 100 @ accuracy + .byte 20 @ PP + .byte 30 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ FURY_CUTTER + .byte EFFECT_FURY_CUTTER + .byte 10 @ power + .byte TYPE_BUG + .byte 95 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ STEEL_WING + .byte EFFECT_DEFENSE_UP_HIT + .byte 70 @ power + .byte TYPE_STEEL + .byte 90 @ accuracy + .byte 25 @ PP + .byte 10 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ MEAN_LOOK + .byte EFFECT_MEAN_LOOK + .byte 0 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ ATTRACT + .byte EFFECT_ATTRACT + .byte 0 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ SLEEP_TALK + .byte EFFECT_SLEEP_TALK + .byte 0 @ power + .byte TYPE_NORMAL + .byte 0 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_SPECIAL + .byte 0 @ priority + .4byte 0 @ misc. flags + +@ HEAL_BELL + .byte EFFECT_HEAL_BELL + .byte 0 @ power + .byte TYPE_NORMAL + .byte 0 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ RETURN + .byte EFFECT_RETURN + .byte 1 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ PRESENT + .byte EFFECT_PRESENT + .byte 1 @ power + .byte TYPE_NORMAL + .byte 90 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ FRUSTRATION + .byte EFFECT_FRUSTRATION + .byte 1 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ SAFEGUARD + .byte EFFECT_SAFEGUARD + .byte 0 @ power + .byte TYPE_NORMAL + .byte 0 @ accuracy + .byte 25 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ PAIN_SPLIT + .byte EFFECT_PAIN_SPLIT + .byte 0 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ SACRED_FIRE + .byte EFFECT_THAW_HIT + .byte 100 @ power + .byte TYPE_FIRE + .byte 95 @ accuracy + .byte 5 @ PP + .byte 50 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ MAGNITUDE + .byte EFFECT_MAGNITUDE + .byte 1 @ power + .byte TYPE_GROUND + .byte 100 @ accuracy + .byte 30 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_ALL_EXCEPT_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ DYNAMIC_PUNCH + .byte EFFECT_CONFUSE_HIT + .byte 100 @ power + .byte TYPE_FIGHTING + .byte 50 @ accuracy + .byte 5 @ PP + .byte 100 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ MEGAHORN + .byte EFFECT_HIT + .byte 120 @ power + .byte TYPE_BUG + .byte 85 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ DRAGON_BREATH + .byte EFFECT_PARALYZE_HIT + .byte 60 @ power + .byte TYPE_DRAGON + .byte 100 @ accuracy + .byte 20 @ PP + .byte 30 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ BATON_PASS + .byte EFFECT_BATON_PASS + .byte 0 @ power + .byte TYPE_NORMAL + .byte 0 @ accuracy + .byte 40 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte 0 @ misc. flags + +@ ENCORE + .byte EFFECT_ENCORE + .byte 0 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ PURSUIT + .byte EFFECT_PURSUIT + .byte 40 @ power + .byte TYPE_DARK + .byte 100 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ RAPID_SPIN + .byte EFFECT_RAPID_SPIN + .byte 20 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 40 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ SWEET_SCENT + .byte EFFECT_EVASION_DOWN + .byte 0 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_BOTH_ENEMIES + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ IRON_TAIL + .byte EFFECT_DEFENSE_DOWN_HIT + .byte 100 @ power + .byte TYPE_STEEL + .byte 75 @ accuracy + .byte 15 @ PP + .byte 30 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ METAL_CLAW + .byte EFFECT_ATTACK_UP_HIT + .byte 50 @ power + .byte TYPE_STEEL + .byte 95 @ accuracy + .byte 35 @ PP + .byte 10 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ VITAL_THROW + .byte EFFECT_VITAL_THROW + .byte 70 @ power + .byte TYPE_FIGHTING + .byte 100 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte -1 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ MORNING_SUN + .byte EFFECT_MORNING_SUN + .byte 0 @ power + .byte TYPE_NORMAL + .byte 0 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ SYNTHESIS + .byte EFFECT_SYNTHESIS + .byte 0 @ power + .byte TYPE_GRASS + .byte 0 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ MOONLIGHT + .byte EFFECT_MOONLIGHT + .byte 0 @ power + .byte TYPE_NORMAL + .byte 0 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ HIDDEN_POWER + .byte EFFECT_HIDDEN_POWER + .byte 1 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ CROSS_CHOP + .byte EFFECT_HIGH_CRITICAL + .byte 100 @ power + .byte TYPE_FIGHTING + .byte 80 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ TWISTER + .byte EFFECT_TWISTER + .byte 40 @ power + .byte TYPE_DRAGON + .byte 100 @ accuracy + .byte 20 @ PP + .byte 20 @ secondary effect chance + .byte F_TARGET_BOTH_ENEMIES + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ RAIN_DANCE + .byte EFFECT_RAIN_DANCE + .byte 0 @ power + .byte TYPE_WATER + .byte 0 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte 0 @ misc. flags + +@ SUNNY_DAY + .byte EFFECT_SUNNY_DAY + .byte 0 @ power + .byte TYPE_FIRE + .byte 0 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte 0 @ misc. flags + +@ CRUNCH + .byte EFFECT_SPECIAL_DEFENSE_DOWN_HIT + .byte 80 @ power + .byte TYPE_DARK + .byte 100 @ accuracy + .byte 15 @ PP + .byte 20 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ MIRROR_COAT + .byte EFFECT_MIRROR_COAT + .byte 1 @ power + .byte TYPE_PSYCHIC + .byte 100 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_SPECIAL + .byte -5 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE @ misc. flags + +@ PSYCH_UP + .byte EFFECT_PSYCH_UP + .byte 0 @ power + .byte TYPE_NORMAL + .byte 0 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ EXTREME_SPEED + .byte EFFECT_QUICK_ATTACK + .byte 80 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 1 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ ANCIENT_POWER + .byte EFFECT_ALL_STATS_UP_HIT + .byte 60 @ power + .byte TYPE_ROCK + .byte 100 @ accuracy + .byte 5 @ PP + .byte 10 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ SHADOW_BALL + .byte EFFECT_SPECIAL_DEFENSE_DOWN_HIT + .byte 80 @ power + .byte TYPE_GHOST + .byte 100 @ accuracy + .byte 15 @ PP + .byte 20 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ FUTURE_SIGHT + .byte EFFECT_FUTURE_SIGHT + .byte 80 @ power + .byte TYPE_PSYCHIC + .byte 90 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte 0 @ misc. flags + +@ ROCK_SMASH + .byte EFFECT_DEFENSE_DOWN_HIT + .byte 20 @ power + .byte TYPE_FIGHTING + .byte 100 @ accuracy + .byte 15 @ PP + .byte 50 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ WHIRLPOOL + .byte EFFECT_TRAP + .byte 15 @ power + .byte TYPE_WATER + .byte 70 @ accuracy + .byte 15 @ PP + .byte 100 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ BEAT_UP + .byte EFFECT_BEAT_UP + .byte 10 @ power + .byte TYPE_DARK + .byte 100 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ FAKE_OUT + .byte EFFECT_FAKE_OUT + .byte 40 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 1 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ UPROAR + .byte EFFECT_UPROAR + .byte 50 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 10 @ PP + .byte 100 @ secondary effect chance + .byte F_TARGET_RANDOM + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ STOCKPILE + .byte EFFECT_STOCKPILE + .byte 0 @ power + .byte TYPE_NORMAL + .byte 0 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ SPIT_UP + .byte EFFECT_SPIT_UP + .byte 100 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_AFFECTED_BY_PROTECT @ misc. flags + +@ SWALLOW + .byte EFFECT_SWALLOW + .byte 0 @ power + .byte TYPE_NORMAL + .byte 0 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ HEAT_WAVE + .byte EFFECT_BURN_HIT + .byte 100 @ power + .byte TYPE_FIRE + .byte 90 @ accuracy + .byte 10 @ PP + .byte 10 @ secondary effect chance + .byte F_TARGET_BOTH_ENEMIES + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ HAIL + .byte EFFECT_HAIL + .byte 0 @ power + .byte TYPE_ICE + .byte 0 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_PROTECT @ misc. flags + +@ TORMENT + .byte EFFECT_TORMENT + .byte 0 @ power + .byte TYPE_DARK + .byte 100 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ FLATTER + .byte EFFECT_FLATTER + .byte 0 @ power + .byte TYPE_DARK + .byte 100 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ WILL_O_WISP + .byte EFFECT_WILL_O_WISP + .byte 0 @ power + .byte TYPE_FIRE + .byte 75 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ MEMENTO + .byte EFFECT_MEMENTO + .byte 0 @ power + .byte TYPE_DARK + .byte 100 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ FACADE + .byte EFFECT_FACADE + .byte 70 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ FOCUS_PUNCH + .byte EFFECT_FOCUS_PUNCH + .byte 150 @ power + .byte TYPE_FIGHTING + .byte 100 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte -3 @ priority + .4byte F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ SMELLING_SALT + .byte EFFECT_SMELLINGSALT + .byte 60 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ FOLLOW_ME + .byte EFFECT_FOLLOW_ME + .byte 0 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 3 @ priority + .4byte 0 @ misc. flags + +@ NATURE_POWER + .byte EFFECT_NATURE_POWER + .byte 0 @ power + .byte TYPE_NORMAL + .byte 95 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_SPECIAL + .byte 0 @ priority + .4byte 0 @ misc. flags + +@ CHARGE + .byte EFFECT_CHARGE + .byte 0 @ power + .byte TYPE_ELECTRIC + .byte 100 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ TAUNT + .byte EFFECT_TAUNT + .byte 0 @ power + .byte TYPE_DARK + .byte 100 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_PROTECT @ misc. flags + +@ HELPING_HAND + .byte EFFECT_HELPING_HAND + .byte 0 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 5 @ priority + .4byte 0 @ misc. flags + +@ TRICK + .byte EFFECT_TRICK + .byte 0 @ power + .byte TYPE_PSYCHIC + .byte 100 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ ROLE_PLAY + .byte EFFECT_ROLE_PLAY + .byte 0 @ power + .byte TYPE_PSYCHIC + .byte 100 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte 0 @ misc. flags + +@ WISH + .byte EFFECT_WISH + .byte 0 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_PROTECT @ misc. flags + +@ ASSIST + .byte EFFECT_ASSIST + .byte 0 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_SPECIAL + .byte 0 @ priority + .4byte 0 @ misc. flags + +@ INGRAIN + .byte EFFECT_INGRAIN + .byte 0 @ power + .byte TYPE_GRASS + .byte 100 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ SUPERPOWER + .byte EFFECT_SUPERPOWER + .byte 120 @ power + .byte TYPE_FIGHTING + .byte 100 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ MAGIC_COAT + .byte EFFECT_MAGIC_COAT + .byte 0 @ power + .byte TYPE_PSYCHIC + .byte 100 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_SPECIAL + .byte 4 @ priority + .4byte 0 @ misc. flags + +@ RECYCLE + .byte EFFECT_RECYCLE + .byte 0 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte 0 @ misc. flags + +@ REVENGE + .byte EFFECT_REVENGE + .byte 60 @ power + .byte TYPE_FIGHTING + .byte 100 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte -4 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ BRICK_BREAK + .byte EFFECT_BRICK_BREAK + .byte 75 @ power + .byte TYPE_FIGHTING + .byte 100 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ YAWN + .byte EFFECT_YAWN + .byte 0 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ KNOCK_OFF + .byte EFFECT_KNOCK_OFF + .byte 20 @ power + .byte TYPE_DARK + .byte 100 @ accuracy + .byte 20 @ PP + .byte 100 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ ENDEAVOR + .byte EFFECT_ENDEAVOR + .byte 1 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ ERUPTION + .byte EFFECT_ERUPTION + .byte 150 @ power + .byte TYPE_FIRE + .byte 100 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_BOTH_ENEMIES + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ SKILL_SWAP + .byte EFFECT_SKILL_SWAP + .byte 0 @ power + .byte TYPE_PSYCHIC + .byte 100 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ IMPRISON + .byte EFFECT_IMPRISON + .byte 0 @ power + .byte TYPE_PSYCHIC + .byte 100 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_PROTECT @ misc. flags + +@ REFRESH + .byte EFFECT_REFRESH + .byte 0 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ GRUDGE + .byte EFFECT_GRUDGE + .byte 0 @ power + .byte TYPE_GHOST + .byte 100 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ SNATCH + .byte EFFECT_SNATCH + .byte 0 @ power + .byte TYPE_DARK + .byte 100 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_SPECIAL + .byte 4 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE @ misc. flags + +@ SECRET_POWER + .byte EFFECT_SECRET_POWER + .byte 70 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 20 @ PP + .byte 30 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ DIVE + .byte EFFECT_FLY + .byte 60 @ power + .byte TYPE_WATER + .byte 100 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ ARM_THRUST + .byte EFFECT_MULTI_HIT + .byte 15 @ power + .byte TYPE_FIGHTING + .byte 100 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ CAMOUFLAGE + .byte EFFECT_CAMOUFLAGE + .byte 0 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ TAIL_GLOW + .byte EFFECT_SPECIAL_ATTACK_UP_2 + .byte 0 @ power + .byte TYPE_BUG + .byte 100 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ LUSTER_PURGE + .byte EFFECT_SPECIAL_DEFENSE_DOWN_HIT + .byte 70 @ power + .byte TYPE_PSYCHIC + .byte 100 @ accuracy + .byte 5 @ PP + .byte 50 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ MIST_BALL + .byte EFFECT_SPECIAL_ATTACK_DOWN_HIT + .byte 70 @ power + .byte TYPE_PSYCHIC + .byte 100 @ accuracy + .byte 5 @ PP + .byte 50 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ FEATHER_DANCE + .byte EFFECT_ATTACK_DOWN_2 + .byte 0 @ power + .byte TYPE_FLYING + .byte 100 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ TEETER_DANCE + .byte EFFECT_TEETER_DANCE + .byte 0 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_ALL_EXCEPT_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_PROTECT @ misc. flags + +@ BLAZE_KICK + .byte EFFECT_BLAZE_KICK + .byte 85 @ power + .byte TYPE_FIRE + .byte 90 @ accuracy + .byte 10 @ PP + .byte 10 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ MUD_SPORT + .byte EFFECT_MUD_SPORT + .byte 0 @ power + .byte TYPE_GROUND + .byte 100 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte 0 @ misc. flags + +@ ICE_BALL + .byte EFFECT_ROLLOUT + .byte 30 @ power + .byte TYPE_ICE + .byte 90 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ NEEDLE_ARM + .byte EFFECT_FLINCH_HIT_2 + .byte 60 @ power + .byte TYPE_GRASS + .byte 100 @ accuracy + .byte 15 @ PP + .byte 30 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ SLACK_OFF + .byte EFFECT_RESTORE_HP + .byte 0 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ HYPER_VOICE + .byte EFFECT_HIT + .byte 90 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_BOTH_ENEMIES + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ POISON_FANG + .byte EFFECT_POISON_FANG + .byte 50 @ power + .byte TYPE_POISON + .byte 100 @ accuracy + .byte 15 @ PP + .byte 30 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ CRUSH_CLAW + .byte EFFECT_DEFENSE_DOWN_HIT + .byte 75 @ power + .byte TYPE_NORMAL + .byte 95 @ accuracy + .byte 10 @ PP + .byte 50 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ BLAST_BURN + .byte EFFECT_RECHARGE + .byte 150 @ power + .byte TYPE_FIRE + .byte 90 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ HYDRO_CANNON + .byte EFFECT_RECHARGE + .byte 150 @ power + .byte TYPE_WATER + .byte 90 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ METEOR_MASH + .byte EFFECT_ATTACK_UP_HIT + .byte 100 @ power + .byte TYPE_STEEL + .byte 85 @ accuracy + .byte 10 @ PP + .byte 20 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ ASTONISH + .byte EFFECT_FLINCH_HIT_2 + .byte 30 @ power + .byte TYPE_GHOST + .byte 100 @ accuracy + .byte 15 @ PP + .byte 30 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ WEATHER_BALL + .byte EFFECT_WEATHER_BALL + .byte 50 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ AROMATHERAPY + .byte EFFECT_HEAL_BELL + .byte 0 @ power + .byte TYPE_GRASS + .byte 0 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ FAKE_TEARS + .byte EFFECT_SPECIAL_DEFENSE_DOWN_2 + .byte 0 @ power + .byte TYPE_DARK + .byte 100 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ AIR_CUTTER + .byte EFFECT_HIGH_CRITICAL + .byte 55 @ power + .byte TYPE_FLYING + .byte 95 @ accuracy + .byte 25 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_BOTH_ENEMIES + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ OVERHEAT + .byte EFFECT_OVERHEAT + .byte 140 @ power + .byte TYPE_FIRE + .byte 90 @ accuracy + .byte 5 @ PP + .byte 100 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ ODOR_SLEUTH + .byte EFFECT_FORESIGHT + .byte 0 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 40 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ ROCK_TOMB + .byte EFFECT_SPEED_DOWN_HIT + .byte 50 @ power + .byte TYPE_ROCK + .byte 80 @ accuracy + .byte 10 @ PP + .byte 100 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ SILVER_WIND + .byte EFFECT_ALL_STATS_UP_HIT + .byte 60 @ power + .byte TYPE_BUG + .byte 100 @ accuracy + .byte 5 @ PP + .byte 10 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ METAL_SOUND + .byte EFFECT_SPECIAL_DEFENSE_DOWN_2 + .byte 0 @ power + .byte TYPE_STEEL + .byte 85 @ accuracy + .byte 40 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ GRASS_WHISTLE + .byte EFFECT_SLEEP + .byte 0 @ power + .byte TYPE_GRASS + .byte 55 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ TICKLE + .byte EFFECT_TICKLE + .byte 0 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ COSMIC_POWER + .byte EFFECT_COSMIC_POWER + .byte 0 @ power + .byte TYPE_PSYCHIC + .byte 0 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ WATER_SPOUT + .byte EFFECT_ERUPTION + .byte 150 @ power + .byte TYPE_WATER + .byte 100 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_BOTH_ENEMIES + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ SIGNAL_BEAM + .byte EFFECT_CONFUSE_HIT + .byte 75 @ power + .byte TYPE_BUG + .byte 100 @ accuracy + .byte 15 @ PP + .byte 10 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ SHADOW_PUNCH + .byte EFFECT_ALWAYS_HIT + .byte 60 @ power + .byte TYPE_GHOST + .byte 0 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ EXTRASENSORY + .byte EFFECT_FLINCH_HIT_2 + .byte 80 @ power + .byte TYPE_PSYCHIC + .byte 100 @ accuracy + .byte 30 @ PP + .byte 10 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ SKY_UPPERCUT + .byte EFFECT_SKY_UPPERCUT + .byte 85 @ power + .byte TYPE_FIGHTING + .byte 90 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ SAND_TOMB + .byte EFFECT_TRAP + .byte 15 @ power + .byte TYPE_GROUND + .byte 70 @ accuracy + .byte 15 @ PP + .byte 100 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ SHEER_COLD + .byte EFFECT_OHKO + .byte 1 @ power + .byte TYPE_ICE + .byte 30 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ MUDDY_WATER + .byte EFFECT_ACCURACY_DOWN_HIT + .byte 95 @ power + .byte TYPE_WATER + .byte 85 @ accuracy + .byte 10 @ PP + .byte 30 @ secondary effect chance + .byte F_TARGET_BOTH_ENEMIES + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ BULLET_SEED + .byte EFFECT_MULTI_HIT + .byte 10 @ power + .byte TYPE_GRASS + .byte 100 @ accuracy + .byte 30 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ AERIAL_ACE + .byte EFFECT_ALWAYS_HIT + .byte 60 @ power + .byte TYPE_FLYING + .byte 0 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ ICICLE_SPEAR + .byte EFFECT_MULTI_HIT + .byte 10 @ power + .byte TYPE_ICE + .byte 100 @ accuracy + .byte 30 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ IRON_DEFENSE + .byte EFFECT_DEFENSE_UP_2 + .byte 0 @ power + .byte TYPE_STEEL + .byte 0 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ BLOCK + .byte EFFECT_MEAN_LOOK + .byte 0 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags + +@ HOWL + .byte EFFECT_ATTACK_UP + .byte 0 @ power + .byte TYPE_NORMAL + .byte 0 @ accuracy + .byte 40 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ DRAGON_CLAW + .byte EFFECT_HIT + .byte 80 @ power + .byte TYPE_DRAGON + .byte 100 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ FRENZY_PLANT + .byte EFFECT_RECHARGE + .byte 150 @ power + .byte TYPE_GRASS + .byte 90 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ BULK_UP + .byte EFFECT_BULK_UP + .byte 0 @ power + .byte TYPE_FIGHTING + .byte 0 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ BOUNCE + .byte EFFECT_FLY + .byte 85 @ power + .byte TYPE_FLYING + .byte 85 @ accuracy + .byte 5 @ PP + .byte 30 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ MUD_SHOT + .byte EFFECT_SPEED_DOWN_HIT + .byte 55 @ power + .byte TYPE_GROUND + .byte 95 @ accuracy + .byte 15 @ PP + .byte 100 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ POISON_TAIL + .byte EFFECT_POISON_TAIL + .byte 50 @ power + .byte TYPE_POISON + .byte 100 @ accuracy + .byte 25 @ PP + .byte 10 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ COVET + .byte EFFECT_THIEF + .byte 40 @ power + .byte TYPE_NORMAL + .byte 100 @ accuracy + .byte 40 @ PP + .byte 100 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ VOLT_TACKLE + .byte EFFECT_DOUBLE_EDGE + .byte 120 @ power + .byte TYPE_ELECTRIC + .byte 100 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ MAGICAL_LEAF + .byte EFFECT_ALWAYS_HIT + .byte 60 @ power + .byte TYPE_GRASS + .byte 0 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ WATER_SPORT + .byte EFFECT_WATER_SPORT + .byte 0 @ power + .byte TYPE_WATER + .byte 100 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte 0 @ misc. flags + +@ CALM_MIND + .byte EFFECT_CALM_MIND + .byte 0 @ power + .byte TYPE_PSYCHIC + .byte 0 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ LEAF_BLADE + .byte EFFECT_HIGH_CRITICAL + .byte 70 @ power + .byte TYPE_GRASS + .byte 100 @ accuracy + .byte 15 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags + +@ DRAGON_DANCE + .byte EFFECT_DRAGON_DANCE + .byte 0 @ power + .byte TYPE_DRAGON + .byte 0 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte F_TARGET_USER + .byte 0 @ priority + .4byte F_AFFECTED_BY_SNATCH @ misc. flags + +@ ROCK_BLAST + .byte EFFECT_MULTI_HIT + .byte 25 @ power + .byte TYPE_ROCK + .byte 80 @ accuracy + .byte 10 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ SHOCK_WAVE + .byte EFFECT_ALWAYS_HIT + .byte 60 @ power + .byte TYPE_ELECTRIC + .byte 0 @ accuracy + .byte 20 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ WATER_PULSE + .byte EFFECT_CONFUSE_HIT + .byte 60 @ power + .byte TYPE_WATER + .byte 100 @ accuracy + .byte 20 @ PP + .byte 20 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags + +@ DOOM_DESIRE + .byte EFFECT_FUTURE_SIGHT + .byte 120 @ power + .byte TYPE_STEEL + .byte 85 @ accuracy + .byte 5 @ PP + .byte 0 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte 0 @ misc. flags + +@ PSYCHO_BOOST + .byte EFFECT_OVERHEAT + .byte 140 @ power + .byte TYPE_PSYCHIC + .byte 90 @ accuracy + .byte 5 @ PP + .byte 100 @ secondary effect chance + .byte TARGET_SELECTED_POKEMON + .byte 0 @ priority + .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags diff --git a/data/data2c.s b/data/data2c.s deleted file mode 100644 index 260b451cf..000000000 --- a/data/data2c.s +++ /dev/null @@ -1,10 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - - - -@ 81FB12C - .include "data/battle_moves.inc" - diff --git a/ld_script.txt b/ld_script.txt index 4a9775673..4f3ff093d 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -335,7 +335,7 @@ SECTIONS { data/data2b.o(.rodata); src/battle_controller_opponent.o(.rodata); src/battle_controller_linkopponent2.o(.rodata); - data/data2c.o(.rodata); + data/battle_moves.o(.rodata); src/battle_3.o(.rodata); src/pokemon_data.o(.rodata); . = ALIGN(4); -- cgit v1.2.3 From 2f7e3b3f6bfa62d60adb6f24f8a59f93987dca3d Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 27 Aug 2017 11:14:39 -0500 Subject: Emitcmd22 -> EmitChoosePokemon --- asm/battle_2.s | 6 +++--- include/battle.h | 2 +- include/rom3.h | 2 +- src/battle_4.c | 4 ++-- src/rom3.c | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/asm/battle_2.s b/asm/battle_2.s index 731759851..617729451 100644 --- a/asm/battle_2.s +++ b/asm/battle_2.s @@ -573,7 +573,7 @@ _080127E0: str r0, [sp] movs r0, 0 movs r2, 0x6 - bl Emitcmd22 + bl EmitChoosePokemon b _0801289E .align 2, 0 _08012808: .4byte gActiveBank @@ -624,7 +624,7 @@ _08012854: movs r1, 0 _0801286C: movs r3, 0 - bl Emitcmd22 + bl EmitChoosePokemon b _0801289E .align 2, 0 _08012874: .4byte gActionForBanks @@ -643,7 +643,7 @@ _08012884: movs r1, 0 movs r2, 0x6 movs r3, 0 - bl Emitcmd22 + bl EmitChoosePokemon _0801289E: ldr r0, _080128A8 @ =gActiveBank ldrb r0, [r0] diff --git a/include/battle.h b/include/battle.h index 255e6d0e5..72211f50f 100644 --- a/include/battle.h +++ b/include/battle.h @@ -699,7 +699,7 @@ void EmitBallThrow(u8 a, u8 shakes); //0xD //void EmitMoveAnimation(u8 a, u16 move, u8 turn, u16 power, s32 dmg, u8 happiness, void *disable_struct); //0xF void EmitPrintString(u8 a, u16 stringID); //0x10 //void EmitPrintStringPlayerOnly(u8 a, u16 stringID); //0x11 -void Emitcmd22(u8 a, u8 b, u8 c, u8 d, u8 *e); //0x16 +void EmitChoosePokemon(u8 a, u8 b, u8 c, u8 d, u8 *e); //0x16 //void EmitHealthBarUpdate(u8 a, u16 b); //0x18; Had to declare the second arg as u16 because s16 wont match in atk0b //void EmitExpBarUpdate(u8 a, u8 b, u16 c); //0x19 void EmitStatusIconUpdate(u8 a, u32 b, u32 c); //0x1A diff --git a/include/rom3.h b/include/rom3.h index fb07f045f..95ef5cca4 100644 --- a/include/rom3.h +++ b/include/rom3.h @@ -32,7 +32,7 @@ void EmitPrintStringPlayerOnly(u8 a, u16 stringID); void Emitcmd18(u8 a, u8 b, u16 c); void Emitcmd20(u8 a, u8 b, u8 c, u8 *d); void EmitOpenBag(u8 a, u8 *b); -void Emitcmd22(u8 a, u8 b, u8 c, u8 d, u8 *e); +void EmitChoosePokemon(u8 a, u8 b, u8 c, u8 d, u8 *e); void Emitcmd23(u8 a); void EmitHealthBarUpdate(u8 a, u16 b); void EmitExpBarUpdate(u8 a, u8 b, u16 c); diff --git a/src/battle_4.c b/src/battle_4.c index a3cfbc2de..a796ace94 100644 --- a/src/battle_4.c +++ b/src/battle_4.c @@ -10205,7 +10205,7 @@ void sub_8022A3C(u8 unkown) { //BATTLE_STRUCT->unk16064[gActiveBank] = gBattlePartyID[gActiveBank]; ewram[gActiveBank + 0x16064] = gBattlePartyID[gActiveBank]; - Emitcmd22(0, 1, unkown, 0, BATTLE_STRUCT->unk1606C[gActiveBank]); + EmitChoosePokemon(0, 1, unkown, 0, BATTLE_STRUCT->unk1606C[gActiveBank]); MarkBufferBankForExecution(gActiveBank); } @@ -11173,7 +11173,7 @@ _080231F8:\n\ movs r0, 0\n\ adds r1, r5, 0\n\ movs r3, 0\n\ - bl Emitcmd22\n\ + bl EmitChoosePokemon\n\ ldrb r0, [r4]\n\ bl MarkBufferBankForExecution\n\ ldr r0, [r6]\n\ diff --git a/src/rom3.c b/src/rom3.c index e9e664069..da2ea1357 100644 --- a/src/rom3.c +++ b/src/rom3.c @@ -1060,7 +1060,7 @@ void EmitOpenBag(u8 a, u8 *b) dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); } -void Emitcmd22(u8 a, u8 b, u8 c, u8 d, u8 *e) +void EmitChoosePokemon(u8 a, u8 b, u8 c, u8 d, u8 *e) { int i; -- cgit v1.2.3 From 25a5d62752233969e0c8bb8223ed3477b44bd1d0 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 27 Aug 2017 18:20:16 +0200 Subject: back to the define --- src/evolution_scene.c | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/evolution_scene.c b/src/evolution_scene.c index c4e7292b0..5d34d0d41 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -33,7 +33,7 @@ struct EvoInfo u8 field_3; }; -extern struct EvoInfo gEvoInfo; +#define sEvoInfo ((*(struct EvoInfo*)(ewram + 0x14800))) void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies); void sub_8024CEC(void); @@ -219,7 +219,7 @@ void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, GetMonSpriteTemplate_803C56C(currSpecies, 1); gUnknown_02024E8C.affineAnims = gDummySpriteAffineAnimTable; - gEvoInfo.preEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30); + sEvoInfo.preEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30); gSprites[ID].callback = nullsub_37; gSprites[ID].oam.paletteNum = 1; @@ -236,14 +236,14 @@ void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, GetMonSpriteTemplate_803C56C(speciesToEvolve, 3); gUnknown_02024E8C.affineAnims = gDummySpriteAffineAnimTable; - gEvoInfo.postEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30); + sEvoInfo.postEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30); gSprites[ID].callback = nullsub_37; gSprites[ID].oam.paletteNum = 2; gSprites[ID].invisible = 1; LoadEvoSparkleSpriteAndPal(); - gEvoInfo.evoTaskID = ID = CreateTask(Task_EvolutionScene, 0); + sEvoInfo.evoTaskID = ID = CreateTask(Task_EvolutionScene, 0); gTasks[ID].tState = 0; gTasks[ID].tPreEvoSpecies = currSpecies; gTasks[ID].tPostEvoSpecies = speciesToEvolve; @@ -269,9 +269,9 @@ static void CB2_EvolutionSceneLoadGraphics(void) const struct CompressedSpritePalette** pokePal; u16 postEvoSpecies; u32 TiD, PiD; - struct Pokemon* Mon = &gPlayerParty[gTasks[gEvoInfo.evoTaskID].tPartyID]; + struct Pokemon* Mon = &gPlayerParty[gTasks[sEvoInfo.evoTaskID].tPartyID]; - postEvoSpecies = gTasks[gEvoInfo.evoTaskID].tPostEvoSpecies; + postEvoSpecies = gTasks[sEvoInfo.evoTaskID].tPostEvoSpecies; TiD = GetMonData(Mon, MON_DATA_OT_ID); PiD = GetMonData(Mon, MON_DATA_PERSONALITY); @@ -316,7 +316,7 @@ static void CB2_EvolutionSceneLoadGraphics(void) GetMonSpriteTemplate_803C56C(postEvoSpecies, 3); gUnknown_02024E8C.affineAnims = gDummySpriteAffineAnimTable; - gEvoInfo.postEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30); + sEvoInfo.postEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30); gSprites[ID].callback = nullsub_37; gSprites[ID].oam.paletteNum = 2; @@ -330,8 +330,8 @@ static void CB2_EvolutionSceneLoadGraphics(void) static void CB2_TradeEvolutionSceneLoadGraphics(void) { - struct Pokemon* Mon = &gPlayerParty[gTasks[gEvoInfo.evoTaskID].tPartyID]; - u16 postEvoSpecies = gTasks[gEvoInfo.evoTaskID].tPostEvoSpecies; + struct Pokemon* Mon = &gPlayerParty[gTasks[sEvoInfo.evoTaskID].tPartyID]; + u16 postEvoSpecies = gTasks[sEvoInfo.evoTaskID].tPostEvoSpecies; switch (gMain.state) { @@ -392,7 +392,7 @@ static void CB2_TradeEvolutionSceneLoadGraphics(void) GetMonSpriteTemplate_803C56C(postEvoSpecies, 3); gUnknown_02024E8C.affineAnims = gDummySpriteAffineAnimTable; - gEvoInfo.postEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30); + sEvoInfo.postEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30); gSprites[ID].callback = nullsub_37; gSprites[ID].oam.paletteNum = 2; @@ -425,7 +425,7 @@ void TradeEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8 preEvoSpri currSpecies = GetMonData(mon, MON_DATA_SPECIES); PiD = GetMonData(mon, MON_DATA_PERSONALITY); TiD = GetMonData(mon, MON_DATA_OT_ID); - gEvoInfo.preEvoSpriteID = preEvoSpriteID; + sEvoInfo.preEvoSpriteID = preEvoSpriteID; DecompressPicFromTable_2(&gMonFrontPicTable[speciesToEvolve], gMonFrontPicCoords[speciesToEvolve].coords, gMonFrontPicCoords[speciesToEvolve].y_offset, @@ -436,7 +436,7 @@ void TradeEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8 preEvoSpri GetMonSpriteTemplate_803C56C(speciesToEvolve, 1); gUnknown_02024E8C.affineAnims = gDummySpriteAffineAnimTable; - gEvoInfo.postEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30); + sEvoInfo.postEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30); gSprites[ID].callback = nullsub_37; gSprites[ID].oam.paletteNum = 2; @@ -444,7 +444,7 @@ void TradeEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8 preEvoSpri LoadEvoSparkleSpriteAndPal(); - gEvoInfo.evoTaskID = ID = CreateTask(Task_TradeEvolutionScene, 0); + sEvoInfo.evoTaskID = ID = CreateTask(Task_TradeEvolutionScene, 0); gTasks[ID].tState = 0; gTasks[ID].tPreEvoSpecies = currSpecies; gTasks[ID].tPostEvoSpecies = speciesToEvolve; @@ -531,7 +531,7 @@ static void Task_EvolutionScene(u8 taskID) { case 0: BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); - gSprites[gEvoInfo.preEvoSpriteID].invisible = 0; + gSprites[sEvoInfo.preEvoSpriteID].invisible = 0; gTasks[taskID].tState++; break; case 1: // print 'whoa, poke is evolving!!!' msg @@ -575,21 +575,21 @@ static void Task_EvolutionScene(u8 taskID) if (!gTasks[sEvoGraphicsTaskID].isActive) { gTasks[taskID].tState++; - gEvoInfo.field_3 = 1; + sEvoInfo.field_3 = 1; sEvoGraphicsTaskID = LaunchTask_PreEvoSparklesSet2(); } break; case 7: // launch task that flashes pre evo with post evo sprites if (!gTasks[sEvoGraphicsTaskID].isActive) { - sEvoGraphicsTaskID = sub_8149E7C(gEvoInfo.preEvoSpriteID, gEvoInfo.postEvoSpriteID); + sEvoGraphicsTaskID = sub_8149E7C(sEvoInfo.preEvoSpriteID, sEvoInfo.postEvoSpriteID); gTasks[taskID].tState++; } break; case 8: // wait for the above task to finish - if (--gEvoInfo.field_3 == 0) + if (--sEvoInfo.field_3 == 0) { - gEvoInfo.field_3 = 3; + sEvoInfo.field_3 = 3; if (!gTasks[sEvoGraphicsTaskID].isActive) gTasks[taskID].tState++; } @@ -918,21 +918,21 @@ static void Task_TradeEvolutionScene(u8 taskID) if (!gTasks[sEvoGraphicsTaskID].isActive) { gTasks[taskID].tState++; - gEvoInfo.field_3 = 1; + sEvoInfo.field_3 = 1; sEvoGraphicsTaskID = LaunchTask_PreEvoSparklesSet2(); } break; case 6: if (!gTasks[sEvoGraphicsTaskID].isActive) { - sEvoGraphicsTaskID = sub_8149E7C(gEvoInfo.preEvoSpriteID, gEvoInfo.postEvoSpriteID); + sEvoGraphicsTaskID = sub_8149E7C(sEvoInfo.preEvoSpriteID, sEvoInfo.postEvoSpriteID); gTasks[taskID].tState++; } break; case 7: - if (--gEvoInfo.field_3 == 0) + if (--sEvoInfo.field_3 == 0) { - gEvoInfo.field_3 = 3; + sEvoInfo.field_3 = 3; if (!gTasks[sEvoGraphicsTaskID].isActive) gTasks[taskID].tState++; } -- cgit v1.2.3 From 0340a09a1b45d6a663e8e9260986ca19d96ce34e Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 27 Aug 2017 18:27:56 +0200 Subject: delete sth from shared syms file --- shared_syms.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/shared_syms.txt b/shared_syms.txt index 17fc63271..571e0633e 100644 --- a/shared_syms.txt +++ b/shared_syms.txt @@ -10,9 +10,6 @@ unk_2007900 = 0x2007900; unk_2008000 = 0x2008000; -gEvoInfo = 0x2014800; - - unk_2015de0 = 0x2015de0; unk_2015e00 = 0x2015e00; unk_2016000 = 0x2016000; -- cgit v1.2.3 From df0edd693361f4f4e587a39360fd035e7cec8cda Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 27 Aug 2017 19:28:57 +0200 Subject: fix nonmatchings, add labels --- asm/battle_controller_linkopponent1.s | 2 +- asm/battle_controller_safari.s | 2 +- include/battle_message.h | 15 ++ include/rom3.h | 2 +- src/battle_controller_linkpartner.c | 2 +- src/battle_controller_player.c | 2 +- src/battle_controller_wally.c | 2 +- src/battle_message.c | 19 +- src/rom3.c | 455 +++++++++------------------------- 9 files changed, 138 insertions(+), 363 deletions(-) diff --git a/asm/battle_controller_linkopponent1.s b/asm/battle_controller_linkopponent1.s index e53531703..4fa523c83 100644 --- a/asm/battle_controller_linkopponent1.s +++ b/asm/battle_controller_linkopponent1.s @@ -1384,7 +1384,7 @@ LinkOpponentBufferExecCompleted: @ 8038004 movs r0, 0x2 movs r1, 0x4 mov r2, sp - bl dp01_prepare_buffer_wireless_probably + bl PrepareBufferDataTransferLink ldr r1, _08038054 @ =gBattleBufferA ldrb r0, [r4] lsls r0, 9 diff --git a/asm/battle_controller_safari.s b/asm/battle_controller_safari.s index 97bcd15b5..e98d4ccd0 100644 --- a/asm/battle_controller_safari.s +++ b/asm/battle_controller_safari.s @@ -466,7 +466,7 @@ SafariBufferExecCompleted: @ 812B7C0 movs r0, 0x2 movs r1, 0x4 mov r2, sp - bl dp01_prepare_buffer_wireless_probably + bl PrepareBufferDataTransferLink ldr r1, _0812B810 @ =gBattleBufferA ldrb r0, [r4] lsls r0, 9 diff --git a/include/battle_message.h b/include/battle_message.h index d115e5357..3e37a1ccd 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -1,6 +1,21 @@ #ifndef GUARD_BATTLE_MESSAGE_H #define GUARD_BATTLE_MESSAGE_H +struct StringInfoBattle +{ + u16 currentMove; + u16 lastMove; + u16 lastItem; + u8 lastAbility; + u8 scrActive; + u8 unk1605E; + u8 hpScale; + u8 StringBank; + u8 moveType; + u8 abilities[4]; + u8 textBuffs[3][0x10]; +}; + void BufferStringBattle(u16 stringID); u32 StrCpyDecodeToDisplayedStringBattle(const u8* src); u32 StrCpyDecodeBattle(const u8* src, u8* dst); diff --git a/include/rom3.h b/include/rom3.h index 95ef5cca4..81bb56df1 100644 --- a/include/rom3.h +++ b/include/rom3.h @@ -10,7 +10,7 @@ void sub_800B9A8(void); void sub_800BA78(void); void sub_800BD54(void); void sub_800BF28(void); -void dp01_prepare_buffer_wireless_probably(u8 a, u16, u8 *c); +void PrepareBufferDataTransferLink(u8 a, u16, u8 *c); void sub_800C1A8(u8); void sub_800C35C(void); void sub_800C47C(u8); diff --git a/src/battle_controller_linkpartner.c b/src/battle_controller_linkpartner.c index 4308a8a5c..7fd5261aa 100644 --- a/src/battle_controller_linkpartner.c +++ b/src/battle_controller_linkpartner.c @@ -501,7 +501,7 @@ void LinkPartnerBufferExecCompleted(void) if (gBattleTypeFlags & 2) { multiplayerId = GetMultiplayerId(); - dp01_prepare_buffer_wireless_probably(2, 4, &multiplayerId); + PrepareBufferDataTransferLink(2, 4, &multiplayerId); gBattleBufferA[gActiveBank][0] = 0x38; } else diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 269f20642..5cfdeefbe 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -346,7 +346,7 @@ void PlayerBufferExecCompleted(void) { u8 playerId = GetMultiplayerId(); - dp01_prepare_buffer_wireless_probably(2, 4, &playerId); + PrepareBufferDataTransferLink(2, 4, &playerId); gBattleBufferA[gActiveBank][0] = 0x38; } else diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c index 36e525bcc..e4b593df7 100644 --- a/src/battle_controller_wally.c +++ b/src/battle_controller_wally.c @@ -484,7 +484,7 @@ void WallyBufferExecCompleted(void) { u8 multiplayerId = GetMultiplayerId(); - dp01_prepare_buffer_wireless_probably(2, 4, &multiplayerId); + PrepareBufferDataTransferLink(2, 4, &multiplayerId); gBattleBufferA[gActiveBank][0] = 0x38; } else diff --git a/src/battle_message.c b/src/battle_message.c index 37ec14459..a3cc320ad 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -116,22 +116,7 @@ struct StatusFlagString extern const struct StatusFlagString gUnknown_081FA6D4[7]; // status flag/text extern const u8 gUnknown_084017A8[8]; // empty flags -struct StringInfo -{ - u16 currentMove; - u16 lastMove; - u16 lastItem; - u8 lastAbility; - u8 scrActive; - u8 unk1605E; - u8 hpScale; - u8 StringBank; - u8 moveType; - u8 abilities[4]; - u8 textBuffs[3][0x10]; -}; - -extern struct StringInfo* gSelectedOrderFromParty; +extern struct StringInfoBattle* gSelectedOrderFromParty; #define gStringInfo gSelectedOrderFromParty void sub_8121D1C(u8* textBuff); @@ -156,7 +141,7 @@ void BufferStringBattle(u16 stringID) int i; const u8* stringPtr = NULL; - gStringInfo = (struct StringInfo*)(&gBattleBufferA[gActiveBank][4]); + gStringInfo = (struct StringInfoBattle*)(&gBattleBufferA[gActiveBank][4]); gLastUsedItem = gStringInfo->lastItem; gLastUsedAbility = gStringInfo->lastAbility; BATTLE_STRUCT->scriptingActive = gStringInfo->scrActive; diff --git a/src/rom3.c b/src/rom3.c index da2ea1357..3b4b6a941 100644 --- a/src/rom3.c +++ b/src/rom3.c @@ -14,6 +14,8 @@ #include "species.h" #include "task.h" #include "util.h" +#include "battle_message.h" +#include "data2.h" extern u8 unk_2000000[]; @@ -343,30 +345,30 @@ void sub_800BD54(void) } } -void dp01_prepare_buffer(u8 a, u8 *b, u16 c) +void PrepareBufferDataTransfer(u8 a, u8 *data, u16 size) { int i; if (gBattleTypeFlags & BATTLE_TYPE_LINK) { - dp01_prepare_buffer_wireless_probably(a, c, b); + PrepareBufferDataTransferLink(a, size, data); } else { switch (a) { case 0: - for (i = 0; i < c; i++) + for (i = 0; i < size; i++) { - gBattleBufferA[gActiveBank][i] = *b; - b++; + gBattleBufferA[gActiveBank][i] = *data; + data++; } break; case 1: - for (i = 0; i < c; i++) + for (i = 0; i < size; i++) { - gBattleBufferB[gActiveBank][i] = *b; - b++; + gBattleBufferB[gActiveBank][i] = *data; + data++; } break; } @@ -390,12 +392,12 @@ void sub_800BF28(void) CpuFill16(0, EWRAM_14000, 0x2000); } -void dp01_prepare_buffer_wireless_probably(u8 a, u16 b, u8 *c) +void PrepareBufferDataTransferLink(u8 a, u16 size, u8 *data) { s32 r9; int i; - r9 = b - b % 4 + 4; + r9 = size - size % 4 + 4; if (gTasks[gUnknown_020238C4].data[14] + r9 + 9 > 0x1000) { gTasks[gUnknown_020238C4].data[12] = gTasks[gUnknown_020238C4].data[14]; @@ -409,8 +411,8 @@ void dp01_prepare_buffer_wireless_probably(u8 a, u16 b, u8 *c) unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14005] = (r9 & 0x0000FF00) >> 8; unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14006] = gAbsentBankFlags; unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14007] = gEffectBank; - for (i = 0; i < b; i++) - unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14008 + i] = c[i]; + for (i = 0; i < size; i++) + unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14008 + i] = data[i]; gTasks[gUnknown_020238C4].data[14] = gTasks[gUnknown_020238C4].data[14] + r9 + 8; } @@ -570,7 +572,7 @@ void EmitGetAttributes(u8 a, u8 b, u8 c) gBattleBuffersTransferData[1] = b; gBattleBuffersTransferData[2] = c; gBattleBuffersTransferData[3] = 0; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); } void Emitcmd1(u8 a, u8 b, u8 c) @@ -579,7 +581,7 @@ void Emitcmd1(u8 a, u8 b, u8 c) gBattleBuffersTransferData[1] = b; gBattleBuffersTransferData[2] = c; gBattleBuffersTransferData[3] = 0; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); } void EmitSetAttributes(u8 a, u8 b, u8 c, u8 d, void *e) @@ -591,7 +593,7 @@ void EmitSetAttributes(u8 a, u8 b, u8 c, u8 d, void *e) gBattleBuffersTransferData[2] = c; for (i = 0; i < d; i++) gBattleBuffersTransferData[3 + i] = *(u8*)(e++); - dp01_prepare_buffer(a, gBattleBuffersTransferData, d + 3); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, d + 3); } void Emitcmd3(u8 a, u8 b, u8 c, u8 *d) @@ -603,7 +605,7 @@ void Emitcmd3(u8 a, u8 b, u8 c, u8 *d) gBattleBuffersTransferData[2] = c; for (i = 0; i < c; i++) gBattleBuffersTransferData[3 + i] = *(d++); - dp01_prepare_buffer(a, gBattleBuffersTransferData, c + 3); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, c + 3); } void EmitLoadPokeSprite(u8 a) @@ -612,7 +614,7 @@ void EmitLoadPokeSprite(u8 a) gBattleBuffersTransferData[1] = 4; gBattleBuffersTransferData[2] = 4; gBattleBuffersTransferData[3] = 4; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); } void EmitSendOutPoke(u8 a, u8 b, u8 c) @@ -621,14 +623,14 @@ void EmitSendOutPoke(u8 a, u8 b, u8 c) gBattleBuffersTransferData[1] = b; gBattleBuffersTransferData[2] = c; gBattleBuffersTransferData[3] = 5; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); } void EmitReturnPokeToBall(u8 a, u8 b) { gBattleBuffersTransferData[0] = 6; gBattleBuffersTransferData[1] = b; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 2); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2); } void EmitTrainerThrow(u8 a) @@ -637,7 +639,7 @@ void EmitTrainerThrow(u8 a) gBattleBuffersTransferData[1] = 7; gBattleBuffersTransferData[2] = 7; gBattleBuffersTransferData[3] = 7; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); } void EmitTrainerSlide(u8 a) @@ -646,7 +648,7 @@ void EmitTrainerSlide(u8 a) gBattleBuffersTransferData[1] = 8; gBattleBuffersTransferData[2] = 8; gBattleBuffersTransferData[3] = 8; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); } void EmitTrainerSlideBack(u8 a) @@ -655,7 +657,7 @@ void EmitTrainerSlideBack(u8 a) gBattleBuffersTransferData[1] = 9; gBattleBuffersTransferData[2] = 9; gBattleBuffersTransferData[3] = 9; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); } void Emitcmd10(u8 a) @@ -664,7 +666,7 @@ void Emitcmd10(u8 a) gBattleBuffersTransferData[1] = 10; gBattleBuffersTransferData[2] = 10; gBattleBuffersTransferData[3] = 10; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); } void Emitcmd11(u8 a) @@ -673,7 +675,7 @@ void Emitcmd11(u8 a) gBattleBuffersTransferData[1] = 11; gBattleBuffersTransferData[2] = 11; gBattleBuffersTransferData[3] = 11; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); } void Emitcmd12(u8 a) @@ -682,14 +684,14 @@ void Emitcmd12(u8 a) gBattleBuffersTransferData[1] = 12; gBattleBuffersTransferData[2] = 12; gBattleBuffersTransferData[3] = 12; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); } void EmitBallThrow(u8 a, u8 b) { gBattleBuffersTransferData[0] = 13; gBattleBuffersTransferData[1] = b; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 2); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2); } void EmitPuase(u8 a, u8 b, u8 *c) @@ -700,7 +702,7 @@ void EmitPuase(u8 a, u8 b, u8 *c) gBattleBuffersTransferData[1] = b; for (i = 0; i < b * 3; i++) gBattleBuffersTransferData[2 + i] = *(c++); - dp01_prepare_buffer(a, gBattleBuffersTransferData, b * 3 + 2); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, b * 3 + 2); } void EmitMoveAnimation(u8 a, u16 b, u8 c, u16 d, s32 e, u8 f, struct DisableStruct *g) @@ -730,295 +732,68 @@ void EmitMoveAnimation(u8 a, u16 b, u8 c, u16 d, s32 e, u8 f, struct DisableStru gBattleBuffersTransferData[14] = 0; gBattleBuffersTransferData[15] = 0; memcpy(&gBattleBuffersTransferData[16], g, sizeof(*g)); - dp01_prepare_buffer(a, gBattleBuffersTransferData, 0x2C); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 0x2C); } -#ifdef NONMATCHING -void EmitPrintString(u8 a, u16 b) +void EmitPrintString(u8 a, u16 stringID) { - int i; - //u16 *r12; + s32 i; + struct StringInfoBattle* stringInfo; gBattleBuffersTransferData[0] = 16; gBattleBuffersTransferData[1] = gBattleOutcome; - gBattleBuffersTransferData[2] = b; - gBattleBuffersTransferData[3] = (b & 0xFF00) >> 8; - - *((u16 *)&gBattleBuffersTransferData[4]) = gCurrentMove; - *((u16 *)&gBattleBuffersTransferData[6]) = gUnknown_02024BE8; - *((u16 *)&gBattleBuffersTransferData[8]) = gLastUsedItem; + gBattleBuffersTransferData[2] = stringID; + gBattleBuffersTransferData[3] = (stringID & 0xFF00) >> 8; + + stringInfo = (struct StringInfoBattle*)(&gBattleBuffersTransferData[4]); + stringInfo->currentMove = gCurrentMove; + stringInfo->lastMove = gUnknown_02024BE8; + stringInfo->lastItem = gLastUsedItem; + stringInfo->lastAbility = gLastUsedAbility; + stringInfo->scrActive = BATTLE_STRUCT->scriptingActive; + stringInfo->unk1605E = BATTLE_STRUCT->unk1605E; + stringInfo->hpScale = BATTLE_STRUCT->hpScale; + stringInfo->StringBank = gStringBank; + stringInfo->moveType = gBattleMoves[gCurrentMove].type; - gBattleBuffersTransferData[10] = gLastUsedAbility; - gBattleBuffersTransferData[11] = unk_2000000[0x16000 + 3]; - gBattleBuffersTransferData[12] = unk_2000000[0x16000 + 0x5E]; - gBattleBuffersTransferData[13] = unk_2000000[0x16000 + 0xC1]; - gBattleBuffersTransferData[14] = gStringBank; - gBattleBuffersTransferData[15] = gBattleMoves[gCurrentMove].type; for (i = 0; i < 4; i++) + stringInfo->abilities[i] = gBattleMons[i].ability; + for (i = 0; i < 0x10; i++) { - gBattleBuffersTransferData[16 + i] = gBattleMons[i].ability; - } - for (i = 0; i < 16; i++) - { - gBattleBuffersTransferData[20 + i] = gBattleTextBuff1[i]; - gBattleBuffersTransferData[36 + i] = gBattleTextBuff2[i]; - gBattleBuffersTransferData[52 + i] = gBattleTextBuff3[i]; + stringInfo->textBuffs[0][i] = gBattleTextBuff1[i]; + stringInfo->textBuffs[1][i] = gBattleTextBuff2[i]; + stringInfo->textBuffs[2][i] = gBattleTextBuff3[i]; } - dp01_prepare_buffer(a, gBattleBuffersTransferData, 0x44); -} -#else -__attribute__((naked)) -void EmitPrintString(u8 a, u16 b) -{ - 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\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r10, r0\n\ - lsls r1, 16\n\ - lsrs r1, 16\n\ - ldr r2, _0800CA2C @ =gBattleBuffersTransferData\n\ - movs r0, 0x10\n\ - strb r0, [r2]\n\ - ldr r0, _0800CA30 @ =gBattleOutcome\n\ - ldrb r0, [r0]\n\ - strb r0, [r2, 0x1]\n\ - strb r1, [r2, 0x2]\n\ - lsrs r1, 8\n\ - strb r1, [r2, 0x3]\n\ - adds r0, r2, 0x4\n\ - mov r12, r0\n\ - ldr r4, _0800CA34 @ =gCurrentMove\n\ - ldrh r0, [r4]\n\ - strh r0, [r2, 0x4]\n\ - ldr r0, _0800CA38 @ =gUnknown_02024BE8\n\ - ldrh r0, [r0]\n\ - mov r1, r12\n\ - strh r0, [r1, 0x2]\n\ - ldr r0, _0800CA3C @ =gLastUsedItem\n\ - ldrh r0, [r0]\n\ - strh r0, [r1, 0x4]\n\ - ldr r0, _0800CA40 @ =gLastUsedAbility\n\ - ldrb r0, [r0]\n\ - strb r0, [r1, 0x6]\n\ - ldr r1, _0800CA44 @ =0x02000000\n\ - ldr r3, _0800CA48 @ =0x00016003\n\ - adds r0, r1, r3\n\ - ldrb r0, [r0]\n\ - mov r7, r12\n\ - strb r0, [r7, 0x7]\n\ - adds r3, 0x5B\n\ - adds r0, r1, r3\n\ - ldrb r0, [r0]\n\ - strb r0, [r7, 0x8]\n\ - ldr r7, _0800CA4C @ =0x000160c1\n\ - adds r1, r7\n\ - ldrb r0, [r1]\n\ - mov r1, r12\n\ - strb r0, [r1, 0x9]\n\ - ldr r0, _0800CA50 @ =gStringBank\n\ - ldrb r0, [r0]\n\ - strb r0, [r1, 0xA]\n\ - ldr r3, _0800CA54 @ =gBattleMoves\n\ - ldrh r1, [r4]\n\ - lsls r0, r1, 1\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r3\n\ - ldrb r0, [r0, 0x2]\n\ - mov r3, r12\n\ - strb r0, [r3, 0xB]\n\ - movs r3, 0\n\ - mov r9, r2\n\ - ldr r7, _0800CA58 @ =gBattleTextBuff3\n\ - mov r8, r7\n\ - adds r2, 0x10\n\ - ldr r0, _0800CA5C @ =gBattleMons\n\ - adds r4, r0, 0\n\ - adds r4, 0x20\n\ -_0800C9D2:\n\ - adds r1, r2, r3\n\ - ldrb r0, [r4]\n\ - strb r0, [r1]\n\ - adds r4, 0x58\n\ - adds r3, 0x1\n\ - cmp r3, 0x3\n\ - ble _0800C9D2\n\ - movs r3, 0\n\ - mov r5, r12\n\ - adds r5, 0x10\n\ - mov r4, r12\n\ - adds r4, 0x20\n\ - ldr r6, _0800CA60 @ =gBattleTextBuff2\n\ - mov r2, r12\n\ - adds r2, 0x30\n\ -_0800C9F0:\n\ - adds r1, r5, r3\n\ - ldr r7, _0800CA64 @ =gBattleTextBuff1\n\ - adds r0, r3, r7\n\ - ldrb r0, [r0]\n\ - strb r0, [r1]\n\ - adds r1, r4, r3\n\ - adds r0, r3, r6\n\ - ldrb r0, [r0]\n\ - strb r0, [r1]\n\ - adds r1, r2, r3\n\ - mov r7, r8\n\ - adds r0, r3, r7\n\ - ldrb r0, [r0]\n\ - strb r0, [r1]\n\ - adds r3, 0x1\n\ - cmp r3, 0xF\n\ - ble _0800C9F0\n\ - mov r0, r10\n\ - mov r1, r9\n\ - movs r2, 0x44\n\ - bl dp01_prepare_buffer\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\ -_0800CA2C: .4byte gBattleBuffersTransferData\n\ -_0800CA30: .4byte gBattleOutcome\n\ -_0800CA34: .4byte gCurrentMove\n\ -_0800CA38: .4byte gUnknown_02024BE8\n\ -_0800CA3C: .4byte gLastUsedItem\n\ -_0800CA40: .4byte gLastUsedAbility\n\ -_0800CA44: .4byte 0x02000000\n\ -_0800CA48: .4byte 0x00016003\n\ -_0800CA4C: .4byte 0x000160c1\n\ -_0800CA50: .4byte gStringBank\n\ -_0800CA54: .4byte gBattleMoves\n\ -_0800CA58: .4byte gBattleTextBuff3\n\ -_0800CA5C: .4byte gBattleMons\n\ -_0800CA60: .4byte gBattleTextBuff2\n\ -_0800CA64: .4byte gBattleTextBuff1\n\ - .syntax divided\n"); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, sizeof(struct StringInfoBattle) + 4); } -#endif -__attribute__((naked)) void EmitPrintStringPlayerOnly(u8 a, u16 stringID) { - 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\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r10, r0\n\ - lsls r1, 16\n\ - lsrs r1, 16\n\ - ldr r2, _0800CB28 @ =gBattleBuffersTransferData\n\ - movs r0, 0x11\n\ - strb r0, [r2]\n\ - strb r0, [r2, 0x1]\n\ - strb r1, [r2, 0x2]\n\ - lsrs r1, 8\n\ - strb r1, [r2, 0x3]\n\ - adds r0, r2, 0x4\n\ - mov r12, r0\n\ - ldr r0, _0800CB2C @ =gCurrentMove\n\ - ldrh r0, [r0]\n\ - strh r0, [r2, 0x4]\n\ - ldr r0, _0800CB30 @ =gUnknown_02024BE8\n\ - ldrh r0, [r0]\n\ - mov r1, r12\n\ - strh r0, [r1, 0x2]\n\ - ldr r0, _0800CB34 @ =gLastUsedItem\n\ - ldrh r0, [r0]\n\ - strh r0, [r1, 0x4]\n\ - ldr r0, _0800CB38 @ =gLastUsedAbility\n\ - ldrb r0, [r0]\n\ - strb r0, [r1, 0x6]\n\ - ldr r0, _0800CB3C @ =0x02000000\n\ - ldr r3, _0800CB40 @ =0x00016003\n\ - adds r1, r0, r3\n\ - ldrb r1, [r1]\n\ - mov r7, r12\n\ - strb r1, [r7, 0x7]\n\ - ldr r1, _0800CB44 @ =0x0001605e\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - strb r0, [r7, 0x8]\n\ - movs r3, 0\n\ - mov r9, r2\n\ - ldr r7, _0800CB48 @ =gBattleTextBuff3\n\ - mov r8, r7\n\ - mov r4, r9\n\ - adds r4, 0x10\n\ - ldr r0, _0800CB4C @ =gBattleMons\n\ - adds r2, r0, 0\n\ - adds r2, 0x20\n\ -_0800CACE:\n\ - adds r1, r4, r3\n\ - ldrb r0, [r2]\n\ - strb r0, [r1]\n\ - adds r2, 0x58\n\ - adds r3, 0x1\n\ - cmp r3, 0x3\n\ - ble _0800CACE\n\ - movs r3, 0\n\ - mov r5, r12\n\ - adds r5, 0x10\n\ - mov r4, r12\n\ - adds r4, 0x20\n\ - ldr r6, _0800CB50 @ =gBattleTextBuff2\n\ - mov r2, r12\n\ - adds r2, 0x30\n\ -_0800CAEC:\n\ - adds r1, r5, r3\n\ - ldr r7, _0800CB54 @ =gBattleTextBuff1\n\ - adds r0, r3, r7\n\ - ldrb r0, [r0]\n\ - strb r0, [r1]\n\ - adds r1, r4, r3\n\ - adds r0, r3, r6\n\ - ldrb r0, [r0]\n\ - strb r0, [r1]\n\ - adds r1, r2, r3\n\ - mov r7, r8\n\ - adds r0, r3, r7\n\ - ldrb r0, [r0]\n\ - strb r0, [r1]\n\ - adds r3, 0x1\n\ - cmp r3, 0xF\n\ - ble _0800CAEC\n\ - mov r0, r10\n\ - mov r1, r9\n\ - movs r2, 0x44\n\ - bl dp01_prepare_buffer\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\ -_0800CB28: .4byte gBattleBuffersTransferData\n\ -_0800CB2C: .4byte gCurrentMove\n\ -_0800CB30: .4byte gUnknown_02024BE8\n\ -_0800CB34: .4byte gLastUsedItem\n\ -_0800CB38: .4byte gLastUsedAbility\n\ -_0800CB3C: .4byte 0x02000000\n\ -_0800CB40: .4byte 0x00016003\n\ -_0800CB44: .4byte 0x0001605e\n\ -_0800CB48: .4byte gBattleTextBuff3\n\ -_0800CB4C: .4byte gBattleMons\n\ -_0800CB50: .4byte gBattleTextBuff2\n\ -_0800CB54: .4byte gBattleTextBuff1\n\ - .syntax divided\n"); + s32 i; + struct StringInfoBattle* stringInfo; + + gBattleBuffersTransferData[0] = 17; + gBattleBuffersTransferData[1] = 17; + gBattleBuffersTransferData[2] = stringID; + gBattleBuffersTransferData[3] = (stringID & 0xFF00) >> 8; + + stringInfo = (struct StringInfoBattle*)(&gBattleBuffersTransferData[4]); + stringInfo->currentMove = gCurrentMove; + stringInfo->lastMove = gUnknown_02024BE8; + stringInfo->lastItem = gLastUsedItem; + stringInfo->lastAbility = gLastUsedAbility; + stringInfo->scrActive = BATTLE_STRUCT->scriptingActive; + stringInfo->unk1605E = BATTLE_STRUCT->unk1605E; + + for (i = 0; i < 4; i++) + stringInfo->abilities[i] = gBattleMons[i].ability; + for (i = 0; i < 0x10; i++) + { + stringInfo->textBuffs[0][i] = gBattleTextBuff1[i]; + stringInfo->textBuffs[1][i] = gBattleTextBuff2[i]; + stringInfo->textBuffs[2][i] = gBattleTextBuff3[i]; + } + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, sizeof(struct StringInfoBattle) + 4); } void Emitcmd18(u8 a, u8 b, u16 c) @@ -1027,14 +802,14 @@ void Emitcmd18(u8 a, u8 b, u16 c) gBattleBuffersTransferData[1] = b; gBattleBuffersTransferData[2] = c; gBattleBuffersTransferData[3] = (c & 0xFF00) >> 8; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); } void Emitcmd19(u8 a, u8 b) { gBattleBuffersTransferData[0] = 19; gBattleBuffersTransferData[1] = b; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 2); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2); } void Emitcmd20(u8 a, u8 b, u8 c, u8 *d) @@ -1047,7 +822,7 @@ void Emitcmd20(u8 a, u8 b, u8 c, u8 *d) gBattleBuffersTransferData[3] = 0; for (i = 0; i < 20; i++) gBattleBuffersTransferData[4 + i] = d[i]; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 24); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 24); } void EmitOpenBag(u8 a, u8 *b) @@ -1057,7 +832,7 @@ void EmitOpenBag(u8 a, u8 *b) gBattleBuffersTransferData[0] = 21; for (i = 0; i < 3; i++) gBattleBuffersTransferData[1 + i] = b[i]; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); } void EmitChoosePokemon(u8 a, u8 b, u8 c, u8 d, u8 *e) @@ -1070,7 +845,7 @@ void EmitChoosePokemon(u8 a, u8 b, u8 c, u8 d, u8 *e) gBattleBuffersTransferData[3] = d; for (i = 0; i < 3; i++) gBattleBuffersTransferData[4 + i] = e[i]; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 8); //but only 7 bytes were written + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 8); //but only 7 bytes were written } void Emitcmd23(u8 a) @@ -1079,7 +854,7 @@ void Emitcmd23(u8 a) gBattleBuffersTransferData[1] = 23; gBattleBuffersTransferData[2] = 23; gBattleBuffersTransferData[3] = 23; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); } // FIXME: I think this function is supposed to take s16 as its second argument, @@ -1090,7 +865,7 @@ void EmitHealthBarUpdate(u8 a, u16 b) gBattleBuffersTransferData[1] = 0; gBattleBuffersTransferData[2] = (s16)b; gBattleBuffersTransferData[3] = ((s16)b & 0xFF00) >> 8; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); } // FIXME: I think this function is supposed to take s16 as its third argument, @@ -1101,7 +876,7 @@ void EmitExpBarUpdate(u8 a, u8 b, u16 c) gBattleBuffersTransferData[1] = b; gBattleBuffersTransferData[2] = (s16)c; gBattleBuffersTransferData[3] = ((s16)c & 0xFF00) >> 8; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); } void EmitStatusIconUpdate(u8 a, u32 b, u32 c) @@ -1115,7 +890,7 @@ void EmitStatusIconUpdate(u8 a, u32 b, u32 c) gBattleBuffersTransferData[6] = (c & 0x0000FF00) >> 8; gBattleBuffersTransferData[7] = (c & 0x00FF0000) >> 16; gBattleBuffersTransferData[8] = (c & 0xFF000000) >> 24; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 9); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 9); } void EmitStatusAnimation(u8 a, u8 b, u32 c) @@ -1126,14 +901,14 @@ void EmitStatusAnimation(u8 a, u8 b, u32 c) gBattleBuffersTransferData[3] = (c & 0x0000FF00) >> 8; gBattleBuffersTransferData[4] = (c & 0x00FF0000) >> 16; gBattleBuffersTransferData[5] = (c & 0xFF000000) >> 24; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 6); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 6); } void EmitStatusXor(u8 a, u8 b) { gBattleBuffersTransferData[0] = 28; gBattleBuffersTransferData[1] = b; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 2); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2); } void Emitcmd29(u8 a, u16 b, u8 *c) @@ -1146,7 +921,7 @@ void Emitcmd29(u8 a, u16 b, u8 *c) gBattleBuffersTransferData[3] = (b & 0xFF00) >> 8; for (i = 0; i < b; i++) gBattleBuffersTransferData[4 + i] = *(c++); - dp01_prepare_buffer(a, gBattleBuffersTransferData, b + 4); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, b + 4); } void EmitDMATransfer(u8 a, u32 b, u16 c, u8 *d) @@ -1162,7 +937,7 @@ void EmitDMATransfer(u8 a, u32 b, u16 c, u8 *d) gBattleBuffersTransferData[6] = (c & 0xFF00) >> 8; for (i = 0; i < c; i++) gBattleBuffersTransferData[7 + i] = *(d++); - dp01_prepare_buffer(a, gBattleBuffersTransferData, c + 7); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, c + 7); } void Emitcmd31(u8 a, u16 b, u8 *c) @@ -1174,7 +949,7 @@ void Emitcmd31(u8 a, u16 b, u8 *c) gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; for (i = 0; i < b; i++) gBattleBuffersTransferData[3 + i] = *(c++); - dp01_prepare_buffer(a, gBattleBuffersTransferData, b + 3); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, b + 3); } void Emitcmd32(u8 a, u16 b, u8 *c) @@ -1186,7 +961,7 @@ void Emitcmd32(u8 a, u16 b, u8 *c) gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; for (i = 0; i < b; i++) gBattleBuffersTransferData[3 + i] = *(c++); - dp01_prepare_buffer(a, gBattleBuffersTransferData, b + 3); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, b + 3); } void Emitcmd33(u8 a, u8 b, u16 c) @@ -1195,7 +970,7 @@ void Emitcmd33(u8 a, u8 b, u16 c) gBattleBuffersTransferData[1] = b; gBattleBuffersTransferData[2] = c; gBattleBuffersTransferData[3] = (c & 0xFF00) >> 8; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); } void Emitcmd34(u8 a, u8 b, u8 *c) @@ -1206,7 +981,7 @@ void Emitcmd34(u8 a, u8 b, u8 *c) gBattleBuffersTransferData[1] = b; for (i = 0; i < 3; i++) gBattleBuffersTransferData[2 + i] = c[i]; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 5); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 5); } void Emitcmd35(u8 a, u16 b) @@ -1215,7 +990,7 @@ void Emitcmd35(u8 a, u16 b) gBattleBuffersTransferData[1] = b; gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; gBattleBuffersTransferData[3] = 0; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); } void Emitcmd36(u8 a, u16 b) @@ -1224,7 +999,7 @@ void Emitcmd36(u8 a, u16 b) gBattleBuffersTransferData[1] = b; gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; gBattleBuffersTransferData[3] = 0; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); } void Emitcmd37(u8 a) @@ -1233,14 +1008,14 @@ void Emitcmd37(u8 a) gBattleBuffersTransferData[1] = 37; gBattleBuffersTransferData[2] = 37; gBattleBuffersTransferData[3] = 37; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); } void Emitcmd38(u8 a, u8 b) { gBattleBuffersTransferData[0] = 38; gBattleBuffersTransferData[1] = b; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 2); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2); } void Emitcmd39(u8 a) @@ -1249,7 +1024,7 @@ void Emitcmd39(u8 a) gBattleBuffersTransferData[1] = 39; gBattleBuffersTransferData[2] = 39; gBattleBuffersTransferData[3] = 39; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); } void Emitcmd40(u8 a) @@ -1258,7 +1033,7 @@ void Emitcmd40(u8 a) gBattleBuffersTransferData[1] = 40; gBattleBuffersTransferData[2] = 40; gBattleBuffersTransferData[3] = 40; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); } void EmitHitAnimation(u8 a) @@ -1267,7 +1042,7 @@ void EmitHitAnimation(u8 a) gBattleBuffersTransferData[1] = 41; gBattleBuffersTransferData[2] = 41; gBattleBuffersTransferData[3] = 41; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); } void Emitcmd42(u8 a) @@ -1276,7 +1051,7 @@ void Emitcmd42(u8 a) gBattleBuffersTransferData[1] = 42; gBattleBuffersTransferData[2] = 42; gBattleBuffersTransferData[3] = 42; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); } void EmitEffectivenessSound(u8 a, u16 b) @@ -1285,7 +1060,7 @@ void EmitEffectivenessSound(u8 a, u16 b) gBattleBuffersTransferData[1] = b; gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; gBattleBuffersTransferData[3] = 0; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); } void Emitcmd44(u8 a, u16 b) @@ -1294,7 +1069,7 @@ void Emitcmd44(u8 a, u16 b) gBattleBuffersTransferData[1] = b; gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; gBattleBuffersTransferData[3] = 0; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); } void EmitFaintingCry(u8 a) @@ -1303,14 +1078,14 @@ void EmitFaintingCry(u8 a) gBattleBuffersTransferData[1] = 45; gBattleBuffersTransferData[2] = 45; gBattleBuffersTransferData[3] = 45; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); } void EmitIntroSlide(u8 a, u8 b) { gBattleBuffersTransferData[0] = 46; gBattleBuffersTransferData[1] = b; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 2); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2); } void EmitTrainerBallThrow(u8 a) @@ -1319,7 +1094,7 @@ void EmitTrainerBallThrow(u8 a) gBattleBuffersTransferData[1] = 47; gBattleBuffersTransferData[2] = 47; gBattleBuffersTransferData[3] = 47; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); } void Emitcmd48(u8 a, u8 *b, u8 c) @@ -1332,7 +1107,7 @@ void Emitcmd48(u8 a, u8 *b, u8 c) gBattleBuffersTransferData[3] = 48; for (i = 0; i < 48; i++) gBattleBuffersTransferData[4 + i] = b[i]; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 52); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 52); } void Emitcmd49(u8 a) @@ -1341,7 +1116,7 @@ void Emitcmd49(u8 a) gBattleBuffersTransferData[1] = 49; gBattleBuffersTransferData[2] = 49; gBattleBuffersTransferData[3] = 49; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); } void Emitcmd50(u8 a) @@ -1350,7 +1125,7 @@ void Emitcmd50(u8 a) gBattleBuffersTransferData[1] = 50; gBattleBuffersTransferData[2] = 50; gBattleBuffersTransferData[3] = 50; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); } void EmitSpriteInvisibility(u8 a, u8 b) @@ -1359,7 +1134,7 @@ void EmitSpriteInvisibility(u8 a, u8 b) gBattleBuffersTransferData[1] = b; gBattleBuffersTransferData[2] = 51; gBattleBuffersTransferData[3] = 51; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); } void EmitBattleAnimation(u8 a, u8 b, u16 c) @@ -1368,26 +1143,26 @@ void EmitBattleAnimation(u8 a, u8 b, u16 c) gBattleBuffersTransferData[1] = b; gBattleBuffersTransferData[2] = c; gBattleBuffersTransferData[3] = (c & 0xFF00) >> 8; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); } void EmitLinkStandbyMsg(u8 a, u8 b) { gBattleBuffersTransferData[0] = 53; gBattleBuffersTransferData[1] = b; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 2); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2); } void EmitResetActionMoveSelection(u8 a, u8 b) { gBattleBuffersTransferData[0] = 54; gBattleBuffersTransferData[1] = b; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 2); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2); } void Emitcmd55(u8 a, u8 b) { gBattleBuffersTransferData[0] = 55; gBattleBuffersTransferData[1] = b; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 2); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2); } -- cgit v1.2.3 From 2c700bb131d1fac95b587e1c188fac67ab97b40e Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 27 Aug 2017 22:17:24 +0200 Subject: clean up and match damage calc --- src/calculate_base_damage.c | 1318 +++---------------------------------------- 1 file changed, 78 insertions(+), 1240 deletions(-) diff --git a/src/calculate_base_damage.c b/src/calculate_base_damage.c index 0f2605e5b..5044145b3 100644 --- a/src/calculate_base_damage.c +++ b/src/calculate_base_damage.c @@ -7,52 +7,37 @@ #include "hold_effects.h" #include "item.h" #include "items.h" -#include "main.h" #include "pokemon.h" #include "species.h" -#include "sprite.h" -#include "string_util.h" -#include "strings2.h" -#include "text.h" +#include "moves.h" +#include "battle_move_effects.h" -extern u8 gPlayerPartyCount; -extern u8 gEnemyPartyCount; - -extern u16 unk_20160BC[]; -extern struct SecretBaseRecord gSecretBaseRecord; extern u32 dword_2017100[]; extern u16 gBattleTypeFlags; extern struct BattlePokemon gBattleMons[4]; extern u16 gCurrentMove; -extern u8 gLastUsedAbility; extern u8 gCritMultiplier; extern u16 gBattleWeather; extern struct BattleEnigmaBerry gEnigmaBerries[]; extern u16 gBattleMovePower; -extern struct SpriteTemplate gUnknown_02024E8C; extern u16 gTrainerBattleOpponent; -extern struct PokemonStorage gPokemonStorage; -extern u8 gBadEggNickname[]; -extern struct SpriteTemplate gSpriteTemplate_8208288[]; -extern u8 gTrainerClassToPicIndex[]; -extern u8 gTrainerClassToNameIndex[]; -extern u8 gUnknown_08208238[]; -extern u8 gUnknown_0820823C[]; -extern u8 gStatStageRatios[]; -extern u8 gHoldEffectToType[][2]; +extern const u8 gHoldEffectToType[][2]; +extern const u8 gStatStageRatios[][2]; + +u8 GetBankSide(u8 bank); -#define APPLY_STAT_MOD(var, mon, stat, statIndex) \ -{ \ - (var) = (stat) * (gStatStageRatios)[(mon)->statStages[(statIndex)] * 2]; \ - (var) /= (gStatStageRatios + 1)[(mon)->statStages[(statIndex)] * 2]; \ +#define APPLY_STAT_MOD(var, mon, stat, statIndex) \ +{ \ + (var) = (stat) * (gStatStageRatios)[(mon)->statStages[(statIndex)]][0]; \ + (var) /= (gStatStageRatios)[(mon)->statStages[(statIndex)]][1]; \ } -#ifdef NONMATCHING -s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 a4, u16 powerOverride, u8 typeOverride, u8 a7, u8 a8) +s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 sideStatus, u16 powerOverride, u8 typeOverride, u8 bankAtk, u8 bankDef) { - s32 i; + u32 i; s32 damage = 0; + s32 damageHelper; u8 type; u16 attack, defense; u16 spAttack, spDefense; @@ -60,7 +45,6 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de u8 defenderHoldEffectParam; u8 attackerHoldEffect; u8 attackerHoldEffectParam; - s32 a, b; if (!powerOverride) gBattleMovePower = gBattleMoves[move].power; @@ -79,8 +63,8 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de if (attacker->item == ITEM_ENIGMA_BERRY) { - attackerHoldEffect = gEnigmaBerries[a7].holdEffect; - attackerHoldEffectParam = gEnigmaBerries[a7].holdEffectParam; + attackerHoldEffect = gEnigmaBerries[bankAtk].holdEffect; + attackerHoldEffectParam = gEnigmaBerries[bankAtk].holdEffectParam; } else { @@ -90,8 +74,8 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de if (defender->item == ITEM_ENIGMA_BERRY) { - defenderHoldEffect = gEnigmaBerries[a8].holdEffect; - defenderHoldEffectParam = gEnigmaBerries[a8].holdEffectParam; + defenderHoldEffect = gEnigmaBerries[bankDef].holdEffect; + defenderHoldEffectParam = gEnigmaBerries[bankDef].holdEffectParam; } else { @@ -107,7 +91,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) && gTrainerBattleOpponent != 1024 && FlagGet(BADGE01_GET) - && !GetBankSide(a7)) + && !GetBankSide(bankAtk)) attack = (110 * attack) / 100; if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER))) @@ -115,7 +99,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) && gTrainerBattleOpponent != 1024 && FlagGet(BADGE05_GET) - && !GetBankSide(a8)) + && !GetBankSide(bankDef)) defense = (110 * defense) / 100; if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER))) @@ -123,7 +107,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) && gTrainerBattleOpponent != 1024 && FlagGet(BADGE07_GET) - && !GetBankSide(a7)) + && !GetBankSide(bankAtk)) spAttack = (110 * spAttack) / 100; if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER))) @@ -131,7 +115,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) && gTrainerBattleOpponent != 1024 && FlagGet(BADGE07_GET) - && !GetBankSide(a8)) + && !GetBankSide(bankDef)) spDefense = (110 * spDefense) / 100; } } @@ -171,17 +155,17 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de spAttack /= 2; if (attacker->ability == ABILITY_HUSTLE) attack = (150 * attack) / 100; - if (attacker->ability == ABILITY_PLUS && AbilityBattleEffects(0xE, 0, ABILITY_MINUS, 0, 0)) + if (attacker->ability == ABILITY_PLUS && AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_MINUS, 0, 0)) spAttack = (150 * spAttack) / 100; - if (attacker->ability == ABILITY_MINUS && AbilityBattleEffects(0xE, 0, ABILITY_PLUS, 0, 0)) + if (attacker->ability == ABILITY_MINUS && AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_PLUS, 0, 0)) spAttack = (150 * spAttack) / 100; if (attacker->ability == ABILITY_GUTS && attacker->status1) attack = (150 * attack) / 100; if (defender->ability == ABILITY_MARVEL_SCALE && defender->status1) defense = (150 * defense) / 100; - if (type == TYPE_ELECTRIC && AbilityBattleEffects(0xE, 0, 0, 0xFD, 0)) + if (type == TYPE_ELECTRIC && AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, 0, 0xFD, 0)) gBattleMovePower /= 2; - if (type == TYPE_FIRE && AbilityBattleEffects(0xE, 0, 0, 0xFE, 0)) + if (type == TYPE_FIRE && AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, 0, 0xFE, 0)) gBattleMovePower /= 2; if (type == TYPE_GRASS && attacker->ability == ABILITY_OVERGROW && attacker->hp <= (attacker->maxHP / 3)) gBattleMovePower = (150 * gBattleMovePower) / 100; @@ -191,39 +175,41 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de gBattleMovePower = (150 * gBattleMovePower) / 100; if (type == TYPE_BUG && attacker->ability == ABILITY_SWARM && attacker->hp <= (attacker->maxHP / 3)) gBattleMovePower = (150 * gBattleMovePower) / 100; - if (gBattleMoves[gCurrentMove].effect == 7) + if (gBattleMoves[gCurrentMove].effect == EFFECT_EXPLOSION) defense /= 2; - if (type < TYPE_MYSTERY) // is physical? + if (type < TYPE_MYSTERY) // is physical { if (gCritMultiplier == 2) { - if (attacker->statStages[1] > 6) - APPLY_STAT_MOD(a, attacker, attack, 1) + if (attacker->statStages[STAT_STAGE_ATK] > 6) + APPLY_STAT_MOD(damage, attacker, attack, STAT_STAGE_ATK) else - a = attack; + damage = attack; } else - APPLY_STAT_MOD(a, attacker, attack, 1) + APPLY_STAT_MOD(damage, attacker, attack, STAT_STAGE_ATK) - a = a * gBattleMovePower * (2 * attacker->level / 5 + 2); + damage = damage * gBattleMovePower; + damage *= (2 * attacker->level / 5 + 2); if (gCritMultiplier == 2) { - if (defender->statStages[2] < 6) - APPLY_STAT_MOD(b, defender, defense, 2) + if (defender->statStages[STAT_STAGE_DEF] < 6) + APPLY_STAT_MOD(damageHelper, defender, defense, STAT_STAGE_DEF) else - b = defense; + damageHelper = defense; } else - APPLY_STAT_MOD(b, defender, defense, 2) + APPLY_STAT_MOD(damageHelper, defender, defense, STAT_STAGE_DEF) - damage = (a / b) / 50; + damage = damage / damageHelper; + damage /= 50; - if ((attacker->status1 & 0x10) && attacker->ability != ABILITY_GUTS) + if ((attacker->status1 & STATUS_BURN) && attacker->ability != ABILITY_GUTS) damage /= 2; - if ((a4 & 1) && gCritMultiplier == 1) + if ((sideStatus & SIDE_STATUS_REFLECT) && gCritMultiplier == 1) { if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && CountAliveMons(2) == 2) damage = 2 * (damage / 3); @@ -246,29 +232,31 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de { if (gCritMultiplier == 2) { - if (attacker->statStages[4] > 6) - APPLY_STAT_MOD(a, attacker, spAttack, 4) + if (attacker->statStages[STAT_STAGE_SPATK] > 6) + APPLY_STAT_MOD(damage, attacker, spAttack, STAT_STAGE_SPATK) else - a = spAttack; + damage = spAttack; } else - APPLY_STAT_MOD(a, attacker, spAttack, 4) + APPLY_STAT_MOD(damage, attacker, spAttack, STAT_STAGE_SPATK) - a = a * gBattleMovePower * (2 * attacker->level / 5 + 2); + damage = damage * gBattleMovePower; + damage *= (2 * attacker->level / 5 + 2); if (gCritMultiplier == 2) { - if (defender->statStages[5] < 6) - APPLY_STAT_MOD(b, defender, spDefense, 5) + if (defender->statStages[STAT_STAGE_SPDEF] < 6) + APPLY_STAT_MOD(damageHelper, defender, spDefense, STAT_STAGE_SPDEF) else - b = spDefense; + damageHelper = spDefense; } else - APPLY_STAT_MOD(b, defender, spDefense, 5) + APPLY_STAT_MOD(damageHelper, defender, spDefense, STAT_STAGE_SPDEF) - damage = (a / b) / 50; + damage = (damage / damageHelper); + damage /= 50; - if ((a4 & 2) && gCritMultiplier == 1) + if ((sideStatus & SIDE_STATUS_LIGHTSCREEN) && gCritMultiplier == 1) { if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && CountAliveMons(2) == 2) damage = 2 * (damage / 3); @@ -279,1196 +267,46 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gBattleMoves[move].target == 8 && CountAliveMons(2) == 2) damage /= 2; - // are effects of weather negated with cloud nine or air lock? - if (!AbilityBattleEffects(0xE, 0, ABILITY_CLOUD_NINE, 0, 0) && !AbilityBattleEffects(0xE, 0, ABILITY_AIR_LOCK, 0, 0)) + // are effects of weather negated with cloud nine or air lock + if (!AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_CLOUD_NINE, 0, 0) + && !AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_AIR_LOCK, 0, 0)) { - // rain? - if (gBattleWeather & 1) + if (gBattleWeather & WEATHER_RAIN_TEMPORARY) { - if (type == TYPE_FIRE) + switch (type) + { + case TYPE_FIRE: damage /= 2; - else if (type == TYPE_WATER) + break; + case TYPE_WATER: damage = (15 * damage) / 10; + break; + } } - // does lack of sun half solar beam damage? - if ((gBattleWeather & 0x9F) && gCurrentMove == 76) + // any weather except sun weakens solar beam + if ((gBattleWeather & (WEATHER_RAIN_ANY | WEATHER_SANDSTORM_ANY | WEATHER_HAIL)) && gCurrentMove == MOVE_SOLAR_BEAM) damage /= 2; - // sunny? - if (gBattleWeather & 0x60) + // sunny + if (gBattleWeather & WEATHER_SUN_ANY) { - if (type == TYPE_FIRE) + switch (type) + { + case TYPE_FIRE: damage = (15 * damage) / 10; - else if (type == TYPE_WATER) + break; + case TYPE_WATER: damage /= 2; + break; + } } } - // flash fire triggered? - if ((dword_2017100[a7] & 1) && type == TYPE_FIRE) + // flash fire triggered + if ((dword_2017100[bankAtk] & 1) && type == TYPE_FIRE) damage = (15 * damage) / 10; } return damage + 2; } -#else -__attribute__((naked)) -s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 a4, u16 powerOverride, u8 typeOverride, u8 a7, u8 a8) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x2C\n\ - adds r7, r0, 0\n\ - str r1, [sp, 0x4]\n\ - str r2, [sp, 0x8]\n\ - ldr r0, [sp, 0x4C]\n\ - ldr r1, [sp, 0x50]\n\ - ldr r2, [sp, 0x54]\n\ - ldr r4, [sp, 0x58]\n\ - lsls r3, 16\n\ - lsrs r3, 16\n\ - str r3, [sp, 0xC]\n\ - lsls r0, 16\n\ - lsrs r3, r0, 16\n\ - lsls r1, 24\n\ - lsrs r6, r1, 24\n\ - lsls r2, 24\n\ - lsrs r2, 24\n\ - str r2, [sp, 0x10]\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - movs r5, 0\n\ - cmp r3, 0\n\ - bne _0803BA80\n\ - ldr r2, _0803BA78 @ =gBattleMovePower\n\ - ldr r1, _0803BA7C @ =gBattleMoves\n\ - ldr r3, [sp, 0x8]\n\ - lsls r0, r3, 1\n\ - adds r0, r3\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldrb r0, [r0, 0x1]\n\ - strh r0, [r2]\n\ - b _0803BA84\n\ - .align 2, 0\n\ -_0803BA78: .4byte gBattleMovePower\n\ -_0803BA7C: .4byte gBattleMoves\n\ -_0803BA80:\n\ - ldr r0, _0803BA9C @ =gBattleMovePower\n\ - strh r3, [r0]\n\ -_0803BA84:\n\ - cmp r6, 0\n\ - bne _0803BAA4\n\ - ldr r1, _0803BAA0 @ =gBattleMoves\n\ - ldr r6, [sp, 0x8]\n\ - lsls r0, r6, 1\n\ - adds r0, r6\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldrb r0, [r0, 0x2]\n\ - mov r9, r0\n\ - b _0803BAAE\n\ - .align 2, 0\n\ -_0803BA9C: .4byte gBattleMovePower\n\ -_0803BAA0: .4byte gBattleMoves\n\ -_0803BAA4:\n\ - movs r0, 0x3F\n\ - mov r9, r0\n\ - mov r1, r9\n\ - ands r1, r6\n\ - mov r9, r1\n\ -_0803BAAE:\n\ - ldrh r6, [r7, 0x2]\n\ - ldr r2, [sp, 0x4]\n\ - ldrh r2, [r2, 0x4]\n\ - str r2, [sp, 0x14]\n\ - ldrh r3, [r7, 0x8]\n\ - mov r8, r3\n\ - ldr r0, [sp, 0x4]\n\ - ldrh r0, [r0, 0xA]\n\ - str r0, [sp, 0x18]\n\ - ldrh r0, [r7, 0x2E]\n\ - cmp r0, 0xAF\n\ - bne _0803BAE0\n\ - ldr r1, _0803BADC @ =gEnigmaBerries\n\ - ldr r2, [sp, 0x10]\n\ - lsls r0, r2, 3\n\ - subs r0, r2\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldrb r3, [r0, 0x7]\n\ - mov r10, r3\n\ - ldrb r0, [r0, 0x1A]\n\ - b _0803BAF6\n\ - .align 2, 0\n\ -_0803BADC: .4byte gEnigmaBerries\n\ -_0803BAE0:\n\ - ldrh r0, [r7, 0x2E]\n\ - bl ItemId_GetHoldEffect\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r10, r0\n\ - ldrh r0, [r7, 0x2E]\n\ - bl ItemId_GetHoldEffectParam\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ -_0803BAF6:\n\ - str r0, [sp, 0x20]\n\ - ldr r1, [sp, 0x4]\n\ - ldrh r0, [r1, 0x2E]\n\ - cmp r0, 0xAF\n\ - bne _0803BB26\n\ - ldr r1, _0803BB10 @ =gEnigmaBerries\n\ - lsls r0, r4, 3\n\ - subs r0, r4\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldrb r0, [r0, 0x7]\n\ - str r0, [sp, 0x1C]\n\ - b _0803BB3C\n\ - .align 2, 0\n\ -_0803BB10: .4byte gEnigmaBerries\n\ -_0803BB14:\n\ - ldr r0, [sp, 0x20]\n\ - adds r0, 0x64\n\ - muls r0, r6\n\ - movs r1, 0x64\n\ - bl __divsi3\n\ - lsls r0, 16\n\ - lsrs r6, r0, 16\n\ - b _0803BCDC\n\ -_0803BB26:\n\ - ldr r2, [sp, 0x4]\n\ - ldrh r0, [r2, 0x2E]\n\ - bl ItemId_GetHoldEffect\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - str r0, [sp, 0x1C]\n\ - ldr r3, [sp, 0x4]\n\ - ldrh r0, [r3, 0x2E]\n\ - bl ItemId_GetHoldEffectParam\n\ -_0803BB3C:\n\ - adds r0, r7, 0\n\ - adds r0, 0x20\n\ - ldrb r1, [r0]\n\ - str r0, [sp, 0x24]\n\ - cmp r1, 0x25\n\ - beq _0803BB4C\n\ - cmp r1, 0x4A\n\ - bne _0803BB50\n\ -_0803BB4C:\n\ - lsls r0, r6, 17\n\ - lsrs r6, r0, 16\n\ -_0803BB50:\n\ - ldr r0, _0803BCB8 @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - ldr r0, _0803BCBC @ =0x00000902\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0803BB5E\n\ - b _0803BC78\n\ -_0803BB5E:\n\ - movs r0, 0x8\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0803BB98\n\ - ldr r0, _0803BCC0 @ =gTrainerBattleOpponent\n\ - ldrh r1, [r0]\n\ - movs r0, 0x80\n\ - lsls r0, 3\n\ - cmp r1, r0\n\ - beq _0803BB98\n\ - ldr r0, _0803BCC4 @ =0x00000807\n\ - bl FlagGet\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _0803BB98\n\ - ldr r0, [sp, 0x10]\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _0803BB98\n\ - movs r0, 0x6E\n\ - muls r0, r6\n\ - movs r1, 0x64\n\ - bl __divsi3\n\ - lsls r0, 16\n\ - lsrs r6, r0, 16\n\ -_0803BB98:\n\ - ldr r0, _0803BCB8 @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - ldr r0, _0803BCBC @ =0x00000902\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0803BC78\n\ - movs r0, 0x8\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0803BBE2\n\ - ldr r0, _0803BCC0 @ =gTrainerBattleOpponent\n\ - ldrh r1, [r0]\n\ - movs r0, 0x80\n\ - lsls r0, 3\n\ - cmp r1, r0\n\ - beq _0803BBE2\n\ - ldr r0, _0803BCC8 @ =0x0000080b\n\ - bl FlagGet\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _0803BBE2\n\ - adds r0, r4, 0\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _0803BBE2\n\ - movs r0, 0x6E\n\ - ldr r1, [sp, 0x14]\n\ - muls r0, r1\n\ - movs r1, 0x64\n\ - bl __divsi3\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - str r0, [sp, 0x14]\n\ -_0803BBE2:\n\ - ldr r0, _0803BCB8 @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - ldr r0, _0803BCBC @ =0x00000902\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0803BC78\n\ - movs r0, 0x8\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0803BC2E\n\ - ldr r0, _0803BCC0 @ =gTrainerBattleOpponent\n\ - ldrh r1, [r0]\n\ - movs r0, 0x80\n\ - lsls r0, 3\n\ - cmp r1, r0\n\ - beq _0803BC2E\n\ - ldr r0, _0803BCCC @ =0x0000080d\n\ - bl FlagGet\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _0803BC2E\n\ - ldr r0, [sp, 0x10]\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _0803BC2E\n\ - movs r0, 0x6E\n\ - mov r2, r8\n\ - muls r2, r0\n\ - adds r0, r2, 0\n\ - movs r1, 0x64\n\ - bl __divsi3\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - mov r8, r0\n\ -_0803BC2E:\n\ - ldr r0, _0803BCB8 @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - ldr r0, _0803BCBC @ =0x00000902\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0803BC78\n\ - movs r0, 0x8\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0803BC78\n\ - ldr r0, _0803BCC0 @ =gTrainerBattleOpponent\n\ - ldrh r1, [r0]\n\ - movs r0, 0x80\n\ - lsls r0, 3\n\ - cmp r1, r0\n\ - beq _0803BC78\n\ - ldr r0, _0803BCCC @ =0x0000080d\n\ - bl FlagGet\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _0803BC78\n\ - adds r0, r4, 0\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _0803BC78\n\ - movs r0, 0x6E\n\ - ldr r3, [sp, 0x18]\n\ - muls r0, r3\n\ - movs r1, 0x64\n\ - bl __divsi3\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - str r0, [sp, 0x18]\n\ -_0803BC78:\n\ - movs r2, 0\n\ - ldr r4, _0803BCD0 @ =gHoldEffectToType\n\ - ldr r0, [sp, 0x4]\n\ - adds r0, 0x20\n\ - str r0, [sp, 0x28]\n\ - adds r3, r4, 0\n\ -_0803BC84:\n\ - lsls r1, r2, 1\n\ - ldrb r0, [r3]\n\ - cmp r10, r0\n\ - bne _0803BCD4\n\ - adds r0, r4, 0x1\n\ - adds r0, r1, r0\n\ - ldrb r0, [r0]\n\ - cmp r9, r0\n\ - bne _0803BCD4\n\ - mov r1, r9\n\ - cmp r1, 0x8\n\ - bhi _0803BC9E\n\ - b _0803BB14\n\ -_0803BC9E:\n\ - ldr r0, [sp, 0x20]\n\ - adds r0, 0x64\n\ - mov r2, r8\n\ - muls r2, r0\n\ - adds r0, r2, 0\n\ - movs r1, 0x64\n\ - bl __divsi3\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - mov r8, r0\n\ - b _0803BCDC\n\ - .align 2, 0\n\ -_0803BCB8: .4byte gBattleTypeFlags\n\ -_0803BCBC: .4byte 0x00000902\n\ -_0803BCC0: .4byte gTrainerBattleOpponent\n\ -_0803BCC4: .4byte 0x00000807\n\ -_0803BCC8: .4byte 0x0000080b\n\ -_0803BCCC: .4byte 0x0000080d\n\ -_0803BCD0: .4byte gHoldEffectToType\n\ -_0803BCD4:\n\ - adds r3, 0x2\n\ - adds r2, 0x1\n\ - cmp r2, 0x10\n\ - bls _0803BC84\n\ -_0803BCDC:\n\ - mov r3, r10\n\ - cmp r3, 0x1D\n\ - bne _0803BCF0\n\ - movs r0, 0x96\n\ - muls r0, r6\n\ - movs r1, 0x64\n\ - bl __divsi3\n\ - lsls r0, 16\n\ - lsrs r6, r0, 16\n\ -_0803BCF0:\n\ - mov r0, r10\n\ - cmp r0, 0x22\n\ - bne _0803BD28\n\ - ldr r0, _0803BFDC @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - movs r0, 0x80\n\ - lsls r0, 1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0803BD28\n\ - ldr r1, _0803BFE0 @ =0xfffffe69\n\ - adds r0, r1, 0\n\ - ldrh r2, [r7]\n\ - adds r0, r2\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - cmp r0, 0x1\n\ - bhi _0803BD28\n\ - movs r0, 0x96\n\ - mov r3, r8\n\ - muls r3, r0\n\ - adds r0, r3, 0\n\ - movs r1, 0x64\n\ - bl __divsi3\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - mov r8, r0\n\ -_0803BD28:\n\ - ldr r0, [sp, 0x1C]\n\ - cmp r0, 0x22\n\ - bne _0803BD60\n\ - ldr r0, _0803BFDC @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - movs r0, 0x80\n\ - lsls r0, 1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0803BD60\n\ - ldr r1, _0803BFE0 @ =0xfffffe69\n\ - adds r0, r1, 0\n\ - ldr r2, [sp, 0x4]\n\ - ldrh r2, [r2]\n\ - adds r0, r2\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - cmp r0, 0x1\n\ - bhi _0803BD60\n\ - movs r0, 0x96\n\ - ldr r3, [sp, 0x18]\n\ - muls r0, r3\n\ - movs r1, 0x64\n\ - bl __divsi3\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - str r0, [sp, 0x18]\n\ -_0803BD60:\n\ - mov r0, r10\n\ - cmp r0, 0x23\n\ - bne _0803BD76\n\ - ldrh r1, [r7]\n\ - ldr r0, _0803BFE4 @ =0x00000175\n\ - cmp r1, r0\n\ - bne _0803BD76\n\ - mov r1, r8\n\ - lsls r0, r1, 17\n\ - lsrs r0, 16\n\ - mov r8, r0\n\ -_0803BD76:\n\ - ldr r2, [sp, 0x1C]\n\ - cmp r2, 0x24\n\ - bne _0803BD8E\n\ - ldr r3, [sp, 0x4]\n\ - ldrh r1, [r3]\n\ - ldr r0, _0803BFE4 @ =0x00000175\n\ - cmp r1, r0\n\ - bne _0803BD8E\n\ - ldr r1, [sp, 0x18]\n\ - lsls r0, r1, 17\n\ - lsrs r0, 16\n\ - str r0, [sp, 0x18]\n\ -_0803BD8E:\n\ - mov r2, r10\n\ - cmp r2, 0x2D\n\ - bne _0803BDA2\n\ - ldrh r0, [r7]\n\ - cmp r0, 0x19\n\ - bne _0803BDA2\n\ - mov r3, r8\n\ - lsls r0, r3, 17\n\ - lsrs r0, 16\n\ - mov r8, r0\n\ -_0803BDA2:\n\ - ldr r0, [sp, 0x1C]\n\ - cmp r0, 0x40\n\ - bne _0803BDB8\n\ - ldr r1, [sp, 0x4]\n\ - ldrh r0, [r1]\n\ - cmp r0, 0x84\n\ - bne _0803BDB8\n\ - ldr r2, [sp, 0x14]\n\ - lsls r0, r2, 17\n\ - lsrs r0, 16\n\ - str r0, [sp, 0x14]\n\ -_0803BDB8:\n\ - mov r3, r10\n\ - cmp r3, 0x41\n\ - bne _0803BDCE\n\ - ldrh r0, [r7]\n\ - subs r0, 0x68\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - cmp r0, 0x1\n\ - bhi _0803BDCE\n\ - lsls r0, r6, 17\n\ - lsrs r6, r0, 16\n\ -_0803BDCE:\n\ - ldr r1, [sp, 0x28]\n\ - ldrb r0, [r1]\n\ - cmp r0, 0x2F\n\ - bne _0803BDE6\n\ - mov r2, r9\n\ - cmp r2, 0xA\n\ - beq _0803BDE0\n\ - cmp r2, 0xF\n\ - bne _0803BDE6\n\ -_0803BDE0:\n\ - mov r3, r8\n\ - lsrs r3, 1\n\ - mov r8, r3\n\ -_0803BDE6:\n\ - ldr r0, [sp, 0x24]\n\ - ldrb r4, [r0]\n\ - cmp r4, 0x37\n\ - bne _0803BDFC\n\ - movs r0, 0x96\n\ - muls r0, r6\n\ - movs r1, 0x64\n\ - bl __divsi3\n\ - lsls r0, 16\n\ - lsrs r6, r0, 16\n\ -_0803BDFC:\n\ - cmp r4, 0x39\n\ - bne _0803BE2A\n\ - movs r0, 0\n\ - str r0, [sp]\n\ - movs r0, 0xE\n\ - movs r1, 0\n\ - movs r2, 0x3A\n\ - movs r3, 0\n\ - bl AbilityBattleEffects\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _0803BE2A\n\ - movs r0, 0x96\n\ - mov r1, r8\n\ - muls r1, r0\n\ - adds r0, r1, 0\n\ - movs r1, 0x64\n\ - bl __divsi3\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - mov r8, r0\n\ -_0803BE2A:\n\ - ldr r2, [sp, 0x24]\n\ - ldrb r0, [r2]\n\ - cmp r0, 0x3A\n\ - bne _0803BE5C\n\ - movs r0, 0\n\ - str r0, [sp]\n\ - movs r0, 0xE\n\ - movs r1, 0\n\ - movs r2, 0x39\n\ - movs r3, 0\n\ - bl AbilityBattleEffects\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _0803BE5C\n\ - movs r0, 0x96\n\ - mov r3, r8\n\ - muls r3, r0\n\ - adds r0, r3, 0\n\ - movs r1, 0x64\n\ - bl __divsi3\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - mov r8, r0\n\ -_0803BE5C:\n\ - ldr r1, [sp, 0x24]\n\ - ldrb r0, [r1]\n\ - cmp r0, 0x3E\n\ - bne _0803BE78\n\ - ldr r0, [r7, 0x4C]\n\ - cmp r0, 0\n\ - beq _0803BE78\n\ - movs r0, 0x96\n\ - muls r0, r6\n\ - movs r1, 0x64\n\ - bl __divsi3\n\ - lsls r0, 16\n\ - lsrs r6, r0, 16\n\ -_0803BE78:\n\ - ldr r2, [sp, 0x28]\n\ - ldrb r0, [r2]\n\ - cmp r0, 0x3F\n\ - bne _0803BE9A\n\ - ldr r3, [sp, 0x4]\n\ - ldr r0, [r3, 0x4C]\n\ - cmp r0, 0\n\ - beq _0803BE9A\n\ - movs r0, 0x96\n\ - ldr r1, [sp, 0x14]\n\ - muls r0, r1\n\ - movs r1, 0x64\n\ - bl __divsi3\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - str r0, [sp, 0x14]\n\ -_0803BE9A:\n\ - mov r2, r9\n\ - cmp r2, 0xD\n\ - bne _0803BEBE\n\ - movs r0, 0\n\ - str r0, [sp]\n\ - movs r0, 0xE\n\ - movs r1, 0\n\ - movs r2, 0\n\ - movs r3, 0xFD\n\ - bl AbilityBattleEffects\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _0803BEBE\n\ - ldr r1, _0803BFE8 @ =gBattleMovePower\n\ - ldrh r0, [r1]\n\ - lsrs r0, 1\n\ - strh r0, [r1]\n\ -_0803BEBE:\n\ - mov r3, r9\n\ - cmp r3, 0xA\n\ - bne _0803BEE2\n\ - movs r0, 0\n\ - str r0, [sp]\n\ - movs r0, 0xE\n\ - movs r1, 0\n\ - movs r2, 0\n\ - movs r3, 0xFE\n\ - bl AbilityBattleEffects\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _0803BEE2\n\ - ldr r1, _0803BFE8 @ =gBattleMovePower\n\ - ldrh r0, [r1]\n\ - lsrs r0, 1\n\ - strh r0, [r1]\n\ -_0803BEE2:\n\ - mov r0, r9\n\ - cmp r0, 0xC\n\ - bne _0803BF12\n\ - ldr r1, [sp, 0x24]\n\ - ldrb r0, [r1]\n\ - cmp r0, 0x41\n\ - bne _0803BF12\n\ - ldrh r0, [r7, 0x2C]\n\ - movs r1, 0x3\n\ - bl __udivsi3\n\ - ldrh r1, [r7, 0x28]\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - cmp r1, r0\n\ - bhi _0803BF12\n\ - ldr r4, _0803BFE8 @ =gBattleMovePower\n\ - ldrh r1, [r4]\n\ - movs r0, 0x96\n\ - muls r0, r1\n\ - movs r1, 0x64\n\ - bl __divsi3\n\ - strh r0, [r4]\n\ -_0803BF12:\n\ - mov r2, r9\n\ - cmp r2, 0xA\n\ - bne _0803BF42\n\ - ldr r3, [sp, 0x24]\n\ - ldrb r0, [r3]\n\ - cmp r0, 0x42\n\ - bne _0803BF42\n\ - ldrh r0, [r7, 0x2C]\n\ - movs r1, 0x3\n\ - bl __udivsi3\n\ - ldrh r1, [r7, 0x28]\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - cmp r1, r0\n\ - bhi _0803BF42\n\ - ldr r4, _0803BFE8 @ =gBattleMovePower\n\ - ldrh r1, [r4]\n\ - movs r0, 0x96\n\ - muls r0, r1\n\ - movs r1, 0x64\n\ - bl __divsi3\n\ - strh r0, [r4]\n\ -_0803BF42:\n\ - mov r0, r9\n\ - cmp r0, 0xB\n\ - bne _0803BF72\n\ - ldr r1, [sp, 0x24]\n\ - ldrb r0, [r1]\n\ - cmp r0, 0x43\n\ - bne _0803BF72\n\ - ldrh r0, [r7, 0x2C]\n\ - movs r1, 0x3\n\ - bl __udivsi3\n\ - ldrh r1, [r7, 0x28]\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - cmp r1, r0\n\ - bhi _0803BF72\n\ - ldr r4, _0803BFE8 @ =gBattleMovePower\n\ - ldrh r1, [r4]\n\ - movs r0, 0x96\n\ - muls r0, r1\n\ - movs r1, 0x64\n\ - bl __divsi3\n\ - strh r0, [r4]\n\ -_0803BF72:\n\ - mov r2, r9\n\ - cmp r2, 0x6\n\ - bne _0803BFA2\n\ - ldr r3, [sp, 0x24]\n\ - ldrb r0, [r3]\n\ - cmp r0, 0x44\n\ - bne _0803BFA2\n\ - ldrh r0, [r7, 0x2C]\n\ - movs r1, 0x3\n\ - bl __udivsi3\n\ - ldrh r1, [r7, 0x28]\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - cmp r1, r0\n\ - bhi _0803BFA2\n\ - ldr r4, _0803BFE8 @ =gBattleMovePower\n\ - ldrh r1, [r4]\n\ - movs r0, 0x96\n\ - muls r0, r1\n\ - movs r1, 0x64\n\ - bl __divsi3\n\ - strh r0, [r4]\n\ -_0803BFA2:\n\ - ldr r2, _0803BFEC @ =gBattleMoves\n\ - ldr r0, _0803BFF0 @ =gCurrentMove\n\ - ldrh r1, [r0]\n\ - lsls r0, r1, 1\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r2\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x7\n\ - bne _0803BFBC\n\ - ldr r0, [sp, 0x14]\n\ - lsrs r0, 1\n\ - str r0, [sp, 0x14]\n\ -_0803BFBC:\n\ - mov r1, r9\n\ - cmp r1, 0x8\n\ - bls _0803BFC4\n\ - b _0803C122\n\ -_0803BFC4:\n\ - ldr r0, _0803BFF4 @ =gCritMultiplier\n\ - ldrb r1, [r0]\n\ - adds r4, r0, 0\n\ - cmp r1, 0x2\n\ - bne _0803C000\n\ - movs r0, 0x19\n\ - ldrsb r0, [r7, r0]\n\ - cmp r0, 0x6\n\ - ble _0803BFFC\n\ - ldr r2, _0803BFF8 @ =gStatStageRatios\n\ - b _0803C006\n\ - .align 2, 0\n\ -_0803BFDC: .4byte gBattleTypeFlags\n\ -_0803BFE0: .4byte 0xfffffe69\n\ -_0803BFE4: .4byte 0x00000175\n\ -_0803BFE8: .4byte gBattleMovePower\n\ -_0803BFEC: .4byte gBattleMoves\n\ -_0803BFF0: .4byte gCurrentMove\n\ -_0803BFF4: .4byte gCritMultiplier\n\ -_0803BFF8: .4byte gStatStageRatios\n\ -_0803BFFC:\n\ - adds r5, r6, 0\n\ - b _0803C01E\n\ -_0803C000:\n\ - ldr r2, _0803C050 @ =gStatStageRatios\n\ - movs r0, 0x19\n\ - ldrsb r0, [r7, r0]\n\ -_0803C006:\n\ - lsls r0, 1\n\ - adds r1, r0, r2\n\ - ldrb r1, [r1]\n\ - adds r5, r6, 0\n\ - muls r5, r1\n\ - adds r2, 0x1\n\ - adds r0, r2\n\ - ldrb r1, [r0]\n\ - adds r0, r5, 0\n\ - bl __divsi3\n\ - adds r5, r0, 0\n\ -_0803C01E:\n\ - ldr r0, _0803C054 @ =gBattleMovePower\n\ - ldrh r0, [r0]\n\ - muls r5, r0\n\ - adds r0, r7, 0\n\ - adds r0, 0x2A\n\ - ldrb r0, [r0]\n\ - lsls r0, 1\n\ - movs r1, 0x5\n\ - bl __divsi3\n\ - adds r0, 0x2\n\ - muls r5, r0\n\ - ldrb r0, [r4]\n\ - cmp r0, 0x2\n\ - bne _0803C05C\n\ - ldr r2, [sp, 0x4]\n\ - movs r0, 0x1A\n\ - ldrsb r0, [r2, r0]\n\ - cmp r0, 0x5\n\ - bgt _0803C058\n\ - ldr r2, _0803C050 @ =gStatStageRatios\n\ - ldr r3, [sp, 0x4]\n\ - movs r0, 0x1A\n\ - ldrsb r0, [r3, r0]\n\ - b _0803C064\n\ - .align 2, 0\n\ -_0803C050: .4byte gStatStageRatios\n\ -_0803C054: .4byte gBattleMovePower\n\ -_0803C058:\n\ - ldr r3, [sp, 0x14]\n\ - b _0803C07E\n\ -_0803C05C:\n\ - ldr r2, _0803C0DC @ =gStatStageRatios\n\ - ldr r1, [sp, 0x4]\n\ - movs r0, 0x1A\n\ - ldrsb r0, [r1, r0]\n\ -_0803C064:\n\ - lsls r0, 1\n\ - adds r1, r0, r2\n\ - ldrb r1, [r1]\n\ - ldr r6, [sp, 0x14]\n\ - adds r3, r6, 0\n\ - muls r3, r1\n\ - adds r2, 0x1\n\ - adds r0, r2\n\ - ldrb r1, [r0]\n\ - adds r0, r3, 0\n\ - bl __divsi3\n\ - adds r3, r0, 0\n\ -_0803C07E:\n\ - adds r0, r5, 0\n\ - adds r1, r3, 0\n\ - bl __divsi3\n\ - adds r5, r0, 0\n\ - movs r1, 0x32\n\ - bl __divsi3\n\ - adds r5, r0, 0\n\ - ldr r0, [r7, 0x4C]\n\ - movs r1, 0x10\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0803C0A8\n\ - ldr r1, [sp, 0x24]\n\ - ldrb r0, [r1]\n\ - cmp r0, 0x3E\n\ - beq _0803C0A8\n\ - lsrs r0, r5, 31\n\ - adds r0, r5, r0\n\ - asrs r5, r0, 1\n\ -_0803C0A8:\n\ - movs r0, 0x1\n\ - ldr r2, [sp, 0xC]\n\ - ands r0, r2\n\ - cmp r0, 0\n\ - beq _0803C0EA\n\ - ldrb r1, [r4]\n\ - cmp r1, 0x1\n\ - bne _0803C0EA\n\ - ldr r0, _0803C0E0 @ =gBattleTypeFlags\n\ - ldrh r0, [r0]\n\ - ands r1, r0\n\ - cmp r1, 0\n\ - beq _0803C0E4\n\ - movs r0, 0x2\n\ - bl CountAliveMons\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x2\n\ - bne _0803C0E4\n\ - adds r0, r5, 0\n\ - movs r1, 0x3\n\ - bl __divsi3\n\ - lsls r5, r0, 1\n\ - b _0803C0EA\n\ - .align 2, 0\n\ -_0803C0DC: .4byte gStatStageRatios\n\ -_0803C0E0: .4byte gBattleTypeFlags\n\ -_0803C0E4:\n\ - lsrs r0, r5, 31\n\ - adds r0, r5, r0\n\ - asrs r5, r0, 1\n\ -_0803C0EA:\n\ - ldr r0, _0803C148 @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0803C11C\n\ - ldr r0, _0803C14C @ =gBattleMoves\n\ - ldr r3, [sp, 0x8]\n\ - lsls r1, r3, 1\n\ - adds r1, r3\n\ - lsls r1, 2\n\ - adds r1, r0\n\ - ldrb r0, [r1, 0x6]\n\ - cmp r0, 0x8\n\ - bne _0803C11C\n\ - movs r0, 0x2\n\ - bl CountAliveMons\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x2\n\ - bne _0803C11C\n\ - lsrs r0, r5, 31\n\ - adds r0, r5, r0\n\ - asrs r5, r0, 1\n\ -_0803C11C:\n\ - cmp r5, 0\n\ - bne _0803C122\n\ - movs r5, 0x1\n\ -_0803C122:\n\ - mov r6, r9\n\ - cmp r6, 0x9\n\ - bne _0803C12A\n\ - movs r5, 0\n\ -_0803C12A:\n\ - mov r0, r9\n\ - cmp r0, 0x9\n\ - bhi _0803C132\n\ - b _0803C330\n\ -_0803C132:\n\ - ldr r0, _0803C150 @ =gCritMultiplier\n\ - ldrb r1, [r0]\n\ - adds r4, r0, 0\n\ - cmp r1, 0x2\n\ - bne _0803C15C\n\ - movs r0, 0x1C\n\ - ldrsb r0, [r7, r0]\n\ - cmp r0, 0x6\n\ - ble _0803C158\n\ - ldr r2, _0803C154 @ =gStatStageRatios\n\ - b _0803C162\n\ - .align 2, 0\n\ -_0803C148: .4byte gBattleTypeFlags\n\ -_0803C14C: .4byte gBattleMoves\n\ -_0803C150: .4byte gCritMultiplier\n\ -_0803C154: .4byte gStatStageRatios\n\ -_0803C158:\n\ - mov r5, r8\n\ - b _0803C17A\n\ -_0803C15C:\n\ - ldr r2, _0803C1A8 @ =gStatStageRatios\n\ - movs r0, 0x1C\n\ - ldrsb r0, [r7, r0]\n\ -_0803C162:\n\ - lsls r0, 1\n\ - adds r1, r0, r2\n\ - ldrb r1, [r1]\n\ - mov r5, r8\n\ - muls r5, r1\n\ - adds r2, 0x1\n\ - adds r0, r2\n\ - ldrb r1, [r0]\n\ - adds r0, r5, 0\n\ - bl __divsi3\n\ - adds r5, r0, 0\n\ -_0803C17A:\n\ - ldr r0, _0803C1AC @ =gBattleMovePower\n\ - ldrh r0, [r0]\n\ - muls r5, r0\n\ - adds r0, r7, 0\n\ - adds r0, 0x2A\n\ - ldrb r0, [r0]\n\ - lsls r0, 1\n\ - movs r1, 0x5\n\ - bl __divsi3\n\ - adds r0, 0x2\n\ - muls r5, r0\n\ - ldrb r0, [r4]\n\ - cmp r0, 0x2\n\ - bne _0803C1B4\n\ - ldr r1, [sp, 0x4]\n\ - movs r0, 0x1D\n\ - ldrsb r0, [r1, r0]\n\ - cmp r0, 0x5\n\ - bgt _0803C1B0\n\ - ldr r2, _0803C1A8 @ =gStatStageRatios\n\ - b _0803C1BC\n\ - .align 2, 0\n\ -_0803C1A8: .4byte gStatStageRatios\n\ -_0803C1AC: .4byte gBattleMovePower\n\ -_0803C1B0:\n\ - ldr r3, [sp, 0x18]\n\ - b _0803C1D6\n\ -_0803C1B4:\n\ - ldr r2, _0803C21C @ =gStatStageRatios\n\ - ldr r1, [sp, 0x4]\n\ - movs r0, 0x1D\n\ - ldrsb r0, [r1, r0]\n\ -_0803C1BC:\n\ - lsls r0, 1\n\ - adds r1, r0, r2\n\ - ldrb r1, [r1]\n\ - ldr r6, [sp, 0x18]\n\ - adds r3, r6, 0\n\ - muls r3, r1\n\ - adds r2, 0x1\n\ - adds r0, r2\n\ - ldrb r1, [r0]\n\ - adds r0, r3, 0\n\ - bl __divsi3\n\ - adds r3, r0, 0\n\ -_0803C1D6:\n\ - adds r0, r5, 0\n\ - adds r1, r3, 0\n\ - bl __divsi3\n\ - adds r5, r0, 0\n\ - movs r1, 0x32\n\ - bl __divsi3\n\ - adds r5, r0, 0\n\ - movs r0, 0x2\n\ - ldr r1, [sp, 0xC]\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0803C22A\n\ - ldrb r1, [r4]\n\ - cmp r1, 0x1\n\ - bne _0803C22A\n\ - ldr r0, _0803C220 @ =gBattleTypeFlags\n\ - ldrh r0, [r0]\n\ - ands r1, r0\n\ - cmp r1, 0\n\ - beq _0803C224\n\ - movs r0, 0x2\n\ - bl CountAliveMons\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x2\n\ - bne _0803C224\n\ - adds r0, r5, 0\n\ - movs r1, 0x3\n\ - bl __divsi3\n\ - lsls r5, r0, 1\n\ - b _0803C22A\n\ - .align 2, 0\n\ -_0803C21C: .4byte gStatStageRatios\n\ -_0803C220: .4byte gBattleTypeFlags\n\ -_0803C224:\n\ - lsrs r0, r5, 31\n\ - adds r0, r5, r0\n\ - asrs r5, r0, 1\n\ -_0803C22A:\n\ - ldr r0, _0803C2A4 @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0803C25C\n\ - ldr r0, _0803C2A8 @ =gBattleMoves\n\ - ldr r2, [sp, 0x8]\n\ - lsls r1, r2, 1\n\ - adds r1, r2\n\ - lsls r1, 2\n\ - adds r1, r0\n\ - ldrb r0, [r1, 0x6]\n\ - cmp r0, 0x8\n\ - bne _0803C25C\n\ - movs r0, 0x2\n\ - bl CountAliveMons\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x2\n\ - bne _0803C25C\n\ - lsrs r0, r5, 31\n\ - adds r0, r5, r0\n\ - asrs r5, r0, 1\n\ -_0803C25C:\n\ - movs r0, 0\n\ - str r0, [sp]\n\ - movs r0, 0xE\n\ - movs r1, 0\n\ - movs r2, 0xD\n\ - movs r3, 0\n\ - bl AbilityBattleEffects\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0\n\ - bne _0803C30C\n\ - str r0, [sp]\n\ - movs r0, 0xE\n\ - movs r1, 0\n\ - movs r2, 0x4D\n\ - movs r3, 0\n\ - bl AbilityBattleEffects\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _0803C30C\n\ - ldr r2, _0803C2AC @ =gBattleWeather\n\ - ldrh r1, [r2]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - adds r4, r2, 0\n\ - cmp r0, 0\n\ - beq _0803C2C4\n\ - mov r3, r9\n\ - cmp r3, 0xA\n\ - beq _0803C2B0\n\ - cmp r3, 0xB\n\ - beq _0803C2B8\n\ - b _0803C2C4\n\ - .align 2, 0\n\ -_0803C2A4: .4byte gBattleTypeFlags\n\ -_0803C2A8: .4byte gBattleMoves\n\ -_0803C2AC: .4byte gBattleWeather\n\ -_0803C2B0:\n\ - lsrs r0, r5, 31\n\ - adds r0, r5, r0\n\ - asrs r5, r0, 1\n\ - b _0803C2C4\n\ -_0803C2B8:\n\ - lsls r0, r5, 4\n\ - subs r0, r5\n\ - movs r1, 0xA\n\ - bl __divsi3\n\ - adds r5, r0, 0\n\ -_0803C2C4:\n\ - ldrh r1, [r4]\n\ - movs r0, 0x9F\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0803C2DC\n\ - ldr r0, _0803C2F4 @ =gCurrentMove\n\ - ldrh r0, [r0]\n\ - cmp r0, 0x4C\n\ - bne _0803C2DC\n\ - lsrs r0, r5, 31\n\ - adds r0, r5, r0\n\ - asrs r5, r0, 1\n\ -_0803C2DC:\n\ - ldrh r1, [r4]\n\ - movs r0, 0x60\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0803C30C\n\ - mov r6, r9\n\ - cmp r6, 0xA\n\ - beq _0803C2F8\n\ - cmp r6, 0xB\n\ - beq _0803C306\n\ - b _0803C30C\n\ - .align 2, 0\n\ -_0803C2F4: .4byte gCurrentMove\n\ -_0803C2F8:\n\ - lsls r0, r5, 4\n\ - subs r0, r5\n\ - movs r1, 0xA\n\ - bl __divsi3\n\ - adds r5, r0, 0\n\ - b _0803C30C\n\ -_0803C306:\n\ - lsrs r0, r5, 31\n\ - adds r0, r5, r0\n\ - asrs r5, r0, 1\n\ -_0803C30C:\n\ - ldr r1, _0803C344 @ =0x02017100\n\ - ldr r2, [sp, 0x10]\n\ - lsls r0, r2, 2\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - movs r1, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0803C330\n\ - mov r3, r9\n\ - cmp r3, 0xA\n\ - bne _0803C330\n\ - lsls r0, r5, 4\n\ - subs r0, r5\n\ - movs r1, 0xA\n\ - bl __divsi3\n\ - adds r5, r0, 0\n\ -_0803C330:\n\ - adds r0, r5, 0x2\n\ - add sp, 0x2C\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\ -_0803C344: .4byte 0x02017100\n\ - .syntax divided"); -} -#endif -- cgit v1.2.3 From 00e84de641d039b745a1e6564c47eec098a64d7e Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 27 Aug 2017 22:42:46 +0200 Subject: cam got rid of nested loops --- src/calculate_base_damage.c | 51 +++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 27 deletions(-) diff --git a/src/calculate_base_damage.c b/src/calculate_base_damage.c index 5044145b3..f5c679876 100644 --- a/src/calculate_base_damage.c +++ b/src/calculate_base_damage.c @@ -93,33 +93,30 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de && FlagGet(BADGE01_GET) && !GetBankSide(bankAtk)) attack = (110 * attack) / 100; - - if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER))) - { - if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) - && gTrainerBattleOpponent != 1024 - && FlagGet(BADGE05_GET) - && !GetBankSide(bankDef)) - defense = (110 * defense) / 100; - - if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER))) - { - if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) - && gTrainerBattleOpponent != 1024 - && FlagGet(BADGE07_GET) - && !GetBankSide(bankAtk)) - spAttack = (110 * spAttack) / 100; - - if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER))) - { - if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) - && gTrainerBattleOpponent != 1024 - && FlagGet(BADGE07_GET) - && !GetBankSide(bankDef)) - spDefense = (110 * spDefense) / 100; - } - } - } + } + if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER))) + { + if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) + && gTrainerBattleOpponent != 1024 + && FlagGet(BADGE05_GET) + && !GetBankSide(bankDef)) + defense = (110 * defense) / 100; + } + if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER))) + { + if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) + && gTrainerBattleOpponent != 1024 + && FlagGet(BADGE07_GET) + && !GetBankSide(bankAtk)) + spAttack = (110 * spAttack) / 100; + } + if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER))) + { + if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) + && gTrainerBattleOpponent != 1024 + && FlagGet(BADGE07_GET) + && !GetBankSide(bankDef)) + spDefense = (110 * spDefense) / 100; } for (i = 0; i < 17; i++) -- cgit v1.2.3 From dcd4981fa71d1004337503eb15e96b20afca82f2 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 27 Aug 2017 16:45:54 -0500 Subject: match sub_803C434 --- src/pokemon_2.c | 116 ++++++-------------------------------------------------- 1 file changed, 11 insertions(+), 105 deletions(-) diff --git a/src/pokemon_2.c b/src/pokemon_2.c index a77edbdb2..f02ce6170 100644 --- a/src/pokemon_2.c +++ b/src/pokemon_2.c @@ -80,125 +80,31 @@ u8 CountAliveMons(u8 a1) return retVal; } -#ifdef NONMATCHING u8 sub_803C434(u8 a1) { - u32 status0 = GetBankIdentity(a1); - register u8 status_ asm("r4"); - u8 status; - register u32 mask1 asm("r1") = 1; - register u32 mask2 asm("r6") = 1; - - status_ = mask2; - status_ &= status0; - status = status_ ^ mask1; - - { - register u16 val_ asm("r1") = gBattleTypeFlags; - u32 val = mask2; - val &= val_; - if (!val) - { - return GetBankByPlayerAI(status); - } - } + u8 status = GetBankIdentity(a1) & 1; + status ^= 1; + if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + return GetBankByPlayerAI(status); if (CountAliveMons(0) > 1) { - u16 r = Random(); - register u32 val asm("r1") = mask2; - val &= r; - if (!val) - { - u32 status2 = 2; - status2 ^= status; - return GetBankByPlayerAI(status2); - } + u8 val; + + if ((Random() & 1) == 0) + val = status ^ 2; else - { - return GetBankByPlayerAI(status); - } + val = status; + return GetBankByPlayerAI(val); } else { - if (gAbsentBankFlags & gBitTable[status]) + if ((gAbsentBankFlags & gBitTable[status])) return GetBankByPlayerAI(status ^ 2); else return GetBankByPlayerAI(status); } } -#else -__attribute__((naked)) -u8 sub_803C434(u8 a1) -{ - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - bl GetBankIdentity\n\ - movs r1, 0x1\n\ - movs r6, 0x1\n\ - adds r4, r6, 0\n\ - ands r4, r0\n\ - eors r4, r1\n\ - adds r5, r4, 0\n\ - ldr r0, _0803C45C\n\ - ldrh r1, [r0]\n\ - adds r0, r6, 0\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0803C460\n\ - adds r0, r4, 0\n\ - b _0803C4AA\n\ - .align 2, 0\n\ -_0803C45C: .4byte gBattleTypeFlags\n\ -_0803C460:\n\ - movs r0, 0\n\ - bl CountAliveMons\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bls _0803C484\n\ - bl Random\n\ - adds r1, r6, 0\n\ - ands r1, r0\n\ - cmp r1, 0\n\ - bne _0803C480\n\ - movs r0, 0x2\n\ - eors r0, r4\n\ - b _0803C4AA\n\ -_0803C480:\n\ - adds r0, r4, 0\n\ - b _0803C4AA\n\ -_0803C484:\n\ - ldr r0, _0803C49C\n\ - ldrb r1, [r0]\n\ - ldr r2, _0803C4A0\n\ - lsls r0, r4, 2\n\ - adds r0, r2\n\ - ldr r0, [r0]\n\ - ands r1, r0\n\ - cmp r1, 0\n\ - bne _0803C4A4\n\ - adds r0, r4, 0\n\ - b _0803C4AA\n\ - .align 2, 0\n\ -_0803C49C: .4byte gAbsentBankFlags\n\ -_0803C4A0: .4byte gBitTable\n\ -_0803C4A4:\n\ - movs r0, 0x2\n\ - eors r5, r0\n\ - adds r0, r5, 0\n\ -_0803C4AA:\n\ - bl GetBankByPlayerAI\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - pop {r4-r6}\n\ - pop {r1}\n\ - bx r1\n\ - .syntax divided\n"); -} -#endif u8 GetMonGender(struct Pokemon *mon) { -- cgit v1.2.3 From 5cfb890e9351b737786ce263b081599513a99ae6 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 27 Aug 2017 17:18:31 -0500 Subject: tabs to spaces --- src/battle_3.c | 5566 ++++++++++++++++----------------- src/battle_controller_linkopponent2.c | 112 +- src/battle_controller_linkpartner.c | 114 +- src/battle_controller_opponent.c | 114 +- src/battle_controller_safari.c | 114 +- src/battle_controller_wally.c | 114 +- src/battle_transition.c | 66 +- src/berry_blender.c | 502 +-- src/berry_tag_screen.c | 108 +- src/de_rom_8040FE0.c | 202 +- src/egg_hatch.c | 112 +- src/hall_of_fame.c | 44 +- src/item_menu.c | 346 +- src/menu.c | 140 +- src/option_menu.c | 102 +- src/pokeblock_feed.c | 408 +-- src/rotating_gate.c | 350 +-- src/script_menu.c | 272 +- src/title_screen.c | 184 +- 19 files changed, 4485 insertions(+), 4485 deletions(-) diff --git a/src/battle_3.c b/src/battle_3.c index 9bb9e333f..f04e722c4 100644 --- a/src/battle_3.c +++ b/src/battle_3.c @@ -1506,11 +1506,11 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) if (gBankAttacker >= gNoOfAllBanks) gBankAttacker = bank; switch (gLastUsedAbility) - { - case 0xFF: //weather from overworld + { + case 0xFF: //weather from overworld //_08018586 - switch (weather_get_current()) - { + switch (weather_get_current()) + { case 3: case 5: case 13: @@ -1540,34 +1540,34 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) effect++; } break; - } - if (effect) + } + if (effect) { gBattleCommunication[MULTISTRING_CHOOSER] = weather_get_current(); b_push_move_exec(gUnknown_081D901D); } - break; - case ABILITY_DRIZZLE: + break; + case ABILITY_DRIZZLE: //_08018680 - if (!(gBattleWeather & WEATHER_RAIN_PERMANENT)) + if (!(gBattleWeather & WEATHER_RAIN_PERMANENT)) { gBattleWeather = (WEATHER_RAIN_PERMANENT | WEATHER_RAIN_TEMPORARY); b_push_move_exec(BattleScript_DrizzleActivates); BATTLE_STRUCT->scriptingActive = bank; effect++; } - break; - case ABILITY_SAND_STREAM: + break; + case ABILITY_SAND_STREAM: //_080186B8 - if (!(gBattleWeather & WEATHER_SANDSTORM_PERMANENT)) + if (!(gBattleWeather & WEATHER_SANDSTORM_PERMANENT)) { gBattleWeather = (WEATHER_SANDSTORM_PERMANENT | WEATHER_SANDSTORM_TEMPORARY); b_push_move_exec(BattleScript_SandstreamActivates); BATTLE_STRUCT->scriptingActive = bank; effect++; } - break; - case ABILITY_DROUGHT: + break; + case ABILITY_DROUGHT: //_080186F0 if (!(gBattleWeather & WEATHER_SUN_PERMANENT)) { @@ -1576,16 +1576,16 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) BATTLE_STRUCT->scriptingActive = bank; effect++; } - break; - case ABILITY_INTIMIDATE: + break; + case ABILITY_INTIMIDATE: //_08018728 if (!(gSpecialStatuses[bank].intimidatedPoke)) { gStatuses3[bank] |= STATUS3_INTIMIDATE_POKES; gSpecialStatuses[bank].intimidatedPoke = 1; } - break; - case ABILITY_FORECAST: + break; + case ABILITY_FORECAST: //_0801875C effect = CastformDataTypeChange(bank); if (effect != 0) @@ -1594,22 +1594,22 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) BATTLE_STRUCT->scriptingActive = bank; BATTLE_STRUCT->castformToChangeInto = effect - 1; } - break; - case ABILITY_TRACE: + break; + case ABILITY_TRACE: //_080187A0 - if (!(gSpecialStatuses[bank].traced)) + if (!(gSpecialStatuses[bank].traced)) { gStatuses3[bank] |= STATUS3_TRACE; gSpecialStatuses[bank].traced = 1; } - break; - case ABILITY_CLOUD_NINE: - case ABILITY_AIR_LOCK: + break; + case ABILITY_CLOUD_NINE: + case ABILITY_AIR_LOCK: //_080187DC - { - u8 i; + { + u8 i; - for (i = 0; i < gNoOfAllBanks; i++) + for (i = 0; i < gNoOfAllBanks; i++) { // TODO: i should be in r6 here //asm("":::"r4","r5"); @@ -1622,10 +1622,10 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) break; } } - } - break; - } - break; + } + break; + } + break; case ABILITYEFFECT_ENDTURN: // 1 //_08018814 if (gBattleMons[bank].hp != 0) @@ -2271,391 +2271,391 @@ __attribute__((naked)) u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) { asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x28\n\ - ldr r4, [sp, 0x48]\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - str r0, [sp, 0x4]\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - mov r10, r1\n\ - lsls r2, 24\n\ - lsrs r6, r2, 24\n\ - lsls r3, 24\n\ - lsrs r3, 24\n\ - mov r8, r3\n\ - lsls r4, 16\n\ - lsrs r4, 16\n\ - movs r0, 0\n\ - mov r9, r0\n\ - ldr r5, _08018380 @ =gBankAttacker\n\ - ldr r1, _08018384 @ =gNoOfAllBanks\n\ - ldrb r0, [r5]\n\ - ldrb r1, [r1]\n\ - cmp r0, r1\n\ - bcc _08018360\n\ - mov r1, r10\n\ - strb r1, [r5]\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x28\n\ + ldr r4, [sp, 0x48]\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + str r0, [sp, 0x4]\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + mov r10, r1\n\ + lsls r2, 24\n\ + lsrs r6, r2, 24\n\ + lsls r3, 24\n\ + lsrs r3, 24\n\ + mov r8, r3\n\ + lsls r4, 16\n\ + lsrs r4, 16\n\ + movs r0, 0\n\ + mov r9, r0\n\ + ldr r5, _08018380 @ =gBankAttacker\n\ + ldr r1, _08018384 @ =gNoOfAllBanks\n\ + ldrb r0, [r5]\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + bcc _08018360\n\ + mov r1, r10\n\ + strb r1, [r5]\n\ _08018360:\n\ - ldrb r0, [r5]\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _08018390\n\ - ldr r1, _08018388 @ =gBattlePartyID\n\ - ldrb r0, [r5]\n\ - lsls r0, 1\n\ - adds r0, r1\n\ - ldrh r1, [r0]\n\ - movs r0, 0x64\n\ - muls r1, r0\n\ - ldr r0, _0801838C @ =gPlayerParty\n\ - b _080183A0\n\ - .align 2, 0\n\ + ldrb r0, [r5]\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _08018390\n\ + ldr r1, _08018388 @ =gBattlePartyID\n\ + ldrb r0, [r5]\n\ + lsls r0, 1\n\ + adds r0, r1\n\ + ldrh r1, [r0]\n\ + movs r0, 0x64\n\ + muls r1, r0\n\ + ldr r0, _0801838C @ =gPlayerParty\n\ + b _080183A0\n\ + .align 2, 0\n\ _08018380: .4byte gBankAttacker\n\ _08018384: .4byte gNoOfAllBanks\n\ _08018388: .4byte gBattlePartyID\n\ _0801838C: .4byte gPlayerParty\n\ _08018390:\n\ - ldr r1, _080183D0 @ =gBattlePartyID\n\ - ldrb r0, [r5]\n\ - lsls r0, 1\n\ - adds r0, r1\n\ - ldrh r1, [r0]\n\ - movs r0, 0x64\n\ - muls r1, r0\n\ - ldr r0, _080183D4 @ =gEnemyParty\n\ + ldr r1, _080183D0 @ =gBattlePartyID\n\ + ldrb r0, [r5]\n\ + lsls r0, 1\n\ + adds r0, r1\n\ + ldrh r1, [r0]\n\ + movs r0, 0x64\n\ + muls r1, r0\n\ + ldr r0, _080183D4 @ =gEnemyParty\n\ _080183A0:\n\ - adds r7, r1, r0\n\ - ldr r5, _080183D8 @ =gBankTarget\n\ - ldr r1, _080183DC @ =gNoOfAllBanks\n\ - ldrb r0, [r5]\n\ - ldrb r1, [r1]\n\ - cmp r0, r1\n\ - bcc _080183B2\n\ - mov r2, r10\n\ - strb r2, [r5]\n\ + adds r7, r1, r0\n\ + ldr r5, _080183D8 @ =gBankTarget\n\ + ldr r1, _080183DC @ =gNoOfAllBanks\n\ + ldrb r0, [r5]\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + bcc _080183B2\n\ + mov r2, r10\n\ + strb r2, [r5]\n\ _080183B2:\n\ - ldrb r0, [r5]\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _080183E4\n\ - ldr r1, _080183D0 @ =gBattlePartyID\n\ - ldrb r0, [r5]\n\ - lsls r0, 1\n\ - adds r0, r1\n\ - ldrh r1, [r0]\n\ - movs r0, 0x64\n\ - muls r1, r0\n\ - ldr r0, _080183E0 @ =gPlayerParty\n\ - b _080183F4\n\ - .align 2, 0\n\ + ldrb r0, [r5]\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _080183E4\n\ + ldr r1, _080183D0 @ =gBattlePartyID\n\ + ldrb r0, [r5]\n\ + lsls r0, 1\n\ + adds r0, r1\n\ + ldrh r1, [r0]\n\ + movs r0, 0x64\n\ + muls r1, r0\n\ + ldr r0, _080183E0 @ =gPlayerParty\n\ + b _080183F4\n\ + .align 2, 0\n\ _080183D0: .4byte gBattlePartyID\n\ _080183D4: .4byte gEnemyParty\n\ _080183D8: .4byte gBankTarget\n\ _080183DC: .4byte gNoOfAllBanks\n\ _080183E0: .4byte gPlayerParty\n\ _080183E4:\n\ - ldr r1, _08018444 @ =gBattlePartyID\n\ - ldrb r0, [r5]\n\ - lsls r0, 1\n\ - adds r0, r1\n\ - ldrh r1, [r0]\n\ - movs r0, 0x64\n\ - muls r1, r0\n\ - ldr r0, _08018448 @ =gEnemyParty\n\ + ldr r1, _08018444 @ =gBattlePartyID\n\ + ldrb r0, [r5]\n\ + lsls r0, 1\n\ + adds r0, r1\n\ + ldrh r1, [r0]\n\ + movs r0, 0x64\n\ + muls r1, r0\n\ + ldr r0, _08018448 @ =gEnemyParty\n\ _080183F4:\n\ - adds r5, r1, r0\n\ - adds r0, r7, 0\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - str r0, [sp, 0x8]\n\ - adds r0, r7, 0\n\ - movs r1, 0\n\ - bl GetMonData\n\ - str r0, [sp, 0x10]\n\ - adds r0, r5, 0\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - str r0, [sp, 0xC]\n\ - adds r0, r5, 0\n\ - movs r1, 0\n\ - bl GetMonData\n\ - str r0, [sp, 0x14]\n\ - ldr r0, _0801844C @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - movs r0, 0x80\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08018436\n\ - bl _08019F92\n\ + adds r5, r1, r0\n\ + adds r0, r7, 0\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + str r0, [sp, 0x8]\n\ + adds r0, r7, 0\n\ + movs r1, 0\n\ + bl GetMonData\n\ + str r0, [sp, 0x10]\n\ + adds r0, r5, 0\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + str r0, [sp, 0xC]\n\ + adds r0, r5, 0\n\ + movs r1, 0\n\ + bl GetMonData\n\ + str r0, [sp, 0x14]\n\ + ldr r0, _0801844C @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + movs r0, 0x80\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08018436\n\ + bl _08019F92\n\ _08018436:\n\ - mov r3, r8\n\ - cmp r3, 0\n\ - beq _08018454\n\ - ldr r0, _08018450 @ =gLastUsedAbility\n\ - strb r3, [r0]\n\ - mov r8, r0\n\ - b _0801846A\n\ - .align 2, 0\n\ + mov r3, r8\n\ + cmp r3, 0\n\ + beq _08018454\n\ + ldr r0, _08018450 @ =gLastUsedAbility\n\ + strb r3, [r0]\n\ + mov r8, r0\n\ + b _0801846A\n\ + .align 2, 0\n\ _08018444: .4byte gBattlePartyID\n\ _08018448: .4byte gEnemyParty\n\ _0801844C: .4byte gBattleTypeFlags\n\ _08018450: .4byte gLastUsedAbility\n\ _08018454:\n\ - ldr r2, _08018474 @ =gLastUsedAbility\n\ - ldr r1, _08018478 @ =gBattleMons\n\ - movs r0, 0x58\n\ - mov r5, r10\n\ - muls r5, r0\n\ - adds r0, r5, 0\n\ - adds r0, r1\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - strb r0, [r2]\n\ - mov r8, r2\n\ + ldr r2, _08018474 @ =gLastUsedAbility\n\ + ldr r1, _08018478 @ =gBattleMons\n\ + movs r0, 0x58\n\ + mov r5, r10\n\ + muls r5, r0\n\ + adds r0, r5, 0\n\ + adds r0, r1\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + strb r0, [r2]\n\ + mov r8, r2\n\ _0801846A:\n\ - cmp r4, 0\n\ - beq _0801847C\n\ - adds r3, r4, 0\n\ - b _08018480\n\ - .align 2, 0\n\ + cmp r4, 0\n\ + beq _0801847C\n\ + adds r3, r4, 0\n\ + b _08018480\n\ + .align 2, 0\n\ _08018474: .4byte gLastUsedAbility\n\ _08018478: .4byte gBattleMons\n\ _0801847C:\n\ - ldr r0, _08018494 @ =gCurrentMove\n\ - ldrh r3, [r0]\n\ + ldr r0, _08018494 @ =gCurrentMove\n\ + ldrh r3, [r0]\n\ _08018480:\n\ - ldr r1, _08018498 @ =0x02000000\n\ - ldr r2, _0801849C @ =0x0001601c\n\ - adds r0, r1, r2\n\ - ldrb r0, [r0]\n\ - adds r7, r1, 0\n\ - cmp r0, 0\n\ - beq _080184A0\n\ - movs r4, 0x3F\n\ - ands r4, r0\n\ - b _080184AC\n\ - .align 2, 0\n\ + ldr r1, _08018498 @ =0x02000000\n\ + ldr r2, _0801849C @ =0x0001601c\n\ + adds r0, r1, r2\n\ + ldrb r0, [r0]\n\ + adds r7, r1, 0\n\ + cmp r0, 0\n\ + beq _080184A0\n\ + movs r4, 0x3F\n\ + ands r4, r0\n\ + b _080184AC\n\ + .align 2, 0\n\ _08018494: .4byte gCurrentMove\n\ _08018498: .4byte 0x02000000\n\ _0801849C: .4byte 0x0001601c\n\ _080184A0:\n\ - ldr r1, _080184C0 @ =gBattleMoves\n\ - lsls r0, r3, 1\n\ - adds r0, r3\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldrb r4, [r0, 0x2]\n\ + ldr r1, _080184C0 @ =gBattleMoves\n\ + lsls r0, r3, 1\n\ + adds r0, r3\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldrb r4, [r0, 0x2]\n\ _080184AC:\n\ - ldr r5, [sp, 0x4]\n\ - cmp r5, 0x13\n\ - bls _080184B6\n\ - bl _08019F76\n\ + ldr r5, [sp, 0x4]\n\ + cmp r5, 0x13\n\ + bls _080184B6\n\ + bl _08019F76\n\ _080184B6:\n\ - lsls r0, r5, 2\n\ - ldr r1, _080184C4 @ =_080184C8\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ + lsls r0, r5, 2\n\ + ldr r1, _080184C4 @ =_080184C8\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ _080184C0: .4byte gBattleMoves\n\ _080184C4: .4byte _080184C8\n\ - .align 2, 0\n\ + .align 2, 0\n\ _080184C8:\n\ - .4byte _08018518\n\ - .4byte _08018814\n\ - .4byte _08018A40\n\ - .4byte _08018AD8\n\ - .4byte _08018CF0\n\ - .4byte _08019448\n\ - .4byte _080197B4\n\ - .4byte _08019804\n\ - .4byte _08019880\n\ - .4byte _080198FC\n\ - .4byte _08019B1C\n\ - .4byte _08019940\n\ - .4byte _08019B60\n\ - .4byte _08019BBC\n\ - .4byte _08019C18\n\ - .4byte _08019D18\n\ - .4byte _08019D5C\n\ - .4byte _08019DB8\n\ - .4byte _08019F44\n\ - .4byte _08019CD4\n\ + .4byte _08018518\n\ + .4byte _08018814\n\ + .4byte _08018A40\n\ + .4byte _08018AD8\n\ + .4byte _08018CF0\n\ + .4byte _08019448\n\ + .4byte _080197B4\n\ + .4byte _08019804\n\ + .4byte _08019880\n\ + .4byte _080198FC\n\ + .4byte _08019B1C\n\ + .4byte _08019940\n\ + .4byte _08019B60\n\ + .4byte _08019BBC\n\ + .4byte _08019C18\n\ + .4byte _08019D18\n\ + .4byte _08019D5C\n\ + .4byte _08019DB8\n\ + .4byte _08019F44\n\ + .4byte _08019CD4\n\ _08018518:\n\ - ldr r2, _0801854C @ =gBankAttacker\n\ - ldr r0, _08018550 @ =gNoOfAllBanks\n\ - ldrb r1, [r2]\n\ - adds r5, r0, 0\n\ - ldrb r0, [r5]\n\ - cmp r1, r0\n\ - bcc _0801852A\n\ - mov r1, r10\n\ - strb r1, [r2]\n\ + ldr r2, _0801854C @ =gBankAttacker\n\ + ldr r0, _08018550 @ =gNoOfAllBanks\n\ + ldrb r1, [r2]\n\ + adds r5, r0, 0\n\ + ldrb r0, [r5]\n\ + cmp r1, r0\n\ + bcc _0801852A\n\ + mov r1, r10\n\ + strb r1, [r2]\n\ _0801852A:\n\ - mov r2, r8\n\ - ldrb r0, [r2]\n\ - cmp r0, 0x2D\n\ - bne _08018534\n\ - b _080186B8\n\ + mov r2, r8\n\ + ldrb r0, [r2]\n\ + cmp r0, 0x2D\n\ + bne _08018534\n\ + b _080186B8\n\ _08018534:\n\ - cmp r0, 0x2D\n\ - bgt _08018564\n\ - cmp r0, 0xD\n\ - bne _0801853E\n\ - b _080187DC\n\ + cmp r0, 0x2D\n\ + bgt _08018564\n\ + cmp r0, 0xD\n\ + bne _0801853E\n\ + b _080187DC\n\ _0801853E:\n\ - cmp r0, 0xD\n\ - bgt _08018554\n\ - cmp r0, 0x2\n\ - bne _08018548\n\ - b _08018680\n\ + cmp r0, 0xD\n\ + bgt _08018554\n\ + cmp r0, 0x2\n\ + bne _08018548\n\ + b _08018680\n\ _08018548:\n\ - bl _08019F76\n\ - .align 2, 0\n\ + bl _08019F76\n\ + .align 2, 0\n\ _0801854C: .4byte gBankAttacker\n\ _08018550: .4byte gNoOfAllBanks\n\ _08018554:\n\ - cmp r0, 0x16\n\ - bne _0801855A\n\ - b _08018728\n\ + cmp r0, 0x16\n\ + bne _0801855A\n\ + b _08018728\n\ _0801855A:\n\ - cmp r0, 0x24\n\ - bne _08018560\n\ - b _080187A0\n\ + cmp r0, 0x24\n\ + bne _08018560\n\ + b _080187A0\n\ _08018560:\n\ - bl _08019F76\n\ + bl _08019F76\n\ _08018564:\n\ - cmp r0, 0x46\n\ - bne _0801856A\n\ - b _080186F0\n\ + cmp r0, 0x46\n\ + bne _0801856A\n\ + b _080186F0\n\ _0801856A:\n\ - cmp r0, 0x46\n\ - bgt _08018578\n\ - cmp r0, 0x3B\n\ - bne _08018574\n\ - b _0801875C\n\ + cmp r0, 0x46\n\ + bgt _08018578\n\ + cmp r0, 0x3B\n\ + bne _08018574\n\ + b _0801875C\n\ _08018574:\n\ - bl _08019F76\n\ + bl _08019F76\n\ _08018578:\n\ - cmp r0, 0x4D\n\ - bne _0801857E\n\ - b _080187DC\n\ + cmp r0, 0x4D\n\ + bne _0801857E\n\ + b _080187DC\n\ _0801857E:\n\ - cmp r0, 0xFF\n\ - beq _08018586\n\ - bl _08019F76\n\ + cmp r0, 0xFF\n\ + beq _08018586\n\ + bl _08019F76\n\ _08018586:\n\ - bl weather_get_current\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - subs r0, 0x3\n\ - cmp r0, 0xA\n\ - bhi _0801864C\n\ - lsls r0, 2\n\ - ldr r1, _080185A0 @ =_080185A4\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ + bl weather_get_current\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + subs r0, 0x3\n\ + cmp r0, 0xA\n\ + bhi _0801864C\n\ + lsls r0, 2\n\ + ldr r1, _080185A0 @ =_080185A4\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ _080185A0: .4byte _080185A4\n\ - .align 2, 0\n\ + .align 2, 0\n\ _080185A4:\n\ - .4byte _080185D0\n\ - .4byte _0801864C\n\ - .4byte _080185D0\n\ - .4byte _0801864C\n\ - .4byte _0801864C\n\ - .4byte _080185F8\n\ - .4byte _0801864C\n\ - .4byte _0801864C\n\ - .4byte _0801864C\n\ - .4byte _08018620\n\ - .4byte _080185D0\n\ + .4byte _080185D0\n\ + .4byte _0801864C\n\ + .4byte _080185D0\n\ + .4byte _0801864C\n\ + .4byte _0801864C\n\ + .4byte _080185F8\n\ + .4byte _0801864C\n\ + .4byte _0801864C\n\ + .4byte _0801864C\n\ + .4byte _08018620\n\ + .4byte _080185D0\n\ _080185D0:\n\ - ldr r2, _080185EC @ =gBattleWeather\n\ - ldrh r1, [r2]\n\ - movs r0, 0x7\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0801864C\n\ - movs r0, 0x5\n\ - strh r0, [r2]\n\ - ldr r0, _080185F0 @ =0x02000000\n\ - ldr r3, _080185F4 @ =0x000160a4\n\ - adds r2, r0, r3\n\ - movs r1, 0xA\n\ - b _08018638\n\ - .align 2, 0\n\ + ldr r2, _080185EC @ =gBattleWeather\n\ + ldrh r1, [r2]\n\ + movs r0, 0x7\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0801864C\n\ + movs r0, 0x5\n\ + strh r0, [r2]\n\ + ldr r0, _080185F0 @ =0x02000000\n\ + ldr r3, _080185F4 @ =0x000160a4\n\ + adds r2, r0, r3\n\ + movs r1, 0xA\n\ + b _08018638\n\ + .align 2, 0\n\ _080185EC: .4byte gBattleWeather\n\ _080185F0: .4byte 0x02000000\n\ _080185F4: .4byte 0x000160a4\n\ _080185F8:\n\ - ldr r3, _08018614 @ =gBattleWeather\n\ - ldrh r1, [r3]\n\ - movs r2, 0x18\n\ - adds r0, r2, 0\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0801864C\n\ - strh r2, [r3]\n\ - ldr r0, _08018618 @ =0x02000000\n\ - ldr r3, _0801861C @ =0x000160a4\n\ - adds r2, r0, r3\n\ - movs r1, 0xC\n\ - b _08018638\n\ - .align 2, 0\n\ + ldr r3, _08018614 @ =gBattleWeather\n\ + ldrh r1, [r3]\n\ + movs r2, 0x18\n\ + adds r0, r2, 0\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0801864C\n\ + strh r2, [r3]\n\ + ldr r0, _08018618 @ =0x02000000\n\ + ldr r3, _0801861C @ =0x000160a4\n\ + adds r2, r0, r3\n\ + movs r1, 0xC\n\ + b _08018638\n\ + .align 2, 0\n\ _08018614: .4byte gBattleWeather\n\ _08018618: .4byte 0x02000000\n\ _0801861C: .4byte 0x000160a4\n\ _08018620:\n\ - ldr r3, _08018668 @ =gBattleWeather\n\ - ldrh r1, [r3]\n\ - movs r2, 0x60\n\ - adds r0, r2, 0\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0801864C\n\ - strh r2, [r3]\n\ - ldr r0, _0801866C @ =0x02000000\n\ - ldr r3, _08018670 @ =0x000160a4\n\ - adds r2, r0, r3\n\ - movs r1, 0xB\n\ + ldr r3, _08018668 @ =gBattleWeather\n\ + ldrh r1, [r3]\n\ + movs r2, 0x60\n\ + adds r0, r2, 0\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0801864C\n\ + strh r2, [r3]\n\ + ldr r0, _0801866C @ =0x02000000\n\ + ldr r3, _08018670 @ =0x000160a4\n\ + adds r2, r0, r3\n\ + movs r1, 0xB\n\ _08018638:\n\ - strb r1, [r2]\n\ - ldr r5, _08018674 @ =0x00016003\n\ - adds r0, r5\n\ - mov r1, r10\n\ - strb r1, [r0]\n\ - mov r0, r9\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ + strb r1, [r2]\n\ + ldr r5, _08018674 @ =0x00016003\n\ + adds r0, r5\n\ + mov r1, r10\n\ + strb r1, [r0]\n\ + mov r0, r9\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r9, r0\n\ _0801864C:\n\ - mov r2, r9\n\ - cmp r2, 0\n\ - bne _08018656\n\ - bl _08019F92\n\ + mov r2, r9\n\ + cmp r2, 0\n\ + bne _08018656\n\ + bl _08019F92\n\ _08018656:\n\ - bl weather_get_current\n\ - ldr r1, _08018678 @ =gBattleCommunication\n\ - strb r0, [r1, 0x5]\n\ - ldr r0, _0801867C @ =gUnknown_081D901D\n\ - bl b_push_move_exec\n\ - bl _08019F76\n\ - .align 2, 0\n\ + bl weather_get_current\n\ + ldr r1, _08018678 @ =gBattleCommunication\n\ + strb r0, [r1, 0x5]\n\ + ldr r0, _0801867C @ =gUnknown_081D901D\n\ + bl b_push_move_exec\n\ + bl _08019F76\n\ + .align 2, 0\n\ _08018668: .4byte gBattleWeather\n\ _0801866C: .4byte 0x02000000\n\ _08018670: .4byte 0x000160a4\n\ @@ -2663,367 +2663,367 @@ _08018674: .4byte 0x00016003\n\ _08018678: .4byte gBattleCommunication\n\ _0801867C: .4byte gUnknown_081D901D\n\ _08018680:\n\ - ldr r2, _080186A8 @ =gBattleWeather\n\ - ldrh r1, [r2]\n\ - movs r0, 0x4\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08018690\n\ - bl _08019F76\n\ + ldr r2, _080186A8 @ =gBattleWeather\n\ + ldrh r1, [r2]\n\ + movs r0, 0x4\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08018690\n\ + bl _08019F76\n\ _08018690:\n\ - movs r0, 0x5\n\ - strh r0, [r2]\n\ - ldr r0, _080186AC @ =BattleScript_DrizzleActivates\n\ - bl b_push_move_exec\n\ - ldr r0, _080186B0 @ =0x02000000\n\ - ldr r3, _080186B4 @ =0x00016003\n\ - adds r0, r3\n\ - mov r5, r10\n\ - strb r5, [r0]\n\ - bl _08019F22\n\ - .align 2, 0\n\ + movs r0, 0x5\n\ + strh r0, [r2]\n\ + ldr r0, _080186AC @ =BattleScript_DrizzleActivates\n\ + bl b_push_move_exec\n\ + ldr r0, _080186B0 @ =0x02000000\n\ + ldr r3, _080186B4 @ =0x00016003\n\ + adds r0, r3\n\ + mov r5, r10\n\ + strb r5, [r0]\n\ + bl _08019F22\n\ + .align 2, 0\n\ _080186A8: .4byte gBattleWeather\n\ _080186AC: .4byte BattleScript_DrizzleActivates\n\ _080186B0: .4byte 0x02000000\n\ _080186B4: .4byte 0x00016003\n\ _080186B8:\n\ - ldr r2, _080186E0 @ =gBattleWeather\n\ - ldrh r1, [r2]\n\ - movs r0, 0x10\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080186C8\n\ - bl _08019F76\n\ + ldr r2, _080186E0 @ =gBattleWeather\n\ + ldrh r1, [r2]\n\ + movs r0, 0x10\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080186C8\n\ + bl _08019F76\n\ _080186C8:\n\ - movs r0, 0x18\n\ - strh r0, [r2]\n\ - ldr r0, _080186E4 @ =BattleScript_SandstreamActivates\n\ - bl b_push_move_exec\n\ - ldr r0, _080186E8 @ =0x02000000\n\ - ldr r1, _080186EC @ =0x00016003\n\ - adds r0, r1\n\ - mov r2, r10\n\ - strb r2, [r0]\n\ - bl _08019F22\n\ - .align 2, 0\n\ + movs r0, 0x18\n\ + strh r0, [r2]\n\ + ldr r0, _080186E4 @ =BattleScript_SandstreamActivates\n\ + bl b_push_move_exec\n\ + ldr r0, _080186E8 @ =0x02000000\n\ + ldr r1, _080186EC @ =0x00016003\n\ + adds r0, r1\n\ + mov r2, r10\n\ + strb r2, [r0]\n\ + bl _08019F22\n\ + .align 2, 0\n\ _080186E0: .4byte gBattleWeather\n\ _080186E4: .4byte BattleScript_SandstreamActivates\n\ _080186E8: .4byte 0x02000000\n\ _080186EC: .4byte 0x00016003\n\ _080186F0:\n\ - ldr r2, _08018718 @ =gBattleWeather\n\ - ldrh r1, [r2]\n\ - movs r0, 0x40\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08018700\n\ - bl _08019F76\n\ + ldr r2, _08018718 @ =gBattleWeather\n\ + ldrh r1, [r2]\n\ + movs r0, 0x40\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08018700\n\ + bl _08019F76\n\ _08018700:\n\ - movs r0, 0x60\n\ - strh r0, [r2]\n\ - ldr r0, _0801871C @ =BattleScript_DroughtActivates\n\ - bl b_push_move_exec\n\ - ldr r0, _08018720 @ =0x02000000\n\ - ldr r3, _08018724 @ =0x00016003\n\ - adds r0, r3\n\ - mov r5, r10\n\ - strb r5, [r0]\n\ - bl _08019F22\n\ - .align 2, 0\n\ + movs r0, 0x60\n\ + strh r0, [r2]\n\ + ldr r0, _0801871C @ =BattleScript_DroughtActivates\n\ + bl b_push_move_exec\n\ + ldr r0, _08018720 @ =0x02000000\n\ + ldr r3, _08018724 @ =0x00016003\n\ + adds r0, r3\n\ + mov r5, r10\n\ + strb r5, [r0]\n\ + bl _08019F22\n\ + .align 2, 0\n\ _08018718: .4byte gBattleWeather\n\ _0801871C: .4byte BattleScript_DroughtActivates\n\ _08018720: .4byte 0x02000000\n\ _08018724: .4byte 0x00016003\n\ _08018728:\n\ - ldr r0, _08018754 @ =gSpecialStatuses\n\ - mov r1, r10\n\ - lsls r2, r1, 2\n\ - adds r1, r2, r1\n\ - lsls r1, 2\n\ - adds r3, r1, r0\n\ - ldrb r0, [r3]\n\ - lsls r0, 28\n\ - cmp r0, 0\n\ - bge _08018740\n\ - bl _08019F76\n\ + ldr r0, _08018754 @ =gSpecialStatuses\n\ + mov r1, r10\n\ + lsls r2, r1, 2\n\ + adds r1, r2, r1\n\ + lsls r1, 2\n\ + adds r3, r1, r0\n\ + ldrb r0, [r3]\n\ + lsls r0, 28\n\ + cmp r0, 0\n\ + bge _08018740\n\ + bl _08019F76\n\ _08018740:\n\ - ldr r1, _08018758 @ =gStatuses3\n\ - adds r1, r2, r1\n\ - ldr r0, [r1]\n\ - movs r2, 0x80\n\ - lsls r2, 12\n\ - orrs r0, r2\n\ - str r0, [r1]\n\ - ldrb r0, [r3]\n\ - movs r1, 0x8\n\ - b _080187CA\n\ - .align 2, 0\n\ + ldr r1, _08018758 @ =gStatuses3\n\ + adds r1, r2, r1\n\ + ldr r0, [r1]\n\ + movs r2, 0x80\n\ + lsls r2, 12\n\ + orrs r0, r2\n\ + str r0, [r1]\n\ + ldrb r0, [r3]\n\ + movs r1, 0x8\n\ + b _080187CA\n\ + .align 2, 0\n\ _08018754: .4byte gSpecialStatuses\n\ _08018758: .4byte gStatuses3\n\ _0801875C:\n\ - mov r0, r10\n\ - bl CastformDataTypeChange\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ - cmp r0, 0\n\ - bne _08018770\n\ - bl _08019F92\n\ + mov r0, r10\n\ + bl CastformDataTypeChange\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r9, r0\n\ + cmp r0, 0\n\ + bne _08018770\n\ + bl _08019F92\n\ _08018770:\n\ - ldr r0, _08018790 @ =BattleScript_CastformChange\n\ - bl b_push_move_exec\n\ - ldr r0, _08018794 @ =0x02000000\n\ - ldr r2, _08018798 @ =0x00016003\n\ - adds r1, r0, r2\n\ - mov r3, r10\n\ - strb r3, [r1]\n\ - mov r1, r9\n\ - subs r1, 0x1\n\ - ldr r5, _0801879C @ =0x0001609b\n\ - adds r0, r5\n\ - strb r1, [r0]\n\ - bl _08019F76\n\ - .align 2, 0\n\ + ldr r0, _08018790 @ =BattleScript_CastformChange\n\ + bl b_push_move_exec\n\ + ldr r0, _08018794 @ =0x02000000\n\ + ldr r2, _08018798 @ =0x00016003\n\ + adds r1, r0, r2\n\ + mov r3, r10\n\ + strb r3, [r1]\n\ + mov r1, r9\n\ + subs r1, 0x1\n\ + ldr r5, _0801879C @ =0x0001609b\n\ + adds r0, r5\n\ + strb r1, [r0]\n\ + bl _08019F76\n\ + .align 2, 0\n\ _08018790: .4byte BattleScript_CastformChange\n\ _08018794: .4byte 0x02000000\n\ _08018798: .4byte 0x00016003\n\ _0801879C: .4byte 0x0001609b\n\ _080187A0:\n\ - ldr r0, _080187D4 @ =gSpecialStatuses\n\ - mov r1, r10\n\ - lsls r2, r1, 2\n\ - adds r1, r2, r1\n\ - lsls r1, 2\n\ - adds r3, r1, r0\n\ - ldrb r0, [r3]\n\ - lsls r0, 27\n\ - cmp r0, 0\n\ - bge _080187B8\n\ - bl _08019F76\n\ + ldr r0, _080187D4 @ =gSpecialStatuses\n\ + mov r1, r10\n\ + lsls r2, r1, 2\n\ + adds r1, r2, r1\n\ + lsls r1, 2\n\ + adds r3, r1, r0\n\ + ldrb r0, [r3]\n\ + lsls r0, 27\n\ + cmp r0, 0\n\ + bge _080187B8\n\ + bl _08019F76\n\ _080187B8:\n\ - ldr r1, _080187D8 @ =gStatuses3\n\ - adds r1, r2, r1\n\ - ldr r0, [r1]\n\ - movs r2, 0x80\n\ - lsls r2, 13\n\ - orrs r0, r2\n\ - str r0, [r1]\n\ - ldrb r0, [r3]\n\ - movs r1, 0x10\n\ + ldr r1, _080187D8 @ =gStatuses3\n\ + adds r1, r2, r1\n\ + ldr r0, [r1]\n\ + movs r2, 0x80\n\ + lsls r2, 13\n\ + orrs r0, r2\n\ + str r0, [r1]\n\ + ldrb r0, [r3]\n\ + movs r1, 0x10\n\ _080187CA:\n\ - orrs r0, r1\n\ - strb r0, [r3]\n\ - bl _08019F76\n\ - .align 2, 0\n\ + orrs r0, r1\n\ + strb r0, [r3]\n\ + bl _08019F76\n\ + .align 2, 0\n\ _080187D4: .4byte gSpecialStatuses\n\ _080187D8: .4byte gStatuses3\n\ _080187DC:\n\ - movs r6, 0\n\ - ldrb r5, [r5]\n\ - cmp r6, r5\n\ - bcc _080187E8\n\ - bl _08019F76\n\ + movs r6, 0\n\ + ldrb r5, [r5]\n\ + cmp r6, r5\n\ + bcc _080187E8\n\ + bl _08019F76\n\ _080187E8:\n\ - adds r0, r6, 0\n\ - bl CastformDataTypeChange\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ - cmp r0, 0\n\ - beq _080187FC\n\ - bl _08019E14\n\ + adds r0, r6, 0\n\ + bl CastformDataTypeChange\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r9, r0\n\ + cmp r0, 0\n\ + beq _080187FC\n\ + bl _08019E14\n\ _080187FC:\n\ - adds r0, r6, 0x1\n\ - lsls r0, 24\n\ - lsrs r6, r0, 24\n\ - ldr r0, _08018810 @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r6, r0\n\ - bcc _080187E8\n\ - bl _08019F76\n\ - .align 2, 0\n\ + adds r0, r6, 0x1\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + ldr r0, _08018810 @ =gNoOfAllBanks\n\ + ldrb r0, [r0]\n\ + cmp r6, r0\n\ + bcc _080187E8\n\ + bl _08019F76\n\ + .align 2, 0\n\ _08018810: .4byte gNoOfAllBanks\n\ _08018814:\n\ - ldr r2, _08018844 @ =gBattleMons\n\ - movs r0, 0x58\n\ - mov r1, r10\n\ - muls r1, r0\n\ - adds r4, r1, r2\n\ - ldrh r0, [r4, 0x28]\n\ - cmp r0, 0\n\ - bne _08018828\n\ - bl _08019F76\n\ + ldr r2, _08018844 @ =gBattleMons\n\ + movs r0, 0x58\n\ + mov r1, r10\n\ + muls r1, r0\n\ + adds r4, r1, r2\n\ + ldrh r0, [r4, 0x28]\n\ + cmp r0, 0\n\ + bne _08018828\n\ + bl _08019F76\n\ _08018828:\n\ - ldr r0, _08018848 @ =gBankAttacker\n\ - mov r3, r10\n\ - strb r3, [r0]\n\ - mov r3, r8\n\ - ldrb r5, [r3]\n\ - cmp r5, 0x2C\n\ - beq _0801885A\n\ - cmp r5, 0x2C\n\ - bgt _0801884C\n\ - cmp r5, 0x3\n\ - bne _08018840\n\ - b _080189B8\n\ + ldr r0, _08018848 @ =gBankAttacker\n\ + mov r3, r10\n\ + strb r3, [r0]\n\ + mov r3, r8\n\ + ldrb r5, [r3]\n\ + cmp r5, 0x2C\n\ + beq _0801885A\n\ + cmp r5, 0x2C\n\ + bgt _0801884C\n\ + cmp r5, 0x3\n\ + bne _08018840\n\ + b _080189B8\n\ _08018840:\n\ - bl _08019F76\n\ - .align 2, 0\n\ + bl _08019F76\n\ + .align 2, 0\n\ _08018844: .4byte gBattleMons\n\ _08018848: .4byte gBankAttacker\n\ _0801884C:\n\ - cmp r5, 0x36\n\ - bne _08018852\n\ - b _08018A18\n\ + cmp r5, 0x36\n\ + bne _08018852\n\ + b _08018A18\n\ _08018852:\n\ - cmp r5, 0x3D\n\ - beq _080188DC\n\ - bl _08019F76\n\ + cmp r5, 0x3D\n\ + beq _080188DC\n\ + bl _08019F76\n\ _0801885A:\n\ - movs r0, 0\n\ - str r0, [sp]\n\ - movs r0, 0x13\n\ - movs r1, 0\n\ - movs r2, 0xD\n\ - movs r3, 0\n\ - bl AbilityBattleEffects\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0\n\ - beq _08018876\n\ - bl _08019F76\n\ + movs r0, 0\n\ + str r0, [sp]\n\ + movs r0, 0x13\n\ + movs r1, 0\n\ + movs r2, 0xD\n\ + movs r3, 0\n\ + bl AbilityBattleEffects\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0\n\ + beq _08018876\n\ + bl _08019F76\n\ _08018876:\n\ - str r0, [sp]\n\ - movs r0, 0x13\n\ - movs r1, 0\n\ - movs r2, 0x4D\n\ - movs r3, 0\n\ - bl AbilityBattleEffects\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _0801888E\n\ - bl _08019F76\n\ + str r0, [sp]\n\ + movs r0, 0x13\n\ + movs r1, 0\n\ + movs r2, 0x4D\n\ + movs r3, 0\n\ + bl AbilityBattleEffects\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _0801888E\n\ + bl _08019F76\n\ _0801888E:\n\ - ldr r0, _080188D0 @ =gBattleWeather\n\ - ldrh r1, [r0]\n\ - movs r0, 0x7\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0801889E\n\ - bl _08019F76\n\ + ldr r0, _080188D0 @ =gBattleWeather\n\ + ldrh r1, [r0]\n\ + movs r0, 0x7\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0801889E\n\ + bl _08019F76\n\ _0801889E:\n\ - ldrh r0, [r4, 0x2C]\n\ - ldrh r1, [r4, 0x28]\n\ - cmp r0, r1\n\ - bhi _080188AA\n\ - bl _08019F76\n\ + ldrh r0, [r4, 0x2C]\n\ + ldrh r1, [r4, 0x28]\n\ + cmp r0, r1\n\ + bhi _080188AA\n\ + bl _08019F76\n\ _080188AA:\n\ - mov r2, r8\n\ - strb r5, [r2]\n\ - ldr r0, _080188D4 @ =BattleScript_RainDishActivates\n\ - bl b_push_move_exec\n\ - ldr r1, _080188D8 @ =gBattleMoveDamage\n\ - ldrh r0, [r4, 0x2C]\n\ - lsrs r0, 4\n\ - str r0, [r1]\n\ - cmp r0, 0\n\ - bne _080188C4\n\ - movs r0, 0x1\n\ - str r0, [r1]\n\ + mov r2, r8\n\ + strb r5, [r2]\n\ + ldr r0, _080188D4 @ =BattleScript_RainDishActivates\n\ + bl b_push_move_exec\n\ + ldr r1, _080188D8 @ =gBattleMoveDamage\n\ + ldrh r0, [r4, 0x2C]\n\ + lsrs r0, 4\n\ + str r0, [r1]\n\ + cmp r0, 0\n\ + bne _080188C4\n\ + movs r0, 0x1\n\ + str r0, [r1]\n\ _080188C4:\n\ - ldr r0, [r1]\n\ - negs r0, r0\n\ - str r0, [r1]\n\ - bl _08019F22\n\ - .align 2, 0\n\ + ldr r0, [r1]\n\ + negs r0, r0\n\ + str r0, [r1]\n\ + bl _08019F22\n\ + .align 2, 0\n\ _080188D0: .4byte gBattleWeather\n\ _080188D4: .4byte BattleScript_RainDishActivates\n\ _080188D8: .4byte gBattleMoveDamage\n\ _080188DC:\n\ - adds r0, r2, 0\n\ - adds r0, 0x4C\n\ - adds r5, r1, r0\n\ - ldrb r0, [r5]\n\ - cmp r0, 0\n\ - bne _080188EC\n\ - bl _08019F76\n\ + adds r0, r2, 0\n\ + adds r0, 0x4C\n\ + adds r5, r1, r0\n\ + ldrb r0, [r5]\n\ + cmp r0, 0\n\ + bne _080188EC\n\ + bl _08019F76\n\ _080188EC:\n\ - bl Random\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - movs r1, 0x3\n\ - bl __umodsi3\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - cmp r4, 0\n\ - beq _08018906\n\ - bl _08019F76\n\ + bl Random\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0x3\n\ + bl __umodsi3\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + cmp r4, 0\n\ + beq _08018906\n\ + bl _08019F76\n\ _08018906:\n\ - ldr r0, [r5]\n\ - movs r1, 0x88\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08018918\n\ - ldr r0, _08018990 @ =gBattleTextBuff1\n\ - ldr r1, _08018994 @ =gStatusConditionString_PoisonJpn\n\ - bl StringCopy\n\ + ldr r0, [r5]\n\ + movs r1, 0x88\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08018918\n\ + ldr r0, _08018990 @ =gBattleTextBuff1\n\ + ldr r1, _08018994 @ =gStatusConditionString_PoisonJpn\n\ + bl StringCopy\n\ _08018918:\n\ - ldr r0, [r5]\n\ - movs r1, 0x7\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0801892A\n\ - ldr r0, _08018990 @ =gBattleTextBuff1\n\ - ldr r1, _08018998 @ =gStatusConditionString_SleepJpn\n\ - bl StringCopy\n\ + ldr r0, [r5]\n\ + movs r1, 0x7\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0801892A\n\ + ldr r0, _08018990 @ =gBattleTextBuff1\n\ + ldr r1, _08018998 @ =gStatusConditionString_SleepJpn\n\ + bl StringCopy\n\ _0801892A:\n\ - ldr r0, [r5]\n\ - movs r1, 0x40\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0801893C\n\ - ldr r0, _08018990 @ =gBattleTextBuff1\n\ - ldr r1, _0801899C @ =gStatusConditionString_ParalysisJpn\n\ - bl StringCopy\n\ + ldr r0, [r5]\n\ + movs r1, 0x40\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0801893C\n\ + ldr r0, _08018990 @ =gBattleTextBuff1\n\ + ldr r1, _0801899C @ =gStatusConditionString_ParalysisJpn\n\ + bl StringCopy\n\ _0801893C:\n\ - ldr r0, [r5]\n\ - movs r1, 0x10\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0801894E\n\ - ldr r0, _08018990 @ =gBattleTextBuff1\n\ - ldr r1, _080189A0 @ =gStatusConditionString_BurnJpn\n\ - bl StringCopy\n\ + ldr r0, [r5]\n\ + movs r1, 0x10\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0801894E\n\ + ldr r0, _08018990 @ =gBattleTextBuff1\n\ + ldr r1, _080189A0 @ =gStatusConditionString_BurnJpn\n\ + bl StringCopy\n\ _0801894E:\n\ - ldr r0, [r5]\n\ - movs r1, 0x20\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08018960\n\ - ldr r0, _08018990 @ =gBattleTextBuff1\n\ - ldr r1, _080189A4 @ =gStatusConditionString_IceJpn\n\ - bl StringCopy\n\ + ldr r0, [r5]\n\ + movs r1, 0x20\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08018960\n\ + ldr r0, _08018990 @ =gBattleTextBuff1\n\ + ldr r1, _080189A4 @ =gStatusConditionString_IceJpn\n\ + bl StringCopy\n\ _08018960:\n\ - str r4, [r5]\n\ - ldr r0, _080189A8 @ =0x02000000\n\ - ldr r4, _080189AC @ =gActiveBank\n\ - mov r3, r10\n\ - strb r3, [r4]\n\ - ldr r1, _080189B0 @ =0x00016003\n\ - adds r0, r1\n\ - strb r3, [r0]\n\ - ldr r0, _080189B4 @ =BattleScript_ShedSkinActivates\n\ - bl b_push_move_exec\n\ - str r5, [sp]\n\ - movs r0, 0\n\ - movs r1, 0x28\n\ - movs r2, 0\n\ - movs r3, 0x4\n\ - bl EmitSetAttributes\n\ - ldrb r0, [r4]\n\ - bl MarkBufferBankForExecution\n\ - bl _08019F22\n\ - .align 2, 0\n\ + str r4, [r5]\n\ + ldr r0, _080189A8 @ =0x02000000\n\ + ldr r4, _080189AC @ =gActiveBank\n\ + mov r3, r10\n\ + strb r3, [r4]\n\ + ldr r1, _080189B0 @ =0x00016003\n\ + adds r0, r1\n\ + strb r3, [r0]\n\ + ldr r0, _080189B4 @ =BattleScript_ShedSkinActivates\n\ + bl b_push_move_exec\n\ + str r5, [sp]\n\ + movs r0, 0\n\ + movs r1, 0x28\n\ + movs r2, 0\n\ + movs r3, 0x4\n\ + bl EmitSetAttributes\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ + bl _08019F22\n\ + .align 2, 0\n\ _08018990: .4byte gBattleTextBuff1\n\ _08018994: .4byte gStatusConditionString_PoisonJpn\n\ _08018998: .4byte gStatusConditionString_SleepJpn\n\ @@ -3035,132 +3035,132 @@ _080189AC: .4byte gActiveBank\n\ _080189B0: .4byte 0x00016003\n\ _080189B4: .4byte BattleScript_ShedSkinActivates\n\ _080189B8:\n\ - ldrb r2, [r4, 0x1B]\n\ - movs r0, 0x1B\n\ - ldrsb r0, [r4, r0]\n\ - cmp r0, 0xB\n\ - ble _080189C6\n\ - bl _08019F76\n\ + ldrb r2, [r4, 0x1B]\n\ + movs r0, 0x1B\n\ + ldrsb r0, [r4, r0]\n\ + cmp r0, 0xB\n\ + ble _080189C6\n\ + bl _08019F76\n\ _080189C6:\n\ - ldr r0, _08018A04 @ =gDisableStructs\n\ - mov r3, r10\n\ - lsls r1, r3, 3\n\ - subs r1, r3\n\ - lsls r1, 2\n\ - adds r1, r0\n\ - ldrb r0, [r1, 0x16]\n\ - cmp r0, 0x2\n\ - bne _080189DC\n\ - bl _08019F76\n\ + ldr r0, _08018A04 @ =gDisableStructs\n\ + mov r3, r10\n\ + lsls r1, r3, 3\n\ + subs r1, r3\n\ + lsls r1, 2\n\ + adds r1, r0\n\ + ldrb r0, [r1, 0x16]\n\ + cmp r0, 0x2\n\ + bne _080189DC\n\ + bl _08019F76\n\ _080189DC:\n\ - adds r0, r2, 0x1\n\ - movs r2, 0\n\ - strb r0, [r4, 0x1B]\n\ - ldr r5, _08018A08 @ =0x000160a4\n\ - adds r1, r7, r5\n\ - movs r0, 0x11\n\ - strb r0, [r1]\n\ - ldr r1, _08018A0C @ =0x000160a5\n\ - adds r0, r7, r1\n\ - strb r2, [r0]\n\ - ldr r0, _08018A10 @ =BattleScript_SpeedBoostActivates\n\ - bl b_push_move_exec\n\ - ldr r2, _08018A14 @ =0x00016003\n\ - adds r0, r7, r2\n\ - mov r3, r10\n\ - strb r3, [r0]\n\ - bl _08019F22\n\ - .align 2, 0\n\ + adds r0, r2, 0x1\n\ + movs r2, 0\n\ + strb r0, [r4, 0x1B]\n\ + ldr r5, _08018A08 @ =0x000160a4\n\ + adds r1, r7, r5\n\ + movs r0, 0x11\n\ + strb r0, [r1]\n\ + ldr r1, _08018A0C @ =0x000160a5\n\ + adds r0, r7, r1\n\ + strb r2, [r0]\n\ + ldr r0, _08018A10 @ =BattleScript_SpeedBoostActivates\n\ + bl b_push_move_exec\n\ + ldr r2, _08018A14 @ =0x00016003\n\ + adds r0, r7, r2\n\ + mov r3, r10\n\ + strb r3, [r0]\n\ + bl _08019F22\n\ + .align 2, 0\n\ _08018A04: .4byte gDisableStructs\n\ _08018A08: .4byte 0x000160a4\n\ _08018A0C: .4byte 0x000160a5\n\ _08018A10: .4byte BattleScript_SpeedBoostActivates\n\ _08018A14: .4byte 0x00016003\n\ _08018A18:\n\ - ldr r2, _08018A3C @ =gDisableStructs\n\ - ldrb r0, [r0]\n\ - lsls r1, r0, 3\n\ - subs r1, r0\n\ - lsls r1, 2\n\ - adds r1, r2\n\ - ldrb r3, [r1, 0x18]\n\ - lsls r0, r3, 31\n\ - lsrs r0, 31\n\ - movs r2, 0x1\n\ - eors r2, r0\n\ - movs r0, 0x2\n\ - negs r0, r0\n\ - ands r0, r3\n\ - orrs r0, r2\n\ - strb r0, [r1, 0x18]\n\ - bl _08019F76\n\ - .align 2, 0\n\ + ldr r2, _08018A3C @ =gDisableStructs\n\ + ldrb r0, [r0]\n\ + lsls r1, r0, 3\n\ + subs r1, r0\n\ + lsls r1, 2\n\ + adds r1, r2\n\ + ldrb r3, [r1, 0x18]\n\ + lsls r0, r3, 31\n\ + lsrs r0, 31\n\ + movs r2, 0x1\n\ + eors r2, r0\n\ + movs r0, 0x2\n\ + negs r0, r0\n\ + ands r0, r3\n\ + orrs r0, r2\n\ + strb r0, [r1, 0x18]\n\ + bl _08019F76\n\ + .align 2, 0\n\ _08018A3C: .4byte gDisableStructs\n\ _08018A40:\n\ - mov r5, r8\n\ - ldrb r0, [r5]\n\ - cmp r0, 0x2B\n\ - beq _08018A4C\n\ - bl _08019F76\n\ + mov r5, r8\n\ + ldrb r0, [r5]\n\ + cmp r0, 0x2B\n\ + beq _08018A4C\n\ + bl _08019F76\n\ _08018A4C:\n\ - movs r4, 0\n\ - ldr r0, _08018ABC @ =gSoundMovesTable\n\ - ldrh r2, [r0]\n\ - ldr r5, _08018AC0 @ =0x0000ffff\n\ - adds r1, r0, 0\n\ - cmp r2, r5\n\ - bne _08018A5E\n\ - bl _08019F76\n\ + movs r4, 0\n\ + ldr r0, _08018ABC @ =gSoundMovesTable\n\ + ldrh r2, [r0]\n\ + ldr r5, _08018AC0 @ =0x0000ffff\n\ + adds r1, r0, 0\n\ + cmp r2, r5\n\ + bne _08018A5E\n\ + bl _08019F76\n\ _08018A5E:\n\ - cmp r2, r3\n\ - beq _08018A76\n\ - adds r2, r1, 0\n\ + cmp r2, r3\n\ + beq _08018A76\n\ + adds r2, r1, 0\n\ _08018A64:\n\ - adds r2, 0x2\n\ - adds r4, 0x1\n\ - ldrh r0, [r2]\n\ - cmp r0, r5\n\ - bne _08018A72\n\ - bl _08019F76\n\ + adds r2, 0x2\n\ + adds r4, 0x1\n\ + ldrh r0, [r2]\n\ + cmp r0, r5\n\ + bne _08018A72\n\ + bl _08019F76\n\ _08018A72:\n\ - cmp r0, r3\n\ - bne _08018A64\n\ + cmp r0, r3\n\ + bne _08018A64\n\ _08018A76:\n\ - lsls r0, r4, 1\n\ - adds r0, r1\n\ - ldrh r1, [r0]\n\ - ldr r0, _08018AC0 @ =0x0000ffff\n\ - cmp r1, r0\n\ - bne _08018A86\n\ - bl _08019F76\n\ + lsls r0, r4, 1\n\ + adds r0, r1\n\ + ldrh r1, [r0]\n\ + ldr r0, _08018AC0 @ =0x0000ffff\n\ + cmp r1, r0\n\ + bne _08018A86\n\ + bl _08019F76\n\ _08018A86:\n\ - ldr r1, _08018AC4 @ =gBattleMons\n\ - ldr r0, _08018AC8 @ =gBankAttacker\n\ - ldrb r2, [r0]\n\ - movs r0, 0x58\n\ - muls r0, r2\n\ - adds r1, 0x50\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - movs r1, 0x80\n\ - lsls r1, 5\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08018AAC\n\ - ldr r0, _08018ACC @ =gHitMarker\n\ - ldr r1, [r0]\n\ - movs r2, 0x80\n\ - lsls r2, 4\n\ - orrs r1, r2\n\ - str r1, [r0]\n\ + ldr r1, _08018AC4 @ =gBattleMons\n\ + ldr r0, _08018AC8 @ =gBankAttacker\n\ + ldrb r2, [r0]\n\ + movs r0, 0x58\n\ + muls r0, r2\n\ + adds r1, 0x50\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + movs r1, 0x80\n\ + lsls r1, 5\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08018AAC\n\ + ldr r0, _08018ACC @ =gHitMarker\n\ + ldr r1, [r0]\n\ + movs r2, 0x80\n\ + lsls r2, 4\n\ + orrs r1, r2\n\ + str r1, [r0]\n\ _08018AAC:\n\ - ldr r1, _08018AD0 @ =gBattlescriptCurrInstr\n\ - ldr r0, _08018AD4 @ =BattleScript_SoundproofProtected\n\ - str r0, [r1]\n\ - movs r0, 0x1\n\ - mov r9, r0\n\ - bl _08019F7C\n\ - .align 2, 0\n\ + ldr r1, _08018AD0 @ =gBattlescriptCurrInstr\n\ + ldr r0, _08018AD4 @ =BattleScript_SoundproofProtected\n\ + str r0, [r1]\n\ + movs r0, 0x1\n\ + mov r9, r0\n\ + bl _08019F7C\n\ + .align 2, 0\n\ _08018ABC: .4byte gSoundMovesTable\n\ _08018AC0: .4byte 0x0000ffff\n\ _08018AC4: .4byte gBattleMons\n\ @@ -3169,150 +3169,150 @@ _08018ACC: .4byte gHitMarker\n\ _08018AD0: .4byte gBattlescriptCurrInstr\n\ _08018AD4: .4byte BattleScript_SoundproofProtected\n\ _08018AD8:\n\ - cmp r3, 0\n\ - bne _08018AE0\n\ - bl _08019F76\n\ + cmp r3, 0\n\ + bne _08018AE0\n\ + bl _08019F76\n\ _08018AE0:\n\ - mov r1, r8\n\ - ldrb r0, [r1]\n\ - cmp r0, 0xB\n\ - beq _08018B50\n\ - cmp r0, 0xB\n\ - bgt _08018AF2\n\ - cmp r0, 0xA\n\ - beq _08018AF8\n\ - b _08018C6A\n\ + mov r1, r8\n\ + ldrb r0, [r1]\n\ + cmp r0, 0xB\n\ + beq _08018B50\n\ + cmp r0, 0xB\n\ + bgt _08018AF2\n\ + cmp r0, 0xA\n\ + beq _08018AF8\n\ + b _08018C6A\n\ _08018AF2:\n\ - cmp r0, 0x12\n\ - beq _08018BA8\n\ - b _08018C6A\n\ + cmp r0, 0x12\n\ + beq _08018BA8\n\ + b _08018C6A\n\ _08018AF8:\n\ - cmp r4, 0xD\n\ - beq _08018AFE\n\ - b _08018C6A\n\ + cmp r4, 0xD\n\ + beq _08018AFE\n\ + b _08018C6A\n\ _08018AFE:\n\ - ldr r0, _08018B28 @ =gBattleMoves\n\ - lsls r1, r3, 1\n\ - adds r1, r3\n\ - lsls r1, 2\n\ - adds r1, r0\n\ - ldrb r0, [r1, 0x1]\n\ - cmp r0, 0\n\ - bne _08018B10\n\ - b _08018C6A\n\ + ldr r0, _08018B28 @ =gBattleMoves\n\ + lsls r1, r3, 1\n\ + adds r1, r3\n\ + lsls r1, 2\n\ + adds r1, r0\n\ + ldrb r0, [r1, 0x1]\n\ + cmp r0, 0\n\ + bne _08018B10\n\ + b _08018C6A\n\ _08018B10:\n\ - ldr r1, _08018B2C @ =gProtectStructs\n\ - ldr r0, _08018B30 @ =gBankAttacker\n\ - ldrb r0, [r0]\n\ - lsls r0, 4\n\ - adds r0, r1\n\ - ldrb r0, [r0, 0x2]\n\ - lsls r0, 28\n\ - cmp r0, 0\n\ - bge _08018B3C\n\ - ldr r1, _08018B34 @ =gBattlescriptCurrInstr\n\ - ldr r0, _08018B38 @ =BattleScript_MoveHPDrain\n\ - b _08018B40\n\ - .align 2, 0\n\ + ldr r1, _08018B2C @ =gProtectStructs\n\ + ldr r0, _08018B30 @ =gBankAttacker\n\ + ldrb r0, [r0]\n\ + lsls r0, 4\n\ + adds r0, r1\n\ + ldrb r0, [r0, 0x2]\n\ + lsls r0, 28\n\ + cmp r0, 0\n\ + bge _08018B3C\n\ + ldr r1, _08018B34 @ =gBattlescriptCurrInstr\n\ + ldr r0, _08018B38 @ =BattleScript_MoveHPDrain\n\ + b _08018B40\n\ + .align 2, 0\n\ _08018B28: .4byte gBattleMoves\n\ _08018B2C: .4byte gProtectStructs\n\ _08018B30: .4byte gBankAttacker\n\ _08018B34: .4byte gBattlescriptCurrInstr\n\ _08018B38: .4byte BattleScript_MoveHPDrain\n\ _08018B3C:\n\ - ldr r1, _08018B48 @ =gBattlescriptCurrInstr\n\ - ldr r0, _08018B4C @ =BattleScript_MoveHPDrain_PPLoss\n\ + ldr r1, _08018B48 @ =gBattlescriptCurrInstr\n\ + ldr r0, _08018B4C @ =BattleScript_MoveHPDrain_PPLoss\n\ _08018B40:\n\ - str r0, [r1]\n\ - movs r2, 0x1\n\ - b _08018C68\n\ - .align 2, 0\n\ + str r0, [r1]\n\ + movs r2, 0x1\n\ + b _08018C68\n\ + .align 2, 0\n\ _08018B48: .4byte gBattlescriptCurrInstr\n\ _08018B4C: .4byte BattleScript_MoveHPDrain_PPLoss\n\ _08018B50:\n\ - cmp r4, 0xB\n\ - beq _08018B56\n\ - b _08018C6A\n\ + cmp r4, 0xB\n\ + beq _08018B56\n\ + b _08018C6A\n\ _08018B56:\n\ - ldr r0, _08018B80 @ =gBattleMoves\n\ - lsls r1, r3, 1\n\ - adds r1, r3\n\ - lsls r1, 2\n\ - adds r1, r0\n\ - ldrb r0, [r1, 0x1]\n\ - cmp r0, 0\n\ - bne _08018B68\n\ - b _08018C6A\n\ + ldr r0, _08018B80 @ =gBattleMoves\n\ + lsls r1, r3, 1\n\ + adds r1, r3\n\ + lsls r1, 2\n\ + adds r1, r0\n\ + ldrb r0, [r1, 0x1]\n\ + cmp r0, 0\n\ + bne _08018B68\n\ + b _08018C6A\n\ _08018B68:\n\ - ldr r1, _08018B84 @ =gProtectStructs\n\ - ldr r0, _08018B88 @ =gBankAttacker\n\ - ldrb r0, [r0]\n\ - lsls r0, 4\n\ - adds r0, r1\n\ - ldrb r0, [r0, 0x2]\n\ - lsls r0, 28\n\ - cmp r0, 0\n\ - bge _08018B94\n\ - ldr r1, _08018B8C @ =gBattlescriptCurrInstr\n\ - ldr r0, _08018B90 @ =BattleScript_MoveHPDrain\n\ - b _08018B98\n\ - .align 2, 0\n\ + ldr r1, _08018B84 @ =gProtectStructs\n\ + ldr r0, _08018B88 @ =gBankAttacker\n\ + ldrb r0, [r0]\n\ + lsls r0, 4\n\ + adds r0, r1\n\ + ldrb r0, [r0, 0x2]\n\ + lsls r0, 28\n\ + cmp r0, 0\n\ + bge _08018B94\n\ + ldr r1, _08018B8C @ =gBattlescriptCurrInstr\n\ + ldr r0, _08018B90 @ =BattleScript_MoveHPDrain\n\ + b _08018B98\n\ + .align 2, 0\n\ _08018B80: .4byte gBattleMoves\n\ _08018B84: .4byte gProtectStructs\n\ _08018B88: .4byte gBankAttacker\n\ _08018B8C: .4byte gBattlescriptCurrInstr\n\ _08018B90: .4byte BattleScript_MoveHPDrain\n\ _08018B94:\n\ - ldr r1, _08018BA0 @ =gBattlescriptCurrInstr\n\ - ldr r0, _08018BA4 @ =BattleScript_MoveHPDrain_PPLoss\n\ + ldr r1, _08018BA0 @ =gBattlescriptCurrInstr\n\ + ldr r0, _08018BA4 @ =BattleScript_MoveHPDrain_PPLoss\n\ _08018B98:\n\ - str r0, [r1]\n\ - movs r3, 0x1\n\ - mov r9, r3\n\ - b _08018C6A\n\ - .align 2, 0\n\ + str r0, [r1]\n\ + movs r3, 0x1\n\ + mov r9, r3\n\ + b _08018C6A\n\ + .align 2, 0\n\ _08018BA0: .4byte gBattlescriptCurrInstr\n\ _08018BA4: .4byte BattleScript_MoveHPDrain_PPLoss\n\ _08018BA8:\n\ - cmp r4, 0xA\n\ - bne _08018C6A\n\ - ldr r1, _08018BF4 @ =gBattleMons\n\ - movs r0, 0x58\n\ - mov r5, r10\n\ - muls r5, r0\n\ - adds r0, r5, 0\n\ - adds r1, 0x4C\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - movs r1, 0x20\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _08018C6A\n\ - ldr r2, _08018BF8 @ =0x02017100\n\ - mov r0, r10\n\ - lsls r1, r0, 2\n\ - adds r0, r1, r2\n\ - ldr r3, [r0]\n\ - movs r4, 0x1\n\ - ands r3, r4\n\ - adds r5, r1, 0\n\ - cmp r3, 0\n\ - bne _08018C30\n\ - ldr r0, _08018BFC @ =gBattleCommunication\n\ - strb r3, [r0, 0x5]\n\ - ldr r1, _08018C00 @ =gProtectStructs\n\ - ldr r0, _08018C04 @ =gBankAttacker\n\ - ldrb r0, [r0]\n\ - lsls r0, 4\n\ - adds r0, r1\n\ - ldrb r0, [r0, 0x2]\n\ - lsls r0, 28\n\ - cmp r0, 0\n\ - bge _08018C10\n\ - ldr r1, _08018C08 @ =gBattlescriptCurrInstr\n\ - ldr r0, _08018C0C @ =BattleScript_FlashFireBoost\n\ - b _08018C14\n\ - .align 2, 0\n\ + cmp r4, 0xA\n\ + bne _08018C6A\n\ + ldr r1, _08018BF4 @ =gBattleMons\n\ + movs r0, 0x58\n\ + mov r5, r10\n\ + muls r5, r0\n\ + adds r0, r5, 0\n\ + adds r1, 0x4C\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + movs r1, 0x20\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08018C6A\n\ + ldr r2, _08018BF8 @ =0x02017100\n\ + mov r0, r10\n\ + lsls r1, r0, 2\n\ + adds r0, r1, r2\n\ + ldr r3, [r0]\n\ + movs r4, 0x1\n\ + ands r3, r4\n\ + adds r5, r1, 0\n\ + cmp r3, 0\n\ + bne _08018C30\n\ + ldr r0, _08018BFC @ =gBattleCommunication\n\ + strb r3, [r0, 0x5]\n\ + ldr r1, _08018C00 @ =gProtectStructs\n\ + ldr r0, _08018C04 @ =gBankAttacker\n\ + ldrb r0, [r0]\n\ + lsls r0, 4\n\ + adds r0, r1\n\ + ldrb r0, [r0, 0x2]\n\ + lsls r0, 28\n\ + cmp r0, 0\n\ + bge _08018C10\n\ + ldr r1, _08018C08 @ =gBattlescriptCurrInstr\n\ + ldr r0, _08018C0C @ =BattleScript_FlashFireBoost\n\ + b _08018C14\n\ + .align 2, 0\n\ _08018BF4: .4byte gBattleMons\n\ _08018BF8: .4byte 0x02017100\n\ _08018BFC: .4byte gBattleCommunication\n\ @@ -3321,80 +3321,80 @@ _08018C04: .4byte gBankAttacker\n\ _08018C08: .4byte gBattlescriptCurrInstr\n\ _08018C0C: .4byte BattleScript_FlashFireBoost\n\ _08018C10:\n\ - ldr r1, _08018C28 @ =gBattlescriptCurrInstr\n\ - ldr r0, _08018C2C @ =BattleScript_FlashFireBoost_PPLoss\n\ + ldr r1, _08018C28 @ =gBattlescriptCurrInstr\n\ + ldr r0, _08018C2C @ =BattleScript_FlashFireBoost_PPLoss\n\ _08018C14:\n\ - str r0, [r1]\n\ - adds r0, r5, r2\n\ - ldr r1, [r0]\n\ - movs r2, 0x1\n\ - orrs r1, r2\n\ - str r1, [r0]\n\ - movs r1, 0x2\n\ - mov r9, r1\n\ - b _08018C6A\n\ - .align 2, 0\n\ + str r0, [r1]\n\ + adds r0, r5, r2\n\ + ldr r1, [r0]\n\ + movs r2, 0x1\n\ + orrs r1, r2\n\ + str r1, [r0]\n\ + movs r1, 0x2\n\ + mov r9, r1\n\ + b _08018C6A\n\ + .align 2, 0\n\ _08018C28: .4byte gBattlescriptCurrInstr\n\ _08018C2C: .4byte BattleScript_FlashFireBoost_PPLoss\n\ _08018C30:\n\ - ldr r0, _08018C4C @ =gBattleCommunication\n\ - strb r4, [r0, 0x5]\n\ - ldr r1, _08018C50 @ =gProtectStructs\n\ - ldr r0, _08018C54 @ =gBankAttacker\n\ - ldrb r0, [r0]\n\ - lsls r0, 4\n\ - adds r0, r1\n\ - ldrb r0, [r0, 0x2]\n\ - lsls r0, 28\n\ - cmp r0, 0\n\ - bge _08018C60\n\ - ldr r1, _08018C58 @ =gBattlescriptCurrInstr\n\ - ldr r0, _08018C5C @ =BattleScript_FlashFireBoost\n\ - b _08018C64\n\ - .align 2, 0\n\ + ldr r0, _08018C4C @ =gBattleCommunication\n\ + strb r4, [r0, 0x5]\n\ + ldr r1, _08018C50 @ =gProtectStructs\n\ + ldr r0, _08018C54 @ =gBankAttacker\n\ + ldrb r0, [r0]\n\ + lsls r0, 4\n\ + adds r0, r1\n\ + ldrb r0, [r0, 0x2]\n\ + lsls r0, 28\n\ + cmp r0, 0\n\ + bge _08018C60\n\ + ldr r1, _08018C58 @ =gBattlescriptCurrInstr\n\ + ldr r0, _08018C5C @ =BattleScript_FlashFireBoost\n\ + b _08018C64\n\ + .align 2, 0\n\ _08018C4C: .4byte gBattleCommunication\n\ _08018C50: .4byte gProtectStructs\n\ _08018C54: .4byte gBankAttacker\n\ _08018C58: .4byte gBattlescriptCurrInstr\n\ _08018C5C: .4byte BattleScript_FlashFireBoost\n\ _08018C60:\n\ - ldr r1, _08018CA4 @ =gBattlescriptCurrInstr\n\ - ldr r0, _08018CA8 @ =BattleScript_FlashFireBoost_PPLoss\n\ + ldr r1, _08018CA4 @ =gBattlescriptCurrInstr\n\ + ldr r0, _08018CA8 @ =BattleScript_FlashFireBoost_PPLoss\n\ _08018C64:\n\ - str r0, [r1]\n\ - movs r2, 0x2\n\ + str r0, [r1]\n\ + movs r2, 0x2\n\ _08018C68:\n\ - mov r9, r2\n\ + mov r9, r2\n\ _08018C6A:\n\ - mov r3, r9\n\ - cmp r3, 0x1\n\ - beq _08018C74\n\ - bl _08019F76\n\ + mov r3, r9\n\ + cmp r3, 0x1\n\ + beq _08018C74\n\ + bl _08019F76\n\ _08018C74:\n\ - ldr r1, _08018CAC @ =gBattleMons\n\ - movs r0, 0x58\n\ - mov r5, r10\n\ - muls r5, r0\n\ - adds r0, r5, 0\n\ - adds r1, r0, r1\n\ - ldrh r0, [r1, 0x2C]\n\ - ldrh r2, [r1, 0x28]\n\ - cmp r0, r2\n\ - bne _08018CD0\n\ - ldr r1, _08018CB0 @ =gProtectStructs\n\ - ldr r0, _08018CB4 @ =gBankAttacker\n\ - ldrb r0, [r0]\n\ - lsls r0, 4\n\ - adds r0, r1\n\ - ldrb r0, [r0, 0x2]\n\ - lsls r0, 28\n\ - cmp r0, 0\n\ - bge _08018CBC\n\ - ldr r1, _08018CA4 @ =gBattlescriptCurrInstr\n\ - ldr r0, _08018CB8 @ =BattleScript_MoveHPDrain_FullHP\n\ - str r0, [r1]\n\ - bl _08019F76\n\ - .align 2, 0\n\ + ldr r1, _08018CAC @ =gBattleMons\n\ + movs r0, 0x58\n\ + mov r5, r10\n\ + muls r5, r0\n\ + adds r0, r5, 0\n\ + adds r1, r0, r1\n\ + ldrh r0, [r1, 0x2C]\n\ + ldrh r2, [r1, 0x28]\n\ + cmp r0, r2\n\ + bne _08018CD0\n\ + ldr r1, _08018CB0 @ =gProtectStructs\n\ + ldr r0, _08018CB4 @ =gBankAttacker\n\ + ldrb r0, [r0]\n\ + lsls r0, 4\n\ + adds r0, r1\n\ + ldrb r0, [r0, 0x2]\n\ + lsls r0, 28\n\ + cmp r0, 0\n\ + bge _08018CBC\n\ + ldr r1, _08018CA4 @ =gBattlescriptCurrInstr\n\ + ldr r0, _08018CB8 @ =BattleScript_MoveHPDrain_FullHP\n\ + str r0, [r1]\n\ + bl _08019F76\n\ + .align 2, 0\n\ _08018CA4: .4byte gBattlescriptCurrInstr\n\ _08018CA8: .4byte BattleScript_FlashFireBoost_PPLoss\n\ _08018CAC: .4byte gBattleMons\n\ @@ -3402,178 +3402,178 @@ _08018CB0: .4byte gProtectStructs\n\ _08018CB4: .4byte gBankAttacker\n\ _08018CB8: .4byte BattleScript_MoveHPDrain_FullHP\n\ _08018CBC:\n\ - ldr r1, _08018CC8 @ =gBattlescriptCurrInstr\n\ - ldr r0, _08018CCC @ =BattleScript_MoveHPDrain_FullHP_PPLoss\n\ - str r0, [r1]\n\ - bl _08019F76\n\ - .align 2, 0\n\ + ldr r1, _08018CC8 @ =gBattlescriptCurrInstr\n\ + ldr r0, _08018CCC @ =BattleScript_MoveHPDrain_FullHP_PPLoss\n\ + str r0, [r1]\n\ + bl _08019F76\n\ + .align 2, 0\n\ _08018CC8: .4byte gBattlescriptCurrInstr\n\ _08018CCC: .4byte BattleScript_MoveHPDrain_FullHP_PPLoss\n\ _08018CD0:\n\ - ldr r2, _08018CEC @ =gBattleMoveDamage\n\ - ldrh r0, [r1, 0x2C]\n\ - lsrs r0, 2\n\ - str r0, [r2]\n\ - cmp r0, 0\n\ - bne _08018CE0\n\ - mov r3, r9\n\ - str r3, [r2]\n\ + ldr r2, _08018CEC @ =gBattleMoveDamage\n\ + ldrh r0, [r1, 0x2C]\n\ + lsrs r0, 2\n\ + str r0, [r2]\n\ + cmp r0, 0\n\ + bne _08018CE0\n\ + mov r3, r9\n\ + str r3, [r2]\n\ _08018CE0:\n\ - ldr r0, [r2]\n\ - negs r0, r0\n\ - str r0, [r2]\n\ - bl _08019F76\n\ - .align 2, 0\n\ + ldr r0, [r2]\n\ + negs r0, r0\n\ + str r0, [r2]\n\ + bl _08019F76\n\ + .align 2, 0\n\ _08018CEC: .4byte gBattleMoveDamage\n\ _08018CF0:\n\ - mov r5, r8\n\ - ldrb r0, [r5]\n\ - subs r0, 0x9\n\ - cmp r0, 0x2F\n\ - bls _08018CFE\n\ - bl _08019F76\n\ + mov r5, r8\n\ + ldrb r0, [r5]\n\ + subs r0, 0x9\n\ + cmp r0, 0x2F\n\ + bls _08018CFE\n\ + bl _08019F76\n\ _08018CFE:\n\ - lsls r0, 2\n\ - ldr r1, _08018D08 @ =_08018D0C\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ + lsls r0, 2\n\ + ldr r1, _08018D08 @ =_08018D0C\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ _08018D08: .4byte _08018D0C\n\ - .align 2, 0\n\ + .align 2, 0\n\ _08018D0C:\n\ - .4byte _08019128\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08018DCC\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08018E94\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08018F54\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _0801904C\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019204\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _080192E0\n\ + .4byte _08019128\n\ + .4byte _08019F76\n\ + .4byte _08019F76\n\ + .4byte _08019F76\n\ + .4byte _08019F76\n\ + .4byte _08019F76\n\ + .4byte _08019F76\n\ + .4byte _08018DCC\n\ + .4byte _08019F76\n\ + .4byte _08019F76\n\ + .4byte _08019F76\n\ + .4byte _08019F76\n\ + .4byte _08019F76\n\ + .4byte _08019F76\n\ + .4byte _08019F76\n\ + .4byte _08018E94\n\ + .4byte _08019F76\n\ + .4byte _08019F76\n\ + .4byte _08018F54\n\ + .4byte _08019F76\n\ + .4byte _08019F76\n\ + .4byte _08019F76\n\ + .4byte _08019F76\n\ + .4byte _08019F76\n\ + .4byte _08019F76\n\ + .4byte _08019F76\n\ + .4byte _08019F76\n\ + .4byte _08019F76\n\ + .4byte _08019F76\n\ + .4byte _0801904C\n\ + .4byte _08019F76\n\ + .4byte _08019F76\n\ + .4byte _08019F76\n\ + .4byte _08019F76\n\ + .4byte _08019F76\n\ + .4byte _08019F76\n\ + .4byte _08019F76\n\ + .4byte _08019F76\n\ + .4byte _08019F76\n\ + .4byte _08019F76\n\ + .4byte _08019204\n\ + .4byte _08019F76\n\ + .4byte _08019F76\n\ + .4byte _08019F76\n\ + .4byte _08019F76\n\ + .4byte _08019F76\n\ + .4byte _08019F76\n\ + .4byte _080192E0\n\ _08018DCC:\n\ - ldr r0, _08018E74 @ =gBattleMoveFlags\n\ - ldrb r1, [r0]\n\ - movs r0, 0x29\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08018DDC\n\ - bl _08019F76\n\ + ldr r0, _08018E74 @ =gBattleMoveFlags\n\ + ldrb r1, [r0]\n\ + movs r0, 0x29\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08018DDC\n\ + bl _08019F76\n\ _08018DDC:\n\ - cmp r3, 0xA5\n\ - bne _08018DE4\n\ - bl _08019F76\n\ + cmp r3, 0xA5\n\ + bne _08018DE4\n\ + bl _08019F76\n\ _08018DE4:\n\ - ldr r0, _08018E78 @ =gBattleMoves\n\ - lsls r1, r3, 1\n\ - adds r1, r3\n\ - lsls r1, 2\n\ - adds r1, r0\n\ - ldrb r0, [r1, 0x1]\n\ - cmp r0, 0\n\ - bne _08018DF8\n\ - bl _08019F76\n\ + ldr r0, _08018E78 @ =gBattleMoves\n\ + lsls r1, r3, 1\n\ + adds r1, r3\n\ + lsls r1, 2\n\ + adds r1, r0\n\ + ldrb r0, [r1, 0x1]\n\ + cmp r0, 0\n\ + bne _08018DF8\n\ + bl _08019F76\n\ _08018DF8:\n\ - ldr r2, _08018E7C @ =gSpecialStatuses\n\ - ldr r0, _08018E80 @ =gBankTarget\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r1, r0, 2\n\ - adds r0, r2, 0\n\ - adds r0, 0x8\n\ - adds r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - bne _08018E20\n\ - adds r0, r2, 0\n\ - adds r0, 0xC\n\ - adds r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - bne _08018E20\n\ - bl _08019F76\n\ + ldr r2, _08018E7C @ =gSpecialStatuses\n\ + ldr r0, _08018E80 @ =gBankTarget\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r1, r0, 2\n\ + adds r0, r2, 0\n\ + adds r0, 0x8\n\ + adds r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + bne _08018E20\n\ + adds r0, r2, 0\n\ + adds r0, 0xC\n\ + adds r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + bne _08018E20\n\ + bl _08019F76\n\ _08018E20:\n\ - ldr r1, _08018E84 @ =gBattleMons\n\ - movs r0, 0x58\n\ - mov r2, r10\n\ - muls r2, r0\n\ - adds r0, r2, 0\n\ - adds r1, r0, r1\n\ - adds r3, r1, 0\n\ - adds r3, 0x21\n\ - ldrb r0, [r3]\n\ - cmp r0, r4\n\ - bne _08018E3A\n\ - bl _08019F76\n\ + ldr r1, _08018E84 @ =gBattleMons\n\ + movs r0, 0x58\n\ + mov r2, r10\n\ + muls r2, r0\n\ + adds r0, r2, 0\n\ + adds r1, r0, r1\n\ + adds r3, r1, 0\n\ + adds r3, 0x21\n\ + ldrb r0, [r3]\n\ + cmp r0, r4\n\ + bne _08018E3A\n\ + bl _08019F76\n\ _08018E3A:\n\ - adds r2, r1, 0\n\ - adds r2, 0x22\n\ - ldrb r0, [r2]\n\ - cmp r0, r4\n\ - bne _08018E48\n\ - bl _08019F76\n\ + adds r2, r1, 0\n\ + adds r2, 0x22\n\ + ldrb r0, [r2]\n\ + cmp r0, r4\n\ + bne _08018E48\n\ + bl _08019F76\n\ _08018E48:\n\ - ldrh r0, [r1, 0x28]\n\ - cmp r0, 0\n\ - bne _08018E52\n\ - bl _08019F76\n\ + ldrh r0, [r1, 0x28]\n\ + cmp r0, 0\n\ + bne _08018E52\n\ + bl _08019F76\n\ _08018E52:\n\ - strb r4, [r3]\n\ - strb r4, [r2]\n\ - ldr r1, _08018E88 @ =gBattleTextBuff1\n\ - movs r0, 0xFD\n\ - strb r0, [r1]\n\ - movs r0, 0x3\n\ - strb r0, [r1, 0x1]\n\ - strb r4, [r1, 0x2]\n\ - movs r0, 0xFF\n\ - strb r0, [r1, 0x3]\n\ - bl b_movescr_stack_push_cursor\n\ - ldr r1, _08018E8C @ =gBattlescriptCurrInstr\n\ - ldr r0, _08018E90 @ =BattleScript_ColorChangeActivates\n\ - str r0, [r1]\n\ - bl _08019F22\n\ - .align 2, 0\n\ + strb r4, [r3]\n\ + strb r4, [r2]\n\ + ldr r1, _08018E88 @ =gBattleTextBuff1\n\ + movs r0, 0xFD\n\ + strb r0, [r1]\n\ + movs r0, 0x3\n\ + strb r0, [r1, 0x1]\n\ + strb r4, [r1, 0x2]\n\ + movs r0, 0xFF\n\ + strb r0, [r1, 0x3]\n\ + bl b_movescr_stack_push_cursor\n\ + ldr r1, _08018E8C @ =gBattlescriptCurrInstr\n\ + ldr r0, _08018E90 @ =BattleScript_ColorChangeActivates\n\ + str r0, [r1]\n\ + bl _08019F22\n\ + .align 2, 0\n\ _08018E74: .4byte gBattleMoveFlags\n\ _08018E78: .4byte gBattleMoves\n\ _08018E7C: .4byte gSpecialStatuses\n\ @@ -3583,81 +3583,81 @@ _08018E88: .4byte gBattleTextBuff1\n\ _08018E8C: .4byte gBattlescriptCurrInstr\n\ _08018E90: .4byte BattleScript_ColorChangeActivates\n\ _08018E94:\n\ - ldr r0, _08018F2C @ =gBattleMoveFlags\n\ - ldrb r1, [r0]\n\ - movs r0, 0x29\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08018EA4\n\ - bl _08019F76\n\ + ldr r0, _08018F2C @ =gBattleMoveFlags\n\ + ldrb r1, [r0]\n\ + movs r0, 0x29\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08018EA4\n\ + bl _08019F76\n\ _08018EA4:\n\ - ldr r1, _08018F30 @ =gBattleMons\n\ - ldr r0, _08018F34 @ =gBankAttacker\n\ - ldrb r2, [r0]\n\ - movs r0, 0x58\n\ - muls r0, r2\n\ - adds r4, r0, r1\n\ - ldrh r0, [r4, 0x28]\n\ - cmp r0, 0\n\ - bne _08018EBA\n\ - bl _08019F76\n\ + ldr r1, _08018F30 @ =gBattleMons\n\ + ldr r0, _08018F34 @ =gBankAttacker\n\ + ldrb r2, [r0]\n\ + movs r0, 0x58\n\ + muls r0, r2\n\ + adds r4, r0, r1\n\ + ldrh r0, [r4, 0x28]\n\ + cmp r0, 0\n\ + bne _08018EBA\n\ + bl _08019F76\n\ _08018EBA:\n\ - ldr r0, _08018F38 @ =gProtectStructs\n\ - lsls r1, r2, 4\n\ - adds r1, r0\n\ - ldrb r0, [r1, 0x1]\n\ - lsls r0, 31\n\ - cmp r0, 0\n\ - beq _08018ECC\n\ - bl _08019F76\n\ + ldr r0, _08018F38 @ =gProtectStructs\n\ + lsls r1, r2, 4\n\ + adds r1, r0\n\ + ldrb r0, [r1, 0x1]\n\ + lsls r0, 31\n\ + cmp r0, 0\n\ + beq _08018ECC\n\ + bl _08019F76\n\ _08018ECC:\n\ - ldr r2, _08018F3C @ =gSpecialStatuses\n\ - ldr r0, _08018F40 @ =gBankTarget\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r1, r0, 2\n\ - adds r0, r2, 0\n\ - adds r0, 0x8\n\ - adds r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - bne _08018EF4\n\ - adds r0, r2, 0\n\ - adds r0, 0xC\n\ - adds r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - bne _08018EF4\n\ - bl _08019F76\n\ + ldr r2, _08018F3C @ =gSpecialStatuses\n\ + ldr r0, _08018F40 @ =gBankTarget\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r1, r0, 2\n\ + adds r0, r2, 0\n\ + adds r0, 0x8\n\ + adds r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + bne _08018EF4\n\ + adds r0, r2, 0\n\ + adds r0, 0xC\n\ + adds r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + bne _08018EF4\n\ + bl _08019F76\n\ _08018EF4:\n\ - ldr r1, _08018F44 @ =gBattleMoves\n\ - lsls r0, r3, 1\n\ - adds r0, r3\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldrb r1, [r0, 0x8]\n\ - movs r2, 0x1\n\ - adds r0, r2, 0\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _08018F0E\n\ - bl _08019F76\n\ + ldr r1, _08018F44 @ =gBattleMoves\n\ + lsls r0, r3, 1\n\ + adds r0, r3\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldrb r1, [r0, 0x8]\n\ + movs r2, 0x1\n\ + adds r0, r2, 0\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08018F0E\n\ + bl _08019F76\n\ _08018F0E:\n\ - ldr r1, _08018F48 @ =gBattleMoveDamage\n\ - ldrh r0, [r4, 0x2C]\n\ - lsrs r0, 4\n\ - str r0, [r1]\n\ - cmp r0, 0\n\ - bne _08018F1C\n\ - str r2, [r1]\n\ + ldr r1, _08018F48 @ =gBattleMoveDamage\n\ + ldrh r0, [r4, 0x2C]\n\ + lsrs r0, 4\n\ + str r0, [r1]\n\ + cmp r0, 0\n\ + bne _08018F1C\n\ + str r2, [r1]\n\ _08018F1C:\n\ - bl b_movescr_stack_push_cursor\n\ - ldr r1, _08018F4C @ =gBattlescriptCurrInstr\n\ - ldr r0, _08018F50 @ =BattleScript_RoughSkinActivates\n\ - str r0, [r1]\n\ - bl _08019F22\n\ - .align 2, 0\n\ + bl b_movescr_stack_push_cursor\n\ + ldr r1, _08018F4C @ =gBattlescriptCurrInstr\n\ + ldr r0, _08018F50 @ =BattleScript_RoughSkinActivates\n\ + str r0, [r1]\n\ + bl _08019F22\n\ + .align 2, 0\n\ _08018F2C: .4byte gBattleMoveFlags\n\ _08018F30: .4byte gBattleMons\n\ _08018F34: .4byte gBankAttacker\n\ @@ -3669,106 +3669,106 @@ _08018F48: .4byte gBattleMoveDamage\n\ _08018F4C: .4byte gBattlescriptCurrInstr\n\ _08018F50: .4byte BattleScript_RoughSkinActivates\n\ _08018F54:\n\ - ldr r0, _08019020 @ =gBattleMoveFlags\n\ - ldrb r1, [r0]\n\ - movs r0, 0x29\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08018F64\n\ - bl _08019F76\n\ + ldr r0, _08019020 @ =gBattleMoveFlags\n\ + ldrb r1, [r0]\n\ + movs r0, 0x29\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08018F64\n\ + bl _08019F76\n\ _08018F64:\n\ - ldr r1, _08019024 @ =gBattleMons\n\ - ldr r0, _08019028 @ =gBankAttacker\n\ - ldrb r2, [r0]\n\ - movs r0, 0x58\n\ - muls r0, r2\n\ - adds r0, r1\n\ - ldrh r0, [r0, 0x28]\n\ - cmp r0, 0\n\ - bne _08018F7A\n\ - bl _08019F76\n\ + ldr r1, _08019024 @ =gBattleMons\n\ + ldr r0, _08019028 @ =gBankAttacker\n\ + ldrb r2, [r0]\n\ + movs r0, 0x58\n\ + muls r0, r2\n\ + adds r0, r1\n\ + ldrh r0, [r0, 0x28]\n\ + cmp r0, 0\n\ + bne _08018F7A\n\ + bl _08019F76\n\ _08018F7A:\n\ - ldr r0, _0801902C @ =gProtectStructs\n\ - lsls r1, r2, 4\n\ - adds r1, r0\n\ - ldrb r0, [r1, 0x1]\n\ - lsls r0, 31\n\ - cmp r0, 0\n\ - beq _08018F8C\n\ - bl _08019F76\n\ + ldr r0, _0801902C @ =gProtectStructs\n\ + lsls r1, r2, 4\n\ + adds r1, r0\n\ + ldrb r0, [r1, 0x1]\n\ + lsls r0, 31\n\ + cmp r0, 0\n\ + beq _08018F8C\n\ + bl _08019F76\n\ _08018F8C:\n\ - ldr r2, _08019030 @ =gSpecialStatuses\n\ - ldr r0, _08019034 @ =gBankTarget\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r1, r0, 2\n\ - adds r0, r2, 0\n\ - adds r0, 0x8\n\ - adds r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - bne _08018FB4\n\ - adds r0, r2, 0\n\ - adds r0, 0xC\n\ - adds r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - bne _08018FB4\n\ - bl _08019F76\n\ + ldr r2, _08019030 @ =gSpecialStatuses\n\ + ldr r0, _08019034 @ =gBankTarget\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r1, r0, 2\n\ + adds r0, r2, 0\n\ + adds r0, 0x8\n\ + adds r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + bne _08018FB4\n\ + adds r0, r2, 0\n\ + adds r0, 0xC\n\ + adds r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + bne _08018FB4\n\ + bl _08019F76\n\ _08018FB4:\n\ - ldr r1, _08019038 @ =gBattleMoves\n\ - lsls r0, r3, 1\n\ - adds r0, r3\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldrb r1, [r0, 0x8]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _08018FCC\n\ - bl _08019F76\n\ + ldr r1, _08019038 @ =gBattleMoves\n\ + lsls r0, r3, 1\n\ + adds r0, r3\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldrb r1, [r0, 0x8]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08018FCC\n\ + bl _08019F76\n\ _08018FCC:\n\ - bl Random\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - movs r1, 0xA\n\ - bl __umodsi3\n\ - lsls r0, 16\n\ - cmp r0, 0\n\ - beq _08018FE4\n\ - bl _08019F76\n\ + bl Random\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0xA\n\ + bl __umodsi3\n\ + lsls r0, 16\n\ + cmp r0, 0\n\ + beq _08018FE4\n\ + bl _08019F76\n\ _08018FE4:\n\ - ldr r5, _0801903C @ =gBattleCommunication\n\ - movs r4, 0x3\n\ + ldr r5, _0801903C @ =gBattleCommunication\n\ + movs r4, 0x3\n\ _08018FE8:\n\ - bl Random\n\ - ands r0, r4\n\ - strb r0, [r5, 0x3]\n\ - cmp r0, 0\n\ - beq _08018FE8\n\ - ldr r1, _0801903C @ =gBattleCommunication\n\ - ldrb r0, [r1, 0x3]\n\ - cmp r0, 0x3\n\ - bne _08019000\n\ - adds r0, 0x2\n\ - strb r0, [r1, 0x3]\n\ + bl Random\n\ + ands r0, r4\n\ + strb r0, [r5, 0x3]\n\ + cmp r0, 0\n\ + beq _08018FE8\n\ + ldr r1, _0801903C @ =gBattleCommunication\n\ + ldrb r0, [r1, 0x3]\n\ + cmp r0, 0x3\n\ + bne _08019000\n\ + adds r0, 0x2\n\ + strb r0, [r1, 0x3]\n\ _08019000:\n\ - ldrb r0, [r1, 0x3]\n\ - adds r0, 0x40\n\ - strb r0, [r1, 0x3]\n\ - bl b_movescr_stack_push_cursor\n\ - ldr r1, _08019040 @ =gBattlescriptCurrInstr\n\ - ldr r0, _08019044 @ =BattleScript_ApplySecondaryEffect\n\ - str r0, [r1]\n\ - ldr r2, _08019048 @ =gHitMarker\n\ - ldr r0, [r2]\n\ - movs r1, 0x80\n\ - lsls r1, 6\n\ - orrs r0, r1\n\ - str r0, [r2]\n\ - bl _08019F22\n\ - .align 2, 0\n\ + ldrb r0, [r1, 0x3]\n\ + adds r0, 0x40\n\ + strb r0, [r1, 0x3]\n\ + bl b_movescr_stack_push_cursor\n\ + ldr r1, _08019040 @ =gBattlescriptCurrInstr\n\ + ldr r0, _08019044 @ =BattleScript_ApplySecondaryEffect\n\ + str r0, [r1]\n\ + ldr r2, _08019048 @ =gHitMarker\n\ + ldr r0, [r2]\n\ + movs r1, 0x80\n\ + lsls r1, 6\n\ + orrs r0, r1\n\ + str r0, [r2]\n\ + bl _08019F22\n\ + .align 2, 0\n\ _08019020: .4byte gBattleMoveFlags\n\ _08019024: .4byte gBattleMons\n\ _08019028: .4byte gBankAttacker\n\ @@ -3781,91 +3781,91 @@ _08019040: .4byte gBattlescriptCurrInstr\n\ _08019044: .4byte BattleScript_ApplySecondaryEffect\n\ _08019048: .4byte gHitMarker\n\ _0801904C:\n\ - ldr r0, _080190FC @ =gBattleMoveFlags\n\ - ldrb r1, [r0]\n\ - movs r0, 0x29\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0801905C\n\ - bl _08019F76\n\ + ldr r0, _080190FC @ =gBattleMoveFlags\n\ + ldrb r1, [r0]\n\ + movs r0, 0x29\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0801905C\n\ + bl _08019F76\n\ _0801905C:\n\ - ldr r1, _08019100 @ =gBattleMons\n\ - ldr r0, _08019104 @ =gBankAttacker\n\ - ldrb r2, [r0]\n\ - movs r0, 0x58\n\ - muls r0, r2\n\ - adds r0, r1\n\ - ldrh r0, [r0, 0x28]\n\ - cmp r0, 0\n\ - bne _08019072\n\ - bl _08019F76\n\ + ldr r1, _08019100 @ =gBattleMons\n\ + ldr r0, _08019104 @ =gBankAttacker\n\ + ldrb r2, [r0]\n\ + movs r0, 0x58\n\ + muls r0, r2\n\ + adds r0, r1\n\ + ldrh r0, [r0, 0x28]\n\ + cmp r0, 0\n\ + bne _08019072\n\ + bl _08019F76\n\ _08019072:\n\ - ldr r0, _08019108 @ =gProtectStructs\n\ - lsls r1, r2, 4\n\ - adds r1, r0\n\ - ldrb r0, [r1, 0x1]\n\ - lsls r0, 31\n\ - cmp r0, 0\n\ - beq _08019084\n\ - bl _08019F76\n\ + ldr r0, _08019108 @ =gProtectStructs\n\ + lsls r1, r2, 4\n\ + adds r1, r0\n\ + ldrb r0, [r1, 0x1]\n\ + lsls r0, 31\n\ + cmp r0, 0\n\ + beq _08019084\n\ + bl _08019F76\n\ _08019084:\n\ - ldr r2, _0801910C @ =gSpecialStatuses\n\ - ldr r0, _08019110 @ =gBankTarget\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r1, r0, 2\n\ - adds r0, r2, 0\n\ - adds r0, 0x8\n\ - adds r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - bne _080190AC\n\ - adds r0, r2, 0\n\ - adds r0, 0xC\n\ - adds r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - bne _080190AC\n\ - bl _08019F76\n\ + ldr r2, _0801910C @ =gSpecialStatuses\n\ + ldr r0, _08019110 @ =gBankTarget\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r1, r0, 2\n\ + adds r0, r2, 0\n\ + adds r0, 0x8\n\ + adds r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + bne _080190AC\n\ + adds r0, r2, 0\n\ + adds r0, 0xC\n\ + adds r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + bne _080190AC\n\ + bl _08019F76\n\ _080190AC:\n\ - ldr r1, _08019114 @ =gBattleMoves\n\ - lsls r0, r3, 1\n\ - adds r0, r3\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldrb r1, [r0, 0x8]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _080190C4\n\ - bl _08019F76\n\ + ldr r1, _08019114 @ =gBattleMoves\n\ + lsls r0, r3, 1\n\ + adds r0, r3\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldrb r1, [r0, 0x8]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080190C4\n\ + bl _08019F76\n\ _080190C4:\n\ - bl Random\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - movs r1, 0x3\n\ - bl __umodsi3\n\ - lsls r0, 16\n\ - cmp r0, 0\n\ - beq _080190DC\n\ - bl _08019F76\n\ + bl Random\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0x3\n\ + bl __umodsi3\n\ + lsls r0, 16\n\ + cmp r0, 0\n\ + beq _080190DC\n\ + bl _08019F76\n\ _080190DC:\n\ - ldr r1, _08019118 @ =gBattleCommunication\n\ - movs r0, 0x42\n\ - strb r0, [r1, 0x3]\n\ - bl b_movescr_stack_push_cursor\n\ - ldr r1, _0801911C @ =gBattlescriptCurrInstr\n\ - ldr r0, _08019120 @ =BattleScript_ApplySecondaryEffect\n\ - str r0, [r1]\n\ - ldr r2, _08019124 @ =gHitMarker\n\ - ldr r0, [r2]\n\ - movs r1, 0x80\n\ - lsls r1, 6\n\ - orrs r0, r1\n\ - str r0, [r2]\n\ - bl _08019F22\n\ - .align 2, 0\n\ + ldr r1, _08019118 @ =gBattleCommunication\n\ + movs r0, 0x42\n\ + strb r0, [r1, 0x3]\n\ + bl b_movescr_stack_push_cursor\n\ + ldr r1, _0801911C @ =gBattlescriptCurrInstr\n\ + ldr r0, _08019120 @ =BattleScript_ApplySecondaryEffect\n\ + str r0, [r1]\n\ + ldr r2, _08019124 @ =gHitMarker\n\ + ldr r0, [r2]\n\ + movs r1, 0x80\n\ + lsls r1, 6\n\ + orrs r0, r1\n\ + str r0, [r2]\n\ + bl _08019F22\n\ + .align 2, 0\n\ _080190FC: .4byte gBattleMoveFlags\n\ _08019100: .4byte gBattleMons\n\ _08019104: .4byte gBankAttacker\n\ @@ -3878,91 +3878,91 @@ _0801911C: .4byte gBattlescriptCurrInstr\n\ _08019120: .4byte BattleScript_ApplySecondaryEffect\n\ _08019124: .4byte gHitMarker\n\ _08019128:\n\ - ldr r0, _080191D8 @ =gBattleMoveFlags\n\ - ldrb r1, [r0]\n\ - movs r0, 0x29\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08019138\n\ - bl _08019F76\n\ + ldr r0, _080191D8 @ =gBattleMoveFlags\n\ + ldrb r1, [r0]\n\ + movs r0, 0x29\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08019138\n\ + bl _08019F76\n\ _08019138:\n\ - ldr r1, _080191DC @ =gBattleMons\n\ - ldr r0, _080191E0 @ =gBankAttacker\n\ - ldrb r2, [r0]\n\ - movs r0, 0x58\n\ - muls r0, r2\n\ - adds r0, r1\n\ - ldrh r0, [r0, 0x28]\n\ - cmp r0, 0\n\ - bne _0801914E\n\ - bl _08019F76\n\ + ldr r1, _080191DC @ =gBattleMons\n\ + ldr r0, _080191E0 @ =gBankAttacker\n\ + ldrb r2, [r0]\n\ + movs r0, 0x58\n\ + muls r0, r2\n\ + adds r0, r1\n\ + ldrh r0, [r0, 0x28]\n\ + cmp r0, 0\n\ + bne _0801914E\n\ + bl _08019F76\n\ _0801914E:\n\ - ldr r0, _080191E4 @ =gProtectStructs\n\ - lsls r1, r2, 4\n\ - adds r1, r0\n\ - ldrb r0, [r1, 0x1]\n\ - lsls r0, 31\n\ - cmp r0, 0\n\ - beq _08019160\n\ - bl _08019F76\n\ + ldr r0, _080191E4 @ =gProtectStructs\n\ + lsls r1, r2, 4\n\ + adds r1, r0\n\ + ldrb r0, [r1, 0x1]\n\ + lsls r0, 31\n\ + cmp r0, 0\n\ + beq _08019160\n\ + bl _08019F76\n\ _08019160:\n\ - ldr r2, _080191E8 @ =gSpecialStatuses\n\ - ldr r0, _080191EC @ =gBankTarget\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r1, r0, 2\n\ - adds r0, r2, 0\n\ - adds r0, 0x8\n\ - adds r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - bne _08019188\n\ - adds r0, r2, 0\n\ - adds r0, 0xC\n\ - adds r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - bne _08019188\n\ - bl _08019F76\n\ + ldr r2, _080191E8 @ =gSpecialStatuses\n\ + ldr r0, _080191EC @ =gBankTarget\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r1, r0, 2\n\ + adds r0, r2, 0\n\ + adds r0, 0x8\n\ + adds r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + bne _08019188\n\ + adds r0, r2, 0\n\ + adds r0, 0xC\n\ + adds r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + bne _08019188\n\ + bl _08019F76\n\ _08019188:\n\ - ldr r1, _080191F0 @ =gBattleMoves\n\ - lsls r0, r3, 1\n\ - adds r0, r3\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldrb r1, [r0, 0x8]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _080191A0\n\ - bl _08019F76\n\ + ldr r1, _080191F0 @ =gBattleMoves\n\ + lsls r0, r3, 1\n\ + adds r0, r3\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldrb r1, [r0, 0x8]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080191A0\n\ + bl _08019F76\n\ _080191A0:\n\ - bl Random\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - movs r1, 0x3\n\ - bl __umodsi3\n\ - lsls r0, 16\n\ - cmp r0, 0\n\ - beq _080191B8\n\ - bl _08019F76\n\ + bl Random\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0x3\n\ + bl __umodsi3\n\ + lsls r0, 16\n\ + cmp r0, 0\n\ + beq _080191B8\n\ + bl _08019F76\n\ _080191B8:\n\ - ldr r1, _080191F4 @ =gBattleCommunication\n\ - movs r0, 0x45\n\ - strb r0, [r1, 0x3]\n\ - bl b_movescr_stack_push_cursor\n\ - ldr r1, _080191F8 @ =gBattlescriptCurrInstr\n\ - ldr r0, _080191FC @ =BattleScript_ApplySecondaryEffect\n\ - str r0, [r1]\n\ - ldr r2, _08019200 @ =gHitMarker\n\ - ldr r0, [r2]\n\ - movs r1, 0x80\n\ - lsls r1, 6\n\ - orrs r0, r1\n\ - str r0, [r2]\n\ - bl _08019F22\n\ - .align 2, 0\n\ + ldr r1, _080191F4 @ =gBattleCommunication\n\ + movs r0, 0x45\n\ + strb r0, [r1, 0x3]\n\ + bl b_movescr_stack_push_cursor\n\ + ldr r1, _080191F8 @ =gBattlescriptCurrInstr\n\ + ldr r0, _080191FC @ =BattleScript_ApplySecondaryEffect\n\ + str r0, [r1]\n\ + ldr r2, _08019200 @ =gHitMarker\n\ + ldr r0, [r2]\n\ + movs r1, 0x80\n\ + lsls r1, 6\n\ + orrs r0, r1\n\ + str r0, [r2]\n\ + bl _08019F22\n\ + .align 2, 0\n\ _080191D8: .4byte gBattleMoveFlags\n\ _080191DC: .4byte gBattleMons\n\ _080191E0: .4byte gBankAttacker\n\ @@ -3975,91 +3975,91 @@ _080191F8: .4byte gBattlescriptCurrInstr\n\ _080191FC: .4byte BattleScript_ApplySecondaryEffect\n\ _08019200: .4byte gHitMarker\n\ _08019204:\n\ - ldr r0, _080192B4 @ =gBattleMoveFlags\n\ - ldrb r1, [r0]\n\ - movs r0, 0x29\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08019214\n\ - bl _08019F76\n\ + ldr r0, _080192B4 @ =gBattleMoveFlags\n\ + ldrb r1, [r0]\n\ + movs r0, 0x29\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08019214\n\ + bl _08019F76\n\ _08019214:\n\ - ldr r1, _080192B8 @ =gBattleMons\n\ - ldr r0, _080192BC @ =gBankAttacker\n\ - ldrb r2, [r0]\n\ - movs r0, 0x58\n\ - muls r0, r2\n\ - adds r0, r1\n\ - ldrh r0, [r0, 0x28]\n\ - cmp r0, 0\n\ - bne _0801922A\n\ - bl _08019F76\n\ + ldr r1, _080192B8 @ =gBattleMons\n\ + ldr r0, _080192BC @ =gBankAttacker\n\ + ldrb r2, [r0]\n\ + movs r0, 0x58\n\ + muls r0, r2\n\ + adds r0, r1\n\ + ldrh r0, [r0, 0x28]\n\ + cmp r0, 0\n\ + bne _0801922A\n\ + bl _08019F76\n\ _0801922A:\n\ - ldr r0, _080192C0 @ =gProtectStructs\n\ - lsls r1, r2, 4\n\ - adds r1, r0\n\ - ldrb r0, [r1, 0x1]\n\ - lsls r0, 31\n\ - cmp r0, 0\n\ - beq _0801923C\n\ - bl _08019F76\n\ + ldr r0, _080192C0 @ =gProtectStructs\n\ + lsls r1, r2, 4\n\ + adds r1, r0\n\ + ldrb r0, [r1, 0x1]\n\ + lsls r0, 31\n\ + cmp r0, 0\n\ + beq _0801923C\n\ + bl _08019F76\n\ _0801923C:\n\ - ldr r1, _080192C4 @ =gBattleMoves\n\ - lsls r0, r3, 1\n\ - adds r0, r3\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldrb r1, [r0, 0x8]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _08019254\n\ - bl _08019F76\n\ + ldr r1, _080192C4 @ =gBattleMoves\n\ + lsls r0, r3, 1\n\ + adds r0, r3\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldrb r1, [r0, 0x8]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08019254\n\ + bl _08019F76\n\ _08019254:\n\ - ldr r2, _080192C8 @ =gSpecialStatuses\n\ - ldr r0, _080192CC @ =gBankTarget\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r1, r0, 2\n\ - adds r0, r2, 0\n\ - adds r0, 0x8\n\ - adds r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - bne _0801927C\n\ - adds r0, r2, 0\n\ - adds r0, 0xC\n\ - adds r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - bne _0801927C\n\ - bl _08019F76\n\ + ldr r2, _080192C8 @ =gSpecialStatuses\n\ + ldr r0, _080192CC @ =gBankTarget\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r1, r0, 2\n\ + adds r0, r2, 0\n\ + adds r0, 0x8\n\ + adds r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + bne _0801927C\n\ + adds r0, r2, 0\n\ + adds r0, 0xC\n\ + adds r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + bne _0801927C\n\ + bl _08019F76\n\ _0801927C:\n\ - bl Random\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - movs r1, 0x3\n\ - bl __umodsi3\n\ - lsls r0, 16\n\ - cmp r0, 0\n\ - beq _08019294\n\ - bl _08019F76\n\ + bl Random\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0x3\n\ + bl __umodsi3\n\ + lsls r0, 16\n\ + cmp r0, 0\n\ + beq _08019294\n\ + bl _08019F76\n\ _08019294:\n\ - ldr r1, _080192D0 @ =gBattleCommunication\n\ - movs r0, 0x43\n\ - strb r0, [r1, 0x3]\n\ - bl b_movescr_stack_push_cursor\n\ - ldr r1, _080192D4 @ =gBattlescriptCurrInstr\n\ - ldr r0, _080192D8 @ =BattleScript_ApplySecondaryEffect\n\ - str r0, [r1]\n\ - ldr r2, _080192DC @ =gHitMarker\n\ - ldr r0, [r2]\n\ - movs r1, 0x80\n\ - lsls r1, 6\n\ - orrs r0, r1\n\ - str r0, [r2]\n\ - bl _08019F22\n\ - .align 2, 0\n\ + ldr r1, _080192D0 @ =gBattleCommunication\n\ + movs r0, 0x43\n\ + strb r0, [r1, 0x3]\n\ + bl b_movescr_stack_push_cursor\n\ + ldr r1, _080192D4 @ =gBattlescriptCurrInstr\n\ + ldr r0, _080192D8 @ =BattleScript_ApplySecondaryEffect\n\ + str r0, [r1]\n\ + ldr r2, _080192DC @ =gHitMarker\n\ + ldr r0, [r2]\n\ + movs r1, 0x80\n\ + lsls r1, 6\n\ + orrs r0, r1\n\ + str r0, [r2]\n\ + bl _08019F22\n\ + .align 2, 0\n\ _080192B4: .4byte gBattleMoveFlags\n\ _080192B8: .4byte gBattleMons\n\ _080192BC: .4byte gBankAttacker\n\ @@ -4072,159 +4072,159 @@ _080192D4: .4byte gBattlescriptCurrInstr\n\ _080192D8: .4byte BattleScript_ApplySecondaryEffect\n\ _080192DC: .4byte gHitMarker\n\ _080192E0:\n\ - ldr r0, _08019420 @ =gBattleMoveFlags\n\ - ldrb r1, [r0]\n\ - movs r0, 0x29\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080192F0\n\ - bl _08019F76\n\ + ldr r0, _08019420 @ =gBattleMoveFlags\n\ + ldrb r1, [r0]\n\ + movs r0, 0x29\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080192F0\n\ + bl _08019F76\n\ _080192F0:\n\ - ldr r5, _08019424 @ =gBattleMons\n\ - ldr r7, _08019428 @ =gBankAttacker\n\ - ldrb r1, [r7]\n\ - movs r6, 0x58\n\ - adds r0, r1, 0\n\ - muls r0, r6\n\ - adds r0, r5\n\ - ldrh r0, [r0, 0x28]\n\ - cmp r0, 0\n\ - bne _08019308\n\ - bl _08019F76\n\ + ldr r5, _08019424 @ =gBattleMons\n\ + ldr r7, _08019428 @ =gBankAttacker\n\ + ldrb r1, [r7]\n\ + movs r6, 0x58\n\ + adds r0, r1, 0\n\ + muls r0, r6\n\ + adds r0, r5\n\ + ldrh r0, [r0, 0x28]\n\ + cmp r0, 0\n\ + bne _08019308\n\ + bl _08019F76\n\ _08019308:\n\ - ldr r0, _0801942C @ =gProtectStructs\n\ - lsls r1, 4\n\ - adds r1, r0\n\ - ldrb r0, [r1, 0x1]\n\ - lsls r0, 31\n\ - cmp r0, 0\n\ - beq _0801931A\n\ - bl _08019F76\n\ + ldr r0, _0801942C @ =gProtectStructs\n\ + lsls r1, 4\n\ + adds r1, r0\n\ + ldrb r0, [r1, 0x1]\n\ + lsls r0, 31\n\ + cmp r0, 0\n\ + beq _0801931A\n\ + bl _08019F76\n\ _0801931A:\n\ - ldr r1, _08019430 @ =gBattleMoves\n\ - lsls r0, r3, 1\n\ - adds r0, r3\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldrb r1, [r0, 0x8]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _08019332\n\ - bl _08019F76\n\ + ldr r1, _08019430 @ =gBattleMoves\n\ + lsls r0, r3, 1\n\ + adds r0, r3\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldrb r1, [r0, 0x8]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08019332\n\ + bl _08019F76\n\ _08019332:\n\ - ldr r3, _08019434 @ =gSpecialStatuses\n\ - ldr r0, _08019438 @ =gBankTarget\n\ - mov r8, r0\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r2, r0, 2\n\ - adds r0, r3, 0\n\ - adds r0, 0x8\n\ - adds r0, r2, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - bne _0801935C\n\ - adds r0, r3, 0\n\ - adds r0, 0xC\n\ - adds r0, r2, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - bne _0801935C\n\ - bl _08019F76\n\ + ldr r3, _08019434 @ =gSpecialStatuses\n\ + ldr r0, _08019438 @ =gBankTarget\n\ + mov r8, r0\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r2, r0, 2\n\ + adds r0, r3, 0\n\ + adds r0, 0x8\n\ + adds r0, r2, r0\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + bne _0801935C\n\ + adds r0, r3, 0\n\ + adds r0, 0xC\n\ + adds r0, r2, r0\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + bne _0801935C\n\ + bl _08019F76\n\ _0801935C:\n\ - adds r0, r1, 0\n\ - muls r0, r6\n\ - adds r0, r5\n\ - ldrh r0, [r0, 0x28]\n\ - cmp r0, 0\n\ - bne _0801936C\n\ - bl _08019F76\n\ + adds r0, r1, 0\n\ + muls r0, r6\n\ + adds r0, r5\n\ + ldrh r0, [r0, 0x28]\n\ + cmp r0, 0\n\ + bne _0801936C\n\ + bl _08019F76\n\ _0801936C:\n\ - bl Random\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - movs r1, 0x3\n\ - bl __umodsi3\n\ - lsls r0, 16\n\ - cmp r0, 0\n\ - beq _08019384\n\ - bl _08019F76\n\ + bl Random\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0x3\n\ + bl __umodsi3\n\ + lsls r0, 16\n\ + cmp r0, 0\n\ + beq _08019384\n\ + bl _08019F76\n\ _08019384:\n\ - ldrb r0, [r7]\n\ - muls r0, r6\n\ - adds r0, r5\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, 0xC\n\ - bne _08019396\n\ - bl _08019F76\n\ + ldrb r0, [r7]\n\ + muls r0, r6\n\ + adds r0, r5\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0xC\n\ + bne _08019396\n\ + bl _08019F76\n\ _08019396:\n\ - ldr r0, [sp, 0x8]\n\ - ldr r1, [sp, 0x10]\n\ - bl GetGenderFromSpeciesAndPersonality\n\ - adds r4, r0, 0\n\ - ldr r0, [sp, 0xC]\n\ - ldr r1, [sp, 0x14]\n\ - bl GetGenderFromSpeciesAndPersonality\n\ - lsls r4, 24\n\ - lsls r0, 24\n\ - cmp r4, r0\n\ - bne _080193B4\n\ - bl _08019F76\n\ + ldr r0, [sp, 0x8]\n\ + ldr r1, [sp, 0x10]\n\ + bl GetGenderFromSpeciesAndPersonality\n\ + adds r4, r0, 0\n\ + ldr r0, [sp, 0xC]\n\ + ldr r1, [sp, 0x14]\n\ + bl GetGenderFromSpeciesAndPersonality\n\ + lsls r4, 24\n\ + lsls r0, 24\n\ + cmp r4, r0\n\ + bne _080193B4\n\ + bl _08019F76\n\ _080193B4:\n\ - ldrb r0, [r7]\n\ - muls r0, r6\n\ - adds r4, r5, 0\n\ - adds r4, 0x50\n\ - adds r0, r4\n\ - ldr r0, [r0]\n\ - movs r1, 0xF0\n\ - lsls r1, 12\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080193CE\n\ - bl _08019F76\n\ + ldrb r0, [r7]\n\ + muls r0, r6\n\ + adds r4, r5, 0\n\ + adds r4, 0x50\n\ + adds r0, r4\n\ + ldr r0, [r0]\n\ + movs r1, 0xF0\n\ + lsls r1, 12\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080193CE\n\ + bl _08019F76\n\ _080193CE:\n\ - ldr r0, [sp, 0x8]\n\ - ldr r1, [sp, 0x10]\n\ - bl GetGenderFromSpeciesAndPersonality\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0xFF\n\ - bne _080193E2\n\ - bl _08019F76\n\ + ldr r0, [sp, 0x8]\n\ + ldr r1, [sp, 0x10]\n\ + bl GetGenderFromSpeciesAndPersonality\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0xFF\n\ + bne _080193E2\n\ + bl _08019F76\n\ _080193E2:\n\ - ldr r0, [sp, 0xC]\n\ - ldr r1, [sp, 0x14]\n\ - bl GetGenderFromSpeciesAndPersonality\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0xFF\n\ - bne _080193F6\n\ - bl _08019F76\n\ + ldr r0, [sp, 0xC]\n\ + ldr r1, [sp, 0x14]\n\ + bl GetGenderFromSpeciesAndPersonality\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0xFF\n\ + bne _080193F6\n\ + bl _08019F76\n\ _080193F6:\n\ - ldrb r0, [r7]\n\ - adds r2, r0, 0\n\ - muls r2, r6\n\ - adds r2, r4\n\ - ldr r1, _0801943C @ =gBitTable\n\ - mov r3, r8\n\ - ldrb r0, [r3]\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldr r1, [r0]\n\ - lsls r1, 16\n\ - ldr r0, [r2]\n\ - orrs r0, r1\n\ - str r0, [r2]\n\ - bl b_movescr_stack_push_cursor\n\ - ldr r1, _08019440 @ =gBattlescriptCurrInstr\n\ - ldr r0, _08019444 @ =BattleScript_CuteCharmActivates\n\ - str r0, [r1]\n\ - bl _08019F22\n\ - .align 2, 0\n\ + ldrb r0, [r7]\n\ + adds r2, r0, 0\n\ + muls r2, r6\n\ + adds r2, r4\n\ + ldr r1, _0801943C @ =gBitTable\n\ + mov r3, r8\n\ + ldrb r0, [r3]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r1, [r0]\n\ + lsls r1, 16\n\ + ldr r0, [r2]\n\ + orrs r0, r1\n\ + str r0, [r2]\n\ + bl b_movescr_stack_push_cursor\n\ + ldr r1, _08019440 @ =gBattlescriptCurrInstr\n\ + ldr r0, _08019444 @ =BattleScript_CuteCharmActivates\n\ + str r0, [r1]\n\ + bl _08019F22\n\ + .align 2, 0\n\ _08019420: .4byte gBattleMoveFlags\n\ _08019424: .4byte gBattleMons\n\ _08019428: .4byte gBankAttacker\n\ @@ -4236,347 +4236,347 @@ _0801943C: .4byte gBitTable\n\ _08019440: .4byte gBattlescriptCurrInstr\n\ _08019444: .4byte BattleScript_CuteCharmActivates\n\ _08019448:\n\ - movs r5, 0\n\ - mov r10, r5\n\ - ldr r0, _0801947C @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r10, r0\n\ - bcc _08019458\n\ - bl _08019F76\n\ + movs r5, 0\n\ + mov r10, r5\n\ + ldr r0, _0801947C @ =gNoOfAllBanks\n\ + ldrb r0, [r0]\n\ + cmp r10, r0\n\ + bcc _08019458\n\ + bl _08019F76\n\ _08019458:\n\ - ldr r1, _08019480 @ =gBattleMons\n\ - movs r0, 0x58\n\ - mov r2, r10\n\ - muls r2, r0\n\ - adds r0, r2, 0\n\ - adds r0, r1\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - subs r0, 0x7\n\ - adds r2, r1, 0\n\ - cmp r0, 0x41\n\ - bls _08019472\n\ - b _080196D6\n\ + ldr r1, _08019480 @ =gBattleMons\n\ + movs r0, 0x58\n\ + mov r2, r10\n\ + muls r2, r0\n\ + adds r0, r2, 0\n\ + adds r0, r1\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + subs r0, 0x7\n\ + adds r2, r1, 0\n\ + cmp r0, 0x41\n\ + bls _08019472\n\ + b _080196D6\n\ _08019472:\n\ - lsls r0, 2\n\ - ldr r1, _08019484 @ =_08019488\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ + lsls r0, 2\n\ + ldr r1, _08019484 @ =_08019488\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ _0801947C: .4byte gNoOfAllBanks\n\ _08019480: .4byte gBattleMons\n\ _08019484: .4byte _08019488\n\ - .align 2, 0\n\ + .align 2, 0\n\ _08019488:\n\ - .4byte _080195EC\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196B0\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _08019614\n\ - .4byte _080196D6\n\ - .4byte _08019590\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080195BC\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _08019680\n\ - .4byte _08019650\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _08019614\n\ + .4byte _080195EC\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196B0\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _08019614\n\ + .4byte _080196D6\n\ + .4byte _08019590\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080195BC\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _08019680\n\ + .4byte _08019650\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _080196D6\n\ + .4byte _08019614\n\ _08019590:\n\ - movs r0, 0x58\n\ - mov r3, r10\n\ - muls r3, r0\n\ - adds r0, r3, 0\n\ - adds r1, r2, 0\n\ - adds r1, 0x4C\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - ldr r1, _080195B0 @ =0x00000f88\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _080195AA\n\ - b _080196D6\n\ + movs r0, 0x58\n\ + mov r3, r10\n\ + muls r3, r0\n\ + adds r0, r3, 0\n\ + adds r1, r2, 0\n\ + adds r1, 0x4C\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + ldr r1, _080195B0 @ =0x00000f88\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080195AA\n\ + b _080196D6\n\ _080195AA:\n\ - ldr r0, _080195B4 @ =gBattleTextBuff1\n\ - ldr r1, _080195B8 @ =gStatusConditionString_PoisonJpn\n\ - b _0801969C\n\ - .align 2, 0\n\ + ldr r0, _080195B4 @ =gBattleTextBuff1\n\ + ldr r1, _080195B8 @ =gStatusConditionString_PoisonJpn\n\ + b _0801969C\n\ + .align 2, 0\n\ _080195B0: .4byte 0x00000f88\n\ _080195B4: .4byte gBattleTextBuff1\n\ _080195B8: .4byte gStatusConditionString_PoisonJpn\n\ _080195BC:\n\ - movs r0, 0x58\n\ - mov r1, r10\n\ - muls r1, r0\n\ - adds r0, r1, 0\n\ - adds r1, r2, 0\n\ - adds r1, 0x50\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - movs r1, 0x7\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _080195D6\n\ - b _080196D6\n\ + movs r0, 0x58\n\ + mov r1, r10\n\ + muls r1, r0\n\ + adds r0, r1, 0\n\ + adds r1, r2, 0\n\ + adds r1, 0x50\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + movs r1, 0x7\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080195D6\n\ + b _080196D6\n\ _080195D6:\n\ - ldr r0, _080195E4 @ =gBattleTextBuff1\n\ - ldr r1, _080195E8 @ =gStatusConditionString_ConfusionJpn\n\ - bl StringCopy\n\ - movs r2, 0x2\n\ - mov r9, r2\n\ - b _080196DC\n\ - .align 2, 0\n\ + ldr r0, _080195E4 @ =gBattleTextBuff1\n\ + ldr r1, _080195E8 @ =gStatusConditionString_ConfusionJpn\n\ + bl StringCopy\n\ + movs r2, 0x2\n\ + mov r9, r2\n\ + b _080196DC\n\ + .align 2, 0\n\ _080195E4: .4byte gBattleTextBuff1\n\ _080195E8: .4byte gStatusConditionString_ConfusionJpn\n\ _080195EC:\n\ - movs r0, 0x58\n\ - mov r3, r10\n\ - muls r3, r0\n\ - adds r0, r3, 0\n\ - adds r1, r2, 0\n\ - adds r1, 0x4C\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - movs r1, 0x40\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080196D6\n\ - ldr r0, _0801960C @ =gBattleTextBuff1\n\ - ldr r1, _08019610 @ =gStatusConditionString_ParalysisJpn\n\ - b _0801969C\n\ - .align 2, 0\n\ + movs r0, 0x58\n\ + mov r3, r10\n\ + muls r3, r0\n\ + adds r0, r3, 0\n\ + adds r1, r2, 0\n\ + adds r1, 0x4C\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + movs r1, 0x40\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080196D6\n\ + ldr r0, _0801960C @ =gBattleTextBuff1\n\ + ldr r1, _08019610 @ =gStatusConditionString_ParalysisJpn\n\ + b _0801969C\n\ + .align 2, 0\n\ _0801960C: .4byte gBattleTextBuff1\n\ _08019610: .4byte gStatusConditionString_ParalysisJpn\n\ _08019614:\n\ - movs r0, 0x58\n\ - mov r3, r10\n\ - muls r3, r0\n\ - adds r0, r2, 0\n\ - adds r0, 0x4C\n\ - adds r0, r3, r0\n\ - ldr r0, [r0]\n\ - movs r1, 0x7\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080196D6\n\ - adds r2, 0x50\n\ - adds r2, r3, r2\n\ - ldr r0, [r2]\n\ - ldr r1, _08019644 @ =0xf7ffffff\n\ - ands r0, r1\n\ - str r0, [r2]\n\ - ldr r0, _08019648 @ =gBattleTextBuff1\n\ - ldr r1, _0801964C @ =gStatusConditionString_SleepJpn\n\ - bl StringCopy\n\ - movs r0, 0x1\n\ - mov r9, r0\n\ - b _080196DC\n\ - .align 2, 0\n\ + movs r0, 0x58\n\ + mov r3, r10\n\ + muls r3, r0\n\ + adds r0, r2, 0\n\ + adds r0, 0x4C\n\ + adds r0, r3, r0\n\ + ldr r0, [r0]\n\ + movs r1, 0x7\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080196D6\n\ + adds r2, 0x50\n\ + adds r2, r3, r2\n\ + ldr r0, [r2]\n\ + ldr r1, _08019644 @ =0xf7ffffff\n\ + ands r0, r1\n\ + str r0, [r2]\n\ + ldr r0, _08019648 @ =gBattleTextBuff1\n\ + ldr r1, _0801964C @ =gStatusConditionString_SleepJpn\n\ + bl StringCopy\n\ + movs r0, 0x1\n\ + mov r9, r0\n\ + b _080196DC\n\ + .align 2, 0\n\ _08019644: .4byte 0xf7ffffff\n\ _08019648: .4byte gBattleTextBuff1\n\ _0801964C: .4byte gStatusConditionString_SleepJpn\n\ _08019650:\n\ - movs r0, 0x58\n\ - mov r1, r10\n\ - muls r1, r0\n\ - adds r0, r1, 0\n\ - adds r1, r2, 0\n\ - adds r1, 0x4C\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - movs r1, 0x10\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080196D6\n\ - ldr r0, _08019678 @ =gBattleTextBuff1\n\ - ldr r1, _0801967C @ =gStatusConditionString_BurnJpn\n\ - bl StringCopy\n\ - movs r2, 0x1\n\ - mov r9, r2\n\ - b _080196DC\n\ - .align 2, 0\n\ + movs r0, 0x58\n\ + mov r1, r10\n\ + muls r1, r0\n\ + adds r0, r1, 0\n\ + adds r1, r2, 0\n\ + adds r1, 0x4C\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + movs r1, 0x10\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080196D6\n\ + ldr r0, _08019678 @ =gBattleTextBuff1\n\ + ldr r1, _0801967C @ =gStatusConditionString_BurnJpn\n\ + bl StringCopy\n\ + movs r2, 0x1\n\ + mov r9, r2\n\ + b _080196DC\n\ + .align 2, 0\n\ _08019678: .4byte gBattleTextBuff1\n\ _0801967C: .4byte gStatusConditionString_BurnJpn\n\ _08019680:\n\ - movs r0, 0x58\n\ - mov r3, r10\n\ - muls r3, r0\n\ - adds r0, r3, 0\n\ - adds r1, r2, 0\n\ - adds r1, 0x4C\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - movs r1, 0x20\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080196D6\n\ - ldr r0, _080196A8 @ =gBattleTextBuff1\n\ - ldr r1, _080196AC @ =gStatusConditionString_IceJpn\n\ + movs r0, 0x58\n\ + mov r3, r10\n\ + muls r3, r0\n\ + adds r0, r3, 0\n\ + adds r1, r2, 0\n\ + adds r1, 0x4C\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + movs r1, 0x20\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080196D6\n\ + ldr r0, _080196A8 @ =gBattleTextBuff1\n\ + ldr r1, _080196AC @ =gStatusConditionString_IceJpn\n\ _0801969C:\n\ - bl StringCopy\n\ - movs r5, 0x1\n\ - mov r9, r5\n\ - b _080196DC\n\ - .align 2, 0\n\ + bl StringCopy\n\ + movs r5, 0x1\n\ + mov r9, r5\n\ + b _080196DC\n\ + .align 2, 0\n\ _080196A8: .4byte gBattleTextBuff1\n\ _080196AC: .4byte gStatusConditionString_IceJpn\n\ _080196B0:\n\ - movs r0, 0x58\n\ - mov r1, r10\n\ - muls r1, r0\n\ - adds r0, r1, 0\n\ - adds r1, r2, 0\n\ - adds r1, 0x50\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - movs r1, 0xF0\n\ - lsls r1, 12\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080196D6\n\ - ldr r0, _080196EC @ =gBattleTextBuff1\n\ - ldr r1, _080196F0 @ =gStatusConditionString_LoveJpn\n\ - bl StringCopy\n\ - movs r2, 0x3\n\ - mov r9, r2\n\ + movs r0, 0x58\n\ + mov r1, r10\n\ + muls r1, r0\n\ + adds r0, r1, 0\n\ + adds r1, r2, 0\n\ + adds r1, 0x50\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + movs r1, 0xF0\n\ + lsls r1, 12\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080196D6\n\ + ldr r0, _080196EC @ =gBattleTextBuff1\n\ + ldr r1, _080196F0 @ =gStatusConditionString_LoveJpn\n\ + bl StringCopy\n\ + movs r2, 0x3\n\ + mov r9, r2\n\ _080196D6:\n\ - mov r3, r9\n\ - cmp r3, 0\n\ - beq _08019798\n\ + mov r3, r9\n\ + cmp r3, 0\n\ + beq _08019798\n\ _080196DC:\n\ - mov r5, r9\n\ - cmp r5, 0x2\n\ - beq _08019710\n\ - cmp r5, 0x2\n\ - bgt _080196F4\n\ - cmp r5, 0x1\n\ - beq _080196FC\n\ - b _0801973C\n\ - .align 2, 0\n\ + mov r5, r9\n\ + cmp r5, 0x2\n\ + beq _08019710\n\ + cmp r5, 0x2\n\ + bgt _080196F4\n\ + cmp r5, 0x1\n\ + beq _080196FC\n\ + b _0801973C\n\ + .align 2, 0\n\ _080196EC: .4byte gBattleTextBuff1\n\ _080196F0: .4byte gStatusConditionString_LoveJpn\n\ _080196F4:\n\ - mov r0, r9\n\ - cmp r0, 0x3\n\ - beq _08019728\n\ - b _0801973C\n\ + mov r0, r9\n\ + cmp r0, 0x3\n\ + beq _08019728\n\ + b _0801973C\n\ _080196FC:\n\ - ldr r1, _0801970C @ =gBattleMons\n\ - movs r0, 0x58\n\ - mov r2, r10\n\ - muls r2, r0\n\ - adds r1, 0x4C\n\ - adds r2, r1\n\ - movs r0, 0\n\ - b _0801973A\n\ - .align 2, 0\n\ + ldr r1, _0801970C @ =gBattleMons\n\ + movs r0, 0x58\n\ + mov r2, r10\n\ + muls r2, r0\n\ + adds r1, 0x4C\n\ + adds r2, r1\n\ + movs r0, 0\n\ + b _0801973A\n\ + .align 2, 0\n\ _0801970C: .4byte gBattleMons\n\ _08019710:\n\ - ldr r1, _08019724 @ =gBattleMons\n\ - movs r0, 0x58\n\ - mov r2, r10\n\ - muls r2, r0\n\ - adds r1, 0x50\n\ - adds r2, r1\n\ - ldr r0, [r2]\n\ - movs r1, 0x8\n\ - negs r1, r1\n\ - b _08019738\n\ - .align 2, 0\n\ + ldr r1, _08019724 @ =gBattleMons\n\ + movs r0, 0x58\n\ + mov r2, r10\n\ + muls r2, r0\n\ + adds r1, 0x50\n\ + adds r2, r1\n\ + ldr r0, [r2]\n\ + movs r1, 0x8\n\ + negs r1, r1\n\ + b _08019738\n\ + .align 2, 0\n\ _08019724: .4byte gBattleMons\n\ _08019728:\n\ - ldr r1, _08019778 @ =gBattleMons\n\ - movs r0, 0x58\n\ - mov r2, r10\n\ - muls r2, r0\n\ - adds r1, 0x50\n\ - adds r2, r1\n\ - ldr r0, [r2]\n\ - ldr r1, _0801977C @ =0xfff0ffff\n\ + ldr r1, _08019778 @ =gBattleMons\n\ + movs r0, 0x58\n\ + mov r2, r10\n\ + muls r2, r0\n\ + adds r1, 0x50\n\ + adds r2, r1\n\ + ldr r0, [r2]\n\ + ldr r1, _0801977C @ =0xfff0ffff\n\ _08019738:\n\ - ands r0, r1\n\ + ands r0, r1\n\ _0801973A:\n\ - str r0, [r2]\n\ + str r0, [r2]\n\ _0801973C:\n\ - bl b_movescr_stack_push_cursor\n\ - ldr r1, _08019780 @ =gBattlescriptCurrInstr\n\ - ldr r0, _08019784 @ =gUnknown_081D9956\n\ - str r0, [r1]\n\ - ldr r0, _08019788 @ =0x02000000\n\ - ldr r1, _0801978C @ =0x00016003\n\ - adds r0, r1\n\ - mov r2, r10\n\ - strb r2, [r0]\n\ - ldr r4, _08019790 @ =gActiveBank\n\ - strb r2, [r4]\n\ - ldrb r1, [r4]\n\ - movs r0, 0x58\n\ - muls r0, r1\n\ - ldr r1, _08019794 @ =gUnknown_02024ACC\n\ - adds r0, r1\n\ - str r0, [sp]\n\ - movs r0, 0\n\ - movs r1, 0x28\n\ - movs r2, 0\n\ - movs r3, 0x4\n\ - bl EmitSetAttributes\n\ - ldrb r0, [r4]\n\ - bl MarkBufferBankForExecution\n\ - bl _08019F92\n\ - .align 2, 0\n\ + bl b_movescr_stack_push_cursor\n\ + ldr r1, _08019780 @ =gBattlescriptCurrInstr\n\ + ldr r0, _08019784 @ =gUnknown_081D9956\n\ + str r0, [r1]\n\ + ldr r0, _08019788 @ =0x02000000\n\ + ldr r1, _0801978C @ =0x00016003\n\ + adds r0, r1\n\ + mov r2, r10\n\ + strb r2, [r0]\n\ + ldr r4, _08019790 @ =gActiveBank\n\ + strb r2, [r4]\n\ + ldrb r1, [r4]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + ldr r1, _08019794 @ =gUnknown_02024ACC\n\ + adds r0, r1\n\ + str r0, [sp]\n\ + movs r0, 0\n\ + movs r1, 0x28\n\ + movs r2, 0\n\ + movs r3, 0x4\n\ + bl EmitSetAttributes\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ + bl _08019F92\n\ + .align 2, 0\n\ _08019778: .4byte gBattleMons\n\ _0801977C: .4byte 0xfff0ffff\n\ _08019780: .4byte gBattlescriptCurrInstr\n\ @@ -4586,112 +4586,112 @@ _0801978C: .4byte 0x00016003\n\ _08019790: .4byte gActiveBank\n\ _08019794: .4byte gUnknown_02024ACC\n\ _08019798:\n\ - mov r0, r10\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r10, r0\n\ - ldr r0, _080197B0 @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r10, r0\n\ - bcs _080197AC\n\ - b _08019458\n\ + mov r0, r10\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r10, r0\n\ + ldr r0, _080197B0 @ =gNoOfAllBanks\n\ + ldrb r0, [r0]\n\ + cmp r10, r0\n\ + bcs _080197AC\n\ + b _08019458\n\ _080197AC:\n\ - bl _08019F76\n\ - .align 2, 0\n\ + bl _08019F76\n\ + .align 2, 0\n\ _080197B0: .4byte gNoOfAllBanks\n\ _080197B4:\n\ - movs r3, 0\n\ - mov r10, r3\n\ - ldr r0, _080197FC @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r10, r0\n\ - bcc _080197C2\n\ - b _08019F76\n\ + movs r3, 0\n\ + mov r10, r3\n\ + ldr r0, _080197FC @ =gNoOfAllBanks\n\ + ldrb r0, [r0]\n\ + cmp r10, r0\n\ + bcc _080197C2\n\ + b _08019F76\n\ _080197C2:\n\ - ldr r4, _08019800 @ =gBattleMons\n\ + ldr r4, _08019800 @ =gBattleMons\n\ _080197C4:\n\ - movs r0, 0x58\n\ - mov r5, r10\n\ - muls r5, r0\n\ - adds r0, r5, 0\n\ - adds r0, r4\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x3B\n\ - bne _080197E8\n\ - mov r0, r10\n\ - bl CastformDataTypeChange\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ - cmp r0, 0\n\ - beq _080197E8\n\ - b _08019E40\n\ + movs r0, 0x58\n\ + mov r5, r10\n\ + muls r5, r0\n\ + adds r0, r5, 0\n\ + adds r0, r4\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x3B\n\ + bne _080197E8\n\ + mov r0, r10\n\ + bl CastformDataTypeChange\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r9, r0\n\ + cmp r0, 0\n\ + beq _080197E8\n\ + b _08019E40\n\ _080197E8:\n\ - mov r0, r10\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r10, r0\n\ - ldr r0, _080197FC @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r10, r0\n\ - bcc _080197C4\n\ - b _08019F76\n\ - .align 2, 0\n\ + mov r0, r10\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r10, r0\n\ + ldr r0, _080197FC @ =gNoOfAllBanks\n\ + ldrb r0, [r0]\n\ + cmp r10, r0\n\ + bcc _080197C4\n\ + b _08019F76\n\ + .align 2, 0\n\ _080197FC: .4byte gNoOfAllBanks\n\ _08019800: .4byte gBattleMons\n\ _08019804:\n\ - mov r1, r8\n\ - ldrb r0, [r1]\n\ - cmp r0, 0x1C\n\ - beq _0801980E\n\ - b _08019F76\n\ + mov r1, r8\n\ + ldrb r0, [r1]\n\ + cmp r0, 0x1C\n\ + beq _0801980E\n\ + b _08019F76\n\ _0801980E:\n\ - ldr r4, _08019860 @ =gHitMarker\n\ - ldr r1, [r4]\n\ - movs r0, 0x80\n\ - lsls r0, 7\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0801981E\n\ - b _08019F76\n\ + ldr r4, _08019860 @ =gHitMarker\n\ + ldr r1, [r4]\n\ + movs r0, 0x80\n\ + lsls r0, 7\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0801981E\n\ + b _08019F76\n\ _0801981E:\n\ - ldr r0, _08019864 @ =0xffffbfff\n\ - ands r1, r0\n\ - str r1, [r4]\n\ - ldr r3, _08019868 @ =0x000160ca\n\ - adds r2, r7, r3\n\ - ldrb r1, [r2]\n\ - movs r0, 0x3F\n\ - ands r0, r1\n\ - strb r0, [r2]\n\ - cmp r0, 0x6\n\ - bne _08019838\n\ - movs r0, 0x2\n\ - strb r0, [r2]\n\ + ldr r0, _08019864 @ =0xffffbfff\n\ + ands r1, r0\n\ + str r1, [r4]\n\ + ldr r3, _08019868 @ =0x000160ca\n\ + adds r2, r7, r3\n\ + ldrb r1, [r2]\n\ + movs r0, 0x3F\n\ + ands r0, r1\n\ + strb r0, [r2]\n\ + cmp r0, 0x6\n\ + bne _08019838\n\ + movs r0, 0x2\n\ + strb r0, [r2]\n\ _08019838:\n\ - ldr r1, _0801986C @ =gBattleCommunication\n\ - ldrb r0, [r2]\n\ - adds r0, 0x40\n\ - strb r0, [r1, 0x3]\n\ - ldr r0, _08019870 @ =gBankTarget\n\ - ldrb r1, [r0]\n\ - ldr r5, _08019874 @ =0x00016003\n\ - adds r0, r7, r5\n\ - strb r1, [r0]\n\ - bl b_movescr_stack_push_cursor\n\ - ldr r1, _08019878 @ =gBattlescriptCurrInstr\n\ - ldr r0, _0801987C @ =BattleScript_SynchronizeActivates\n\ - str r0, [r1]\n\ - ldr r0, [r4]\n\ - movs r1, 0x80\n\ - lsls r1, 6\n\ - orrs r0, r1\n\ - str r0, [r4]\n\ - b _08019F22\n\ - .align 2, 0\n\ + ldr r1, _0801986C @ =gBattleCommunication\n\ + ldrb r0, [r2]\n\ + adds r0, 0x40\n\ + strb r0, [r1, 0x3]\n\ + ldr r0, _08019870 @ =gBankTarget\n\ + ldrb r1, [r0]\n\ + ldr r5, _08019874 @ =0x00016003\n\ + adds r0, r7, r5\n\ + strb r1, [r0]\n\ + bl b_movescr_stack_push_cursor\n\ + ldr r1, _08019878 @ =gBattlescriptCurrInstr\n\ + ldr r0, _0801987C @ =BattleScript_SynchronizeActivates\n\ + str r0, [r1]\n\ + ldr r0, [r4]\n\ + movs r1, 0x80\n\ + lsls r1, 6\n\ + orrs r0, r1\n\ + str r0, [r4]\n\ + b _08019F22\n\ + .align 2, 0\n\ _08019860: .4byte gHitMarker\n\ _08019864: .4byte 0xffffbfff\n\ _08019868: .4byte 0x000160ca\n\ @@ -4701,54 +4701,54 @@ _08019874: .4byte 0x00016003\n\ _08019878: .4byte gBattlescriptCurrInstr\n\ _0801987C: .4byte BattleScript_SynchronizeActivates\n\ _08019880:\n\ - mov r1, r8\n\ - ldrb r0, [r1]\n\ - cmp r0, 0x1C\n\ - beq _0801988A\n\ - b _08019F76\n\ + mov r1, r8\n\ + ldrb r0, [r1]\n\ + cmp r0, 0x1C\n\ + beq _0801988A\n\ + b _08019F76\n\ _0801988A:\n\ - ldr r4, _080198DC @ =gHitMarker\n\ - ldr r1, [r4]\n\ - movs r0, 0x80\n\ - lsls r0, 7\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0801989A\n\ - b _08019F76\n\ + ldr r4, _080198DC @ =gHitMarker\n\ + ldr r1, [r4]\n\ + movs r0, 0x80\n\ + lsls r0, 7\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0801989A\n\ + b _08019F76\n\ _0801989A:\n\ - ldr r0, _080198E0 @ =0xffffbfff\n\ - ands r1, r0\n\ - str r1, [r4]\n\ - ldr r3, _080198E4 @ =0x000160ca\n\ - adds r2, r7, r3\n\ - ldrb r1, [r2]\n\ - movs r0, 0x3F\n\ - ands r0, r1\n\ - strb r0, [r2]\n\ - cmp r0, 0x6\n\ - bne _080198B4\n\ - movs r0, 0x2\n\ - strb r0, [r2]\n\ + ldr r0, _080198E0 @ =0xffffbfff\n\ + ands r1, r0\n\ + str r1, [r4]\n\ + ldr r3, _080198E4 @ =0x000160ca\n\ + adds r2, r7, r3\n\ + ldrb r1, [r2]\n\ + movs r0, 0x3F\n\ + ands r0, r1\n\ + strb r0, [r2]\n\ + cmp r0, 0x6\n\ + bne _080198B4\n\ + movs r0, 0x2\n\ + strb r0, [r2]\n\ _080198B4:\n\ - ldr r1, _080198E8 @ =gBattleCommunication\n\ - ldrb r0, [r2]\n\ - strb r0, [r1, 0x3]\n\ - ldr r0, _080198EC @ =gBankAttacker\n\ - ldrb r1, [r0]\n\ - ldr r5, _080198F0 @ =0x00016003\n\ - adds r0, r7, r5\n\ - strb r1, [r0]\n\ - bl b_movescr_stack_push_cursor\n\ - ldr r1, _080198F4 @ =gBattlescriptCurrInstr\n\ - ldr r0, _080198F8 @ =BattleScript_SynchronizeActivates\n\ - str r0, [r1]\n\ - ldr r0, [r4]\n\ - movs r1, 0x80\n\ - lsls r1, 6\n\ - orrs r0, r1\n\ - str r0, [r4]\n\ - b _08019F22\n\ - .align 2, 0\n\ + ldr r1, _080198E8 @ =gBattleCommunication\n\ + ldrb r0, [r2]\n\ + strb r0, [r1, 0x3]\n\ + ldr r0, _080198EC @ =gBankAttacker\n\ + ldrb r1, [r0]\n\ + ldr r5, _080198F0 @ =0x00016003\n\ + adds r0, r7, r5\n\ + strb r1, [r0]\n\ + bl b_movescr_stack_push_cursor\n\ + ldr r1, _080198F4 @ =gBattlescriptCurrInstr\n\ + ldr r0, _080198F8 @ =BattleScript_SynchronizeActivates\n\ + str r0, [r1]\n\ + ldr r0, [r4]\n\ + movs r1, 0x80\n\ + lsls r1, 6\n\ + orrs r0, r1\n\ + str r0, [r4]\n\ + b _08019F22\n\ + .align 2, 0\n\ _080198DC: .4byte gHitMarker\n\ _080198E0: .4byte 0xffffbfff\n\ _080198E4: .4byte 0x000160ca\n\ @@ -4758,152 +4758,152 @@ _080198F0: .4byte 0x00016003\n\ _080198F4: .4byte gBattlescriptCurrInstr\n\ _080198F8: .4byte BattleScript_SynchronizeActivates\n\ _080198FC:\n\ - movs r4, 0\n\ - ldr r0, _08019934 @ =gNoOfAllBanks\n\ - ldrb r1, [r0]\n\ - cmp r4, r1\n\ - blt _08019908\n\ - b _08019F76\n\ + movs r4, 0\n\ + ldr r0, _08019934 @ =gNoOfAllBanks\n\ + ldrb r1, [r0]\n\ + cmp r4, r1\n\ + blt _08019908\n\ + b _08019F76\n\ _08019908:\n\ - ldr r0, _08019938 @ =gBattleMons\n\ - adds r5, r1, 0\n\ - ldr r2, _0801993C @ =gStatuses3\n\ - adds r3, r0, 0\n\ - adds r3, 0x20\n\ - movs r6, 0x80\n\ - lsls r6, 12\n\ + ldr r0, _08019938 @ =gBattleMons\n\ + adds r5, r1, 0\n\ + ldr r2, _0801993C @ =gStatuses3\n\ + adds r3, r0, 0\n\ + adds r3, 0x20\n\ + movs r6, 0x80\n\ + lsls r6, 12\n\ _08019916:\n\ - ldrb r1, [r3]\n\ - cmp r1, 0x16\n\ - bne _08019926\n\ - ldr r0, [r2]\n\ - ands r0, r6\n\ - cmp r0, 0\n\ - beq _08019926\n\ - b _08019E6C\n\ + ldrb r1, [r3]\n\ + cmp r1, 0x16\n\ + bne _08019926\n\ + ldr r0, [r2]\n\ + ands r0, r6\n\ + cmp r0, 0\n\ + beq _08019926\n\ + b _08019E6C\n\ _08019926:\n\ - adds r2, 0x4\n\ - adds r3, 0x58\n\ - adds r4, 0x1\n\ - cmp r4, r5\n\ - blt _08019916\n\ - b _08019F76\n\ - .align 2, 0\n\ + adds r2, 0x4\n\ + adds r3, 0x58\n\ + adds r4, 0x1\n\ + cmp r4, r5\n\ + blt _08019916\n\ + b _08019F76\n\ + .align 2, 0\n\ _08019934: .4byte gNoOfAllBanks\n\ _08019938: .4byte gBattleMons\n\ _0801993C: .4byte gStatuses3\n\ _08019940:\n\ - movs r4, 0\n\ - ldr r0, _08019A1C @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt _0801994C\n\ - b _08019F76\n\ + movs r4, 0\n\ + ldr r0, _08019A1C @ =gNoOfAllBanks\n\ + ldrb r0, [r0]\n\ + cmp r4, r0\n\ + blt _0801994C\n\ + b _08019F76\n\ _0801994C:\n\ - ldr r0, _08019A20 @ =gActiveBank\n\ - mov r8, r0\n\ - ldr r1, _08019A24 @ =gBattleMons\n\ - adds r1, 0x20\n\ - str r1, [sp, 0x1C]\n\ - movs r2, 0\n\ - str r2, [sp, 0x20]\n\ + ldr r0, _08019A20 @ =gActiveBank\n\ + mov r8, r0\n\ + ldr r1, _08019A24 @ =gBattleMons\n\ + adds r1, 0x20\n\ + str r1, [sp, 0x1C]\n\ + movs r2, 0\n\ + str r2, [sp, 0x20]\n\ _0801995A:\n\ - ldr r3, [sp, 0x1C]\n\ - ldrb r0, [r3]\n\ - cmp r0, 0x24\n\ - beq _08019964\n\ - b _08019AF6\n\ + ldr r3, [sp, 0x1C]\n\ + ldrb r0, [r3]\n\ + cmp r0, 0x24\n\ + beq _08019964\n\ + b _08019AF6\n\ _08019964:\n\ - ldr r0, _08019A28 @ =gStatuses3\n\ - ldr r5, [sp, 0x20]\n\ - adds r0, r5, r0\n\ - ldr r1, [r0]\n\ - movs r0, 0x80\n\ - lsls r0, 13\n\ - ands r1, r0\n\ - str r5, [sp, 0x18]\n\ - cmp r1, 0\n\ - bne _0801997A\n\ - b _08019AF6\n\ + ldr r0, _08019A28 @ =gStatuses3\n\ + ldr r5, [sp, 0x20]\n\ + adds r0, r5, r0\n\ + ldr r1, [r0]\n\ + movs r0, 0x80\n\ + lsls r0, 13\n\ + ands r1, r0\n\ + str r5, [sp, 0x18]\n\ + cmp r1, 0\n\ + bne _0801997A\n\ + b _08019AF6\n\ _0801997A:\n\ - lsls r0, r4, 24\n\ - lsrs r0, 24\n\ - bl GetBankIdentity\n\ - movs r1, 0x1\n\ - adds r5, r0, 0\n\ - eors r5, r1\n\ - ands r5, r1\n\ - adds r0, r5, 0\n\ - bl GetBankByPlayerAI\n\ - lsls r0, 24\n\ - lsrs r6, r0, 24\n\ - adds r0, r5, 0x2\n\ - bl GetBankByPlayerAI\n\ - lsls r0, 24\n\ - lsrs r7, r0, 24\n\ - ldr r0, _08019A2C @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - movs r2, 0x1\n\ - adds r0, r2, 0\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _080199AE\n\ - b _08019ABC\n\ + lsls r0, r4, 24\n\ + lsrs r0, 24\n\ + bl GetBankIdentity\n\ + movs r1, 0x1\n\ + adds r5, r0, 0\n\ + eors r5, r1\n\ + ands r5, r1\n\ + adds r0, r5, 0\n\ + bl GetBankByPlayerAI\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + adds r0, r5, 0x2\n\ + bl GetBankByPlayerAI\n\ + lsls r0, 24\n\ + lsrs r7, r0, 24\n\ + ldr r0, _08019A2C @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + movs r2, 0x1\n\ + adds r0, r2, 0\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080199AE\n\ + b _08019ABC\n\ _080199AE:\n\ - movs r1, 0x58\n\ - adds r0, r6, 0\n\ - muls r0, r1\n\ - ldr r3, _08019A24 @ =gBattleMons\n\ - adds r1, r0, r3\n\ - adds r0, r1, 0\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, 0\n\ - beq _08019A78\n\ - ldrh r0, [r1, 0x28]\n\ - cmp r0, 0\n\ - beq _08019A34\n\ - movs r1, 0x58\n\ - adds r0, r7, 0\n\ - muls r0, r1\n\ - adds r1, r0, r3\n\ - adds r0, r1, 0\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, 0\n\ - beq _08019A34\n\ - ldrh r0, [r1, 0x28]\n\ - cmp r0, 0\n\ - beq _08019A34\n\ - str r2, [sp, 0x24]\n\ - bl Random\n\ - ldr r2, [sp, 0x24]\n\ - adds r1, r2, 0\n\ - ands r1, r0\n\ - lsls r1, 1\n\ - orrs r5, r1\n\ - adds r0, r5, 0\n\ - bl GetBankByPlayerAI\n\ - mov r2, r8\n\ - strb r0, [r2]\n\ - ldrb r0, [r2]\n\ - movs r3, 0x58\n\ - muls r0, r3\n\ - ldr r5, _08019A24 @ =gBattleMons\n\ - adds r0, r5\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - ldr r1, [sp, 0x1C]\n\ - strb r0, [r1]\n\ - ldrb r0, [r2]\n\ - muls r0, r3\n\ - adds r0, r5\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - ldr r2, _08019A30 @ =gLastUsedAbility\n\ - strb r0, [r2]\n\ - b _08019AE4\n\ - .align 2, 0\n\ + movs r1, 0x58\n\ + adds r0, r6, 0\n\ + muls r0, r1\n\ + ldr r3, _08019A24 @ =gBattleMons\n\ + adds r1, r0, r3\n\ + adds r0, r1, 0\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + beq _08019A78\n\ + ldrh r0, [r1, 0x28]\n\ + cmp r0, 0\n\ + beq _08019A34\n\ + movs r1, 0x58\n\ + adds r0, r7, 0\n\ + muls r0, r1\n\ + adds r1, r0, r3\n\ + adds r0, r1, 0\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + beq _08019A34\n\ + ldrh r0, [r1, 0x28]\n\ + cmp r0, 0\n\ + beq _08019A34\n\ + str r2, [sp, 0x24]\n\ + bl Random\n\ + ldr r2, [sp, 0x24]\n\ + adds r1, r2, 0\n\ + ands r1, r0\n\ + lsls r1, 1\n\ + orrs r5, r1\n\ + adds r0, r5, 0\n\ + bl GetBankByPlayerAI\n\ + mov r2, r8\n\ + strb r0, [r2]\n\ + ldrb r0, [r2]\n\ + movs r3, 0x58\n\ + muls r0, r3\n\ + ldr r5, _08019A24 @ =gBattleMons\n\ + adds r0, r5\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + ldr r1, [sp, 0x1C]\n\ + strb r0, [r1]\n\ + ldrb r0, [r2]\n\ + muls r0, r3\n\ + adds r0, r5\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + ldr r2, _08019A30 @ =gLastUsedAbility\n\ + strb r0, [r2]\n\ + b _08019AE4\n\ + .align 2, 0\n\ _08019A1C: .4byte gNoOfAllBanks\n\ _08019A20: .4byte gActiveBank\n\ _08019A24: .4byte gBattleMons\n\ @@ -4911,609 +4911,609 @@ _08019A28: .4byte gStatuses3\n\ _08019A2C: .4byte gBattleTypeFlags\n\ _08019A30: .4byte gLastUsedAbility\n\ _08019A34:\n\ - ldr r3, _08019A74 @ =gBattleMons\n\ - movs r2, 0x58\n\ - adds r0, r6, 0\n\ - muls r0, r2\n\ - adds r1, r0, r3\n\ - adds r0, r1, 0\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, 0\n\ - beq _08019A78\n\ - ldrh r0, [r1, 0x28]\n\ - cmp r0, 0\n\ - beq _08019A78\n\ - mov r5, r8\n\ - strb r6, [r5]\n\ - adds r1, r4, 0\n\ - muls r1, r2\n\ - adds r1, r3\n\ - ldrb r0, [r5]\n\ - muls r0, r2\n\ - adds r0, r3\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - adds r1, 0x20\n\ - strb r0, [r1]\n\ - ldrb r0, [r5]\n\ - muls r0, r2\n\ - adds r0, r3\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - b _08019AE0\n\ - .align 2, 0\n\ + ldr r3, _08019A74 @ =gBattleMons\n\ + movs r2, 0x58\n\ + adds r0, r6, 0\n\ + muls r0, r2\n\ + adds r1, r0, r3\n\ + adds r0, r1, 0\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + beq _08019A78\n\ + ldrh r0, [r1, 0x28]\n\ + cmp r0, 0\n\ + beq _08019A78\n\ + mov r5, r8\n\ + strb r6, [r5]\n\ + adds r1, r4, 0\n\ + muls r1, r2\n\ + adds r1, r3\n\ + ldrb r0, [r5]\n\ + muls r0, r2\n\ + adds r0, r3\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + adds r1, 0x20\n\ + strb r0, [r1]\n\ + ldrb r0, [r5]\n\ + muls r0, r2\n\ + adds r0, r3\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + b _08019AE0\n\ + .align 2, 0\n\ _08019A74: .4byte gBattleMons\n\ _08019A78:\n\ - ldr r3, _08019AB8 @ =gBattleMons\n\ - movs r2, 0x58\n\ - adds r0, r7, 0\n\ - muls r0, r2\n\ - adds r1, r0, r3\n\ - adds r0, r1, 0\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, 0\n\ - beq _08019AEE\n\ - ldrh r0, [r1, 0x28]\n\ - cmp r0, 0\n\ - beq _08019AEE\n\ - mov r5, r8\n\ - strb r7, [r5]\n\ - adds r1, r4, 0\n\ - muls r1, r2\n\ - adds r1, r3\n\ - ldrb r0, [r5]\n\ - muls r0, r2\n\ - adds r0, r3\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - adds r1, 0x20\n\ - strb r0, [r1]\n\ - ldrb r0, [r5]\n\ - muls r0, r2\n\ - adds r0, r3\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - b _08019AE0\n\ - .align 2, 0\n\ + ldr r3, _08019AB8 @ =gBattleMons\n\ + movs r2, 0x58\n\ + adds r0, r7, 0\n\ + muls r0, r2\n\ + adds r1, r0, r3\n\ + adds r0, r1, 0\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + beq _08019AEE\n\ + ldrh r0, [r1, 0x28]\n\ + cmp r0, 0\n\ + beq _08019AEE\n\ + mov r5, r8\n\ + strb r7, [r5]\n\ + adds r1, r4, 0\n\ + muls r1, r2\n\ + adds r1, r3\n\ + ldrb r0, [r5]\n\ + muls r0, r2\n\ + adds r0, r3\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + adds r1, 0x20\n\ + strb r0, [r1]\n\ + ldrb r0, [r5]\n\ + muls r0, r2\n\ + adds r0, r3\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + b _08019AE0\n\ + .align 2, 0\n\ _08019AB8: .4byte gBattleMons\n\ _08019ABC:\n\ - mov r2, r8\n\ - strb r6, [r2]\n\ - movs r3, 0x58\n\ - adds r0, r6, 0\n\ - muls r0, r3\n\ - ldr r5, _08019B10 @ =gBattleMons\n\ - adds r0, r5\n\ - adds r2, r0, 0\n\ - adds r2, 0x20\n\ - ldrb r1, [r2]\n\ - cmp r1, 0\n\ - beq _08019AEE\n\ - ldrh r0, [r0, 0x28]\n\ - cmp r0, 0\n\ - beq _08019AEE\n\ - ldr r0, [sp, 0x1C]\n\ - strb r1, [r0]\n\ - ldrb r0, [r2]\n\ + mov r2, r8\n\ + strb r6, [r2]\n\ + movs r3, 0x58\n\ + adds r0, r6, 0\n\ + muls r0, r3\n\ + ldr r5, _08019B10 @ =gBattleMons\n\ + adds r0, r5\n\ + adds r2, r0, 0\n\ + adds r2, 0x20\n\ + ldrb r1, [r2]\n\ + cmp r1, 0\n\ + beq _08019AEE\n\ + ldrh r0, [r0, 0x28]\n\ + cmp r0, 0\n\ + beq _08019AEE\n\ + ldr r0, [sp, 0x1C]\n\ + strb r1, [r0]\n\ + ldrb r0, [r2]\n\ _08019AE0:\n\ - ldr r1, _08019B14 @ =gLastUsedAbility\n\ - strb r0, [r1]\n\ + ldr r1, _08019B14 @ =gLastUsedAbility\n\ + strb r0, [r1]\n\ _08019AE4:\n\ - mov r0, r9\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ + mov r0, r9\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r9, r0\n\ _08019AEE:\n\ - mov r2, r9\n\ - cmp r2, 0\n\ - beq _08019AF6\n\ - b _08019E88\n\ + mov r2, r9\n\ + cmp r2, 0\n\ + beq _08019AF6\n\ + b _08019E88\n\ _08019AF6:\n\ - ldr r3, [sp, 0x1C]\n\ - adds r3, 0x58\n\ - str r3, [sp, 0x1C]\n\ - ldr r5, [sp, 0x20]\n\ - adds r5, 0x4\n\ - str r5, [sp, 0x20]\n\ - adds r4, 0x1\n\ - ldr r0, _08019B18 @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - bge _08019B0E\n\ - b _0801995A\n\ + ldr r3, [sp, 0x1C]\n\ + adds r3, 0x58\n\ + str r3, [sp, 0x1C]\n\ + ldr r5, [sp, 0x20]\n\ + adds r5, 0x4\n\ + str r5, [sp, 0x20]\n\ + adds r4, 0x1\n\ + ldr r0, _08019B18 @ =gNoOfAllBanks\n\ + ldrb r0, [r0]\n\ + cmp r4, r0\n\ + bge _08019B0E\n\ + b _0801995A\n\ _08019B0E:\n\ - b _08019F76\n\ - .align 2, 0\n\ + b _08019F76\n\ + .align 2, 0\n\ _08019B10: .4byte gBattleMons\n\ _08019B14: .4byte gLastUsedAbility\n\ _08019B18: .4byte gNoOfAllBanks\n\ _08019B1C:\n\ - movs r4, 0\n\ - ldr r0, _08019B54 @ =gNoOfAllBanks\n\ - ldrb r1, [r0]\n\ - cmp r4, r1\n\ - blt _08019B28\n\ - b _08019F76\n\ + movs r4, 0\n\ + ldr r0, _08019B54 @ =gNoOfAllBanks\n\ + ldrb r1, [r0]\n\ + cmp r4, r1\n\ + blt _08019B28\n\ + b _08019F76\n\ _08019B28:\n\ - ldr r0, _08019B58 @ =gBattleMons\n\ - adds r5, r1, 0\n\ - ldr r2, _08019B5C @ =gStatuses3\n\ - adds r3, r0, 0\n\ - adds r3, 0x20\n\ - movs r6, 0x80\n\ - lsls r6, 12\n\ + ldr r0, _08019B58 @ =gBattleMons\n\ + adds r5, r1, 0\n\ + ldr r2, _08019B5C @ =gStatuses3\n\ + adds r3, r0, 0\n\ + adds r3, 0x20\n\ + movs r6, 0x80\n\ + lsls r6, 12\n\ _08019B36:\n\ - ldrb r1, [r3]\n\ - cmp r1, 0x16\n\ - bne _08019B46\n\ - ldr r0, [r2]\n\ - ands r0, r6\n\ - cmp r0, 0\n\ - beq _08019B46\n\ - b _08019F04\n\ + ldrb r1, [r3]\n\ + cmp r1, 0x16\n\ + bne _08019B46\n\ + ldr r0, [r2]\n\ + ands r0, r6\n\ + cmp r0, 0\n\ + beq _08019B46\n\ + b _08019F04\n\ _08019B46:\n\ - adds r2, 0x4\n\ - adds r3, 0x58\n\ - adds r4, 0x1\n\ - cmp r4, r5\n\ - blt _08019B36\n\ - b _08019F76\n\ - .align 2, 0\n\ + adds r2, 0x4\n\ + adds r3, 0x58\n\ + adds r4, 0x1\n\ + cmp r4, r5\n\ + blt _08019B36\n\ + b _08019F76\n\ + .align 2, 0\n\ _08019B54: .4byte gNoOfAllBanks\n\ _08019B58: .4byte gBattleMons\n\ _08019B5C: .4byte gStatuses3\n\ _08019B60:\n\ - mov r0, r10\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - movs r4, 0\n\ - ldr r0, _08019BB0 @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt _08019B76\n\ - b _08019F76\n\ + mov r0, r10\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + movs r4, 0\n\ + ldr r0, _08019BB0 @ =gNoOfAllBanks\n\ + ldrb r0, [r0]\n\ + cmp r4, r0\n\ + blt _08019B76\n\ + b _08019F76\n\ _08019B76:\n\ - ldr r7, _08019BB4 @ =gBattleMons\n\ + ldr r7, _08019BB4 @ =gBattleMons\n\ _08019B78:\n\ - lsls r0, r4, 24\n\ - lsrs r0, 24\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - adds r3, r4, 0x1\n\ - cmp r0, r5\n\ - beq _08019BA2\n\ - movs r0, 0x58\n\ - muls r0, r4\n\ - adds r0, r7\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, r6\n\ - bne _08019BA2\n\ - ldr r0, _08019BB8 @ =gLastUsedAbility\n\ - strb r6, [r0]\n\ - lsls r0, r3, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ + lsls r0, r4, 24\n\ + lsrs r0, 24\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + adds r3, r4, 0x1\n\ + cmp r0, r5\n\ + beq _08019BA2\n\ + movs r0, 0x58\n\ + muls r0, r4\n\ + adds r0, r7\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, r6\n\ + bne _08019BA2\n\ + ldr r0, _08019BB8 @ =gLastUsedAbility\n\ + strb r6, [r0]\n\ + lsls r0, r3, 24\n\ + lsrs r0, 24\n\ + mov r9, r0\n\ _08019BA2:\n\ - adds r4, r3, 0\n\ - ldr r0, _08019BB0 @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt _08019B78\n\ - b _08019F76\n\ - .align 2, 0\n\ + adds r4, r3, 0\n\ + ldr r0, _08019BB0 @ =gNoOfAllBanks\n\ + ldrb r0, [r0]\n\ + cmp r4, r0\n\ + blt _08019B78\n\ + b _08019F76\n\ + .align 2, 0\n\ _08019BB0: .4byte gNoOfAllBanks\n\ _08019BB4: .4byte gBattleMons\n\ _08019BB8: .4byte gLastUsedAbility\n\ _08019BBC:\n\ - mov r0, r10\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - movs r4, 0\n\ - ldr r0, _08019C0C @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt _08019BD2\n\ - b _08019F76\n\ + mov r0, r10\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + movs r4, 0\n\ + ldr r0, _08019C0C @ =gNoOfAllBanks\n\ + ldrb r0, [r0]\n\ + cmp r4, r0\n\ + blt _08019BD2\n\ + b _08019F76\n\ _08019BD2:\n\ - ldr r7, _08019C10 @ =gBattleMons\n\ + ldr r7, _08019C10 @ =gBattleMons\n\ _08019BD4:\n\ - lsls r0, r4, 24\n\ - lsrs r0, 24\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - adds r3, r4, 0x1\n\ - cmp r0, r5\n\ - bne _08019BFE\n\ - movs r0, 0x58\n\ - muls r0, r4\n\ - adds r0, r7\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, r6\n\ - bne _08019BFE\n\ - ldr r0, _08019C14 @ =gLastUsedAbility\n\ - strb r6, [r0]\n\ - lsls r0, r3, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ + lsls r0, r4, 24\n\ + lsrs r0, 24\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + adds r3, r4, 0x1\n\ + cmp r0, r5\n\ + bne _08019BFE\n\ + movs r0, 0x58\n\ + muls r0, r4\n\ + adds r0, r7\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, r6\n\ + bne _08019BFE\n\ + ldr r0, _08019C14 @ =gLastUsedAbility\n\ + strb r6, [r0]\n\ + lsls r0, r3, 24\n\ + lsrs r0, 24\n\ + mov r9, r0\n\ _08019BFE:\n\ - adds r4, r3, 0\n\ - ldr r0, _08019C0C @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt _08019BD4\n\ - b _08019F76\n\ - .align 2, 0\n\ + adds r4, r3, 0\n\ + ldr r0, _08019C0C @ =gNoOfAllBanks\n\ + ldrb r0, [r0]\n\ + cmp r4, r0\n\ + blt _08019BD4\n\ + b _08019F76\n\ + .align 2, 0\n\ _08019C0C: .4byte gNoOfAllBanks\n\ _08019C10: .4byte gBattleMons\n\ _08019C14: .4byte gLastUsedAbility\n\ _08019C18:\n\ - mov r1, r8\n\ - ldrb r0, [r1]\n\ - cmp r0, 0xFD\n\ - beq _08019C40\n\ - cmp r0, 0xFE\n\ - beq _08019C78\n\ - movs r4, 0\n\ - ldr r0, _08019C38 @ =gNoOfAllBanks\n\ - adds r5, r0, 0\n\ - ldrb r2, [r5]\n\ - cmp r4, r2\n\ - blt _08019C32\n\ - b _08019F76\n\ + mov r1, r8\n\ + ldrb r0, [r1]\n\ + cmp r0, 0xFD\n\ + beq _08019C40\n\ + cmp r0, 0xFE\n\ + beq _08019C78\n\ + movs r4, 0\n\ + ldr r0, _08019C38 @ =gNoOfAllBanks\n\ + adds r5, r0, 0\n\ + ldrb r2, [r5]\n\ + cmp r4, r2\n\ + blt _08019C32\n\ + b _08019F76\n\ _08019C32:\n\ - ldr r2, _08019C3C @ =gBattleMons\n\ - b _08019CB0\n\ - .align 2, 0\n\ + ldr r2, _08019C3C @ =gBattleMons\n\ + b _08019CB0\n\ + .align 2, 0\n\ _08019C38: .4byte gNoOfAllBanks\n\ _08019C3C: .4byte gBattleMons\n\ _08019C40:\n\ - movs r4, 0\n\ - ldr r0, _08019C70 @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt _08019C4C\n\ - b _08019F76\n\ + movs r4, 0\n\ + ldr r0, _08019C70 @ =gNoOfAllBanks\n\ + ldrb r0, [r0]\n\ + cmp r4, r0\n\ + blt _08019C4C\n\ + b _08019F76\n\ _08019C4C:\n\ - ldr r5, _08019C74 @ =gStatuses3\n\ - movs r2, 0x80\n\ - lsls r2, 9\n\ - adds r1, r0, 0\n\ + ldr r5, _08019C74 @ =gStatuses3\n\ + movs r2, 0x80\n\ + lsls r2, 9\n\ + adds r1, r0, 0\n\ _08019C54:\n\ - lsls r0, r4, 2\n\ - adds r0, r5\n\ - ldr r0, [r0]\n\ - ands r0, r2\n\ - adds r3, r4, 0x1\n\ - cmp r0, 0\n\ - beq _08019C68\n\ - lsls r0, r3, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ + lsls r0, r4, 2\n\ + adds r0, r5\n\ + ldr r0, [r0]\n\ + ands r0, r2\n\ + adds r3, r4, 0x1\n\ + cmp r0, 0\n\ + beq _08019C68\n\ + lsls r0, r3, 24\n\ + lsrs r0, 24\n\ + mov r9, r0\n\ _08019C68:\n\ - adds r4, r3, 0\n\ - cmp r4, r1\n\ - blt _08019C54\n\ - b _08019F76\n\ - .align 2, 0\n\ + adds r4, r3, 0\n\ + cmp r4, r1\n\ + blt _08019C54\n\ + b _08019F76\n\ + .align 2, 0\n\ _08019C70: .4byte gNoOfAllBanks\n\ _08019C74: .4byte gStatuses3\n\ _08019C78:\n\ - movs r4, 0\n\ - ldr r0, _08019CA8 @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt _08019C84\n\ - b _08019F76\n\ + movs r4, 0\n\ + ldr r0, _08019CA8 @ =gNoOfAllBanks\n\ + ldrb r0, [r0]\n\ + cmp r4, r0\n\ + blt _08019C84\n\ + b _08019F76\n\ _08019C84:\n\ - ldr r5, _08019CAC @ =gStatuses3\n\ - movs r2, 0x80\n\ - lsls r2, 10\n\ - adds r1, r0, 0\n\ + ldr r5, _08019CAC @ =gStatuses3\n\ + movs r2, 0x80\n\ + lsls r2, 10\n\ + adds r1, r0, 0\n\ _08019C8C:\n\ - lsls r0, r4, 2\n\ - adds r0, r5\n\ - ldr r0, [r0]\n\ - ands r0, r2\n\ - adds r3, r4, 0x1\n\ - cmp r0, 0\n\ - beq _08019CA0\n\ - lsls r0, r3, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ + lsls r0, r4, 2\n\ + adds r0, r5\n\ + ldr r0, [r0]\n\ + ands r0, r2\n\ + adds r3, r4, 0x1\n\ + cmp r0, 0\n\ + beq _08019CA0\n\ + lsls r0, r3, 24\n\ + lsrs r0, 24\n\ + mov r9, r0\n\ _08019CA0:\n\ - adds r4, r3, 0\n\ - cmp r4, r1\n\ - blt _08019C8C\n\ - b _08019F76\n\ - .align 2, 0\n\ + adds r4, r3, 0\n\ + cmp r4, r1\n\ + blt _08019C8C\n\ + b _08019F76\n\ + .align 2, 0\n\ _08019CA8: .4byte gNoOfAllBanks\n\ _08019CAC: .4byte gStatuses3\n\ _08019CB0:\n\ - movs r0, 0x58\n\ - muls r0, r4\n\ - adds r0, r2\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - adds r3, r4, 0x1\n\ - cmp r0, r6\n\ - bne _08019CCA\n\ - mov r0, r8\n\ - strb r6, [r0]\n\ - lsls r0, r3, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ + movs r0, 0x58\n\ + muls r0, r4\n\ + adds r0, r2\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + adds r3, r4, 0x1\n\ + cmp r0, r6\n\ + bne _08019CCA\n\ + mov r0, r8\n\ + strb r6, [r0]\n\ + lsls r0, r3, 24\n\ + lsrs r0, 24\n\ + mov r9, r0\n\ _08019CCA:\n\ - adds r4, r3, 0\n\ - ldrb r1, [r5]\n\ - cmp r4, r1\n\ - blt _08019CB0\n\ - b _08019F76\n\ + adds r4, r3, 0\n\ + ldrb r1, [r5]\n\ + cmp r4, r1\n\ + blt _08019CB0\n\ + b _08019F76\n\ _08019CD4:\n\ - movs r4, 0\n\ - ldr r0, _08019D10 @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt _08019CE0\n\ - b _08019F76\n\ + movs r4, 0\n\ + ldr r0, _08019D10 @ =gNoOfAllBanks\n\ + ldrb r0, [r0]\n\ + cmp r4, r0\n\ + blt _08019CE0\n\ + b _08019F76\n\ _08019CE0:\n\ - ldr r7, _08019D14 @ =gBattleMons\n\ - adds r2, r0, 0\n\ - movs r5, 0x58\n\ + ldr r7, _08019D14 @ =gBattleMons\n\ + adds r2, r0, 0\n\ + movs r5, 0x58\n\ _08019CE6:\n\ - adds r0, r4, 0\n\ - muls r0, r5\n\ - adds r1, r0, r7\n\ - adds r0, r1, 0\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - adds r3, r4, 0x1\n\ - cmp r0, r6\n\ - bne _08019D08\n\ - ldrh r0, [r1, 0x28]\n\ - cmp r0, 0\n\ - beq _08019D08\n\ - mov r0, r8\n\ - strb r6, [r0]\n\ - lsls r0, r3, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ + adds r0, r4, 0\n\ + muls r0, r5\n\ + adds r1, r0, r7\n\ + adds r0, r1, 0\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + adds r3, r4, 0x1\n\ + cmp r0, r6\n\ + bne _08019D08\n\ + ldrh r0, [r1, 0x28]\n\ + cmp r0, 0\n\ + beq _08019D08\n\ + mov r0, r8\n\ + strb r6, [r0]\n\ + lsls r0, r3, 24\n\ + lsrs r0, 24\n\ + mov r9, r0\n\ _08019D08:\n\ - adds r4, r3, 0\n\ - cmp r4, r2\n\ - blt _08019CE6\n\ - b _08019F76\n\ - .align 2, 0\n\ + adds r4, r3, 0\n\ + cmp r4, r2\n\ + blt _08019CE6\n\ + b _08019F76\n\ + .align 2, 0\n\ _08019D10: .4byte gNoOfAllBanks\n\ _08019D14: .4byte gBattleMons\n\ _08019D18:\n\ - movs r4, 0\n\ - ldr r0, _08019D50 @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt _08019D24\n\ - b _08019F76\n\ + movs r4, 0\n\ + ldr r0, _08019D50 @ =gNoOfAllBanks\n\ + ldrb r0, [r0]\n\ + cmp r4, r0\n\ + blt _08019D24\n\ + b _08019F76\n\ _08019D24:\n\ - ldr r7, _08019D54 @ =gBattleMons\n\ - adds r1, r0, 0\n\ - movs r5, 0x58\n\ - ldr r2, _08019D58 @ =gLastUsedAbility\n\ + ldr r7, _08019D54 @ =gBattleMons\n\ + adds r1, r0, 0\n\ + movs r5, 0x58\n\ + ldr r2, _08019D58 @ =gLastUsedAbility\n\ _08019D2C:\n\ - adds r0, r4, 0\n\ - muls r0, r5\n\ - adds r0, r7\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - adds r3, r4, 0x1\n\ - cmp r0, r6\n\ - bne _08019D48\n\ - cmp r4, r10\n\ - beq _08019D48\n\ - strb r6, [r2]\n\ - lsls r0, r3, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ + adds r0, r4, 0\n\ + muls r0, r5\n\ + adds r0, r7\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + adds r3, r4, 0x1\n\ + cmp r0, r6\n\ + bne _08019D48\n\ + cmp r4, r10\n\ + beq _08019D48\n\ + strb r6, [r2]\n\ + lsls r0, r3, 24\n\ + lsrs r0, 24\n\ + mov r9, r0\n\ _08019D48:\n\ - adds r4, r3, 0\n\ - cmp r4, r1\n\ - blt _08019D2C\n\ - b _08019F76\n\ - .align 2, 0\n\ + adds r4, r3, 0\n\ + cmp r4, r1\n\ + blt _08019D2C\n\ + b _08019F76\n\ + .align 2, 0\n\ _08019D50: .4byte gNoOfAllBanks\n\ _08019D54: .4byte gBattleMons\n\ _08019D58: .4byte gLastUsedAbility\n\ _08019D5C:\n\ - mov r0, r10\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - movs r4, 0\n\ - ldr r0, _08019DAC @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt _08019D72\n\ - b _08019F76\n\ + mov r0, r10\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + movs r4, 0\n\ + ldr r0, _08019DAC @ =gNoOfAllBanks\n\ + ldrb r0, [r0]\n\ + cmp r4, r0\n\ + blt _08019D72\n\ + b _08019F76\n\ _08019D72:\n\ - ldr r7, _08019DB0 @ =gBattleMons\n\ + ldr r7, _08019DB0 @ =gBattleMons\n\ _08019D74:\n\ - lsls r0, r4, 24\n\ - lsrs r0, 24\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, r5\n\ - beq _08019DA0\n\ - movs r0, 0x58\n\ - muls r0, r4\n\ - adds r0, r7\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, r6\n\ - bne _08019DA0\n\ - ldr r0, _08019DB4 @ =gLastUsedAbility\n\ - strb r6, [r0]\n\ - mov r0, r9\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ + lsls r0, r4, 24\n\ + lsrs r0, 24\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, r5\n\ + beq _08019DA0\n\ + movs r0, 0x58\n\ + muls r0, r4\n\ + adds r0, r7\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, r6\n\ + bne _08019DA0\n\ + ldr r0, _08019DB4 @ =gLastUsedAbility\n\ + strb r6, [r0]\n\ + mov r0, r9\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r9, r0\n\ _08019DA0:\n\ - adds r4, 0x1\n\ - ldr r0, _08019DAC @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt _08019D74\n\ - b _08019F76\n\ - .align 2, 0\n\ + adds r4, 0x1\n\ + ldr r0, _08019DAC @ =gNoOfAllBanks\n\ + ldrb r0, [r0]\n\ + cmp r4, r0\n\ + blt _08019D74\n\ + b _08019F76\n\ + .align 2, 0\n\ _08019DAC: .4byte gNoOfAllBanks\n\ _08019DB0: .4byte gBattleMons\n\ _08019DB4: .4byte gLastUsedAbility\n\ _08019DB8:\n\ - mov r0, r10\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - movs r4, 0\n\ - ldr r0, _08019E08 @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt _08019DCE\n\ - b _08019F76\n\ + mov r0, r10\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + movs r4, 0\n\ + ldr r0, _08019E08 @ =gNoOfAllBanks\n\ + ldrb r0, [r0]\n\ + cmp r4, r0\n\ + blt _08019DCE\n\ + b _08019F76\n\ _08019DCE:\n\ - ldr r7, _08019E0C @ =gBattleMons\n\ + ldr r7, _08019E0C @ =gBattleMons\n\ _08019DD0:\n\ - lsls r0, r4, 24\n\ - lsrs r0, 24\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, r5\n\ - bne _08019DFC\n\ - movs r0, 0x58\n\ - muls r0, r4\n\ - adds r0, r7\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, r6\n\ - bne _08019DFC\n\ - ldr r0, _08019E10 @ =gLastUsedAbility\n\ - strb r6, [r0]\n\ - mov r0, r9\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ + lsls r0, r4, 24\n\ + lsrs r0, 24\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, r5\n\ + bne _08019DFC\n\ + movs r0, 0x58\n\ + muls r0, r4\n\ + adds r0, r7\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, r6\n\ + bne _08019DFC\n\ + ldr r0, _08019E10 @ =gLastUsedAbility\n\ + strb r6, [r0]\n\ + mov r0, r9\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r9, r0\n\ _08019DFC:\n\ - adds r4, 0x1\n\ - ldr r0, _08019E08 @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt _08019DD0\n\ - b _08019F76\n\ - .align 2, 0\n\ + adds r4, 0x1\n\ + ldr r0, _08019E08 @ =gNoOfAllBanks\n\ + ldrb r0, [r0]\n\ + cmp r4, r0\n\ + blt _08019DD0\n\ + b _08019F76\n\ + .align 2, 0\n\ _08019E08: .4byte gNoOfAllBanks\n\ _08019E0C: .4byte gBattleMons\n\ _08019E10: .4byte gLastUsedAbility\n\ _08019E14:\n\ - ldr r0, _08019E30 @ =BattleScript_CastformChange\n\ - bl b_push_move_exec\n\ - ldr r0, _08019E34 @ =0x02000000\n\ - ldr r2, _08019E38 @ =0x00016003\n\ - adds r1, r0, r2\n\ - strb r6, [r1]\n\ - mov r1, r9\n\ - subs r1, 0x1\n\ - ldr r3, _08019E3C @ =0x0001609b\n\ - adds r0, r3\n\ - strb r1, [r0]\n\ - b _08019F76\n\ - .align 2, 0\n\ + ldr r0, _08019E30 @ =BattleScript_CastformChange\n\ + bl b_push_move_exec\n\ + ldr r0, _08019E34 @ =0x02000000\n\ + ldr r2, _08019E38 @ =0x00016003\n\ + adds r1, r0, r2\n\ + strb r6, [r1]\n\ + mov r1, r9\n\ + subs r1, 0x1\n\ + ldr r3, _08019E3C @ =0x0001609b\n\ + adds r0, r3\n\ + strb r1, [r0]\n\ + b _08019F76\n\ + .align 2, 0\n\ _08019E30: .4byte BattleScript_CastformChange\n\ _08019E34: .4byte 0x02000000\n\ _08019E38: .4byte 0x00016003\n\ _08019E3C: .4byte 0x0001609b\n\ _08019E40:\n\ - ldr r0, _08019E5C @ =BattleScript_CastformChange\n\ - bl b_push_move_exec\n\ - ldr r0, _08019E60 @ =0x02000000\n\ - ldr r5, _08019E64 @ =0x00016003\n\ - adds r1, r0, r5\n\ - mov r2, r10\n\ - strb r2, [r1]\n\ - mov r1, r9\n\ - subs r1, 0x1\n\ - ldr r3, _08019E68 @ =0x0001609b\n\ - adds r0, r3\n\ - strb r1, [r0]\n\ - b _08019F92\n\ - .align 2, 0\n\ + ldr r0, _08019E5C @ =BattleScript_CastformChange\n\ + bl b_push_move_exec\n\ + ldr r0, _08019E60 @ =0x02000000\n\ + ldr r5, _08019E64 @ =0x00016003\n\ + adds r1, r0, r5\n\ + mov r2, r10\n\ + strb r2, [r1]\n\ + mov r1, r9\n\ + subs r1, 0x1\n\ + ldr r3, _08019E68 @ =0x0001609b\n\ + adds r0, r3\n\ + strb r1, [r0]\n\ + b _08019F92\n\ + .align 2, 0\n\ _08019E5C: .4byte BattleScript_CastformChange\n\ _08019E60: .4byte 0x02000000\n\ _08019E64: .4byte 0x00016003\n\ _08019E68: .4byte 0x0001609b\n\ _08019E6C:\n\ - mov r5, r8\n\ - strb r1, [r5]\n\ - ldr r0, [r2]\n\ - ldr r1, _08019E80 @ =0xfff7ffff\n\ - ands r0, r1\n\ - str r0, [r2]\n\ - ldr r0, _08019E84 @ =gUnknown_081D978C\n\ - bl b_push_move_exec\n\ - b _08019F1A\n\ - .align 2, 0\n\ + mov r5, r8\n\ + strb r1, [r5]\n\ + ldr r0, [r2]\n\ + ldr r1, _08019E80 @ =0xfff7ffff\n\ + ands r0, r1\n\ + str r0, [r2]\n\ + ldr r0, _08019E84 @ =gUnknown_081D978C\n\ + bl b_push_move_exec\n\ + b _08019F1A\n\ + .align 2, 0\n\ _08019E80: .4byte 0xfff7ffff\n\ _08019E84: .4byte gUnknown_081D978C\n\ _08019E88:\n\ - ldr r0, _08019EDC @ =BattleScript_TraceActivates\n\ - bl b_push_move_exec\n\ - ldr r1, _08019EE0 @ =gStatuses3\n\ - ldr r2, [sp, 0x18]\n\ - adds r1, r2, r1\n\ - ldr r0, [r1]\n\ - ldr r2, _08019EE4 @ =0xffefffff\n\ - ands r0, r2\n\ - str r0, [r1]\n\ - ldr r0, _08019EE8 @ =0x02000000\n\ - ldr r3, _08019EEC @ =0x00016003\n\ - adds r0, r3\n\ - strb r4, [r0]\n\ - ldr r1, _08019EF0 @ =gBattleTextBuff1\n\ - movs r4, 0xFD\n\ - strb r4, [r1]\n\ - movs r0, 0x4\n\ - strb r0, [r1, 0x1]\n\ - ldr r2, _08019EF4 @ =gActiveBank\n\ - ldrb r0, [r2]\n\ - strb r0, [r1, 0x2]\n\ - ldr r3, _08019EF8 @ =gBattlePartyID\n\ - ldrb r0, [r2]\n\ - lsls r0, 1\n\ - adds r0, r3\n\ - ldrh r0, [r0]\n\ - strb r0, [r1, 0x3]\n\ - movs r0, 0xFF\n\ - strb r0, [r1, 0x4]\n\ - ldr r1, _08019EFC @ =gBattleTextBuff2\n\ - strb r4, [r1]\n\ - movs r0, 0x9\n\ - strb r0, [r1, 0x1]\n\ - ldr r0, _08019F00 @ =gLastUsedAbility\n\ - ldrb r0, [r0]\n\ - strb r0, [r1, 0x2]\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - strb r0, [r1, 0x3]\n\ - b _08019F76\n\ - .align 2, 0\n\ + ldr r0, _08019EDC @ =BattleScript_TraceActivates\n\ + bl b_push_move_exec\n\ + ldr r1, _08019EE0 @ =gStatuses3\n\ + ldr r2, [sp, 0x18]\n\ + adds r1, r2, r1\n\ + ldr r0, [r1]\n\ + ldr r2, _08019EE4 @ =0xffefffff\n\ + ands r0, r2\n\ + str r0, [r1]\n\ + ldr r0, _08019EE8 @ =0x02000000\n\ + ldr r3, _08019EEC @ =0x00016003\n\ + adds r0, r3\n\ + strb r4, [r0]\n\ + ldr r1, _08019EF0 @ =gBattleTextBuff1\n\ + movs r4, 0xFD\n\ + strb r4, [r1]\n\ + movs r0, 0x4\n\ + strb r0, [r1, 0x1]\n\ + ldr r2, _08019EF4 @ =gActiveBank\n\ + ldrb r0, [r2]\n\ + strb r0, [r1, 0x2]\n\ + ldr r3, _08019EF8 @ =gBattlePartyID\n\ + ldrb r0, [r2]\n\ + lsls r0, 1\n\ + adds r0, r3\n\ + ldrh r0, [r0]\n\ + strb r0, [r1, 0x3]\n\ + movs r0, 0xFF\n\ + strb r0, [r1, 0x4]\n\ + ldr r1, _08019EFC @ =gBattleTextBuff2\n\ + strb r4, [r1]\n\ + movs r0, 0x9\n\ + strb r0, [r1, 0x1]\n\ + ldr r0, _08019F00 @ =gLastUsedAbility\n\ + ldrb r0, [r0]\n\ + strb r0, [r1, 0x2]\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + strb r0, [r1, 0x3]\n\ + b _08019F76\n\ + .align 2, 0\n\ _08019EDC: .4byte BattleScript_TraceActivates\n\ _08019EE0: .4byte gStatuses3\n\ _08019EE4: .4byte 0xffefffff\n\ @@ -5525,88 +5525,88 @@ _08019EF8: .4byte gBattlePartyID\n\ _08019EFC: .4byte gBattleTextBuff2\n\ _08019F00: .4byte gLastUsedAbility\n\ _08019F04:\n\ - mov r5, r8\n\ - strb r1, [r5]\n\ - ldr r0, [r2]\n\ - ldr r1, _08019F30 @ =0xfff7ffff\n\ - ands r0, r1\n\ - str r0, [r2]\n\ - bl b_movescr_stack_push_cursor\n\ - ldr r1, _08019F34 @ =gBattlescriptCurrInstr\n\ - ldr r0, _08019F38 @ =gUnknown_081D9795\n\ - str r0, [r1]\n\ + mov r5, r8\n\ + strb r1, [r5]\n\ + ldr r0, [r2]\n\ + ldr r1, _08019F30 @ =0xfff7ffff\n\ + ands r0, r1\n\ + str r0, [r2]\n\ + bl b_movescr_stack_push_cursor\n\ + ldr r1, _08019F34 @ =gBattlescriptCurrInstr\n\ + ldr r0, _08019F38 @ =gUnknown_081D9795\n\ + str r0, [r1]\n\ _08019F1A:\n\ - ldr r0, _08019F3C @ =0x02000000\n\ - ldr r1, _08019F40 @ =0x000160dd\n\ - adds r0, r1\n\ - strb r4, [r0]\n\ + ldr r0, _08019F3C @ =0x02000000\n\ + ldr r1, _08019F40 @ =0x000160dd\n\ + adds r0, r1\n\ + strb r4, [r0]\n\ _08019F22:\n\ - mov r0, r9\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ - b _08019F76\n\ - .align 2, 0\n\ + mov r0, r9\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r9, r0\n\ + b _08019F76\n\ + .align 2, 0\n\ _08019F30: .4byte 0xfff7ffff\n\ _08019F34: .4byte gBattlescriptCurrInstr\n\ _08019F38: .4byte gUnknown_081D9795\n\ _08019F3C: .4byte 0x02000000\n\ _08019F40: .4byte 0x000160dd\n\ _08019F44:\n\ - movs r4, 0\n\ - ldr r0, _08019FA4 @ =gNoOfAllBanks\n\ - ldrb r1, [r0]\n\ - cmp r4, r1\n\ - bge _08019F76\n\ - ldr r0, _08019FA8 @ =gBattleMons\n\ - adds r2, r1, 0\n\ - adds r1, r0, 0\n\ - adds r1, 0x20\n\ - ldr r3, _08019FAC @ =gLastUsedAbility\n\ + movs r4, 0\n\ + ldr r0, _08019FA4 @ =gNoOfAllBanks\n\ + ldrb r1, [r0]\n\ + cmp r4, r1\n\ + bge _08019F76\n\ + ldr r0, _08019FA8 @ =gBattleMons\n\ + adds r2, r1, 0\n\ + adds r1, r0, 0\n\ + adds r1, 0x20\n\ + ldr r3, _08019FAC @ =gLastUsedAbility\n\ _08019F58:\n\ - ldrb r0, [r1]\n\ - cmp r0, r6\n\ - bne _08019F6E\n\ - cmp r4, r10\n\ - beq _08019F6E\n\ - strb r6, [r3]\n\ - mov r0, r9\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ + ldrb r0, [r1]\n\ + cmp r0, r6\n\ + bne _08019F6E\n\ + cmp r4, r10\n\ + beq _08019F6E\n\ + strb r6, [r3]\n\ + mov r0, r9\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r9, r0\n\ _08019F6E:\n\ - adds r1, 0x58\n\ - adds r4, 0x1\n\ - cmp r4, r2\n\ - blt _08019F58\n\ + adds r1, 0x58\n\ + adds r4, 0x1\n\ + cmp r4, r2\n\ + blt _08019F58\n\ _08019F76:\n\ - mov r2, r9\n\ - cmp r2, 0\n\ - beq _08019F92\n\ + mov r2, r9\n\ + cmp r2, 0\n\ + beq _08019F92\n\ _08019F7C:\n\ - ldr r3, [sp, 0x4]\n\ - cmp r3, 0xB\n\ - bhi _08019F92\n\ - ldr r1, _08019FAC @ =gLastUsedAbility\n\ - ldrb r0, [r1]\n\ - cmp r0, 0xFF\n\ - beq _08019F92\n\ - adds r1, r0, 0\n\ - mov r0, r10\n\ - bl RecordAbilityBattle\n\ + ldr r3, [sp, 0x4]\n\ + cmp r3, 0xB\n\ + bhi _08019F92\n\ + ldr r1, _08019FAC @ =gLastUsedAbility\n\ + ldrb r0, [r1]\n\ + cmp r0, 0xFF\n\ + beq _08019F92\n\ + adds r1, r0, 0\n\ + mov r0, r10\n\ + bl RecordAbilityBattle\n\ _08019F92:\n\ - mov r0, r9\n\ - add sp, 0x28\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r1}\n\ - bx r1\n\ - .align 2, 0\n\ + mov r0, r9\n\ + add sp, 0x28\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n\ + .align 2, 0\n\ _08019FA4: .4byte gNoOfAllBanks\n\ _08019FA8: .4byte gBattleMons\n\ _08019FAC: .4byte gLastUsedAbility\n\ diff --git a/src/battle_controller_linkopponent2.c b/src/battle_controller_linkopponent2.c index 2ca7c7970..59030cd6e 100644 --- a/src/battle_controller_linkopponent2.c +++ b/src/battle_controller_linkopponent2.c @@ -174,62 +174,62 @@ typedef void (*BattleBufferCmd) (void); const BattleBufferCmd gLinkOpponentBufferCommands[] = { LinkOpponentHandleGetAttributes, - LinkOpponentHandlecmd1, - LinkOpponentHandleSetAttributes, - LinkOpponentHandlecmd3, - LinkOpponentHandleLoadPokeSprite, - LinkOpponentHandleSendOutPoke, - LinkOpponentHandleReturnPokeToBall, - LinkOpponentHandleTrainerThrow, - LinkOpponentHandleTrainerSlide, - LinkOpponentHandleTrainerSlideBack, - LinkOpponentHandlecmd10, - LinkOpponentHandlecmd11, - LinkOpponentHandlecmd12, - LinkOpponentHandleBallThrow, - LinkOpponentHandlePuase, - LinkOpponentHandleMoveAnimation, - LinkOpponentHandlePrintString, - LinkOpponentHandlePrintStringPlayerOnly, - LinkOpponentHandlecmd18, - LinkOpponentHandlecmd19, - LinkOpponentHandlecmd20, - LinkOpponentHandleOpenBag, - LinkOpponentHandlecmd22, - LinkOpponentHandlecmd23, - LinkOpponentHandleHealthBarUpdate, - LinkOpponentHandleExpBarUpdate, - LinkOpponentHandleStatusIconUpdate, - LinkOpponentHandleStatusAnimation, - LinkOpponentHandleStatusXor, - LinkOpponentHandlecmd29, - LinkOpponentHandleDMATransfer, - LinkOpponentHandlecmd31, - LinkOpponentHandlecmd32, - LinkOpponentHandlecmd33, - LinkOpponentHandlecmd34, - LinkOpponentHandlecmd35, - LinkOpponentHandlecmd36, - LinkOpponentHandlecmd37, - LinkOpponentHandlecmd38, - LinkOpponentHandlecmd39, - LinkOpponentHandlecmd40, - LinkOpponentHandleHitAnimation, - LinkOpponentHandlecmd42, - LinkOpponentHandleEffectivenessSound, - LinkOpponentHandlecmd44, - LinkOpponentHandleFaintingCry, - LinkOpponentHandleIntroSlide, - LinkOpponentHandleTrainerBallThrow, - LinkOpponentHandlecmd48, - LinkOpponentHandlecmd49, - LinkOpponentHandlecmd50, - LinkOpponentHandleSpriteInvisibility, - LinkOpponentHandleBattleAnimation, - LinkOpponentHandleLinkStandbyMsg, - LinkOpponentHandleResetActionMoveSelection, - LinkOpponentHandlecmd55, - LinkOpponentHandlecmd56 + LinkOpponentHandlecmd1, + LinkOpponentHandleSetAttributes, + LinkOpponentHandlecmd3, + LinkOpponentHandleLoadPokeSprite, + LinkOpponentHandleSendOutPoke, + LinkOpponentHandleReturnPokeToBall, + LinkOpponentHandleTrainerThrow, + LinkOpponentHandleTrainerSlide, + LinkOpponentHandleTrainerSlideBack, + LinkOpponentHandlecmd10, + LinkOpponentHandlecmd11, + LinkOpponentHandlecmd12, + LinkOpponentHandleBallThrow, + LinkOpponentHandlePuase, + LinkOpponentHandleMoveAnimation, + LinkOpponentHandlePrintString, + LinkOpponentHandlePrintStringPlayerOnly, + LinkOpponentHandlecmd18, + LinkOpponentHandlecmd19, + LinkOpponentHandlecmd20, + LinkOpponentHandleOpenBag, + LinkOpponentHandlecmd22, + LinkOpponentHandlecmd23, + LinkOpponentHandleHealthBarUpdate, + LinkOpponentHandleExpBarUpdate, + LinkOpponentHandleStatusIconUpdate, + LinkOpponentHandleStatusAnimation, + LinkOpponentHandleStatusXor, + LinkOpponentHandlecmd29, + LinkOpponentHandleDMATransfer, + LinkOpponentHandlecmd31, + LinkOpponentHandlecmd32, + LinkOpponentHandlecmd33, + LinkOpponentHandlecmd34, + LinkOpponentHandlecmd35, + LinkOpponentHandlecmd36, + LinkOpponentHandlecmd37, + LinkOpponentHandlecmd38, + LinkOpponentHandlecmd39, + LinkOpponentHandlecmd40, + LinkOpponentHandleHitAnimation, + LinkOpponentHandlecmd42, + LinkOpponentHandleEffectivenessSound, + LinkOpponentHandlecmd44, + LinkOpponentHandleFaintingCry, + LinkOpponentHandleIntroSlide, + LinkOpponentHandleTrainerBallThrow, + LinkOpponentHandlecmd48, + LinkOpponentHandlecmd49, + LinkOpponentHandlecmd50, + LinkOpponentHandleSpriteInvisibility, + LinkOpponentHandleBattleAnimation, + LinkOpponentHandleLinkStandbyMsg, + LinkOpponentHandleResetActionMoveSelection, + LinkOpponentHandlecmd55, + LinkOpponentHandlecmd56 }; // code diff --git a/src/battle_controller_linkpartner.c b/src/battle_controller_linkpartner.c index 7fd5261aa..95022eaaf 100644 --- a/src/battle_controller_linkpartner.c +++ b/src/battle_controller_linkpartner.c @@ -185,63 +185,63 @@ void LinkPartnerHandlecmd56(void); typedef void (*BattleBufferCmd) (void); static const BattleBufferCmd gLinkPartnerBufferCommands[] = { - LinkPartnerHandleGetAttributes, - LinkPartnerHandlecmd1, - LinkPartnerHandleSetAttributes, - LinkPartnerHandlecmd3, - LinkPartnerHandleLoadPokeSprite, - LinkPartnerHandleSendOutPoke, - LinkPartnerHandleReturnPokeToBall, - LinkPartnerHandleTrainerThrow, - LinkPartnerHandleTrainerSlide, - LinkPartnerHandleTrainerSlideBack, - LinkPartnerHandlecmd10, - LinkPartnerHandlecmd11, - LinkPartnerHandlecmd12, - LinkPartnerHandleBallThrow, - LinkPartnerHandlePuase, - LinkPartnerHandleMoveAnimation, - LinkPartnerHandlePrintString, - LinkPartnerHandlePrintStringPlayerOnly, - LinkPartnerHandlecmd18, - LinkPartnerHandlecmd19, - LinkPartnerHandlecmd20, - LinkPartnerHandleOpenBag, - LinkPartnerHandlecmd22, - LinkPartnerHandlecmd23, - LinkPartnerHandleHealthBarUpdate, - LinkPartnerHandleExpBarUpdate, - LinkPartnerHandleStatusIconUpdate, - LinkPartnerHandleStatusAnimation, - LinkPartnerHandleStatusXor, - LinkPartnerHandlecmd29, - LinkPartnerHandleDMATransfer, - LinkPartnerHandlecmd31, - LinkPartnerHandlecmd32, - LinkPartnerHandlecmd33, - LinkPartnerHandlecmd34, - LinkPartnerHandlecmd35, - LinkPartnerHandlecmd36, - LinkPartnerHandlecmd37, - LinkPartnerHandlecmd38, - LinkPartnerHandlecmd39, - LinkPartnerHandlecmd40, - LinkPartnerHandleHitAnimation, - LinkPartnerHandlecmd42, - LinkPartnerHandleEffectivenessSound, - LinkPartnerHandlecmd44, - LinkPartnerHandleFaintingCry, - LinkPartnerHandleIntroSlide, - LinkPartnerHandleTrainerBallThrow, - LinkPartnerHandlecmd48, - LinkPartnerHandlecmd49, - LinkPartnerHandlecmd50, - LinkPartnerHandleSpriteInvisibility, - LinkPartnerHandleBattleAnimation, - LinkPartnerHandleLinkStandbyMsg, - LinkPartnerHandleResetActionMoveSelection, - LinkPartnerHandlecmd55, - LinkPartnerHandlecmd56, + LinkPartnerHandleGetAttributes, + LinkPartnerHandlecmd1, + LinkPartnerHandleSetAttributes, + LinkPartnerHandlecmd3, + LinkPartnerHandleLoadPokeSprite, + LinkPartnerHandleSendOutPoke, + LinkPartnerHandleReturnPokeToBall, + LinkPartnerHandleTrainerThrow, + LinkPartnerHandleTrainerSlide, + LinkPartnerHandleTrainerSlideBack, + LinkPartnerHandlecmd10, + LinkPartnerHandlecmd11, + LinkPartnerHandlecmd12, + LinkPartnerHandleBallThrow, + LinkPartnerHandlePuase, + LinkPartnerHandleMoveAnimation, + LinkPartnerHandlePrintString, + LinkPartnerHandlePrintStringPlayerOnly, + LinkPartnerHandlecmd18, + LinkPartnerHandlecmd19, + LinkPartnerHandlecmd20, + LinkPartnerHandleOpenBag, + LinkPartnerHandlecmd22, + LinkPartnerHandlecmd23, + LinkPartnerHandleHealthBarUpdate, + LinkPartnerHandleExpBarUpdate, + LinkPartnerHandleStatusIconUpdate, + LinkPartnerHandleStatusAnimation, + LinkPartnerHandleStatusXor, + LinkPartnerHandlecmd29, + LinkPartnerHandleDMATransfer, + LinkPartnerHandlecmd31, + LinkPartnerHandlecmd32, + LinkPartnerHandlecmd33, + LinkPartnerHandlecmd34, + LinkPartnerHandlecmd35, + LinkPartnerHandlecmd36, + LinkPartnerHandlecmd37, + LinkPartnerHandlecmd38, + LinkPartnerHandlecmd39, + LinkPartnerHandlecmd40, + LinkPartnerHandleHitAnimation, + LinkPartnerHandlecmd42, + LinkPartnerHandleEffectivenessSound, + LinkPartnerHandlecmd44, + LinkPartnerHandleFaintingCry, + LinkPartnerHandleIntroSlide, + LinkPartnerHandleTrainerBallThrow, + LinkPartnerHandlecmd48, + LinkPartnerHandlecmd49, + LinkPartnerHandlecmd50, + LinkPartnerHandleSpriteInvisibility, + LinkPartnerHandleBattleAnimation, + LinkPartnerHandleLinkStandbyMsg, + LinkPartnerHandleResetActionMoveSelection, + LinkPartnerHandlecmd55, + LinkPartnerHandlecmd56, }; // code starts here diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index abfa3fef2..dd8c62cce 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -193,63 +193,63 @@ void OpponentHandlecmd56(void); typedef void (*BattleBufferCmd) (void); static const BattleBufferCmd gOpponentBufferCommands[] = { - OpponentHandleGetAttributes, - OpponentHandlecmd1, - OpponentHandleSetAttributes, - OpponentHandlecmd3, - OpponentHandleLoadPokeSprite, - OpponentHandleSendOutPoke, - OpponentHandleReturnPokeToBall, - OpponentHandleTrainerThrow, - OpponentHandleTrainerSlide, - OpponentHandleTrainerSlideBack, - OpponentHandlecmd10, - OpponentHandlecmd11, - OpponentHandlecmd12, - OpponentHandleBallThrow, - OpponentHandlePuase, - OpponentHandleMoveAnimation, - OpponentHandlePrintString, - OpponentHandlePrintStringPlayerOnly, - OpponentHandlecmd18, - OpponentHandlecmd19, - OpponentHandlecmd20, - OpponentHandleOpenBag, - OpponentHandlecmd22, - OpponentHandlecmd23, - OpponentHandleHealthBarUpdate, - OpponentHandleExpBarUpdate, - OpponentHandleStatusIconUpdate, - OpponentHandleStatusAnimation, - OpponentHandleStatusXor, - OpponentHandlecmd29, - OpponentHandleDMATransfer, - OpponentHandlecmd31, - OpponentHandlecmd32, - OpponentHandlecmd33, - OpponentHandlecmd34, - OpponentHandlecmd35, - OpponentHandlecmd36, - OpponentHandlecmd37, - OpponentHandlecmd38, - OpponentHandlecmd39, - OpponentHandlecmd40, - OpponentHandleHitAnimation, - OpponentHandlecmd42, - OpponentHandleEffectivenessSound, - OpponentHandlecmd44, - OpponentHandleFaintingCry, - OpponentHandleIntroSlide, - OpponentHandleTrainerBallThrow, - OpponentHandlecmd48, - OpponentHandlecmd49, - OpponentHandlecmd50, - OpponentHandleSpriteInvisibility, - OpponentHandleBattleAnimation, - OpponentHandleLinkStandbyMsg, - OpponentHandleResetActionMoveSelection, - OpponentHandlecmd55, - OpponentHandlecmd56, + OpponentHandleGetAttributes, + OpponentHandlecmd1, + OpponentHandleSetAttributes, + OpponentHandlecmd3, + OpponentHandleLoadPokeSprite, + OpponentHandleSendOutPoke, + OpponentHandleReturnPokeToBall, + OpponentHandleTrainerThrow, + OpponentHandleTrainerSlide, + OpponentHandleTrainerSlideBack, + OpponentHandlecmd10, + OpponentHandlecmd11, + OpponentHandlecmd12, + OpponentHandleBallThrow, + OpponentHandlePuase, + OpponentHandleMoveAnimation, + OpponentHandlePrintString, + OpponentHandlePrintStringPlayerOnly, + OpponentHandlecmd18, + OpponentHandlecmd19, + OpponentHandlecmd20, + OpponentHandleOpenBag, + OpponentHandlecmd22, + OpponentHandlecmd23, + OpponentHandleHealthBarUpdate, + OpponentHandleExpBarUpdate, + OpponentHandleStatusIconUpdate, + OpponentHandleStatusAnimation, + OpponentHandleStatusXor, + OpponentHandlecmd29, + OpponentHandleDMATransfer, + OpponentHandlecmd31, + OpponentHandlecmd32, + OpponentHandlecmd33, + OpponentHandlecmd34, + OpponentHandlecmd35, + OpponentHandlecmd36, + OpponentHandlecmd37, + OpponentHandlecmd38, + OpponentHandlecmd39, + OpponentHandlecmd40, + OpponentHandleHitAnimation, + OpponentHandlecmd42, + OpponentHandleEffectivenessSound, + OpponentHandlecmd44, + OpponentHandleFaintingCry, + OpponentHandleIntroSlide, + OpponentHandleTrainerBallThrow, + OpponentHandlecmd48, + OpponentHandlecmd49, + OpponentHandlecmd50, + OpponentHandleSpriteInvisibility, + OpponentHandleBattleAnimation, + OpponentHandleLinkStandbyMsg, + OpponentHandleResetActionMoveSelection, + OpponentHandlecmd55, + OpponentHandlecmd56, }; static const u8 sUnknownBytes[] = {0xB0, 0xB0, 0xC8, 0x98, 0x28, 0x28, 0x28, 0x20}; diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c index 46e34589a..e84969b4f 100644 --- a/src/battle_controller_safari.c +++ b/src/battle_controller_safari.c @@ -86,63 +86,63 @@ void SafariHandlecmd56(void); typedef void (*BattleBufferCmd) (void); const BattleBufferCmd gSafariBufferCommands[] = { - SafariHandleGetAttributes, - SafariHandlecmd1, - SafariHandleSetAttributes, - SafariHandlecmd3, - SafariHandleLoadPokeSprite, - SafariHandleSendOutPoke, - SafariHandleReturnPokeToBall, - SafariHandleTrainerThrow, - SafariHandleTrainerSlide, - SafariHandleTrainerSlideBack, - SafariHandlecmd10, - SafariHandlecmd11, - SafariHandlecmd12, - SafariHandleBallThrow, - SafariHandlePuase, - SafariHandleMoveAnimation, - SafariHandlePrintString, - SafariHandlePrintStringPlayerOnly, - SafariHandlecmd18, - SafariHandlecmd19, - SafariHandlecmd20, - SafariHandleOpenBag, - SafariHandlecmd22, - SafariHandlecmd23, - SafariHandleHealthBarUpdate, - SafariHandleExpBarUpdate, - SafariHandleStatusIconUpdate, - SafariHandleStatusAnimation, - SafariHandleStatusXor, - SafariHandlecmd29, - SafariHandleDMATransfer, - SafariHandlecmd31, - SafariHandlecmd32, - SafariHandlecmd33, - SafariHandlecmd34, - SafariHandlecmd35, - SafariHandlecmd36, - SafariHandlecmd37, - SafariHandlecmd38, - SafariHandlecmd39, - SafariHandlecmd40, - SafariHandleHitAnimation, - SafariHandlecmd42, - SafariHandleEffectivenessSound, - SafariHandlecmd44, - SafariHandleFaintingCry, - SafariHandleIntroSlide, - SafariHandleTrainerBallThrow, - SafariHandlecmd48, - SafariHandlecmd49, - SafariHandlecmd50, - SafariHandleSpriteInvisibility, - SafariHandleBattleAnimation, - SafariHandleLinkStandbyMsg, - SafariHandleResetActionMoveSelection, - SafariHandlecmd55, - SafariHandlecmd56, + SafariHandleGetAttributes, + SafariHandlecmd1, + SafariHandleSetAttributes, + SafariHandlecmd3, + SafariHandleLoadPokeSprite, + SafariHandleSendOutPoke, + SafariHandleReturnPokeToBall, + SafariHandleTrainerThrow, + SafariHandleTrainerSlide, + SafariHandleTrainerSlideBack, + SafariHandlecmd10, + SafariHandlecmd11, + SafariHandlecmd12, + SafariHandleBallThrow, + SafariHandlePuase, + SafariHandleMoveAnimation, + SafariHandlePrintString, + SafariHandlePrintStringPlayerOnly, + SafariHandlecmd18, + SafariHandlecmd19, + SafariHandlecmd20, + SafariHandleOpenBag, + SafariHandlecmd22, + SafariHandlecmd23, + SafariHandleHealthBarUpdate, + SafariHandleExpBarUpdate, + SafariHandleStatusIconUpdate, + SafariHandleStatusAnimation, + SafariHandleStatusXor, + SafariHandlecmd29, + SafariHandleDMATransfer, + SafariHandlecmd31, + SafariHandlecmd32, + SafariHandlecmd33, + SafariHandlecmd34, + SafariHandlecmd35, + SafariHandlecmd36, + SafariHandlecmd37, + SafariHandlecmd38, + SafariHandlecmd39, + SafariHandlecmd40, + SafariHandleHitAnimation, + SafariHandlecmd42, + SafariHandleEffectivenessSound, + SafariHandlecmd44, + SafariHandleFaintingCry, + SafariHandleIntroSlide, + SafariHandleTrainerBallThrow, + SafariHandlecmd48, + SafariHandlecmd49, + SafariHandlecmd50, + SafariHandleSpriteInvisibility, + SafariHandleBattleAnimation, + SafariHandleLinkStandbyMsg, + SafariHandleResetActionMoveSelection, + SafariHandlecmd55, + SafariHandlecmd56, }; // code diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c index e4b593df7..f2cf5bbb4 100644 --- a/src/battle_controller_wally.c +++ b/src/battle_controller_wally.c @@ -171,63 +171,63 @@ void WallyHandlecmd56(void); typedef void (*BattleBufferCmd) (void); static const BattleBufferCmd gWallyBufferCommands[] = { - WallyHandleGetAttributes, - WallyHandlecmd1, - WallyHandleSetAttributes, - WallyHandlecmd3, - WallyHandleLoadPokeSprite, - WallyHandleSendOutPoke, - WallyHandleReturnPokeToBall, - WallyHandleTrainerThrow, - WallyHandleTrainerSlide, - WallyHandleTrainerSlideBack, - WallyHandlecmd10, - WallyHandlecmd11, - WallyHandlecmd12, - WallyHandleBallThrow, - WallyHandlePuase, - WallyHandleMoveAnimation, - WallyHandlePrintString, - WallyHandlePrintStringPlayerOnly, - WallyHandlecmd18, - WallyHandlecmd19, - WallyHandlecmd20, - WallyHandleOpenBag, - WallyHandlecmd22, - WallyHandlecmd23, - WallyHandleHealthBarUpdate, - WallyHandleExpBarUpdate, - WallyHandleStatusIconUpdate, - WallyHandleStatusAnimation, - WallyHandleStatusXor, - WallyHandlecmd29, - WallyHandleDMATransfer, - WallyHandlecmd31, - WallyHandlecmd32, - WallyHandlecmd33, - WallyHandlecmd34, - WallyHandlecmd35, - WallyHandlecmd36, - WallyHandlecmd37, - WallyHandlecmd38, - WallyHandlecmd39, - WallyHandlecmd40, - WallyHandleHitAnimation, - WallyHandlecmd42, - WallyHandleEffectivenessSound, - WallyHandlecmd44, - WallyHandleFaintingCry, - WallyHandleIntroSlide, - WallyHandleTrainerBallThrow, - WallyHandlecmd48, - WallyHandlecmd49, - WallyHandlecmd50, - WallyHandleSpriteInvisibility, - WallyHandleBattleAnimation, - WallyHandleLinkStandbyMsg, - WallyHandleResetActionMoveSelection, - WallyHandlecmd55, - WallyHandlecmd56, + WallyHandleGetAttributes, + WallyHandlecmd1, + WallyHandleSetAttributes, + WallyHandlecmd3, + WallyHandleLoadPokeSprite, + WallyHandleSendOutPoke, + WallyHandleReturnPokeToBall, + WallyHandleTrainerThrow, + WallyHandleTrainerSlide, + WallyHandleTrainerSlideBack, + WallyHandlecmd10, + WallyHandlecmd11, + WallyHandlecmd12, + WallyHandleBallThrow, + WallyHandlePuase, + WallyHandleMoveAnimation, + WallyHandlePrintString, + WallyHandlePrintStringPlayerOnly, + WallyHandlecmd18, + WallyHandlecmd19, + WallyHandlecmd20, + WallyHandleOpenBag, + WallyHandlecmd22, + WallyHandlecmd23, + WallyHandleHealthBarUpdate, + WallyHandleExpBarUpdate, + WallyHandleStatusIconUpdate, + WallyHandleStatusAnimation, + WallyHandleStatusXor, + WallyHandlecmd29, + WallyHandleDMATransfer, + WallyHandlecmd31, + WallyHandlecmd32, + WallyHandlecmd33, + WallyHandlecmd34, + WallyHandlecmd35, + WallyHandlecmd36, + WallyHandlecmd37, + WallyHandlecmd38, + WallyHandlecmd39, + WallyHandlecmd40, + WallyHandleHitAnimation, + WallyHandlecmd42, + WallyHandleEffectivenessSound, + WallyHandlecmd44, + WallyHandleFaintingCry, + WallyHandleIntroSlide, + WallyHandleTrainerBallThrow, + WallyHandlecmd48, + WallyHandlecmd49, + WallyHandlecmd50, + WallyHandleSpriteInvisibility, + WallyHandleBattleAnimation, + WallyHandleLinkStandbyMsg, + WallyHandleResetActionMoveSelection, + WallyHandlecmd55, + WallyHandlecmd56, }; // code diff --git a/src/battle_transition.c b/src/battle_transition.c index 395a38df1..1cacb8857 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -253,8 +253,8 @@ static const TransitionState sPhase2_Transition_BigPokeball_Funcs[] = static const TransitionState sPhase2_Transition_PokeballsTrail_Funcs[] = { Phase2_Transition_PokeballsTrail_Func1, - Phase2_Transition_PokeballsTrail_Func2, - Phase2_Transition_PokeballsTrail_Func3 + Phase2_Transition_PokeballsTrail_Func2, + Phase2_Transition_PokeballsTrail_Func3 }; static const s16 sUnknown_083FD7E4[2] = {-16, 256}; @@ -264,25 +264,25 @@ static const s16 sUnknown_083FD7F2[2] = {8, -8}; static const TransitionState sPhase2_Transition_Clockwise_BlackFade_Funcs[] = { Phase2_Transition_Clockwise_BlackFade_Func1, - Phase2_Transition_Clockwise_BlackFade_Func2, - Phase2_Transition_Clockwise_BlackFade_Func3, - Phase2_Transition_Clockwise_BlackFade_Func4, - Phase2_Transition_Clockwise_BlackFade_Func5, - Phase2_Transition_Clockwise_BlackFade_Func6, - Phase2_Transition_Clockwise_BlackFade_Func7 + Phase2_Transition_Clockwise_BlackFade_Func2, + Phase2_Transition_Clockwise_BlackFade_Func3, + Phase2_Transition_Clockwise_BlackFade_Func4, + Phase2_Transition_Clockwise_BlackFade_Func5, + Phase2_Transition_Clockwise_BlackFade_Func6, + Phase2_Transition_Clockwise_BlackFade_Func7 }; static const TransitionState sPhase2_Transition_Ripple_Funcs[] = { Phase2_Transition_Ripple_Func1, - Phase2_Transition_Ripple_Func2 + Phase2_Transition_Ripple_Func2 }; static const TransitionState sPhase2_Transition_Wave_Funcs[] = { Phase2_Transition_Wave_Func1, - Phase2_Transition_Wave_Func2, - Phase2_Transition_Wave_Func3 + Phase2_Transition_Wave_Func2, + Phase2_Transition_Wave_Func3 }; static const TransitionState sPhase2_Mugshot_Transition_Funcs[] = @@ -320,12 +320,12 @@ static const s16 sMugshotsOpponentCoords[MUGSHOTS_NO][2] = static const TransitionSpriteCallback sUnknown_083FD880[] = { sub_811C934, - sub_811C938, - sub_811C984, - sub_811C9B8, - sub_811C934, - sub_811C9E4, - sub_811C934 + sub_811C938, + sub_811C984, + sub_811C9B8, + sub_811C934, + sub_811C9E4, + sub_811C934 }; static const s16 sUnknown_083FD89C[2] = {12, -12}; @@ -334,17 +334,17 @@ static const s16 sUnknown_083FD8A0[2] = {-1, 1}; static const TransitionState sPhase2_Transition_Slice_Funcs[] = { Phase2_Transition_Slice_Func1, - Phase2_Transition_Slice_Func2, - Phase2_Transition_Slice_Func3 + Phase2_Transition_Slice_Func2, + Phase2_Transition_Slice_Func3 }; static const TransitionState sPhase2_Transition_WhiteFade_Funcs[] = { Phase2_Transition_WhiteFade_Func1, - Phase2_Transition_WhiteFade_Func2, - Phase2_Transition_WhiteFade_Func3, - Phase2_Transition_WhiteFade_Func4, - Phase2_Transition_WhiteFade_Func5 + Phase2_Transition_WhiteFade_Func2, + Phase2_Transition_WhiteFade_Func3, + Phase2_Transition_WhiteFade_Func4, + Phase2_Transition_WhiteFade_Func5 }; static const s16 sUnknown_083FD8C4[8] = {0, 20, 15, 40, 10, 25, 35, 5}; @@ -352,17 +352,17 @@ static const s16 sUnknown_083FD8C4[8] = {0, 20, 15, 40, 10, 25, 35, 5}; static const TransitionState sPhase2_Transition_GridSquares_Funcs[] = { Phase2_Transition_GridSquares_Func1, - Phase2_Transition_GridSquares_Func2, - Phase2_Transition_GridSquares_Func3 + Phase2_Transition_GridSquares_Func2, + Phase2_Transition_GridSquares_Func3 }; static const TransitionState sPhase2_Transition_Shards_Funcs[] = { Phase2_Transition_Shards_Func1, - Phase2_Transition_Shards_Func2, - Phase2_Transition_Shards_Func3, - Phase2_Transition_Shards_Func4, - Phase2_Transition_Shards_Func5 + Phase2_Transition_Shards_Func2, + Phase2_Transition_Shards_Func3, + Phase2_Transition_Shards_Func4, + Phase2_Transition_Shards_Func5 }; static const s16 sUnknown_083FD8F4[][5] = @@ -507,10 +507,10 @@ static const u16 sMugshotPal_May[] = INCBIN_U16("graphics/battle_transitions/may static const u16 * const sOpponentMugshotsPals[MUGSHOTS_NO] = { sMugshotPal_Sydney, - sMugshotPal_Phoebe, - sMugshotPal_Glacia, - sMugshotPal_Drake, - sMugshotPal_Steven + sMugshotPal_Phoebe, + sMugshotPal_Glacia, + sMugshotPal_Drake, + sMugshotPal_Steven }; static const u16 * const sPlayerMugshotsPals[2] = diff --git a/src/berry_blender.c b/src/berry_blender.c index f54c6271d..029d352df 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -2156,223 +2156,223 @@ __attribute__((naked)) static void Blender_CalculatePokeblock(struct BlenderBerry* berries, struct Pokeblock* pokeblock, u8 a2, u8* flavours, u16 a4) { asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x10\n\ - str r0, [sp]\n\ - mov r8, r1\n\ - str r3, [sp, 0x4]\n\ - ldr r0, [sp, 0x30]\n\ - lsls r2, 24\n\ - lsrs r2, 24\n\ - mov r9, r2\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - str r0, [sp, 0x8]\n\ - ldr r7, _080505DC @ =gUnknown_03000510\n\ - adds r2, r7, 0\n\ - movs r1, 0\n\ - adds r0, r7, 0\n\ - adds r0, 0xA\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x10\n\ + str r0, [sp]\n\ + mov r8, r1\n\ + str r3, [sp, 0x4]\n\ + ldr r0, [sp, 0x30]\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + mov r9, r2\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + str r0, [sp, 0x8]\n\ + ldr r7, _080505DC @ =gUnknown_03000510\n\ + adds r2, r7, 0\n\ + movs r1, 0\n\ + adds r0, r7, 0\n\ + adds r0, 0xA\n\ _0805054A:\n\ - strh r1, [r0]\n\ - subs r0, 0x2\n\ - cmp r0, r2\n\ - bge _0805054A\n\ - movs r6, 0\n\ - cmp r6, r9\n\ - bge _08050580\n\ - ldr r0, _080505DC @ =gUnknown_03000510\n\ - mov r12, r0\n\ - ldr r5, [sp]\n\ - adds r5, 0x9\n\ + strh r1, [r0]\n\ + subs r0, 0x2\n\ + cmp r0, r2\n\ + bge _0805054A\n\ + movs r6, 0\n\ + cmp r6, r9\n\ + bge _08050580\n\ + ldr r0, _080505DC @ =gUnknown_03000510\n\ + mov r12, r0\n\ + ldr r5, [sp]\n\ + adds r5, 0x9\n\ _08050560:\n\ - movs r3, 0\n\ - adds r4, r5, 0\n\ - mov r2, r12\n\ + movs r3, 0\n\ + adds r4, r5, 0\n\ + mov r2, r12\n\ _08050566:\n\ - adds r1, r4, r3\n\ - ldrh r0, [r2]\n\ - ldrb r1, [r1]\n\ - adds r0, r1\n\ - strh r0, [r2]\n\ - adds r2, 0x2\n\ - adds r3, 0x1\n\ - cmp r3, 0x5\n\ - ble _08050566\n\ - adds r5, 0x10\n\ - adds r6, 0x1\n\ - cmp r6, r9\n\ - blt _08050560\n\ + adds r1, r4, r3\n\ + ldrh r0, [r2]\n\ + ldrb r1, [r1]\n\ + adds r0, r1\n\ + strh r0, [r2]\n\ + adds r2, 0x2\n\ + adds r3, 0x1\n\ + cmp r3, 0x5\n\ + ble _08050566\n\ + adds r5, 0x10\n\ + adds r6, 0x1\n\ + cmp r6, r9\n\ + blt _08050560\n\ _08050580:\n\ - movs r1, 0\n\ - ldrsh r3, [r7, r1]\n\ - ldrh r0, [r7]\n\ - ldrh r1, [r7, 0x2]\n\ - subs r0, r1\n\ - strh r0, [r7]\n\ - ldrh r0, [r7, 0x4]\n\ - subs r1, r0\n\ - strh r1, [r7, 0x2]\n\ - ldrh r1, [r7, 0x6]\n\ - subs r0, r1\n\ - strh r0, [r7, 0x4]\n\ - ldrh r0, [r7, 0x8]\n\ - subs r1, r0\n\ - strh r1, [r7, 0x6]\n\ - subs r0, r3\n\ - strh r0, [r7, 0x8]\n\ - movs r3, 0\n\ - movs r2, 0\n\ - adds r1, r7, 0\n\ - movs r6, 0x4\n\ + movs r1, 0\n\ + ldrsh r3, [r7, r1]\n\ + ldrh r0, [r7]\n\ + ldrh r1, [r7, 0x2]\n\ + subs r0, r1\n\ + strh r0, [r7]\n\ + ldrh r0, [r7, 0x4]\n\ + subs r1, r0\n\ + strh r1, [r7, 0x2]\n\ + ldrh r1, [r7, 0x6]\n\ + subs r0, r1\n\ + strh r0, [r7, 0x4]\n\ + ldrh r0, [r7, 0x8]\n\ + subs r1, r0\n\ + strh r1, [r7, 0x6]\n\ + subs r0, r3\n\ + strh r0, [r7, 0x8]\n\ + movs r3, 0\n\ + movs r2, 0\n\ + adds r1, r7, 0\n\ + movs r6, 0x4\n\ _080505AA:\n\ - movs r4, 0\n\ - ldrsh r0, [r1, r4]\n\ - cmp r0, 0\n\ - bge _080505B6\n\ - strh r2, [r1]\n\ - adds r3, 0x1\n\ + movs r4, 0\n\ + ldrsh r0, [r1, r4]\n\ + cmp r0, 0\n\ + bge _080505B6\n\ + strh r2, [r1]\n\ + adds r3, 0x1\n\ _080505B6:\n\ - adds r1, 0x2\n\ - subs r6, 0x1\n\ - cmp r6, 0\n\ - bge _080505AA\n\ - lsls r0, r3, 24\n\ - lsrs r0, 24\n\ - mov r10, r0\n\ - movs r4, 0\n\ - ldr r1, _080505DC @ =gUnknown_03000510\n\ - movs r6, 0x4\n\ + adds r1, 0x2\n\ + subs r6, 0x1\n\ + cmp r6, 0\n\ + bge _080505AA\n\ + lsls r0, r3, 24\n\ + lsrs r0, 24\n\ + mov r10, r0\n\ + movs r4, 0\n\ + ldr r1, _080505DC @ =gUnknown_03000510\n\ + movs r6, 0x4\n\ _080505CA:\n\ - ldrh r2, [r1]\n\ - movs r5, 0\n\ - ldrsh r0, [r1, r5]\n\ - cmp r0, 0\n\ - ble _080505E4\n\ - cmp r0, r3\n\ - bge _080505E0\n\ - strh r4, [r1]\n\ - b _080505E4\n\ - .align 2, 0\n\ + ldrh r2, [r1]\n\ + movs r5, 0\n\ + ldrsh r0, [r1, r5]\n\ + cmp r0, 0\n\ + ble _080505E4\n\ + cmp r0, r3\n\ + bge _080505E0\n\ + strh r4, [r1]\n\ + b _080505E4\n\ + .align 2, 0\n\ _080505DC: .4byte gUnknown_03000510\n\ _080505E0:\n\ - subs r0, r2, r3\n\ - strh r0, [r1]\n\ + subs r0, r2, r3\n\ + strh r0, [r1]\n\ _080505E4:\n\ - adds r1, 0x2\n\ - subs r6, 0x1\n\ - cmp r6, 0\n\ - bge _080505CA\n\ - ldr r1, _080506C4 @ =gUnknown_03000510\n\ - ldr r2, _080506C8 @ =gUnknown_03000530\n\ - movs r6, 0x4\n\ + adds r1, 0x2\n\ + subs r6, 0x1\n\ + cmp r6, 0\n\ + bge _080505CA\n\ + ldr r1, _080506C4 @ =gUnknown_03000510\n\ + ldr r2, _080506C8 @ =gUnknown_03000530\n\ + movs r6, 0x4\n\ _080505F2:\n\ - movs r3, 0\n\ - ldrsh r0, [r1, r3]\n\ - stm r2!, {r0}\n\ - adds r1, 0x2\n\ - subs r6, 0x1\n\ - cmp r6, 0\n\ - bge _080505F2\n\ - ldr r1, _080506CC @ =0x0000014d\n\ - ldr r0, [sp, 0x8]\n\ - bl __udivsi3\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - adds r3, r0, 0\n\ - adds r3, 0x64\n\ - ldr r4, _080506D0 @ =gUnknown_0300055C\n\ - str r3, [r4]\n\ - movs r6, 0x4\n\ + movs r3, 0\n\ + ldrsh r0, [r1, r3]\n\ + stm r2!, {r0}\n\ + adds r1, 0x2\n\ + subs r6, 0x1\n\ + cmp r6, 0\n\ + bge _080505F2\n\ + ldr r1, _080506CC @ =0x0000014d\n\ + ldr r0, [sp, 0x8]\n\ + bl __udivsi3\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + adds r3, r0, 0\n\ + adds r3, 0x64\n\ + ldr r4, _080506D0 @ =gUnknown_0300055C\n\ + str r3, [r4]\n\ + movs r6, 0x4\n\ _08050616:\n\ - movs r0, 0\n\ - ldrsh r5, [r7, r0]\n\ - adds r0, r5, 0\n\ - muls r0, r3\n\ - movs r1, 0xA\n\ - str r3, [sp, 0xC]\n\ - bl __divsi3\n\ - adds r5, r0, 0\n\ - movs r1, 0xA\n\ - bl __modsi3\n\ - adds r4, r0, 0\n\ - adds r0, r5, 0\n\ - movs r1, 0xA\n\ - bl __divsi3\n\ - adds r5, r0, 0\n\ - ldr r3, [sp, 0xC]\n\ - cmp r4, 0x4\n\ - ble _08050642\n\ - adds r5, 0x1\n\ + movs r0, 0\n\ + ldrsh r5, [r7, r0]\n\ + adds r0, r5, 0\n\ + muls r0, r3\n\ + movs r1, 0xA\n\ + str r3, [sp, 0xC]\n\ + bl __divsi3\n\ + adds r5, r0, 0\n\ + movs r1, 0xA\n\ + bl __modsi3\n\ + adds r4, r0, 0\n\ + adds r0, r5, 0\n\ + movs r1, 0xA\n\ + bl __divsi3\n\ + adds r5, r0, 0\n\ + ldr r3, [sp, 0xC]\n\ + cmp r4, 0x4\n\ + ble _08050642\n\ + adds r5, 0x1\n\ _08050642:\n\ - strh r5, [r7]\n\ - adds r7, 0x2\n\ - subs r6, 0x1\n\ - cmp r6, 0\n\ - bge _08050616\n\ - ldr r1, _080506C4 @ =gUnknown_03000510\n\ - ldr r2, _080506D4 @ =gUnknown_03000548\n\ - movs r6, 0x4\n\ + strh r5, [r7]\n\ + adds r7, 0x2\n\ + subs r6, 0x1\n\ + cmp r6, 0\n\ + bge _08050616\n\ + ldr r1, _080506C4 @ =gUnknown_03000510\n\ + ldr r2, _080506D4 @ =gUnknown_03000548\n\ + movs r6, 0x4\n\ _08050652:\n\ - movs r3, 0\n\ - ldrsh r0, [r1, r3]\n\ - stm r2!, {r0}\n\ - adds r1, 0x2\n\ - subs r6, 0x1\n\ - cmp r6, 0\n\ - bge _08050652\n\ - ldr r4, _080506C4 @ =gUnknown_03000510\n\ - ldr r0, [sp]\n\ - adds r1, r4, 0\n\ - mov r2, r9\n\ - mov r3, r10\n\ - bl Blender_GetPokeblockColor\n\ - mov r5, r8\n\ - strb r0, [r5]\n\ - movs r1, 0xA\n\ - ldrsh r0, [r4, r1]\n\ - mov r1, r9\n\ - bl __divsi3\n\ - mov r3, r9\n\ - subs r0, r3\n\ - strh r0, [r4, 0xA]\n\ - lsls r0, 16\n\ - cmp r0, 0\n\ - bge _0805068C\n\ - movs r0, 0\n\ - strh r0, [r4, 0xA]\n\ + movs r3, 0\n\ + ldrsh r0, [r1, r3]\n\ + stm r2!, {r0}\n\ + adds r1, 0x2\n\ + subs r6, 0x1\n\ + cmp r6, 0\n\ + bge _08050652\n\ + ldr r4, _080506C4 @ =gUnknown_03000510\n\ + ldr r0, [sp]\n\ + adds r1, r4, 0\n\ + mov r2, r9\n\ + mov r3, r10\n\ + bl Blender_GetPokeblockColor\n\ + mov r5, r8\n\ + strb r0, [r5]\n\ + movs r1, 0xA\n\ + ldrsh r0, [r4, r1]\n\ + mov r1, r9\n\ + bl __divsi3\n\ + mov r3, r9\n\ + subs r0, r3\n\ + strh r0, [r4, 0xA]\n\ + lsls r0, 16\n\ + cmp r0, 0\n\ + bge _0805068C\n\ + movs r0, 0\n\ + strh r0, [r4, 0xA]\n\ _0805068C:\n\ - mov r5, r8\n\ - ldrb r0, [r5]\n\ - cmp r0, 0xC\n\ - bne _080506E6\n\ - bl Random\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - movs r1, 0xA\n\ - bl __umodsi3\n\ - lsls r0, 16\n\ - lsrs r3, r0, 16\n\ - movs r6, 0\n\ - ldr r0, _080506D8 @ =gUnknown_082165DF\n\ - adds r0, r3, r0\n\ - ldrb r0, [r0]\n\ - adds r1, r4, 0\n\ - movs r4, 0x1\n\ - movs r3, 0x2\n\ + mov r5, r8\n\ + ldrb r0, [r5]\n\ + cmp r0, 0xC\n\ + bne _080506E6\n\ + bl Random\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0xA\n\ + bl __umodsi3\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + movs r6, 0\n\ + ldr r0, _080506D8 @ =gUnknown_082165DF\n\ + adds r0, r3, r0\n\ + ldrb r0, [r0]\n\ + adds r1, r4, 0\n\ + movs r4, 0x1\n\ + movs r3, 0x2\n\ _080506B4:\n\ - adds r2, r0, 0\n\ - asrs r2, r6\n\ - ands r2, r4\n\ - cmp r2, 0\n\ - beq _080506DC\n\ - strh r3, [r1]\n\ - b _080506DE\n\ - .align 2, 0\n\ + adds r2, r0, 0\n\ + asrs r2, r6\n\ + ands r2, r4\n\ + cmp r2, 0\n\ + beq _080506DC\n\ + strh r3, [r1]\n\ + b _080506DE\n\ + .align 2, 0\n\ _080506C4: .4byte gUnknown_03000510\n\ _080506C8: .4byte gUnknown_03000530\n\ _080506CC: .4byte 0x0000014d\n\ @@ -2380,61 +2380,61 @@ _080506D0: .4byte gUnknown_0300055C\n\ _080506D4: .4byte gUnknown_03000548\n\ _080506D8: .4byte gUnknown_082165DF\n\ _080506DC:\n\ - strh r2, [r1]\n\ + strh r2, [r1]\n\ _080506DE:\n\ - adds r1, 0x2\n\ - adds r6, 0x1\n\ - cmp r6, 0x4\n\ - ble _080506B4\n\ + adds r1, 0x2\n\ + adds r6, 0x1\n\ + cmp r6, 0x4\n\ + ble _080506B4\n\ _080506E6:\n\ - ldr r7, _08050740 @ =gUnknown_03000510\n\ - movs r2, 0xFF\n\ - adds r1, r7, 0\n\ - movs r6, 0x5\n\ + ldr r7, _08050740 @ =gUnknown_03000510\n\ + movs r2, 0xFF\n\ + adds r1, r7, 0\n\ + movs r6, 0x5\n\ _080506EE:\n\ - movs r3, 0\n\ - ldrsh r0, [r1, r3]\n\ - cmp r0, 0xFF\n\ - ble _080506F8\n\ - strh r2, [r1]\n\ + movs r3, 0\n\ + ldrsh r0, [r1, r3]\n\ + cmp r0, 0xFF\n\ + ble _080506F8\n\ + strh r2, [r1]\n\ _080506F8:\n\ - adds r1, 0x2\n\ - subs r6, 0x1\n\ - cmp r6, 0\n\ - bge _080506EE\n\ - ldrh r0, [r7]\n\ - mov r4, r8\n\ - strb r0, [r4, 0x1]\n\ - ldrh r0, [r7, 0x2]\n\ - strb r0, [r4, 0x2]\n\ - ldrh r0, [r7, 0x4]\n\ - strb r0, [r4, 0x3]\n\ - ldrh r0, [r7, 0x6]\n\ - strb r0, [r4, 0x4]\n\ - ldrh r0, [r7, 0x8]\n\ - strb r0, [r4, 0x5]\n\ - ldrh r0, [r7, 0xA]\n\ - strb r0, [r4, 0x6]\n\ - movs r6, 0\n\ - adds r2, r7, 0\n\ + adds r1, 0x2\n\ + subs r6, 0x1\n\ + cmp r6, 0\n\ + bge _080506EE\n\ + ldrh r0, [r7]\n\ + mov r4, r8\n\ + strb r0, [r4, 0x1]\n\ + ldrh r0, [r7, 0x2]\n\ + strb r0, [r4, 0x2]\n\ + ldrh r0, [r7, 0x4]\n\ + strb r0, [r4, 0x3]\n\ + ldrh r0, [r7, 0x6]\n\ + strb r0, [r4, 0x4]\n\ + ldrh r0, [r7, 0x8]\n\ + strb r0, [r4, 0x5]\n\ + ldrh r0, [r7, 0xA]\n\ + strb r0, [r4, 0x6]\n\ + movs r6, 0\n\ + adds r2, r7, 0\n\ _0805071E:\n\ - ldr r5, [sp, 0x4]\n\ - adds r1, r5, r6\n\ - ldrh r0, [r2]\n\ - strb r0, [r1]\n\ - adds r2, 0x2\n\ - adds r6, 0x1\n\ - cmp r6, 0x5\n\ - ble _0805071E\n\ - add sp, 0x10\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\ + ldr r5, [sp, 0x4]\n\ + adds r1, r5, r6\n\ + ldrh r0, [r2]\n\ + strb r0, [r1]\n\ + adds r2, 0x2\n\ + adds r6, 0x1\n\ + cmp r6, 0x5\n\ + ble _0805071E\n\ + add sp, 0x10\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\ _08050740: .4byte gUnknown_03000510\n\ .syntax divided"); } diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c index 50db5388c..a965f386c 100644 --- a/src/berry_tag_screen.c +++ b/src/berry_tag_screen.c @@ -363,30 +363,30 @@ static void sub_81466A0(void) static void sub_81466E8(u8 taskId, s8 direction) { - u8 berryPocket = 3; - s16 *data = gTasks[taskId].data; - - if (gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos == 0 - && direction < 0) - return; - if (gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos + 1 == gBagPocketScrollStates[berryPocket].numSlots - && direction > 0) - return; - - PlaySE(SE_SELECT); - if (gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos + direction < 0) - data[1] = -(gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos); - else if (gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos + direction >= gBagPocketScrollStates[berryPocket].numSlots) - data[1] = gBagPocketScrollStates[berryPocket].numSlots - gBagPocketScrollStates[berryPocket].scrollTop - gBagPocketScrollStates[berryPocket].cursorPos - 1; - else - data[1] = direction; - - gTasks[taskId].func = sub_8146798; - - if (direction < 0) - data[0] = -16; - else - data[0] = 16; + u8 berryPocket = 3; + s16 *data = gTasks[taskId].data; + + if (gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos == 0 + && direction < 0) + return; + if (gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos + 1 == gBagPocketScrollStates[berryPocket].numSlots + && direction > 0) + return; + + PlaySE(SE_SELECT); + if (gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos + direction < 0) + data[1] = -(gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos); + else if (gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos + direction >= gBagPocketScrollStates[berryPocket].numSlots) + data[1] = gBagPocketScrollStates[berryPocket].numSlots - gBagPocketScrollStates[berryPocket].scrollTop - gBagPocketScrollStates[berryPocket].cursorPos - 1; + else + data[1] = direction; + + gTasks[taskId].func = sub_8146798; + + if (direction < 0) + data[0] = -16; + else + data[0] = 16; } @@ -411,36 +411,36 @@ static void sub_8146798(u8 taskId) static void sub_8146810(s8 berry) { - u8 berryPocket = 3; - - if (berry > 0) - { - if (gBagPocketScrollStates[berryPocket].cursorPos + berry > 7) - { - gBagPocketScrollStates[berryPocket].scrollTop += gBagPocketScrollStates[berryPocket].cursorPos - 7 + berry; - gBagPocketScrollStates[berryPocket].cursorPos = 7; - } - else - { - gBagPocketScrollStates[berryPocket].cursorPos += berry; - } - } - else - { - if (gBagPocketScrollStates[berryPocket].cursorPos + berry < 0) - { - gBagPocketScrollStates[berryPocket].scrollTop += gBagPocketScrollStates[berryPocket].cursorPos + berry; - gBagPocketScrollStates[berryPocket].cursorPos = 0; - } - else - { - gBagPocketScrollStates[berryPocket].cursorPos += berry; - } - } - gScriptItemId = gCurrentBagPocketItemSlots[gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos].itemId; - DestroySprite(&gSprites[gUnknown_0203932C]); - sub_81466A0(); - sub_80A7DD4(); + u8 berryPocket = 3; + + if (berry > 0) + { + if (gBagPocketScrollStates[berryPocket].cursorPos + berry > 7) + { + gBagPocketScrollStates[berryPocket].scrollTop += gBagPocketScrollStates[berryPocket].cursorPos - 7 + berry; + gBagPocketScrollStates[berryPocket].cursorPos = 7; + } + else + { + gBagPocketScrollStates[berryPocket].cursorPos += berry; + } + } + else + { + if (gBagPocketScrollStates[berryPocket].cursorPos + berry < 0) + { + gBagPocketScrollStates[berryPocket].scrollTop += gBagPocketScrollStates[berryPocket].cursorPos + berry; + gBagPocketScrollStates[berryPocket].cursorPos = 0; + } + else + { + gBagPocketScrollStates[berryPocket].cursorPos += berry; + } + } + gScriptItemId = gCurrentBagPocketItemSlots[gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos].itemId; + DestroySprite(&gSprites[gUnknown_0203932C]); + sub_81466A0(); + sub_80A7DD4(); } static void sub_81468BC(void) diff --git a/src/de_rom_8040FE0.c b/src/de_rom_8040FE0.c index c618ebdb2..eebcc1437 100644 --- a/src/de_rom_8040FE0.c +++ b/src/de_rom_8040FE0.c @@ -142,124 +142,124 @@ u8 *de_sub_8041024(s32 arg0, u32 arg1) { __attribute__((naked)) void de_sub_8041024(void) { asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - adds r2, r0, 0\n\ - adds r6, r1, 0\n\ - movs r0, 0x80\n\ - lsls r0, 3\n\ - cmp r2, r0\n\ - beq _0804104A\n\ - cmp r2, r0\n\ - bgt _08041040\n\ - movs r0, 0x80\n\ - lsls r0, 1\n\ - cmp r2, r0\n\ - beq _08041064\n\ - b _0804109C\n\ + push {r4-r6,lr}\n\ + adds r2, r0, 0\n\ + adds r6, r1, 0\n\ + movs r0, 0x80\n\ + lsls r0, 3\n\ + cmp r2, r0\n\ + beq _0804104A\n\ + cmp r2, r0\n\ + bgt _08041040\n\ + movs r0, 0x80\n\ + lsls r0, 1\n\ + cmp r2, r0\n\ + beq _08041064\n\ + b _0804109C\n\ _08041040:\n\ - movs r0, 0x80\n\ - lsls r0, 4\n\ - cmp r2, r0\n\ - beq _08041086\n\ - b _0804109C\n\ + movs r0, 0x80\n\ + lsls r0, 4\n\ + cmp r2, r0\n\ + beq _08041086\n\ + b _0804109C\n\ _0804104A:\n\ - bl GetSecretBaseTrainerNameIndex\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - ldr r0, _08041060 @ =0x02017000\n\ - ldrb r0, [r0, 0x1]\n\ - lsls r0, 27\n\ - lsrs r2, r0, 31\n\ - cmp r5, 0x1A\n\ - beq _080410B8\n\ - b _080410F8\n\ - .align 2, 0\n\ + bl GetSecretBaseTrainerNameIndex\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + ldr r0, _08041060 @ =0x02017000\n\ + ldrb r0, [r0, 0x1]\n\ + lsls r0, 27\n\ + lsrs r2, r0, 31\n\ + cmp r5, 0x1A\n\ + beq _080410B8\n\ + b _080410F8\n\ + .align 2, 0\n\ _08041060: .4byte 0x02017000\n\ _08041064:\n\ - bl de_sub_81364AC\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - bl get_trainer_class_name_index\n\ + bl de_sub_81364AC\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + bl get_trainer_class_name_index\n\ _08041070:\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - cmp r4, 0x1E\n\ - beq _08041094\n\ - adds r0, r4, 0\n\ - subs r0, 0x3D\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x2\n\ - bls _080410CC\n\ - b _080410F8\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r4, 0x1E\n\ + beq _08041094\n\ + adds r0, r4, 0\n\ + subs r0, 0x3D\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x2\n\ + bls _080410CC\n\ + b _080410F8\n\ _08041086:\n\ - bl de_sub_81364F8\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - bl sub_8135FD8\n\ - b _08041070\n\ + bl de_sub_81364F8\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + bl sub_8135FD8\n\ + b _08041070\n\ _08041094:\n\ - movs r0, 0x1\n\ - bl de_sub_8040FE0\n\ - b _08041102\n\ + movs r0, 0x1\n\ + bl de_sub_8040FE0\n\ + b _08041102\n\ _0804109C:\n\ - ldr r1, _080410C0 @ =gTrainers\n\ - lsls r4, r6, 2\n\ - adds r0, r4, r6\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - ldrb r5, [r0, 0x1]\n\ - lsls r0, r6, 16\n\ - lsrs r0, 16\n\ - bl sub_803FC58\n\ - lsls r0, 24\n\ - lsrs r2, r0, 24\n\ - cmp r5, 0x1A\n\ - bne _080410C4\n\ + ldr r1, _080410C0 @ =gTrainers\n\ + lsls r4, r6, 2\n\ + adds r0, r4, r6\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + ldrb r5, [r0, 0x1]\n\ + lsls r0, r6, 16\n\ + lsrs r0, 16\n\ + bl sub_803FC58\n\ + lsls r0, 24\n\ + lsrs r2, r0, 24\n\ + cmp r5, 0x1A\n\ + bne _080410C4\n\ _080410B8:\n\ - adds r0, r2, 0\n\ - bl de_sub_8040FE0\n\ - b _08041102\n\ - .align 2, 0\n\ + adds r0, r2, 0\n\ + bl de_sub_8040FE0\n\ + b _08041102\n\ + .align 2, 0\n\ _080410C0: .4byte gTrainers\n\ _080410C4:\n\ - cmp r5, 0x2E\n\ - bne _080410D4\n\ - cmp r2, 0x1\n\ - bne _080410D4\n\ + cmp r5, 0x2E\n\ + bne _080410D4\n\ + cmp r2, 0x1\n\ + bne _080410D4\n\ _080410CC:\n\ - movs r0, 0x1\n\ - bl de_sub_8040FF4\n\ - b _08041102\n\ + movs r0, 0x1\n\ + bl de_sub_8040FF4\n\ + b _08041102\n\ _080410D4:\n\ - cmp r5, 0x19\n\ - bne _080410F8\n\ - ldr r0, _080410F4 @ =gTrainers\n\ - adds r1, r4, r6\n\ - lsls r1, 3\n\ - adds r1, r0\n\ - ldrb r0, [r1, 0x18]\n\ - movs r2, 0\n\ - cmp r0, 0x1\n\ - bne _080410EA\n\ - movs r2, 0x1\n\ + cmp r5, 0x19\n\ + bne _080410F8\n\ + ldr r0, _080410F4 @ =gTrainers\n\ + adds r1, r4, r6\n\ + lsls r1, 3\n\ + adds r1, r0\n\ + ldrb r0, [r1, 0x18]\n\ + movs r2, 0\n\ + cmp r0, 0x1\n\ + bne _080410EA\n\ + movs r2, 0x1\n\ _080410EA:\n\ - adds r0, r2, 0\n\ - bl de_sub_804100C\n\ - b _08041102\n\ - .align 2, 0\n\ + adds r0, r2, 0\n\ + bl de_sub_804100C\n\ + b _08041102\n\ + .align 2, 0\n\ _080410F4: .4byte gTrainers\n\ _080410F8:\n\ - movs r0, 0xD\n\ - adds r1, r5, 0\n\ - muls r1, r0\n\ - ldr r0, _08041108 @ =gTrainerClassNames\n\ - adds r0, r1, r0\n\ + movs r0, 0xD\n\ + adds r1, r5, 0\n\ + muls r1, r0\n\ + ldr r0, _08041108 @ =gTrainerClassNames\n\ + adds r0, r1, r0\n\ _08041102:\n\ - pop {r4-r6}\n\ - pop {r1}\n\ - bx r1\n\ - .align 2, 0\n\ + pop {r4-r6}\n\ + pop {r1}\n\ + bx r1\n\ + .align 2, 0\n\ _08041108: .4byte gTrainerClassNames\n\ .syntax divided\n"); } diff --git a/src/egg_hatch.c b/src/egg_hatch.c index 2b68d83e8..aa3d45250 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -323,69 +323,69 @@ __attribute__((naked)) static bool8 sub_8042ABC(void* a, u8 b) { asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - sub sp, 0x20\n\ - adds r5, r0, 0\n\ - lsls r4, r1, 24\n\ - lsrs r4, 24\n\ - lsls r0, r4, 2\n\ - adds r0, r4\n\ - lsls r0, 4\n\ - adds r0, r5, r0\n\ - mov r1, sp\n\ - bl GetBoxMonNick\n\ - lsls r0, r4, 3\n\ - subs r0, r4\n\ - lsls r1, r0, 3\n\ - adds r0, r5, r1\n\ - adds r0, 0xC0\n\ - ldrh r0, [r0]\n\ - cmp r0, 0\n\ - beq _08042B40\n\ - adds r0, r1, 0\n\ - adds r0, 0xA0\n\ - adds r5, r0\n\ - adds r6, r5, 0\n\ - adds r6, 0x2C\n\ - mov r0, sp\n\ - adds r1, r6, 0\n\ - bl StringCompareWithoutExtCtrlCodes\n\ - cmp r0, 0\n\ - bne _08042B08\n\ - ldr r0, _08042B30 @ =gSaveBlock2\n\ - adds r1, r5, 0\n\ - adds r1, 0x24\n\ - bl StringCompareWithoutExtCtrlCodes\n\ - cmp r0, 0\n\ - beq _08042B40\n\ + push {r4-r6,lr}\n\ + sub sp, 0x20\n\ + adds r5, r0, 0\n\ + lsls r4, r1, 24\n\ + lsrs r4, 24\n\ + lsls r0, r4, 2\n\ + adds r0, r4\n\ + lsls r0, 4\n\ + adds r0, r5, r0\n\ + mov r1, sp\n\ + bl GetBoxMonNick\n\ + lsls r0, r4, 3\n\ + subs r0, r4\n\ + lsls r1, r0, 3\n\ + adds r0, r5, r1\n\ + adds r0, 0xC0\n\ + ldrh r0, [r0]\n\ + cmp r0, 0\n\ + beq _08042B40\n\ + adds r0, r1, 0\n\ + adds r0, 0xA0\n\ + adds r5, r0\n\ + adds r6, r5, 0\n\ + adds r6, 0x2C\n\ + mov r0, sp\n\ + adds r1, r6, 0\n\ + bl StringCompareWithoutExtCtrlCodes\n\ + cmp r0, 0\n\ + bne _08042B08\n\ + ldr r0, _08042B30 @ =gSaveBlock2\n\ + adds r1, r5, 0\n\ + adds r1, 0x24\n\ + bl StringCompareWithoutExtCtrlCodes\n\ + cmp r0, 0\n\ + beq _08042B40\n\ _08042B08:\n\ - ldr r0, _08042B34 @ =gStringVar1\n\ - mov r1, sp\n\ - bl StringCopy\n\ - ldr r4, _08042B38 @ =gStringVar2\n\ - adds r1, r5, 0\n\ - adds r1, 0x24\n\ - adds r0, r4, 0\n\ - bl StringCopy\n\ - ldr r0, _08042B3C @ =gStringVar3\n\ - adds r1, r6, 0\n\ - bl StringCopy\n\ - adds r0, r4, 0\n\ - bl SanitizeNameString\n\ - movs r0, 0x1\n\ - b _08042B42\n\ - .align 2, 0\n\ + ldr r0, _08042B34 @ =gStringVar1\n\ + mov r1, sp\n\ + bl StringCopy\n\ + ldr r4, _08042B38 @ =gStringVar2\n\ + adds r1, r5, 0\n\ + adds r1, 0x24\n\ + adds r0, r4, 0\n\ + bl StringCopy\n\ + ldr r0, _08042B3C @ =gStringVar3\n\ + adds r1, r6, 0\n\ + bl StringCopy\n\ + adds r0, r4, 0\n\ + bl SanitizeNameString\n\ + movs r0, 0x1\n\ + b _08042B42\n\ + .align 2, 0\n\ _08042B30: .4byte gSaveBlock2\n\ _08042B34: .4byte gStringVar1\n\ _08042B38: .4byte gStringVar2\n\ _08042B3C: .4byte gStringVar3\n\ _08042B40:\n\ - movs r0, 0\n\ + movs r0, 0\n\ _08042B42:\n\ - add sp, 0x20\n\ - pop {r4-r6}\n\ - pop {r1}\n\ - bx r1\n\ + add sp, 0x20\n\ + pop {r4-r6}\n\ + pop {r1}\n\ + bx r1\n\ .syntax divided"); } diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index a04f9d65b..78909e289 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -224,12 +224,12 @@ static const struct SpriteFrameImage sSpriteImageTable_840B67C[] = static const struct SpriteFrameImage* const sUnknown_0840B69C[7] = { sSpriteImageTable_840B5BC, - sSpriteImageTable_840B5DC, - sSpriteImageTable_840B5FC, - sSpriteImageTable_840B61C, - sSpriteImageTable_840B63C, - sSpriteImageTable_840B65C, - sSpriteImageTable_840B67C + sSpriteImageTable_840B5DC, + sSpriteImageTable_840B5FC, + sSpriteImageTable_840B61C, + sSpriteImageTable_840B63C, + sSpriteImageTable_840B65C, + sSpriteImageTable_840B67C }; static const struct SpriteTemplate sUnknown_0840B6B8 = @@ -365,22 +365,22 @@ static const union AnimCmd sSpriteAnim_840B758[] = static const union AnimCmd* const sSpriteAnimTable_840B760[] = { sSpriteAnim_840B6D8, - sSpriteAnim_840B6E0, - sSpriteAnim_840B6E8, - sSpriteAnim_840B6F0, - sSpriteAnim_840B6F8, - sSpriteAnim_840B700, - sSpriteAnim_840B708, - sSpriteAnim_840B710, - sSpriteAnim_840B718, - sSpriteAnim_840B720, - sSpriteAnim_840B728, - sSpriteAnim_840B730, - sSpriteAnim_840B738, - sSpriteAnim_840B740, - sSpriteAnim_840B748, - sSpriteAnim_840B750, - sSpriteAnim_840B758 + sSpriteAnim_840B6E0, + sSpriteAnim_840B6E8, + sSpriteAnim_840B6F0, + sSpriteAnim_840B6F8, + sSpriteAnim_840B700, + sSpriteAnim_840B708, + sSpriteAnim_840B710, + sSpriteAnim_840B718, + sSpriteAnim_840B720, + sSpriteAnim_840B728, + sSpriteAnim_840B730, + sSpriteAnim_840B738, + sSpriteAnim_840B740, + sSpriteAnim_840B748, + sSpriteAnim_840B750, + sSpriteAnim_840B758 }; static const struct SpriteTemplate sSpriteTemplate_840B7A4 = diff --git a/src/item_menu.c b/src/item_menu.c index fdc47ad67..4436bdfbe 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -2313,164 +2313,164 @@ __attribute__((naked)) static void sub_80A5600(u8 taskId) { asm(".syntax unified\n\ - push {r4,r5,lr}\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - movs r5, 0\n\ - ldr r2, _080A563C @ =gMain\n\ - ldrh r0, [r2, 0x30]\n\ - movs r1, 0xF0\n\ - ands r1, r0\n\ - cmp r1, 0x40\n\ - bne _080A5648\n\ - ldr r4, _080A5640 @ =sPopupMenuSelection\n\ - ldrb r0, [r4]\n\ - cmp r0, 0\n\ - bne _080A561E\n\ - b _080A5736\n\ + push {r4,r5,lr}\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + movs r5, 0\n\ + ldr r2, _080A563C @ =gMain\n\ + ldrh r0, [r2, 0x30]\n\ + movs r1, 0xF0\n\ + ands r1, r0\n\ + cmp r1, 0x40\n\ + bne _080A5648\n\ + ldr r4, _080A5640 @ =sPopupMenuSelection\n\ + ldrb r0, [r4]\n\ + cmp r0, 0\n\ + bne _080A561E\n\ + b _080A5736\n\ _080A561E:\n\ - adds r1, r0, 0\n\ - ldr r0, _080A5644 @ =sPopupMenuActionList\n\ - ldr r0, [r0]\n\ - adds r1, r0\n\ - subs r1, 0x1\n\ - ldrb r0, [r1]\n\ - cmp r0, 0x8\n\ - bne _080A5630\n\ - b _080A5736\n\ + adds r1, r0, 0\n\ + ldr r0, _080A5644 @ =sPopupMenuActionList\n\ + ldr r0, [r0]\n\ + adds r1, r0\n\ + subs r1, 0x1\n\ + ldrb r0, [r1]\n\ + cmp r0, 0x8\n\ + bne _080A5630\n\ + b _080A5736\n\ _080A5630:\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - b _080A56D2\n\ - .align 2, 0\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + b _080A56D2\n\ + .align 2, 0\n\ _080A563C: .4byte gMain\n\ _080A5640: .4byte sPopupMenuSelection\n\ _080A5644: .4byte sPopupMenuActionList\n\ _080A5648:\n\ - cmp r1, 0x80\n\ - bne _080A5680\n\ - ldr r4, _080A5674 @ =sPopupMenuSelection\n\ - ldrb r1, [r4]\n\ - ldr r0, _080A5678 @ =gUnknown_02038564\n\ - ldrb r0, [r0]\n\ - subs r0, 0x1\n\ - cmp r1, r0\n\ - beq _080A5736\n\ - cmp r1, 0x2\n\ - beq _080A5736\n\ - ldr r0, _080A567C @ =sPopupMenuActionList\n\ - ldr r0, [r0]\n\ - adds r0, r1, r0\n\ - ldrb r0, [r0, 0x1]\n\ - cmp r0, 0x8\n\ - beq _080A5736\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - movs r0, 0x1\n\ - b _080A56D2\n\ - .align 2, 0\n\ + cmp r1, 0x80\n\ + bne _080A5680\n\ + ldr r4, _080A5674 @ =sPopupMenuSelection\n\ + ldrb r1, [r4]\n\ + ldr r0, _080A5678 @ =gUnknown_02038564\n\ + ldrb r0, [r0]\n\ + subs r0, 0x1\n\ + cmp r1, r0\n\ + beq _080A5736\n\ + cmp r1, 0x2\n\ + beq _080A5736\n\ + ldr r0, _080A567C @ =sPopupMenuActionList\n\ + ldr r0, [r0]\n\ + adds r0, r1, r0\n\ + ldrb r0, [r0, 0x1]\n\ + cmp r0, 0x8\n\ + beq _080A5736\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + movs r0, 0x1\n\ + b _080A56D2\n\ + .align 2, 0\n\ _080A5674: .4byte sPopupMenuSelection\n\ _080A5678: .4byte gUnknown_02038564\n\ _080A567C: .4byte sPopupMenuActionList\n\ _080A5680:\n\ - cmp r1, 0x20\n\ - bne _080A56B0\n\ - ldr r4, _080A56A8 @ =sPopupMenuSelection\n\ - ldrb r0, [r4]\n\ - cmp r0, 0x2\n\ - bls _080A5736\n\ - adds r1, r0, 0\n\ - ldr r0, _080A56AC @ =sPopupMenuActionList\n\ - ldr r0, [r0]\n\ - adds r1, r0\n\ - subs r1, 0x3\n\ - ldrb r0, [r1]\n\ - cmp r0, 0x8\n\ - beq _080A5736\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - movs r0, 0x3\n\ - negs r0, r0\n\ - b _080A56D2\n\ - .align 2, 0\n\ + cmp r1, 0x20\n\ + bne _080A56B0\n\ + ldr r4, _080A56A8 @ =sPopupMenuSelection\n\ + ldrb r0, [r4]\n\ + cmp r0, 0x2\n\ + bls _080A5736\n\ + adds r1, r0, 0\n\ + ldr r0, _080A56AC @ =sPopupMenuActionList\n\ + ldr r0, [r0]\n\ + adds r1, r0\n\ + subs r1, 0x3\n\ + ldrb r0, [r1]\n\ + cmp r0, 0x8\n\ + beq _080A5736\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + movs r0, 0x3\n\ + negs r0, r0\n\ + b _080A56D2\n\ + .align 2, 0\n\ _080A56A8: .4byte sPopupMenuSelection\n\ _080A56AC: .4byte sPopupMenuActionList\n\ _080A56B0:\n\ - cmp r1, 0x10\n\ - bne _080A56E4\n\ - ldr r4, _080A56DC @ =sPopupMenuSelection\n\ - ldrb r0, [r4]\n\ - cmp r0, 0x2\n\ - bhi _080A5736\n\ - adds r1, r0, 0\n\ - ldr r0, _080A56E0 @ =sPopupMenuActionList\n\ - ldr r0, [r0]\n\ - adds r1, r0\n\ - ldrb r0, [r1, 0x3]\n\ - cmp r0, 0x8\n\ - beq _080A5736\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - movs r0, 0x3\n\ + cmp r1, 0x10\n\ + bne _080A56E4\n\ + ldr r4, _080A56DC @ =sPopupMenuSelection\n\ + ldrb r0, [r4]\n\ + cmp r0, 0x2\n\ + bhi _080A5736\n\ + adds r1, r0, 0\n\ + ldr r0, _080A56E0 @ =sPopupMenuActionList\n\ + ldr r0, [r0]\n\ + adds r1, r0\n\ + ldrb r0, [r1, 0x3]\n\ + cmp r0, 0x8\n\ + beq _080A5736\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + movs r0, 0x3\n\ _080A56D2:\n\ - bl MoveMenuCursor3\n\ - strb r0, [r4]\n\ - b _080A5736\n\ - .align 2, 0\n\ + bl MoveMenuCursor3\n\ + strb r0, [r4]\n\ + b _080A5736\n\ + .align 2, 0\n\ _080A56DC: .4byte sPopupMenuSelection\n\ _080A56E0: .4byte sPopupMenuActionList\n\ _080A56E4:\n\ - ldrh r1, [r2, 0x2E]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _080A5768\n\ - movs r0, 0x2\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080A5736\n\ - ldr r1, _080A574C @ =gTasks\n\ - lsls r0, r4, 2\n\ - adds r0, r4\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - strh r5, [r0, 0x1C]\n\ - ldr r1, _080A5750 @ =gBagPocketScrollStates\n\ - ldr r0, _080A5754 @ =sCurrentBagPocket\n\ - ldrb r0, [r0]\n\ - lsls r0, 24\n\ - asrs r0, 24\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldrb r2, [r0]\n\ - adds r0, r4, 0\n\ - adds r1, r2, 0\n\ - bl sub_80A48E8\n\ - ldr r0, _080A5758 @ =gBGTilemapBuffers + 0x800\n\ - bl sub_80A4DA4\n\ - ldr r1, _080A575C @ =sItemPopupMenuActions\n\ - ldr r0, _080A5760 @ =sPopupMenuActionList\n\ - ldr r0, [r0]\n\ - ldrb r0, [r0, 0x5]\n\ - lsls r0, 3\n\ - adds r1, 0x4\n\ - adds r0, r1\n\ - ldr r5, [r0]\n\ - adds r0, r4, 0\n\ - bl _call_via_r5\n\ + ldrh r1, [r2, 0x2E]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080A5768\n\ + movs r0, 0x2\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080A5736\n\ + ldr r1, _080A574C @ =gTasks\n\ + lsls r0, r4, 2\n\ + adds r0, r4\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + strh r5, [r0, 0x1C]\n\ + ldr r1, _080A5750 @ =gBagPocketScrollStates\n\ + ldr r0, _080A5754 @ =sCurrentBagPocket\n\ + ldrb r0, [r0]\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldrb r2, [r0]\n\ + adds r0, r4, 0\n\ + adds r1, r2, 0\n\ + bl sub_80A48E8\n\ + ldr r0, _080A5758 @ =gBGTilemapBuffers + 0x800\n\ + bl sub_80A4DA4\n\ + ldr r1, _080A575C @ =sItemPopupMenuActions\n\ + ldr r0, _080A5760 @ =sPopupMenuActionList\n\ + ldr r0, [r0]\n\ + ldrb r0, [r0, 0x5]\n\ + lsls r0, 3\n\ + adds r1, 0x4\n\ + adds r0, r1\n\ + ldr r5, [r0]\n\ + adds r0, r4, 0\n\ + bl _call_via_r5\n\ _080A5736:\n\ - cmp r5, 0\n\ - bne _080A57BE\n\ - ldr r0, _080A5764 @ =sPopupMenuSelection\n\ - ldrb r0, [r0]\n\ - cmp r0, 0\n\ - bne _080A57AC\n\ - movs r0, 0xC\n\ - bl sub_8072DDC\n\ - b _080A57BE\n\ - .align 2, 0\n\ + cmp r5, 0\n\ + bne _080A57BE\n\ + ldr r0, _080A5764 @ =sPopupMenuSelection\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + bne _080A57AC\n\ + movs r0, 0xC\n\ + bl sub_8072DDC\n\ + b _080A57BE\n\ + .align 2, 0\n\ _080A574C: .4byte gTasks\n\ _080A5750: .4byte gBagPocketScrollStates\n\ _080A5754: .4byte sCurrentBagPocket\n\ @@ -2479,47 +2479,47 @@ _080A575C: .4byte sItemPopupMenuActions\n\ _080A5760: .4byte sPopupMenuActionList\n\ _080A5764: .4byte sPopupMenuSelection\n\ _080A5768:\n\ - ldr r1, _080A5798 @ =gTasks\n\ - lsls r0, r4, 2\n\ - adds r0, r4\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - strh r5, [r0, 0x1C]\n\ - ldr r0, _080A579C @ =gBGTilemapBuffers + 0x800\n\ - bl sub_80A4DA4\n\ - ldr r1, _080A57A0 @ =sItemPopupMenuActions\n\ - ldr r0, _080A57A4 @ =sPopupMenuSelection\n\ - ldrb r2, [r0]\n\ - ldr r0, _080A57A8 @ =sPopupMenuActionList\n\ - ldr r0, [r0]\n\ - adds r0, r2\n\ - ldrb r0, [r0]\n\ - lsls r0, 3\n\ - adds r1, 0x4\n\ - adds r0, r1\n\ - ldr r5, [r0]\n\ - adds r0, r4, 0\n\ - bl _call_via_r5\n\ - b _080A5736\n\ - .align 2, 0\n\ + ldr r1, _080A5798 @ =gTasks\n\ + lsls r0, r4, 2\n\ + adds r0, r4\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + strh r5, [r0, 0x1C]\n\ + ldr r0, _080A579C @ =gBGTilemapBuffers + 0x800\n\ + bl sub_80A4DA4\n\ + ldr r1, _080A57A0 @ =sItemPopupMenuActions\n\ + ldr r0, _080A57A4 @ =sPopupMenuSelection\n\ + ldrb r2, [r0]\n\ + ldr r0, _080A57A8 @ =sPopupMenuActionList\n\ + ldr r0, [r0]\n\ + adds r0, r2\n\ + ldrb r0, [r0]\n\ + lsls r0, 3\n\ + adds r1, 0x4\n\ + adds r0, r1\n\ + ldr r5, [r0]\n\ + adds r0, r4, 0\n\ + bl _call_via_r5\n\ + b _080A5736\n\ + .align 2, 0\n\ _080A5798: .4byte gTasks\n\ _080A579C: .4byte gBGTilemapBuffers + 0x800\n\ _080A57A0: .4byte sItemPopupMenuActions\n\ _080A57A4: .4byte sPopupMenuSelection\n\ _080A57A8: .4byte sPopupMenuActionList\n\ _080A57AC:\n\ - cmp r0, 0x2\n\ - bhi _080A57B8\n\ - movs r0, 0x2F\n\ - bl sub_8072DCC\n\ - b _080A57BE\n\ + cmp r0, 0x2\n\ + bhi _080A57B8\n\ + movs r0, 0x2F\n\ + bl sub_8072DCC\n\ + b _080A57BE\n\ _080A57B8:\n\ - movs r0, 0x30\n\ - bl sub_8072DCC\n\ + movs r0, 0x30\n\ + bl sub_8072DCC\n\ _080A57BE:\n\ - pop {r4,r5}\n\ - pop {r0}\n\ - bx r0\n\ + pop {r4,r5}\n\ + pop {r0}\n\ + bx r0\n\ .syntax divided\n"); } diff --git a/src/menu.c b/src/menu.c index ef458124b..1096fa0bd 100644 --- a/src/menu.c +++ b/src/menu.c @@ -630,82 +630,82 @@ __attribute__((naked)) int sub_8072AB0(const u8 *str, u8 left, u16 top, u8 width, u8 height, u32 a6) { asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - sub sp, 0x10\n\ - mov r12, r0\n\ - ldr r0, [sp, 0x24]\n\ - ldr r4, [sp, 0x28]\n\ - str r4, [sp, 0xC]\n\ - lsls r1, 24\n\ - lsrs r5, r1, 24\n\ - lsls r2, 16\n\ - lsrs r4, r2, 16\n\ - lsls r3, 24\n\ - lsrs r6, r3, 24\n\ - lsls r0, 24\n\ - lsrs r7, r0, 24\n\ - ldr r0, _08072AF8 @ =gMenuWindowPtr\n\ - ldr r0, [r0]\n\ - ldr r1, _08072AFC @ =gMenuTextTileOffset\n\ - ldrh r3, [r1]\n\ - str r5, [sp]\n\ - str r4, [sp, 0x4]\n\ - str r6, [sp, 0x8]\n\ - movs r1, 0\n\ - mov r2, r12\n\ - bl sub_8004FD0\n\ - adds r1, r0, 0\n\ - lsls r1, 24\n\ - lsrs r2, r1, 24\n\ - movs r3, 0x7\n\ - ands r3, r5\n\ - cmp r3, 0\n\ - bne _08072B00\n\ - adds r1, r6, 0x7\n\ - asrs r1, 3\n\ - subs r1, 0x1\n\ - b _08072B0C\n\ - .align 2, 0\n\ + push {r4-r7,lr}\n\ + sub sp, 0x10\n\ + mov r12, r0\n\ + ldr r0, [sp, 0x24]\n\ + ldr r4, [sp, 0x28]\n\ + str r4, [sp, 0xC]\n\ + lsls r1, 24\n\ + lsrs r5, r1, 24\n\ + lsls r2, 16\n\ + lsrs r4, r2, 16\n\ + lsls r3, 24\n\ + lsrs r6, r3, 24\n\ + lsls r0, 24\n\ + lsrs r7, r0, 24\n\ + ldr r0, _08072AF8 @ =gMenuWindowPtr\n\ + ldr r0, [r0]\n\ + ldr r1, _08072AFC @ =gMenuTextTileOffset\n\ + ldrh r3, [r1]\n\ + str r5, [sp]\n\ + str r4, [sp, 0x4]\n\ + str r6, [sp, 0x8]\n\ + movs r1, 0\n\ + mov r2, r12\n\ + bl sub_8004FD0\n\ + adds r1, r0, 0\n\ + lsls r1, 24\n\ + lsrs r2, r1, 24\n\ + movs r3, 0x7\n\ + ands r3, r5\n\ + cmp r3, 0\n\ + bne _08072B00\n\ + adds r1, r6, 0x7\n\ + asrs r1, 3\n\ + subs r1, 0x1\n\ + b _08072B0C\n\ + .align 2, 0\n\ _08072AF8: .4byte gMenuWindowPtr\n\ _08072AFC: .4byte gMenuTextTileOffset\n\ _08072B00:\n\ - adds r3, r6, r3\n\ - subs r1, r3, 0x1\n\ - cmp r1, 0\n\ - bge _08072B0A\n\ - adds r1, r3, 0x6\n\ + adds r3, r6, r3\n\ + subs r1, r3, 0x1\n\ + cmp r1, 0\n\ + bge _08072B0A\n\ + adds r1, r3, 0x6\n\ _08072B0A:\n\ - asrs r1, 3\n\ + asrs r1, 3\n\ _08072B0C:\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - adds r6, r1, 0\n\ - lsrs r5, 3\n\ - adds r1, r7, 0x7\n\ - asrs r1, 3\n\ - lsls r1, 24\n\ - lsrs r7, r1, 24\n\ - lsrs r4, 3\n\ - cmp r2, r7\n\ - bcs _08072B3E\n\ - lsls r1, r2, 1\n\ - adds r1, r4, r1\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - adds r2, r5, r6\n\ - lsls r2, 24\n\ - lsrs r2, 24\n\ - adds r3, r7, r4\n\ - subs r3, 0x1\n\ - lsls r3, 24\n\ - lsrs r3, 24\n\ - adds r0, r5, 0\n\ - bl MenuFillWindowRectWithBlankTile\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + adds r6, r1, 0\n\ + lsrs r5, 3\n\ + adds r1, r7, 0x7\n\ + asrs r1, 3\n\ + lsls r1, 24\n\ + lsrs r7, r1, 24\n\ + lsrs r4, 3\n\ + cmp r2, r7\n\ + bcs _08072B3E\n\ + lsls r1, r2, 1\n\ + adds r1, r4, r1\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + adds r2, r5, r6\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + adds r3, r7, r4\n\ + subs r3, 0x1\n\ + lsls r3, 24\n\ + lsrs r3, 24\n\ + adds r0, r5, 0\n\ + bl MenuFillWindowRectWithBlankTile\n\ _08072B3E:\n\ - add sp, 0x10\n\ - pop {r4-r7}\n\ - pop {r1}\n\ - bx r1\n\ + add sp, 0x10\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n\ .syntax divided\n"); } #endif diff --git a/src/option_menu.c b/src/option_menu.c index 7f8d76528..dfc49b035 100644 --- a/src/option_menu.c +++ b/src/option_menu.c @@ -486,61 +486,61 @@ __attribute__((naked)) static void FrameType_DrawChoices(u8 selection) { asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - sub sp, 0x10\n\ - lsls r0, 24\n\ - movs r1, 0x80\n\ - lsls r1, 17\n\ - adds r0, r1\n\ - lsrs r5, r0, 24\n\ - ldr r1, _0808C368 @ =gSystemText_Type\n\ - mov r0, sp\n\ - bl StringCopy\n\ - ldr r1, _0808C36C @ =gSystemText_Terminator\n\ - mov r0, sp\n\ - bl StringAppend\n\ - adds r4, r0, 0\n\ - adds r0, r5, 0\n\ - movs r1, 0xA\n\ - bl __udivsi3\n\ - adds r1, r0, 0\n\ - lsls r0, r1, 24\n\ - lsrs r6, r0, 24\n\ - cmp r6, 0\n\ - beq _0808C370\n\ - adds r0, r1, 0\n\ - adds r0, 0xA1\n\ - strb r0, [r4]\n\ - adds r4, 0x1\n\ - adds r0, r5, 0\n\ - movs r1, 0xA\n\ - bl __umodsi3\n\ - adds r0, 0xA1\n\ - strb r0, [r4]\n\ - b _0808C380\n\ - .align 2, 0\n\ + push {r4-r6,lr}\n\ + sub sp, 0x10\n\ + lsls r0, 24\n\ + movs r1, 0x80\n\ + lsls r1, 17\n\ + adds r0, r1\n\ + lsrs r5, r0, 24\n\ + ldr r1, _0808C368 @ =gSystemText_Type\n\ + mov r0, sp\n\ + bl StringCopy\n\ + ldr r1, _0808C36C @ =gSystemText_Terminator\n\ + mov r0, sp\n\ + bl StringAppend\n\ + adds r4, r0, 0\n\ + adds r0, r5, 0\n\ + movs r1, 0xA\n\ + bl __udivsi3\n\ + adds r1, r0, 0\n\ + lsls r0, r1, 24\n\ + lsrs r6, r0, 24\n\ + cmp r6, 0\n\ + beq _0808C370\n\ + adds r0, r1, 0\n\ + adds r0, 0xA1\n\ + strb r0, [r4]\n\ + adds r4, 0x1\n\ + adds r0, r5, 0\n\ + movs r1, 0xA\n\ + bl __umodsi3\n\ + adds r0, 0xA1\n\ + strb r0, [r4]\n\ + b _0808C380\n\ + .align 2, 0\n\ _0808C368: .4byte gSystemText_Type\n\ _0808C36C: .4byte gSystemText_Terminator\n\ _0808C370:\n\ - adds r0, r5, 0\n\ - movs r1, 0xA\n\ - bl __umodsi3\n\ - adds r0, 0xA1\n\ - strb r0, [r4]\n\ - adds r4, 0x1\n\ - strb r6, [r4]\n\ + adds r0, r5, 0\n\ + movs r1, 0xA\n\ + bl __umodsi3\n\ + adds r0, 0xA1\n\ + strb r0, [r4]\n\ + adds r4, 0x1\n\ + strb r6, [r4]\n\ _0808C380:\n\ - adds r4, 0x1\n\ - movs r0, 0xFF\n\ - strb r0, [r4]\n\ - mov r0, sp\n\ - movs r1, 0xF\n\ - movs r2, 0xF\n\ - bl MenuPrint\n\ - add sp, 0x10\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ + adds r4, 0x1\n\ + movs r0, 0xFF\n\ + strb r0, [r4]\n\ + mov r0, sp\n\ + movs r1, 0xF\n\ + movs r2, 0xF\n\ + bl MenuPrint\n\ + add sp, 0x10\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ .syntax divided\n"); } #endif diff --git a/src/pokeblock_feed.c b/src/pokeblock_feed.c index 8dc2f47de..db4db55a7 100644 --- a/src/pokeblock_feed.c +++ b/src/pokeblock_feed.c @@ -121,109 +121,109 @@ static const u8 sNatureToMonPokeblockAnim[][2] = static const s16 sMonPokeblockAnims[][10] = { // HARDY - { 0, 4, 0, 8, 24, 0, 0, 0, 12, 0}, - { 0, 4, 0, 16, 24, 0, 0, 0, 12, 0}, - { 0, 4, 0, 32, 32, 0, 0, 0, 16, 1}, - - // LONELY - { 0, 3, 6, 0, 48, 0, 0, 0, 24, 1}, - - // BRAVE - { 64, 16, -24, 0, 32, 0, 0, 0, 0, 1}, - - // ADAMANT - { 0, 4, 8, 0, 16, 0, -8, 0, 0, 0}, - { 0, 0, 0, 0, 16, 0, 0, 0, 0, 0}, - { 0, 4, 8, 0, 16, 0, -8, 0, 0, 0}, - { 0, 0, 0, 0, 16, 0, 0, 0, 0, 0}, - { 0, 4, -16, 0, 4, 0, 16, 0, 0, 1}, - - // NAUGHTY - { 0, 3, 6, 0, 12, 0, 0, 0, 6, 0}, - { 0, 3, -6, 0, 12, 0, 0, 0, 6, 0}, - { 0, 16, 16, 0, 45, 1, 0, 0, 0, 1}, - - // BOLD - { 0, 16, 0, 24, 32, 0, 0, 0, 16, 0}, - { 0, 16, 0, 23, 32, 0, 0, 0, 16, 1}, - - // DOCILE - { 0, 0, 0, 0, 80, 0, 0, 0, 0, 1}, - - // RELAXED - { 0, 2, 8, 0, 32, 0, 0, 0, 0, 0}, - { 0, 2, -8, 0, 32, 0, 0, 0, 0, 1}, - - // IMPISH - { 0, 32, 2, 1, 48, 1, 0, 0, 24, 1}, - - // LAX - { 0, 2, 16, 16, 128, 0, 0, 0, 0, 1}, - - // TIMID - { 0, 2, -8, 0, 48, 0, -24, 0, 0, 0}, - { 0, 0, 0, 0, 8, 0, 0, 0, 0, 0}, - { 64, 32, 2, 0, 36, 0, 0, 0, 0, 0}, - { 0, 0, 0, 0, 8, 0, 0, 0, 0, 0}, - { 0, 2, 8, 0, 48, 0, 24, 0, 0, 1}, - - // HASTY - { 64, 24, 16, 0, 32, 0, 0, 0, 0, 0}, - { 0, 28, 2, 1, 32, 1, 0, 0, 16, 1}, - - // SERIOUS - { 0, 0, 0, 0, 32, 0, 0, 0, 0, 1}, - - // JOLLY - { 64, 16, -16, 2, 48, 0, 0, 0, 32, 1}, - - // NAIVE - { 0, 12, -8, 4, 24, 0, 8, 0, 12, 0}, - { 0, 12, 8, 8, 24, 0, -16, 0, 12, 0}, - { 0, 12, -8, 16, 24, 0, 16, 0, 12, 0}, - { 0, 12, 8, 28, 24, 0, -8, 0, 12, 1}, - - // MODEST - { 0, 0, 0, 0, 8, 0, 0, 0, 0, 0}, - { 64, 16, -4, 0, 32, 0, 0, 0, 0, 0}, - { 0, 0, 0, 0, 8, 0, 0, 0, 0, 1}, - - // MILD - { 128, 4, 0, 8, 64, 0, 0, 0, 0, 1}, - - // QUIET - { 0, 2, 16, 0, 48, 0, 0, 0, 0, 0}, - { 128, 2, 16, 0, 48, 0, 0, 0, 0, 1}, - - // BASHFUL - { 0, 2, -4, 0, 48, 0, -48, 0, 0, 0}, - { 0, 0, 0, 0, 80, 0, 0, 0, 0, 0}, - { 0, 2, 8, 0, 24, 0, 48, 0, 0, 1}, - - // RASH - { 64, 4, 64, 58, 52, 0, -88, 0, 0, 0}, - { 0, 0, 0, 0, 80, 0, 0, 0, 0, 0}, - { 0, 24, 80, 0, 32, 0, 88, 0, 0, 1}, - - // CALM - { 0, 2, 16, 4, 64, 0, 0, 0, 0, 1}, - - // GENTLE - { 0, 0, 0, 0, 32, 0, 0, 0, 0, 1}, - - // SASSY - { 0, 0, 0, 0, 42, 0, 0, 0, 0, 1}, - - // CAREFUL - { 0, 4, 0, 8, 24, 0, 0, 0, 12, 0}, - { 0, 0, 0, 0, 12, 0, 0, 0, 0, 0}, - { 0, 4, 0, 12, 24, 0, 0, 0, 12, 0}, - { 0, 0, 0, 0, 12, 0, 0, 0, 0, 0}, - { 0, 4, 0, 4, 24, 0, 0, 0, 12, 1}, - - // QUIRKY - { 0, 4, 16, 12, 64, 0, 0, 0, 0, 0}, - { 0, -4, 16, 12, 64, 0, 0, 0, 0, 1}, + { 0, 4, 0, 8, 24, 0, 0, 0, 12, 0}, + { 0, 4, 0, 16, 24, 0, 0, 0, 12, 0}, + { 0, 4, 0, 32, 32, 0, 0, 0, 16, 1}, + + // LONELY + { 0, 3, 6, 0, 48, 0, 0, 0, 24, 1}, + + // BRAVE + { 64, 16, -24, 0, 32, 0, 0, 0, 0, 1}, + + // ADAMANT + { 0, 4, 8, 0, 16, 0, -8, 0, 0, 0}, + { 0, 0, 0, 0, 16, 0, 0, 0, 0, 0}, + { 0, 4, 8, 0, 16, 0, -8, 0, 0, 0}, + { 0, 0, 0, 0, 16, 0, 0, 0, 0, 0}, + { 0, 4, -16, 0, 4, 0, 16, 0, 0, 1}, + + // NAUGHTY + { 0, 3, 6, 0, 12, 0, 0, 0, 6, 0}, + { 0, 3, -6, 0, 12, 0, 0, 0, 6, 0}, + { 0, 16, 16, 0, 45, 1, 0, 0, 0, 1}, + + // BOLD + { 0, 16, 0, 24, 32, 0, 0, 0, 16, 0}, + { 0, 16, 0, 23, 32, 0, 0, 0, 16, 1}, + + // DOCILE + { 0, 0, 0, 0, 80, 0, 0, 0, 0, 1}, + + // RELAXED + { 0, 2, 8, 0, 32, 0, 0, 0, 0, 0}, + { 0, 2, -8, 0, 32, 0, 0, 0, 0, 1}, + + // IMPISH + { 0, 32, 2, 1, 48, 1, 0, 0, 24, 1}, + + // LAX + { 0, 2, 16, 16, 128, 0, 0, 0, 0, 1}, + + // TIMID + { 0, 2, -8, 0, 48, 0, -24, 0, 0, 0}, + { 0, 0, 0, 0, 8, 0, 0, 0, 0, 0}, + { 64, 32, 2, 0, 36, 0, 0, 0, 0, 0}, + { 0, 0, 0, 0, 8, 0, 0, 0, 0, 0}, + { 0, 2, 8, 0, 48, 0, 24, 0, 0, 1}, + + // HASTY + { 64, 24, 16, 0, 32, 0, 0, 0, 0, 0}, + { 0, 28, 2, 1, 32, 1, 0, 0, 16, 1}, + + // SERIOUS + { 0, 0, 0, 0, 32, 0, 0, 0, 0, 1}, + + // JOLLY + { 64, 16, -16, 2, 48, 0, 0, 0, 32, 1}, + + // NAIVE + { 0, 12, -8, 4, 24, 0, 8, 0, 12, 0}, + { 0, 12, 8, 8, 24, 0, -16, 0, 12, 0}, + { 0, 12, -8, 16, 24, 0, 16, 0, 12, 0}, + { 0, 12, 8, 28, 24, 0, -8, 0, 12, 1}, + + // MODEST + { 0, 0, 0, 0, 8, 0, 0, 0, 0, 0}, + { 64, 16, -4, 0, 32, 0, 0, 0, 0, 0}, + { 0, 0, 0, 0, 8, 0, 0, 0, 0, 1}, + + // MILD + { 128, 4, 0, 8, 64, 0, 0, 0, 0, 1}, + + // QUIET + { 0, 2, 16, 0, 48, 0, 0, 0, 0, 0}, + { 128, 2, 16, 0, 48, 0, 0, 0, 0, 1}, + + // BASHFUL + { 0, 2, -4, 0, 48, 0, -48, 0, 0, 0}, + { 0, 0, 0, 0, 80, 0, 0, 0, 0, 0}, + { 0, 2, 8, 0, 24, 0, 48, 0, 0, 1}, + + // RASH + { 64, 4, 64, 58, 52, 0, -88, 0, 0, 0}, + { 0, 0, 0, 0, 80, 0, 0, 0, 0, 0}, + { 0, 24, 80, 0, 32, 0, 88, 0, 0, 1}, + + // CALM + { 0, 2, 16, 4, 64, 0, 0, 0, 0, 1}, + + // GENTLE + { 0, 0, 0, 0, 32, 0, 0, 0, 0, 1}, + + // SASSY + { 0, 0, 0, 0, 42, 0, 0, 0, 0, 1}, + + // CAREFUL + { 0, 4, 0, 8, 24, 0, 0, 0, 12, 0}, + { 0, 0, 0, 0, 12, 0, 0, 0, 0, 0}, + { 0, 4, 0, 12, 24, 0, 0, 0, 12, 0}, + { 0, 0, 0, 0, 12, 0, 0, 0, 0, 0}, + { 0, 4, 0, 4, 24, 0, 0, 0, 12, 1}, + + // QUIRKY + { 0, 4, 16, 12, 64, 0, 0, 0, 0, 0}, + { 0, -4, 16, 12, 64, 0, 0, 0, 0, 1}, }; static const union AffineAnimCmd sSpriteAffineAnim_8411E90[] = @@ -251,130 +251,130 @@ static const union AffineAnimCmd sSpriteAffineAnim_8411EC0[] = static const union AffineAnimCmd sSpriteAffineAnim_8411EE8[] = { - AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 16), - AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 32), - AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 16), - AFFINEANIMCMD_END + AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 16), + AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 32), + AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 16), + AFFINEANIMCMD_END }; static const union AffineAnimCmd sSpriteAffineAnim_8411F08[] = { - AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), - AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 16), - AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 32), - AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 16), - AFFINEANIMCMD_END + AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 16), + AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 32), + AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 16), + AFFINEANIMCMD_END }; static const union AffineAnimCmd sSpriteAffineAnim_8411F30[] = { - AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 8), - AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 16), - AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 8), - AFFINEANIMCMD_END + AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 8), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 16), + AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 8), + AFFINEANIMCMD_END }; static const union AffineAnimCmd sSpriteAffineAnim_8411F50[] = { - AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), - AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 8), - AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 16), - AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 8), - AFFINEANIMCMD_END + AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 8), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 16), + AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 8), + AFFINEANIMCMD_END }; static const union AffineAnimCmd sSpriteAffineAnim_8411F78[] = { - AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 8), - AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 32), - AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 8), - AFFINEANIMCMD_END + AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 8), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 32), + AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 8), + AFFINEANIMCMD_END }; static const union AffineAnimCmd sSpriteAffineAnim_8411F98[] = { - AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), - AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 8), - AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 32), - AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 8), - AFFINEANIMCMD_END + AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 8), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 32), + AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 8), + AFFINEANIMCMD_END }; static const union AffineAnimCmd sSpriteAffineAnim_8411FC0[] = { - AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 4), - AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 24), - AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 4), - AFFINEANIMCMD_END + AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 4), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 24), + AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 4), + AFFINEANIMCMD_END }; static const union AffineAnimCmd sSpriteAffineAnim_8411FE0[] = { - AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), - AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 4), - AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 24), - AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 4), - AFFINEANIMCMD_END + AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 4), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 24), + AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 4), + AFFINEANIMCMD_END }; static const union AffineAnimCmd sSpriteAffineAnim_8412008[] = { - AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 24), - AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 16), - AFFINEANIMCMD_FRAME(0x0, 0x0, -12, 2), - AFFINEANIMCMD_END + AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 24), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 16), + AFFINEANIMCMD_FRAME(0x0, 0x0, -12, 2), + AFFINEANIMCMD_END }; static const union AffineAnimCmd sSpriteAffineAnim_8412028[] = { - AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), - AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 24), - AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 16), - AFFINEANIMCMD_FRAME(0x0, 0x0, -12, 2), - AFFINEANIMCMD_END + AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 24), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 16), + AFFINEANIMCMD_FRAME(0x0, 0x0, -12, 2), + AFFINEANIMCMD_END }; static const union AffineAnimCmd *const sSpriteAffineAnimTable_8412050[] = { - sSpriteAffineAnim_8411E90, - sSpriteAffineAnim_8411EA0, - sSpriteAffineAnim_8411EE8, - sSpriteAffineAnim_8411F30, - sSpriteAffineAnim_8411F78, - sSpriteAffineAnim_8411FC0, - sSpriteAffineAnim_8412008, - sSpriteAffineAnim_8411E90, - sSpriteAffineAnim_8411E90, - sSpriteAffineAnim_8411E90, - sSpriteAffineAnim_8411E90, - sSpriteAffineAnim_8411EC0, - sSpriteAffineAnim_8411F08, - sSpriteAffineAnim_8411F50, - sSpriteAffineAnim_8411F98, - sSpriteAffineAnim_8411FE0, - sSpriteAffineAnim_8412028, - sSpriteAffineAnim_8411E90, - sSpriteAffineAnim_8411E90, - sSpriteAffineAnim_8411E90, - sSpriteAffineAnim_8411E90, + sSpriteAffineAnim_8411E90, + sSpriteAffineAnim_8411EA0, + sSpriteAffineAnim_8411EE8, + sSpriteAffineAnim_8411F30, + sSpriteAffineAnim_8411F78, + sSpriteAffineAnim_8411FC0, + sSpriteAffineAnim_8412008, + sSpriteAffineAnim_8411E90, + sSpriteAffineAnim_8411E90, + sSpriteAffineAnim_8411E90, + sSpriteAffineAnim_8411E90, + sSpriteAffineAnim_8411EC0, + sSpriteAffineAnim_8411F08, + sSpriteAffineAnim_8411F50, + sSpriteAffineAnim_8411F98, + sSpriteAffineAnim_8411FE0, + sSpriteAffineAnim_8412028, + sSpriteAffineAnim_8411E90, + sSpriteAffineAnim_8411E90, + sSpriteAffineAnim_8411E90, + sSpriteAffineAnim_8411E90, }; static const u8* const sPokeblocksPals[] = { gPokeblockRed_Pal, - gPokeblockBlue_Pal, - gPokeblockPink_Pal, - gPokeblockGreen_Pal, - gPokeblockYellow_Pal, - gPokeblockPurple_Pal, - gPokeblockIndigo_Pal, - gPokeblockBrown_Pal, - gPokeblockLiteBlue_Pal, - gPokeblockOlive_Pal, - gPokeblockGray_Pal, - gPokeblockBlack_Pal, - gPokeblockWhite_Pal, - gPokeblockGold_Pal + gPokeblockBlue_Pal, + gPokeblockPink_Pal, + gPokeblockGreen_Pal, + gPokeblockYellow_Pal, + gPokeblockPurple_Pal, + gPokeblockIndigo_Pal, + gPokeblockBrown_Pal, + gPokeblockLiteBlue_Pal, + gPokeblockOlive_Pal, + gPokeblockGray_Pal, + gPokeblockBlack_Pal, + gPokeblockWhite_Pal, + gPokeblockGold_Pal }; static const union AffineAnimCmd sSpriteAffineAnim_84120DC[] = @@ -391,31 +391,31 @@ static const union AffineAnimCmd *const sSpriteAffineAnimTable_84120EC[] = static const union AffineAnimCmd sSpriteAffineAnim_84120F0[] = { AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), - AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 1), - AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 1), - AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 1), - AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 1), - AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), - AFFINEANIMCMD_FRAME(0x0, 0x0, 16, 1), - AFFINEANIMCMD_FRAME(0x0, 0x0, 16, 1), - AFFINEANIMCMD_FRAME(0x0, 0x0, 16, 1), - AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), - AFFINEANIMCMD_END + AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 1), + AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 1), + AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 1), + AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 1), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_FRAME(0x0, 0x0, 16, 1), + AFFINEANIMCMD_FRAME(0x0, 0x0, 16, 1), + AFFINEANIMCMD_FRAME(0x0, 0x0, 16, 1), + AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), + AFFINEANIMCMD_END }; static const union AffineAnimCmd sSpriteAffineAnim_8412148[] = { AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), - AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 1), - AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 1), - AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 1), - AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 1), - AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), - AFFINEANIMCMD_FRAME(0x0, 0x0, -16, 1), - AFFINEANIMCMD_FRAME(0x0, 0x0, -16, 1), - AFFINEANIMCMD_FRAME(0x0, 0x0, -16, 1), - AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), - AFFINEANIMCMD_END + AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 1), + AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 1), + AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 1), + AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 1), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_FRAME(0x0, 0x0, -16, 1), + AFFINEANIMCMD_FRAME(0x0, 0x0, -16, 1), + AFFINEANIMCMD_FRAME(0x0, 0x0, -16, 1), + AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), + AFFINEANIMCMD_END }; static const union AffineAnimCmd *const sSpriteAffineAnimTable_84121A0[] = @@ -464,8 +464,8 @@ static const union AnimCmd *const sThrownPokeblockAnimTable[] = static const union AffineAnimCmd sSpriteAffineAnim_84121C0[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), - AFFINEANIMCMD_FRAME(-8, -8, 0, 1), - AFFINEANIMCMD_JUMP(1) + AFFINEANIMCMD_FRAME(-8, -8, 0, 1), + AFFINEANIMCMD_JUMP(1) }; static const union AffineAnimCmd *const sThrownPokeblockAffineAnimTable[] = diff --git a/src/rotating_gate.c b/src/rotating_gate.c index bb3c31dfc..b88add469 100644 --- a/src/rotating_gate.c +++ b/src/rotating_gate.c @@ -881,115 +881,115 @@ static int RotatingGate_CanRotate(u8 gateId, int rotationDirection) __attribute__((naked)) static int RotatingGate_CanRotate(u8 a, int puzzleType) { asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0xC\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - cmp r1, 0x1\n\ - bne _080C7EAC\n\ - ldr r0, _080C7EA8 @ =sRotatingGate_ArmPositionsAntiClockwiseRotation\n\ - mov r10, r0\n\ - b _080C7EB8\n\ - .align 2, 0\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0xC\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + cmp r1, 0x1\n\ + bne _080C7EAC\n\ + ldr r0, _080C7EA8 @ =sRotatingGate_ArmPositionsAntiClockwiseRotation\n\ + mov r10, r0\n\ + b _080C7EB8\n\ + .align 2, 0\n\ _080C7EA8: .4byte sRotatingGate_ArmPositionsAntiClockwiseRotation\n\ _080C7EAC:\n\ - cmp r1, 0x2\n\ - beq _080C7EB4\n\ + cmp r1, 0x2\n\ + beq _080C7EB4\n\ _080C7EB0:\n\ - movs r0, 0\n\ - b _080C7F48\n\ + movs r0, 0\n\ + b _080C7F48\n\ _080C7EB4:\n\ - ldr r1, _080C7F58 @ =sRotatingGate_ArmPositionsClockwiseRotation\n\ - mov r10, r1\n\ + ldr r1, _080C7F58 @ =sRotatingGate_ArmPositionsClockwiseRotation\n\ + mov r10, r1\n\ _080C7EB8:\n\ - adds r0, r4, 0\n\ - bl RotatingGate_GetGateOrientation\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - str r0, [sp]\n\ - ldr r0, _080C7F5C @ =gRotatingGate_PuzzleConfig\n\ - ldr r1, [r0]\n\ - lsls r0, r4, 3\n\ - adds r0, r1\n\ - ldrb r2, [r0, 0x4]\n\ - ldrh r1, [r0]\n\ - adds r1, 0x7\n\ - ldrh r0, [r0, 0x2]\n\ - adds r0, 0x7\n\ - movs r3, 0\n\ - lsls r2, 3\n\ - str r2, [sp, 0x4]\n\ - lsls r1, 16\n\ - asrs r1, 16\n\ - mov r9, r1\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - mov r8, r0\n\ + adds r0, r4, 0\n\ + bl RotatingGate_GetGateOrientation\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + str r0, [sp]\n\ + ldr r0, _080C7F5C @ =gRotatingGate_PuzzleConfig\n\ + ldr r1, [r0]\n\ + lsls r0, r4, 3\n\ + adds r0, r1\n\ + ldrb r2, [r0, 0x4]\n\ + ldrh r1, [r0]\n\ + adds r1, 0x7\n\ + ldrh r0, [r0, 0x2]\n\ + adds r0, 0x7\n\ + movs r3, 0\n\ + lsls r2, 3\n\ + str r2, [sp, 0x4]\n\ + lsls r1, 16\n\ + asrs r1, 16\n\ + mov r9, r1\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + mov r8, r0\n\ _080C7EE8:\n\ - movs r6, 0\n\ - ldr r2, [sp]\n\ - adds r7, r2, r3\n\ - lsls r0, r3, 1\n\ - adds r5, r7, 0\n\ - ldr r1, [sp, 0x4]\n\ - adds r0, r1\n\ - ldr r2, _080C7F60 @ =sRotatingGate_ArmLayout\n\ - adds r4, r0, r2\n\ + movs r6, 0\n\ + ldr r2, [sp]\n\ + adds r7, r2, r3\n\ + lsls r0, r3, 1\n\ + adds r5, r7, 0\n\ + ldr r1, [sp, 0x4]\n\ + adds r0, r1\n\ + ldr r2, _080C7F60 @ =sRotatingGate_ArmLayout\n\ + adds r4, r0, r2\n\ _080C7EFA:\n\ - adds r0, r5, 0\n\ - cmp r5, 0\n\ - bge _080C7F02\n\ - adds r0, r7, 0x3\n\ + adds r0, r5, 0\n\ + cmp r5, 0\n\ + bge _080C7F02\n\ + adds r0, r7, 0x3\n\ _080C7F02:\n\ - asrs r0, 2\n\ - lsls r0, 2\n\ - subs r0, r5, r0\n\ - lsls r0, 1\n\ - adds r0, r6\n\ - lsls r0, 24\n\ - lsrs r1, r0, 24\n\ - ldrb r0, [r4]\n\ - cmp r0, 0\n\ - beq _080C7F38\n\ - lsls r1, 2\n\ - add r1, r10\n\ - movs r0, 0\n\ - ldrsb r0, [r1, r0]\n\ - add r0, r9\n\ - ldrb r1, [r1, 0x1]\n\ - lsls r1, 24\n\ - asrs r1, 24\n\ - add r1, r8\n\ - str r3, [sp, 0x8]\n\ - bl MapGridIsImpassableAt\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - ldr r3, [sp, 0x8]\n\ - cmp r0, 0x1\n\ - beq _080C7EB0\n\ + asrs r0, 2\n\ + lsls r0, 2\n\ + subs r0, r5, r0\n\ + lsls r0, 1\n\ + adds r0, r6\n\ + lsls r0, 24\n\ + lsrs r1, r0, 24\n\ + ldrb r0, [r4]\n\ + cmp r0, 0\n\ + beq _080C7F38\n\ + lsls r1, 2\n\ + add r1, r10\n\ + movs r0, 0\n\ + ldrsb r0, [r1, r0]\n\ + add r0, r9\n\ + ldrb r1, [r1, 0x1]\n\ + lsls r1, 24\n\ + asrs r1, 24\n\ + add r1, r8\n\ + str r3, [sp, 0x8]\n\ + bl MapGridIsImpassableAt\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + ldr r3, [sp, 0x8]\n\ + cmp r0, 0x1\n\ + beq _080C7EB0\n\ _080C7F38:\n\ - adds r4, 0x1\n\ - adds r6, 0x1\n\ - cmp r6, 0x1\n\ - ble _080C7EFA\n\ - adds r3, 0x1\n\ - cmp r3, 0x3\n\ - ble _080C7EE8\n\ - movs r0, 0x1\n\ + adds r4, 0x1\n\ + adds r6, 0x1\n\ + cmp r6, 0x1\n\ + ble _080C7EFA\n\ + adds r3, 0x1\n\ + cmp r3, 0x3\n\ + ble _080C7EE8\n\ + movs r0, 0x1\n\ _080C7F48:\n\ - add sp, 0xC\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\ + add sp, 0xC\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\ _080C7F58: .4byte sRotatingGate_ArmPositionsClockwiseRotation\n\ _080C7F5C: .4byte gRotatingGate_PuzzleConfig\n\ _080C7F60: .4byte sRotatingGate_ArmLayout\n\ @@ -1016,45 +1016,45 @@ static int RotatingGate_HasArm(u8 gateId, u8 armInfo) __attribute__((naked)) static int RotatingGate_HasArm(u8 a, u8 b) { asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - adds r4, r1, 0\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - adds r6, r0, 0\n\ - lsls r4, 24\n\ - lsrs r5, r4, 24\n\ - lsrs r4, 25\n\ - movs r0, 0x1\n\ - ands r5, r0\n\ - adds r0, r6, 0\n\ - bl RotatingGate_GetGateOrientation\n\ - subs r4, r0\n\ - adds r1, r4, 0x4\n\ - adds r0, r1, 0\n\ - cmp r1, 0\n\ - bge _080C7F8A\n\ - adds r0, r4, 0x7\n\ + push {r4-r6,lr}\n\ + adds r4, r1, 0\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + adds r6, r0, 0\n\ + lsls r4, 24\n\ + lsrs r5, r4, 24\n\ + lsrs r4, 25\n\ + movs r0, 0x1\n\ + ands r5, r0\n\ + adds r0, r6, 0\n\ + bl RotatingGate_GetGateOrientation\n\ + subs r4, r0\n\ + adds r1, r4, 0x4\n\ + adds r0, r1, 0\n\ + cmp r1, 0\n\ + bge _080C7F8A\n\ + adds r0, r4, 0x7\n\ _080C7F8A:\n\ - asrs r0, 2\n\ - lsls r0, 2\n\ - subs r0, r1, r0\n\ - ldr r1, _080C7FB0 @ =gRotatingGate_PuzzleConfig\n\ - ldr r2, [r1]\n\ - lsls r1, r6, 3\n\ - adds r1, r2\n\ - ldrb r1, [r1, 0x4]\n\ - ldr r2, _080C7FB4 @ =sRotatingGate_ArmLayout\n\ - lsls r0, 24\n\ - asrs r0, 23\n\ - adds r0, r5\n\ - lsls r1, 3\n\ - adds r0, r1\n\ - adds r0, r2\n\ - ldrb r0, [r0]\n\ - pop {r4-r6}\n\ - pop {r1}\n\ - bx r1\n\ - .align 2, 0\n\ + asrs r0, 2\n\ + lsls r0, 2\n\ + subs r0, r1, r0\n\ + ldr r1, _080C7FB0 @ =gRotatingGate_PuzzleConfig\n\ + ldr r2, [r1]\n\ + lsls r1, r6, 3\n\ + adds r1, r2\n\ + ldrb r1, [r1, 0x4]\n\ + ldr r2, _080C7FB4 @ =sRotatingGate_ArmLayout\n\ + lsls r0, 24\n\ + asrs r0, 23\n\ + adds r0, r5\n\ + lsls r1, 3\n\ + adds r0, r1\n\ + adds r0, r2\n\ + ldrb r0, [r0]\n\ + pop {r4-r6}\n\ + pop {r1}\n\ + bx r1\n\ + .align 2, 0\n\ _080C7FB0: .4byte gRotatingGate_PuzzleConfig\n\ _080C7FB4: .4byte sRotatingGate_ArmLayout\n\ .syntax divided\n"); @@ -1095,53 +1095,53 @@ static u8 RotatingGate_GetRotationInfo(u8 direction, s16 x, s16 y) __attribute__((naked)) static u8 RotatingGate_GetRotationInfo(u8 a, s16 b, s16 c) { asm(".syntax unified\n\ - push {lr}\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - adds r3, r0, 0\n\ - lsls r1, 16\n\ - lsrs r1, 16\n\ - lsls r2, 16\n\ - lsrs r2, 16\n\ - cmp r0, 0x2\n\ - bne _080C8008\n\ - ldr r3, _080C8004 @ =sRotatingGate_RotationInfoNorth\n\ - b _080C802A\n\ - .align 2, 0\n\ + push {lr}\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + adds r3, r0, 0\n\ + lsls r1, 16\n\ + lsrs r1, 16\n\ + lsls r2, 16\n\ + lsrs r2, 16\n\ + cmp r0, 0x2\n\ + bne _080C8008\n\ + ldr r3, _080C8004 @ =sRotatingGate_RotationInfoNorth\n\ + b _080C802A\n\ + .align 2, 0\n\ _080C8004: .4byte sRotatingGate_RotationInfoNorth\n\ _080C8008:\n\ - cmp r0, 0x1\n\ - bne _080C8014\n\ - ldr r3, _080C8010 @ =sRotatingGate_RotationInfoSouth\n\ - b _080C802A\n\ - .align 2, 0\n\ + cmp r0, 0x1\n\ + bne _080C8014\n\ + ldr r3, _080C8010 @ =sRotatingGate_RotationInfoSouth\n\ + b _080C802A\n\ + .align 2, 0\n\ _080C8010: .4byte sRotatingGate_RotationInfoSouth\n\ _080C8014:\n\ - cmp r0, 0x3\n\ - bne _080C8020\n\ - ldr r3, _080C801C @ =sRotatingGate_RotationInfoWest\n\ - b _080C802A\n\ - .align 2, 0\n\ + cmp r0, 0x3\n\ + bne _080C8020\n\ + ldr r3, _080C801C @ =sRotatingGate_RotationInfoWest\n\ + b _080C802A\n\ + .align 2, 0\n\ _080C801C: .4byte sRotatingGate_RotationInfoWest\n\ _080C8020:\n\ - cmp r3, 0x4\n\ - beq _080C8028\n\ - movs r0, 0xFF\n\ - b _080C8038\n\ + cmp r3, 0x4\n\ + beq _080C8028\n\ + movs r0, 0xFF\n\ + b _080C8038\n\ _080C8028:\n\ - ldr r3, _080C803C @ =sRotatingGate_RotationInfoEast\n\ + ldr r3, _080C803C @ =sRotatingGate_RotationInfoEast\n\ _080C802A:\n\ - lsls r0, r2, 16\n\ - lsls r1, 16\n\ - asrs r1, 16\n\ - asrs r0, 14\n\ - adds r0, r1\n\ - adds r0, r3, r0\n\ - ldrb r0, [r0]\n\ + lsls r0, r2, 16\n\ + lsls r1, 16\n\ + asrs r1, 16\n\ + asrs r0, 14\n\ + adds r0, r1\n\ + adds r0, r3, r0\n\ + ldrb r0, [r0]\n\ _080C8038:\n\ - pop {r1}\n\ - bx r1\n\ - .align 2, 0\n\ + pop {r1}\n\ + bx r1\n\ + .align 2, 0\n\ _080C803C: .4byte sRotatingGate_RotationInfoEast\n\ .syntax divided\n"); } diff --git a/src/script_menu.c b/src/script_menu.c index f4ac55fb9..6e1a12a60 100644 --- a/src/script_menu.c +++ b/src/script_menu.c @@ -901,162 +901,162 @@ void CreatePCMenu(void) #elif GERMAN __attribute__((naked)) void CreatePCMenu(void) { - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - sub sp, 0x18\n\ - ldr r0, _080B5748 @ =0x0000084b\n\ - bl FlagGet\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080B5750\n\ - ldr r0, _080B574C @ =gPCText_LanettesPC\n\ - b _080B5752\n\ - .align 2, 0\n\ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + sub sp, 0x18\n\ + ldr r0, _080B5748 @ =0x0000084b\n\ + bl FlagGet\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080B5750\n\ + ldr r0, _080B574C @ =gPCText_LanettesPC\n\ + b _080B5752\n\ + .align 2, 0\n\ _080B5748: .4byte 0x0000084b\n\ _080B574C: .4byte gPCText_LanettesPC\n\ _080B5750:\n\ - ldr r0, _080B57E8 @ =gPCText_SomeonesPC\n\ + ldr r0, _080B57E8 @ =gPCText_SomeonesPC\n\ _080B5752:\n\ - bl GetStringWidthInTilesForScriptMenu\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - str r0, [sp, 0x8]\n\ - movs r4, 0x1\n\ - ldr r0, _080B57EC @ =gPCText_PlayersPC\n\ - bl GetStringWidthInTilesForScriptMenu\n\ - lsls r1, r4, 2\n\ - add r1, sp\n\ - adds r1, 0x8\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - str r0, [r1]\n\ - ldr r0, _080B57F0 @ =gPCText_LogOff\n\ - bl GetStringWidthInTilesForScriptMenu\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - str r0, [sp, 0x10]\n\ - movs r4, 0x3\n\ - ldr r0, _080B57F4 @ =0x00000804\n\ - bl FlagGet\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080B5798\n\ - ldr r0, _080B57F8 @ =gPCText_HallOfFame\n\ - bl GetStringWidthInTilesForScriptMenu\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - str r0, [sp, 0x14]\n\ - movs r4, 0x4\n\ + bl GetStringWidthInTilesForScriptMenu\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + str r0, [sp, 0x8]\n\ + movs r4, 0x1\n\ + ldr r0, _080B57EC @ =gPCText_PlayersPC\n\ + bl GetStringWidthInTilesForScriptMenu\n\ + lsls r1, r4, 2\n\ + add r1, sp\n\ + adds r1, 0x8\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + str r0, [r1]\n\ + ldr r0, _080B57F0 @ =gPCText_LogOff\n\ + bl GetStringWidthInTilesForScriptMenu\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + str r0, [sp, 0x10]\n\ + movs r4, 0x3\n\ + ldr r0, _080B57F4 @ =0x00000804\n\ + bl FlagGet\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080B5798\n\ + ldr r0, _080B57F8 @ =gPCText_HallOfFame\n\ + bl GetStringWidthInTilesForScriptMenu\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + str r0, [sp, 0x14]\n\ + movs r4, 0x4\n\ _080B5798:\n\ - movs r5, 0\n\ - cmp r5, r4\n\ - bge _080B57B4\n\ - add r2, sp, 0x8\n\ - adds r1, r4, 0\n\ + movs r5, 0\n\ + cmp r5, r4\n\ + bge _080B57B4\n\ + add r2, sp, 0x8\n\ + adds r1, r4, 0\n\ _080B57A2:\n\ - ldr r0, [r2]\n\ - cmp r5, r0\n\ - bge _080B57AC\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ + ldr r0, [r2]\n\ + cmp r5, r0\n\ + bge _080B57AC\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ _080B57AC:\n\ - adds r2, 0x4\n\ - subs r1, 0x1\n\ - cmp r1, 0\n\ - bne _080B57A2\n\ + adds r2, 0x4\n\ + subs r1, 0x1\n\ + cmp r1, 0\n\ + bne _080B57A2\n\ _080B57B4:\n\ - ldr r0, _080B57F4 @ =0x00000804\n\ - bl FlagGet\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080B57FC\n\ - movs r7, 0x4\n\ - adds r4, r5, 0x2\n\ - lsls r2, r4, 24\n\ - lsrs r2, 24\n\ - movs r0, 0\n\ - movs r1, 0\n\ - movs r3, 0x9\n\ - bl MenuDrawTextWindow\n\ - ldr r0, _080B57F8 @ =gPCText_HallOfFame\n\ - movs r1, 0x1\n\ - movs r2, 0x5\n\ - bl MenuPrint\n\ - ldr r0, _080B57F0 @ =gPCText_LogOff\n\ - movs r1, 0x1\n\ - movs r2, 0x7\n\ - bl MenuPrint\n\ - b _080B5818\n\ - .align 2, 0\n\ + ldr r0, _080B57F4 @ =0x00000804\n\ + bl FlagGet\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080B57FC\n\ + movs r7, 0x4\n\ + adds r4, r5, 0x2\n\ + lsls r2, r4, 24\n\ + lsrs r2, 24\n\ + movs r0, 0\n\ + movs r1, 0\n\ + movs r3, 0x9\n\ + bl MenuDrawTextWindow\n\ + ldr r0, _080B57F8 @ =gPCText_HallOfFame\n\ + movs r1, 0x1\n\ + movs r2, 0x5\n\ + bl MenuPrint\n\ + ldr r0, _080B57F0 @ =gPCText_LogOff\n\ + movs r1, 0x1\n\ + movs r2, 0x7\n\ + bl MenuPrint\n\ + b _080B5818\n\ + .align 2, 0\n\ _080B57E8: .4byte gPCText_SomeonesPC\n\ _080B57EC: .4byte gPCText_PlayersPC\n\ _080B57F0: .4byte gPCText_LogOff\n\ _080B57F4: .4byte 0x00000804\n\ _080B57F8: .4byte gPCText_HallOfFame\n\ _080B57FC:\n\ - movs r7, 0x3\n\ - adds r4, r5, 0x2\n\ - lsls r2, r4, 24\n\ - lsrs r2, 24\n\ - movs r0, 0\n\ - movs r1, 0\n\ - movs r3, 0x7\n\ - bl MenuDrawTextWindow\n\ - ldr r0, _080B5834 @ =gPCText_LogOff\n\ - movs r1, 0x1\n\ - movs r2, 0x5\n\ - bl MenuPrint\n\ + movs r7, 0x3\n\ + adds r4, r5, 0x2\n\ + lsls r2, r4, 24\n\ + lsrs r2, 24\n\ + movs r0, 0\n\ + movs r1, 0\n\ + movs r3, 0x7\n\ + bl MenuDrawTextWindow\n\ + ldr r0, _080B5834 @ =gPCText_LogOff\n\ + movs r1, 0x1\n\ + movs r2, 0x5\n\ + bl MenuPrint\n\ _080B5818:\n\ - adds r6, r4, 0\n\ - ldr r0, _080B5838 @ =0x0000084b\n\ - bl FlagGet\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080B5840\n\ - ldr r0, _080B583C @ =gPCText_LanettesPC\n\ - movs r1, 0x1\n\ - movs r2, 0x1\n\ - bl MenuPrint\n\ - b _080B584A\n\ - .align 2, 0\n\ + adds r6, r4, 0\n\ + ldr r0, _080B5838 @ =0x0000084b\n\ + bl FlagGet\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080B5840\n\ + ldr r0, _080B583C @ =gPCText_LanettesPC\n\ + movs r1, 0x1\n\ + movs r2, 0x1\n\ + bl MenuPrint\n\ + b _080B584A\n\ + .align 2, 0\n\ _080B5834: .4byte gPCText_LogOff\n\ _080B5838: .4byte 0x0000084b\n\ _080B583C: .4byte gPCText_LanettesPC\n\ _080B5840:\n\ - ldr r0, _080B5888 @ =gPCText_SomeonesPC\n\ - movs r1, 0x1\n\ - movs r2, 0x1\n\ - bl MenuPrint\n\ + ldr r0, _080B5888 @ =gPCText_SomeonesPC\n\ + movs r1, 0x1\n\ + movs r2, 0x1\n\ + bl MenuPrint\n\ _080B584A:\n\ - ldr r0, _080B588C @ =gPCText_PlayersPC\n\ - movs r1, 0x1\n\ - movs r2, 0x3\n\ - bl MenuPrint\n\ - movs r4, 0\n\ - str r4, [sp]\n\ - adds r0, r5, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - str r0, [sp, 0x4]\n\ - movs r0, 0\n\ - movs r1, 0x1\n\ - movs r2, 0x1\n\ - adds r3, r7, 0\n\ - bl InitMenu\n\ - lsls r2, r6, 24\n\ - lsrs r2, 24\n\ - lsls r3, r7, 1\n\ - adds r3, 0x1\n\ - str r4, [sp]\n\ - str r7, [sp, 0x4]\n\ - movs r0, 0\n\ - movs r1, 0\n\ - bl sub_80B5230\n\ - add sp, 0x18\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ + ldr r0, _080B588C @ =gPCText_PlayersPC\n\ + movs r1, 0x1\n\ + movs r2, 0x3\n\ + bl MenuPrint\n\ + movs r4, 0\n\ + str r4, [sp]\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + str r0, [sp, 0x4]\n\ + movs r0, 0\n\ + movs r1, 0x1\n\ + movs r2, 0x1\n\ + adds r3, r7, 0\n\ + bl InitMenu\n\ + lsls r2, r6, 24\n\ + lsrs r2, 24\n\ + lsls r3, r7, 1\n\ + adds r3, 0x1\n\ + str r4, [sp]\n\ + str r7, [sp, 0x4]\n\ + movs r0, 0\n\ + movs r1, 0\n\ + bl sub_80B5230\n\ + add sp, 0x18\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ _080B5888: .4byte gPCText_SomeonesPC\n\ _080B588C: .4byte gPCText_PlayersPC\n\ .syntax divided\n"); diff --git a/src/title_screen.c b/src/title_screen.c index ab0f1d505..2503b0654 100644 --- a/src/title_screen.c +++ b/src/title_screen.c @@ -437,99 +437,99 @@ __attribute__((naked)) static void CreatePressStartBanner(s16 x, s16 y) { 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\ - lsls r0, 16\n\ - ldr r2, _0807C3AC @ =0xffe00000\n\ - adds r0, r2\n\ - lsrs r0, 16\n\ - movs r6, 0\n\ - lsls r1, 16\n\ - mov r10, r1\n\ - mov r8, r10\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + lsls r0, 16\n\ + ldr r2, _0807C3AC @ =0xffe00000\n\ + adds r0, r2\n\ + lsrs r0, 16\n\ + movs r6, 0\n\ + lsls r1, 16\n\ + mov r10, r1\n\ + mov r8, r10\n\ _0807C302:\n\ - lsls r5, r0, 16\n\ - asrs r5, 16\n\ - ldr r0, _0807C3B0 @ =sStartCopyrightBannerSpriteTemplate\n\ - adds r1, r5, 0\n\ - mov r3, r8\n\ - asrs r2, r3, 16\n\ - movs r3, 0\n\ - bl CreateSprite\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - lsls r4, r0, 4\n\ - adds r4, r0\n\ - lsls r4, 2\n\ - ldr r0, _0807C3B4 @ =gSprites\n\ - mov r9, r0\n\ - add r4, r9\n\ - adds r0, r4, 0\n\ - adds r1, r6, 0\n\ - bl StartSpriteAnim\n\ - movs r7, 0x1\n\ - strh r7, [r4, 0x2E]\n\ - adds r0, r6, 0x1\n\ - lsls r0, 24\n\ - lsrs r6, r0, 24\n\ - adds r5, 0x20\n\ - lsls r5, 16\n\ - lsrs r0, r5, 16\n\ - cmp r6, 0x2\n\ - bls _0807C302\n\ - ldr r1, _0807C3B0 @ =sStartCopyrightBannerSpriteTemplate\n\ - mov r8, r1\n\ - lsls r5, r0, 16\n\ - asrs r5, 16\n\ - mov r2, r10\n\ - asrs r6, r2, 16\n\ - mov r0, r8\n\ - adds r1, r5, 0\n\ - adds r2, r6, 0\n\ - movs r3, 0\n\ - bl CreateSprite\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - lsls r4, r0, 4\n\ - adds r4, r0\n\ - lsls r4, 2\n\ - add r4, r9\n\ - adds r0, r4, 0\n\ - movs r1, 0x8\n\ - bl StartSpriteAnim\n\ - strh r7, [r4, 0x2E]\n\ - subs r5, 0x60\n\ - lsls r5, 16\n\ - asrs r5, 16\n\ - subs r6, 0x8\n\ - lsls r6, 16\n\ - asrs r6, 16\n\ - mov r0, r8\n\ - adds r1, r5, 0\n\ - adds r2, r6, 0\n\ - movs r3, 0\n\ - bl CreateSprite\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - lsls r4, r0, 4\n\ - adds r4, r0\n\ - lsls r4, 2\n\ - add r4, r9\n\ - adds r0, r4, 0\n\ - movs r1, 0x9\n\ - bl StartSpriteAnim\n\ - strh r7, [r4, 0x2E]\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\ + lsls r5, r0, 16\n\ + asrs r5, 16\n\ + ldr r0, _0807C3B0 @ =sStartCopyrightBannerSpriteTemplate\n\ + adds r1, r5, 0\n\ + mov r3, r8\n\ + asrs r2, r3, 16\n\ + movs r3, 0\n\ + bl CreateSprite\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + lsls r4, r0, 4\n\ + adds r4, r0\n\ + lsls r4, 2\n\ + ldr r0, _0807C3B4 @ =gSprites\n\ + mov r9, r0\n\ + add r4, r9\n\ + adds r0, r4, 0\n\ + adds r1, r6, 0\n\ + bl StartSpriteAnim\n\ + movs r7, 0x1\n\ + strh r7, [r4, 0x2E]\n\ + adds r0, r6, 0x1\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + adds r5, 0x20\n\ + lsls r5, 16\n\ + lsrs r0, r5, 16\n\ + cmp r6, 0x2\n\ + bls _0807C302\n\ + ldr r1, _0807C3B0 @ =sStartCopyrightBannerSpriteTemplate\n\ + mov r8, r1\n\ + lsls r5, r0, 16\n\ + asrs r5, 16\n\ + mov r2, r10\n\ + asrs r6, r2, 16\n\ + mov r0, r8\n\ + adds r1, r5, 0\n\ + adds r2, r6, 0\n\ + movs r3, 0\n\ + bl CreateSprite\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + lsls r4, r0, 4\n\ + adds r4, r0\n\ + lsls r4, 2\n\ + add r4, r9\n\ + adds r0, r4, 0\n\ + movs r1, 0x8\n\ + bl StartSpriteAnim\n\ + strh r7, [r4, 0x2E]\n\ + subs r5, 0x60\n\ + lsls r5, 16\n\ + asrs r5, 16\n\ + subs r6, 0x8\n\ + lsls r6, 16\n\ + asrs r6, 16\n\ + mov r0, r8\n\ + adds r1, r5, 0\n\ + adds r2, r6, 0\n\ + movs r3, 0\n\ + bl CreateSprite\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + lsls r4, r0, 4\n\ + adds r4, r0\n\ + lsls r4, 2\n\ + add r4, r9\n\ + adds r0, r4, 0\n\ + movs r1, 0x9\n\ + bl StartSpriteAnim\n\ + strh r7, [r4, 0x2E]\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\ _0807C3AC: .4byte 0xffe00000\n\ _0807C3B0: .4byte sStartCopyrightBannerSpriteTemplate\n\ _0807C3B4: .4byte gSprites\n\ -- cgit v1.2.3 From c6e0f8cfd74c83165838e227efba27a8f9166133 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 28 Aug 2017 21:09:02 +0200 Subject: start decomp of pokemon menu --- asm/pokemon_menu.s | 389 ++++++------------------------------------------- data/pokemon_menu.s | 4 +- include/pokemon_menu.h | 25 ++++ ld_script.txt | 1 + src/pokemon_menu.c | 92 ++++++++++++ sym_ewram.txt | 11 +- 6 files changed, 168 insertions(+), 354 deletions(-) create mode 100644 src/pokemon_menu.c diff --git a/asm/pokemon_menu.s b/asm/pokemon_menu.s index fe1b41724..28436e446 100644 --- a/asm/pokemon_menu.s +++ b/asm/pokemon_menu.s @@ -6,305 +6,10 @@ .text - thumb_func_start sub_8089A70 -sub_8089A70: @ 8089A70 - push {lr} - ldr r0, _08089A88 @ =gPaletteFade - ldrb r1, [r0, 0x8] - movs r2, 0x80 - orrs r1, r2 - strb r1, [r0, 0x8] - movs r0, 0 - movs r1, 0 - bl OpenPartyMenu - pop {r0} - bx r0 - .align 2, 0 -_08089A88: .4byte gPaletteFade - thumb_func_end sub_8089A70 - thumb_func_start sub_8089A8C -sub_8089A8C: @ 8089A8C - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r5, _08089AD0 @ =gUnknown_0202FFA9 - movs r0, 0 - strb r0, [r5] - ldr r0, _08089AD4 @ =gLastFieldPokeMenuOpened - ldrb r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08089AD8 @ =gPlayerParty - adds r0, r1 - movs r1, 0x2D - bl GetMonData - cmp r0, 0 - beq _08089AE0 - ldr r4, _08089ADC @ =gUnknown_0202FFAA - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0 - bl AppendToList - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0x1 - bl AppendToList - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0x3 - bl AppendToList - b _08089BC8 - .align 2, 0 -_08089AD0: .4byte gUnknown_0202FFA9 -_08089AD4: .4byte gLastFieldPokeMenuOpened -_08089AD8: .4byte gPlayerParty -_08089ADC: .4byte gUnknown_0202FFAA -_08089AE0: - movs r6, 0 - ldr r0, _08089B24 @ =gUnknown_0839F554 - ldrh r0, [r0] - mov r8, r0 -_08089AE8: - movs r4, 0 - adds r7, r6, 0x1 - mov r0, r8 - cmp r0, 0xFF - beq _08089B48 - ldr r5, _08089B24 @ =gUnknown_0839F554 -_08089AF4: - ldr r0, _08089B28 @ =gLastFieldPokeMenuOpened - ldrb r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08089B2C @ =gPlayerParty - adds r0, r1 - adds r1, r6, 0 - adds r1, 0xD - bl GetMonData - lsls r1, r4, 1 - adds r1, r5 - ldrh r1, [r1] - cmp r0, r1 - bne _08089B38 - adds r2, r4, 0 - adds r2, 0xA - lsls r2, 24 - lsrs r2, 24 - ldr r0, _08089B30 @ =gUnknown_0202FFAA - ldr r1, _08089B34 @ =gUnknown_0202FFA9 - bl AppendToList - b _08089B48 - .align 2, 0 -_08089B24: .4byte gUnknown_0839F554 -_08089B28: .4byte gLastFieldPokeMenuOpened -_08089B2C: .4byte gPlayerParty -_08089B30: .4byte gUnknown_0202FFAA -_08089B34: .4byte gUnknown_0202FFA9 -_08089B38: - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - lsls r0, r4, 1 - adds r0, r5 - ldrh r0, [r0] - cmp r0, 0xFF - bne _08089AF4 -_08089B48: - lsls r0, r7, 16 - lsrs r6, r0, 16 - cmp r6, 0x3 - bls _08089AE8 - ldr r4, _08089BA4 @ =gUnknown_0202FFAA - ldr r5, _08089BA8 @ =gUnknown_0202FFA9 - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0 - bl AppendToList - ldr r6, _08089BAC @ =gPlayerParty + 1 * 0x64 - adds r0, r6, 0 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _08089B76 - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0x1 - bl AppendToList -_08089B76: - ldr r0, _08089BB0 @ =gLastFieldPokeMenuOpened - ldrb r1, [r0] - movs r0, 0x64 - muls r0, r1 - adds r1, r6, 0 - subs r1, 0x64 - adds r0, r1 - movs r1, 0xC - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - bl ItemIsMail - lsls r0, 24 - cmp r0, 0 - beq _08089BB4 - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0x7 - bl AppendToList - b _08089BBE - .align 2, 0 -_08089BA4: .4byte gUnknown_0202FFAA -_08089BA8: .4byte gUnknown_0202FFA9 -_08089BAC: .4byte gPlayerParty + 1 * 0x64 -_08089BB0: .4byte gLastFieldPokeMenuOpened -_08089BB4: - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0x2 - bl AppendToList -_08089BBE: - ldr r0, _08089BD4 @ =gUnknown_0202FFAA - ldr r1, _08089BD8 @ =gUnknown_0202FFA9 - movs r2, 0x3 - bl AppendToList -_08089BC8: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08089BD4: .4byte gUnknown_0202FFAA -_08089BD8: .4byte gUnknown_0202FFA9 - thumb_func_end sub_8089A8C - - thumb_func_start sub_8089BDC -sub_8089BDC: @ 8089BDC - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - adds r5, r0, 0 - adds r6, r1, 0 - adds r4, r2, 0 - mov r8, r3 - ldr r7, [sp, 0x20] - ldr r1, [sp, 0x24] - lsls r5, 24 - lsrs r5, 24 - lsls r6, 24 - lsrs r6, 24 - lsls r4, 24 - lsrs r4, 24 - mov r0, r8 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r1, 24 - lsrs r1, 24 - movs r0, 0x5 - bl sub_806D538 - adds r4, r5, r4 - lsls r4, 24 - lsrs r4, 24 - mov r0, r8 - lsls r3, r0, 1 - adds r3, r6, r3 - adds r3, 0x1 - lsls r3, 24 - lsrs r3, 24 - adds r0, r5, 0 - adds r1, r6, 0 - adds r2, r4, 0 - bl MenuDrawTextWindow - adds r5, 0x1 - lsls r5, 24 - lsrs r5, 24 - adds r6, 0x1 - lsls r6, 24 - lsrs r6, 24 - str r7, [sp] - adds r0, r5, 0 - adds r1, r6, 0 - mov r2, r8 - ldr r3, [sp, 0x1C] - bl PrintMenuItemsReordered - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8089BDC - thumb_func_start sub_8089C50 -sub_8089C50: @ 8089C50 - push {r4,r5,lr} - sub sp, 0xC - ldr r4, [sp, 0x18] - ldr r5, [sp, 0x1C] - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - lsls r2, 24 - lsrs r2, 24 - lsls r3, 24 - lsrs r3, 24 - str r4, [sp] - str r5, [sp, 0x4] - movs r4, 0x1 - str r4, [sp, 0x8] - bl sub_8089BDC - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8089C50 - thumb_func_start sub_8089C7C -sub_8089C7C: @ 8089C7C - push {r4-r6,lr} - sub sp, 0xC - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - ldr r6, _08089CC8 @ =gUnknown_0202FFA9 - ldrb r0, [r6] - lsls r0, 1 - movs r4, 0x12 - subs r4, r0 - lsls r4, 24 - lsrs r4, 24 - ldrb r3, [r6] - ldr r0, _08089CCC @ =gPokemonMenuActions - str r0, [sp] - ldr r0, _08089CD0 @ =gUnknown_0202FFAA - str r0, [sp, 0x4] - movs r0, 0x3 - str r0, [sp, 0x8] - movs r0, 0x13 - adds r1, r4, 0 - movs r2, 0xA - bl sub_8089BDC - movs r2, 0x1 - orrs r2, r4 - ldrb r3, [r6] - str r5, [sp] - movs r0, 0x9 - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0x14 - bl InitMenu - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08089CC8: .4byte gUnknown_0202FFA9 -_08089CCC: .4byte gPokemonMenuActions -_08089CD0: .4byte gUnknown_0202FFAA - thumb_func_end sub_8089C7C + thumb_func_start sub_8089CD4 sub_8089CD4: @ 8089CD4 @@ -346,7 +51,7 @@ _08089D04: ldr r1, _08089D50 @ =gStringVar1 bl GetMonNickname bl sub_8089A8C - ldr r0, _08089D54 @ =gUnknown_0202FFA8 + ldr r0, _08089D54 @ =sPokeMenuCursorPos strb r5, [r0] movs r0, 0 bl sub_8089C7C @@ -364,7 +69,7 @@ _08089D04: _08089D48: .4byte gLastFieldPokeMenuOpened _08089D4C: .4byte gPlayerParty _08089D50: .4byte gStringVar1 -_08089D54: .4byte gUnknown_0202FFA8 +_08089D54: .4byte sPokeMenuCursorPos _08089D58: .4byte gTasks _08089D5C: .4byte sub_8089D94 _08089D60: @@ -417,13 +122,13 @@ sub_8089D94: @ 8089D94 movs r0, 0x1 negs r0, r0 bl MoveMenuCursor - ldr r1, _08089DD0 @ =gUnknown_0202FFA8 + ldr r1, _08089DD0 @ =sPokeMenuCursorPos strb r0, [r1] b _08089E1A .align 2, 0 _08089DC8: .4byte gPaletteFade _08089DCC: .4byte gMain -_08089DD0: .4byte gUnknown_0202FFA8 +_08089DD0: .4byte sPokeMenuCursorPos _08089DD4: cmp r1, 0x80 bne _08089DF0 @@ -431,11 +136,11 @@ _08089DD4: bl PlaySE movs r0, 0x1 bl MoveMenuCursor - ldr r1, _08089DEC @ =gUnknown_0202FFA8 + ldr r1, _08089DEC @ =sPokeMenuCursorPos strb r0, [r1] b _08089E1A .align 2, 0 -_08089DEC: .4byte gUnknown_0202FFA8 +_08089DEC: .4byte sPokeMenuCursorPos _08089DF0: ldrh r1, [r2, 0x2E] movs r0, 0x1 @@ -444,9 +149,9 @@ _08089DF0: beq _08089E30 movs r0, 0x5 bl PlaySE - ldr r1, _08089E24 @ =gPokemonMenuActions - ldr r2, _08089E28 @ =gUnknown_0202FFAA - ldr r0, _08089E2C @ =gUnknown_0202FFA8 + ldr r1, _08089E24 @ =sPokemonMenuActions + ldr r2, _08089E28 @ =sPokeMenuOptionsIDs + ldr r0, _08089E2C @ =sPokeMenuCursorPos ldrb r0, [r0] adds r0, r2 ldrb r0, [r0] @@ -461,9 +166,9 @@ _08089E1A: bl sub_808B5B4 b _08089E44 .align 2, 0 -_08089E24: .4byte gPokemonMenuActions -_08089E28: .4byte gUnknown_0202FFAA -_08089E2C: .4byte gUnknown_0202FFA8 +_08089E24: .4byte sPokemonMenuActions +_08089E28: .4byte sPokeMenuOptionsIDs +_08089E2C: .4byte sPokeMenuCursorPos _08089E30: movs r0, 0x2 ands r0, r1 @@ -520,7 +225,7 @@ sub_8089E84: @ 8089E84 ldr r1, _08089EB4 @ =gStringVar1 bl GetMonNickname bl sub_8089A8C - ldr r1, _08089EB8 @ =gUnknown_0202FFA8 + ldr r1, _08089EB8 @ =sPokeMenuCursorPos movs r0, 0 strb r0, [r1] movs r0, 0 @@ -531,7 +236,7 @@ sub_8089E84: @ 8089E84 _08089EAC: .4byte gLastFieldPokeMenuOpened _08089EB0: .4byte gPlayerParty _08089EB4: .4byte gStringVar1 -_08089EB8: .4byte gUnknown_0202FFA8 +_08089EB8: .4byte sPokeMenuCursorPos thumb_func_end sub_8089E84 thumb_func_start sub_8089EBC @@ -746,7 +451,7 @@ sub_808A060: @ 808A060 ldrh r0, [r0, 0x2E] cmp r0, 0x40 bne _0808A086 - ldr r4, _0808A0D4 @ =gUnknown_0202FFA8 + ldr r4, _0808A0D4 @ =sPokeMenuCursorPos ldrb r0, [r4] cmp r0, 0 beq _0808A086 @@ -761,7 +466,7 @@ _0808A086: ldrh r0, [r0, 0x2E] cmp r0, 0x80 bne _0808A0A4 - ldr r4, _0808A0D4 @ =gUnknown_0202FFA8 + ldr r4, _0808A0D4 @ =sPokeMenuCursorPos ldrb r0, [r4] cmp r0, 0x2 beq _0808A0A4 @@ -780,8 +485,8 @@ _0808A0A4: movs r0, 0x5 bl PlaySE ldr r1, _0808A0D8 @ =gUnknown_0839F578 - ldr r2, _0808A0DC @ =gPokemonMenuActions - ldr r0, _0808A0D4 @ =gUnknown_0202FFA8 + ldr r2, _0808A0DC @ =sPokemonMenuActions + ldr r0, _0808A0D4 @ =sPokeMenuCursorPos ldrb r3, [r0] movs r0, 0 bl PartyMenuGetPopupMenuFunc @@ -791,9 +496,9 @@ _0808A0A4: b _0808A0F6 .align 2, 0 _0808A0D0: .4byte gMain -_0808A0D4: .4byte gUnknown_0202FFA8 +_0808A0D4: .4byte sPokeMenuCursorPos _0808A0D8: .4byte gUnknown_0839F578 -_0808A0DC: .4byte gPokemonMenuActions +_0808A0DC: .4byte sPokemonMenuActions _0808A0E0: movs r0, 0x2 ands r0, r1 @@ -819,7 +524,7 @@ sub_808A100: @ 808A100 lsls r4, 24 lsrs r4, 24 ldr r1, _0808A130 @ =gUnknown_0839F578 - ldr r2, _0808A134 @ =gPokemonMenuActions + ldr r2, _0808A134 @ =sPokemonMenuActions movs r0, 0 movs r3, 0 bl sub_806E750 @@ -838,7 +543,7 @@ sub_808A100: @ 808A100 bx r0 .align 2, 0 _0808A130: .4byte gUnknown_0839F578 -_0808A134: .4byte gPokemonMenuActions +_0808A134: .4byte sPokemonMenuActions _0808A138: .4byte gTasks _0808A13C: .4byte sub_808A060 thumb_func_end sub_808A100 @@ -850,7 +555,7 @@ PokemonMenu_Item: @ 808A140 lsls r4, 24 lsrs r4, 24 bl HandleDestroyMenuCursors - ldr r1, _0808A174 @ =gUnknown_0202FFA8 + ldr r1, _0808A174 @ =sPokeMenuCursorPos movs r0, 0 strb r0, [r1] movs r0, 0x13 @@ -869,7 +574,7 @@ PokemonMenu_Item: @ 808A140 pop {r0} bx r0 .align 2, 0 -_0808A174: .4byte gUnknown_0202FFA8 +_0808A174: .4byte sPokeMenuCursorPos _0808A178: .4byte gTasks _0808A17C: .4byte sub_808A100 thumb_func_end PokemonMenu_Item @@ -1544,7 +1249,7 @@ PokemonMenu_Mail: @ 808A6E8 lsls r4, 24 lsrs r4, 24 bl HandleDestroyMenuCursors - ldr r1, _0808A728 @ =gUnknown_0202FFA8 + ldr r1, _0808A728 @ =sPokeMenuCursorPos movs r0, 0 strb r0, [r1] movs r0, 0x13 @@ -1553,7 +1258,7 @@ PokemonMenu_Mail: @ 808A6E8 movs r3, 0x13 bl MenuZeroFillWindowRect ldr r1, _0808A72C @ =gUnknown_0839F584 - ldr r2, _0808A730 @ =gPokemonMenuActions + ldr r2, _0808A730 @ =sPokemonMenuActions movs r0, 0 movs r3, 0 bl sub_806E750 @@ -1568,9 +1273,9 @@ PokemonMenu_Mail: @ 808A6E8 pop {r0} bx r0 .align 2, 0 -_0808A728: .4byte gUnknown_0202FFA8 +_0808A728: .4byte sPokeMenuCursorPos _0808A72C: .4byte gUnknown_0839F584 -_0808A730: .4byte gPokemonMenuActions +_0808A730: .4byte sPokemonMenuActions _0808A734: .4byte gTasks _0808A738: .4byte sub_808A73C thumb_func_end PokemonMenu_Mail @@ -1586,7 +1291,7 @@ sub_808A73C: @ 808A73C bne _0808A77A movs r0, 0x5 bl PlaySE - ldr r4, _0808A768 @ =gUnknown_0202FFA8 + ldr r4, _0808A768 @ =sPokeMenuCursorPos ldrb r0, [r4] cmp r0, 0 bne _0808A770 @@ -1598,7 +1303,7 @@ sub_808A73C: @ 808A73C b _0808A774 .align 2, 0 _0808A764: .4byte gMain -_0808A768: .4byte gUnknown_0202FFA8 +_0808A768: .4byte sPokeMenuCursorPos _0808A76C: .4byte gUnknown_0839F584 _0808A770: movs r0, 0x1 @@ -1613,7 +1318,7 @@ _0808A77A: bne _0808A7B4 movs r0, 0x5 bl PlaySE - ldr r4, _0808A7A4 @ =gUnknown_0202FFA8 + ldr r4, _0808A7A4 @ =sPokeMenuCursorPos ldrb r0, [r4] ldr r1, _0808A7A8 @ =gUnknown_0839F584 ldrb r2, [r1] @@ -1627,7 +1332,7 @@ _0808A77A: b _0808A7AE .align 2, 0 _0808A7A0: .4byte gMain -_0808A7A4: .4byte gUnknown_0202FFA8 +_0808A7A4: .4byte sPokeMenuCursorPos _0808A7A8: .4byte gUnknown_0839F584 _0808A7AC: movs r0, 0x1 @@ -1644,8 +1349,8 @@ _0808A7B4: movs r0, 0x5 bl PlaySE ldr r1, _0808A7E4 @ =gUnknown_0839F584 - ldr r2, _0808A7E8 @ =gPokemonMenuActions - ldr r0, _0808A7EC @ =gUnknown_0202FFA8 + ldr r2, _0808A7E8 @ =sPokemonMenuActions + ldr r0, _0808A7EC @ =sPokeMenuCursorPos ldrb r3, [r0] movs r0, 0 bl PartyMenuGetPopupMenuFunc @@ -1656,8 +1361,8 @@ _0808A7B4: .align 2, 0 _0808A7E0: .4byte gMain _0808A7E4: .4byte gUnknown_0839F584 -_0808A7E8: .4byte gPokemonMenuActions -_0808A7EC: .4byte gUnknown_0202FFA8 +_0808A7E8: .4byte sPokemonMenuActions +_0808A7EC: .4byte sPokeMenuCursorPos _0808A7F0: movs r0, 0x2 ands r0, r1 @@ -1779,7 +1484,7 @@ sub_808A8D4: @ 808A8D4 adds r4, r0, 0 lsls r4, 24 lsrs r4, 24 - ldr r1, _0808A90C @ =gUnknown_0202FFA8 + ldr r1, _0808A90C @ =sPokeMenuCursorPos movs r0, 0 strb r0, [r1] movs r0, 0x13 @@ -1801,7 +1506,7 @@ sub_808A8D4: @ 808A8D4 pop {r0} bx r0 .align 2, 0 -_0808A90C: .4byte gUnknown_0202FFA8 +_0808A90C: .4byte sPokeMenuCursorPos _0808A910: .4byte gTasks _0808A914: .4byte sub_8089CD4 thumb_func_end sub_808A8D4 @@ -1837,7 +1542,7 @@ PokemonMenu_CancelSubmenu: @ 808A938 movs r3, 0x13 bl MenuZeroFillWindowRect bl sub_806D5A4 - ldr r0, _0808A978 @ =gUnknown_0202FFA8 + ldr r0, _0808A978 @ =sPokeMenuCursorPos ldrb r0, [r0] bl sub_8089C7C ldr r1, _0808A97C @ =gTasks @@ -1851,7 +1556,7 @@ PokemonMenu_CancelSubmenu: @ 808A938 pop {r0} bx r0 .align 2, 0 -_0808A978: .4byte gUnknown_0202FFA8 +_0808A978: .4byte sPokeMenuCursorPos _0808A97C: .4byte gTasks _0808A980: .4byte sub_8089D94 thumb_func_end PokemonMenu_CancelSubmenu @@ -1868,8 +1573,8 @@ PokemonMenu_FieldMove: @ 808A984 ldr r7, _0808A9D0 @ =gTasks + 0x8 adds r4, r6, r7 bl HandleDestroyMenuCursors - ldr r1, _0808A9D4 @ =gUnknown_0202FFAA - ldr r0, _0808A9D8 @ =gUnknown_0202FFA8 + ldr r1, _0808A9D4 @ =sPokeMenuOptionsIDs + ldr r0, _0808A9D8 @ =sPokeMenuCursorPos ldrb r0, [r0] adds r0, r1 ldrb r0, [r0] @@ -1895,8 +1600,8 @@ PokemonMenu_FieldMove: @ 808A984 b _0808AAB2 .align 2, 0 _0808A9D0: .4byte gTasks + 0x8 -_0808A9D4: .4byte gUnknown_0202FFAA -_0808A9D8: .4byte gUnknown_0202FFA8 +_0808A9D4: .4byte sPokeMenuOptionsIDs +_0808A9D8: .4byte sPokeMenuCursorPos _0808A9DC: ldrh r1, [r4, 0x16] movs r2, 0x16 @@ -1943,7 +1648,7 @@ _0808AA2C: lsrs r0, 24 cmp r0, 0x1 bne _0808AA90 - ldr r1, _0808AA7C @ =gUnknown_0202FFA8 + ldr r1, _0808AA7C @ =sPokeMenuCursorPos movs r0, 0 strb r0, [r1] ldrh r0, [r4, 0x16] @@ -1969,7 +1674,7 @@ _0808AA2C: b _0808AADA .align 2, 0 _0808AA78: .4byte gFieldMoveFuncs -_0808AA7C: .4byte gUnknown_0202FFA8 +_0808AA7C: .4byte sPokeMenuCursorPos _0808AA80: .4byte gTasks _0808AA84: .4byte sub_808AB34 _0808AA88: diff --git a/data/pokemon_menu.s b/data/pokemon_menu.s index 9e2ce2864..477b33a4a 100644 --- a/data/pokemon_menu.s +++ b/data/pokemon_menu.s @@ -4,7 +4,7 @@ .section .rodata .align 2 -gPokemonMenuActions:: @ 839F494 +sPokemonMenuActions:: @ 839F494 .4byte OtherText_Summary, PokemonMenu_Summary .4byte OtherText_Switch2, PokemonMenu_Switch .4byte OtherText_Item, PokemonMenu_Item @@ -31,7 +31,7 @@ gPokemonMenuActions:: @ 839F494 .4byte gMoveNames + 13 * MOVE_SWEET_SCENT, PokemonMenu_FieldMove .align 1 -gUnknown_0839F554:: @ 839F554 +sPokeMenuFieldMoves:: @ 839F554 .2byte MOVE_CUT .2byte MOVE_FLASH .2byte MOVE_ROCK_SMASH diff --git a/include/pokemon_menu.h b/include/pokemon_menu.h index fc43a44c6..841e62035 100644 --- a/include/pokemon_menu.h +++ b/include/pokemon_menu.h @@ -1,6 +1,31 @@ #ifndef GUARD_POKEMON_MENU_H #define GUARD_POKEMON_MENU_H +#define POKEMENU_FIRST_FIELD_MOVE_ID 10 + +enum +{ + POKEMENU_SUMMARY, // 0 + POKEMENU_SWITCH, // 1 + POKEMENU_ITEM, // 2 + POKEMENU_CANCEL, // 3 + POKEMENU_MAIL = 7, + POKEMENU_CUT = 10, + POKEMENU_FLASH, + POKEMENU_ROCK_SMASH, + POKEMENU_STRENGTH, + POKEMENU_SURF, + POKEMENU_FLY, + POKEMENU_DIVE, + POKEMENU_WATERFALL, + POKEMENU_TELEPORT, + POKEMENU_DIG, + POKEMENU_SECRET_POWER, + POKEMENU_MILK_DRINK, + POKEMENU_SOFT_BOILED, + POKEMENU_SWEET_SCENT, +}; + void sub_8089A70(void); void sub_808A004(); void sub_808AB90(void); diff --git a/ld_script.txt b/ld_script.txt index 4f3ff093d..4700c48b0 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -136,6 +136,7 @@ SECTIONS { src/wild_encounter.o(.text); src/field_effect.o(.text); src/unknown_task.o(.text); + src/pokemon_menu.o(.text); asm/pokemon_menu.o(.text); src/option_menu.o(.text); src/pokedex.o(.text); diff --git a/src/pokemon_menu.c b/src/pokemon_menu.c new file mode 100644 index 000000000..46cbc7390 --- /dev/null +++ b/src/pokemon_menu.c @@ -0,0 +1,92 @@ +#include "global.h" +#include "pokemon.h" +#include "pokemon_menu.h" +#include "party_menu.h" +#include "palette.h" +#include "menu.h" +#include "mail_data.h" + +/* +Pokemon menu: + The menu that appears when you + click on a pokemon in + overworld 'pokemon' menu +*/ + +extern u8 gLastFieldPokeMenuOpened; + +EWRAM_DATA u8 sPokeMenuCursorPos = 0; +EWRAM_DATA u8 sPokeMenuOptionsNo = 0; +EWRAM_DATA u8 sPokeMenuOptionsIDs[8] = {0}; // 4 possible field moves and 4 default options + +#define sFieldMovesTerminator 0xFF // note: should be changed to 0xFFFF, because currently it makes it impossible to add a field move with 0xFF index + +extern const u16 sPokeMenuFieldMoves[]; +extern const struct MenuAction sPokemonMenuActions[]; + +void sub_8089A70(void) +{ + gPaletteFade.bufferTransferDisabled = 1; + OpenPartyMenu(0, 0); +} + +void sub_8089A8C(void) +{ + sPokeMenuOptionsNo = 0; + // if checking pokemon is an egg, we can't give it an item and it doesn't know any move + if (GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_IS_EGG)) + { + AppendToList(sPokeMenuOptionsIDs, &sPokeMenuOptionsNo, POKEMENU_SUMMARY); + AppendToList(sPokeMenuOptionsIDs, &sPokeMenuOptionsNo, POKEMENU_SWITCH); + AppendToList(sPokeMenuOptionsIDs, &sPokeMenuOptionsNo, POKEMENU_CANCEL); + } + else + { + u16 moveID, tableID; + for (moveID = 0; moveID < 4; moveID++) // 4, max number of possible field moves + { + for (tableID = 0; sPokeMenuFieldMoves[tableID] != sFieldMovesTerminator; tableID++) + { + if (GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_MOVE1 + moveID) == sPokeMenuFieldMoves[tableID]) + { + u8 fieldID = tableID + POKEMENU_FIRST_FIELD_MOVE_ID; + AppendToList(sPokeMenuOptionsIDs, &sPokeMenuOptionsNo, fieldID); + break; + } + } + } + AppendToList(sPokeMenuOptionsIDs, &sPokeMenuOptionsNo, POKEMENU_SUMMARY); + + // can't switch a pokemon if it's the only one in the party + if (GetMonData(&gPlayerParty[1], MON_DATA_SPECIES) != 0) + AppendToList(sPokeMenuOptionsIDs, &sPokeMenuOptionsNo, POKEMENU_SWITCH); + + if (ItemIsMail(GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_HELD_ITEM))) + AppendToList(sPokeMenuOptionsIDs, &sPokeMenuOptionsNo, POKEMENU_MAIL); + else + AppendToList(sPokeMenuOptionsIDs, &sPokeMenuOptionsNo, POKEMENU_ITEM); + + AppendToList(sPokeMenuOptionsIDs, &sPokeMenuOptionsNo, POKEMENU_CANCEL); + } +} + +void sub_8089BDC(u8 arg0, u8 arg1, u8 arg2, u8 arg3, const struct MenuAction* arg4, const u8* arg5, u8 arg6) +{ + sub_806D538(5, arg6); + MenuDrawTextWindow(arg0, arg1, arg0 + arg2, (arg3 * 2) + arg1 + 1); + PrintMenuItemsReordered(arg0 + 1, arg1 + 1, arg3, arg4, arg5); +} + +void sub_8089C50(u8 arg0, u8 arg1, u8 arg2, u8 arg3, const struct MenuAction* arg4, const u8* arg5) +{ + sub_8089BDC(arg0, arg1, arg2, arg3, arg4, arg5, 1); +} + +void sub_8089C7C(u8 arg0) +{ + u8 var1 = 18; + u8 var2 = (sPokeMenuOptionsNo * 2); + + sub_8089BDC(19, var1 - var2, 10, sPokeMenuOptionsNo, sPokemonMenuActions, sPokeMenuOptionsIDs, 3); + InitMenu(0, 20, (var1 - var2) | 1, sPokeMenuOptionsNo, arg0, 9); +} diff --git a/sym_ewram.txt b/sym_ewram.txt index ac6b8b728..faefab204 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -374,17 +374,8 @@ gUnknown_0202FF58: @ 202FF58 gUnknown_0202FFA4: @ 202FFA4 .space 0x4 -@ pokemon_menu - -gUnknown_0202FFA8: @ 202FFA8 - .space 0x1 - -gUnknown_0202FFA9: @ 202FFA9 - .space 0x1 - -gUnknown_0202FFAA: @ 202FFAA - .space 0xA + .include "src/pokemon_menu.o" .include "src/pokedex.o" .include "src/trainer_card.o" .include "src/pokemon_storage_system.o" -- cgit v1.2.3 From 5c90a1968245ba7d9f1c6c589ae0880d2a05447d Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Mon, 28 Aug 2017 16:29:50 -0500 Subject: fix some nonmatching functions in rotating_gate.c --- src/rotating_gate.c | 513 ++++++++++++++++++++++------------------------------ 1 file changed, 220 insertions(+), 293 deletions(-) diff --git a/src/rotating_gate.c b/src/rotating_gate.c index b88add469..e8ab7e1bf 100644 --- a/src/rotating_gate.c +++ b/src/rotating_gate.c @@ -12,11 +12,11 @@ #define ROTATING_GATE_PUZZLE_MAX 14 #define GATE_ARM_MAX_LENGTH 2 -#define GATE_ROTATION(rotationDirection, arm, longArm) \ +#define GATE_ROT(rotationDirection, arm, longArm) \ ((rotationDirection & 15) << 4) | ((arm & 7) << 1) | (longArm & 1) -#define GATE_ROTATION_CLOCKWISE(arm, longArm) GATE_ROTATION(ROTATE_CLOCKWISE, arm, longArm) -#define GATE_ROTATION_ANTICLOCKWISE(arm, longArm) GATE_ROTATION(ROTATE_ANTICLOCKWISE, arm, longArm) -#define GATE_ROTATION_NONE 255 +#define GATE_ROT_CW(arm, longArm) GATE_ROT(ROTATE_CLOCKWISE, arm, longArm) +#define GATE_ROT_ACW(arm, longArm) GATE_ROT(ROTATE_ANTICLOCKWISE, arm, longArm) +#define GATE_ROT_NONE 255 static void SpriteCallback_RotatingGate(struct Sprite *sprite); static u8 RotatingGate_CreateGate(u8 gateId, s16 deltaX, s16 deltaY); @@ -181,7 +181,8 @@ enum struct RotatingGatePuzzle { - struct Coords16 pos; + s16 x; + s16 y; u8 shape; u8 orientation; }; @@ -193,32 +194,34 @@ struct Coords8 }; // Fortree -static const struct RotatingGatePuzzle sRotatingGate_FortreePuzzleConfig[] = { - { { 12, 5 }, GATE_SHAPE_L4, GATE_ORIENTATION_0 }, - { { 14, 7 }, GATE_SHAPE_L4, GATE_ORIENTATION_270 }, - { { 16, 4 }, GATE_SHAPE_T2, GATE_ORIENTATION_90 }, - { { 15, 14 }, GATE_SHAPE_L2, GATE_ORIENTATION_0 }, - { { 18, 13 }, GATE_SHAPE_T1, GATE_ORIENTATION_180 }, - { { 8, 20 }, GATE_SHAPE_T1, GATE_ORIENTATION_180 }, - { { 16, 20 }, GATE_SHAPE_T4, GATE_ORIENTATION_90 }, +static const struct RotatingGatePuzzle sRotatingGate_FortreePuzzleConfig[] = +{ + {12, 5, GATE_SHAPE_L4, GATE_ORIENTATION_0}, + {14, 7, GATE_SHAPE_L4, GATE_ORIENTATION_270}, + {16, 4, GATE_SHAPE_T2, GATE_ORIENTATION_90}, + {15, 14, GATE_SHAPE_L2, GATE_ORIENTATION_0}, + {18, 13, GATE_SHAPE_T1, GATE_ORIENTATION_180}, + { 8, 20, GATE_SHAPE_T1, GATE_ORIENTATION_180}, + {16, 20, GATE_SHAPE_T4, GATE_ORIENTATION_90}, }; // Trickhouse -static const struct RotatingGatePuzzle sRotatingGate_TrickHousePuzzleConfig[] = { - { { 13, 3 }, GATE_SHAPE_T1, GATE_ORIENTATION_270 }, - { { 12, 6 }, GATE_SHAPE_T1, GATE_ORIENTATION_180 }, - { { 3, 6 }, GATE_SHAPE_T1, GATE_ORIENTATION_180 }, - { { 3, 9 }, GATE_SHAPE_T2, GATE_ORIENTATION_270 }, - { { 8, 8 }, GATE_SHAPE_L1, GATE_ORIENTATION_90 }, - { { 2, 12 }, GATE_SHAPE_T3, GATE_ORIENTATION_180 }, - { { 9, 13 }, GATE_SHAPE_L2, GATE_ORIENTATION_0 }, - { { 3, 14 }, GATE_SHAPE_L3, GATE_ORIENTATION_90 }, - { { 9, 15 }, GATE_SHAPE_L4, GATE_ORIENTATION_180 }, - { { 3, 18 }, GATE_SHAPE_T2, GATE_ORIENTATION_180 }, - { { 2, 19 }, GATE_SHAPE_T1, GATE_ORIENTATION_0 }, - { { 5, 21 }, GATE_SHAPE_L1, GATE_ORIENTATION_0 }, - { { 9, 19 }, GATE_SHAPE_L4, GATE_ORIENTATION_270 }, - { { 12, 20 }, GATE_SHAPE_T1, GATE_ORIENTATION_90 }, +static const struct RotatingGatePuzzle sRotatingGate_TrickHousePuzzleConfig[] = +{ + {13, 3, GATE_SHAPE_T1, GATE_ORIENTATION_270}, + {12, 6, GATE_SHAPE_T1, GATE_ORIENTATION_180}, + { 3, 6, GATE_SHAPE_T1, GATE_ORIENTATION_180}, + { 3, 9, GATE_SHAPE_T2, GATE_ORIENTATION_270}, + { 8, 8, GATE_SHAPE_L1, GATE_ORIENTATION_90}, + { 2, 12, GATE_SHAPE_T3, GATE_ORIENTATION_180}, + { 9, 13, GATE_SHAPE_L2, GATE_ORIENTATION_0}, + { 3, 14, GATE_SHAPE_L3, GATE_ORIENTATION_90}, + { 9, 15, GATE_SHAPE_L4, GATE_ORIENTATION_180}, + { 3, 18, GATE_SHAPE_T2, GATE_ORIENTATION_180}, + { 2, 19, GATE_SHAPE_T1, GATE_ORIENTATION_0}, + { 5, 21, GATE_SHAPE_L1, GATE_ORIENTATION_0}, + { 9, 19, GATE_SHAPE_L4, GATE_ORIENTATION_270}, + {12, 20, GATE_SHAPE_T1, GATE_ORIENTATION_90}, }; static const u8 sRotatingGateTiles_1[] = INCBIN_U8("graphics/rotating_gates/1.4bpp"); @@ -230,7 +233,8 @@ static const u8 sRotatingGateTiles_7[] = INCBIN_U8("graphics/rotating_gates/7.4b static const u8 sRotatingGateTiles_0[] = INCBIN_U8("graphics/rotating_gates/0.4bpp"); static const u8 sRotatingGateTiles_4[] = INCBIN_U8("graphics/rotating_gates/4.4bpp"); -static const struct OamData sOamData_RotatingGateLarge = { +static const struct OamData sOamData_RotatingGateLarge = +{ .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = 0, @@ -246,7 +250,8 @@ static const struct OamData sOamData_RotatingGateLarge = { .affineParam = 0, }; -static const struct OamData sOamData_RotatingGateRegular = { +static const struct OamData sOamData_RotatingGateRegular = +{ .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = 0, @@ -262,145 +267,178 @@ static const struct OamData sOamData_RotatingGateRegular = { .affineParam = 0, }; -static const struct SpriteSheet sRotatingGatesGraphicsTable[] = { - { sRotatingGateTiles_0, 0x200, ROTATING_GATE_TILE_TAG + GATE_SHAPE_L1 }, - { sRotatingGateTiles_1, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_L2 }, - { sRotatingGateTiles_2, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_L3 }, - { sRotatingGateTiles_3, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_L4 }, - { sRotatingGateTiles_4, 0x200, ROTATING_GATE_TILE_TAG + GATE_SHAPE_T1 }, - { sRotatingGateTiles_5, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_T2 }, - { sRotatingGateTiles_6, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_T3 }, - { sRotatingGateTiles_7, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_T4 }, - { NULL }, +static const struct SpriteSheet sRotatingGatesGraphicsTable[] = +{ + {sRotatingGateTiles_0, 0x200, ROTATING_GATE_TILE_TAG + GATE_SHAPE_L1}, + {sRotatingGateTiles_1, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_L2}, + {sRotatingGateTiles_2, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_L3}, + {sRotatingGateTiles_3, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_L4}, + {sRotatingGateTiles_4, 0x200, ROTATING_GATE_TILE_TAG + GATE_SHAPE_T1}, + {sRotatingGateTiles_5, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_T2}, + {sRotatingGateTiles_6, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_T3}, + {sRotatingGateTiles_7, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_T4}, + {NULL}, }; -static const union AnimCmd sSpriteAnim_RotatingGateLarge[] = { - ANIMCMD_FRAME(0, 0), ANIMCMD_END, +static const union AnimCmd sSpriteAnim_RotatingGateLarge[] = +{ + ANIMCMD_FRAME(0, 0), + ANIMCMD_END, }; -static const union AnimCmd sSpriteAnim_RotatingGateRegular[] = { +static const union AnimCmd sSpriteAnim_RotatingGateRegular[] = +{ ANIMCMD_FRAME(0, 0), ANIMCMD_END, }; -static const union AnimCmd *const sSpriteAnimTable_RotatingGateLarge[] = { +static const union AnimCmd *const sSpriteAnimTable_RotatingGateLarge[] = +{ sSpriteAnim_RotatingGateLarge, }; -static const union AnimCmd *const sSpriteAnimTable_RotatingGateRegular[] = { +static const union AnimCmd *const sSpriteAnimTable_RotatingGateRegular[] = +{ sSpriteAnim_RotatingGateRegular, }; -static const union AffineAnimCmd sSpriteAffineAnim_Rotated0[] = { - AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_JUMP(0), +static const union AffineAnimCmd sSpriteAffineAnim_Rotated0[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_JUMP(0), }; -static const union AffineAnimCmd sSpriteAffineAnim_Rotated90[] = { - AFFINEANIMCMD_FRAME(0x100, 0x100, -64, 0), AFFINEANIMCMD_JUMP(0), +static const union AffineAnimCmd sSpriteAffineAnim_Rotated90[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, -64, 0), + AFFINEANIMCMD_JUMP(0), }; -static const union AffineAnimCmd sSpriteAffineAnim_Rotated180[] = { - AFFINEANIMCMD_FRAME(0x100, 0x100, -128, 0), AFFINEANIMCMD_JUMP(0), +static const union AffineAnimCmd sSpriteAffineAnim_Rotated180[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, -128, 0), + AFFINEANIMCMD_JUMP(0), }; -static const union AffineAnimCmd sSpriteAffineAnim_Rotated270[] = { - AFFINEANIMCMD_FRAME(0x100, 0x100, 64, 0), AFFINEANIMCMD_JUMP(0), +static const union AffineAnimCmd sSpriteAffineAnim_Rotated270[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 64, 0), + AFFINEANIMCMD_JUMP(0), }; -static const union AffineAnimCmd sSpriteAffineAnim_RotatingClockwise0to90[] = { +static const union AffineAnimCmd sSpriteAffineAnim_RotatingClockwise0to90[] = +{ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, -4, 16), AFFINEANIMCMD_END, }; -static const union AffineAnimCmd sSpriteAffineAnim_RotatingClockwise90to180[] = { +static const union AffineAnimCmd sSpriteAffineAnim_RotatingClockwise90to180[] = +{ AFFINEANIMCMD_FRAME(0x100, 0x100, -64, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, -4, 16), AFFINEANIMCMD_END, }; -static const union AffineAnimCmd sSpriteAffineAnim_RotatingClockwise180to270[] = { +static const union AffineAnimCmd sSpriteAffineAnim_RotatingClockwise180to270[] = +{ AFFINEANIMCMD_FRAME(0x100, 0x100, -128, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, -4, 16), AFFINEANIMCMD_END, }; -static const union AffineAnimCmd sSpriteAffineAnim_RotatingClockwise270to360[] = { +static const union AffineAnimCmd sSpriteAffineAnim_RotatingClockwise270to360[] = +{ AFFINEANIMCMD_FRAME(0x100, 0x100, 64, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, -4, 16), AFFINEANIMCMD_END, }; -static const union AffineAnimCmd sSpriteAffineAnim_RotatingAnticlockwise360to270[] = { +static const union AffineAnimCmd sSpriteAffineAnim_RotatingAnticlockwise360to270[] = +{ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, 4, 16), AFFINEANIMCMD_END, }; -static const union AffineAnimCmd sSpriteAffineAnim_RotatingAnticlockwise270to180[] = { +static const union AffineAnimCmd sSpriteAffineAnim_RotatingAnticlockwise270to180[] = +{ AFFINEANIMCMD_FRAME(0x100, 0x100, 64, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, 4, 16), AFFINEANIMCMD_END, }; -static const union AffineAnimCmd sSpriteAffineAnim_RotatingAnticlockwise180to90[] = { +static const union AffineAnimCmd sSpriteAffineAnim_RotatingAnticlockwise180to90[] = +{ AFFINEANIMCMD_FRAME(0x100, 0x100, -128, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, 4, 16), AFFINEANIMCMD_END, }; -static const union AffineAnimCmd sSpriteAffineAnim_RotatingAnticlockwise90to0[] = { +static const union AffineAnimCmd sSpriteAffineAnim_RotatingAnticlockwise90to0[] = +{ AFFINEANIMCMD_FRAME(0x100, 0x100, -64, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, 4, 16), AFFINEANIMCMD_END, }; -static const union AffineAnimCmd sSpriteAffineAnim_RotatingClockwise0to90Faster[] = { +static const union AffineAnimCmd sSpriteAffineAnim_RotatingClockwise0to90Faster[] = +{ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 8), AFFINEANIMCMD_END, }; -static const union AffineAnimCmd sSpriteAffineAnim_RotatingClockwise90to180Faster[] = { +static const union AffineAnimCmd sSpriteAffineAnim_RotatingClockwise90to180Faster[] = +{ AFFINEANIMCMD_FRAME(0x100, 0x100, -64, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 8), AFFINEANIMCMD_END, }; -static const union AffineAnimCmd sSpriteAffineAnim_RotatingClockwise180to270Faster[] = { +static const union AffineAnimCmd sSpriteAffineAnim_RotatingClockwise180to270Faster[] = +{ AFFINEANIMCMD_FRAME(0x100, 0x100, -128, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 8), AFFINEANIMCMD_END, }; -static const union AffineAnimCmd sSpriteAffineAnim_RotatingClockwise270to360Faster[] = { +static const union AffineAnimCmd sSpriteAffineAnim_RotatingClockwise270to360Faster[] = +{ AFFINEANIMCMD_FRAME(0x100, 0x100, 64, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 8), AFFINEANIMCMD_END, }; -static const union AffineAnimCmd sSpriteAffineAnim_RotatingAnticlockwise360to270Faster[] = { - AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 8), AFFINEANIMCMD_END, +static const union AffineAnimCmd sSpriteAffineAnim_RotatingAnticlockwise360to270Faster[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 8), + AFFINEANIMCMD_END, }; -static const union AffineAnimCmd sSpriteAffineAnim_RotatingAnticlockwise270to180Faster[] = { +static const union AffineAnimCmd sSpriteAffineAnim_RotatingAnticlockwise270to180Faster[] = +{ AFFINEANIMCMD_FRAME(0x100, 0x100, 64, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 8), AFFINEANIMCMD_END, }; -static const union AffineAnimCmd sSpriteAffineAnim_RotatingAnticlockwise180to90Faster[] = { +static const union AffineAnimCmd sSpriteAffineAnim_RotatingAnticlockwise180to90Faster[] = +{ AFFINEANIMCMD_FRAME(0x100, 0x100, -128, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 8), AFFINEANIMCMD_END, }; -static const union AffineAnimCmd sSpriteAffineAnim_RotatingAnticlockwise90to0Faster[] = { +static const union AffineAnimCmd sSpriteAffineAnim_RotatingAnticlockwise90to0Faster[] = +{ AFFINEANIMCMD_FRAME(0x100, 0x100, -64, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 8), AFFINEANIMCMD_END, }; -static const union AffineAnimCmd *const sSpriteAffineAnimTable_RotatingGate[] = { +static const union AffineAnimCmd *const sSpriteAffineAnimTable_RotatingGate[] = +{ sSpriteAffineAnim_Rotated0, sSpriteAffineAnim_Rotated90, sSpriteAffineAnim_Rotated180, @@ -423,7 +461,8 @@ static const union AffineAnimCmd *const sSpriteAffineAnimTable_RotatingGate[] = sSpriteAffineAnim_RotatingClockwise270to360Faster, }; -static const struct SpriteTemplate sSpriteTemplate_RotatingGateLarge = { +static const struct SpriteTemplate sSpriteTemplate_RotatingGateLarge = +{ .tileTag = ROTATING_GATE_TILE_TAG, .paletteTag = 0xFFFF, .oam = &sOamData_RotatingGateLarge, @@ -433,7 +472,8 @@ static const struct SpriteTemplate sSpriteTemplate_RotatingGateLarge = { .callback = SpriteCallback_RotatingGate, }; -static const struct SpriteTemplate sSpriteTemplate_RotatingGateRegular = { +static const struct SpriteTemplate sSpriteTemplate_RotatingGateRegular = +{ .tileTag = ROTATING_GATE_TILE_TAG, .paletteTag = 0xFFFF, .oam = &sOamData_RotatingGateRegular, @@ -449,62 +489,36 @@ static const struct SpriteTemplate sSpriteTemplate_RotatingGateRegular = { // given direction. This information is compared against the gate // "arm" layout to see if there is an arm at the position in order to // produce the final rotation. -static const u8 sRotatingGate_RotationInfoNorth[4][4] = { - { GATE_ROTATION_NONE, GATE_ROTATION_NONE, GATE_ROTATION_NONE, GATE_ROTATION_NONE }, - { GATE_ROTATION_CLOCKWISE(GATE_ARM_WEST, 1), - GATE_ROTATION_CLOCKWISE(GATE_ARM_WEST, 0), - GATE_ROTATION_ANTICLOCKWISE(GATE_ARM_EAST, 0), - GATE_ROTATION_ANTICLOCKWISE(GATE_ARM_EAST, 1) }, - { GATE_ROTATION_NONE, GATE_ROTATION_NONE, GATE_ROTATION_NONE, GATE_ROTATION_NONE }, - { GATE_ROTATION_NONE, GATE_ROTATION_NONE, GATE_ROTATION_NONE, GATE_ROTATION_NONE }, +static const u8 sRotatingGate_RotationInfoNorth[4 * 4] = +{ + GATE_ROT_NONE, GATE_ROT_NONE, GATE_ROT_NONE, GATE_ROT_NONE, + GATE_ROT_CW(GATE_ARM_WEST, 1), GATE_ROT_CW(GATE_ARM_WEST, 0), GATE_ROT_ACW(GATE_ARM_EAST, 0), GATE_ROT_ACW(GATE_ARM_EAST, 1), + GATE_ROT_NONE, GATE_ROT_NONE, GATE_ROT_NONE, GATE_ROT_NONE, + GATE_ROT_NONE, GATE_ROT_NONE, GATE_ROT_NONE, GATE_ROT_NONE, }; -static const u8 sRotatingGate_RotationInfoSouth[4][4] = { - { GATE_ROTATION_NONE, GATE_ROTATION_NONE, GATE_ROTATION_NONE, GATE_ROTATION_NONE }, - { GATE_ROTATION_NONE, GATE_ROTATION_NONE, GATE_ROTATION_NONE, GATE_ROTATION_NONE }, - { GATE_ROTATION_ANTICLOCKWISE(GATE_ARM_WEST, 1), - GATE_ROTATION_ANTICLOCKWISE(GATE_ARM_WEST, 0), - GATE_ROTATION_CLOCKWISE(GATE_ARM_EAST, 0), - GATE_ROTATION_CLOCKWISE(GATE_ARM_EAST, 1) }, - { GATE_ROTATION_NONE, GATE_ROTATION_NONE, GATE_ROTATION_NONE, GATE_ROTATION_NONE }, +static const u8 sRotatingGate_RotationInfoSouth[4 * 4] = +{ + GATE_ROT_NONE, GATE_ROT_NONE, GATE_ROT_NONE, GATE_ROT_NONE, + GATE_ROT_NONE, GATE_ROT_NONE, GATE_ROT_NONE, GATE_ROT_NONE, + GATE_ROT_ACW(GATE_ARM_WEST, 1), GATE_ROT_ACW(GATE_ARM_WEST, 0), GATE_ROT_CW(GATE_ARM_EAST, 0), GATE_ROT_CW(GATE_ARM_EAST, 1), + GATE_ROT_NONE, GATE_ROT_NONE, GATE_ROT_NONE, GATE_ROT_NONE, }; -static const u8 sRotatingGate_RotationInfoWest[4][4] = { - { GATE_ROTATION_NONE, - GATE_ROTATION_ANTICLOCKWISE(GATE_ARM_NORTH, 1), - GATE_ROTATION_NONE, - GATE_ROTATION_NONE }, - { GATE_ROTATION_NONE, - GATE_ROTATION_ANTICLOCKWISE(GATE_ARM_NORTH, 0), - GATE_ROTATION_NONE, - GATE_ROTATION_NONE }, - { GATE_ROTATION_NONE, - GATE_ROTATION_CLOCKWISE(GATE_ARM_SOUTH, 0), - GATE_ROTATION_NONE, - GATE_ROTATION_NONE }, - { GATE_ROTATION_NONE, - GATE_ROTATION_CLOCKWISE(GATE_ARM_SOUTH, 1), - GATE_ROTATION_NONE, - GATE_ROTATION_NONE }, +static const u8 sRotatingGate_RotationInfoWest[4 * 4] = +{ + GATE_ROT_NONE, GATE_ROT_ACW(GATE_ARM_NORTH, 1), GATE_ROT_NONE, GATE_ROT_NONE, + GATE_ROT_NONE, GATE_ROT_ACW(GATE_ARM_NORTH, 0), GATE_ROT_NONE, GATE_ROT_NONE, + GATE_ROT_NONE, GATE_ROT_CW(GATE_ARM_SOUTH, 0), GATE_ROT_NONE, GATE_ROT_NONE, + GATE_ROT_NONE, GATE_ROT_CW(GATE_ARM_SOUTH, 1), GATE_ROT_NONE, GATE_ROT_NONE, }; -static const u8 sRotatingGate_RotationInfoEast[4][4] = { - { GATE_ROTATION_NONE, - GATE_ROTATION_NONE, - GATE_ROTATION_CLOCKWISE(GATE_ARM_NORTH, 1), - GATE_ROTATION_NONE }, - { GATE_ROTATION_NONE, - GATE_ROTATION_NONE, - GATE_ROTATION_CLOCKWISE(GATE_ARM_NORTH, 0), - GATE_ROTATION_NONE }, - { GATE_ROTATION_NONE, - GATE_ROTATION_NONE, - GATE_ROTATION_ANTICLOCKWISE(GATE_ARM_SOUTH, 0), - GATE_ROTATION_NONE }, - { GATE_ROTATION_NONE, - GATE_ROTATION_NONE, - GATE_ROTATION_ANTICLOCKWISE(GATE_ARM_SOUTH, 1), - GATE_ROTATION_NONE }, +static const u8 sRotatingGate_RotationInfoEast[4 * 4] = +{ + GATE_ROT_NONE, GATE_ROT_NONE, GATE_ROT_CW(GATE_ARM_NORTH, 1), GATE_ROT_NONE, + GATE_ROT_NONE, GATE_ROT_NONE, GATE_ROT_CW(GATE_ARM_NORTH, 0), GATE_ROT_NONE, + GATE_ROT_NONE, GATE_ROT_NONE, GATE_ROT_ACW(GATE_ARM_SOUTH, 0), GATE_ROT_NONE, + GATE_ROT_NONE, GATE_ROT_NONE, GATE_ROT_ACW(GATE_ARM_SOUTH, 1), GATE_ROT_NONE, }; // These tables describe the relative coordinate positions the arms @@ -519,49 +533,86 @@ static const struct Coords8 sRotatingGate_ArmPositionsAntiClockwiseRotation[] = // Describes where the gates "arms" are in the order north, east, south, west. // These are adjusted using the current orientation to perform collision checking -static const u8 sRotatingGate_ArmLayout[][GATE_ARM_WEST + 1][GATE_ARM_MAX_LENGTH] = { +static const u8 sRotatingGate_ArmLayout[][4 * 2] = +{ // L-shape gates { - { 1, 0 }, { 1, 0 }, { 0, 0 }, { 0, 0 }, + 1, 0, + 1, 0, + 0, 0, + 0, 0, }, { - { 1, 1 }, { 1, 0 }, { 0, 0 }, { 0, 0 }, + 1, 1, + 1, 0, + 0, 0, + 0, 0, }, { - { 1, 0 }, { 1, 1 }, { 0, 0 }, { 0, 0 }, + 1, 0, + 1, 1, + 0, 0, + 0, 0, }, { - { 1, 1 }, { 1, 1 }, { 0, 0 }, { 0, 0 }, + 1, 1, + 1, 1, + 0, 0, + 0, 0, }, // T-shape gates { - { 1, 0 }, { 1, 0 }, { 1, 0 }, { 0, 0 }, + 1, 0, + 1, 0, + 1, 0, + 0, 0, }, { - { 1, 1 }, { 1, 0 }, { 1, 0 }, { 0, 0 }, + 1, 1, + 1, 0, + 1, 0, + 0, 0, }, { - { 1, 0 }, { 1, 1 }, { 1, 0 }, { 0, 0 }, + 1, 0, + 1, 1, + 1, 0, + 0, 0, }, { - { 1, 0 }, { 1, 0 }, { 1, 1 }, { 0, 0 }, + 1, 0, + 1, 0, + 1, 1, + 0, 0, }, // Unused T-shape gates // These have 2-3 long arms and cannot actually be used anywhere // since configuration for them is missing from the other tables. { - { 1, 1 }, { 1, 1 }, { 1, 0 }, { 0, 0 }, + 1, 1, + 1, 1, + 1, 0, + 0, 0, }, { - { 1, 1 }, { 1, 0 }, { 1, 1 }, { 0, 0 }, + 1, 1, + 1, 0, + 1, 1, + 0, 0, }, { - { 1, 0 }, { 1, 1 }, { 1, 1 }, { 0, 0 }, + 1, 0, + 1, 1, + 1, 1, + 0, 0, }, { - { 1, 1 }, { 1, 1 }, { 1, 1 }, { 0, 0 }, + 1, 1, + 1, 1, + 1, 1, + 0, 0, }, }; @@ -675,8 +726,8 @@ static void RotatingGate_CreateGatesWithinViewport(s16 deltaX, s16 deltaY) for (i = 0; i < gRotatingGate_PuzzleCount; i++) { - x3 = gRotatingGate_PuzzleConfig[i].pos.x + 7; - y3 = gRotatingGate_PuzzleConfig[i].pos.y + 7; + x3 = gRotatingGate_PuzzleConfig[i].x + 7; + y3 = gRotatingGate_PuzzleConfig[i].y + 7; if (y <= y3 && y2 >= y3 && x <= x3 && x2 >= x3 && gRotatingGate_GateSpriteIds[i] == MAX_SPRITES) @@ -697,24 +748,18 @@ static u8 RotatingGate_CreateGate(u8 gateId, s16 deltaX, s16 deltaY) gate = &gRotatingGate_PuzzleConfig[gateId]; if (gate->shape == GATE_SHAPE_L1 || gate->shape == GATE_SHAPE_T1) - { template = sSpriteTemplate_RotatingGateRegular; - } else - { template = sSpriteTemplate_RotatingGateLarge; - } template.tileTag = gate->shape + ROTATING_GATE_TILE_TAG; spriteId = CreateSprite(&template, 0, 0, 0x94); if (spriteId == MAX_SPRITES) - { return MAX_SPRITES; - } - x = gate->pos.x + 7; - y = gate->pos.y + 7; + x = gate->x + 7; + y = gate->y + 7; sprite = &gSprites[spriteId]; sprite->data0 = gateId; @@ -769,7 +814,7 @@ static void RotatingGate_HideGatesOutsideViewport(struct Sprite *sprite) u16 y; s16 y2; - sprite->invisible = 0; + sprite->invisible = FALSE; x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX; y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY; @@ -778,12 +823,12 @@ static void RotatingGate_HideGatesOutsideViewport(struct Sprite *sprite) if ((s16)x > DISPLAY_WIDTH + 0x10 - 1 || x2 < -0x10) { - sprite->invisible = 1; + sprite->invisible = TRUE; } if ((s16)y > DISPLAY_HEIGHT + 0x10 - 1 || y2 < -0x10) { - sprite->invisible = 1; + sprite->invisible = TRUE; } } @@ -811,8 +856,8 @@ static void RotatingGate_DestroyGatesOutsideViewport(void) for (i = 0; i < gRotatingGate_PuzzleCount; i++) { - xGate = gRotatingGate_PuzzleConfig[i].pos.x + 7; - yGate = gRotatingGate_PuzzleConfig[i].pos.y + 7; + xGate = gRotatingGate_PuzzleConfig[i].x + 7; + yGate = gRotatingGate_PuzzleConfig[i].y + 7; if (gRotatingGate_GateSpriteIds[i] == MAX_SPRITES) continue; @@ -851,8 +896,8 @@ static int RotatingGate_CanRotate(u8 gateId, int rotationDirection) orientation = RotatingGate_GetGateOrientation(gateId); shape = gRotatingGate_PuzzleConfig[gateId].shape; - x = gRotatingGate_PuzzleConfig[gateId].pos.x + 7; - y = gRotatingGate_PuzzleConfig[gateId].pos.y + 7; + x = gRotatingGate_PuzzleConfig[gateId].x + 7; + y = gRotatingGate_PuzzleConfig[gateId].y + 7; // Loop through the gate's "arms" clockwise (north, south, east, west) for (i = GATE_ARM_NORTH; i <= GATE_ARM_WEST; i++) @@ -878,7 +923,8 @@ static int RotatingGate_CanRotate(u8 gateId, int rotationDirection) return 1; } #else -__attribute__((naked)) static int RotatingGate_CanRotate(u8 a, int puzzleType) +__attribute__((naked)) +static int RotatingGate_CanRotate(u8 a, int puzzleType) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ @@ -997,7 +1043,6 @@ _080C7F60: .4byte sRotatingGate_ArmLayout\n\ } #endif -#ifdef NONMATCHING static int RotatingGate_HasArm(u8 gateId, u8 armInfo) { int isLongArm; @@ -1010,56 +1055,8 @@ static int RotatingGate_HasArm(u8 gateId, u8 armInfo) armOrientation = (arm - RotatingGate_GetGateOrientation(gateId) + 4) % 4; shape = gRotatingGate_PuzzleConfig[gateId].shape; - return sRotatingGate_ArmLayout[shape][armOrientation][isLongArm]; + return sRotatingGate_ArmLayout[shape][armOrientation * 2 + isLongArm]; } -#else -__attribute__((naked)) static int RotatingGate_HasArm(u8 a, u8 b) -{ - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - adds r4, r1, 0\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - adds r6, r0, 0\n\ - lsls r4, 24\n\ - lsrs r5, r4, 24\n\ - lsrs r4, 25\n\ - movs r0, 0x1\n\ - ands r5, r0\n\ - adds r0, r6, 0\n\ - bl RotatingGate_GetGateOrientation\n\ - subs r4, r0\n\ - adds r1, r4, 0x4\n\ - adds r0, r1, 0\n\ - cmp r1, 0\n\ - bge _080C7F8A\n\ - adds r0, r4, 0x7\n\ -_080C7F8A:\n\ - asrs r0, 2\n\ - lsls r0, 2\n\ - subs r0, r1, r0\n\ - ldr r1, _080C7FB0 @ =gRotatingGate_PuzzleConfig\n\ - ldr r2, [r1]\n\ - lsls r1, r6, 3\n\ - adds r1, r2\n\ - ldrb r1, [r1, 0x4]\n\ - ldr r2, _080C7FB4 @ =sRotatingGate_ArmLayout\n\ - lsls r0, 24\n\ - asrs r0, 23\n\ - adds r0, r5\n\ - lsls r1, 3\n\ - adds r0, r1\n\ - adds r0, r2\n\ - ldrb r0, [r0]\n\ - pop {r4-r6}\n\ - pop {r1}\n\ - bx r1\n\ - .align 2, 0\n\ -_080C7FB0: .4byte gRotatingGate_PuzzleConfig\n\ -_080C7FB4: .4byte sRotatingGate_ArmLayout\n\ -.syntax divided\n"); -} -#endif static void RotatingGate_TriggerRotationAnimation(u8 gateId, int rotationDirection) { @@ -1073,79 +1070,23 @@ static void RotatingGate_TriggerRotationAnimation(u8 gateId, int rotationDirecti } } -#ifdef NONMATCHING static u8 RotatingGate_GetRotationInfo(u8 direction, s16 x, s16 y) { - register const u8(*ptr)[][4] asm("r3"); + register const u8 *ptr; if (direction == DIR_NORTH) - ptr = &sRotatingGate_RotationInfoNorth; + ptr = sRotatingGate_RotationInfoNorth; else if (direction == DIR_SOUTH) - ptr = &sRotatingGate_RotationInfoSouth; + ptr = sRotatingGate_RotationInfoSouth; else if (direction == DIR_WEST) - ptr = &sRotatingGate_RotationInfoWest; + ptr = sRotatingGate_RotationInfoWest; else if (direction == DIR_EAST) - ptr = &sRotatingGate_RotationInfoEast; + ptr = sRotatingGate_RotationInfoEast; else - return GATE_ROTATION_NONE; + return GATE_ROT_NONE; - return (*ptr)[y][x]; + return ptr[y * 4 + x]; } -#else -__attribute__((naked)) static u8 RotatingGate_GetRotationInfo(u8 a, s16 b, s16 c) -{ - asm(".syntax unified\n\ - push {lr}\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - adds r3, r0, 0\n\ - lsls r1, 16\n\ - lsrs r1, 16\n\ - lsls r2, 16\n\ - lsrs r2, 16\n\ - cmp r0, 0x2\n\ - bne _080C8008\n\ - ldr r3, _080C8004 @ =sRotatingGate_RotationInfoNorth\n\ - b _080C802A\n\ - .align 2, 0\n\ -_080C8004: .4byte sRotatingGate_RotationInfoNorth\n\ -_080C8008:\n\ - cmp r0, 0x1\n\ - bne _080C8014\n\ - ldr r3, _080C8010 @ =sRotatingGate_RotationInfoSouth\n\ - b _080C802A\n\ - .align 2, 0\n\ -_080C8010: .4byte sRotatingGate_RotationInfoSouth\n\ -_080C8014:\n\ - cmp r0, 0x3\n\ - bne _080C8020\n\ - ldr r3, _080C801C @ =sRotatingGate_RotationInfoWest\n\ - b _080C802A\n\ - .align 2, 0\n\ -_080C801C: .4byte sRotatingGate_RotationInfoWest\n\ -_080C8020:\n\ - cmp r3, 0x4\n\ - beq _080C8028\n\ - movs r0, 0xFF\n\ - b _080C8038\n\ -_080C8028:\n\ - ldr r3, _080C803C @ =sRotatingGate_RotationInfoEast\n\ -_080C802A:\n\ - lsls r0, r2, 16\n\ - lsls r1, 16\n\ - asrs r1, 16\n\ - asrs r0, 14\n\ - adds r0, r1\n\ - adds r0, r3, r0\n\ - ldrb r0, [r0]\n\ -_080C8038:\n\ - pop {r1}\n\ - bx r1\n\ - .align 2, 0\n\ -_080C803C: .4byte sRotatingGate_RotationInfoEast\n\ -.syntax divided\n"); -} -#endif void RotatingGate_InitPuzzle(void) { @@ -1178,36 +1119,24 @@ void RotatingGate_InitPuzzleAndGraphics(void) bool8 CheckForRotatingGatePuzzleCollision(u8 direction, s16 x, s16 y) { int i; - s16 gateX; - s16 gateY; - register u32 rotationInfo asm("r0"); - int rotationDirection; - int armInfo; - s16 centerX; - s16 centerY; if (!GetCurrentMapRotatingGatePuzzleType()) - { - return 0; - } - + return FALSE; for (i = 0; i < gRotatingGate_PuzzleCount; i++) { - gateX = gRotatingGate_PuzzleConfig[i].pos.x + 7; - gateY = gRotatingGate_PuzzleConfig[i].pos.y + 7; + s16 gateX = gRotatingGate_PuzzleConfig[i].x + 7; + s16 gateY = gRotatingGate_PuzzleConfig[i].y + 7; if (gateX - 2 <= x && x <= gateX + 1 && gateY - 2 <= y && y <= gateY + 1) { - centerX = x - gateX + 2; - centerY = y - gateY + 2; - rotationInfo = RotatingGate_GetRotationInfo(direction, centerX, centerY); + s16 centerX = x - gateX + 2; + s16 centerY = y - gateY + 2; + u8 rotationInfo = RotatingGate_GetRotationInfo(direction, centerX, centerY); - if (rotationInfo != GATE_ROTATION_NONE) + if (rotationInfo != GATE_ROT_NONE) { - rotationDirection = rotationInfo >> 4; - armInfo = rotationInfo & 0xF; - - asm("" ::"r"(armInfo)); + u8 rotationDirection = ((rotationInfo & 0xF0) >> 4); + u8 armInfo = rotationInfo & 0xF; if (RotatingGate_HasArm(i, armInfo)) { @@ -1215,14 +1144,12 @@ bool8 CheckForRotatingGatePuzzleCollision(u8 direction, s16 x, s16 y) { RotatingGate_TriggerRotationAnimation(i, rotationDirection); RotatingGate_RotateInDirection(i, rotationDirection); - return 0; + return FALSE; } - - return 1; + return TRUE; } } } } - - return 0; + return FALSE; } -- cgit v1.2.3 From 51f791219e055aa4989c77e1373075bd71bf4b60 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Mon, 28 Aug 2017 16:58:30 -0500 Subject: fix PlayCryInternal (thanks, ProjectRevoTPP) --- include/pokemon.h | 1 + src/pokemon_3.c | 2 +- src/sound.c | 59 +++++++++++++++++++++---------------------------------- 3 files changed, 24 insertions(+), 38 deletions(-) diff --git a/include/pokemon.h b/include/pokemon.h index d0ceaf15e..594295b40 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -576,6 +576,7 @@ u16 NationalPokedexNumToSpecies(u16 nationalNum); u16 NationalToHoennOrder(u16); u16 SpeciesToNationalPokedexNum(u16); u16 HoennToNationalOrder(u16); +u16 SpeciesToCryId(u16 species); void DrawSpindaSpots(u16, u32, u8 *, u8); u8 sub_803FBBC(void); u8 sub_803FC58(u16); diff --git a/src/pokemon_3.c b/src/pokemon_3.c index e449af0a1..d7cc39546 100644 --- a/src/pokemon_3.c +++ b/src/pokemon_3.c @@ -457,7 +457,7 @@ u16 HoennToNationalOrder(u16 hoennNum) return gHoennToNationalOrder[hoennNum - 1]; } -u32 SpeciesToCryId(u16 species) +u16 SpeciesToCryId(u16 species) { if (species <= 250) return species; diff --git a/src/sound.c b/src/sound.c index 8d23b7d7a..91f5e06a3 100644 --- a/src/sound.c +++ b/src/sound.c @@ -4,6 +4,7 @@ #include "battle.h" #include "m4a.h" #include "main.h" +#include "pokemon.h" #include "songs.h" #include "task.h" @@ -13,9 +14,6 @@ struct Fanfare u16 duration; }; -// FIXME: different prototype than definition -u32 SpeciesToCryId(u32); - extern u16 gBattleTypeFlags; static EWRAM_DATA struct MusicPlayerInfo *gMPlay_PokemonCry = NULL; @@ -355,21 +353,9 @@ void PlayCry5(u16 species, u8 mode) RestoreBGMVolumeAfterPokemonCry(); } -#define GET_CRY_PTR(a, b)\ -{\ - struct ToneData *tone;\ - if (v0)\ - tone = &a[index];\ - else\ - tone = &b[index];\ - gMPlay_PokemonCry = SetPokemonCryTone(tone);\ - break;\ -} - static void PlayCryInternal(u16 species, s8 pan, s8 volume, u8 priority, u8 mode) { - u32 cryId; - u32 v0; + bool32 v0; u32 release; u32 length; u32 pitch; @@ -378,10 +364,7 @@ static void PlayCryInternal(u16 species, s8 pan, s8 volume, u8 priority, u8 mode u8 table; species--; - - cryId = species; - - v0 = 0; + v0 = FALSE; release = 0; length = 140; pitch = 15360; @@ -427,26 +410,28 @@ static void PlayCryInternal(u16 species, s8 pan, s8 volume, u8 priority, u8 mode SetPokemonCryChorus(chorus); SetPokemonCryPriority(priority); - asm(""); - asm(""); - asm(""); - asm(""); - asm(""); - asm(""); - asm(""); - - cryId = SpeciesToCryId(cryId); - index = 0x7F; - asm("" ::: "r0"); - index &= cryId; - table = cryId >> 7; + species = SpeciesToCryId(species); + index = species & 0x7F; + table = species >> 7; switch (table) { - case 0: GET_CRY_PTR(voicegroup_84537C0, voicegroup_8452590); - case 1: GET_CRY_PTR(voicegroup_8453DC0, voicegroup_8452B90); - case 2: GET_CRY_PTR(voicegroup_84543C0, voicegroup_8453190); - case 3: GET_CRY_PTR(voicegroup_84549C0, voicegroup_8453790); + case 0: + gMPlay_PokemonCry = SetPokemonCryTone( + v0 ? &voicegroup_84537C0[index] : &voicegroup_8452590[index]); + break; + case 1: + gMPlay_PokemonCry = SetPokemonCryTone( + v0 ? &voicegroup_8453DC0[index] : &voicegroup_8452B90[index]); + break; + case 2: + gMPlay_PokemonCry = SetPokemonCryTone( + v0 ? &voicegroup_84543C0[index] : &voicegroup_8453190[index]); + break; + case 3: + gMPlay_PokemonCry = SetPokemonCryTone( + v0 ? &voicegroup_84549C0[index] : &voicegroup_8453790[index]); + break; } } -- cgit v1.2.3 From d7a6ff0e4dab0c96ac49975a0695014bff2b9654 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Mon, 28 Aug 2017 20:19:29 -0500 Subject: get sub_814A958 closer --- src/menu_cursor.c | 103 ++++++++++++++++++++++++++---------------------------- 1 file changed, 49 insertions(+), 54 deletions(-) diff --git a/src/menu_cursor.c b/src/menu_cursor.c index 64ab36573..d43be2a2f 100644 --- a/src/menu_cursor.c +++ b/src/menu_cursor.c @@ -186,73 +186,67 @@ void sub_814A904(void) return; } +#if ENGLISH #ifdef NONMATCHING // Fix pls -void sub_814A958(u8 a1) +void sub_814A958(u8 a) { - struct Subsprite *cursub; - u8 v2; // r7@1 - s16 v3; // r2@1 - s32 v5; // r0@1 - s32 v6; // r3@1 - s32 v7; // r5@3 - int v8; // r7@9 - s16 negone; - - cursub = &gMenuCursorSubsprites[0]; - negone = -1; - cursub = (struct Subsprite){0,2}; - cursub->x = negone; - cursub++; - - v2 = 1; - v3 = 1; - v5 = (a1 - 1) << 0x10; - v6 = v5 >> 0x10; - if ((v5 >> 0x10) > 7) + u8 r7; + struct Subsprite *r4 = &gMenuCursorSubsprites[0]; + s16 r2 = -1; + s32 _a = a; + s16 r5; + s16 i; + + *r4 = (struct Subsprite){.x = 0, .y = 0, .shape = 2, .size = 0, .tileOffset = 0, .priority = 0}; + r4->x = r2; + r4++; + r7 = 1; + r2 = 1; + r5 = a; + i = r5; + while ((i -= r2) >= 8) { - do + if (i > 0x1F) { - if (v6 > 0x1F) + *r4 = gUnknown_0842F780; + r4->x = r2; + r2 += 32; + r5 = a; + } + //_0814A9D4 + else + { + r5 = a; + if (_a > 0x27 && i > 8) { - *cursub = gUnknown_0842F780; - cursub->x = v3; - v3 = ((v3 << 16) + 0x200000) >> 16; - v7 = a1 << 16; + *r4 = gUnknown_0842F780; + r4->x = (r2 - 32) + (i & ~7); + r2 += i & 0x18; } + //_0814AA0A else { - v7 = a1 << 16; - if (a1 <= 0x27 || v6 <= 0x8) - { - *cursub = gUnknown_0842F788; - cursub->x = v3; - v3 = ((v3 << 16) + 0x80000) >> 16; - } - else - { - *cursub = gUnknown_0842F780; - cursub->x = v3 - 0x20 + (v6 & 0xFFF8); - v3 = (v3 + (v6 & 0x18)) & negone; - } + *r4 = gUnknown_0842F788; + r4->x = r2; + r2 += 8; } - - cursub++; - v2 = v2 + 1; - v6 = ((v7 >> 16) - v3) & 0xFFFF; } - while (v7 - v3 > 7); + //_0814AA20 + r4++; + r7++; + i = r5; } - *cursub = gUnknown_0842F790; - cursub->x = v6 + v3 - 7; - v8 = v2 + 1; - if (gUnknown_0203A3D0 != 0x40) - SetSubspriteTables(&gSprites[gUnknown_0203A3D0], &gSubspriteTables_842F5C0[v8]); - if (gUnknown_0203A3D1 != 0x40) - SetSubspriteTables(&gSprites[gUnknown_0203A3D1], &gSubspriteTables_842F5C0[v8]); - return; + //_0814AA3A + *r4 = gUnknown_0842F790; + r4->x = r2 - 7 + i; + r7++; + if (gUnknown_0203A3D0 != 64) + SetSubspriteTables(&gSprites[gUnknown_0203A3D0], gSubspriteTables_842F5C0 + r7); + if (gUnknown_0203A3D1 != 64) + SetSubspriteTables(&gSprites[gUnknown_0203A3D1], gSubspriteTables_842F5C0 + r7); } -#elif ENGLISH +#else __attribute__((naked)) void sub_814A958(u8 a1) { @@ -434,6 +428,7 @@ _0814AAB4: .4byte gSubspriteTables_842F5C0\n\ _0814AAB8: .4byte gUnknown_0203A3D1\n\ .syntax divided\n"); } +#endif #elif GERMAN __attribute__((naked)) void sub_814A958(u8 a1) -- cgit v1.2.3 From 6ecc5e485cbdf34d2d39683d3e0ec6771bd726cb Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Mon, 28 Aug 2017 21:02:30 -0500 Subject: move easy chat words into easy_chat.h --- include/easy_chat.h | 1032 +++++++++++++++++++++++++++++++++++++++- include/easy_chat_constants.h | 1056 ----------------------------------------- 2 files changed, 1031 insertions(+), 1057 deletions(-) delete mode 100644 include/easy_chat_constants.h diff --git a/include/easy_chat.h b/include/easy_chat.h index 614dce50d..702082966 100644 --- a/include/easy_chat.h +++ b/include/easy_chat.h @@ -1,7 +1,8 @@ #ifndef GUARD_EASYCHAT_H #define GUARD_EASYCHAT_H -enum { +enum +{ EC_GROUP_POKEMON, EC_GROUP_TRAINER, EC_GROUP_STATUS, @@ -26,6 +27,1035 @@ enum { EC_GROUP_POKEMON_2, }; +// TRAINER +#define EC_WORD_I_CHOOSE_YOU (EC_GROUP_TRAINER << 9) | 0x0 +#define EC_WORD_GOTCHA (EC_GROUP_TRAINER << 9) | 0x1 +#define EC_WORD_TRADE (EC_GROUP_TRAINER << 9) | 0x2 +#define EC_WORD_SAPPHIRE (EC_GROUP_TRAINER << 9) | 0x3 +#define EC_WORD_EVOLVE (EC_GROUP_TRAINER << 9) | 0x4 +#define EC_WORD_ENCYCLOPEDIA (EC_GROUP_TRAINER << 9) | 0x5 +#define EC_WORD_NATURE (EC_GROUP_TRAINER << 9) | 0x6 +#define EC_WORD_CENTER (EC_GROUP_TRAINER << 9) | 0x7 +#define EC_WORD_EGG (EC_GROUP_TRAINER << 9) | 0x8 +#define EC_WORD_LINK (EC_GROUP_TRAINER << 9) | 0x9 +#define EC_WORD_SP_ABILITY (EC_GROUP_TRAINER << 9) | 0xa +#define EC_WORD_TRAINER (EC_GROUP_TRAINER << 9) | 0xb +#define EC_WORD_VERSION (EC_GROUP_TRAINER << 9) | 0xc +#define EC_WORD_POKENAV (EC_GROUP_TRAINER << 9) | 0xd +#define EC_WORD_POKEMON (EC_GROUP_TRAINER << 9) | 0xe +#define EC_WORD_GET (EC_GROUP_TRAINER << 9) | 0xf +#define EC_WORD_POKEDEX (EC_GROUP_TRAINER << 9) | 0x10 +#define EC_WORD_RUBY (EC_GROUP_TRAINER << 9) | 0x11 +#define EC_WORD_LEVEL (EC_GROUP_TRAINER << 9) | 0x12 + +// STATUS +#define EC_WORD_DARK (EC_GROUP_STATUS << 9) | 0x0 +#define EC_WORD_STENCH (EC_GROUP_STATUS << 9) | 0x1 +#define EC_WORD_THICK_FAT (EC_GROUP_STATUS << 9) | 0x2 +#define EC_WORD_RAIN_DISH (EC_GROUP_STATUS << 9) | 0x3 +#define EC_WORD_DRIZZLE (EC_GROUP_STATUS << 9) | 0x4 +#define EC_WORD_ARENA_TRAP (EC_GROUP_STATUS << 9) | 0x5 +#define EC_WORD_INTIMIDATE (EC_GROUP_STATUS << 9) | 0x6 +#define EC_WORD_ROCK_HEAD (EC_GROUP_STATUS << 9) | 0x7 +#define EC_WORD_COLOR (EC_GROUP_STATUS << 9) | 0x8 +#define EC_WORD_ALT_COLOR (EC_GROUP_STATUS << 9) | 0x9 +#define EC_WORD_ROCK (EC_GROUP_STATUS << 9) | 0xa +#define EC_WORD_BEAUTIFUL (EC_GROUP_STATUS << 9) | 0xb +#define EC_WORD_BEAUTY (EC_GROUP_STATUS << 9) | 0xc +#define EC_WORD_AIR_LOCK (EC_GROUP_STATUS << 9) | 0xd +#define EC_WORD_PSYCHIC (EC_GROUP_STATUS << 9) | 0xe +#define EC_WORD_HYPER_CUTTER (EC_GROUP_STATUS << 9) | 0xf +#define EC_WORD_FIGHTING (EC_GROUP_STATUS << 9) | 0x10 +#define EC_WORD_SHADOW_TAG (EC_GROUP_STATUS << 9) | 0x11 +#define EC_WORD_SMART (EC_GROUP_STATUS << 9) | 0x12 +#define EC_WORD_SMARTNESS (EC_GROUP_STATUS << 9) | 0x13 +#define EC_WORD_SPEED_BOOST (EC_GROUP_STATUS << 9) | 0x14 +#define EC_WORD_COOL (EC_GROUP_STATUS << 9) | 0x15 +#define EC_WORD_COOLNESS (EC_GROUP_STATUS << 9) | 0x16 +#define EC_WORD_BATTLE_ARMOR (EC_GROUP_STATUS << 9) | 0x17 +#define EC_WORD_CUTE (EC_GROUP_STATUS << 9) | 0x18 +#define EC_WORD_CUTENESS (EC_GROUP_STATUS << 9) | 0x19 +#define EC_WORD_STURDY (EC_GROUP_STATUS << 9) | 0x1a +#define EC_WORD_SUCTION_CUPS (EC_GROUP_STATUS << 9) | 0x1b +#define EC_WORD_GRASS (EC_GROUP_STATUS << 9) | 0x1c +#define EC_WORD_CLEAR_BODY (EC_GROUP_STATUS << 9) | 0x1d +#define EC_WORD_TORRENT (EC_GROUP_STATUS << 9) | 0x1e +#define EC_WORD_GHOST (EC_GROUP_STATUS << 9) | 0x1f +#define EC_WORD_ICE (EC_GROUP_STATUS << 9) | 0x20 +#define EC_WORD_GUTS (EC_GROUP_STATUS << 9) | 0x21 +#define EC_WORD_ROUGH_SKIN (EC_GROUP_STATUS << 9) | 0x22 +#define EC_WORD_SHELL_ARMOR (EC_GROUP_STATUS << 9) | 0x23 +#define EC_WORD_NATURAL_CURE (EC_GROUP_STATUS << 9) | 0x24 +#define EC_WORD_DAMP (EC_GROUP_STATUS << 9) | 0x25 +#define EC_WORD_GROUND (EC_GROUP_STATUS << 9) | 0x26 +#define EC_WORD_LIMBER (EC_GROUP_STATUS << 9) | 0x27 +#define EC_WORD_MAGNET_PULL (EC_GROUP_STATUS << 9) | 0x28 +#define EC_WORD_WHITE_SMOKE (EC_GROUP_STATUS << 9) | 0x29 +#define EC_WORD_SYNCHRONIZE (EC_GROUP_STATUS << 9) | 0x2a +#define EC_WORD_OVERGROW (EC_GROUP_STATUS << 9) | 0x2b +#define EC_WORD_SWIFT_SWIM (EC_GROUP_STATUS << 9) | 0x2c +#define EC_WORD_SAND_STREAM (EC_GROUP_STATUS << 9) | 0x2d +#define EC_WORD_SAND_VEIL (EC_GROUP_STATUS << 9) | 0x2e +#define EC_WORD_KEEN_EYE (EC_GROUP_STATUS << 9) | 0x2f +#define EC_WORD_INNER_FOCUS (EC_GROUP_STATUS << 9) | 0x30 +#define EC_WORD_STATIC (EC_GROUP_STATUS << 9) | 0x31 +#define EC_WORD_TYPE (EC_GROUP_STATUS << 9) | 0x32 +#define EC_WORD_TOUGH (EC_GROUP_STATUS << 9) | 0x33 +#define EC_WORD_TOUGHNESS (EC_GROUP_STATUS << 9) | 0x34 +#define EC_WORD_SHED_SKIN (EC_GROUP_STATUS << 9) | 0x35 +#define EC_WORD_HUGE_POWER (EC_GROUP_STATUS << 9) | 0x36 +#define EC_WORD_VOLT_ABSORB (EC_GROUP_STATUS << 9) | 0x37 +#define EC_WORD_WATER_ABSORB (EC_GROUP_STATUS << 9) | 0x38 +#define EC_WORD_ELECTRIC (EC_GROUP_STATUS << 9) | 0x39 +#define EC_WORD_FORECAST (EC_GROUP_STATUS << 9) | 0x3a +#define EC_WORD_SERENE_GRACE (EC_GROUP_STATUS << 9) | 0x3b +#define EC_WORD_POISON (EC_GROUP_STATUS << 9) | 0x3c +#define EC_WORD_POISON_POINT (EC_GROUP_STATUS << 9) | 0x3d +#define EC_WORD_DRAGON (EC_GROUP_STATUS << 9) | 0x3e +#define EC_WORD_TRACE (EC_GROUP_STATUS << 9) | 0x3f +#define EC_WORD_OBLIVIOUS (EC_GROUP_STATUS << 9) | 0x40 +#define EC_WORD_TRUANT (EC_GROUP_STATUS << 9) | 0x41 +#define EC_WORD_RUN_AWAY (EC_GROUP_STATUS << 9) | 0x42 +#define EC_WORD_STICKY_HOLD (EC_GROUP_STATUS << 9) | 0x43 +#define EC_WORD_CLOUD_NINE (EC_GROUP_STATUS << 9) | 0x44 +#define EC_WORD_NORMAL (EC_GROUP_STATUS << 9) | 0x45 +#define EC_WORD_STEEL (EC_GROUP_STATUS << 9) | 0x46 +#define EC_WORD_ILLUMINATE (EC_GROUP_STATUS << 9) | 0x47 +#define EC_WORD_EARLY_BIRD (EC_GROUP_STATUS << 9) | 0x48 +#define EC_WORD_HUSTLE (EC_GROUP_STATUS << 9) | 0x49 +#define EC_WORD_SHINE (EC_GROUP_STATUS << 9) | 0x4a +#define EC_WORD_FLYING (EC_GROUP_STATUS << 9) | 0x4b +#define EC_WORD_DROUGHT (EC_GROUP_STATUS << 9) | 0x4c +#define EC_WORD_LIGHTNINGROD (EC_GROUP_STATUS << 9) | 0x4d +#define EC_WORD_COMPOUNDEYES (EC_GROUP_STATUS << 9) | 0x4e +#define EC_WORD_MARVEL_SCALE (EC_GROUP_STATUS << 9) | 0x4f +#define EC_WORD_WONDER_GUARD (EC_GROUP_STATUS << 9) | 0x50 +#define EC_WORD_INSOMNIA (EC_GROUP_STATUS << 9) | 0x51 +#define EC_WORD_LEVITATE (EC_GROUP_STATUS << 9) | 0x52 +#define EC_WORD_PLUS (EC_GROUP_STATUS << 9) | 0x53 +#define EC_WORD_PRESSURE (EC_GROUP_STATUS << 9) | 0x54 +#define EC_WORD_LIQUID_OOZE (EC_GROUP_STATUS << 9) | 0x55 +#define EC_WORD_COLOR_CHANGE (EC_GROUP_STATUS << 9) | 0x56 +#define EC_WORD_SOUNDPROOF (EC_GROUP_STATUS << 9) | 0x57 +#define EC_WORD_EFFECT_SPORE (EC_GROUP_STATUS << 9) | 0x58 +#define EC_WORD_PKRS (EC_GROUP_STATUS << 9) | 0x59 +#define EC_WORD_FIRE (EC_GROUP_STATUS << 9) | 0x5a +#define EC_WORD_FLAME_BODY (EC_GROUP_STATUS << 9) | 0x5b +#define EC_WORD_MINUS (EC_GROUP_STATUS << 9) | 0x5c +#define EC_WORD_OWN_TEMPO (EC_GROUP_STATUS << 9) | 0x5d +#define EC_WORD_MAGMA_ARMOR (EC_GROUP_STATUS << 9) | 0x5e +#define EC_WORD_WATER (EC_GROUP_STATUS << 9) | 0x5f +#define EC_WORD_WATER_VEIL (EC_GROUP_STATUS << 9) | 0x60 +#define EC_WORD_BUG (EC_GROUP_STATUS << 9) | 0x61 +#define EC_WORD_SWARM (EC_GROUP_STATUS << 9) | 0x62 +#define EC_WORD_CUTE_CHARM (EC_GROUP_STATUS << 9) | 0x63 +#define EC_WORD_IMMUNITY (EC_GROUP_STATUS << 9) | 0x64 +#define EC_WORD_BLAZE (EC_GROUP_STATUS << 9) | 0x65 +#define EC_WORD_PICKUP (EC_GROUP_STATUS << 9) | 0x66 +#define EC_WORD_PATTERN (EC_GROUP_STATUS << 9) | 0x67 +#define EC_WORD_FLASH_FIRE (EC_GROUP_STATUS << 9) | 0x68 +#define EC_WORD_VITAL_SPIRIT (EC_GROUP_STATUS << 9) | 0x69 +#define EC_WORD_CHLOROPHYLL (EC_GROUP_STATUS << 9) | 0x6a +#define EC_WORD_PURE_POWER (EC_GROUP_STATUS << 9) | 0x6b +#define EC_WORD_SHIELD_DUST (EC_GROUP_STATUS << 9) | 0x6c + +// BATTLE +#define EC_WORD_MATCH_UP (EC_GROUP_BATTLE << 9) | 0x0 +#define EC_WORD_GO (EC_GROUP_BATTLE << 9) | 0x1 +#define EC_WORD_NO_1 (EC_GROUP_BATTLE << 9) | 0x2 +#define EC_WORD_DECIDE (EC_GROUP_BATTLE << 9) | 0x3 +#define EC_WORD_LET_ME_WIN (EC_GROUP_BATTLE << 9) | 0x4 +#define EC_WORD_WINS (EC_GROUP_BATTLE << 9) | 0x5 +#define EC_WORD_WIN (EC_GROUP_BATTLE << 9) | 0x6 +#define EC_WORD_WON (EC_GROUP_BATTLE << 9) | 0x7 +#define EC_WORD_IF_I_WIN (EC_GROUP_BATTLE << 9) | 0x8 +#define EC_WORD_WHEN_I_WIN (EC_GROUP_BATTLE << 9) | 0x9 +#define EC_WORD_CAN_T_WIN (EC_GROUP_BATTLE << 9) | 0xa +#define EC_WORD_CAN_WIN (EC_GROUP_BATTLE << 9) | 0xb +#define EC_WORD_NO_MATCH (EC_GROUP_BATTLE << 9) | 0xc +#define EC_WORD_SPIRIT (EC_GROUP_BATTLE << 9) | 0xd +#define EC_WORD_DECIDED (EC_GROUP_BATTLE << 9) | 0xe +#define EC_WORD_TRUMP_CARD (EC_GROUP_BATTLE << 9) | 0xf +#define EC_WORD_TAKE_THAT (EC_GROUP_BATTLE << 9) | 0x10 +#define EC_WORD_COME_ON (EC_GROUP_BATTLE << 9) | 0x11 +#define EC_WORD_ATTACK (EC_GROUP_BATTLE << 9) | 0x12 +#define EC_WORD_SURRENDER (EC_GROUP_BATTLE << 9) | 0x13 +#define EC_WORD_GUTSY (EC_GROUP_BATTLE << 9) | 0x14 +#define EC_WORD_TALENT (EC_GROUP_BATTLE << 9) | 0x15 +#define EC_WORD_STRATEGY (EC_GROUP_BATTLE << 9) | 0x16 +#define EC_WORD_SMITE (EC_GROUP_BATTLE << 9) | 0x17 +#define EC_WORD_MATCH (EC_GROUP_BATTLE << 9) | 0x18 +#define EC_WORD_VICTORY (EC_GROUP_BATTLE << 9) | 0x19 +#define EC_WORD_OFFENSIVE (EC_GROUP_BATTLE << 9) | 0x1a +#define EC_WORD_SENSE (EC_GROUP_BATTLE << 9) | 0x1b +#define EC_WORD_VERSUS (EC_GROUP_BATTLE << 9) | 0x1c +#define EC_WORD_FIGHTS (EC_GROUP_BATTLE << 9) | 0x1d +#define EC_WORD_POWER (EC_GROUP_BATTLE << 9) | 0x1e +#define EC_WORD_CHALLENGE (EC_GROUP_BATTLE << 9) | 0x1f +#define EC_WORD_STRONG (EC_GROUP_BATTLE << 9) | 0x20 +#define EC_WORD_TOO_STRONG (EC_GROUP_BATTLE << 9) | 0x21 +#define EC_WORD_GO_EASY (EC_GROUP_BATTLE << 9) | 0x22 +#define EC_WORD_FOE (EC_GROUP_BATTLE << 9) | 0x23 +#define EC_WORD_GENIUS (EC_GROUP_BATTLE << 9) | 0x24 +#define EC_WORD_LEGEND (EC_GROUP_BATTLE << 9) | 0x25 +#define EC_WORD_ESCAPE (EC_GROUP_BATTLE << 9) | 0x26 +#define EC_WORD_AIM (EC_GROUP_BATTLE << 9) | 0x27 +#define EC_WORD_BATTLE (EC_GROUP_BATTLE << 9) | 0x28 +#define EC_WORD_FIGHT (EC_GROUP_BATTLE << 9) | 0x29 +#define EC_WORD_RESUSCITATE (EC_GROUP_BATTLE << 9) | 0x2a +#define EC_WORD_POINTS (EC_GROUP_BATTLE << 9) | 0x2b +#define EC_WORD_SERIOUS (EC_GROUP_BATTLE << 9) | 0x2c +#define EC_WORD_GIVE_UP (EC_GROUP_BATTLE << 9) | 0x2d +#define EC_WORD_LOSS (EC_GROUP_BATTLE << 9) | 0x2e +#define EC_WORD_IF_I_LOSE (EC_GROUP_BATTLE << 9) | 0x2f +#define EC_WORD_LOST (EC_GROUP_BATTLE << 9) | 0x30 +#define EC_WORD_LOSE (EC_GROUP_BATTLE << 9) | 0x31 +#define EC_WORD_GUARD (EC_GROUP_BATTLE << 9) | 0x32 +#define EC_WORD_PARTNER (EC_GROUP_BATTLE << 9) | 0x33 +#define EC_WORD_REJECT (EC_GROUP_BATTLE << 9) | 0x34 +#define EC_WORD_ACCEPT (EC_GROUP_BATTLE << 9) | 0x35 +#define EC_WORD_INVINCIBLE (EC_GROUP_BATTLE << 9) | 0x36 +#define EC_WORD_RECEIVED (EC_GROUP_BATTLE << 9) | 0x37 +#define EC_WORD_EASY (EC_GROUP_BATTLE << 9) | 0x38 +#define EC_WORD_WEAK (EC_GROUP_BATTLE << 9) | 0x39 +#define EC_WORD_TOO_WEAK (EC_GROUP_BATTLE << 9) | 0x3a +#define EC_WORD_PUSHOVER (EC_GROUP_BATTLE << 9) | 0x3b +#define EC_WORD_LEADER (EC_GROUP_BATTLE << 9) | 0x3c +#define EC_WORD_RULE (EC_GROUP_BATTLE << 9) | 0x3d +#define EC_WORD_MOVE (EC_GROUP_BATTLE << 9) | 0x3e + +// GREETINGS +#define EC_WORD_THANKS (EC_GROUP_GREETINGS << 9) | 0x0 +#define EC_WORD_YES (EC_GROUP_GREETINGS << 9) | 0x1 +#define EC_WORD_HERE_GOES (EC_GROUP_GREETINGS << 9) | 0x2 +#define EC_WORD_HERE_I_COME (EC_GROUP_GREETINGS << 9) | 0x3 +#define EC_WORD_HERE_IT_IS (EC_GROUP_GREETINGS << 9) | 0x4 +#define EC_WORD_YEAH (EC_GROUP_GREETINGS << 9) | 0x5 +#define EC_WORD_WELCOME (EC_GROUP_GREETINGS << 9) | 0x6 +#define EC_WORD_OI (EC_GROUP_GREETINGS << 9) | 0x7 +#define EC_WORD_HOW_DO (EC_GROUP_GREETINGS << 9) | 0x8 +#define EC_WORD_CONGRATS (EC_GROUP_GREETINGS << 9) | 0x9 +#define EC_WORD_GIVE_ME (EC_GROUP_GREETINGS << 9) | 0xa +#define EC_WORD_SORRY (EC_GROUP_GREETINGS << 9) | 0xb +#define EC_WORD_APOLOGIZE (EC_GROUP_GREETINGS << 9) | 0xc +#define EC_WORD_FORGIVE (EC_GROUP_GREETINGS << 9) | 0xd +#define EC_WORD_HEY_THERE (EC_GROUP_GREETINGS << 9) | 0xe +#define EC_WORD_HELLO (EC_GROUP_GREETINGS << 9) | 0xf +#define EC_WORD_GOOD_BYE (EC_GROUP_GREETINGS << 9) | 0x10 +#define EC_WORD_THANK_YOU (EC_GROUP_GREETINGS << 9) | 0x11 +#define EC_WORD_I_VE_ARRIVED (EC_GROUP_GREETINGS << 9) | 0x12 +#define EC_WORD_PARDON (EC_GROUP_GREETINGS << 9) | 0x13 +#define EC_WORD_EXCUSE (EC_GROUP_GREETINGS << 9) | 0x14 +#define EC_WORD_SEE_YA (EC_GROUP_GREETINGS << 9) | 0x15 +#define EC_WORD_EXCUSE_ME (EC_GROUP_GREETINGS << 9) | 0x16 +#define EC_WORD_WELL_THEN (EC_GROUP_GREETINGS << 9) | 0x17 +#define EC_WORD_GO_AHEAD (EC_GROUP_GREETINGS << 9) | 0x18 +#define EC_WORD_APPRECIATE (EC_GROUP_GREETINGS << 9) | 0x19 +#define EC_WORD_HEY_QUES (EC_GROUP_GREETINGS << 9) | 0x1a +#define EC_WORD_WHAT_S_UP_QUES (EC_GROUP_GREETINGS << 9) | 0x1b +#define EC_WORD_HUH_QUES (EC_GROUP_GREETINGS << 9) | 0x1c +#define EC_WORD_NO (EC_GROUP_GREETINGS << 9) | 0x1d +#define EC_WORD_HI (EC_GROUP_GREETINGS << 9) | 0x1e +#define EC_WORD_YEAH_YEAH (EC_GROUP_GREETINGS << 9) | 0x1f +#define EC_WORD_BYE_BYE (EC_GROUP_GREETINGS << 9) | 0x20 +#define EC_WORD_MEET_YOU (EC_GROUP_GREETINGS << 9) | 0x21 +#define EC_WORD_HEY (EC_GROUP_GREETINGS << 9) | 0x22 +#define EC_WORD_SMELL (EC_GROUP_GREETINGS << 9) | 0x23 +#define EC_WORD_LISTENING (EC_GROUP_GREETINGS << 9) | 0x24 +#define EC_WORD_HOO_HAH (EC_GROUP_GREETINGS << 9) | 0x25 +#define EC_WORD_YAHOO (EC_GROUP_GREETINGS << 9) | 0x26 +#define EC_WORD_YO (EC_GROUP_GREETINGS << 9) | 0x27 +#define EC_WORD_COME_OVER (EC_GROUP_GREETINGS << 9) | 0x28 +#define EC_WORD_COUNT_ON (EC_GROUP_GREETINGS << 9) | 0x29 + +// PEOPLE +#define EC_WORD_OPPONENT (EC_GROUP_PEOPLE << 9) | 0x0 +#define EC_WORD_I (EC_GROUP_PEOPLE << 9) | 0x1 +#define EC_WORD_YOU (EC_GROUP_PEOPLE << 9) | 0x2 +#define EC_WORD_YOURS (EC_GROUP_PEOPLE << 9) | 0x3 +#define EC_WORD_SON (EC_GROUP_PEOPLE << 9) | 0x4 +#define EC_WORD_YOUR (EC_GROUP_PEOPLE << 9) | 0x5 +#define EC_WORD_YOU_RE (EC_GROUP_PEOPLE << 9) | 0x6 +#define EC_WORD_YOU_VE (EC_GROUP_PEOPLE << 9) | 0x7 +#define EC_WORD_MOTHER (EC_GROUP_PEOPLE << 9) | 0x8 +#define EC_WORD_GRANDFATHER (EC_GROUP_PEOPLE << 9) | 0x9 +#define EC_WORD_UNCLE (EC_GROUP_PEOPLE << 9) | 0xa +#define EC_WORD_FATHER (EC_GROUP_PEOPLE << 9) | 0xb +#define EC_WORD_BOY (EC_GROUP_PEOPLE << 9) | 0xc +#define EC_WORD_ADULT (EC_GROUP_PEOPLE << 9) | 0xd +#define EC_WORD_BROTHER (EC_GROUP_PEOPLE << 9) | 0xe +#define EC_WORD_SISTER (EC_GROUP_PEOPLE << 9) | 0xf +#define EC_WORD_GRANDMOTHER (EC_GROUP_PEOPLE << 9) | 0x10 +#define EC_WORD_AUNT (EC_GROUP_PEOPLE << 9) | 0x11 +#define EC_WORD_PARENT (EC_GROUP_PEOPLE << 9) | 0x12 +#define EC_WORD_MAN (EC_GROUP_PEOPLE << 9) | 0x13 +#define EC_WORD_ME (EC_GROUP_PEOPLE << 9) | 0x14 +#define EC_WORD_GIRL (EC_GROUP_PEOPLE << 9) | 0x15 +#define EC_WORD_BABE (EC_GROUP_PEOPLE << 9) | 0x16 +#define EC_WORD_FAMILY (EC_GROUP_PEOPLE << 9) | 0x17 +#define EC_WORD_HER (EC_GROUP_PEOPLE << 9) | 0x18 +#define EC_WORD_HIM (EC_GROUP_PEOPLE << 9) | 0x19 +#define EC_WORD_HE (EC_GROUP_PEOPLE << 9) | 0x1a +#define EC_WORD_PLACE (EC_GROUP_PEOPLE << 9) | 0x1b +#define EC_WORD_DAUGHTER (EC_GROUP_PEOPLE << 9) | 0x1c +#define EC_WORD_HIS (EC_GROUP_PEOPLE << 9) | 0x1d +#define EC_WORD_HE_S (EC_GROUP_PEOPLE << 9) | 0x1e +#define EC_WORD_AREN_T (EC_GROUP_PEOPLE << 9) | 0x1f +#define EC_WORD_SIBLINGS (EC_GROUP_PEOPLE << 9) | 0x20 +#define EC_WORD_KID (EC_GROUP_PEOPLE << 9) | 0x21 +#define EC_WORD_CHILDREN (EC_GROUP_PEOPLE << 9) | 0x22 +#define EC_WORD_MR (EC_GROUP_PEOPLE << 9) | 0x23 +#define EC_WORD_MRS (EC_GROUP_PEOPLE << 9) | 0x24 +#define EC_WORD_MYSELF (EC_GROUP_PEOPLE << 9) | 0x25 +#define EC_WORD_I_WAS (EC_GROUP_PEOPLE << 9) | 0x26 +#define EC_WORD_TO_ME (EC_GROUP_PEOPLE << 9) | 0x27 +#define EC_WORD_MY (EC_GROUP_PEOPLE << 9) | 0x28 +#define EC_WORD_I_AM (EC_GROUP_PEOPLE << 9) | 0x29 +#define EC_WORD_I_VE (EC_GROUP_PEOPLE << 9) | 0x2a +#define EC_WORD_WHO (EC_GROUP_PEOPLE << 9) | 0x2b +#define EC_WORD_SOMEONE (EC_GROUP_PEOPLE << 9) | 0x2c +#define EC_WORD_WHO_WAS (EC_GROUP_PEOPLE << 9) | 0x2d +#define EC_WORD_TO_WHOM (EC_GROUP_PEOPLE << 9) | 0x2e +#define EC_WORD_WHOSE (EC_GROUP_PEOPLE << 9) | 0x2f +#define EC_WORD_WHO_IS (EC_GROUP_PEOPLE << 9) | 0x30 +#define EC_WORD_IT_S (EC_GROUP_PEOPLE << 9) | 0x31 +#define EC_WORD_LADY (EC_GROUP_PEOPLE << 9) | 0x32 +#define EC_WORD_FRIEND (EC_GROUP_PEOPLE << 9) | 0x33 +#define EC_WORD_ALLY (EC_GROUP_PEOPLE << 9) | 0x34 +#define EC_WORD_PERSON (EC_GROUP_PEOPLE << 9) | 0x35 +#define EC_WORD_DUDE (EC_GROUP_PEOPLE << 9) | 0x36 +#define EC_WORD_THEY (EC_GROUP_PEOPLE << 9) | 0x37 +#define EC_WORD_THEY_WERE (EC_GROUP_PEOPLE << 9) | 0x38 +#define EC_WORD_TO_THEM (EC_GROUP_PEOPLE << 9) | 0x39 +#define EC_WORD_THEIR (EC_GROUP_PEOPLE << 9) | 0x3a +#define EC_WORD_THEY_RE (EC_GROUP_PEOPLE << 9) | 0x3b +#define EC_WORD_THEY_VE (EC_GROUP_PEOPLE << 9) | 0x3c +#define EC_WORD_WE (EC_GROUP_PEOPLE << 9) | 0x3d +#define EC_WORD_BEEN (EC_GROUP_PEOPLE << 9) | 0x3e +#define EC_WORD_TO_US (EC_GROUP_PEOPLE << 9) | 0x3f +#define EC_WORD_OUR (EC_GROUP_PEOPLE << 9) | 0x40 +#define EC_WORD_WE_RE (EC_GROUP_PEOPLE << 9) | 0x41 +#define EC_WORD_RIVAL (EC_GROUP_PEOPLE << 9) | 0x42 +#define EC_WORD_WE_VE (EC_GROUP_PEOPLE << 9) | 0x43 +#define EC_WORD_WOMAN (EC_GROUP_PEOPLE << 9) | 0x44 +#define EC_WORD_SHE (EC_GROUP_PEOPLE << 9) | 0x45 +#define EC_WORD_SHE_WAS (EC_GROUP_PEOPLE << 9) | 0x46 +#define EC_WORD_TO_HER (EC_GROUP_PEOPLE << 9) | 0x47 +#define EC_WORD_HERS (EC_GROUP_PEOPLE << 9) | 0x48 +#define EC_WORD_SHE_IS (EC_GROUP_PEOPLE << 9) | 0x49 +#define EC_WORD_SOME (EC_GROUP_PEOPLE << 9) | 0x4a + +// VOICES +#define EC_WORD_EXCL (EC_GROUP_VOICES << 9) | 0x0 +#define EC_WORD_EXCL_EXCL (EC_GROUP_VOICES << 9) | 0x1 +#define EC_WORD_QUES_EXCL (EC_GROUP_VOICES << 9) | 0x2 +#define EC_WORD_QUES (EC_GROUP_VOICES << 9) | 0x3 +#define EC_WORD_ELLIPSIS (EC_GROUP_VOICES << 9) | 0x4 +#define EC_WORD_ELLIPSIS_EXCL (EC_GROUP_VOICES << 9) | 0x5 +#define EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS (EC_GROUP_VOICES << 9) | 0x6 +#define EC_WORD_DASH (EC_GROUP_VOICES << 9) | 0x7 +#define EC_WORD_DASH_DASH_DASH (EC_GROUP_VOICES << 9) | 0x8 +#define EC_WORD_UH_OH (EC_GROUP_VOICES << 9) | 0x9 +#define EC_WORD_WAAAH (EC_GROUP_VOICES << 9) | 0xa +#define EC_WORD_AHAHA (EC_GROUP_VOICES << 9) | 0xb +#define EC_WORD_OH_QUES (EC_GROUP_VOICES << 9) | 0xc +#define EC_WORD_NOPE (EC_GROUP_VOICES << 9) | 0xd +#define EC_WORD_URGH (EC_GROUP_VOICES << 9) | 0xe +#define EC_WORD_HMM (EC_GROUP_VOICES << 9) | 0xf +#define EC_WORD_WHOAH (EC_GROUP_VOICES << 9) | 0x10 +#define EC_WORD_WROOOAAR_EXCL (EC_GROUP_VOICES << 9) | 0x11 +#define EC_WORD_WOW (EC_GROUP_VOICES << 9) | 0x12 +#define EC_WORD_GIGGLE (EC_GROUP_VOICES << 9) | 0x13 +#define EC_WORD_SIGH (EC_GROUP_VOICES << 9) | 0x14 +#define EC_WORD_UNBELIEVABLE (EC_GROUP_VOICES << 9) | 0x15 +#define EC_WORD_CRIES (EC_GROUP_VOICES << 9) | 0x16 +#define EC_WORD_AGREE (EC_GROUP_VOICES << 9) | 0x17 +#define EC_WORD_EH_QUES (EC_GROUP_VOICES << 9) | 0x18 +#define EC_WORD_CRY (EC_GROUP_VOICES << 9) | 0x19 +#define EC_WORD_EHEHE (EC_GROUP_VOICES << 9) | 0x1a +#define EC_WORD_OI_OI_OI (EC_GROUP_VOICES << 9) | 0x1b +#define EC_WORD_OH_YEAH (EC_GROUP_VOICES << 9) | 0x1c +#define EC_WORD_OH (EC_GROUP_VOICES << 9) | 0x1d +#define EC_WORD_OOPS (EC_GROUP_VOICES << 9) | 0x1e +#define EC_WORD_SHOCKED (EC_GROUP_VOICES << 9) | 0x1f +#define EC_WORD_EEK (EC_GROUP_VOICES << 9) | 0x20 +#define EC_WORD_GRAAAH (EC_GROUP_VOICES << 9) | 0x21 +#define EC_WORD_GWAHAHAHA (EC_GROUP_VOICES << 9) | 0x22 +#define EC_WORD_WAY (EC_GROUP_VOICES << 9) | 0x23 +#define EC_WORD_TCH (EC_GROUP_VOICES << 9) | 0x24 +#define EC_WORD_HEHE (EC_GROUP_VOICES << 9) | 0x25 +#define EC_WORD_HAH (EC_GROUP_VOICES << 9) | 0x26 +#define EC_WORD_YUP (EC_GROUP_VOICES << 9) | 0x27 +#define EC_WORD_HAHAHA (EC_GROUP_VOICES << 9) | 0x28 +#define EC_WORD_AIYEEH (EC_GROUP_VOICES << 9) | 0x29 +#define EC_WORD_HIYAH (EC_GROUP_VOICES << 9) | 0x2a +#define EC_WORD_FUFUFU (EC_GROUP_VOICES << 9) | 0x2b +#define EC_WORD_LOL (EC_GROUP_VOICES << 9) | 0x2c +#define EC_WORD_SNORT (EC_GROUP_VOICES << 9) | 0x2d +#define EC_WORD_HUMPH (EC_GROUP_VOICES << 9) | 0x2e +#define EC_WORD_HEHEHE (EC_GROUP_VOICES << 9) | 0x2f +#define EC_WORD_HEH (EC_GROUP_VOICES << 9) | 0x30 +#define EC_WORD_HOHOHO (EC_GROUP_VOICES << 9) | 0x31 +#define EC_WORD_UH_HUH (EC_GROUP_VOICES << 9) | 0x32 +#define EC_WORD_OH_DEAR (EC_GROUP_VOICES << 9) | 0x33 +#define EC_WORD_ARRGH (EC_GROUP_VOICES << 9) | 0x34 +#define EC_WORD_MUFUFU (EC_GROUP_VOICES << 9) | 0x35 +#define EC_WORD_MMM (EC_GROUP_VOICES << 9) | 0x36 +#define EC_WORD_OH_KAY (EC_GROUP_VOICES << 9) | 0x37 +#define EC_WORD_OKAY (EC_GROUP_VOICES << 9) | 0x38 +#define EC_WORD_LALALA (EC_GROUP_VOICES << 9) | 0x39 +#define EC_WORD_YAY (EC_GROUP_VOICES << 9) | 0x3a +#define EC_WORD_AWW (EC_GROUP_VOICES << 9) | 0x3b +#define EC_WORD_WOWEE (EC_GROUP_VOICES << 9) | 0x3c +#define EC_WORD_GWAH (EC_GROUP_VOICES << 9) | 0x3d +#define EC_WORD_WAHAHAHA (EC_GROUP_VOICES << 9) | 0x3e + +// SPEECH +#define EC_WORD_LISTEN (EC_GROUP_SPEECH << 9) | 0x0 +#define EC_WORD_NOT_VERY (EC_GROUP_SPEECH << 9) | 0x1 +#define EC_WORD_MEAN (EC_GROUP_SPEECH << 9) | 0x2 +#define EC_WORD_LIE (EC_GROUP_SPEECH << 9) | 0x3 +#define EC_WORD_LAY (EC_GROUP_SPEECH << 9) | 0x4 +#define EC_WORD_RECOMMEND (EC_GROUP_SPEECH << 9) | 0x5 +#define EC_WORD_NITWIT (EC_GROUP_SPEECH << 9) | 0x6 +#define EC_WORD_QUITE (EC_GROUP_SPEECH << 9) | 0x7 +#define EC_WORD_FROM (EC_GROUP_SPEECH << 9) | 0x8 +#define EC_WORD_FEELING (EC_GROUP_SPEECH << 9) | 0x9 +#define EC_WORD_BUT (EC_GROUP_SPEECH << 9) | 0xa +#define EC_WORD_HOWEVER (EC_GROUP_SPEECH << 9) | 0xb +#define EC_WORD_CASE (EC_GROUP_SPEECH << 9) | 0xc +#define EC_WORD_THE (EC_GROUP_SPEECH << 9) | 0xd +#define EC_WORD_MISS (EC_GROUP_SPEECH << 9) | 0xe +#define EC_WORD_HOW (EC_GROUP_SPEECH << 9) | 0xf +#define EC_WORD_HIT (EC_GROUP_SPEECH << 9) | 0x10 +#define EC_WORD_ENOUGH (EC_GROUP_SPEECH << 9) | 0x11 +#define EC_WORD_A_LOT (EC_GROUP_SPEECH << 9) | 0x12 +#define EC_WORD_A_LITTLE (EC_GROUP_SPEECH << 9) | 0x13 +#define EC_WORD_ABSOLUTELY (EC_GROUP_SPEECH << 9) | 0x14 +#define EC_WORD_AND (EC_GROUP_SPEECH << 9) | 0x15 +#define EC_WORD_ONLY (EC_GROUP_SPEECH << 9) | 0x16 +#define EC_WORD_AROUND (EC_GROUP_SPEECH << 9) | 0x17 +#define EC_WORD_PROBABLY (EC_GROUP_SPEECH << 9) | 0x18 +#define EC_WORD_IF (EC_GROUP_SPEECH << 9) | 0x19 +#define EC_WORD_VERY (EC_GROUP_SPEECH << 9) | 0x1a +#define EC_WORD_A_TINY_BIT (EC_GROUP_SPEECH << 9) | 0x1b +#define EC_WORD_WILD (EC_GROUP_SPEECH << 9) | 0x1c +#define EC_WORD_THAT_S (EC_GROUP_SPEECH << 9) | 0x1d +#define EC_WORD_JUST (EC_GROUP_SPEECH << 9) | 0x1e +#define EC_WORD_EVEN_SO (EC_GROUP_SPEECH << 9) | 0x1f +#define EC_WORD_MUST_BE (EC_GROUP_SPEECH << 9) | 0x20 +#define EC_WORD_NATURALLY (EC_GROUP_SPEECH << 9) | 0x21 +#define EC_WORD_FOR_NOW (EC_GROUP_SPEECH << 9) | 0x22 +#define EC_WORD_UNDERSTOOD (EC_GROUP_SPEECH << 9) | 0x23 +#define EC_WORD_JOKING (EC_GROUP_SPEECH << 9) | 0x24 +#define EC_WORD_READY (EC_GROUP_SPEECH << 9) | 0x25 +#define EC_WORD_SOMETHING (EC_GROUP_SPEECH << 9) | 0x26 +#define EC_WORD_SOMEHOW (EC_GROUP_SPEECH << 9) | 0x27 +#define EC_WORD_ALTHOUGH (EC_GROUP_SPEECH << 9) | 0x28 +#define EC_WORD_ALSO (EC_GROUP_SPEECH << 9) | 0x29 +#define EC_WORD_PERFECT (EC_GROUP_SPEECH << 9) | 0x2a +#define EC_WORD_AS_MUCH_AS (EC_GROUP_SPEECH << 9) | 0x2b +#define EC_WORD_REALLY (EC_GROUP_SPEECH << 9) | 0x2c +#define EC_WORD_TRULY (EC_GROUP_SPEECH << 9) | 0x2d +#define EC_WORD_SERIOUSLY (EC_GROUP_SPEECH << 9) | 0x2e +#define EC_WORD_TOTALLY (EC_GROUP_SPEECH << 9) | 0x2f +#define EC_WORD_UNTIL (EC_GROUP_SPEECH << 9) | 0x30 +#define EC_WORD_AS_IF (EC_GROUP_SPEECH << 9) | 0x31 +#define EC_WORD_MOOD (EC_GROUP_SPEECH << 9) | 0x32 +#define EC_WORD_RATHER (EC_GROUP_SPEECH << 9) | 0x33 +#define EC_WORD_AWFULLY (EC_GROUP_SPEECH << 9) | 0x34 +#define EC_WORD_MODE (EC_GROUP_SPEECH << 9) | 0x35 +#define EC_WORD_MORE (EC_GROUP_SPEECH << 9) | 0x36 +#define EC_WORD_TOO_LATE (EC_GROUP_SPEECH << 9) | 0x37 +#define EC_WORD_FINALLY (EC_GROUP_SPEECH << 9) | 0x38 +#define EC_WORD_ANY (EC_GROUP_SPEECH << 9) | 0x39 +#define EC_WORD_INSTEAD (EC_GROUP_SPEECH << 9) | 0x3a +#define EC_WORD_FANTASTIC (EC_GROUP_SPEECH << 9) | 0x3b + +// ENDINGS +#define EC_WORD_WILL (EC_GROUP_ENDINGS << 9) | 0x0 +#define EC_WORD_WILL_BE_HERE (EC_GROUP_ENDINGS << 9) | 0x1 +#define EC_WORD_OR (EC_GROUP_ENDINGS << 9) | 0x2 +#define EC_WORD_TIMES (EC_GROUP_ENDINGS << 9) | 0x3 +#define EC_WORD_WONDER (EC_GROUP_ENDINGS << 9) | 0x4 +#define EC_WORD_IS_IT_QUES (EC_GROUP_ENDINGS << 9) | 0x5 +#define EC_WORD_BE (EC_GROUP_ENDINGS << 9) | 0x6 +#define EC_WORD_GIMME (EC_GROUP_ENDINGS << 9) | 0x7 +#define EC_WORD_COULD (EC_GROUP_ENDINGS << 9) | 0x8 +#define EC_WORD_LIKELY_TO (EC_GROUP_ENDINGS << 9) | 0x9 +#define EC_WORD_WOULD (EC_GROUP_ENDINGS << 9) | 0xa +#define EC_WORD_IS (EC_GROUP_ENDINGS << 9) | 0xb +#define EC_WORD_ISN_T_IT_QUES (EC_GROUP_ENDINGS << 9) | 0xc +#define EC_WORD_LET_S (EC_GROUP_ENDINGS << 9) | 0xd +#define EC_WORD_OTHER (EC_GROUP_ENDINGS << 9) | 0xe +#define EC_WORD_ARE (EC_GROUP_ENDINGS << 9) | 0xf +#define EC_WORD_WAS (EC_GROUP_ENDINGS << 9) | 0x10 +#define EC_WORD_WERE (EC_GROUP_ENDINGS << 9) | 0x11 +#define EC_WORD_THOSE (EC_GROUP_ENDINGS << 9) | 0x12 +#define EC_WORD_ISN_T (EC_GROUP_ENDINGS << 9) | 0x13 +#define EC_WORD_WON_T (EC_GROUP_ENDINGS << 9) | 0x14 +#define EC_WORD_CAN_T (EC_GROUP_ENDINGS << 9) | 0x15 +#define EC_WORD_CAN (EC_GROUP_ENDINGS << 9) | 0x16 +#define EC_WORD_DON_T (EC_GROUP_ENDINGS << 9) | 0x17 +#define EC_WORD_DO (EC_GROUP_ENDINGS << 9) | 0x18 +#define EC_WORD_DOES (EC_GROUP_ENDINGS << 9) | 0x19 +#define EC_WORD_WHOM (EC_GROUP_ENDINGS << 9) | 0x1a +#define EC_WORD_WHICH (EC_GROUP_ENDINGS << 9) | 0x1b +#define EC_WORD_WASN_T (EC_GROUP_ENDINGS << 9) | 0x1c +#define EC_WORD_WEREN_T (EC_GROUP_ENDINGS << 9) | 0x1d +#define EC_WORD_HAVE (EC_GROUP_ENDINGS << 9) | 0x1e +#define EC_WORD_HAVEN_T (EC_GROUP_ENDINGS << 9) | 0x1f +#define EC_WORD_A (EC_GROUP_ENDINGS << 9) | 0x20 +#define EC_WORD_AN (EC_GROUP_ENDINGS << 9) | 0x21 +#define EC_WORD_NOT (EC_GROUP_ENDINGS << 9) | 0x22 +#define EC_WORD_THERE (EC_GROUP_ENDINGS << 9) | 0x23 +#define EC_WORD_OK_QUES (EC_GROUP_ENDINGS << 9) | 0x24 +#define EC_WORD_SO (EC_GROUP_ENDINGS << 9) | 0x25 +#define EC_WORD_MAYBE (EC_GROUP_ENDINGS << 9) | 0x26 +#define EC_WORD_ABOUT (EC_GROUP_ENDINGS << 9) | 0x27 +#define EC_WORD_OVER (EC_GROUP_ENDINGS << 9) | 0x28 +#define EC_WORD_IT (EC_GROUP_ENDINGS << 9) | 0x29 +#define EC_WORD_ALL (EC_GROUP_ENDINGS << 9) | 0x2a +#define EC_WORD_FOR (EC_GROUP_ENDINGS << 9) | 0x2b +#define EC_WORD_ON (EC_GROUP_ENDINGS << 9) | 0x2c +#define EC_WORD_OFF (EC_GROUP_ENDINGS << 9) | 0x2d +#define EC_WORD_AS (EC_GROUP_ENDINGS << 9) | 0x2e +#define EC_WORD_TO (EC_GROUP_ENDINGS << 9) | 0x2f +#define EC_WORD_WITH (EC_GROUP_ENDINGS << 9) | 0x30 +#define EC_WORD_BETTER (EC_GROUP_ENDINGS << 9) | 0x31 +#define EC_WORD_EVER (EC_GROUP_ENDINGS << 9) | 0x32 +#define EC_WORD_SINCE (EC_GROUP_ENDINGS << 9) | 0x33 +#define EC_WORD_OF (EC_GROUP_ENDINGS << 9) | 0x34 +#define EC_WORD_BELONGS_TO (EC_GROUP_ENDINGS << 9) | 0x35 +#define EC_WORD_AT (EC_GROUP_ENDINGS << 9) | 0x36 +#define EC_WORD_IN (EC_GROUP_ENDINGS << 9) | 0x37 +#define EC_WORD_OUT (EC_GROUP_ENDINGS << 9) | 0x38 +#define EC_WORD_TOO (EC_GROUP_ENDINGS << 9) | 0x39 +#define EC_WORD_LIKE (EC_GROUP_ENDINGS << 9) | 0x3a +#define EC_WORD_DID (EC_GROUP_ENDINGS << 9) | 0x3b +#define EC_WORD_DIDN_T (EC_GROUP_ENDINGS << 9) | 0x3c +#define EC_WORD_DOESN_T (EC_GROUP_ENDINGS << 9) | 0x3d +#define EC_WORD_WITHOUT (EC_GROUP_ENDINGS << 9) | 0x3e +#define EC_WORD_AFTER (EC_GROUP_ENDINGS << 9) | 0x3f +#define EC_WORD_BEFORE (EC_GROUP_ENDINGS << 9) | 0x40 +#define EC_WORD_WHILE (EC_GROUP_ENDINGS << 9) | 0x41 +#define EC_WORD_THAN (EC_GROUP_ENDINGS << 9) | 0x42 +#define EC_WORD_ONCE (EC_GROUP_ENDINGS << 9) | 0x43 +#define EC_WORD_ANYWHERE (EC_GROUP_ENDINGS << 9) | 0x44 + +// FEELINGS +#define EC_WORD_MEET (EC_GROUP_FEELINGS << 9) | 0x0 +#define EC_WORD_PLAY (EC_GROUP_FEELINGS << 9) | 0x1 +#define EC_WORD_HURRIED (EC_GROUP_FEELINGS << 9) | 0x2 +#define EC_WORD_GOES (EC_GROUP_FEELINGS << 9) | 0x3 +#define EC_WORD_GIDDY (EC_GROUP_FEELINGS << 9) | 0x4 +#define EC_WORD_HAPPY (EC_GROUP_FEELINGS << 9) | 0x5 +#define EC_WORD_HAPPINESS (EC_GROUP_FEELINGS << 9) | 0x6 +#define EC_WORD_EXCITE (EC_GROUP_FEELINGS << 9) | 0x7 +#define EC_WORD_IMPORTANT (EC_GROUP_FEELINGS << 9) | 0x8 +#define EC_WORD_FUNNY (EC_GROUP_FEELINGS << 9) | 0x9 +#define EC_WORD_GOT (EC_GROUP_FEELINGS << 9) | 0xa +#define EC_WORD_GO_HOME (EC_GROUP_FEELINGS << 9) | 0xb +#define EC_WORD_DISAPPOINTED (EC_GROUP_FEELINGS << 9) | 0xc +#define EC_WORD_DISAPPOINTS (EC_GROUP_FEELINGS << 9) | 0xd +#define EC_WORD_SAD (EC_GROUP_FEELINGS << 9) | 0xe +#define EC_WORD_TRY (EC_GROUP_FEELINGS << 9) | 0xf +#define EC_WORD_TRIES (EC_GROUP_FEELINGS << 9) | 0x10 +#define EC_WORD_HEARS (EC_GROUP_FEELINGS << 9) | 0x11 +#define EC_WORD_THINK (EC_GROUP_FEELINGS << 9) | 0x12 +#define EC_WORD_HEAR (EC_GROUP_FEELINGS << 9) | 0x13 +#define EC_WORD_WANTS (EC_GROUP_FEELINGS << 9) | 0x14 +#define EC_WORD_MISHEARD (EC_GROUP_FEELINGS << 9) | 0x15 +#define EC_WORD_DISLIKE (EC_GROUP_FEELINGS << 9) | 0x16 +#define EC_WORD_ANGRY (EC_GROUP_FEELINGS << 9) | 0x17 +#define EC_WORD_ANGER (EC_GROUP_FEELINGS << 9) | 0x18 +#define EC_WORD_SCARY (EC_GROUP_FEELINGS << 9) | 0x19 +#define EC_WORD_LONESOME (EC_GROUP_FEELINGS << 9) | 0x1a +#define EC_WORD_DISAPPOINT (EC_GROUP_FEELINGS << 9) | 0x1b +#define EC_WORD_JOY (EC_GROUP_FEELINGS << 9) | 0x1c +#define EC_WORD_GETS (EC_GROUP_FEELINGS << 9) | 0x1d +#define EC_WORD_NEVER (EC_GROUP_FEELINGS << 9) | 0x1e +#define EC_WORD_DARN (EC_GROUP_FEELINGS << 9) | 0x1f +#define EC_WORD_DOWNCAST (EC_GROUP_FEELINGS << 9) | 0x20 +#define EC_WORD_INCREDIBLE (EC_GROUP_FEELINGS << 9) | 0x21 +#define EC_WORD_LIKES (EC_GROUP_FEELINGS << 9) | 0x22 +#define EC_WORD_DISLIKES (EC_GROUP_FEELINGS << 9) | 0x23 +#define EC_WORD_BORING (EC_GROUP_FEELINGS << 9) | 0x24 +#define EC_WORD_CARE (EC_GROUP_FEELINGS << 9) | 0x25 +#define EC_WORD_CARES (EC_GROUP_FEELINGS << 9) | 0x26 +#define EC_WORD_ALL_RIGHT (EC_GROUP_FEELINGS << 9) | 0x27 +#define EC_WORD_ADORE (EC_GROUP_FEELINGS << 9) | 0x28 +#define EC_WORD_DISASTER (EC_GROUP_FEELINGS << 9) | 0x29 +#define EC_WORD_ENJOY (EC_GROUP_FEELINGS << 9) | 0x2a +#define EC_WORD_ENJOYS (EC_GROUP_FEELINGS << 9) | 0x2b +#define EC_WORD_EAT (EC_GROUP_FEELINGS << 9) | 0x2c +#define EC_WORD_LACKING (EC_GROUP_FEELINGS << 9) | 0x2d +#define EC_WORD_BAD (EC_GROUP_FEELINGS << 9) | 0x2e +#define EC_WORD_HARD (EC_GROUP_FEELINGS << 9) | 0x2f +#define EC_WORD_TERRIBLE (EC_GROUP_FEELINGS << 9) | 0x30 +#define EC_WORD_SHOULD (EC_GROUP_FEELINGS << 9) | 0x31 +#define EC_WORD_NICE (EC_GROUP_FEELINGS << 9) | 0x32 +#define EC_WORD_DRINK (EC_GROUP_FEELINGS << 9) | 0x33 +#define EC_WORD_SURPRISE (EC_GROUP_FEELINGS << 9) | 0x34 +#define EC_WORD_FEAR (EC_GROUP_FEELINGS << 9) | 0x35 +#define EC_WORD_WANT (EC_GROUP_FEELINGS << 9) | 0x36 +#define EC_WORD_WAIT (EC_GROUP_FEELINGS << 9) | 0x37 +#define EC_WORD_SATISFIED (EC_GROUP_FEELINGS << 9) | 0x38 +#define EC_WORD_SEE (EC_GROUP_FEELINGS << 9) | 0x39 +#define EC_WORD_RARE (EC_GROUP_FEELINGS << 9) | 0x3a +#define EC_WORD_NEGATIVE (EC_GROUP_FEELINGS << 9) | 0x3b +#define EC_WORD_DONE (EC_GROUP_FEELINGS << 9) | 0x3c +#define EC_WORD_DANGER (EC_GROUP_FEELINGS << 9) | 0x3d +#define EC_WORD_DEFEATED (EC_GROUP_FEELINGS << 9) | 0x3e +#define EC_WORD_BEAT (EC_GROUP_FEELINGS << 9) | 0x3f +#define EC_WORD_GREAT (EC_GROUP_FEELINGS << 9) | 0x40 +#define EC_WORD_ROMANTIC (EC_GROUP_FEELINGS << 9) | 0x41 +#define EC_WORD_QUESTION (EC_GROUP_FEELINGS << 9) | 0x42 +#define EC_WORD_UNDERSTAND (EC_GROUP_FEELINGS << 9) | 0x43 +#define EC_WORD_UNDERSTANDS (EC_GROUP_FEELINGS << 9) | 0x44 + +// CONDITIONS +#define EC_WORD_HOT (EC_GROUP_CONDITIONS << 9) | 0x0 +#define EC_WORD_EXISTS (EC_GROUP_CONDITIONS << 9) | 0x1 +#define EC_WORD_EXCESS (EC_GROUP_CONDITIONS << 9) | 0x2 +#define EC_WORD_APPROVED (EC_GROUP_CONDITIONS << 9) | 0x3 +#define EC_WORD_HAS (EC_GROUP_CONDITIONS << 9) | 0x4 +#define EC_WORD_GOOD (EC_GROUP_CONDITIONS << 9) | 0x5 +#define EC_WORD_LESS (EC_GROUP_CONDITIONS << 9) | 0x6 +#define EC_WORD_MOMENTUM (EC_GROUP_CONDITIONS << 9) | 0x7 +#define EC_WORD_GOING (EC_GROUP_CONDITIONS << 9) | 0x8 +#define EC_WORD_WEIRD (EC_GROUP_CONDITIONS << 9) | 0x9 +#define EC_WORD_BUSY (EC_GROUP_CONDITIONS << 9) | 0xa +#define EC_WORD_TOGETHER (EC_GROUP_CONDITIONS << 9) | 0xb +#define EC_WORD_FULL (EC_GROUP_CONDITIONS << 9) | 0xc +#define EC_WORD_ABSENT (EC_GROUP_CONDITIONS << 9) | 0xd +#define EC_WORD_BEING (EC_GROUP_CONDITIONS << 9) | 0xe +#define EC_WORD_NEED (EC_GROUP_CONDITIONS << 9) | 0xf +#define EC_WORD_TASTY (EC_GROUP_CONDITIONS << 9) | 0x10 +#define EC_WORD_SKILLED (EC_GROUP_CONDITIONS << 9) | 0x11 +#define EC_WORD_NOISY (EC_GROUP_CONDITIONS << 9) | 0x12 +#define EC_WORD_BIG (EC_GROUP_CONDITIONS << 9) | 0x13 +#define EC_WORD_LATE (EC_GROUP_CONDITIONS << 9) | 0x14 +#define EC_WORD_CLOSE (EC_GROUP_CONDITIONS << 9) | 0x15 +#define EC_WORD_DOCILE (EC_GROUP_CONDITIONS << 9) | 0x16 +#define EC_WORD_AMUSING (EC_GROUP_CONDITIONS << 9) | 0x17 +#define EC_WORD_ENTERTAINING (EC_GROUP_CONDITIONS << 9) | 0x18 +#define EC_WORD_PERFECTION (EC_GROUP_CONDITIONS << 9) | 0x19 +#define EC_WORD_PRETTY (EC_GROUP_CONDITIONS << 9) | 0x1a +#define EC_WORD_HEALTHY (EC_GROUP_CONDITIONS << 9) | 0x1b +#define EC_WORD_EXCELLENT (EC_GROUP_CONDITIONS << 9) | 0x1c +#define EC_WORD_UPSIDE_DOWN (EC_GROUP_CONDITIONS << 9) | 0x1d +#define EC_WORD_COLD (EC_GROUP_CONDITIONS << 9) | 0x1e +#define EC_WORD_REFRESHING (EC_GROUP_CONDITIONS << 9) | 0x1f +#define EC_WORD_UNAVOIDABLE (EC_GROUP_CONDITIONS << 9) | 0x20 +#define EC_WORD_MUCH (EC_GROUP_CONDITIONS << 9) | 0x21 +#define EC_WORD_OVERWHELMING (EC_GROUP_CONDITIONS << 9) | 0x22 +#define EC_WORD_FABULOUS (EC_GROUP_CONDITIONS << 9) | 0x23 +#define EC_WORD_ELSE (EC_GROUP_CONDITIONS << 9) | 0x24 +#define EC_WORD_EXPENSIVE (EC_GROUP_CONDITIONS << 9) | 0x25 +#define EC_WORD_CORRECT (EC_GROUP_CONDITIONS << 9) | 0x26 +#define EC_WORD_IMPOSSIBLE (EC_GROUP_CONDITIONS << 9) | 0x27 +#define EC_WORD_SMALL (EC_GROUP_CONDITIONS << 9) | 0x28 +#define EC_WORD_DIFFERENT (EC_GROUP_CONDITIONS << 9) | 0x29 +#define EC_WORD_TIRED (EC_GROUP_CONDITIONS << 9) | 0x2a +#define EC_WORD_SKILL (EC_GROUP_CONDITIONS << 9) | 0x2b +#define EC_WORD_TOP (EC_GROUP_CONDITIONS << 9) | 0x2c +#define EC_WORD_NON_STOP (EC_GROUP_CONDITIONS << 9) | 0x2d +#define EC_WORD_PREPOSTEROUS (EC_GROUP_CONDITIONS << 9) | 0x2e +#define EC_WORD_NONE (EC_GROUP_CONDITIONS << 9) | 0x2f +#define EC_WORD_NOTHING (EC_GROUP_CONDITIONS << 9) | 0x30 +#define EC_WORD_NATURAL (EC_GROUP_CONDITIONS << 9) | 0x31 +#define EC_WORD_BECOMES (EC_GROUP_CONDITIONS << 9) | 0x32 +#define EC_WORD_LUKEWARM (EC_GROUP_CONDITIONS << 9) | 0x33 +#define EC_WORD_FAST (EC_GROUP_CONDITIONS << 9) | 0x34 +#define EC_WORD_LOW (EC_GROUP_CONDITIONS << 9) | 0x35 +#define EC_WORD_AWFUL (EC_GROUP_CONDITIONS << 9) | 0x36 +#define EC_WORD_ALONE (EC_GROUP_CONDITIONS << 9) | 0x37 +#define EC_WORD_BORED (EC_GROUP_CONDITIONS << 9) | 0x38 +#define EC_WORD_SECRET (EC_GROUP_CONDITIONS << 9) | 0x39 +#define EC_WORD_MYSTERY (EC_GROUP_CONDITIONS << 9) | 0x3a +#define EC_WORD_LACKS (EC_GROUP_CONDITIONS << 9) | 0x3b +#define EC_WORD_BEST (EC_GROUP_CONDITIONS << 9) | 0x3c +#define EC_WORD_LOUSY (EC_GROUP_CONDITIONS << 9) | 0x3d +#define EC_WORD_MISTAKE (EC_GROUP_CONDITIONS << 9) | 0x3e +#define EC_WORD_KIND (EC_GROUP_CONDITIONS << 9) | 0x3f +#define EC_WORD_WELL (EC_GROUP_CONDITIONS << 9) | 0x40 +#define EC_WORD_WEAKENED (EC_GROUP_CONDITIONS << 9) | 0x41 +#define EC_WORD_SIMPLE (EC_GROUP_CONDITIONS << 9) | 0x42 +#define EC_WORD_SEEMS (EC_GROUP_CONDITIONS << 9) | 0x43 +#define EC_WORD_BADLY (EC_GROUP_CONDITIONS << 9) | 0x44 + +// ACTIONS +#define EC_WORD_MEETS (EC_GROUP_ACTIONS << 9) | 0x0 +#define EC_WORD_CONCEDE (EC_GROUP_ACTIONS << 9) | 0x1 +#define EC_WORD_GIVE (EC_GROUP_ACTIONS << 9) | 0x2 +#define EC_WORD_GIVES (EC_GROUP_ACTIONS << 9) | 0x3 +#define EC_WORD_PLAYED (EC_GROUP_ACTIONS << 9) | 0x4 +#define EC_WORD_PLAYS (EC_GROUP_ACTIONS << 9) | 0x5 +#define EC_WORD_COLLECT (EC_GROUP_ACTIONS << 9) | 0x6 +#define EC_WORD_WALKING (EC_GROUP_ACTIONS << 9) | 0x7 +#define EC_WORD_WALKS (EC_GROUP_ACTIONS << 9) | 0x8 +#define EC_WORD_SAYS (EC_GROUP_ACTIONS << 9) | 0x9 +#define EC_WORD_WENT (EC_GROUP_ACTIONS << 9) | 0xa +#define EC_WORD_SAID (EC_GROUP_ACTIONS << 9) | 0xb +#define EC_WORD_WAKE_UP (EC_GROUP_ACTIONS << 9) | 0xc +#define EC_WORD_WAKES_UP (EC_GROUP_ACTIONS << 9) | 0xd +#define EC_WORD_ANGERS (EC_GROUP_ACTIONS << 9) | 0xe +#define EC_WORD_TEACH (EC_GROUP_ACTIONS << 9) | 0xf +#define EC_WORD_TEACHES (EC_GROUP_ACTIONS << 9) | 0x10 +#define EC_WORD_PLEASE (EC_GROUP_ACTIONS << 9) | 0x11 +#define EC_WORD_LEARN (EC_GROUP_ACTIONS << 9) | 0x12 +#define EC_WORD_CHANGE (EC_GROUP_ACTIONS << 9) | 0x13 +#define EC_WORD_STORY (EC_GROUP_ACTIONS << 9) | 0x14 +#define EC_WORD_TRUST (EC_GROUP_ACTIONS << 9) | 0x15 +#define EC_WORD_LAVISH (EC_GROUP_ACTIONS << 9) | 0x16 +#define EC_WORD_LISTENS (EC_GROUP_ACTIONS << 9) | 0x17 +#define EC_WORD_HEARING (EC_GROUP_ACTIONS << 9) | 0x18 +#define EC_WORD_TRAINS (EC_GROUP_ACTIONS << 9) | 0x19 +#define EC_WORD_CHOOSE (EC_GROUP_ACTIONS << 9) | 0x1a +#define EC_WORD_COME (EC_GROUP_ACTIONS << 9) | 0x1b +#define EC_WORD_CAME (EC_GROUP_ACTIONS << 9) | 0x1c +#define EC_WORD_SEARCH (EC_GROUP_ACTIONS << 9) | 0x1d +#define EC_WORD_MAKE (EC_GROUP_ACTIONS << 9) | 0x1e +#define EC_WORD_CAUSE (EC_GROUP_ACTIONS << 9) | 0x1f +#define EC_WORD_KNOW (EC_GROUP_ACTIONS << 9) | 0x20 +#define EC_WORD_KNOWS (EC_GROUP_ACTIONS << 9) | 0x21 +#define EC_WORD_REFUSE (EC_GROUP_ACTIONS << 9) | 0x22 +#define EC_WORD_STORES (EC_GROUP_ACTIONS << 9) | 0x23 +#define EC_WORD_BRAG (EC_GROUP_ACTIONS << 9) | 0x24 +#define EC_WORD_IGNORANT (EC_GROUP_ACTIONS << 9) | 0x25 +#define EC_WORD_THINKS (EC_GROUP_ACTIONS << 9) | 0x26 +#define EC_WORD_BELIEVE (EC_GROUP_ACTIONS << 9) | 0x27 +#define EC_WORD_SLIDE (EC_GROUP_ACTIONS << 9) | 0x28 +#define EC_WORD_EATS (EC_GROUP_ACTIONS << 9) | 0x29 +#define EC_WORD_USE (EC_GROUP_ACTIONS << 9) | 0x2a +#define EC_WORD_USES (EC_GROUP_ACTIONS << 9) | 0x2b +#define EC_WORD_USING (EC_GROUP_ACTIONS << 9) | 0x2c +#define EC_WORD_COULDN_T (EC_GROUP_ACTIONS << 9) | 0x2d +#define EC_WORD_CAPABLE (EC_GROUP_ACTIONS << 9) | 0x2e +#define EC_WORD_DISAPPEAR (EC_GROUP_ACTIONS << 9) | 0x2f +#define EC_WORD_APPEAR (EC_GROUP_ACTIONS << 9) | 0x30 +#define EC_WORD_THROW (EC_GROUP_ACTIONS << 9) | 0x31 +#define EC_WORD_WORRY (EC_GROUP_ACTIONS << 9) | 0x32 +#define EC_WORD_SLEPT (EC_GROUP_ACTIONS << 9) | 0x33 +#define EC_WORD_SLEEP (EC_GROUP_ACTIONS << 9) | 0x34 +#define EC_WORD_RELEASE (EC_GROUP_ACTIONS << 9) | 0x35 +#define EC_WORD_DRINKS (EC_GROUP_ACTIONS << 9) | 0x36 +#define EC_WORD_RUNS (EC_GROUP_ACTIONS << 9) | 0x37 +#define EC_WORD_RUN (EC_GROUP_ACTIONS << 9) | 0x38 +#define EC_WORD_WORKS (EC_GROUP_ACTIONS << 9) | 0x39 +#define EC_WORD_WORKING (EC_GROUP_ACTIONS << 9) | 0x3a +#define EC_WORD_TALKING (EC_GROUP_ACTIONS << 9) | 0x3b +#define EC_WORD_TALK (EC_GROUP_ACTIONS << 9) | 0x3c +#define EC_WORD_SINK (EC_GROUP_ACTIONS << 9) | 0x3d +#define EC_WORD_SMACK (EC_GROUP_ACTIONS << 9) | 0x3e +#define EC_WORD_PRETEND (EC_GROUP_ACTIONS << 9) | 0x3f +#define EC_WORD_PRAISE (EC_GROUP_ACTIONS << 9) | 0x40 +#define EC_WORD_OVERDO (EC_GROUP_ACTIONS << 9) | 0x41 +#define EC_WORD_SHOW (EC_GROUP_ACTIONS << 9) | 0x42 +#define EC_WORD_LOOKS (EC_GROUP_ACTIONS << 9) | 0x43 +#define EC_WORD_SEES (EC_GROUP_ACTIONS << 9) | 0x44 +#define EC_WORD_SEEK (EC_GROUP_ACTIONS << 9) | 0x45 +#define EC_WORD_OWN (EC_GROUP_ACTIONS << 9) | 0x46 +#define EC_WORD_TAKE (EC_GROUP_ACTIONS << 9) | 0x47 +#define EC_WORD_ALLOW (EC_GROUP_ACTIONS << 9) | 0x48 +#define EC_WORD_FORGET (EC_GROUP_ACTIONS << 9) | 0x49 +#define EC_WORD_FORGETS (EC_GROUP_ACTIONS << 9) | 0x4a +#define EC_WORD_APPEARS (EC_GROUP_ACTIONS << 9) | 0x4b +#define EC_WORD_FAINT (EC_GROUP_ACTIONS << 9) | 0x4c +#define EC_WORD_FAINTED (EC_GROUP_ACTIONS << 9) | 0x4d + +// LIFESTYLE +#define EC_WORD_CHORES (EC_GROUP_LIFESTYLE << 9) | 0x0 +#define EC_WORD_HOME (EC_GROUP_LIFESTYLE << 9) | 0x1 +#define EC_WORD_MONEY (EC_GROUP_LIFESTYLE << 9) | 0x2 +#define EC_WORD_ALLOWANCE (EC_GROUP_LIFESTYLE << 9) | 0x3 +#define EC_WORD_BATH (EC_GROUP_LIFESTYLE << 9) | 0x4 +#define EC_WORD_CONVERSATION (EC_GROUP_LIFESTYLE << 9) | 0x5 +#define EC_WORD_SCHOOL (EC_GROUP_LIFESTYLE << 9) | 0x6 +#define EC_WORD_COMMEMORATE (EC_GROUP_LIFESTYLE << 9) | 0x7 +#define EC_WORD_HABIT (EC_GROUP_LIFESTYLE << 9) | 0x8 +#define EC_WORD_GROUP (EC_GROUP_LIFESTYLE << 9) | 0x9 +#define EC_WORD_WORD (EC_GROUP_LIFESTYLE << 9) | 0xa +#define EC_WORD_STORE (EC_GROUP_LIFESTYLE << 9) | 0xb +#define EC_WORD_SERVICE (EC_GROUP_LIFESTYLE << 9) | 0xc +#define EC_WORD_WORK (EC_GROUP_LIFESTYLE << 9) | 0xd +#define EC_WORD_SYSTEM (EC_GROUP_LIFESTYLE << 9) | 0xe +#define EC_WORD_TRAIN (EC_GROUP_LIFESTYLE << 9) | 0xf +#define EC_WORD_CLASS (EC_GROUP_LIFESTYLE << 9) | 0x10 +#define EC_WORD_LESSONS (EC_GROUP_LIFESTYLE << 9) | 0x11 +#define EC_WORD_INFORMATION (EC_GROUP_LIFESTYLE << 9) | 0x12 +#define EC_WORD_LIVING (EC_GROUP_LIFESTYLE << 9) | 0x13 +#define EC_WORD_TEACHER (EC_GROUP_LIFESTYLE << 9) | 0x14 +#define EC_WORD_TOURNAMENT (EC_GROUP_LIFESTYLE << 9) | 0x15 +#define EC_WORD_LETTER (EC_GROUP_LIFESTYLE << 9) | 0x16 +#define EC_WORD_EVENT (EC_GROUP_LIFESTYLE << 9) | 0x17 +#define EC_WORD_DIGITAL (EC_GROUP_LIFESTYLE << 9) | 0x18 +#define EC_WORD_TEST (EC_GROUP_LIFESTYLE << 9) | 0x19 +#define EC_WORD_DEPT_STORE (EC_GROUP_LIFESTYLE << 9) | 0x1a +#define EC_WORD_TELEVISION (EC_GROUP_LIFESTYLE << 9) | 0x1b +#define EC_WORD_PHONE (EC_GROUP_LIFESTYLE << 9) | 0x1c +#define EC_WORD_ITEM (EC_GROUP_LIFESTYLE << 9) | 0x1d +#define EC_WORD_NAME (EC_GROUP_LIFESTYLE << 9) | 0x1e +#define EC_WORD_NEWS (EC_GROUP_LIFESTYLE << 9) | 0x1f +#define EC_WORD_POPULAR (EC_GROUP_LIFESTYLE << 9) | 0x20 +#define EC_WORD_PARTY (EC_GROUP_LIFESTYLE << 9) | 0x21 +#define EC_WORD_STUDY (EC_GROUP_LIFESTYLE << 9) | 0x22 +#define EC_WORD_MACHINE (EC_GROUP_LIFESTYLE << 9) | 0x23 +#define EC_WORD_MAIL (EC_GROUP_LIFESTYLE << 9) | 0x24 +#define EC_WORD_MESSAGE (EC_GROUP_LIFESTYLE << 9) | 0x25 +#define EC_WORD_PROMISE (EC_GROUP_LIFESTYLE << 9) | 0x26 +#define EC_WORD_DREAM (EC_GROUP_LIFESTYLE << 9) | 0x27 +#define EC_WORD_KINDERGARTEN (EC_GROUP_LIFESTYLE << 9) | 0x28 +#define EC_WORD_LIFE (EC_GROUP_LIFESTYLE << 9) | 0x29 +#define EC_WORD_RADIO (EC_GROUP_LIFESTYLE << 9) | 0x2a +#define EC_WORD_RENTAL (EC_GROUP_LIFESTYLE << 9) | 0x2b +#define EC_WORD_WORLD (EC_GROUP_LIFESTYLE << 9) | 0x2c + +// HOBBIES +#define EC_WORD_IDOL (EC_GROUP_HOBBIES << 9) | 0x0 +#define EC_WORD_ANIME (EC_GROUP_HOBBIES << 9) | 0x1 +#define EC_WORD_SONG (EC_GROUP_HOBBIES << 9) | 0x2 +#define EC_WORD_MOVIE (EC_GROUP_HOBBIES << 9) | 0x3 +#define EC_WORD_SWEETS (EC_GROUP_HOBBIES << 9) | 0x4 +#define EC_WORD_CHAT (EC_GROUP_HOBBIES << 9) | 0x5 +#define EC_WORD_CHILD_S_PLAY (EC_GROUP_HOBBIES << 9) | 0x6 +#define EC_WORD_TOYS (EC_GROUP_HOBBIES << 9) | 0x7 +#define EC_WORD_MUSIC (EC_GROUP_HOBBIES << 9) | 0x8 +#define EC_WORD_CARDS (EC_GROUP_HOBBIES << 9) | 0x9 +#define EC_WORD_SHOPPING (EC_GROUP_HOBBIES << 9) | 0xa +#define EC_WORD_CAMERA (EC_GROUP_HOBBIES << 9) | 0xb +#define EC_WORD_VIEWING (EC_GROUP_HOBBIES << 9) | 0xc +#define EC_WORD_SPECTATOR (EC_GROUP_HOBBIES << 9) | 0xd +#define EC_WORD_GOURMET (EC_GROUP_HOBBIES << 9) | 0xe +#define EC_WORD_GAME (EC_GROUP_HOBBIES << 9) | 0xf +#define EC_WORD_RPG (EC_GROUP_HOBBIES << 9) | 0x10 +#define EC_WORD_COLLECTION (EC_GROUP_HOBBIES << 9) | 0x11 +#define EC_WORD_COMPLETE (EC_GROUP_HOBBIES << 9) | 0x12 +#define EC_WORD_MAGAZINE (EC_GROUP_HOBBIES << 9) | 0x13 +#define EC_WORD_WALK (EC_GROUP_HOBBIES << 9) | 0x14 +#define EC_WORD_BIKE (EC_GROUP_HOBBIES << 9) | 0x15 +#define EC_WORD_HOBBY (EC_GROUP_HOBBIES << 9) | 0x16 +#define EC_WORD_SPORTS (EC_GROUP_HOBBIES << 9) | 0x17 +#define EC_WORD_SOFTWARE (EC_GROUP_HOBBIES << 9) | 0x18 +#define EC_WORD_SONGS (EC_GROUP_HOBBIES << 9) | 0x19 +#define EC_WORD_DIET (EC_GROUP_HOBBIES << 9) | 0x1a +#define EC_WORD_TREASURE (EC_GROUP_HOBBIES << 9) | 0x1b +#define EC_WORD_TRAVEL (EC_GROUP_HOBBIES << 9) | 0x1c +#define EC_WORD_DANCE (EC_GROUP_HOBBIES << 9) | 0x1d +#define EC_WORD_CHANNEL (EC_GROUP_HOBBIES << 9) | 0x1e +#define EC_WORD_MAKING (EC_GROUP_HOBBIES << 9) | 0x1f +#define EC_WORD_FISHING (EC_GROUP_HOBBIES << 9) | 0x20 +#define EC_WORD_DATE (EC_GROUP_HOBBIES << 9) | 0x21 +#define EC_WORD_DESIGN (EC_GROUP_HOBBIES << 9) | 0x22 +#define EC_WORD_LOCOMOTIVE (EC_GROUP_HOBBIES << 9) | 0x23 +#define EC_WORD_PLUSH_DOLL (EC_GROUP_HOBBIES << 9) | 0x24 +#define EC_WORD_PC (EC_GROUP_HOBBIES << 9) | 0x25 +#define EC_WORD_FLOWERS (EC_GROUP_HOBBIES << 9) | 0x26 +#define EC_WORD_HERO (EC_GROUP_HOBBIES << 9) | 0x27 +#define EC_WORD_NAP (EC_GROUP_HOBBIES << 9) | 0x28 +#define EC_WORD_HEROINE (EC_GROUP_HOBBIES << 9) | 0x29 +#define EC_WORD_FASHION (EC_GROUP_HOBBIES << 9) | 0x2a +#define EC_WORD_ADVENTURE (EC_GROUP_HOBBIES << 9) | 0x2b +#define EC_WORD_BOARD (EC_GROUP_HOBBIES << 9) | 0x2c +#define EC_WORD_BALL (EC_GROUP_HOBBIES << 9) | 0x2d +#define EC_WORD_BOOK (EC_GROUP_HOBBIES << 9) | 0x2e +#define EC_WORD_FESTIVAL (EC_GROUP_HOBBIES << 9) | 0x2f +#define EC_WORD_COMICS (EC_GROUP_HOBBIES << 9) | 0x30 +#define EC_WORD_HOLIDAY (EC_GROUP_HOBBIES << 9) | 0x31 +#define EC_WORD_PLANS (EC_GROUP_HOBBIES << 9) | 0x32 +#define EC_WORD_TRENDY (EC_GROUP_HOBBIES << 9) | 0x33 +#define EC_WORD_VACATION (EC_GROUP_HOBBIES << 9) | 0x34 +#define EC_WORD_LOOK (EC_GROUP_HOBBIES << 9) | 0x35 + +// TIME +#define EC_WORD_FALL (EC_GROUP_TIME << 9) | 0x0 +#define EC_WORD_MORNING (EC_GROUP_TIME << 9) | 0x1 +#define EC_WORD_TOMORROW (EC_GROUP_TIME << 9) | 0x2 +#define EC_WORD_LAST (EC_GROUP_TIME << 9) | 0x3 +#define EC_WORD_DAY (EC_GROUP_TIME << 9) | 0x4 +#define EC_WORD_SOMETIME (EC_GROUP_TIME << 9) | 0x5 +#define EC_WORD_ALWAYS (EC_GROUP_TIME << 9) | 0x6 +#define EC_WORD_CURRENT (EC_GROUP_TIME << 9) | 0x7 +#define EC_WORD_FOREVER (EC_GROUP_TIME << 9) | 0x8 +#define EC_WORD_DAYS (EC_GROUP_TIME << 9) | 0x9 +#define EC_WORD_END (EC_GROUP_TIME << 9) | 0xa +#define EC_WORD_TUESDAY (EC_GROUP_TIME << 9) | 0xb +#define EC_WORD_YESTERDAY (EC_GROUP_TIME << 9) | 0xc +#define EC_WORD_TODAY (EC_GROUP_TIME << 9) | 0xd +#define EC_WORD_FRIDAY (EC_GROUP_TIME << 9) | 0xe +#define EC_WORD_MONDAY (EC_GROUP_TIME << 9) | 0xf +#define EC_WORD_LATER (EC_GROUP_TIME << 9) | 0x10 +#define EC_WORD_EARLIER (EC_GROUP_TIME << 9) | 0x11 +#define EC_WORD_ANOTHER (EC_GROUP_TIME << 9) | 0x12 +#define EC_WORD_TIME (EC_GROUP_TIME << 9) | 0x13 +#define EC_WORD_FINISH (EC_GROUP_TIME << 9) | 0x14 +#define EC_WORD_WEDNESDAY (EC_GROUP_TIME << 9) | 0x15 +#define EC_WORD_SOON (EC_GROUP_TIME << 9) | 0x16 +#define EC_WORD_START (EC_GROUP_TIME << 9) | 0x17 +#define EC_WORD_MONTH (EC_GROUP_TIME << 9) | 0x18 +#define EC_WORD_STOP (EC_GROUP_TIME << 9) | 0x19 +#define EC_WORD_NOW (EC_GROUP_TIME << 9) | 0x1a +#define EC_WORD_FINAL (EC_GROUP_TIME << 9) | 0x1b +#define EC_WORD_NEXT (EC_GROUP_TIME << 9) | 0x1c +#define EC_WORD_AGE (EC_GROUP_TIME << 9) | 0x1d +#define EC_WORD_SATURDAY (EC_GROUP_TIME << 9) | 0x1e +#define EC_WORD_SUMMER (EC_GROUP_TIME << 9) | 0x1f +#define EC_WORD_SUNDAY (EC_GROUP_TIME << 9) | 0x20 +#define EC_WORD_BEGINNING (EC_GROUP_TIME << 9) | 0x21 +#define EC_WORD_SPRING (EC_GROUP_TIME << 9) | 0x22 +#define EC_WORD_DAYTIME (EC_GROUP_TIME << 9) | 0x23 +#define EC_WORD_WINTER (EC_GROUP_TIME << 9) | 0x24 +#define EC_WORD_DAILY (EC_GROUP_TIME << 9) | 0x25 +#define EC_WORD_OLDEN (EC_GROUP_TIME << 9) | 0x26 +#define EC_WORD_ALMOST (EC_GROUP_TIME << 9) | 0x27 +#define EC_WORD_NEARLY (EC_GROUP_TIME << 9) | 0x28 +#define EC_WORD_THURSDAY (EC_GROUP_TIME << 9) | 0x29 +#define EC_WORD_NIGHTTIME (EC_GROUP_TIME << 9) | 0x2a +#define EC_WORD_NIGHT (EC_GROUP_TIME << 9) | 0x2b +#define EC_WORD_WEEK (EC_GROUP_TIME << 9) | 0x2c + +// MISC +#define EC_WORD_HIGHS (EC_GROUP_MISC << 9) | 0x0 +#define EC_WORD_LOWS (EC_GROUP_MISC << 9) | 0x1 +#define EC_WORD_UM (EC_GROUP_MISC << 9) | 0x2 +#define EC_WORD_REAR (EC_GROUP_MISC << 9) | 0x3 +#define EC_WORD_THINGS (EC_GROUP_MISC << 9) | 0x4 +#define EC_WORD_THING (EC_GROUP_MISC << 9) | 0x5 +#define EC_WORD_BELOW (EC_GROUP_MISC << 9) | 0x6 +#define EC_WORD_ABOVE (EC_GROUP_MISC << 9) | 0x7 +#define EC_WORD_BACK (EC_GROUP_MISC << 9) | 0x8 +#define EC_WORD_HIGH (EC_GROUP_MISC << 9) | 0x9 +#define EC_WORD_HERE (EC_GROUP_MISC << 9) | 0xa +#define EC_WORD_INSIDE (EC_GROUP_MISC << 9) | 0xb +#define EC_WORD_OUTSIDE (EC_GROUP_MISC << 9) | 0xc +#define EC_WORD_BESIDE (EC_GROUP_MISC << 9) | 0xd +#define EC_WORD_THIS_IS_IT_EXCL (EC_GROUP_MISC << 9) | 0xe +#define EC_WORD_THIS (EC_GROUP_MISC << 9) | 0xf +#define EC_WORD_EVERY (EC_GROUP_MISC << 9) | 0x10 +#define EC_WORD_THESE (EC_GROUP_MISC << 9) | 0x11 +#define EC_WORD_THESE_WERE (EC_GROUP_MISC << 9) | 0x12 +#define EC_WORD_DOWN (EC_GROUP_MISC << 9) | 0x13 +#define EC_WORD_THAT (EC_GROUP_MISC << 9) | 0x14 +#define EC_WORD_THOSE_ARE (EC_GROUP_MISC << 9) | 0x15 +#define EC_WORD_THOSE_WERE (EC_GROUP_MISC << 9) | 0x16 +#define EC_WORD_THAT_S_IT_EXCL (EC_GROUP_MISC << 9) | 0x17 +#define EC_WORD_AM (EC_GROUP_MISC << 9) | 0x18 +#define EC_WORD_THAT_WAS (EC_GROUP_MISC << 9) | 0x19 +#define EC_WORD_FRONT (EC_GROUP_MISC << 9) | 0x1a +#define EC_WORD_UP (EC_GROUP_MISC << 9) | 0x1b +#define EC_WORD_CHOICE (EC_GROUP_MISC << 9) | 0x1c +#define EC_WORD_FAR (EC_GROUP_MISC << 9) | 0x1d +#define EC_WORD_AWAY (EC_GROUP_MISC << 9) | 0x1e +#define EC_WORD_NEAR (EC_GROUP_MISC << 9) | 0x1f +#define EC_WORD_WHERE (EC_GROUP_MISC << 9) | 0x20 +#define EC_WORD_WHEN (EC_GROUP_MISC << 9) | 0x21 +#define EC_WORD_WHAT (EC_GROUP_MISC << 9) | 0x22 +#define EC_WORD_DEEP (EC_GROUP_MISC << 9) | 0x23 +#define EC_WORD_SHALLOW (EC_GROUP_MISC << 9) | 0x24 +#define EC_WORD_WHY (EC_GROUP_MISC << 9) | 0x25 +#define EC_WORD_CONFUSED (EC_GROUP_MISC << 9) | 0x26 +#define EC_WORD_OPPOSITE (EC_GROUP_MISC << 9) | 0x27 +#define EC_WORD_LEFT (EC_GROUP_MISC << 9) | 0x28 +#define EC_WORD_RIGHT (EC_GROUP_MISC << 9) | 0x29 + +// ADJECTIVES +#define EC_WORD_WANDERING (EC_GROUP_ADJECTIVES << 9) | 0x0 +#define EC_WORD_RICKETY (EC_GROUP_ADJECTIVES << 9) | 0x1 +#define EC_WORD_ROCK_SOLID (EC_GROUP_ADJECTIVES << 9) | 0x2 +#define EC_WORD_HUNGRY (EC_GROUP_ADJECTIVES << 9) | 0x3 +#define EC_WORD_TIGHT (EC_GROUP_ADJECTIVES << 9) | 0x4 +#define EC_WORD_TICKLISH (EC_GROUP_ADJECTIVES << 9) | 0x5 +#define EC_WORD_TWIRLING (EC_GROUP_ADJECTIVES << 9) | 0x6 +#define EC_WORD_SPIRALING (EC_GROUP_ADJECTIVES << 9) | 0x7 +#define EC_WORD_THIRSTY (EC_GROUP_ADJECTIVES << 9) | 0x8 +#define EC_WORD_LOLLING (EC_GROUP_ADJECTIVES << 9) | 0x9 +#define EC_WORD_SILKY (EC_GROUP_ADJECTIVES << 9) | 0xa +#define EC_WORD_SADLY (EC_GROUP_ADJECTIVES << 9) | 0xb +#define EC_WORD_HOPELESS (EC_GROUP_ADJECTIVES << 9) | 0xc +#define EC_WORD_USELESS (EC_GROUP_ADJECTIVES << 9) | 0xd +#define EC_WORD_DROOLING (EC_GROUP_ADJECTIVES << 9) | 0xe +#define EC_WORD_EXCITING (EC_GROUP_ADJECTIVES << 9) | 0xf +#define EC_WORD_THICK (EC_GROUP_ADJECTIVES << 9) | 0x10 +#define EC_WORD_SMOOTH (EC_GROUP_ADJECTIVES << 9) | 0x11 +#define EC_WORD_SLIMY (EC_GROUP_ADJECTIVES << 9) | 0x12 +#define EC_WORD_THIN (EC_GROUP_ADJECTIVES << 9) | 0x13 +#define EC_WORD_BREAK (EC_GROUP_ADJECTIVES << 9) | 0x14 +#define EC_WORD_VORACIOUS (EC_GROUP_ADJECTIVES << 9) | 0x15 +#define EC_WORD_SCATTER (EC_GROUP_ADJECTIVES << 9) | 0x16 +#define EC_WORD_AWESOME (EC_GROUP_ADJECTIVES << 9) | 0x17 +#define EC_WORD_WIMPY (EC_GROUP_ADJECTIVES << 9) | 0x18 +#define EC_WORD_WOBBLY (EC_GROUP_ADJECTIVES << 9) | 0x19 +#define EC_WORD_SHAKY (EC_GROUP_ADJECTIVES << 9) | 0x1a +#define EC_WORD_RIPPED (EC_GROUP_ADJECTIVES << 9) | 0x1b +#define EC_WORD_SHREDDED (EC_GROUP_ADJECTIVES << 9) | 0x1c +#define EC_WORD_INCREASING (EC_GROUP_ADJECTIVES << 9) | 0x1d +#define EC_WORD_YET (EC_GROUP_ADJECTIVES << 9) | 0x1e +#define EC_WORD_DESTROYED (EC_GROUP_ADJECTIVES << 9) | 0x1f +#define EC_WORD_FIERY (EC_GROUP_ADJECTIVES << 9) | 0x20 +#define EC_WORD_LOVEY_DOVEY (EC_GROUP_ADJECTIVES << 9) | 0x21 +#define EC_WORD_HAPPILY (EC_GROUP_ADJECTIVES << 9) | 0x22 +#define EC_WORD_ANTICIPATION (EC_GROUP_ADJECTIVES << 9) | 0x23 + +// EVENTS +#define EC_WORD_APPEAL (EC_GROUP_EVENTS << 9) | 0x0 +#define EC_WORD_EVENTS (EC_GROUP_EVENTS << 9) | 0x1 +#define EC_WORD_STAY_AT_HOME (EC_GROUP_EVENTS << 9) | 0x2 +#define EC_WORD_BERRY (EC_GROUP_EVENTS << 9) | 0x3 +#define EC_WORD_CONTEST (EC_GROUP_EVENTS << 9) | 0x4 +#define EC_WORD_MC (EC_GROUP_EVENTS << 9) | 0x5 +#define EC_WORD_JUDGE (EC_GROUP_EVENTS << 9) | 0x6 +#define EC_WORD_SUPER (EC_GROUP_EVENTS << 9) | 0x7 +#define EC_WORD_STAGE (EC_GROUP_EVENTS << 9) | 0x8 +#define EC_WORD_HALL_OF_FAME (EC_GROUP_EVENTS << 9) | 0x9 +#define EC_WORD_EVOLUTION (EC_GROUP_EVENTS << 9) | 0xa +#define EC_WORD_HYPER (EC_GROUP_EVENTS << 9) | 0xb +#define EC_WORD_BATTLE_TOWER (EC_GROUP_EVENTS << 9) | 0xc +#define EC_WORD_LEADERS (EC_GROUP_EVENTS << 9) | 0xd +#define EC_WORD_BATTLE_ROOM (EC_GROUP_EVENTS << 9) | 0xe +#define EC_WORD_HIDDEN (EC_GROUP_EVENTS << 9) | 0xf +#define EC_WORD_SECRET_BASE (EC_GROUP_EVENTS << 9) | 0x10 +#define EC_WORD_BLEND (EC_GROUP_EVENTS << 9) | 0x11 +#define EC_WORD_POKEBLOCK (EC_GROUP_EVENTS << 9) | 0x12 +#define EC_WORD_MASTER (EC_GROUP_EVENTS << 9) | 0x13 +#define EC_WORD_RANK (EC_GROUP_EVENTS << 9) | 0x14 +#define EC_WORD_RIBBON (EC_GROUP_EVENTS << 9) | 0x15 + +// TRENDY_SAYING +#define EC_WORD_KTHX_BYE (EC_GROUP_TRENDY_SAYING << 9) | 0x0 +#define EC_WORD_YES_SIR_EXCL (EC_GROUP_TRENDY_SAYING << 9) | 0x1 +#define EC_WORD_AVANT_GARDE (EC_GROUP_TRENDY_SAYING << 9) | 0x2 +#define EC_WORD_COUPLE (EC_GROUP_TRENDY_SAYING << 9) | 0x3 +#define EC_WORD_MUCH_OBLIGED (EC_GROUP_TRENDY_SAYING << 9) | 0x4 +#define EC_WORD_YEEHAW_EXCL (EC_GROUP_TRENDY_SAYING << 9) | 0x5 +#define EC_WORD_MEGA (EC_GROUP_TRENDY_SAYING << 9) | 0x6 +#define EC_WORD_1_HIT_KO_EXCL (EC_GROUP_TRENDY_SAYING << 9) | 0x7 +#define EC_WORD_DESTINY (EC_GROUP_TRENDY_SAYING << 9) | 0x8 +#define EC_WORD_CANCEL (EC_GROUP_TRENDY_SAYING << 9) | 0x9 +#define EC_WORD_NEW (EC_GROUP_TRENDY_SAYING << 9) | 0xa +#define EC_WORD_FLATTEN (EC_GROUP_TRENDY_SAYING << 9) | 0xb +#define EC_WORD_KIDDING (EC_GROUP_TRENDY_SAYING << 9) | 0xc +#define EC_WORD_LOSER (EC_GROUP_TRENDY_SAYING << 9) | 0xd +#define EC_WORD_LOSING (EC_GROUP_TRENDY_SAYING << 9) | 0xe +#define EC_WORD_HAPPENING (EC_GROUP_TRENDY_SAYING << 9) | 0xf +#define EC_WORD_HIP_AND (EC_GROUP_TRENDY_SAYING << 9) | 0x10 +#define EC_WORD_SHAKE (EC_GROUP_TRENDY_SAYING << 9) | 0x11 +#define EC_WORD_SHADY (EC_GROUP_TRENDY_SAYING << 9) | 0x12 +#define EC_WORD_UPBEAT (EC_GROUP_TRENDY_SAYING << 9) | 0x13 +#define EC_WORD_MODERN (EC_GROUP_TRENDY_SAYING << 9) | 0x14 +#define EC_WORD_SMELL_YA (EC_GROUP_TRENDY_SAYING << 9) | 0x15 +#define EC_WORD_BANG (EC_GROUP_TRENDY_SAYING << 9) | 0x16 +#define EC_WORD_KNOCKOUT (EC_GROUP_TRENDY_SAYING << 9) | 0x17 +#define EC_WORD_HASSLE (EC_GROUP_TRENDY_SAYING << 9) | 0x18 +#define EC_WORD_WINNER (EC_GROUP_TRENDY_SAYING << 9) | 0x19 +#define EC_WORD_FEVER (EC_GROUP_TRENDY_SAYING << 9) | 0x1a +#define EC_WORD_WANNABE (EC_GROUP_TRENDY_SAYING << 9) | 0x1b +#define EC_WORD_BABY (EC_GROUP_TRENDY_SAYING << 9) | 0x1c +#define EC_WORD_HEART (EC_GROUP_TRENDY_SAYING << 9) | 0x1d +#define EC_WORD_OLD (EC_GROUP_TRENDY_SAYING << 9) | 0x1e +#define EC_WORD_YOUNG (EC_GROUP_TRENDY_SAYING << 9) | 0x1f +#define EC_WORD_UGLY (EC_GROUP_TRENDY_SAYING << 9) | 0x20 + #define EC_GROUP(word) ((word) >> 9) #define EC_INDEX(word) ((word) & 0x1FF) diff --git a/include/easy_chat_constants.h b/include/easy_chat_constants.h deleted file mode 100644 index e6dfcf460..000000000 --- a/include/easy_chat_constants.h +++ /dev/null @@ -1,1056 +0,0 @@ -#ifndef GUARD_EASY_CHAT_CONSTANTS -#define GUARD_EASY_CHAT_CONSTANTS - -#define EC_GROUP_POKEMON 0x0 -#define EC_GROUP_TRAINER 0x1 -#define EC_GROUP_STATUS 0x2 -#define EC_GROUP_BATTLE 0x3 -#define EC_GROUP_GREETINGS 0x4 -#define EC_GROUP_PEOPLE 0x5 -#define EC_GROUP_VOICES 0x6 -#define EC_GROUP_SPEECH 0x7 -#define EC_GROUP_ENDINGS 0x8 -#define EC_GROUP_FEELINGS 0x9 -#define EC_GROUP_CONDITIONS 0xa -#define EC_GROUP_ACTIONS 0xb -#define EC_GROUP_LIFESTYLE 0xc -#define EC_GROUP_HOBBIES 0xd -#define EC_GROUP_TIME 0xe -#define EC_GROUP_MISC 0xf -#define EC_GROUP_ADJECTIVES 0x10 -#define EC_GROUP_EVENTS 0x11 -#define EC_GROUP_MOVE_1 0x12 -#define EC_GROUP_MOVE_2 0x13 -#define EC_GROUP_TRENDY_SAYING 0x14 -#define EC_GROUP_POKEMON_2 0x15 - -// TRAINER -#define EC_WORD_I_CHOOSE_YOU (EC_GROUP_TRAINER << 9) | 0x0 -#define EC_WORD_GOTCHA (EC_GROUP_TRAINER << 9) | 0x1 -#define EC_WORD_TRADE (EC_GROUP_TRAINER << 9) | 0x2 -#define EC_WORD_SAPPHIRE (EC_GROUP_TRAINER << 9) | 0x3 -#define EC_WORD_EVOLVE (EC_GROUP_TRAINER << 9) | 0x4 -#define EC_WORD_ENCYCLOPEDIA (EC_GROUP_TRAINER << 9) | 0x5 -#define EC_WORD_NATURE (EC_GROUP_TRAINER << 9) | 0x6 -#define EC_WORD_CENTER (EC_GROUP_TRAINER << 9) | 0x7 -#define EC_WORD_EGG (EC_GROUP_TRAINER << 9) | 0x8 -#define EC_WORD_LINK (EC_GROUP_TRAINER << 9) | 0x9 -#define EC_WORD_SP_ABILITY (EC_GROUP_TRAINER << 9) | 0xa -#define EC_WORD_TRAINER (EC_GROUP_TRAINER << 9) | 0xb -#define EC_WORD_VERSION (EC_GROUP_TRAINER << 9) | 0xc -#define EC_WORD_POKENAV (EC_GROUP_TRAINER << 9) | 0xd -#define EC_WORD_POKEMON (EC_GROUP_TRAINER << 9) | 0xe -#define EC_WORD_GET (EC_GROUP_TRAINER << 9) | 0xf -#define EC_WORD_POKEDEX (EC_GROUP_TRAINER << 9) | 0x10 -#define EC_WORD_RUBY (EC_GROUP_TRAINER << 9) | 0x11 -#define EC_WORD_LEVEL (EC_GROUP_TRAINER << 9) | 0x12 - -// STATUS -#define EC_WORD_DARK (EC_GROUP_STATUS << 9) | 0x0 -#define EC_WORD_STENCH (EC_GROUP_STATUS << 9) | 0x1 -#define EC_WORD_THICK_FAT (EC_GROUP_STATUS << 9) | 0x2 -#define EC_WORD_RAIN_DISH (EC_GROUP_STATUS << 9) | 0x3 -#define EC_WORD_DRIZZLE (EC_GROUP_STATUS << 9) | 0x4 -#define EC_WORD_ARENA_TRAP (EC_GROUP_STATUS << 9) | 0x5 -#define EC_WORD_INTIMIDATE (EC_GROUP_STATUS << 9) | 0x6 -#define EC_WORD_ROCK_HEAD (EC_GROUP_STATUS << 9) | 0x7 -#define EC_WORD_COLOR (EC_GROUP_STATUS << 9) | 0x8 -#define EC_WORD_ALT_COLOR (EC_GROUP_STATUS << 9) | 0x9 -#define EC_WORD_ROCK (EC_GROUP_STATUS << 9) | 0xa -#define EC_WORD_BEAUTIFUL (EC_GROUP_STATUS << 9) | 0xb -#define EC_WORD_BEAUTY (EC_GROUP_STATUS << 9) | 0xc -#define EC_WORD_AIR_LOCK (EC_GROUP_STATUS << 9) | 0xd -#define EC_WORD_PSYCHIC (EC_GROUP_STATUS << 9) | 0xe -#define EC_WORD_HYPER_CUTTER (EC_GROUP_STATUS << 9) | 0xf -#define EC_WORD_FIGHTING (EC_GROUP_STATUS << 9) | 0x10 -#define EC_WORD_SHADOW_TAG (EC_GROUP_STATUS << 9) | 0x11 -#define EC_WORD_SMART (EC_GROUP_STATUS << 9) | 0x12 -#define EC_WORD_SMARTNESS (EC_GROUP_STATUS << 9) | 0x13 -#define EC_WORD_SPEED_BOOST (EC_GROUP_STATUS << 9) | 0x14 -#define EC_WORD_COOL (EC_GROUP_STATUS << 9) | 0x15 -#define EC_WORD_COOLNESS (EC_GROUP_STATUS << 9) | 0x16 -#define EC_WORD_BATTLE_ARMOR (EC_GROUP_STATUS << 9) | 0x17 -#define EC_WORD_CUTE (EC_GROUP_STATUS << 9) | 0x18 -#define EC_WORD_CUTENESS (EC_GROUP_STATUS << 9) | 0x19 -#define EC_WORD_STURDY (EC_GROUP_STATUS << 9) | 0x1a -#define EC_WORD_SUCTION_CUPS (EC_GROUP_STATUS << 9) | 0x1b -#define EC_WORD_GRASS (EC_GROUP_STATUS << 9) | 0x1c -#define EC_WORD_CLEAR_BODY (EC_GROUP_STATUS << 9) | 0x1d -#define EC_WORD_TORRENT (EC_GROUP_STATUS << 9) | 0x1e -#define EC_WORD_GHOST (EC_GROUP_STATUS << 9) | 0x1f -#define EC_WORD_ICE (EC_GROUP_STATUS << 9) | 0x20 -#define EC_WORD_GUTS (EC_GROUP_STATUS << 9) | 0x21 -#define EC_WORD_ROUGH_SKIN (EC_GROUP_STATUS << 9) | 0x22 -#define EC_WORD_SHELL_ARMOR (EC_GROUP_STATUS << 9) | 0x23 -#define EC_WORD_NATURAL_CURE (EC_GROUP_STATUS << 9) | 0x24 -#define EC_WORD_DAMP (EC_GROUP_STATUS << 9) | 0x25 -#define EC_WORD_GROUND (EC_GROUP_STATUS << 9) | 0x26 -#define EC_WORD_LIMBER (EC_GROUP_STATUS << 9) | 0x27 -#define EC_WORD_MAGNET_PULL (EC_GROUP_STATUS << 9) | 0x28 -#define EC_WORD_WHITE_SMOKE (EC_GROUP_STATUS << 9) | 0x29 -#define EC_WORD_SYNCHRONIZE (EC_GROUP_STATUS << 9) | 0x2a -#define EC_WORD_OVERGROW (EC_GROUP_STATUS << 9) | 0x2b -#define EC_WORD_SWIFT_SWIM (EC_GROUP_STATUS << 9) | 0x2c -#define EC_WORD_SAND_STREAM (EC_GROUP_STATUS << 9) | 0x2d -#define EC_WORD_SAND_VEIL (EC_GROUP_STATUS << 9) | 0x2e -#define EC_WORD_KEEN_EYE (EC_GROUP_STATUS << 9) | 0x2f -#define EC_WORD_INNER_FOCUS (EC_GROUP_STATUS << 9) | 0x30 -#define EC_WORD_STATIC (EC_GROUP_STATUS << 9) | 0x31 -#define EC_WORD_TYPE (EC_GROUP_STATUS << 9) | 0x32 -#define EC_WORD_TOUGH (EC_GROUP_STATUS << 9) | 0x33 -#define EC_WORD_TOUGHNESS (EC_GROUP_STATUS << 9) | 0x34 -#define EC_WORD_SHED_SKIN (EC_GROUP_STATUS << 9) | 0x35 -#define EC_WORD_HUGE_POWER (EC_GROUP_STATUS << 9) | 0x36 -#define EC_WORD_VOLT_ABSORB (EC_GROUP_STATUS << 9) | 0x37 -#define EC_WORD_WATER_ABSORB (EC_GROUP_STATUS << 9) | 0x38 -#define EC_WORD_ELECTRIC (EC_GROUP_STATUS << 9) | 0x39 -#define EC_WORD_FORECAST (EC_GROUP_STATUS << 9) | 0x3a -#define EC_WORD_SERENE_GRACE (EC_GROUP_STATUS << 9) | 0x3b -#define EC_WORD_POISON (EC_GROUP_STATUS << 9) | 0x3c -#define EC_WORD_POISON_POINT (EC_GROUP_STATUS << 9) | 0x3d -#define EC_WORD_DRAGON (EC_GROUP_STATUS << 9) | 0x3e -#define EC_WORD_TRACE (EC_GROUP_STATUS << 9) | 0x3f -#define EC_WORD_OBLIVIOUS (EC_GROUP_STATUS << 9) | 0x40 -#define EC_WORD_TRUANT (EC_GROUP_STATUS << 9) | 0x41 -#define EC_WORD_RUN_AWAY (EC_GROUP_STATUS << 9) | 0x42 -#define EC_WORD_STICKY_HOLD (EC_GROUP_STATUS << 9) | 0x43 -#define EC_WORD_CLOUD_NINE (EC_GROUP_STATUS << 9) | 0x44 -#define EC_WORD_NORMAL (EC_GROUP_STATUS << 9) | 0x45 -#define EC_WORD_STEEL (EC_GROUP_STATUS << 9) | 0x46 -#define EC_WORD_ILLUMINATE (EC_GROUP_STATUS << 9) | 0x47 -#define EC_WORD_EARLY_BIRD (EC_GROUP_STATUS << 9) | 0x48 -#define EC_WORD_HUSTLE (EC_GROUP_STATUS << 9) | 0x49 -#define EC_WORD_SHINE (EC_GROUP_STATUS << 9) | 0x4a -#define EC_WORD_FLYING (EC_GROUP_STATUS << 9) | 0x4b -#define EC_WORD_DROUGHT (EC_GROUP_STATUS << 9) | 0x4c -#define EC_WORD_LIGHTNINGROD (EC_GROUP_STATUS << 9) | 0x4d -#define EC_WORD_COMPOUNDEYES (EC_GROUP_STATUS << 9) | 0x4e -#define EC_WORD_MARVEL_SCALE (EC_GROUP_STATUS << 9) | 0x4f -#define EC_WORD_WONDER_GUARD (EC_GROUP_STATUS << 9) | 0x50 -#define EC_WORD_INSOMNIA (EC_GROUP_STATUS << 9) | 0x51 -#define EC_WORD_LEVITATE (EC_GROUP_STATUS << 9) | 0x52 -#define EC_WORD_PLUS (EC_GROUP_STATUS << 9) | 0x53 -#define EC_WORD_PRESSURE (EC_GROUP_STATUS << 9) | 0x54 -#define EC_WORD_LIQUID_OOZE (EC_GROUP_STATUS << 9) | 0x55 -#define EC_WORD_COLOR_CHANGE (EC_GROUP_STATUS << 9) | 0x56 -#define EC_WORD_SOUNDPROOF (EC_GROUP_STATUS << 9) | 0x57 -#define EC_WORD_EFFECT_SPORE (EC_GROUP_STATUS << 9) | 0x58 -#define EC_WORD_PKRS (EC_GROUP_STATUS << 9) | 0x59 -#define EC_WORD_FIRE (EC_GROUP_STATUS << 9) | 0x5a -#define EC_WORD_FLAME_BODY (EC_GROUP_STATUS << 9) | 0x5b -#define EC_WORD_MINUS (EC_GROUP_STATUS << 9) | 0x5c -#define EC_WORD_OWN_TEMPO (EC_GROUP_STATUS << 9) | 0x5d -#define EC_WORD_MAGMA_ARMOR (EC_GROUP_STATUS << 9) | 0x5e -#define EC_WORD_WATER (EC_GROUP_STATUS << 9) | 0x5f -#define EC_WORD_WATER_VEIL (EC_GROUP_STATUS << 9) | 0x60 -#define EC_WORD_BUG (EC_GROUP_STATUS << 9) | 0x61 -#define EC_WORD_SWARM (EC_GROUP_STATUS << 9) | 0x62 -#define EC_WORD_CUTE_CHARM (EC_GROUP_STATUS << 9) | 0x63 -#define EC_WORD_IMMUNITY (EC_GROUP_STATUS << 9) | 0x64 -#define EC_WORD_BLAZE (EC_GROUP_STATUS << 9) | 0x65 -#define EC_WORD_PICKUP (EC_GROUP_STATUS << 9) | 0x66 -#define EC_WORD_PATTERN (EC_GROUP_STATUS << 9) | 0x67 -#define EC_WORD_FLASH_FIRE (EC_GROUP_STATUS << 9) | 0x68 -#define EC_WORD_VITAL_SPIRIT (EC_GROUP_STATUS << 9) | 0x69 -#define EC_WORD_CHLOROPHYLL (EC_GROUP_STATUS << 9) | 0x6a -#define EC_WORD_PURE_POWER (EC_GROUP_STATUS << 9) | 0x6b -#define EC_WORD_SHIELD_DUST (EC_GROUP_STATUS << 9) | 0x6c - -// BATTLE -#define EC_WORD_MATCH_UP (EC_GROUP_BATTLE << 9) | 0x0 -#define EC_WORD_GO (EC_GROUP_BATTLE << 9) | 0x1 -#define EC_WORD_NO_1 (EC_GROUP_BATTLE << 9) | 0x2 -#define EC_WORD_DECIDE (EC_GROUP_BATTLE << 9) | 0x3 -#define EC_WORD_LET_ME_WIN (EC_GROUP_BATTLE << 9) | 0x4 -#define EC_WORD_WINS (EC_GROUP_BATTLE << 9) | 0x5 -#define EC_WORD_WIN (EC_GROUP_BATTLE << 9) | 0x6 -#define EC_WORD_WON (EC_GROUP_BATTLE << 9) | 0x7 -#define EC_WORD_IF_I_WIN (EC_GROUP_BATTLE << 9) | 0x8 -#define EC_WORD_WHEN_I_WIN (EC_GROUP_BATTLE << 9) | 0x9 -#define EC_WORD_CAN_T_WIN (EC_GROUP_BATTLE << 9) | 0xa -#define EC_WORD_CAN_WIN (EC_GROUP_BATTLE << 9) | 0xb -#define EC_WORD_NO_MATCH (EC_GROUP_BATTLE << 9) | 0xc -#define EC_WORD_SPIRIT (EC_GROUP_BATTLE << 9) | 0xd -#define EC_WORD_DECIDED (EC_GROUP_BATTLE << 9) | 0xe -#define EC_WORD_TRUMP_CARD (EC_GROUP_BATTLE << 9) | 0xf -#define EC_WORD_TAKE_THAT (EC_GROUP_BATTLE << 9) | 0x10 -#define EC_WORD_COME_ON (EC_GROUP_BATTLE << 9) | 0x11 -#define EC_WORD_ATTACK (EC_GROUP_BATTLE << 9) | 0x12 -#define EC_WORD_SURRENDER (EC_GROUP_BATTLE << 9) | 0x13 -#define EC_WORD_GUTSY (EC_GROUP_BATTLE << 9) | 0x14 -#define EC_WORD_TALENT (EC_GROUP_BATTLE << 9) | 0x15 -#define EC_WORD_STRATEGY (EC_GROUP_BATTLE << 9) | 0x16 -#define EC_WORD_SMITE (EC_GROUP_BATTLE << 9) | 0x17 -#define EC_WORD_MATCH (EC_GROUP_BATTLE << 9) | 0x18 -#define EC_WORD_VICTORY (EC_GROUP_BATTLE << 9) | 0x19 -#define EC_WORD_OFFENSIVE (EC_GROUP_BATTLE << 9) | 0x1a -#define EC_WORD_SENSE (EC_GROUP_BATTLE << 9) | 0x1b -#define EC_WORD_VERSUS (EC_GROUP_BATTLE << 9) | 0x1c -#define EC_WORD_FIGHTS (EC_GROUP_BATTLE << 9) | 0x1d -#define EC_WORD_POWER (EC_GROUP_BATTLE << 9) | 0x1e -#define EC_WORD_CHALLENGE (EC_GROUP_BATTLE << 9) | 0x1f -#define EC_WORD_STRONG (EC_GROUP_BATTLE << 9) | 0x20 -#define EC_WORD_TOO_STRONG (EC_GROUP_BATTLE << 9) | 0x21 -#define EC_WORD_GO_EASY (EC_GROUP_BATTLE << 9) | 0x22 -#define EC_WORD_FOE (EC_GROUP_BATTLE << 9) | 0x23 -#define EC_WORD_GENIUS (EC_GROUP_BATTLE << 9) | 0x24 -#define EC_WORD_LEGEND (EC_GROUP_BATTLE << 9) | 0x25 -#define EC_WORD_ESCAPE (EC_GROUP_BATTLE << 9) | 0x26 -#define EC_WORD_AIM (EC_GROUP_BATTLE << 9) | 0x27 -#define EC_WORD_BATTLE (EC_GROUP_BATTLE << 9) | 0x28 -#define EC_WORD_FIGHT (EC_GROUP_BATTLE << 9) | 0x29 -#define EC_WORD_RESUSCITATE (EC_GROUP_BATTLE << 9) | 0x2a -#define EC_WORD_POINTS (EC_GROUP_BATTLE << 9) | 0x2b -#define EC_WORD_SERIOUS (EC_GROUP_BATTLE << 9) | 0x2c -#define EC_WORD_GIVE_UP (EC_GROUP_BATTLE << 9) | 0x2d -#define EC_WORD_LOSS (EC_GROUP_BATTLE << 9) | 0x2e -#define EC_WORD_IF_I_LOSE (EC_GROUP_BATTLE << 9) | 0x2f -#define EC_WORD_LOST (EC_GROUP_BATTLE << 9) | 0x30 -#define EC_WORD_LOSE (EC_GROUP_BATTLE << 9) | 0x31 -#define EC_WORD_GUARD (EC_GROUP_BATTLE << 9) | 0x32 -#define EC_WORD_PARTNER (EC_GROUP_BATTLE << 9) | 0x33 -#define EC_WORD_REJECT (EC_GROUP_BATTLE << 9) | 0x34 -#define EC_WORD_ACCEPT (EC_GROUP_BATTLE << 9) | 0x35 -#define EC_WORD_INVINCIBLE (EC_GROUP_BATTLE << 9) | 0x36 -#define EC_WORD_RECEIVED (EC_GROUP_BATTLE << 9) | 0x37 -#define EC_WORD_EASY (EC_GROUP_BATTLE << 9) | 0x38 -#define EC_WORD_WEAK (EC_GROUP_BATTLE << 9) | 0x39 -#define EC_WORD_TOO_WEAK (EC_GROUP_BATTLE << 9) | 0x3a -#define EC_WORD_PUSHOVER (EC_GROUP_BATTLE << 9) | 0x3b -#define EC_WORD_LEADER (EC_GROUP_BATTLE << 9) | 0x3c -#define EC_WORD_RULE (EC_GROUP_BATTLE << 9) | 0x3d -#define EC_WORD_MOVE (EC_GROUP_BATTLE << 9) | 0x3e - -// GREETINGS -#define EC_WORD_THANKS (EC_GROUP_GREETINGS << 9) | 0x0 -#define EC_WORD_YES (EC_GROUP_GREETINGS << 9) | 0x1 -#define EC_WORD_HERE_GOES (EC_GROUP_GREETINGS << 9) | 0x2 -#define EC_WORD_HERE_I_COME (EC_GROUP_GREETINGS << 9) | 0x3 -#define EC_WORD_HERE_IT_IS (EC_GROUP_GREETINGS << 9) | 0x4 -#define EC_WORD_YEAH (EC_GROUP_GREETINGS << 9) | 0x5 -#define EC_WORD_WELCOME (EC_GROUP_GREETINGS << 9) | 0x6 -#define EC_WORD_OI (EC_GROUP_GREETINGS << 9) | 0x7 -#define EC_WORD_HOW_DO (EC_GROUP_GREETINGS << 9) | 0x8 -#define EC_WORD_CONGRATS (EC_GROUP_GREETINGS << 9) | 0x9 -#define EC_WORD_GIVE_ME (EC_GROUP_GREETINGS << 9) | 0xa -#define EC_WORD_SORRY (EC_GROUP_GREETINGS << 9) | 0xb -#define EC_WORD_APOLOGIZE (EC_GROUP_GREETINGS << 9) | 0xc -#define EC_WORD_FORGIVE (EC_GROUP_GREETINGS << 9) | 0xd -#define EC_WORD_HEY_THERE (EC_GROUP_GREETINGS << 9) | 0xe -#define EC_WORD_HELLO (EC_GROUP_GREETINGS << 9) | 0xf -#define EC_WORD_GOOD_BYE (EC_GROUP_GREETINGS << 9) | 0x10 -#define EC_WORD_THANK_YOU (EC_GROUP_GREETINGS << 9) | 0x11 -#define EC_WORD_I_VE_ARRIVED (EC_GROUP_GREETINGS << 9) | 0x12 -#define EC_WORD_PARDON (EC_GROUP_GREETINGS << 9) | 0x13 -#define EC_WORD_EXCUSE (EC_GROUP_GREETINGS << 9) | 0x14 -#define EC_WORD_SEE_YA (EC_GROUP_GREETINGS << 9) | 0x15 -#define EC_WORD_EXCUSE_ME (EC_GROUP_GREETINGS << 9) | 0x16 -#define EC_WORD_WELL_THEN (EC_GROUP_GREETINGS << 9) | 0x17 -#define EC_WORD_GO_AHEAD (EC_GROUP_GREETINGS << 9) | 0x18 -#define EC_WORD_APPRECIATE (EC_GROUP_GREETINGS << 9) | 0x19 -#define EC_WORD_HEY_QUES (EC_GROUP_GREETINGS << 9) | 0x1a -#define EC_WORD_WHAT_S_UP_QUES (EC_GROUP_GREETINGS << 9) | 0x1b -#define EC_WORD_HUH_QUES (EC_GROUP_GREETINGS << 9) | 0x1c -#define EC_WORD_NO (EC_GROUP_GREETINGS << 9) | 0x1d -#define EC_WORD_HI (EC_GROUP_GREETINGS << 9) | 0x1e -#define EC_WORD_YEAH_YEAH (EC_GROUP_GREETINGS << 9) | 0x1f -#define EC_WORD_BYE_BYE (EC_GROUP_GREETINGS << 9) | 0x20 -#define EC_WORD_MEET_YOU (EC_GROUP_GREETINGS << 9) | 0x21 -#define EC_WORD_HEY (EC_GROUP_GREETINGS << 9) | 0x22 -#define EC_WORD_SMELL (EC_GROUP_GREETINGS << 9) | 0x23 -#define EC_WORD_LISTENING (EC_GROUP_GREETINGS << 9) | 0x24 -#define EC_WORD_HOO_HAH (EC_GROUP_GREETINGS << 9) | 0x25 -#define EC_WORD_YAHOO (EC_GROUP_GREETINGS << 9) | 0x26 -#define EC_WORD_YO (EC_GROUP_GREETINGS << 9) | 0x27 -#define EC_WORD_COME_OVER (EC_GROUP_GREETINGS << 9) | 0x28 -#define EC_WORD_COUNT_ON (EC_GROUP_GREETINGS << 9) | 0x29 - -// PEOPLE -#define EC_WORD_OPPONENT (EC_GROUP_PEOPLE << 9) | 0x0 -#define EC_WORD_I (EC_GROUP_PEOPLE << 9) | 0x1 -#define EC_WORD_YOU (EC_GROUP_PEOPLE << 9) | 0x2 -#define EC_WORD_YOURS (EC_GROUP_PEOPLE << 9) | 0x3 -#define EC_WORD_SON (EC_GROUP_PEOPLE << 9) | 0x4 -#define EC_WORD_YOUR (EC_GROUP_PEOPLE << 9) | 0x5 -#define EC_WORD_YOU_RE (EC_GROUP_PEOPLE << 9) | 0x6 -#define EC_WORD_YOU_VE (EC_GROUP_PEOPLE << 9) | 0x7 -#define EC_WORD_MOTHER (EC_GROUP_PEOPLE << 9) | 0x8 -#define EC_WORD_GRANDFATHER (EC_GROUP_PEOPLE << 9) | 0x9 -#define EC_WORD_UNCLE (EC_GROUP_PEOPLE << 9) | 0xa -#define EC_WORD_FATHER (EC_GROUP_PEOPLE << 9) | 0xb -#define EC_WORD_BOY (EC_GROUP_PEOPLE << 9) | 0xc -#define EC_WORD_ADULT (EC_GROUP_PEOPLE << 9) | 0xd -#define EC_WORD_BROTHER (EC_GROUP_PEOPLE << 9) | 0xe -#define EC_WORD_SISTER (EC_GROUP_PEOPLE << 9) | 0xf -#define EC_WORD_GRANDMOTHER (EC_GROUP_PEOPLE << 9) | 0x10 -#define EC_WORD_AUNT (EC_GROUP_PEOPLE << 9) | 0x11 -#define EC_WORD_PARENT (EC_GROUP_PEOPLE << 9) | 0x12 -#define EC_WORD_MAN (EC_GROUP_PEOPLE << 9) | 0x13 -#define EC_WORD_ME (EC_GROUP_PEOPLE << 9) | 0x14 -#define EC_WORD_GIRL (EC_GROUP_PEOPLE << 9) | 0x15 -#define EC_WORD_BABE (EC_GROUP_PEOPLE << 9) | 0x16 -#define EC_WORD_FAMILY (EC_GROUP_PEOPLE << 9) | 0x17 -#define EC_WORD_HER (EC_GROUP_PEOPLE << 9) | 0x18 -#define EC_WORD_HIM (EC_GROUP_PEOPLE << 9) | 0x19 -#define EC_WORD_HE (EC_GROUP_PEOPLE << 9) | 0x1a -#define EC_WORD_PLACE (EC_GROUP_PEOPLE << 9) | 0x1b -#define EC_WORD_DAUGHTER (EC_GROUP_PEOPLE << 9) | 0x1c -#define EC_WORD_HIS (EC_GROUP_PEOPLE << 9) | 0x1d -#define EC_WORD_HE_S (EC_GROUP_PEOPLE << 9) | 0x1e -#define EC_WORD_AREN_T (EC_GROUP_PEOPLE << 9) | 0x1f -#define EC_WORD_SIBLINGS (EC_GROUP_PEOPLE << 9) | 0x20 -#define EC_WORD_KID (EC_GROUP_PEOPLE << 9) | 0x21 -#define EC_WORD_CHILDREN (EC_GROUP_PEOPLE << 9) | 0x22 -#define EC_WORD_MR (EC_GROUP_PEOPLE << 9) | 0x23 -#define EC_WORD_MRS (EC_GROUP_PEOPLE << 9) | 0x24 -#define EC_WORD_MYSELF (EC_GROUP_PEOPLE << 9) | 0x25 -#define EC_WORD_I_WAS (EC_GROUP_PEOPLE << 9) | 0x26 -#define EC_WORD_TO_ME (EC_GROUP_PEOPLE << 9) | 0x27 -#define EC_WORD_MY (EC_GROUP_PEOPLE << 9) | 0x28 -#define EC_WORD_I_AM (EC_GROUP_PEOPLE << 9) | 0x29 -#define EC_WORD_I_VE (EC_GROUP_PEOPLE << 9) | 0x2a -#define EC_WORD_WHO (EC_GROUP_PEOPLE << 9) | 0x2b -#define EC_WORD_SOMEONE (EC_GROUP_PEOPLE << 9) | 0x2c -#define EC_WORD_WHO_WAS (EC_GROUP_PEOPLE << 9) | 0x2d -#define EC_WORD_TO_WHOM (EC_GROUP_PEOPLE << 9) | 0x2e -#define EC_WORD_WHOSE (EC_GROUP_PEOPLE << 9) | 0x2f -#define EC_WORD_WHO_IS (EC_GROUP_PEOPLE << 9) | 0x30 -#define EC_WORD_IT_S (EC_GROUP_PEOPLE << 9) | 0x31 -#define EC_WORD_LADY (EC_GROUP_PEOPLE << 9) | 0x32 -#define EC_WORD_FRIEND (EC_GROUP_PEOPLE << 9) | 0x33 -#define EC_WORD_ALLY (EC_GROUP_PEOPLE << 9) | 0x34 -#define EC_WORD_PERSON (EC_GROUP_PEOPLE << 9) | 0x35 -#define EC_WORD_DUDE (EC_GROUP_PEOPLE << 9) | 0x36 -#define EC_WORD_THEY (EC_GROUP_PEOPLE << 9) | 0x37 -#define EC_WORD_THEY_WERE (EC_GROUP_PEOPLE << 9) | 0x38 -#define EC_WORD_TO_THEM (EC_GROUP_PEOPLE << 9) | 0x39 -#define EC_WORD_THEIR (EC_GROUP_PEOPLE << 9) | 0x3a -#define EC_WORD_THEY_RE (EC_GROUP_PEOPLE << 9) | 0x3b -#define EC_WORD_THEY_VE (EC_GROUP_PEOPLE << 9) | 0x3c -#define EC_WORD_WE (EC_GROUP_PEOPLE << 9) | 0x3d -#define EC_WORD_BEEN (EC_GROUP_PEOPLE << 9) | 0x3e -#define EC_WORD_TO_US (EC_GROUP_PEOPLE << 9) | 0x3f -#define EC_WORD_OUR (EC_GROUP_PEOPLE << 9) | 0x40 -#define EC_WORD_WE_RE (EC_GROUP_PEOPLE << 9) | 0x41 -#define EC_WORD_RIVAL (EC_GROUP_PEOPLE << 9) | 0x42 -#define EC_WORD_WE_VE (EC_GROUP_PEOPLE << 9) | 0x43 -#define EC_WORD_WOMAN (EC_GROUP_PEOPLE << 9) | 0x44 -#define EC_WORD_SHE (EC_GROUP_PEOPLE << 9) | 0x45 -#define EC_WORD_SHE_WAS (EC_GROUP_PEOPLE << 9) | 0x46 -#define EC_WORD_TO_HER (EC_GROUP_PEOPLE << 9) | 0x47 -#define EC_WORD_HERS (EC_GROUP_PEOPLE << 9) | 0x48 -#define EC_WORD_SHE_IS (EC_GROUP_PEOPLE << 9) | 0x49 -#define EC_WORD_SOME (EC_GROUP_PEOPLE << 9) | 0x4a - -// VOICES -#define EC_WORD_EXCL (EC_GROUP_VOICES << 9) | 0x0 -#define EC_WORD_EXCL_EXCL (EC_GROUP_VOICES << 9) | 0x1 -#define EC_WORD_QUES_EXCL (EC_GROUP_VOICES << 9) | 0x2 -#define EC_WORD_QUES (EC_GROUP_VOICES << 9) | 0x3 -#define EC_WORD_ELLIPSIS (EC_GROUP_VOICES << 9) | 0x4 -#define EC_WORD_ELLIPSIS_EXCL (EC_GROUP_VOICES << 9) | 0x5 -#define EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS (EC_GROUP_VOICES << 9) | 0x6 -#define EC_WORD_DASH (EC_GROUP_VOICES << 9) | 0x7 -#define EC_WORD_DASH_DASH_DASH (EC_GROUP_VOICES << 9) | 0x8 -#define EC_WORD_UH_OH (EC_GROUP_VOICES << 9) | 0x9 -#define EC_WORD_WAAAH (EC_GROUP_VOICES << 9) | 0xa -#define EC_WORD_AHAHA (EC_GROUP_VOICES << 9) | 0xb -#define EC_WORD_OH_QUES (EC_GROUP_VOICES << 9) | 0xc -#define EC_WORD_NOPE (EC_GROUP_VOICES << 9) | 0xd -#define EC_WORD_URGH (EC_GROUP_VOICES << 9) | 0xe -#define EC_WORD_HMM (EC_GROUP_VOICES << 9) | 0xf -#define EC_WORD_WHOAH (EC_GROUP_VOICES << 9) | 0x10 -#define EC_WORD_WROOOAAR_EXCL (EC_GROUP_VOICES << 9) | 0x11 -#define EC_WORD_WOW (EC_GROUP_VOICES << 9) | 0x12 -#define EC_WORD_GIGGLE (EC_GROUP_VOICES << 9) | 0x13 -#define EC_WORD_SIGH (EC_GROUP_VOICES << 9) | 0x14 -#define EC_WORD_UNBELIEVABLE (EC_GROUP_VOICES << 9) | 0x15 -#define EC_WORD_CRIES (EC_GROUP_VOICES << 9) | 0x16 -#define EC_WORD_AGREE (EC_GROUP_VOICES << 9) | 0x17 -#define EC_WORD_EH_QUES (EC_GROUP_VOICES << 9) | 0x18 -#define EC_WORD_CRY (EC_GROUP_VOICES << 9) | 0x19 -#define EC_WORD_EHEHE (EC_GROUP_VOICES << 9) | 0x1a -#define EC_WORD_OI_OI_OI (EC_GROUP_VOICES << 9) | 0x1b -#define EC_WORD_OH_YEAH (EC_GROUP_VOICES << 9) | 0x1c -#define EC_WORD_OH (EC_GROUP_VOICES << 9) | 0x1d -#define EC_WORD_OOPS (EC_GROUP_VOICES << 9) | 0x1e -#define EC_WORD_SHOCKED (EC_GROUP_VOICES << 9) | 0x1f -#define EC_WORD_EEK (EC_GROUP_VOICES << 9) | 0x20 -#define EC_WORD_GRAAAH (EC_GROUP_VOICES << 9) | 0x21 -#define EC_WORD_GWAHAHAHA (EC_GROUP_VOICES << 9) | 0x22 -#define EC_WORD_WAY (EC_GROUP_VOICES << 9) | 0x23 -#define EC_WORD_TCH (EC_GROUP_VOICES << 9) | 0x24 -#define EC_WORD_HEHE (EC_GROUP_VOICES << 9) | 0x25 -#define EC_WORD_HAH (EC_GROUP_VOICES << 9) | 0x26 -#define EC_WORD_YUP (EC_GROUP_VOICES << 9) | 0x27 -#define EC_WORD_HAHAHA (EC_GROUP_VOICES << 9) | 0x28 -#define EC_WORD_AIYEEH (EC_GROUP_VOICES << 9) | 0x29 -#define EC_WORD_HIYAH (EC_GROUP_VOICES << 9) | 0x2a -#define EC_WORD_FUFUFU (EC_GROUP_VOICES << 9) | 0x2b -#define EC_WORD_LOL (EC_GROUP_VOICES << 9) | 0x2c -#define EC_WORD_SNORT (EC_GROUP_VOICES << 9) | 0x2d -#define EC_WORD_HUMPH (EC_GROUP_VOICES << 9) | 0x2e -#define EC_WORD_HEHEHE (EC_GROUP_VOICES << 9) | 0x2f -#define EC_WORD_HEH (EC_GROUP_VOICES << 9) | 0x30 -#define EC_WORD_HOHOHO (EC_GROUP_VOICES << 9) | 0x31 -#define EC_WORD_UH_HUH (EC_GROUP_VOICES << 9) | 0x32 -#define EC_WORD_OH_DEAR (EC_GROUP_VOICES << 9) | 0x33 -#define EC_WORD_ARRGH (EC_GROUP_VOICES << 9) | 0x34 -#define EC_WORD_MUFUFU (EC_GROUP_VOICES << 9) | 0x35 -#define EC_WORD_MMM (EC_GROUP_VOICES << 9) | 0x36 -#define EC_WORD_OH_KAY (EC_GROUP_VOICES << 9) | 0x37 -#define EC_WORD_OKAY (EC_GROUP_VOICES << 9) | 0x38 -#define EC_WORD_LALALA (EC_GROUP_VOICES << 9) | 0x39 -#define EC_WORD_YAY (EC_GROUP_VOICES << 9) | 0x3a -#define EC_WORD_AWW (EC_GROUP_VOICES << 9) | 0x3b -#define EC_WORD_WOWEE (EC_GROUP_VOICES << 9) | 0x3c -#define EC_WORD_GWAH (EC_GROUP_VOICES << 9) | 0x3d -#define EC_WORD_WAHAHAHA (EC_GROUP_VOICES << 9) | 0x3e - -// SPEECH -#define EC_WORD_LISTEN (EC_GROUP_SPEECH << 9) | 0x0 -#define EC_WORD_NOT_VERY (EC_GROUP_SPEECH << 9) | 0x1 -#define EC_WORD_MEAN (EC_GROUP_SPEECH << 9) | 0x2 -#define EC_WORD_LIE (EC_GROUP_SPEECH << 9) | 0x3 -#define EC_WORD_LAY (EC_GROUP_SPEECH << 9) | 0x4 -#define EC_WORD_RECOMMEND (EC_GROUP_SPEECH << 9) | 0x5 -#define EC_WORD_NITWIT (EC_GROUP_SPEECH << 9) | 0x6 -#define EC_WORD_QUITE (EC_GROUP_SPEECH << 9) | 0x7 -#define EC_WORD_FROM (EC_GROUP_SPEECH << 9) | 0x8 -#define EC_WORD_FEELING (EC_GROUP_SPEECH << 9) | 0x9 -#define EC_WORD_BUT (EC_GROUP_SPEECH << 9) | 0xa -#define EC_WORD_HOWEVER (EC_GROUP_SPEECH << 9) | 0xb -#define EC_WORD_CASE (EC_GROUP_SPEECH << 9) | 0xc -#define EC_WORD_THE (EC_GROUP_SPEECH << 9) | 0xd -#define EC_WORD_MISS (EC_GROUP_SPEECH << 9) | 0xe -#define EC_WORD_HOW (EC_GROUP_SPEECH << 9) | 0xf -#define EC_WORD_HIT (EC_GROUP_SPEECH << 9) | 0x10 -#define EC_WORD_ENOUGH (EC_GROUP_SPEECH << 9) | 0x11 -#define EC_WORD_A_LOT (EC_GROUP_SPEECH << 9) | 0x12 -#define EC_WORD_A_LITTLE (EC_GROUP_SPEECH << 9) | 0x13 -#define EC_WORD_ABSOLUTELY (EC_GROUP_SPEECH << 9) | 0x14 -#define EC_WORD_AND (EC_GROUP_SPEECH << 9) | 0x15 -#define EC_WORD_ONLY (EC_GROUP_SPEECH << 9) | 0x16 -#define EC_WORD_AROUND (EC_GROUP_SPEECH << 9) | 0x17 -#define EC_WORD_PROBABLY (EC_GROUP_SPEECH << 9) | 0x18 -#define EC_WORD_IF (EC_GROUP_SPEECH << 9) | 0x19 -#define EC_WORD_VERY (EC_GROUP_SPEECH << 9) | 0x1a -#define EC_WORD_A_TINY_BIT (EC_GROUP_SPEECH << 9) | 0x1b -#define EC_WORD_WILD (EC_GROUP_SPEECH << 9) | 0x1c -#define EC_WORD_THAT_S (EC_GROUP_SPEECH << 9) | 0x1d -#define EC_WORD_JUST (EC_GROUP_SPEECH << 9) | 0x1e -#define EC_WORD_EVEN_SO (EC_GROUP_SPEECH << 9) | 0x1f -#define EC_WORD_MUST_BE (EC_GROUP_SPEECH << 9) | 0x20 -#define EC_WORD_NATURALLY (EC_GROUP_SPEECH << 9) | 0x21 -#define EC_WORD_FOR_NOW (EC_GROUP_SPEECH << 9) | 0x22 -#define EC_WORD_UNDERSTOOD (EC_GROUP_SPEECH << 9) | 0x23 -#define EC_WORD_JOKING (EC_GROUP_SPEECH << 9) | 0x24 -#define EC_WORD_READY (EC_GROUP_SPEECH << 9) | 0x25 -#define EC_WORD_SOMETHING (EC_GROUP_SPEECH << 9) | 0x26 -#define EC_WORD_SOMEHOW (EC_GROUP_SPEECH << 9) | 0x27 -#define EC_WORD_ALTHOUGH (EC_GROUP_SPEECH << 9) | 0x28 -#define EC_WORD_ALSO (EC_GROUP_SPEECH << 9) | 0x29 -#define EC_WORD_PERFECT (EC_GROUP_SPEECH << 9) | 0x2a -#define EC_WORD_AS_MUCH_AS (EC_GROUP_SPEECH << 9) | 0x2b -#define EC_WORD_REALLY (EC_GROUP_SPEECH << 9) | 0x2c -#define EC_WORD_TRULY (EC_GROUP_SPEECH << 9) | 0x2d -#define EC_WORD_SERIOUSLY (EC_GROUP_SPEECH << 9) | 0x2e -#define EC_WORD_TOTALLY (EC_GROUP_SPEECH << 9) | 0x2f -#define EC_WORD_UNTIL (EC_GROUP_SPEECH << 9) | 0x30 -#define EC_WORD_AS_IF (EC_GROUP_SPEECH << 9) | 0x31 -#define EC_WORD_MOOD (EC_GROUP_SPEECH << 9) | 0x32 -#define EC_WORD_RATHER (EC_GROUP_SPEECH << 9) | 0x33 -#define EC_WORD_AWFULLY (EC_GROUP_SPEECH << 9) | 0x34 -#define EC_WORD_MODE (EC_GROUP_SPEECH << 9) | 0x35 -#define EC_WORD_MORE (EC_GROUP_SPEECH << 9) | 0x36 -#define EC_WORD_TOO_LATE (EC_GROUP_SPEECH << 9) | 0x37 -#define EC_WORD_FINALLY (EC_GROUP_SPEECH << 9) | 0x38 -#define EC_WORD_ANY (EC_GROUP_SPEECH << 9) | 0x39 -#define EC_WORD_INSTEAD (EC_GROUP_SPEECH << 9) | 0x3a -#define EC_WORD_FANTASTIC (EC_GROUP_SPEECH << 9) | 0x3b - -// ENDINGS -#define EC_WORD_WILL (EC_GROUP_ENDINGS << 9) | 0x0 -#define EC_WORD_WILL_BE_HERE (EC_GROUP_ENDINGS << 9) | 0x1 -#define EC_WORD_OR (EC_GROUP_ENDINGS << 9) | 0x2 -#define EC_WORD_TIMES (EC_GROUP_ENDINGS << 9) | 0x3 -#define EC_WORD_WONDER (EC_GROUP_ENDINGS << 9) | 0x4 -#define EC_WORD_IS_IT_QUES (EC_GROUP_ENDINGS << 9) | 0x5 -#define EC_WORD_BE (EC_GROUP_ENDINGS << 9) | 0x6 -#define EC_WORD_GIMME (EC_GROUP_ENDINGS << 9) | 0x7 -#define EC_WORD_COULD (EC_GROUP_ENDINGS << 9) | 0x8 -#define EC_WORD_LIKELY_TO (EC_GROUP_ENDINGS << 9) | 0x9 -#define EC_WORD_WOULD (EC_GROUP_ENDINGS << 9) | 0xa -#define EC_WORD_IS (EC_GROUP_ENDINGS << 9) | 0xb -#define EC_WORD_ISN_T_IT_QUES (EC_GROUP_ENDINGS << 9) | 0xc -#define EC_WORD_LET_S (EC_GROUP_ENDINGS << 9) | 0xd -#define EC_WORD_OTHER (EC_GROUP_ENDINGS << 9) | 0xe -#define EC_WORD_ARE (EC_GROUP_ENDINGS << 9) | 0xf -#define EC_WORD_WAS (EC_GROUP_ENDINGS << 9) | 0x10 -#define EC_WORD_WERE (EC_GROUP_ENDINGS << 9) | 0x11 -#define EC_WORD_THOSE (EC_GROUP_ENDINGS << 9) | 0x12 -#define EC_WORD_ISN_T (EC_GROUP_ENDINGS << 9) | 0x13 -#define EC_WORD_WON_T (EC_GROUP_ENDINGS << 9) | 0x14 -#define EC_WORD_CAN_T (EC_GROUP_ENDINGS << 9) | 0x15 -#define EC_WORD_CAN (EC_GROUP_ENDINGS << 9) | 0x16 -#define EC_WORD_DON_T (EC_GROUP_ENDINGS << 9) | 0x17 -#define EC_WORD_DO (EC_GROUP_ENDINGS << 9) | 0x18 -#define EC_WORD_DOES (EC_GROUP_ENDINGS << 9) | 0x19 -#define EC_WORD_WHOM (EC_GROUP_ENDINGS << 9) | 0x1a -#define EC_WORD_WHICH (EC_GROUP_ENDINGS << 9) | 0x1b -#define EC_WORD_WASN_T (EC_GROUP_ENDINGS << 9) | 0x1c -#define EC_WORD_WEREN_T (EC_GROUP_ENDINGS << 9) | 0x1d -#define EC_WORD_HAVE (EC_GROUP_ENDINGS << 9) | 0x1e -#define EC_WORD_HAVEN_T (EC_GROUP_ENDINGS << 9) | 0x1f -#define EC_WORD_A (EC_GROUP_ENDINGS << 9) | 0x20 -#define EC_WORD_AN (EC_GROUP_ENDINGS << 9) | 0x21 -#define EC_WORD_NOT (EC_GROUP_ENDINGS << 9) | 0x22 -#define EC_WORD_THERE (EC_GROUP_ENDINGS << 9) | 0x23 -#define EC_WORD_OK_QUES (EC_GROUP_ENDINGS << 9) | 0x24 -#define EC_WORD_SO (EC_GROUP_ENDINGS << 9) | 0x25 -#define EC_WORD_MAYBE (EC_GROUP_ENDINGS << 9) | 0x26 -#define EC_WORD_ABOUT (EC_GROUP_ENDINGS << 9) | 0x27 -#define EC_WORD_OVER (EC_GROUP_ENDINGS << 9) | 0x28 -#define EC_WORD_IT (EC_GROUP_ENDINGS << 9) | 0x29 -#define EC_WORD_ALL (EC_GROUP_ENDINGS << 9) | 0x2a -#define EC_WORD_FOR (EC_GROUP_ENDINGS << 9) | 0x2b -#define EC_WORD_ON (EC_GROUP_ENDINGS << 9) | 0x2c -#define EC_WORD_OFF (EC_GROUP_ENDINGS << 9) | 0x2d -#define EC_WORD_AS (EC_GROUP_ENDINGS << 9) | 0x2e -#define EC_WORD_TO (EC_GROUP_ENDINGS << 9) | 0x2f -#define EC_WORD_WITH (EC_GROUP_ENDINGS << 9) | 0x30 -#define EC_WORD_BETTER (EC_GROUP_ENDINGS << 9) | 0x31 -#define EC_WORD_EVER (EC_GROUP_ENDINGS << 9) | 0x32 -#define EC_WORD_SINCE (EC_GROUP_ENDINGS << 9) | 0x33 -#define EC_WORD_OF (EC_GROUP_ENDINGS << 9) | 0x34 -#define EC_WORD_BELONGS_TO (EC_GROUP_ENDINGS << 9) | 0x35 -#define EC_WORD_AT (EC_GROUP_ENDINGS << 9) | 0x36 -#define EC_WORD_IN (EC_GROUP_ENDINGS << 9) | 0x37 -#define EC_WORD_OUT (EC_GROUP_ENDINGS << 9) | 0x38 -#define EC_WORD_TOO (EC_GROUP_ENDINGS << 9) | 0x39 -#define EC_WORD_LIKE (EC_GROUP_ENDINGS << 9) | 0x3a -#define EC_WORD_DID (EC_GROUP_ENDINGS << 9) | 0x3b -#define EC_WORD_DIDN_T (EC_GROUP_ENDINGS << 9) | 0x3c -#define EC_WORD_DOESN_T (EC_GROUP_ENDINGS << 9) | 0x3d -#define EC_WORD_WITHOUT (EC_GROUP_ENDINGS << 9) | 0x3e -#define EC_WORD_AFTER (EC_GROUP_ENDINGS << 9) | 0x3f -#define EC_WORD_BEFORE (EC_GROUP_ENDINGS << 9) | 0x40 -#define EC_WORD_WHILE (EC_GROUP_ENDINGS << 9) | 0x41 -#define EC_WORD_THAN (EC_GROUP_ENDINGS << 9) | 0x42 -#define EC_WORD_ONCE (EC_GROUP_ENDINGS << 9) | 0x43 -#define EC_WORD_ANYWHERE (EC_GROUP_ENDINGS << 9) | 0x44 - -// FEELINGS -#define EC_WORD_MEET (EC_GROUP_FEELINGS << 9) | 0x0 -#define EC_WORD_PLAY (EC_GROUP_FEELINGS << 9) | 0x1 -#define EC_WORD_HURRIED (EC_GROUP_FEELINGS << 9) | 0x2 -#define EC_WORD_GOES (EC_GROUP_FEELINGS << 9) | 0x3 -#define EC_WORD_GIDDY (EC_GROUP_FEELINGS << 9) | 0x4 -#define EC_WORD_HAPPY (EC_GROUP_FEELINGS << 9) | 0x5 -#define EC_WORD_HAPPINESS (EC_GROUP_FEELINGS << 9) | 0x6 -#define EC_WORD_EXCITE (EC_GROUP_FEELINGS << 9) | 0x7 -#define EC_WORD_IMPORTANT (EC_GROUP_FEELINGS << 9) | 0x8 -#define EC_WORD_FUNNY (EC_GROUP_FEELINGS << 9) | 0x9 -#define EC_WORD_GOT (EC_GROUP_FEELINGS << 9) | 0xa -#define EC_WORD_GO_HOME (EC_GROUP_FEELINGS << 9) | 0xb -#define EC_WORD_DISAPPOINTED (EC_GROUP_FEELINGS << 9) | 0xc -#define EC_WORD_DISAPPOINTS (EC_GROUP_FEELINGS << 9) | 0xd -#define EC_WORD_SAD (EC_GROUP_FEELINGS << 9) | 0xe -#define EC_WORD_TRY (EC_GROUP_FEELINGS << 9) | 0xf -#define EC_WORD_TRIES (EC_GROUP_FEELINGS << 9) | 0x10 -#define EC_WORD_HEARS (EC_GROUP_FEELINGS << 9) | 0x11 -#define EC_WORD_THINK (EC_GROUP_FEELINGS << 9) | 0x12 -#define EC_WORD_HEAR (EC_GROUP_FEELINGS << 9) | 0x13 -#define EC_WORD_WANTS (EC_GROUP_FEELINGS << 9) | 0x14 -#define EC_WORD_MISHEARD (EC_GROUP_FEELINGS << 9) | 0x15 -#define EC_WORD_DISLIKE (EC_GROUP_FEELINGS << 9) | 0x16 -#define EC_WORD_ANGRY (EC_GROUP_FEELINGS << 9) | 0x17 -#define EC_WORD_ANGER (EC_GROUP_FEELINGS << 9) | 0x18 -#define EC_WORD_SCARY (EC_GROUP_FEELINGS << 9) | 0x19 -#define EC_WORD_LONESOME (EC_GROUP_FEELINGS << 9) | 0x1a -#define EC_WORD_DISAPPOINT (EC_GROUP_FEELINGS << 9) | 0x1b -#define EC_WORD_JOY (EC_GROUP_FEELINGS << 9) | 0x1c -#define EC_WORD_GETS (EC_GROUP_FEELINGS << 9) | 0x1d -#define EC_WORD_NEVER (EC_GROUP_FEELINGS << 9) | 0x1e -#define EC_WORD_DARN (EC_GROUP_FEELINGS << 9) | 0x1f -#define EC_WORD_DOWNCAST (EC_GROUP_FEELINGS << 9) | 0x20 -#define EC_WORD_INCREDIBLE (EC_GROUP_FEELINGS << 9) | 0x21 -#define EC_WORD_LIKES (EC_GROUP_FEELINGS << 9) | 0x22 -#define EC_WORD_DISLIKES (EC_GROUP_FEELINGS << 9) | 0x23 -#define EC_WORD_BORING (EC_GROUP_FEELINGS << 9) | 0x24 -#define EC_WORD_CARE (EC_GROUP_FEELINGS << 9) | 0x25 -#define EC_WORD_CARES (EC_GROUP_FEELINGS << 9) | 0x26 -#define EC_WORD_ALL_RIGHT (EC_GROUP_FEELINGS << 9) | 0x27 -#define EC_WORD_ADORE (EC_GROUP_FEELINGS << 9) | 0x28 -#define EC_WORD_DISASTER (EC_GROUP_FEELINGS << 9) | 0x29 -#define EC_WORD_ENJOY (EC_GROUP_FEELINGS << 9) | 0x2a -#define EC_WORD_ENJOYS (EC_GROUP_FEELINGS << 9) | 0x2b -#define EC_WORD_EAT (EC_GROUP_FEELINGS << 9) | 0x2c -#define EC_WORD_LACKING (EC_GROUP_FEELINGS << 9) | 0x2d -#define EC_WORD_BAD (EC_GROUP_FEELINGS << 9) | 0x2e -#define EC_WORD_HARD (EC_GROUP_FEELINGS << 9) | 0x2f -#define EC_WORD_TERRIBLE (EC_GROUP_FEELINGS << 9) | 0x30 -#define EC_WORD_SHOULD (EC_GROUP_FEELINGS << 9) | 0x31 -#define EC_WORD_NICE (EC_GROUP_FEELINGS << 9) | 0x32 -#define EC_WORD_DRINK (EC_GROUP_FEELINGS << 9) | 0x33 -#define EC_WORD_SURPRISE (EC_GROUP_FEELINGS << 9) | 0x34 -#define EC_WORD_FEAR (EC_GROUP_FEELINGS << 9) | 0x35 -#define EC_WORD_WANT (EC_GROUP_FEELINGS << 9) | 0x36 -#define EC_WORD_WAIT (EC_GROUP_FEELINGS << 9) | 0x37 -#define EC_WORD_SATISFIED (EC_GROUP_FEELINGS << 9) | 0x38 -#define EC_WORD_SEE (EC_GROUP_FEELINGS << 9) | 0x39 -#define EC_WORD_RARE (EC_GROUP_FEELINGS << 9) | 0x3a -#define EC_WORD_NEGATIVE (EC_GROUP_FEELINGS << 9) | 0x3b -#define EC_WORD_DONE (EC_GROUP_FEELINGS << 9) | 0x3c -#define EC_WORD_DANGER (EC_GROUP_FEELINGS << 9) | 0x3d -#define EC_WORD_DEFEATED (EC_GROUP_FEELINGS << 9) | 0x3e -#define EC_WORD_BEAT (EC_GROUP_FEELINGS << 9) | 0x3f -#define EC_WORD_GREAT (EC_GROUP_FEELINGS << 9) | 0x40 -#define EC_WORD_ROMANTIC (EC_GROUP_FEELINGS << 9) | 0x41 -#define EC_WORD_QUESTION (EC_GROUP_FEELINGS << 9) | 0x42 -#define EC_WORD_UNDERSTAND (EC_GROUP_FEELINGS << 9) | 0x43 -#define EC_WORD_UNDERSTANDS (EC_GROUP_FEELINGS << 9) | 0x44 - -// CONDITIONS -#define EC_WORD_HOT (EC_GROUP_CONDITIONS << 9) | 0x0 -#define EC_WORD_EXISTS (EC_GROUP_CONDITIONS << 9) | 0x1 -#define EC_WORD_EXCESS (EC_GROUP_CONDITIONS << 9) | 0x2 -#define EC_WORD_APPROVED (EC_GROUP_CONDITIONS << 9) | 0x3 -#define EC_WORD_HAS (EC_GROUP_CONDITIONS << 9) | 0x4 -#define EC_WORD_GOOD (EC_GROUP_CONDITIONS << 9) | 0x5 -#define EC_WORD_LESS (EC_GROUP_CONDITIONS << 9) | 0x6 -#define EC_WORD_MOMENTUM (EC_GROUP_CONDITIONS << 9) | 0x7 -#define EC_WORD_GOING (EC_GROUP_CONDITIONS << 9) | 0x8 -#define EC_WORD_WEIRD (EC_GROUP_CONDITIONS << 9) | 0x9 -#define EC_WORD_BUSY (EC_GROUP_CONDITIONS << 9) | 0xa -#define EC_WORD_TOGETHER (EC_GROUP_CONDITIONS << 9) | 0xb -#define EC_WORD_FULL (EC_GROUP_CONDITIONS << 9) | 0xc -#define EC_WORD_ABSENT (EC_GROUP_CONDITIONS << 9) | 0xd -#define EC_WORD_BEING (EC_GROUP_CONDITIONS << 9) | 0xe -#define EC_WORD_NEED (EC_GROUP_CONDITIONS << 9) | 0xf -#define EC_WORD_TASTY (EC_GROUP_CONDITIONS << 9) | 0x10 -#define EC_WORD_SKILLED (EC_GROUP_CONDITIONS << 9) | 0x11 -#define EC_WORD_NOISY (EC_GROUP_CONDITIONS << 9) | 0x12 -#define EC_WORD_BIG (EC_GROUP_CONDITIONS << 9) | 0x13 -#define EC_WORD_LATE (EC_GROUP_CONDITIONS << 9) | 0x14 -#define EC_WORD_CLOSE (EC_GROUP_CONDITIONS << 9) | 0x15 -#define EC_WORD_DOCILE (EC_GROUP_CONDITIONS << 9) | 0x16 -#define EC_WORD_AMUSING (EC_GROUP_CONDITIONS << 9) | 0x17 -#define EC_WORD_ENTERTAINING (EC_GROUP_CONDITIONS << 9) | 0x18 -#define EC_WORD_PERFECTION (EC_GROUP_CONDITIONS << 9) | 0x19 -#define EC_WORD_PRETTY (EC_GROUP_CONDITIONS << 9) | 0x1a -#define EC_WORD_HEALTHY (EC_GROUP_CONDITIONS << 9) | 0x1b -#define EC_WORD_EXCELLENT (EC_GROUP_CONDITIONS << 9) | 0x1c -#define EC_WORD_UPSIDE_DOWN (EC_GROUP_CONDITIONS << 9) | 0x1d -#define EC_WORD_COLD (EC_GROUP_CONDITIONS << 9) | 0x1e -#define EC_WORD_REFRESHING (EC_GROUP_CONDITIONS << 9) | 0x1f -#define EC_WORD_UNAVOIDABLE (EC_GROUP_CONDITIONS << 9) | 0x20 -#define EC_WORD_MUCH (EC_GROUP_CONDITIONS << 9) | 0x21 -#define EC_WORD_OVERWHELMING (EC_GROUP_CONDITIONS << 9) | 0x22 -#define EC_WORD_FABULOUS (EC_GROUP_CONDITIONS << 9) | 0x23 -#define EC_WORD_ELSE (EC_GROUP_CONDITIONS << 9) | 0x24 -#define EC_WORD_EXPENSIVE (EC_GROUP_CONDITIONS << 9) | 0x25 -#define EC_WORD_CORRECT (EC_GROUP_CONDITIONS << 9) | 0x26 -#define EC_WORD_IMPOSSIBLE (EC_GROUP_CONDITIONS << 9) | 0x27 -#define EC_WORD_SMALL (EC_GROUP_CONDITIONS << 9) | 0x28 -#define EC_WORD_DIFFERENT (EC_GROUP_CONDITIONS << 9) | 0x29 -#define EC_WORD_TIRED (EC_GROUP_CONDITIONS << 9) | 0x2a -#define EC_WORD_SKILL (EC_GROUP_CONDITIONS << 9) | 0x2b -#define EC_WORD_TOP (EC_GROUP_CONDITIONS << 9) | 0x2c -#define EC_WORD_NON_STOP (EC_GROUP_CONDITIONS << 9) | 0x2d -#define EC_WORD_PREPOSTEROUS (EC_GROUP_CONDITIONS << 9) | 0x2e -#define EC_WORD_NONE (EC_GROUP_CONDITIONS << 9) | 0x2f -#define EC_WORD_NOTHING (EC_GROUP_CONDITIONS << 9) | 0x30 -#define EC_WORD_NATURAL (EC_GROUP_CONDITIONS << 9) | 0x31 -#define EC_WORD_BECOMES (EC_GROUP_CONDITIONS << 9) | 0x32 -#define EC_WORD_LUKEWARM (EC_GROUP_CONDITIONS << 9) | 0x33 -#define EC_WORD_FAST (EC_GROUP_CONDITIONS << 9) | 0x34 -#define EC_WORD_LOW (EC_GROUP_CONDITIONS << 9) | 0x35 -#define EC_WORD_AWFUL (EC_GROUP_CONDITIONS << 9) | 0x36 -#define EC_WORD_ALONE (EC_GROUP_CONDITIONS << 9) | 0x37 -#define EC_WORD_BORED (EC_GROUP_CONDITIONS << 9) | 0x38 -#define EC_WORD_SECRET (EC_GROUP_CONDITIONS << 9) | 0x39 -#define EC_WORD_MYSTERY (EC_GROUP_CONDITIONS << 9) | 0x3a -#define EC_WORD_LACKS (EC_GROUP_CONDITIONS << 9) | 0x3b -#define EC_WORD_BEST (EC_GROUP_CONDITIONS << 9) | 0x3c -#define EC_WORD_LOUSY (EC_GROUP_CONDITIONS << 9) | 0x3d -#define EC_WORD_MISTAKE (EC_GROUP_CONDITIONS << 9) | 0x3e -#define EC_WORD_KIND (EC_GROUP_CONDITIONS << 9) | 0x3f -#define EC_WORD_WELL (EC_GROUP_CONDITIONS << 9) | 0x40 -#define EC_WORD_WEAKENED (EC_GROUP_CONDITIONS << 9) | 0x41 -#define EC_WORD_SIMPLE (EC_GROUP_CONDITIONS << 9) | 0x42 -#define EC_WORD_SEEMS (EC_GROUP_CONDITIONS << 9) | 0x43 -#define EC_WORD_BADLY (EC_GROUP_CONDITIONS << 9) | 0x44 - -// ACTIONS -#define EC_WORD_MEETS (EC_GROUP_ACTIONS << 9) | 0x0 -#define EC_WORD_CONCEDE (EC_GROUP_ACTIONS << 9) | 0x1 -#define EC_WORD_GIVE (EC_GROUP_ACTIONS << 9) | 0x2 -#define EC_WORD_GIVES (EC_GROUP_ACTIONS << 9) | 0x3 -#define EC_WORD_PLAYED (EC_GROUP_ACTIONS << 9) | 0x4 -#define EC_WORD_PLAYS (EC_GROUP_ACTIONS << 9) | 0x5 -#define EC_WORD_COLLECT (EC_GROUP_ACTIONS << 9) | 0x6 -#define EC_WORD_WALKING (EC_GROUP_ACTIONS << 9) | 0x7 -#define EC_WORD_WALKS (EC_GROUP_ACTIONS << 9) | 0x8 -#define EC_WORD_SAYS (EC_GROUP_ACTIONS << 9) | 0x9 -#define EC_WORD_WENT (EC_GROUP_ACTIONS << 9) | 0xa -#define EC_WORD_SAID (EC_GROUP_ACTIONS << 9) | 0xb -#define EC_WORD_WAKE_UP (EC_GROUP_ACTIONS << 9) | 0xc -#define EC_WORD_WAKES_UP (EC_GROUP_ACTIONS << 9) | 0xd -#define EC_WORD_ANGERS (EC_GROUP_ACTIONS << 9) | 0xe -#define EC_WORD_TEACH (EC_GROUP_ACTIONS << 9) | 0xf -#define EC_WORD_TEACHES (EC_GROUP_ACTIONS << 9) | 0x10 -#define EC_WORD_PLEASE (EC_GROUP_ACTIONS << 9) | 0x11 -#define EC_WORD_LEARN (EC_GROUP_ACTIONS << 9) | 0x12 -#define EC_WORD_CHANGE (EC_GROUP_ACTIONS << 9) | 0x13 -#define EC_WORD_STORY (EC_GROUP_ACTIONS << 9) | 0x14 -#define EC_WORD_TRUST (EC_GROUP_ACTIONS << 9) | 0x15 -#define EC_WORD_LAVISH (EC_GROUP_ACTIONS << 9) | 0x16 -#define EC_WORD_LISTENS (EC_GROUP_ACTIONS << 9) | 0x17 -#define EC_WORD_HEARING (EC_GROUP_ACTIONS << 9) | 0x18 -#define EC_WORD_TRAINS (EC_GROUP_ACTIONS << 9) | 0x19 -#define EC_WORD_CHOOSE (EC_GROUP_ACTIONS << 9) | 0x1a -#define EC_WORD_COME (EC_GROUP_ACTIONS << 9) | 0x1b -#define EC_WORD_CAME (EC_GROUP_ACTIONS << 9) | 0x1c -#define EC_WORD_SEARCH (EC_GROUP_ACTIONS << 9) | 0x1d -#define EC_WORD_MAKE (EC_GROUP_ACTIONS << 9) | 0x1e -#define EC_WORD_CAUSE (EC_GROUP_ACTIONS << 9) | 0x1f -#define EC_WORD_KNOW (EC_GROUP_ACTIONS << 9) | 0x20 -#define EC_WORD_KNOWS (EC_GROUP_ACTIONS << 9) | 0x21 -#define EC_WORD_REFUSE (EC_GROUP_ACTIONS << 9) | 0x22 -#define EC_WORD_STORES (EC_GROUP_ACTIONS << 9) | 0x23 -#define EC_WORD_BRAG (EC_GROUP_ACTIONS << 9) | 0x24 -#define EC_WORD_IGNORANT (EC_GROUP_ACTIONS << 9) | 0x25 -#define EC_WORD_THINKS (EC_GROUP_ACTIONS << 9) | 0x26 -#define EC_WORD_BELIEVE (EC_GROUP_ACTIONS << 9) | 0x27 -#define EC_WORD_SLIDE (EC_GROUP_ACTIONS << 9) | 0x28 -#define EC_WORD_EATS (EC_GROUP_ACTIONS << 9) | 0x29 -#define EC_WORD_USE (EC_GROUP_ACTIONS << 9) | 0x2a -#define EC_WORD_USES (EC_GROUP_ACTIONS << 9) | 0x2b -#define EC_WORD_USING (EC_GROUP_ACTIONS << 9) | 0x2c -#define EC_WORD_COULDN_T (EC_GROUP_ACTIONS << 9) | 0x2d -#define EC_WORD_CAPABLE (EC_GROUP_ACTIONS << 9) | 0x2e -#define EC_WORD_DISAPPEAR (EC_GROUP_ACTIONS << 9) | 0x2f -#define EC_WORD_APPEAR (EC_GROUP_ACTIONS << 9) | 0x30 -#define EC_WORD_THROW (EC_GROUP_ACTIONS << 9) | 0x31 -#define EC_WORD_WORRY (EC_GROUP_ACTIONS << 9) | 0x32 -#define EC_WORD_SLEPT (EC_GROUP_ACTIONS << 9) | 0x33 -#define EC_WORD_SLEEP (EC_GROUP_ACTIONS << 9) | 0x34 -#define EC_WORD_RELEASE (EC_GROUP_ACTIONS << 9) | 0x35 -#define EC_WORD_DRINKS (EC_GROUP_ACTIONS << 9) | 0x36 -#define EC_WORD_RUNS (EC_GROUP_ACTIONS << 9) | 0x37 -#define EC_WORD_RUN (EC_GROUP_ACTIONS << 9) | 0x38 -#define EC_WORD_WORKS (EC_GROUP_ACTIONS << 9) | 0x39 -#define EC_WORD_WORKING (EC_GROUP_ACTIONS << 9) | 0x3a -#define EC_WORD_TALKING (EC_GROUP_ACTIONS << 9) | 0x3b -#define EC_WORD_TALK (EC_GROUP_ACTIONS << 9) | 0x3c -#define EC_WORD_SINK (EC_GROUP_ACTIONS << 9) | 0x3d -#define EC_WORD_SMACK (EC_GROUP_ACTIONS << 9) | 0x3e -#define EC_WORD_PRETEND (EC_GROUP_ACTIONS << 9) | 0x3f -#define EC_WORD_PRAISE (EC_GROUP_ACTIONS << 9) | 0x40 -#define EC_WORD_OVERDO (EC_GROUP_ACTIONS << 9) | 0x41 -#define EC_WORD_SHOW (EC_GROUP_ACTIONS << 9) | 0x42 -#define EC_WORD_LOOKS (EC_GROUP_ACTIONS << 9) | 0x43 -#define EC_WORD_SEES (EC_GROUP_ACTIONS << 9) | 0x44 -#define EC_WORD_SEEK (EC_GROUP_ACTIONS << 9) | 0x45 -#define EC_WORD_OWN (EC_GROUP_ACTIONS << 9) | 0x46 -#define EC_WORD_TAKE (EC_GROUP_ACTIONS << 9) | 0x47 -#define EC_WORD_ALLOW (EC_GROUP_ACTIONS << 9) | 0x48 -#define EC_WORD_FORGET (EC_GROUP_ACTIONS << 9) | 0x49 -#define EC_WORD_FORGETS (EC_GROUP_ACTIONS << 9) | 0x4a -#define EC_WORD_APPEARS (EC_GROUP_ACTIONS << 9) | 0x4b -#define EC_WORD_FAINT (EC_GROUP_ACTIONS << 9) | 0x4c -#define EC_WORD_FAINTED (EC_GROUP_ACTIONS << 9) | 0x4d - -// LIFESTYLE -#define EC_WORD_CHORES (EC_GROUP_LIFESTYLE << 9) | 0x0 -#define EC_WORD_HOME (EC_GROUP_LIFESTYLE << 9) | 0x1 -#define EC_WORD_MONEY (EC_GROUP_LIFESTYLE << 9) | 0x2 -#define EC_WORD_ALLOWANCE (EC_GROUP_LIFESTYLE << 9) | 0x3 -#define EC_WORD_BATH (EC_GROUP_LIFESTYLE << 9) | 0x4 -#define EC_WORD_CONVERSATION (EC_GROUP_LIFESTYLE << 9) | 0x5 -#define EC_WORD_SCHOOL (EC_GROUP_LIFESTYLE << 9) | 0x6 -#define EC_WORD_COMMEMORATE (EC_GROUP_LIFESTYLE << 9) | 0x7 -#define EC_WORD_HABIT (EC_GROUP_LIFESTYLE << 9) | 0x8 -#define EC_WORD_GROUP (EC_GROUP_LIFESTYLE << 9) | 0x9 -#define EC_WORD_WORD (EC_GROUP_LIFESTYLE << 9) | 0xa -#define EC_WORD_STORE (EC_GROUP_LIFESTYLE << 9) | 0xb -#define EC_WORD_SERVICE (EC_GROUP_LIFESTYLE << 9) | 0xc -#define EC_WORD_WORK (EC_GROUP_LIFESTYLE << 9) | 0xd -#define EC_WORD_SYSTEM (EC_GROUP_LIFESTYLE << 9) | 0xe -#define EC_WORD_TRAIN (EC_GROUP_LIFESTYLE << 9) | 0xf -#define EC_WORD_CLASS (EC_GROUP_LIFESTYLE << 9) | 0x10 -#define EC_WORD_LESSONS (EC_GROUP_LIFESTYLE << 9) | 0x11 -#define EC_WORD_INFORMATION (EC_GROUP_LIFESTYLE << 9) | 0x12 -#define EC_WORD_LIVING (EC_GROUP_LIFESTYLE << 9) | 0x13 -#define EC_WORD_TEACHER (EC_GROUP_LIFESTYLE << 9) | 0x14 -#define EC_WORD_TOURNAMENT (EC_GROUP_LIFESTYLE << 9) | 0x15 -#define EC_WORD_LETTER (EC_GROUP_LIFESTYLE << 9) | 0x16 -#define EC_WORD_EVENT (EC_GROUP_LIFESTYLE << 9) | 0x17 -#define EC_WORD_DIGITAL (EC_GROUP_LIFESTYLE << 9) | 0x18 -#define EC_WORD_TEST (EC_GROUP_LIFESTYLE << 9) | 0x19 -#define EC_WORD_DEPT_STORE (EC_GROUP_LIFESTYLE << 9) | 0x1a -#define EC_WORD_TELEVISION (EC_GROUP_LIFESTYLE << 9) | 0x1b -#define EC_WORD_PHONE (EC_GROUP_LIFESTYLE << 9) | 0x1c -#define EC_WORD_ITEM (EC_GROUP_LIFESTYLE << 9) | 0x1d -#define EC_WORD_NAME (EC_GROUP_LIFESTYLE << 9) | 0x1e -#define EC_WORD_NEWS (EC_GROUP_LIFESTYLE << 9) | 0x1f -#define EC_WORD_POPULAR (EC_GROUP_LIFESTYLE << 9) | 0x20 -#define EC_WORD_PARTY (EC_GROUP_LIFESTYLE << 9) | 0x21 -#define EC_WORD_STUDY (EC_GROUP_LIFESTYLE << 9) | 0x22 -#define EC_WORD_MACHINE (EC_GROUP_LIFESTYLE << 9) | 0x23 -#define EC_WORD_MAIL (EC_GROUP_LIFESTYLE << 9) | 0x24 -#define EC_WORD_MESSAGE (EC_GROUP_LIFESTYLE << 9) | 0x25 -#define EC_WORD_PROMISE (EC_GROUP_LIFESTYLE << 9) | 0x26 -#define EC_WORD_DREAM (EC_GROUP_LIFESTYLE << 9) | 0x27 -#define EC_WORD_KINDERGARTEN (EC_GROUP_LIFESTYLE << 9) | 0x28 -#define EC_WORD_LIFE (EC_GROUP_LIFESTYLE << 9) | 0x29 -#define EC_WORD_RADIO (EC_GROUP_LIFESTYLE << 9) | 0x2a -#define EC_WORD_RENTAL (EC_GROUP_LIFESTYLE << 9) | 0x2b -#define EC_WORD_WORLD (EC_GROUP_LIFESTYLE << 9) | 0x2c - -// HOBBIES -#define EC_WORD_IDOL (EC_GROUP_HOBBIES << 9) | 0x0 -#define EC_WORD_ANIME (EC_GROUP_HOBBIES << 9) | 0x1 -#define EC_WORD_SONG (EC_GROUP_HOBBIES << 9) | 0x2 -#define EC_WORD_MOVIE (EC_GROUP_HOBBIES << 9) | 0x3 -#define EC_WORD_SWEETS (EC_GROUP_HOBBIES << 9) | 0x4 -#define EC_WORD_CHAT (EC_GROUP_HOBBIES << 9) | 0x5 -#define EC_WORD_CHILD_S_PLAY (EC_GROUP_HOBBIES << 9) | 0x6 -#define EC_WORD_TOYS (EC_GROUP_HOBBIES << 9) | 0x7 -#define EC_WORD_MUSIC (EC_GROUP_HOBBIES << 9) | 0x8 -#define EC_WORD_CARDS (EC_GROUP_HOBBIES << 9) | 0x9 -#define EC_WORD_SHOPPING (EC_GROUP_HOBBIES << 9) | 0xa -#define EC_WORD_CAMERA (EC_GROUP_HOBBIES << 9) | 0xb -#define EC_WORD_VIEWING (EC_GROUP_HOBBIES << 9) | 0xc -#define EC_WORD_SPECTATOR (EC_GROUP_HOBBIES << 9) | 0xd -#define EC_WORD_GOURMET (EC_GROUP_HOBBIES << 9) | 0xe -#define EC_WORD_GAME (EC_GROUP_HOBBIES << 9) | 0xf -#define EC_WORD_RPG (EC_GROUP_HOBBIES << 9) | 0x10 -#define EC_WORD_COLLECTION (EC_GROUP_HOBBIES << 9) | 0x11 -#define EC_WORD_COMPLETE (EC_GROUP_HOBBIES << 9) | 0x12 -#define EC_WORD_MAGAZINE (EC_GROUP_HOBBIES << 9) | 0x13 -#define EC_WORD_WALK (EC_GROUP_HOBBIES << 9) | 0x14 -#define EC_WORD_BIKE (EC_GROUP_HOBBIES << 9) | 0x15 -#define EC_WORD_HOBBY (EC_GROUP_HOBBIES << 9) | 0x16 -#define EC_WORD_SPORTS (EC_GROUP_HOBBIES << 9) | 0x17 -#define EC_WORD_SOFTWARE (EC_GROUP_HOBBIES << 9) | 0x18 -#define EC_WORD_SONGS (EC_GROUP_HOBBIES << 9) | 0x19 -#define EC_WORD_DIET (EC_GROUP_HOBBIES << 9) | 0x1a -#define EC_WORD_TREASURE (EC_GROUP_HOBBIES << 9) | 0x1b -#define EC_WORD_TRAVEL (EC_GROUP_HOBBIES << 9) | 0x1c -#define EC_WORD_DANCE (EC_GROUP_HOBBIES << 9) | 0x1d -#define EC_WORD_CHANNEL (EC_GROUP_HOBBIES << 9) | 0x1e -#define EC_WORD_MAKING (EC_GROUP_HOBBIES << 9) | 0x1f -#define EC_WORD_FISHING (EC_GROUP_HOBBIES << 9) | 0x20 -#define EC_WORD_DATE (EC_GROUP_HOBBIES << 9) | 0x21 -#define EC_WORD_DESIGN (EC_GROUP_HOBBIES << 9) | 0x22 -#define EC_WORD_LOCOMOTIVE (EC_GROUP_HOBBIES << 9) | 0x23 -#define EC_WORD_PLUSH_DOLL (EC_GROUP_HOBBIES << 9) | 0x24 -#define EC_WORD_PC (EC_GROUP_HOBBIES << 9) | 0x25 -#define EC_WORD_FLOWERS (EC_GROUP_HOBBIES << 9) | 0x26 -#define EC_WORD_HERO (EC_GROUP_HOBBIES << 9) | 0x27 -#define EC_WORD_NAP (EC_GROUP_HOBBIES << 9) | 0x28 -#define EC_WORD_HEROINE (EC_GROUP_HOBBIES << 9) | 0x29 -#define EC_WORD_FASHION (EC_GROUP_HOBBIES << 9) | 0x2a -#define EC_WORD_ADVENTURE (EC_GROUP_HOBBIES << 9) | 0x2b -#define EC_WORD_BOARD (EC_GROUP_HOBBIES << 9) | 0x2c -#define EC_WORD_BALL (EC_GROUP_HOBBIES << 9) | 0x2d -#define EC_WORD_BOOK (EC_GROUP_HOBBIES << 9) | 0x2e -#define EC_WORD_FESTIVAL (EC_GROUP_HOBBIES << 9) | 0x2f -#define EC_WORD_COMICS (EC_GROUP_HOBBIES << 9) | 0x30 -#define EC_WORD_HOLIDAY (EC_GROUP_HOBBIES << 9) | 0x31 -#define EC_WORD_PLANS (EC_GROUP_HOBBIES << 9) | 0x32 -#define EC_WORD_TRENDY (EC_GROUP_HOBBIES << 9) | 0x33 -#define EC_WORD_VACATION (EC_GROUP_HOBBIES << 9) | 0x34 -#define EC_WORD_LOOK (EC_GROUP_HOBBIES << 9) | 0x35 - -// TIME -#define EC_WORD_FALL (EC_GROUP_TIME << 9) | 0x0 -#define EC_WORD_MORNING (EC_GROUP_TIME << 9) | 0x1 -#define EC_WORD_TOMORROW (EC_GROUP_TIME << 9) | 0x2 -#define EC_WORD_LAST (EC_GROUP_TIME << 9) | 0x3 -#define EC_WORD_DAY (EC_GROUP_TIME << 9) | 0x4 -#define EC_WORD_SOMETIME (EC_GROUP_TIME << 9) | 0x5 -#define EC_WORD_ALWAYS (EC_GROUP_TIME << 9) | 0x6 -#define EC_WORD_CURRENT (EC_GROUP_TIME << 9) | 0x7 -#define EC_WORD_FOREVER (EC_GROUP_TIME << 9) | 0x8 -#define EC_WORD_DAYS (EC_GROUP_TIME << 9) | 0x9 -#define EC_WORD_END (EC_GROUP_TIME << 9) | 0xa -#define EC_WORD_TUESDAY (EC_GROUP_TIME << 9) | 0xb -#define EC_WORD_YESTERDAY (EC_GROUP_TIME << 9) | 0xc -#define EC_WORD_TODAY (EC_GROUP_TIME << 9) | 0xd -#define EC_WORD_FRIDAY (EC_GROUP_TIME << 9) | 0xe -#define EC_WORD_MONDAY (EC_GROUP_TIME << 9) | 0xf -#define EC_WORD_LATER (EC_GROUP_TIME << 9) | 0x10 -#define EC_WORD_EARLIER (EC_GROUP_TIME << 9) | 0x11 -#define EC_WORD_ANOTHER (EC_GROUP_TIME << 9) | 0x12 -#define EC_WORD_TIME (EC_GROUP_TIME << 9) | 0x13 -#define EC_WORD_FINISH (EC_GROUP_TIME << 9) | 0x14 -#define EC_WORD_WEDNESDAY (EC_GROUP_TIME << 9) | 0x15 -#define EC_WORD_SOON (EC_GROUP_TIME << 9) | 0x16 -#define EC_WORD_START (EC_GROUP_TIME << 9) | 0x17 -#define EC_WORD_MONTH (EC_GROUP_TIME << 9) | 0x18 -#define EC_WORD_STOP (EC_GROUP_TIME << 9) | 0x19 -#define EC_WORD_NOW (EC_GROUP_TIME << 9) | 0x1a -#define EC_WORD_FINAL (EC_GROUP_TIME << 9) | 0x1b -#define EC_WORD_NEXT (EC_GROUP_TIME << 9) | 0x1c -#define EC_WORD_AGE (EC_GROUP_TIME << 9) | 0x1d -#define EC_WORD_SATURDAY (EC_GROUP_TIME << 9) | 0x1e -#define EC_WORD_SUMMER (EC_GROUP_TIME << 9) | 0x1f -#define EC_WORD_SUNDAY (EC_GROUP_TIME << 9) | 0x20 -#define EC_WORD_BEGINNING (EC_GROUP_TIME << 9) | 0x21 -#define EC_WORD_SPRING (EC_GROUP_TIME << 9) | 0x22 -#define EC_WORD_DAYTIME (EC_GROUP_TIME << 9) | 0x23 -#define EC_WORD_WINTER (EC_GROUP_TIME << 9) | 0x24 -#define EC_WORD_DAILY (EC_GROUP_TIME << 9) | 0x25 -#define EC_WORD_OLDEN (EC_GROUP_TIME << 9) | 0x26 -#define EC_WORD_ALMOST (EC_GROUP_TIME << 9) | 0x27 -#define EC_WORD_NEARLY (EC_GROUP_TIME << 9) | 0x28 -#define EC_WORD_THURSDAY (EC_GROUP_TIME << 9) | 0x29 -#define EC_WORD_NIGHTTIME (EC_GROUP_TIME << 9) | 0x2a -#define EC_WORD_NIGHT (EC_GROUP_TIME << 9) | 0x2b -#define EC_WORD_WEEK (EC_GROUP_TIME << 9) | 0x2c - -// MISC -#define EC_WORD_HIGHS (EC_GROUP_MISC << 9) | 0x0 -#define EC_WORD_LOWS (EC_GROUP_MISC << 9) | 0x1 -#define EC_WORD_UM (EC_GROUP_MISC << 9) | 0x2 -#define EC_WORD_REAR (EC_GROUP_MISC << 9) | 0x3 -#define EC_WORD_THINGS (EC_GROUP_MISC << 9) | 0x4 -#define EC_WORD_THING (EC_GROUP_MISC << 9) | 0x5 -#define EC_WORD_BELOW (EC_GROUP_MISC << 9) | 0x6 -#define EC_WORD_ABOVE (EC_GROUP_MISC << 9) | 0x7 -#define EC_WORD_BACK (EC_GROUP_MISC << 9) | 0x8 -#define EC_WORD_HIGH (EC_GROUP_MISC << 9) | 0x9 -#define EC_WORD_HERE (EC_GROUP_MISC << 9) | 0xa -#define EC_WORD_INSIDE (EC_GROUP_MISC << 9) | 0xb -#define EC_WORD_OUTSIDE (EC_GROUP_MISC << 9) | 0xc -#define EC_WORD_BESIDE (EC_GROUP_MISC << 9) | 0xd -#define EC_WORD_THIS_IS_IT_EXCL (EC_GROUP_MISC << 9) | 0xe -#define EC_WORD_THIS (EC_GROUP_MISC << 9) | 0xf -#define EC_WORD_EVERY (EC_GROUP_MISC << 9) | 0x10 -#define EC_WORD_THESE (EC_GROUP_MISC << 9) | 0x11 -#define EC_WORD_THESE_WERE (EC_GROUP_MISC << 9) | 0x12 -#define EC_WORD_DOWN (EC_GROUP_MISC << 9) | 0x13 -#define EC_WORD_THAT (EC_GROUP_MISC << 9) | 0x14 -#define EC_WORD_THOSE_ARE (EC_GROUP_MISC << 9) | 0x15 -#define EC_WORD_THOSE_WERE (EC_GROUP_MISC << 9) | 0x16 -#define EC_WORD_THAT_S_IT_EXCL (EC_GROUP_MISC << 9) | 0x17 -#define EC_WORD_AM (EC_GROUP_MISC << 9) | 0x18 -#define EC_WORD_THAT_WAS (EC_GROUP_MISC << 9) | 0x19 -#define EC_WORD_FRONT (EC_GROUP_MISC << 9) | 0x1a -#define EC_WORD_UP (EC_GROUP_MISC << 9) | 0x1b -#define EC_WORD_CHOICE (EC_GROUP_MISC << 9) | 0x1c -#define EC_WORD_FAR (EC_GROUP_MISC << 9) | 0x1d -#define EC_WORD_AWAY (EC_GROUP_MISC << 9) | 0x1e -#define EC_WORD_NEAR (EC_GROUP_MISC << 9) | 0x1f -#define EC_WORD_WHERE (EC_GROUP_MISC << 9) | 0x20 -#define EC_WORD_WHEN (EC_GROUP_MISC << 9) | 0x21 -#define EC_WORD_WHAT (EC_GROUP_MISC << 9) | 0x22 -#define EC_WORD_DEEP (EC_GROUP_MISC << 9) | 0x23 -#define EC_WORD_SHALLOW (EC_GROUP_MISC << 9) | 0x24 -#define EC_WORD_WHY (EC_GROUP_MISC << 9) | 0x25 -#define EC_WORD_CONFUSED (EC_GROUP_MISC << 9) | 0x26 -#define EC_WORD_OPPOSITE (EC_GROUP_MISC << 9) | 0x27 -#define EC_WORD_LEFT (EC_GROUP_MISC << 9) | 0x28 -#define EC_WORD_RIGHT (EC_GROUP_MISC << 9) | 0x29 - -// ADJECTIVES -#define EC_WORD_WANDERING (EC_GROUP_ADJECTIVES << 9) | 0x0 -#define EC_WORD_RICKETY (EC_GROUP_ADJECTIVES << 9) | 0x1 -#define EC_WORD_ROCK_SOLID (EC_GROUP_ADJECTIVES << 9) | 0x2 -#define EC_WORD_HUNGRY (EC_GROUP_ADJECTIVES << 9) | 0x3 -#define EC_WORD_TIGHT (EC_GROUP_ADJECTIVES << 9) | 0x4 -#define EC_WORD_TICKLISH (EC_GROUP_ADJECTIVES << 9) | 0x5 -#define EC_WORD_TWIRLING (EC_GROUP_ADJECTIVES << 9) | 0x6 -#define EC_WORD_SPIRALING (EC_GROUP_ADJECTIVES << 9) | 0x7 -#define EC_WORD_THIRSTY (EC_GROUP_ADJECTIVES << 9) | 0x8 -#define EC_WORD_LOLLING (EC_GROUP_ADJECTIVES << 9) | 0x9 -#define EC_WORD_SILKY (EC_GROUP_ADJECTIVES << 9) | 0xa -#define EC_WORD_SADLY (EC_GROUP_ADJECTIVES << 9) | 0xb -#define EC_WORD_HOPELESS (EC_GROUP_ADJECTIVES << 9) | 0xc -#define EC_WORD_USELESS (EC_GROUP_ADJECTIVES << 9) | 0xd -#define EC_WORD_DROOLING (EC_GROUP_ADJECTIVES << 9) | 0xe -#define EC_WORD_EXCITING (EC_GROUP_ADJECTIVES << 9) | 0xf -#define EC_WORD_THICK (EC_GROUP_ADJECTIVES << 9) | 0x10 -#define EC_WORD_SMOOTH (EC_GROUP_ADJECTIVES << 9) | 0x11 -#define EC_WORD_SLIMY (EC_GROUP_ADJECTIVES << 9) | 0x12 -#define EC_WORD_THIN (EC_GROUP_ADJECTIVES << 9) | 0x13 -#define EC_WORD_BREAK (EC_GROUP_ADJECTIVES << 9) | 0x14 -#define EC_WORD_VORACIOUS (EC_GROUP_ADJECTIVES << 9) | 0x15 -#define EC_WORD_SCATTER (EC_GROUP_ADJECTIVES << 9) | 0x16 -#define EC_WORD_AWESOME (EC_GROUP_ADJECTIVES << 9) | 0x17 -#define EC_WORD_WIMPY (EC_GROUP_ADJECTIVES << 9) | 0x18 -#define EC_WORD_WOBBLY (EC_GROUP_ADJECTIVES << 9) | 0x19 -#define EC_WORD_SHAKY (EC_GROUP_ADJECTIVES << 9) | 0x1a -#define EC_WORD_RIPPED (EC_GROUP_ADJECTIVES << 9) | 0x1b -#define EC_WORD_SHREDDED (EC_GROUP_ADJECTIVES << 9) | 0x1c -#define EC_WORD_INCREASING (EC_GROUP_ADJECTIVES << 9) | 0x1d -#define EC_WORD_YET (EC_GROUP_ADJECTIVES << 9) | 0x1e -#define EC_WORD_DESTROYED (EC_GROUP_ADJECTIVES << 9) | 0x1f -#define EC_WORD_FIERY (EC_GROUP_ADJECTIVES << 9) | 0x20 -#define EC_WORD_LOVEY_DOVEY (EC_GROUP_ADJECTIVES << 9) | 0x21 -#define EC_WORD_HAPPILY (EC_GROUP_ADJECTIVES << 9) | 0x22 -#define EC_WORD_ANTICIPATION (EC_GROUP_ADJECTIVES << 9) | 0x23 - -// EVENTS -#define EC_WORD_APPEAL (EC_GROUP_EVENTS << 9) | 0x0 -#define EC_WORD_EVENTS (EC_GROUP_EVENTS << 9) | 0x1 -#define EC_WORD_STAY_AT_HOME (EC_GROUP_EVENTS << 9) | 0x2 -#define EC_WORD_BERRY (EC_GROUP_EVENTS << 9) | 0x3 -#define EC_WORD_CONTEST (EC_GROUP_EVENTS << 9) | 0x4 -#define EC_WORD_MC (EC_GROUP_EVENTS << 9) | 0x5 -#define EC_WORD_JUDGE (EC_GROUP_EVENTS << 9) | 0x6 -#define EC_WORD_SUPER (EC_GROUP_EVENTS << 9) | 0x7 -#define EC_WORD_STAGE (EC_GROUP_EVENTS << 9) | 0x8 -#define EC_WORD_HALL_OF_FAME (EC_GROUP_EVENTS << 9) | 0x9 -#define EC_WORD_EVOLUTION (EC_GROUP_EVENTS << 9) | 0xa -#define EC_WORD_HYPER (EC_GROUP_EVENTS << 9) | 0xb -#define EC_WORD_BATTLE_TOWER (EC_GROUP_EVENTS << 9) | 0xc -#define EC_WORD_LEADERS (EC_GROUP_EVENTS << 9) | 0xd -#define EC_WORD_BATTLE_ROOM (EC_GROUP_EVENTS << 9) | 0xe -#define EC_WORD_HIDDEN (EC_GROUP_EVENTS << 9) | 0xf -#define EC_WORD_SECRET_BASE (EC_GROUP_EVENTS << 9) | 0x10 -#define EC_WORD_BLEND (EC_GROUP_EVENTS << 9) | 0x11 -#define EC_WORD_POKEBLOCK (EC_GROUP_EVENTS << 9) | 0x12 -#define EC_WORD_MASTER (EC_GROUP_EVENTS << 9) | 0x13 -#define EC_WORD_RANK (EC_GROUP_EVENTS << 9) | 0x14 -#define EC_WORD_RIBBON (EC_GROUP_EVENTS << 9) | 0x15 - -// TRENDY_SAYING -#define EC_WORD_KTHX_BYE (EC_GROUP_TRENDY_SAYING << 9) | 0x0 -#define EC_WORD_YES_SIR_EXCL (EC_GROUP_TRENDY_SAYING << 9) | 0x1 -#define EC_WORD_AVANT_GARDE (EC_GROUP_TRENDY_SAYING << 9) | 0x2 -#define EC_WORD_COUPLE (EC_GROUP_TRENDY_SAYING << 9) | 0x3 -#define EC_WORD_MUCH_OBLIGED (EC_GROUP_TRENDY_SAYING << 9) | 0x4 -#define EC_WORD_YEEHAW_EXCL (EC_GROUP_TRENDY_SAYING << 9) | 0x5 -#define EC_WORD_MEGA (EC_GROUP_TRENDY_SAYING << 9) | 0x6 -#define EC_WORD_1_HIT_KO_EXCL (EC_GROUP_TRENDY_SAYING << 9) | 0x7 -#define EC_WORD_DESTINY (EC_GROUP_TRENDY_SAYING << 9) | 0x8 -#define EC_WORD_CANCEL (EC_GROUP_TRENDY_SAYING << 9) | 0x9 -#define EC_WORD_NEW (EC_GROUP_TRENDY_SAYING << 9) | 0xa -#define EC_WORD_FLATTEN (EC_GROUP_TRENDY_SAYING << 9) | 0xb -#define EC_WORD_KIDDING (EC_GROUP_TRENDY_SAYING << 9) | 0xc -#define EC_WORD_LOSER (EC_GROUP_TRENDY_SAYING << 9) | 0xd -#define EC_WORD_LOSING (EC_GROUP_TRENDY_SAYING << 9) | 0xe -#define EC_WORD_HAPPENING (EC_GROUP_TRENDY_SAYING << 9) | 0xf -#define EC_WORD_HIP_AND (EC_GROUP_TRENDY_SAYING << 9) | 0x10 -#define EC_WORD_SHAKE (EC_GROUP_TRENDY_SAYING << 9) | 0x11 -#define EC_WORD_SHADY (EC_GROUP_TRENDY_SAYING << 9) | 0x12 -#define EC_WORD_UPBEAT (EC_GROUP_TRENDY_SAYING << 9) | 0x13 -#define EC_WORD_MODERN (EC_GROUP_TRENDY_SAYING << 9) | 0x14 -#define EC_WORD_SMELL_YA (EC_GROUP_TRENDY_SAYING << 9) | 0x15 -#define EC_WORD_BANG (EC_GROUP_TRENDY_SAYING << 9) | 0x16 -#define EC_WORD_KNOCKOUT (EC_GROUP_TRENDY_SAYING << 9) | 0x17 -#define EC_WORD_HASSLE (EC_GROUP_TRENDY_SAYING << 9) | 0x18 -#define EC_WORD_WINNER (EC_GROUP_TRENDY_SAYING << 9) | 0x19 -#define EC_WORD_FEVER (EC_GROUP_TRENDY_SAYING << 9) | 0x1a -#define EC_WORD_WANNABE (EC_GROUP_TRENDY_SAYING << 9) | 0x1b -#define EC_WORD_BABY (EC_GROUP_TRENDY_SAYING << 9) | 0x1c -#define EC_WORD_HEART (EC_GROUP_TRENDY_SAYING << 9) | 0x1d -#define EC_WORD_OLD (EC_GROUP_TRENDY_SAYING << 9) | 0x1e -#define EC_WORD_YOUNG (EC_GROUP_TRENDY_SAYING << 9) | 0x1f -#define EC_WORD_UGLY (EC_GROUP_TRENDY_SAYING << 9) | 0x20 - -#endif // GUARD_EASY_CHAT_CONSTANTS -- cgit v1.2.3 From a9fa94206520cfde8a7f66bc078b0955e415d5d2 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Mon, 28 Aug 2017 21:08:09 -0500 Subject: oops --- src/mauville_old_man.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index 2f58e65fc..50a6756f9 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -2,7 +2,6 @@ #include "bard_music.h" #include "mauville_old_man.h" #include "easy_chat.h" -#include "easy_chat_constants.h" #include "event_data.h" #include "field_message_box.h" #include "m4a.h" -- cgit v1.2.3 From 2bc843ccbbf3baa9b69e544e4f23e1d02b597fd8 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Mon, 28 Aug 2017 21:41:57 -0500 Subject: clean up mauville man script --- data/scripts/mauville_man.inc | 52 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 42 insertions(+), 10 deletions(-) diff --git a/data/scripts/mauville_man.inc b/data/scripts/mauville_man.inc index 159d729f6..997b5a31c 100644 --- a/data/scripts/mauville_man.inc +++ b/data/scripts/mauville_man.inc @@ -10,18 +10,19 @@ MAUVILLE_MAN_GIDDY = 4 MauvilleCity_PokemonCenter_1F_EventScript_1AE744:: @ 81AE744 special ScrSpecial_GetCurrentMauvilleMan switch RESULT - case MAUVILLE_MAN_BARD, speak_to_bard - case MAUVILLE_MAN_HIPSTER, speak_to_hipster - case MAUVILLE_MAN_TRADER, speak_to_trader - case MAUVILLE_MAN_STORYTELLER, speak_to_storyteller - case MAUVILLE_MAN_GIDDY, speak_to_giddy + case MAUVILLE_MAN_BARD, SpeakToBard + case MAUVILLE_MAN_HIPSTER, SpeakToHipster + case MAUVILLE_MAN_TRADER, SpeakToTrader + case MAUVILLE_MAN_STORYTELLER, SpeakToStoryteller + case MAUVILLE_MAN_GIDDY, SpeakToGiddy end + @------------------------------------------------------------------------------- @ Bard @------------------------------------------------------------------------------- -speak_to_bard: +SpeakToBard: lock faceplayer msgbox gTextBard_HiImTheBard, MSGBOX_YESNO @@ -30,6 +31,7 @@ speak_to_bard: compare RESULT, NO jumpeq dont_hear_song end + yes_hear_song: setvar 0x8004, 0 @ Give the player ear rape @@ -42,10 +44,12 @@ yes_hear_song: msgbox gTextBard_OhWhatAMovingSong, 4 release end + dont_hear_song: msgbox gTextBard_OhYouveLeftMe, 4 release end + prompt_write_lyrics: msgbox gTextBard_SoHowDoYouLikeMySong, MSGBOX_YESNO compare RESULT, YES @@ -53,6 +57,7 @@ prompt_write_lyrics: compare RESULT, NO jumpeq dont_write_lyrics end + write_lyrics: setvar 0x8004, 6 call MauvilleCity_PokemonCenter_1F_EventScript_1A00F3 @@ -72,16 +77,18 @@ write_lyrics: msgbox gTextBard_OkayThatsIt, 4 release end + dont_write_lyrics: msgbox gTextBard_OhYouveLeftMe2, 4 release end + @------------------------------------------------------------------------------- @ Hipster @------------------------------------------------------------------------------- -speak_to_hipster: +SpeakToHipster: lock faceplayer setflag 2054 @@ -92,6 +99,7 @@ speak_to_hipster: msgbox gTextHipster_TaughtYouAlready, 4 release end + hipster_first_time: special ScrSpecial_HipsterTeachWord compare RESULT, TRUE @ TRUE if player learned a new word @@ -99,19 +107,21 @@ hipster_first_time: msgbox gTextHipster_YouAlreadyKnowALot, 4 release end + teach_new_word: msgbox gTextHipster_HaveYouHeardAbout, 4 special ScrSpecial_SetHipsterSpokenFlag release end + @------------------------------------------------------------------------------- @ Trader @------------------------------------------------------------------------------- .include "data/text/trader.inc" -speak_to_trader: +SpeakToTrader: lock faceplayer msgbox gTextTrader_Introduction, MSGBOX_YESNO @@ -124,12 +134,15 @@ speak_to_trader: waittext jump do_trader_menu_get end + dont_want_to_trade: msgbox gTextTrader_FeelUnwanted1, 2 end + already_traded: msgbox gTextTrader_TradedAlready, 2 end + do_trader_menu_get: special ScrSpecial_TraderMenuGetDecoration waitstate @@ -145,22 +158,27 @@ do_trader_menu_get: jumpeq player_has_no_decorations jump do_trader_menu_give end + cancelled_get_menu: msgbox gTextTrader_DontWantAnything, 2 end + rare_item_cant_trade_away: message gTextTrader_ICantTradeThatOneAway waittext jump do_trader_menu_get end + dont_want_item: message gTextTrader_MenuPrompt waittext jump do_trader_menu_get end + player_has_no_decorations: msgbox gTextTrader_YouDontHaveDecorations, 2 end + do_trader_menu_give: msgbox gTextTrader_PickDecorationYoullTrade, 4 special ScrSpecial_TraderMenuGiveDecoration @@ -178,24 +196,28 @@ do_trader_menu_give: special ScrSpecial_TraderDoDecorationTrade msgbox gTextTrader_ThenWellTrade, 2 end + cancelled_give_menu: msgbox gTextTrader_FeelUnwanted2, 2 end + decoration_is_in_use: msgbox gTextTrader_InUseYouCantTradeIt, 4 jump do_trader_menu_give end + decorations_full: msgbox gTextTrader_NoRoomForThis, 2 end + @------------------------------------------------------------------------------- @ Storyteller @------------------------------------------------------------------------------- .include "data/text/storyteller.inc" -speak_to_storyteller: +SpeakToStoryteller: setvar 0x8008, 0 setvar 0x8009, 0 setvar 0x800a, 0 @@ -253,29 +275,33 @@ prompt_record_story: closebutton release end + stat_update: msgbox gTextStoryteller_BirthOfANewLegend, 4 closebutton release end + dont_hear_story: msgbox gTextStoryteller_OhIFeelStifled, 4 closebutton release end + cant_record_story: msgbox gTextStoryteller_WishMorePeopleWould, 4 closebutton release end + @------------------------------------------------------------------------------- @ Giddy @------------------------------------------------------------------------------- .include "data/text/giddy.inc" -speak_to_giddy: +SpeakToGiddy: lock faceplayer msgbox gTextGiddy_Introduction, MSGBOX_YESNO @@ -284,6 +310,7 @@ speak_to_giddy: compare RESULT, NO jumpeq dont_hear_giddy end + yes_hear_giddy: special ScrSpecial_GiddyShouldTellAnotherTale compare RESULT, TRUE @@ -291,6 +318,7 @@ yes_hear_giddy: compare RESULT, FALSE jumpeq bye_bye end + tell_another_giddy_tale: special ScrSpecial_GiddyShouldTellAnotherTale compare RESULT, TRUE @@ -298,10 +326,12 @@ tell_another_giddy_tale: compare RESULT, FALSE jumpeq bye_bye end + also_i_was_thinking: msgbox gTextGiddy_AlsoIWasThinking, 4 jump tell_giddy_tale end + tell_giddy_tale: special ScrSpecial_GenerateGiddyLine special ShowFieldMessageStringVar4 @@ -312,10 +342,12 @@ tell_giddy_tale: compare RESULT, 0 jumpeq tell_another_giddy_tale end + dont_hear_giddy: msgbox gTextGiddy_YouveDeflatedMe, 4 release end + bye_bye: msgbox gTextGiddy_ByeBye, 4 release -- cgit v1.2.3 From 5f98ce78e4908b820ce18e033d181ae74401010e Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 29 Aug 2017 05:08:10 +0200 Subject: cam helped me, thx cam --- src/pokemon_menu.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/pokemon_menu.c b/src/pokemon_menu.c index 46cbc7390..6fc692138 100644 --- a/src/pokemon_menu.c +++ b/src/pokemon_menu.c @@ -84,9 +84,9 @@ void sub_8089C50(u8 arg0, u8 arg1, u8 arg2, u8 arg3, const struct MenuAction* ar void sub_8089C7C(u8 arg0) { - u8 var1 = 18; - u8 var2 = (sPokeMenuOptionsNo * 2); + u32 r4 = (u8)(18 - (sPokeMenuOptionsNo << 1)); - sub_8089BDC(19, var1 - var2, 10, sPokeMenuOptionsNo, sPokemonMenuActions, sPokeMenuOptionsIDs, 3); - InitMenu(0, 20, (var1 - var2) | 1, sPokeMenuOptionsNo, arg0, 9); + sub_8089BDC(19, r4, 10, sPokeMenuOptionsNo, sPokemonMenuActions, sPokeMenuOptionsIDs, 3); + r4 |= 1; + InitMenu(0, 20, r4, sPokeMenuOptionsNo, arg0, 9); } -- cgit v1.2.3 From 7f9ea1cd6df4c55bf2c198e40bc8634db8480412 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Tue, 29 Aug 2017 11:14:58 -0500 Subject: tabs to spaces --- src/mauville_old_man.c | 354 ++++++++++++++++++++++++------------------------- 1 file changed, 177 insertions(+), 177 deletions(-) diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index 50a6756f9..d54e017f7 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -527,161 +527,161 @@ __attribute__((naked)) static void sub_80F7DC0(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\ - sub sp, 0x18\n\ - ldr r1, _080F7E84 @ =gUnknown_083E53C8\n\ - mov r0, sp\n\ - movs r2, 0x18\n\ - bl memcpy\n\ - movs r5, 0\n\ - movs r0, 0x2\n\ - add r0, sp\n\ - mov r8, r0\n\ - ldr r1, _080F7E88 @ =gSaveBlock1 + 0x2D94\n\ - adds r1, 0x18\n\ - adds r3, r1, 0\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x18\n\ + ldr r1, _080F7E84 @ =gUnknown_083E53C8\n\ + mov r0, sp\n\ + movs r2, 0x18\n\ + bl memcpy\n\ + movs r5, 0\n\ + movs r0, 0x2\n\ + add r0, sp\n\ + mov r8, r0\n\ + ldr r1, _080F7E88 @ =gSaveBlock1 + 0x2D94\n\ + adds r1, 0x18\n\ + adds r3, r1, 0\n\ _080F7DE4:\n\ - adds r0, r3, r5\n\ - strb r5, [r0]\n\ - adds r0, r5, 0x1\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - cmp r5, 0x7\n\ - bls _080F7DE4\n\ - movs r5, 0\n\ - ldr r2, _080F7E88 @ =gSaveBlock1 + 0x2D94\n\ - adds r2, 0x4\n\ - mov r9, r2\n\ - adds r6, r1, 0\n\ + adds r0, r3, r5\n\ + strb r5, [r0]\n\ + adds r0, r5, 0x1\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + cmp r5, 0x7\n\ + bls _080F7DE4\n\ + movs r5, 0\n\ + ldr r2, _080F7E88 @ =gSaveBlock1 + 0x2D94\n\ + adds r2, 0x4\n\ + mov r9, r2\n\ + adds r6, r1, 0\n\ _080F7DFC:\n\ - bl Random\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - adds r4, r5, 0x1\n\ - adds r1, r4, 0\n\ - bl __modsi3\n\ - lsls r0, 16\n\ - lsrs r1, r0, 16\n\ - adds r2, r6, r5\n\ - ldrb r7, [r2]\n\ - adds r1, r6, r1\n\ - ldrb r0, [r1]\n\ - strb r0, [r2]\n\ - strb r7, [r1]\n\ - lsls r4, 16\n\ - lsrs r5, r4, 16\n\ - cmp r5, 0x7\n\ - bls _080F7DFC\n\ - movs r3, 0\n\ - mov r10, r3\n\ - movs r5, 0\n\ + bl Random\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + adds r4, r5, 0x1\n\ + adds r1, r4, 0\n\ + bl __modsi3\n\ + lsls r0, 16\n\ + lsrs r1, r0, 16\n\ + adds r2, r6, r5\n\ + ldrb r7, [r2]\n\ + adds r1, r6, r1\n\ + ldrb r0, [r1]\n\ + strb r0, [r2]\n\ + strb r7, [r1]\n\ + lsls r4, 16\n\ + lsrs r5, r4, 16\n\ + cmp r5, 0x7\n\ + bls _080F7DFC\n\ + movs r3, 0\n\ + mov r10, r3\n\ + movs r5, 0\n\ _080F7E2A:\n\ - lsls r4, r5, 2\n\ - mov r1, sp\n\ - adds r0, r1, r4\n\ - ldrb r0, [r0]\n\ - bl sub_80EAE88\n\ - add r4, r8\n\ - strh r0, [r4]\n\ - add r0, r10\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - mov r10, r0\n\ - adds r0, r5, 0x1\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - cmp r5, 0x5\n\ - bls _080F7E2A\n\ - movs r0, 0\n\ - ldr r2, _080F7E88 @ =gSaveBlock1 + 0x2D94\n\ - strb r0, [r2, 0x2]\n\ - movs r7, 0\n\ - movs r5, 0\n\ + lsls r4, r5, 2\n\ + mov r1, sp\n\ + adds r0, r1, r4\n\ + ldrb r0, [r0]\n\ + bl sub_80EAE88\n\ + add r4, r8\n\ + strh r0, [r4]\n\ + add r0, r10\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + mov r10, r0\n\ + adds r0, r5, 0x1\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + cmp r5, 0x5\n\ + bls _080F7E2A\n\ + movs r0, 0\n\ + ldr r2, _080F7E88 @ =gSaveBlock1 + 0x2D94\n\ + strb r0, [r2, 0x2]\n\ + movs r7, 0\n\ + movs r5, 0\n\ _080F7E56:\n\ - bl Random\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - movs r1, 0xA\n\ - bl __umodsi3\n\ - lsls r0, 16\n\ - lsrs r1, r0, 16\n\ - cmp r1, 0x2\n\ - bhi _080F7E90\n\ - cmp r7, 0x7\n\ - bhi _080F7E90\n\ - lsls r0, r5, 1\n\ - add r0, r9\n\ - ldr r1, _080F7E8C @ =0x0000ffff\n\ - strh r1, [r0]\n\ - adds r0, r7, 0x1\n\ - lsls r0, 16\n\ - lsrs r7, r0, 16\n\ - adds r4, r5, 0x1\n\ - b _080F7EE2\n\ - .align 2, 0\n\ + bl Random\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0xA\n\ + bl __umodsi3\n\ + lsls r0, 16\n\ + lsrs r1, r0, 16\n\ + cmp r1, 0x2\n\ + bhi _080F7E90\n\ + cmp r7, 0x7\n\ + bhi _080F7E90\n\ + lsls r0, r5, 1\n\ + add r0, r9\n\ + ldr r1, _080F7E8C @ =0x0000ffff\n\ + strh r1, [r0]\n\ + adds r0, r7, 0x1\n\ + lsls r0, 16\n\ + lsrs r7, r0, 16\n\ + adds r4, r5, 0x1\n\ + b _080F7EE2\n\ + .align 2, 0\n\ _080F7E84: .4byte gUnknown_083E53C8\n\ _080F7E88: .4byte gSaveBlock1 + 0x2D94\n\ _080F7E8C: .4byte 0x0000ffff\n\ _080F7E90:\n\ - bl Random\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - mov r1, r10\n\ - bl __umodsi3\n\ - lsls r0, 16\n\ - lsrs r2, r0, 16\n\ - movs r1, 0\n\ - adds r4, r5, 0x1\n\ - lsls r6, r5, 1\n\ - cmp r5, 0x5\n\ - bhi _080F7ECC\n\ - mov r3, r8\n\ - ldrh r0, [r3]\n\ - b _080F7EC2\n\ + bl Random\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + mov r1, r10\n\ + bl __umodsi3\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + movs r1, 0\n\ + adds r4, r5, 0x1\n\ + lsls r6, r5, 1\n\ + cmp r5, 0x5\n\ + bhi _080F7ECC\n\ + mov r3, r8\n\ + ldrh r0, [r3]\n\ + b _080F7EC2\n\ _080F7EB2:\n\ - adds r0, r1, 0x1\n\ - lsls r0, 16\n\ - lsrs r1, r0, 16\n\ - cmp r5, 0x5\n\ - bhi _080F7ECC\n\ - lsls r0, r1, 2\n\ - adds r0, r3, r0\n\ - ldrh r0, [r0]\n\ + adds r0, r1, 0x1\n\ + lsls r0, 16\n\ + lsrs r1, r0, 16\n\ + cmp r5, 0x5\n\ + bhi _080F7ECC\n\ + lsls r0, r1, 2\n\ + adds r0, r3, r0\n\ + ldrh r0, [r0]\n\ _080F7EC2:\n\ - subs r0, r2, r0\n\ - lsls r0, 16\n\ - lsrs r2, r0, 16\n\ - cmp r0, 0\n\ - bgt _080F7EB2\n\ + subs r0, r2, r0\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + cmp r0, 0\n\ + bgt _080F7EB2\n\ _080F7ECC:\n\ - cmp r1, 0x6\n\ - bne _080F7ED2\n\ - movs r1, 0\n\ + cmp r1, 0x6\n\ + bne _080F7ED2\n\ + movs r1, 0\n\ _080F7ED2:\n\ - lsls r0, r1, 2\n\ - add r0, sp\n\ - ldrh r0, [r0]\n\ - bl sub_80EB784\n\ - mov r2, r9\n\ - adds r1, r2, r6\n\ - strh r0, [r1]\n\ + lsls r0, r1, 2\n\ + add r0, sp\n\ + ldrh r0, [r0]\n\ + bl sub_80EB784\n\ + mov r2, r9\n\ + adds r1, r2, r6\n\ + strh r0, [r1]\n\ _080F7EE2:\n\ - lsls r0, r4, 16\n\ - lsrs r5, r0, 16\n\ - cmp r5, 0x9\n\ - bls _080F7E56\n\ - add sp, 0x18\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\ + lsls r0, r4, 16\n\ + lsrs r5, r0, 16\n\ + cmp r5, 0x9\n\ + bls _080F7E56\n\ + add sp, 0x18\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\ .syntax divided\n"); } #endif @@ -987,41 +987,41 @@ struct Story static const struct Story sStorytellerStories[] = { - {0x32, 1, gTextStoryteller_Story1Title, gTextStoryteller_Story1Action, gTextStoryteller_Story1Text}, - {0x02, 1, gTextStoryteller_Story2Title, gTextStoryteller_Story2Action, gTextStoryteller_Story2Text}, - {0x03, 1, gTextStoryteller_Story3Title, gTextStoryteller_Story3Action, gTextStoryteller_Story3Text}, - {0x04, 1, gTextStoryteller_Story4Title, gTextStoryteller_Story4Action, gTextStoryteller_Story4Text}, - {0x06, 1, gTextStoryteller_Story5Title, gTextStoryteller_Story5Action, gTextStoryteller_Story5Text}, - {0x09, 1, gTextStoryteller_Story6Title, gTextStoryteller_Story6Action, gTextStoryteller_Story6Text}, - {0x0B, 1, gTextStoryteller_Story7Title, gTextStoryteller_Story7Action, gTextStoryteller_Story7Text}, - {0x0C, 1, gTextStoryteller_Story8Title, gTextStoryteller_Story8Action, gTextStoryteller_Story8Text}, - {0x0D, 1, gTextStoryteller_Story9Title, gTextStoryteller_Story9Action, gTextStoryteller_Story9Text}, - {0x0E, 1, gTextStoryteller_Story10Title, gTextStoryteller_Story10Action, gTextStoryteller_Story10Text}, - {0x0F, 1, gTextStoryteller_Story11Title, gTextStoryteller_Story11Action, gTextStoryteller_Story11Text}, - {0x10, 1, gTextStoryteller_Story12Title, gTextStoryteller_Story12Action, gTextStoryteller_Story12Text}, - {0x11, 1, gTextStoryteller_Story13Title, gTextStoryteller_Story13Action, gTextStoryteller_Story13Text}, - {0x12, 1, gTextStoryteller_Story14Title, gTextStoryteller_Story14Action, gTextStoryteller_Story14Text}, - {0x13, 1, gTextStoryteller_Story15Title, gTextStoryteller_Story15Action, gTextStoryteller_Story15Text}, - {0x14, 1, gTextStoryteller_Story16Title, gTextStoryteller_Story16Action, gTextStoryteller_Story16Text}, - {0x1A, 1, gTextStoryteller_Story17Title, gTextStoryteller_Story17Action, gTextStoryteller_Story17Text}, - {0x1B, 1, gTextStoryteller_Story18Title, gTextStoryteller_Story18Action, gTextStoryteller_Story18Text}, - {0x1C, 1, gTextStoryteller_Story19Title, gTextStoryteller_Story19Action, gTextStoryteller_Story19Text}, - {0x1D, 2, gTextStoryteller_Story20Title, gTextStoryteller_Story20Action, gTextStoryteller_Story20Text}, - {0x1E, 1, gTextStoryteller_Story21Title, gTextStoryteller_Story21Action, gTextStoryteller_Story21Text}, - {0x21, 1, gTextStoryteller_Story22Title, gTextStoryteller_Story22Action, gTextStoryteller_Story22Text}, - {0x24, 1, gTextStoryteller_Story23Title, gTextStoryteller_Story23Action, gTextStoryteller_Story23Text}, - {0x25, 1, gTextStoryteller_Story24Title, gTextStoryteller_Story24Action, gTextStoryteller_Story24Text}, - {0x26, 1, gTextStoryteller_Story25Title, gTextStoryteller_Story25Action, gTextStoryteller_Story25Text}, - {0x27, 1, gTextStoryteller_Story26Title, gTextStoryteller_Story26Action, gTextStoryteller_Story26Text}, - {0x28, 1, gTextStoryteller_Story27Title, gTextStoryteller_Story27Action, gTextStoryteller_Story27Text}, - {0x29, 1, gTextStoryteller_Story28Title, gTextStoryteller_Story28Action, gTextStoryteller_Story28Text}, - {0x2A, 1, gTextStoryteller_Story29Title, gTextStoryteller_Story29Action, gTextStoryteller_Story29Text}, - {0x2B, 1, gTextStoryteller_Story30Title, gTextStoryteller_Story30Action, gTextStoryteller_Story30Text}, - {0x2C, 1, gTextStoryteller_Story31Title, gTextStoryteller_Story31Action, gTextStoryteller_Story31Text}, - {0x2D, 1, gTextStoryteller_Story32Title, gTextStoryteller_Story32Action, gTextStoryteller_Story32Text}, - {0x2E, 1, gTextStoryteller_Story33Title, gTextStoryteller_Story33Action, gTextStoryteller_Story33Text}, - {0x2F, 1, gTextStoryteller_Story34Title, gTextStoryteller_Story34Action, gTextStoryteller_Story34Text}, - {0x30, 1, gTextStoryteller_Story35Title, gTextStoryteller_Story35Action, gTextStoryteller_Story35Text}, + {0x32, 1, gTextStoryteller_Story1Title, gTextStoryteller_Story1Action, gTextStoryteller_Story1Text}, + {0x02, 1, gTextStoryteller_Story2Title, gTextStoryteller_Story2Action, gTextStoryteller_Story2Text}, + {0x03, 1, gTextStoryteller_Story3Title, gTextStoryteller_Story3Action, gTextStoryteller_Story3Text}, + {0x04, 1, gTextStoryteller_Story4Title, gTextStoryteller_Story4Action, gTextStoryteller_Story4Text}, + {0x06, 1, gTextStoryteller_Story5Title, gTextStoryteller_Story5Action, gTextStoryteller_Story5Text}, + {0x09, 1, gTextStoryteller_Story6Title, gTextStoryteller_Story6Action, gTextStoryteller_Story6Text}, + {0x0B, 1, gTextStoryteller_Story7Title, gTextStoryteller_Story7Action, gTextStoryteller_Story7Text}, + {0x0C, 1, gTextStoryteller_Story8Title, gTextStoryteller_Story8Action, gTextStoryteller_Story8Text}, + {0x0D, 1, gTextStoryteller_Story9Title, gTextStoryteller_Story9Action, gTextStoryteller_Story9Text}, + {0x0E, 1, gTextStoryteller_Story10Title, gTextStoryteller_Story10Action, gTextStoryteller_Story10Text}, + {0x0F, 1, gTextStoryteller_Story11Title, gTextStoryteller_Story11Action, gTextStoryteller_Story11Text}, + {0x10, 1, gTextStoryteller_Story12Title, gTextStoryteller_Story12Action, gTextStoryteller_Story12Text}, + {0x11, 1, gTextStoryteller_Story13Title, gTextStoryteller_Story13Action, gTextStoryteller_Story13Text}, + {0x12, 1, gTextStoryteller_Story14Title, gTextStoryteller_Story14Action, gTextStoryteller_Story14Text}, + {0x13, 1, gTextStoryteller_Story15Title, gTextStoryteller_Story15Action, gTextStoryteller_Story15Text}, + {0x14, 1, gTextStoryteller_Story16Title, gTextStoryteller_Story16Action, gTextStoryteller_Story16Text}, + {0x1A, 1, gTextStoryteller_Story17Title, gTextStoryteller_Story17Action, gTextStoryteller_Story17Text}, + {0x1B, 1, gTextStoryteller_Story18Title, gTextStoryteller_Story18Action, gTextStoryteller_Story18Text}, + {0x1C, 1, gTextStoryteller_Story19Title, gTextStoryteller_Story19Action, gTextStoryteller_Story19Text}, + {0x1D, 2, gTextStoryteller_Story20Title, gTextStoryteller_Story20Action, gTextStoryteller_Story20Text}, + {0x1E, 1, gTextStoryteller_Story21Title, gTextStoryteller_Story21Action, gTextStoryteller_Story21Text}, + {0x21, 1, gTextStoryteller_Story22Title, gTextStoryteller_Story22Action, gTextStoryteller_Story22Text}, + {0x24, 1, gTextStoryteller_Story23Title, gTextStoryteller_Story23Action, gTextStoryteller_Story23Text}, + {0x25, 1, gTextStoryteller_Story24Title, gTextStoryteller_Story24Action, gTextStoryteller_Story24Text}, + {0x26, 1, gTextStoryteller_Story25Title, gTextStoryteller_Story25Action, gTextStoryteller_Story25Text}, + {0x27, 1, gTextStoryteller_Story26Title, gTextStoryteller_Story26Action, gTextStoryteller_Story26Text}, + {0x28, 1, gTextStoryteller_Story27Title, gTextStoryteller_Story27Action, gTextStoryteller_Story27Text}, + {0x29, 1, gTextStoryteller_Story28Title, gTextStoryteller_Story28Action, gTextStoryteller_Story28Text}, + {0x2A, 1, gTextStoryteller_Story29Title, gTextStoryteller_Story29Action, gTextStoryteller_Story29Text}, + {0x2B, 1, gTextStoryteller_Story30Title, gTextStoryteller_Story30Action, gTextStoryteller_Story30Text}, + {0x2C, 1, gTextStoryteller_Story31Title, gTextStoryteller_Story31Action, gTextStoryteller_Story31Text}, + {0x2D, 1, gTextStoryteller_Story32Title, gTextStoryteller_Story32Action, gTextStoryteller_Story32Text}, + {0x2E, 1, gTextStoryteller_Story33Title, gTextStoryteller_Story33Action, gTextStoryteller_Story33Text}, + {0x2F, 1, gTextStoryteller_Story34Title, gTextStoryteller_Story34Action, gTextStoryteller_Story34Text}, + {0x30, 1, gTextStoryteller_Story35Title, gTextStoryteller_Story35Action, gTextStoryteller_Story35Text}, {0x31, 1, gTextStoryteller_Story36Title, gTextStoryteller_Story36Action, gTextStoryteller_Story36Text}, }; -- cgit v1.2.3 From 0e382fbe2c5ed74708235737746420ab88a1e78f Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 29 Aug 2017 23:18:35 +0200 Subject: decompile pokemon_menu --- asm/pokemon_menu.s | 3143 ------------------------------------------ common_syms/pokemon_menu.txt | 2 + data/pokemon_menu.s | 82 -- include/braille_puzzles.h | 2 + include/data2.h | 2 +- include/item_use.h | 1 + include/menu.h | 2 +- include/party_menu.h | 45 +- include/pokemon_menu.h | 55 +- ld_script.txt | 3 +- src/battle_party_menu.c | 9 +- src/choose_party.c | 5 +- src/party_menu.c | 11 - src/pokemon_menu.c | 1151 +++++++++++++++- sym_common.txt | 9 +- 15 files changed, 1205 insertions(+), 3317 deletions(-) delete mode 100644 asm/pokemon_menu.s create mode 100644 common_syms/pokemon_menu.txt delete mode 100644 data/pokemon_menu.s diff --git a/asm/pokemon_menu.s b/asm/pokemon_menu.s deleted file mode 100644 index 28436e446..000000000 --- a/asm/pokemon_menu.s +++ /dev/null @@ -1,3143 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - - - - - - thumb_func_start sub_8089CD4 -sub_8089CD4: @ 8089CD4 - push {r4,r5,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _08089D00 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _08089D84 - adds r0, r4, 0 - bl sub_806BD80 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - beq _08089D04 - cmp r0, 0x2 - beq _08089D60 - b _08089D84 - .align 2, 0 -_08089D00: .4byte gPaletteFade -_08089D04: - movs r0, 0x5 - bl PlaySE - adds r0, r4, 0 - bl sub_806CA38 - ldr r1, _08089D48 @ =gLastFieldPokeMenuOpened - strb r0, [r1] - ldrb r1, [r1] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08089D4C @ =gPlayerParty - adds r0, r1 - ldr r1, _08089D50 @ =gStringVar1 - bl GetMonNickname - bl sub_8089A8C - ldr r0, _08089D54 @ =sPokeMenuCursorPos - strb r5, [r0] - movs r0, 0 - bl sub_8089C7C - ldr r1, _08089D58 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _08089D5C @ =sub_8089D94 - str r1, [r0] - adds r0, r4, 0 - bl sub_808B5B4 - b _08089D84 - .align 2, 0 -_08089D48: .4byte gLastFieldPokeMenuOpened -_08089D4C: .4byte gPlayerParty -_08089D50: .4byte gStringVar1 -_08089D54: .4byte sPokeMenuCursorPos -_08089D58: .4byte gTasks -_08089D5C: .4byte sub_8089D94 -_08089D60: - movs r0, 0x5 - bl PlaySE - movs r0, 0x1 - negs r0, r0 - str r5, [sp] - movs r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r1, _08089D8C @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _08089D90 @ =sub_8089E4C - str r1, [r0] -_08089D84: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08089D8C: .4byte gTasks -_08089D90: .4byte sub_8089E4C - thumb_func_end sub_8089CD4 - - thumb_func_start sub_8089D94 -sub_8089D94: @ 8089D94 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r5, r4, 0 - ldr r0, _08089DC8 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08089E44 - ldr r2, _08089DCC @ =gMain - ldrh r0, [r2, 0x30] - movs r1, 0xF0 - ands r1, r0 - cmp r1, 0x40 - bne _08089DD4 - movs r0, 0x5 - bl PlaySE - movs r0, 0x1 - negs r0, r0 - bl MoveMenuCursor - ldr r1, _08089DD0 @ =sPokeMenuCursorPos - strb r0, [r1] - b _08089E1A - .align 2, 0 -_08089DC8: .4byte gPaletteFade -_08089DCC: .4byte gMain -_08089DD0: .4byte sPokeMenuCursorPos -_08089DD4: - cmp r1, 0x80 - bne _08089DF0 - movs r0, 0x5 - bl PlaySE - movs r0, 0x1 - bl MoveMenuCursor - ldr r1, _08089DEC @ =sPokeMenuCursorPos - strb r0, [r1] - b _08089E1A - .align 2, 0 -_08089DEC: .4byte sPokeMenuCursorPos -_08089DF0: - ldrh r1, [r2, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08089E30 - movs r0, 0x5 - bl PlaySE - ldr r1, _08089E24 @ =sPokemonMenuActions - ldr r2, _08089E28 @ =sPokeMenuOptionsIDs - ldr r0, _08089E2C @ =sPokeMenuCursorPos - ldrb r0, [r0] - adds r0, r2 - ldrb r0, [r0] - lsls r0, 3 - adds r1, 0x4 - adds r0, r1 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 -_08089E1A: - adds r0, r4, 0 - bl sub_808B5B4 - b _08089E44 - .align 2, 0 -_08089E24: .4byte sPokemonMenuActions -_08089E28: .4byte sPokeMenuOptionsIDs -_08089E2C: .4byte sPokeMenuCursorPos -_08089E30: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08089E44 - adds r0, r5, 0 - bl PokemonMenu_Cancel - adds r0, r5, 0 - bl sub_808B5B4 -_08089E44: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8089D94 - - thumb_func_start sub_8089E4C -sub_8089E4C: @ 8089E4C - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _08089E78 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - bne _08089E72 - ldr r0, _08089E7C @ =gLastFieldPokeMenuOpened - strb r1, [r0] - ldr r0, _08089E80 @ =sub_805469C - bl SetMainCallback2 - adds r0, r4, 0 - bl DestroyTask -_08089E72: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08089E78: .4byte gPaletteFade -_08089E7C: .4byte gLastFieldPokeMenuOpened -_08089E80: .4byte sub_805469C - thumb_func_end sub_8089E4C - - thumb_func_start sub_8089E84 -sub_8089E84: @ 8089E84 - push {lr} - ldr r0, _08089EAC @ =gLastFieldPokeMenuOpened - ldrb r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08089EB0 @ =gPlayerParty - adds r0, r1 - ldr r1, _08089EB4 @ =gStringVar1 - bl GetMonNickname - bl sub_8089A8C - ldr r1, _08089EB8 @ =sPokeMenuCursorPos - movs r0, 0 - strb r0, [r1] - movs r0, 0 - bl sub_8089C7C - pop {r0} - bx r0 - .align 2, 0 -_08089EAC: .4byte gLastFieldPokeMenuOpened -_08089EB0: .4byte gPlayerParty -_08089EB4: .4byte gStringVar1 -_08089EB8: .4byte sPokeMenuCursorPos - thumb_func_end sub_8089E84 - - thumb_func_start sub_8089EBC -sub_8089EBC: @ 8089EBC - push {r4,r5,lr} - ldr r4, _08089EC4 @ =0x0201b260 - ldr r5, _08089EC8 @ =gUnknown_020384F0 - b _08089ED8 - .align 2, 0 -_08089EC4: .4byte 0x0201b260 -_08089EC8: .4byte gUnknown_020384F0 -_08089ECC: - bl sub_80F9344 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08089F04 -_08089ED8: - bl sub_806B124 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08089ECC - ldrb r0, [r4] - ldrb r1, [r5] - bl sub_806C994 - ldrb r0, [r4] - movs r1, 0 - bl sub_806BF74 - ldr r1, _08089F0C @ =gLastFieldPokeMenuOpened - ldrb r0, [r5] - strb r0, [r1] - bl sub_8089E84 - ldr r0, _08089F10 @ =sub_806AEDC - bl SetMainCallback2 -_08089F04: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08089F0C: .4byte gLastFieldPokeMenuOpened -_08089F10: .4byte sub_806AEDC - thumb_func_end sub_8089EBC - - thumb_func_start sub_8089F14 -sub_8089F14: @ 8089F14 - push {lr} - ldr r2, _08089F38 @ =gPaletteFade - ldrb r0, [r2, 0x8] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2, 0x8] - ldr r2, _08089F3C @ =sub_8089D94 - movs r0, 0 - movs r1, 0xFF - movs r3, 0x5 - bl sub_806AF4C - ldr r0, _08089F40 @ =sub_8089EBC - bl SetMainCallback2 - pop {r0} - bx r0 - .align 2, 0 -_08089F38: .4byte gPaletteFade -_08089F3C: .4byte sub_8089D94 -_08089F40: .4byte sub_8089EBC - thumb_func_end sub_8089F14 - - thumb_func_start sub_8089F44 -sub_8089F44: @ 8089F44 - push {r4,r5,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r3, r0, 24 - ldr r0, _08089FAC @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _08089FA2 - ldr r2, _08089FB0 @ =gSprites - ldr r1, _08089FB4 @ =gTasks - lsls r0, r3, 2 - adds r0, r3 - lsls r0, 3 - adds r0, r1 - ldrh r1, [r0, 0xE] - lsls r1, 16 - asrs r1, 24 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r4, [r0, 0x2E] - lsls r4, 24 - lsrs r4, 24 - adds r0, r3, 0 - bl DestroyTask - ldr r0, _08089FB8 @ =0x0201b000 - ldr r1, _08089FBC @ =0x00000262 - adds r0, r1 - movs r1, 0x1 - strb r1, [r0] - ldr r0, _08089FC0 @ =gPlayerParty - ldr r1, _08089FC4 @ =gPlayerPartyCount - ldrb r2, [r1] - subs r2, 0x1 - lsls r2, 24 - lsrs r2, 24 - ldr r3, _08089FC8 @ =sub_8089F14 - str r5, [sp] - adds r1, r4, 0 - bl ShowPokemonSummaryScreen -_08089FA2: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08089FAC: .4byte gPaletteFade -_08089FB0: .4byte gSprites -_08089FB4: .4byte gTasks -_08089FB8: .4byte 0x0201b000 -_08089FBC: .4byte 0x00000262 -_08089FC0: .4byte gPlayerParty -_08089FC4: .4byte gPlayerPartyCount -_08089FC8: .4byte sub_8089F14 - thumb_func_end sub_8089F44 - - thumb_func_start PokemonMenu_Summary -PokemonMenu_Summary: @ 8089FCC - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r1, _08089FFC @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0808A000 @ =sub_8089F44 - str r1, [r0] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08089FFC: .4byte gTasks -_0808A000: .4byte sub_8089F44 - thumb_func_end PokemonMenu_Summary - - thumb_func_start sub_808A004 -sub_808A004: @ 808A004 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0808A024 @ =sub_806CA60 - ldr r2, _0808A028 @ =sub_8089CD4 - bl SetTaskFuncWithFollowupFunc - movs r0, 0x13 - movs r1, 0 - movs r2, 0x1D - movs r3, 0x13 - bl MenuZeroFillWindowRect - pop {r0} - bx r0 - .align 2, 0 -_0808A024: .4byte sub_806CA60 -_0808A028: .4byte sub_8089CD4 - thumb_func_end sub_808A004 - - thumb_func_start PokemonMenu_Switch -PokemonMenu_Switch: @ 808A02C - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl HandleDestroyMenuCursors - ldr r0, _0808A054 @ =0x02001000 - ldr r1, _0808A058 @ =sub_806CD5C - str r1, [r0, 0xC] - ldr r1, _0808A05C @ =0x0001a272 - adds r0, r1 - movs r1, 0x1 - strh r1, [r0] - adds r0, r4, 0 - bl sub_808A004 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808A054: .4byte 0x02001000 -_0808A058: .4byte sub_806CD5C -_0808A05C: .4byte 0x0001a272 - thumb_func_end PokemonMenu_Switch - - thumb_func_start sub_808A060 -sub_808A060: @ 808A060 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _0808A0D0 @ =gMain - ldrh r0, [r0, 0x2E] - cmp r0, 0x40 - bne _0808A086 - ldr r4, _0808A0D4 @ =sPokeMenuCursorPos - ldrb r0, [r4] - cmp r0, 0 - beq _0808A086 - movs r0, 0x1 - negs r0, r0 - bl MoveMenuCursor - strb r0, [r4] - movs r0, 0x5 - bl PlaySE -_0808A086: - ldr r0, _0808A0D0 @ =gMain - ldrh r0, [r0, 0x2E] - cmp r0, 0x80 - bne _0808A0A4 - ldr r4, _0808A0D4 @ =sPokeMenuCursorPos - ldrb r0, [r4] - cmp r0, 0x2 - beq _0808A0A4 - movs r0, 0x1 - bl MoveMenuCursor - strb r0, [r4] - movs r0, 0x5 - bl PlaySE -_0808A0A4: - ldr r0, _0808A0D0 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0808A0E0 - movs r0, 0x5 - bl PlaySE - ldr r1, _0808A0D8 @ =gUnknown_0839F578 - ldr r2, _0808A0DC @ =sPokemonMenuActions - ldr r0, _0808A0D4 @ =sPokeMenuCursorPos - ldrb r3, [r0] - movs r0, 0 - bl PartyMenuGetPopupMenuFunc - adds r1, r0, 0 - adds r0, r5, 0 - bl _call_via_r1 - b _0808A0F6 - .align 2, 0 -_0808A0D0: .4byte gMain -_0808A0D4: .4byte sPokeMenuCursorPos -_0808A0D8: .4byte gUnknown_0839F578 -_0808A0DC: .4byte sPokemonMenuActions -_0808A0E0: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0808A0F6 - ldr r1, _0808A0FC @ =gUnknown_0839F578 - movs r0, 0 - bl sub_806E7D0 - adds r0, r5, 0 - bl PokemonMenu_CancelSubmenu -_0808A0F6: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0808A0FC: .4byte gUnknown_0839F578 - thumb_func_end sub_808A060 - - thumb_func_start sub_808A100 -sub_808A100: @ 808A100 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r1, _0808A130 @ =gUnknown_0839F578 - ldr r2, _0808A134 @ =sPokemonMenuActions - movs r0, 0 - movs r3, 0 - bl sub_806E750 - movs r0, 0xD - movs r1, 0x2 - bl sub_806D538 - ldr r1, _0808A138 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0808A13C @ =sub_808A060 - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808A130: .4byte gUnknown_0839F578 -_0808A134: .4byte sPokemonMenuActions -_0808A138: .4byte gTasks -_0808A13C: .4byte sub_808A060 - thumb_func_end sub_808A100 - - thumb_func_start PokemonMenu_Item -PokemonMenu_Item: @ 808A140 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl HandleDestroyMenuCursors - ldr r1, _0808A174 @ =sPokeMenuCursorPos - movs r0, 0 - strb r0, [r1] - movs r0, 0x13 - movs r1, 0 - movs r2, 0x1D - movs r3, 0x13 - bl MenuZeroFillWindowRect - ldr r1, _0808A178 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0808A17C @ =sub_808A100 - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808A174: .4byte sPokeMenuCursorPos -_0808A178: .4byte gTasks -_0808A17C: .4byte sub_808A100 - thumb_func_end PokemonMenu_Item - - thumb_func_start sub_808A180 -sub_808A180: @ 808A180 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _0808A1D0 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0808A1CA - adds r0, r5, 0 - bl sub_806CA38 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x64 - muls r0, r1 - ldr r1, _0808A1D4 @ =gPlayerParty - adds r0, r1 - movs r1, 0x40 - bl GetMonData - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r5, 0 - bl DestroyTask - lsls r1, r4, 3 - adds r1, r4 - lsls r1, 2 - ldr r0, _0808A1D8 @ =gSaveBlock1 + 0x2B4C - adds r1, r0 - ldr r2, _0808A1DC @ =sub_808A520 - movs r0, 0x4 - movs r3, 0x3 - bl sub_80E62A0 -_0808A1CA: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0808A1D0: .4byte gPaletteFade -_0808A1D4: .4byte gPlayerParty -_0808A1D8: .4byte gSaveBlock1 + 0x2B4C -_0808A1DC: .4byte sub_808A520 - thumb_func_end sub_808A180 - - thumb_func_start sub_808A1E0 -sub_808A1E0: @ 808A1E0 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0808A21C @ =gUnknown_0202E8F6 - ldrb r0, [r0] - cmp r0, 0x1 - beq _0808A216 - adds r0, r4, 0 - bl sub_806CA38 - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl SetHeldItemIconVisibility - movs r0, 0 - movs r1, 0 - bl sub_806D538 - ldr r1, _0808A220 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0808A224 @ =sub_8089CD4 - str r1, [r0] -_0808A216: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808A21C: .4byte gUnknown_0202E8F6 -_0808A220: .4byte gTasks -_0808A224: .4byte sub_8089CD4 - thumb_func_end sub_808A1E0 - - thumb_func_start sub_808A228 -sub_808A228: @ 808A228 - push {r4,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0808A268 @ =gScriptItemId - ldrh r0, [r0] - bl ItemIsMail - lsls r0, 24 - cmp r0, 0 - beq _0808A278 - ldr r0, _0808A26C @ =gUnknown_0202E8F4 - ldrb r0, [r0] - cmp r0, 0 - beq _0808A278 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r1, _0808A270 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0808A274 @ =sub_808A180 - str r1, [r0] - b _0808A29A - .align 2, 0 -_0808A268: .4byte gScriptItemId -_0808A26C: .4byte gUnknown_0202E8F4 -_0808A270: .4byte gTasks -_0808A274: .4byte sub_808A180 -_0808A278: - movs r0, 0 - movs r1, 0 - movs r2, 0x1D - movs r3, 0x13 - bl MenuZeroFillWindowRect - movs r0, 0 - movs r1, 0 - bl sub_806D538 - ldr r0, _0808A2A4 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _0808A2A8 @ =sub_8089CD4 - str r0, [r1] -_0808A29A: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808A2A4: .4byte gTasks -_0808A2A8: .4byte sub_8089CD4 - thumb_func_end sub_808A228 - - thumb_func_start sub_808A2AC -sub_808A2AC: @ 808A2AC - push {lr} - lsls r0, 24 - lsrs r3, r0, 24 - ldr r0, _0808A2D0 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0808A2CA - ldr r0, _0808A2D4 @ =gScriptItemId - ldrh r1, [r0] - ldr r2, _0808A2D8 @ =sub_808A228 - adds r0, r3, 0 - bl PartyMenuTryGiveMonHeldItem -_0808A2CA: - pop {r0} - bx r0 - .align 2, 0 -_0808A2D0: .4byte gPaletteFade -_0808A2D4: .4byte gScriptItemId -_0808A2D8: .4byte sub_808A228 - thumb_func_end sub_808A2AC - - thumb_func_start sub_808A2DC -sub_808A2DC: @ 808A2DC - push {r4,r5,lr} - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - adds r0, r5, 0 - bl sub_806CA38 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x64 - muls r0, r1 - ldr r1, _0808A324 @ =gPlayerParty - adds r0, r1 - movs r1, 0x40 - bl GetMonData - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r5, 0 - bl DestroyTask - lsls r1, r4, 3 - adds r1, r4 - lsls r1, 2 - ldr r0, _0808A328 @ =gSaveBlock1 + 0x2B4C - adds r1, r0 - ldr r2, _0808A32C @ =sub_808A520 - movs r0, 0x4 - movs r3, 0x3 - bl sub_80E62A0 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0808A324: .4byte gPlayerParty -_0808A328: .4byte gSaveBlock1 + 0x2B4C -_0808A32C: .4byte sub_808A520 - thumb_func_end sub_808A2DC - - thumb_func_start sub_808A330 -sub_808A330: @ 808A330 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0808A344 @ =gScriptItemId - ldrh r1, [r1] - ldr r2, _0808A348 @ =sub_808A2DC - bl PartyMenuTryGiveMonHeldItem - pop {r0} - bx r0 - .align 2, 0 -_0808A344: .4byte gScriptItemId -_0808A348: .4byte sub_808A2DC - thumb_func_end sub_808A330 - - thumb_func_start sub_808A34C -sub_808A34C: @ 808A34C - push {lr} - bl RunTasks - pop {r0} - bx r0 - thumb_func_end sub_808A34C - - thumb_func_start sub_808A358 -sub_808A358: @ 808A358 - push {r4,lr} - ldr r4, _0808A360 @ =0x0201b260 - b _0808A370 - .align 2, 0 -_0808A360: .4byte 0x0201b260 -_0808A364: - bl sub_80F9344 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0808A394 -_0808A370: - bl sub_806B124 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0808A364 - ldrb r0, [r4] - ldr r1, _0808A39C @ =gLastFieldPokeMenuOpened - ldrb r1, [r1] - bl sub_806C994 - ldrb r0, [r4] - movs r1, 0 - bl sub_806BF74 - ldr r0, _0808A3A0 @ =sub_806AEDC - bl SetMainCallback2 -_0808A394: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808A39C: .4byte gLastFieldPokeMenuOpened -_0808A3A0: .4byte sub_806AEDC - thumb_func_end sub_808A358 - - thumb_func_start sub_808A3A4 -sub_808A3A4: @ 808A3A4 - push {r4,r5,lr} - ldr r4, _0808A3D8 @ =0x0201b260 - adds r5, r4, 0x2 -_0808A3AA: - bl sub_806B124 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0808A3E4 - ldrb r0, [r4] - ldr r1, _0808A3DC @ =gLastFieldPokeMenuOpened - ldrb r1, [r1] - bl sub_806C994 - ldrb r0, [r4] - movs r1, 0 - bl sub_806BF74 - movs r0, 0x3 - strb r0, [r5] - bl sub_8089E84 - ldr r0, _0808A3E0 @ =sub_806AEDC - bl SetMainCallback2 - b _0808A3F0 - .align 2, 0 -_0808A3D8: .4byte 0x0201b260 -_0808A3DC: .4byte gLastFieldPokeMenuOpened -_0808A3E0: .4byte sub_806AEDC -_0808A3E4: - bl sub_80F9344 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0808A3AA -_0808A3F0: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_808A3A4 - - thumb_func_start sub_808A3F8 -sub_808A3F8: @ 808A3F8 - push {r4,lr} - ldr r0, _0808A460 @ =gScriptItemId - ldrh r0, [r0] - bl ItemIsMail - lsls r0, 24 - cmp r0, 0 - beq _0808A47E - ldr r0, _0808A464 @ =sub_808A330 - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r4, r0, 24 - ldr r2, _0808A468 @ =gPaletteFade - ldrb r0, [r2, 0x8] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2, 0x8] - adds r0, r4, 0 - movs r1, 0 - bl sub_806BD58 - ldr r0, _0808A46C @ =gLastFieldPokeMenuOpened - ldrb r1, [r0] - adds r0, r4, 0 - bl sub_806C994 - adds r0, r4, 0 - movs r1, 0 - bl sub_806BF74 - adds r0, r4, 0 - bl sub_806CA38 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x64 - muls r0, r1 - ldr r1, _0808A470 @ =gPlayerParty - adds r0, r1 - movs r1, 0xC - bl GetMonData - lsls r0, 24 - cmp r0, 0 - bne _0808A478 - ldr r0, _0808A474 @ =sub_808A34C - bl SetMainCallback2 - b _0808A4C6 - .align 2, 0 -_0808A460: .4byte gScriptItemId -_0808A464: .4byte sub_808A330 -_0808A468: .4byte gPaletteFade -_0808A46C: .4byte gLastFieldPokeMenuOpened -_0808A470: .4byte gPlayerParty -_0808A474: .4byte sub_808A34C -_0808A478: - adds r0, r4, 0 - bl DestroyTask -_0808A47E: - ldr r2, _0808A4A4 @ =gPaletteFade - ldrb r0, [r2, 0x8] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2, 0x8] - ldr r0, _0808A4A8 @ =gScriptItemId - ldrh r0, [r0] - cmp r0, 0 - beq _0808A4B4 - ldr r2, _0808A4AC @ =sub_808A2AC - movs r0, 0 - movs r1, 0xFF - movs r3, 0xFF - bl sub_806AF4C - ldr r0, _0808A4B0 @ =sub_808A358 - bl SetMainCallback2 - b _0808A4C6 - .align 2, 0 -_0808A4A4: .4byte gPaletteFade -_0808A4A8: .4byte gScriptItemId -_0808A4AC: .4byte sub_808A2AC -_0808A4B0: .4byte sub_808A358 -_0808A4B4: - ldr r2, _0808A4CC @ =sub_8089D94 - movs r0, 0 - movs r1, 0xFF - movs r3, 0x5 - bl sub_806AF4C - ldr r0, _0808A4D0 @ =sub_808A3A4 - bl SetMainCallback2 -_0808A4C6: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808A4CC: .4byte sub_8089D94 -_0808A4D0: .4byte sub_808A3A4 - thumb_func_end sub_808A3F8 - - thumb_func_start sub_808A4D4 -sub_808A4D4: @ 808A4D4 - push {r4,lr} - ldr r4, _0808A4DC @ =0x0201b260 - b _0808A4EC - .align 2, 0 -_0808A4DC: .4byte 0x0201b260 -_0808A4E0: - bl sub_80F9344 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0808A510 -_0808A4EC: - bl sub_806B124 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0808A4E0 - ldrb r0, [r4] - ldr r1, _0808A518 @ =gLastFieldPokeMenuOpened - ldrb r1, [r1] - bl sub_806C994 - ldrb r0, [r4] - movs r1, 0 - bl sub_806BF74 - ldr r0, _0808A51C @ =sub_806AEDC - bl SetMainCallback2 -_0808A510: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808A518: .4byte gLastFieldPokeMenuOpened -_0808A51C: .4byte sub_806AEDC - thumb_func_end sub_808A4D4 - - thumb_func_start sub_808A520 -sub_808A520: @ 808A520 - push {r4-r7,lr} - ldr r2, _0808A584 @ =gPaletteFade - ldrb r0, [r2, 0x8] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2, 0x8] - ldr r0, _0808A588 @ =gScriptResult - ldrh r0, [r0] - cmp r0, 0 - bne _0808A59C - ldr r7, _0808A58C @ =gUnknown_0202E8F8 - ldrh r0, [r7] - cmp r0, 0 - beq _0808A542 - movs r1, 0x1 - bl RemoveBagItem -_0808A542: - ldr r6, _0808A590 @ =gLastFieldPokeMenuOpened - ldrb r0, [r6] - movs r5, 0x64 - muls r0, r5 - ldr r4, _0808A594 @ =gPlayerParty - adds r0, r4 - movs r1, 0xC - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1 - bl AddBagItem - ldrb r0, [r6] - muls r0, r5 - adds r0, r4 - bl TakeMailFromMon - ldrb r0, [r6] - muls r0, r5 - adds r0, r4 - movs r1, 0xC - adds r2, r7, 0 - bl SetMonData - ldr r2, _0808A598 @ =sub_8089CD4 - movs r0, 0 - movs r1, 0xFF - movs r3, 0 - bl sub_806AF4C - b _0808A5A8 - .align 2, 0 -_0808A584: .4byte gPaletteFade -_0808A588: .4byte gScriptResult -_0808A58C: .4byte gUnknown_0202E8F8 -_0808A590: .4byte gLastFieldPokeMenuOpened -_0808A594: .4byte gPlayerParty -_0808A598: .4byte sub_8089CD4 -_0808A59C: - ldr r2, _0808A5B4 @ =sub_808A5BC - movs r0, 0 - movs r1, 0xFF - movs r3, 0xFF - bl sub_806AF4C -_0808A5A8: - ldr r0, _0808A5B8 @ =sub_808A4D4 - bl SetMainCallback2 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0808A5B4: .4byte sub_808A5BC -_0808A5B8: .4byte sub_808A4D4 - thumb_func_end sub_808A520 - - thumb_func_start sub_808A5BC -sub_808A5BC: @ 808A5BC - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0808A5F0 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0808A5EA - ldr r0, _0808A5F4 @ =gLastFieldPokeMenuOpened - ldrb r0, [r0] - ldr r1, _0808A5F8 @ =gScriptItemId - ldrh r1, [r1] - movs r2, 0 - bl DisplayGiveHeldItemMessage - ldr r1, _0808A5FC @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0808A600 @ =sub_808A1E0 - str r1, [r0] -_0808A5EA: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808A5F0: .4byte gPaletteFade -_0808A5F4: .4byte gLastFieldPokeMenuOpened -_0808A5F8: .4byte gScriptItemId -_0808A5FC: .4byte gTasks -_0808A600: .4byte sub_808A1E0 - thumb_func_end sub_808A5BC - - thumb_func_start sub_808A604 -sub_808A604: @ 808A604 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0808A628 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0808A622 - ldr r0, _0808A62C @ =sub_80A61D0 - bl SetMainCallback2 - adds r0, r4, 0 - bl DestroyTask -_0808A622: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808A628: .4byte gPaletteFade -_0808A62C: .4byte sub_80A61D0 - thumb_func_end sub_808A604 - - thumb_func_start PokemonMenu_GiveItem -PokemonMenu_GiveItem: @ 808A630 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - bl sub_806CA38 - ldr r1, _0808A66C @ =gUnknown_0202E8F5 - strb r0, [r1] - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r1, _0808A670 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0808A674 @ =sub_808A604 - str r1, [r0] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808A66C: .4byte gUnknown_0202E8F5 -_0808A670: .4byte gTasks -_0808A674: .4byte sub_808A604 - thumb_func_end PokemonMenu_GiveItem - - thumb_func_start sub_808A678 -sub_808A678: @ 808A678 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl sub_808A8D4 - pop {r0} - bx r0 - thumb_func_end sub_808A678 - - thumb_func_start PokemonMenu_TakeItem -PokemonMenu_TakeItem: @ 808A688 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl HandleDestroyMenuCursors - movs r0, 0x13 - movs r1, 0 - movs r2, 0x1D - movs r3, 0x13 - bl MenuZeroFillWindowRect - bl sub_806D5A4 - ldr r1, _0808A6B4 @ =sub_808A678 - adds r0, r4, 0 - bl PartyMenuTryGiveMonHeldItem_806ECE8 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808A6B4: .4byte sub_808A678 - thumb_func_end PokemonMenu_TakeItem - - thumb_func_start PokemonMenu_TakeMail -PokemonMenu_TakeMail: @ 808A6B8 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl HandleDestroyMenuCursors - movs r0, 0x13 - movs r1, 0 - movs r2, 0x1D - movs r3, 0x13 - bl MenuZeroFillWindowRect - bl sub_806D5A4 - ldr r1, _0808A6E4 @ =sub_808A678 - adds r0, r4, 0 - bl DoTakeMail - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808A6E4: .4byte sub_808A678 - thumb_func_end PokemonMenu_TakeMail - - thumb_func_start PokemonMenu_Mail -PokemonMenu_Mail: @ 808A6E8 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl HandleDestroyMenuCursors - ldr r1, _0808A728 @ =sPokeMenuCursorPos - movs r0, 0 - strb r0, [r1] - movs r0, 0x13 - movs r1, 0 - movs r2, 0x1D - movs r3, 0x13 - bl MenuZeroFillWindowRect - ldr r1, _0808A72C @ =gUnknown_0839F584 - ldr r2, _0808A730 @ =sPokemonMenuActions - movs r0, 0 - movs r3, 0 - bl sub_806E750 - ldr r1, _0808A734 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0808A738 @ =sub_808A73C - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808A728: .4byte sPokeMenuCursorPos -_0808A72C: .4byte gUnknown_0839F584 -_0808A730: .4byte sPokemonMenuActions -_0808A734: .4byte gTasks -_0808A738: .4byte sub_808A73C - thumb_func_end PokemonMenu_Mail - - thumb_func_start sub_808A73C -sub_808A73C: @ 808A73C - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _0808A764 @ =gMain - ldrh r0, [r0, 0x30] - cmp r0, 0x40 - bne _0808A77A - movs r0, 0x5 - bl PlaySE - ldr r4, _0808A768 @ =sPokeMenuCursorPos - ldrb r0, [r4] - cmp r0, 0 - bne _0808A770 - ldr r0, _0808A76C @ =gUnknown_0839F584 - ldrb r0, [r0] - subs r0, 0x1 - lsls r0, 24 - asrs r0, 24 - b _0808A774 - .align 2, 0 -_0808A764: .4byte gMain -_0808A768: .4byte sPokeMenuCursorPos -_0808A76C: .4byte gUnknown_0839F584 -_0808A770: - movs r0, 0x1 - negs r0, r0 -_0808A774: - bl MoveMenuCursor - strb r0, [r4] -_0808A77A: - ldr r0, _0808A7A0 @ =gMain - ldrh r0, [r0, 0x30] - cmp r0, 0x80 - bne _0808A7B4 - movs r0, 0x5 - bl PlaySE - ldr r4, _0808A7A4 @ =sPokeMenuCursorPos - ldrb r0, [r4] - ldr r1, _0808A7A8 @ =gUnknown_0839F584 - ldrb r2, [r1] - subs r1, r2, 0x1 - cmp r0, r1 - bne _0808A7AC - movs r0, 0x1 - subs r0, r2 - lsls r0, 24 - asrs r0, 24 - b _0808A7AE - .align 2, 0 -_0808A7A0: .4byte gMain -_0808A7A4: .4byte sPokeMenuCursorPos -_0808A7A8: .4byte gUnknown_0839F584 -_0808A7AC: - movs r0, 0x1 -_0808A7AE: - bl MoveMenuCursor - strb r0, [r4] -_0808A7B4: - ldr r0, _0808A7E0 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0808A7F0 - movs r0, 0x5 - bl PlaySE - ldr r1, _0808A7E4 @ =gUnknown_0839F584 - ldr r2, _0808A7E8 @ =sPokemonMenuActions - ldr r0, _0808A7EC @ =sPokeMenuCursorPos - ldrb r3, [r0] - movs r0, 0 - bl PartyMenuGetPopupMenuFunc - adds r1, r0, 0 - adds r0, r5, 0 - bl _call_via_r1 - b _0808A806 - .align 2, 0 -_0808A7E0: .4byte gMain -_0808A7E4: .4byte gUnknown_0839F584 -_0808A7E8: .4byte sPokemonMenuActions -_0808A7EC: .4byte sPokeMenuCursorPos -_0808A7F0: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0808A806 - ldr r1, _0808A80C @ =gUnknown_0839F584 - movs r0, 0 - bl sub_806E7D0 - adds r0, r5, 0 - bl PokemonMenu_Cancel -_0808A806: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0808A80C: .4byte gUnknown_0839F584 - thumb_func_end sub_808A73C - - thumb_func_start PokemonMenu_ReadMail -PokemonMenu_ReadMail: @ 808A810 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r1, _0808A840 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0808A844 @ =sub_808A848 - str r1, [r0] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808A840: .4byte gTasks -_0808A844: .4byte sub_808A848 - thumb_func_end PokemonMenu_ReadMail - - thumb_func_start sub_808A848 -sub_808A848: @ 808A848 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _0808A898 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0808A890 - adds r0, r5, 0 - bl sub_806CA38 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x64 - muls r0, r1 - ldr r1, _0808A89C @ =gPlayerParty - adds r0, r1 - movs r1, 0x40 - bl GetMonData - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r5, 0 - bl DestroyTask - lsls r0, r4, 3 - adds r0, r4 - lsls r0, 2 - ldr r1, _0808A8A0 @ =gSaveBlock1 + 0x2B4C - adds r0, r1 - ldr r1, _0808A8A4 @ =sub_808A8A8 - movs r2, 0x1 - bl HandleReadMail -_0808A890: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0808A898: .4byte gPaletteFade -_0808A89C: .4byte gPlayerParty -_0808A8A0: .4byte gSaveBlock1 + 0x2B4C -_0808A8A4: .4byte sub_808A8A8 - thumb_func_end sub_808A848 - - thumb_func_start sub_808A8A8 -sub_808A8A8: @ 808A8A8 - push {lr} - ldr r1, _0808A8C4 @ =gUnknown_020384F0 - ldr r0, _0808A8C8 @ =gLastFieldPokeMenuOpened - ldrb r0, [r0] - strb r0, [r1] - ldr r0, _0808A8CC @ =0x0201b000 - ldr r1, _0808A8D0 @ =0x00000262 - adds r0, r1 - movs r1, 0x4 - strb r1, [r0] - bl sub_8089F14 - pop {r0} - bx r0 - .align 2, 0 -_0808A8C4: .4byte gUnknown_020384F0 -_0808A8C8: .4byte gLastFieldPokeMenuOpened -_0808A8CC: .4byte 0x0201b000 -_0808A8D0: .4byte 0x00000262 - thumb_func_end sub_808A8A8 - - thumb_func_start sub_808A8D4 -sub_808A8D4: @ 808A8D4 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r1, _0808A90C @ =sPokeMenuCursorPos - movs r0, 0 - strb r0, [r1] - movs r0, 0x13 - movs r1, 0 - movs r2, 0x1D - movs r3, 0x13 - bl MenuZeroFillWindowRect - movs r0, 0 - movs r1, 0 - bl sub_806D538 - ldr r1, _0808A910 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0808A914 @ =sub_8089CD4 - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808A90C: .4byte sPokeMenuCursorPos -_0808A910: .4byte gTasks -_0808A914: .4byte sub_8089CD4 - thumb_func_end sub_808A8D4 - - thumb_func_start PokemonMenu_Cancel -PokemonMenu_Cancel: @ 808A918 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl HandleDestroyMenuCursors - movs r0, 0x5 - bl PlaySE - adds r0, r4, 0 - bl sub_808A8D4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end PokemonMenu_Cancel - - thumb_func_start PokemonMenu_CancelSubmenu -PokemonMenu_CancelSubmenu: @ 808A938 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl HandleDestroyMenuCursors - movs r0, 0x5 - bl PlaySE - movs r0, 0x13 - movs r1, 0 - movs r2, 0x1D - movs r3, 0x13 - bl MenuZeroFillWindowRect - bl sub_806D5A4 - ldr r0, _0808A978 @ =sPokeMenuCursorPos - ldrb r0, [r0] - bl sub_8089C7C - ldr r1, _0808A97C @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0808A980 @ =sub_8089D94 - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808A978: .4byte sPokeMenuCursorPos -_0808A97C: .4byte gTasks -_0808A980: .4byte sub_8089D94 - thumb_func_end PokemonMenu_CancelSubmenu - - thumb_func_start PokemonMenu_FieldMove -PokemonMenu_FieldMove: @ 808A984 - push {r4-r7,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r6, r0, 3 - ldr r7, _0808A9D0 @ =gTasks + 0x8 - adds r4, r6, r7 - bl HandleDestroyMenuCursors - ldr r1, _0808A9D4 @ =sPokeMenuOptionsIDs - ldr r0, _0808A9D8 @ =sPokeMenuCursorPos - ldrb r0, [r0] - adds r0, r1 - ldrb r0, [r0] - subs r0, 0xA - strh r0, [r4, 0x16] - bl sub_80F9344 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0808A9DC - movs r0, 0x13 - movs r1, 0 - movs r2, 0x1D - movs r3, 0x13 - bl MenuZeroFillWindowRect - ldrh r0, [r4, 0x16] - subs r0, 0xB - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bhi _0808AABA - movs r0, 0x9 - b _0808AAB2 - .align 2, 0 -_0808A9D0: .4byte gTasks + 0x8 -_0808A9D4: .4byte sPokeMenuOptionsIDs -_0808A9D8: .4byte sPokeMenuCursorPos -_0808A9DC: - ldrh r1, [r4, 0x16] - movs r2, 0x16 - ldrsh r0, [r4, r2] - cmp r0, 0x7 - bgt _0808AA2C - ldr r2, _0808AA20 @ =0x00000807 - adds r0, r1, r2 - lsls r0, 16 - lsrs r0, 16 - bl FlagGet - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0808AA2C - movs r0, 0x13 - movs r1, 0 - movs r2, 0x1D - movs r3, 0x13 - bl MenuZeroFillWindowRect - bl sub_806D5A4 - ldr r0, _0808AA24 @ =gOtherText_CantBeUsedBadge - movs r1, 0x1 - bl sub_806E834 - adds r0, r7, 0 - subs r0, 0x8 - adds r0, r6, r0 - ldr r1, _0808AA28 @ =sub_808AAF0 - str r1, [r0] - b _0808AADA - .align 2, 0 -_0808AA20: .4byte 0x00000807 -_0808AA24: .4byte gOtherText_CantBeUsedBadge -_0808AA28: .4byte sub_808AAF0 -_0808AA2C: - ldr r1, _0808AA78 @ =gFieldMoveFuncs - movs r2, 0x16 - ldrsh r0, [r4, r2] - lsls r0, 3 - adds r0, r1 - ldr r0, [r0] - bl _call_via_r0 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0808AA90 - ldr r1, _0808AA7C @ =sPokeMenuCursorPos - movs r0, 0 - strb r0, [r1] - ldrh r0, [r4, 0x16] - subs r0, 0xB - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bls _0808AA88 - ldr r1, _0808AA80 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - ldr r1, _0808AA84 @ =sub_808AB34 - str r1, [r0] - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - b _0808AADA - .align 2, 0 -_0808AA78: .4byte gFieldMoveFuncs -_0808AA7C: .4byte sPokeMenuCursorPos -_0808AA80: .4byte gTasks -_0808AA84: .4byte sub_808AB34 -_0808AA88: - adds r0, r5, 0 - bl sub_8133D28 - b _0808AADA -_0808AA90: - movs r0, 0x13 - movs r1, 0 - movs r2, 0x1D - movs r3, 0x13 - bl MenuZeroFillWindowRect - movs r1, 0x16 - ldrsh r0, [r4, r1] - cmp r0, 0x4 - bne _0808AABA - movs r0, 0x8 - bl TestPlayerAvatarFlags - lsls r0, 24 - cmp r0, 0 - beq _0808AABA - movs r0, 0x8 -_0808AAB2: - movs r1, 0 - bl sub_806D538 - b _0808AACC -_0808AABA: - ldr r0, _0808AAE4 @ =gFieldMoveFuncs - movs r2, 0x16 - ldrsh r1, [r4, r2] - lsls r1, 3 - adds r1, r0 - ldrb r0, [r1, 0x4] - movs r1, 0 - bl sub_806D538 -_0808AACC: - ldr r0, _0808AAE8 @ =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r0 - ldr r0, _0808AAEC @ =sub_808ABF4 - str r0, [r1] -_0808AADA: - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0808AAE4: .4byte gFieldMoveFuncs -_0808AAE8: .4byte gTasks -_0808AAEC: .4byte sub_808ABF4 - thumb_func_end PokemonMenu_FieldMove - - thumb_func_start sub_808AAF0 -sub_808AAF0: @ 808AAF0 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0808AB2C @ =gUnknown_0202E8F6 - ldrb r0, [r0] - cmp r0, 0x1 - beq _0808AB24 - ldr r0, _0808AB30 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _0808AB12 - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0808AB24 -_0808AB12: - movs r0, 0 - movs r1, 0xE - movs r2, 0x1D - movs r3, 0x13 - bl MenuZeroFillWindowRect - adds r0, r4, 0 - bl PokemonMenu_Cancel -_0808AB24: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808AB2C: .4byte gUnknown_0202E8F6 -_0808AB30: .4byte gMain - thumb_func_end sub_808AAF0 - - thumb_func_start sub_808AB34 -sub_808AB34: @ 808AB34 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0808AB6C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0808AB84 - ldr r0, _0808AB70 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - movs r2, 0x1E - ldrsh r0, [r1, r2] - cmp r0, 0x5 - bne _0808AB62 - bl ShouldDoBrailleFlyEffect - lsls r0, 24 - cmp r0, 0 - beq _0808AB78 -_0808AB62: - ldr r0, _0808AB74 @ =c2_exit_to_overworld_2_switch - bl SetMainCallback2 - b _0808AB7E - .align 2, 0 -_0808AB6C: .4byte gPaletteFade -_0808AB70: .4byte gTasks -_0808AB74: .4byte c2_exit_to_overworld_2_switch -_0808AB78: - ldr r0, _0808AB8C @ =CB2_InitFlyRegionMap - bl SetMainCallback2 -_0808AB7E: - adds r0, r4, 0 - bl DestroyTask -_0808AB84: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808AB8C: .4byte CB2_InitFlyRegionMap - thumb_func_end sub_808AB34 - - thumb_func_start sub_808AB90 -sub_808AB90: @ 808AB90 - push {lr} - bl pal_fill_black - ldr r0, _0808ABA4 @ =sub_808ABA8 - movs r1, 0x8 - bl CreateTask - pop {r0} - bx r0 - .align 2, 0 -_0808ABA4: .4byte sub_808ABA8 - thumb_func_end sub_808AB90 - - thumb_func_start sub_808ABA8 -sub_808ABA8: @ 808ABA8 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl sub_807D770 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0808ABDE - ldr r0, _0808ABE4 @ =gLastFieldPokeMenuOpened - ldrb r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0808ABE8 @ =gPlayerParty - adds r0, r1 - movs r1, 0xB - bl GetMonData - ldr r1, _0808ABEC @ =gUnknown_0202FF84 - str r0, [r1] - ldr r0, _0808ABF0 @ =gUnknown_03005CE4 - ldr r0, [r0] - bl _call_via_r0 - adds r0, r4, 0 - bl DestroyTask -_0808ABDE: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808ABE4: .4byte gLastFieldPokeMenuOpened -_0808ABE8: .4byte gPlayerParty -_0808ABEC: .4byte gUnknown_0202FF84 -_0808ABF0: .4byte gUnknown_03005CE4 - thumb_func_end sub_808ABA8 - - thumb_func_start sub_808ABF4 -sub_808ABF4: @ 808ABF4 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0808AC28 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _0808AC0E - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0808AC20 -_0808AC0E: - movs r0, 0x1 - movs r1, 0x11 - movs r2, 0x1C - movs r3, 0x12 - bl MenuZeroFillWindowRect - adds r0, r4, 0 - bl PokemonMenu_Cancel -_0808AC20: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808AC28: .4byte gMain - thumb_func_end sub_808ABF4 - - thumb_func_start sub_808AC2C -sub_808AC2C: @ 808AC2C - push {lr} - ldr r0, _0808AC40 @ =gUnknown_0202FF84 - ldr r1, _0808AC44 @ =gLastFieldPokeMenuOpened - ldrb r1, [r1] - str r1, [r0] - movs r0, 0x9 - bl FieldEffectStart - pop {r0} - bx r0 - .align 2, 0 -_0808AC40: .4byte gUnknown_0202FF84 -_0808AC44: .4byte gLastFieldPokeMenuOpened - thumb_func_end sub_808AC2C - - thumb_func_start SetUpFieldMove_Surf -SetUpFieldMove_Surf: @ 808AC48 - push {lr} - bl PartyHasMonWithSurf - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0808AC84 - bl IsPlayerFacingSurfableFishableWater - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0808AC84 - ldr r1, _0808AC74 @ =gFieldCallback - ldr r0, _0808AC78 @ =sub_808AB90 - str r0, [r1] - ldr r1, _0808AC7C @ =gUnknown_03005CE4 - ldr r0, _0808AC80 @ =sub_808AC2C - str r0, [r1] - movs r0, 0x1 - b _0808AC86 - .align 2, 0 -_0808AC74: .4byte gFieldCallback -_0808AC78: .4byte sub_808AB90 -_0808AC7C: .4byte gUnknown_03005CE4 -_0808AC80: .4byte sub_808AC2C -_0808AC84: - movs r0, 0 -_0808AC86: - pop {r1} - bx r1 - thumb_func_end SetUpFieldMove_Surf - - thumb_func_start sub_808AC8C -sub_808AC8C: @ 808AC8C - push {lr} - ldr r0, _0808ACA0 @ =gUnknown_0202FF84 - ldr r1, _0808ACA4 @ =gLastFieldPokeMenuOpened - ldrb r1, [r1] - str r1, [r0] - movs r0, 0x1F - bl FieldEffectStart - pop {r0} - bx r0 - .align 2, 0 -_0808ACA0: .4byte gUnknown_0202FF84 -_0808ACA4: .4byte gLastFieldPokeMenuOpened - thumb_func_end sub_808AC8C - - thumb_func_start SetUpFieldMove_Fly -SetUpFieldMove_Fly: @ 808ACA8 - push {lr} - bl ShouldDoBrailleFlyEffect - lsls r0, 24 - cmp r0, 0 - beq _0808ACD0 - ldr r1, _0808ACC0 @ =gFieldCallback - ldr r0, _0808ACC4 @ =sub_808AB90 - str r0, [r1] - ldr r1, _0808ACC8 @ =gUnknown_03005CE4 - ldr r0, _0808ACCC @ =DoBrailleFlyEffect - b _0808ACF2 - .align 2, 0 -_0808ACC0: .4byte gFieldCallback -_0808ACC4: .4byte sub_808AB90 -_0808ACC8: .4byte gUnknown_03005CE4 -_0808ACCC: .4byte DoBrailleFlyEffect -_0808ACD0: - ldr r0, _0808ACE4 @ =gMapHeader - ldrb r0, [r0, 0x17] - bl is_light_level_1_2_3_or_6 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0808ACE8 - movs r0, 0 - b _0808ACF6 - .align 2, 0 -_0808ACE4: .4byte gMapHeader -_0808ACE8: - ldr r1, _0808ACFC @ =gFieldCallback - ldr r0, _0808AD00 @ =sub_808AB90 - str r0, [r1] - ldr r1, _0808AD04 @ =gUnknown_03005CE4 - ldr r0, _0808AD08 @ =sub_808AC8C -_0808ACF2: - str r0, [r1] - movs r0, 0x1 -_0808ACF6: - pop {r1} - bx r1 - .align 2, 0 -_0808ACFC: .4byte gFieldCallback -_0808AD00: .4byte sub_808AB90 -_0808AD04: .4byte gUnknown_03005CE4 -_0808AD08: .4byte sub_808AC8C - thumb_func_end SetUpFieldMove_Fly - - thumb_func_start sub_808AD0C -sub_808AD0C: @ 808AD0C - push {r4,lr} - ldr r4, _0808AD14 @ =0x0201b260 - b _0808AD24 - .align 2, 0 -_0808AD14: .4byte 0x0201b260 -_0808AD18: - bl sub_80F9344 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0808AD48 -_0808AD24: - bl sub_806B124 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0808AD18 - ldrb r0, [r4] - ldr r1, _0808AD50 @ =gLastFieldPokeMenuOpened - ldrb r1, [r1] - bl sub_806C994 - ldrb r0, [r4] - movs r1, 0 - bl sub_806BF74 - ldr r0, _0808AD54 @ =sub_806AEDC - bl SetMainCallback2 -_0808AD48: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808AD50: .4byte gLastFieldPokeMenuOpened -_0808AD54: .4byte sub_806AEDC - thumb_func_end sub_808AD0C - - thumb_func_start sub_808AD58 -sub_808AD58: @ 808AD58 - push {lr} - ldr r2, _0808AD7C @ =gPaletteFade - ldrb r0, [r2, 0x8] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2, 0x8] - ldr r2, _0808AD80 @ =sub_8089CD4 - movs r0, 0 - movs r1, 0xFF - movs r3, 0 - bl sub_806AF4C - ldr r0, _0808AD84 @ =sub_808AD0C - bl SetMainCallback2 - pop {r0} - bx r0 - .align 2, 0 -_0808AD7C: .4byte gPaletteFade -_0808AD80: .4byte sub_8089CD4 -_0808AD84: .4byte sub_808AD0C - thumb_func_end sub_808AD58 - - thumb_func_start unref_sub_808AD88 -unref_sub_808AD88: @ 808AD88 - push {lr} - ldr r0, _0808ADA4 @ =gLastFieldPokeMenuOpened - ldrb r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0808ADA8 @ =gPlayerParty - adds r0, r1 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - pop {r1} - bx r1 - .align 2, 0 -_0808ADA4: .4byte gLastFieldPokeMenuOpened -_0808ADA8: .4byte gPlayerParty - thumb_func_end unref_sub_808AD88 - - thumb_func_start sub_808ADAC -sub_808ADAC: @ 808ADAC - push {lr} - ldr r0, _0808ADC0 @ =gUnknown_0202FF84 - ldr r1, _0808ADC4 @ =gLastFieldPokeMenuOpened - ldrb r1, [r1] - str r1, [r0] - movs r0, 0x2C - bl FieldEffectStart - pop {r0} - bx r0 - .align 2, 0 -_0808ADC0: .4byte gUnknown_0202FF84 -_0808ADC4: .4byte gLastFieldPokeMenuOpened - thumb_func_end sub_808ADAC - - thumb_func_start SetUpFieldMove_Dive -SetUpFieldMove_Dive: @ 808ADC8 - push {lr} - bl sub_8068F18 - ldr r1, _0808ADE0 @ =gUnknown_0202FF84 - lsls r0, 24 - lsrs r0, 24 - str r0, [r1, 0x4] - cmp r0, 0 - bne _0808ADE4 - movs r0, 0 - b _0808ADF2 - .align 2, 0 -_0808ADE0: .4byte gUnknown_0202FF84 -_0808ADE4: - ldr r1, _0808ADF8 @ =gFieldCallback - ldr r0, _0808ADFC @ =sub_808AB90 - str r0, [r1] - ldr r1, _0808AE00 @ =gUnknown_03005CE4 - ldr r0, _0808AE04 @ =sub_808ADAC - str r0, [r1] - movs r0, 0x1 -_0808ADF2: - pop {r1} - bx r1 - .align 2, 0 -_0808ADF8: .4byte gFieldCallback -_0808ADFC: .4byte sub_808AB90 -_0808AE00: .4byte gUnknown_03005CE4 -_0808AE04: .4byte sub_808ADAC - thumb_func_end SetUpFieldMove_Dive - - thumb_func_start sub_808AE08 -sub_808AE08: @ 808AE08 - push {lr} - ldr r0, _0808AE1C @ =gUnknown_0202FF84 - ldr r1, _0808AE20 @ =gLastFieldPokeMenuOpened - ldrb r1, [r1] - str r1, [r0] - movs r0, 0x2B - bl FieldEffectStart - pop {r0} - bx r0 - .align 2, 0 -_0808AE1C: .4byte gUnknown_0202FF84 -_0808AE20: .4byte gLastFieldPokeMenuOpened - thumb_func_end sub_808AE08 - - thumb_func_start SetUpFieldMove_Waterfall -SetUpFieldMove_Waterfall: @ 808AE24 - push {r4,lr} - sub sp, 0x4 - mov r4, sp - adds r4, 0x2 - mov r0, sp - adds r1, r4, 0 - bl GetXYCoordsOneStepInFrontOfPlayer - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - movs r2, 0 - ldrsh r1, [r4, r2] - bl MapGridGetMetatileBehaviorAt - lsls r0, 24 - lsrs r0, 24 - bl MetatileBehavior_IsWaterfall - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0808AE80 - bl IsPlayerSurfingNorth - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0808AE80 - ldr r1, _0808AE70 @ =gFieldCallback - ldr r0, _0808AE74 @ =sub_808AB90 - str r0, [r1] - ldr r1, _0808AE78 @ =gUnknown_03005CE4 - ldr r0, _0808AE7C @ =sub_808AE08 - str r0, [r1] - movs r0, 0x1 - b _0808AE82 - .align 2, 0 -_0808AE70: .4byte gFieldCallback -_0808AE74: .4byte sub_808AB90 -_0808AE78: .4byte gUnknown_03005CE4 -_0808AE7C: .4byte sub_808AE08 -_0808AE80: - movs r0, 0 -_0808AE82: - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end SetUpFieldMove_Waterfall - - thumb_func_start sub_808AE8C -sub_808AE8C: @ 808AE8C - push {r4-r6,lr} - ldr r0, _0808AED8 @ =gScriptItemId - ldrb r0, [r0] - subs r0, 0x21 - lsls r0, 24 - lsrs r6, r0, 24 - movs r5, 0 -_0808AE9A: - movs r0, 0x64 - adds r1, r5, 0 - muls r1, r0 - ldr r0, _0808AEDC @ =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _0808AF10 - adds r0, r5, 0 - bl sub_806D668 - adds r0, r4, 0 - movs r1, 0x2D - bl GetMonData - cmp r0, 0 - bne _0808AECE - adds r0, r4, 0 - adds r1, r6, 0 - bl CanMonLearnTMHM - cmp r0, 0 - bne _0808AEE0 -_0808AECE: - adds r0, r5, 0 - movs r1, 0x9A - bl sub_806BC3C - b _0808AF10 - .align 2, 0 -_0808AED8: .4byte gScriptItemId -_0808AEDC: .4byte gPlayerParty -_0808AEE0: - ldr r0, _0808AF04 @ =gScriptItemId - ldrh r0, [r0] - bl ItemIdToBattleMoveId - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - adds r0, r4, 0 - bl pokemon_has_move - lsls r0, 24 - cmp r0, 0 - beq _0808AF08 - adds r0, r5, 0 - movs r1, 0xA8 - bl sub_806BC3C - b _0808AF10 - .align 2, 0 -_0808AF04: .4byte gScriptItemId -_0808AF08: - adds r0, r5, 0 - movs r1, 0x8C - bl sub_806BC3C -_0808AF10: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x5 - bls _0808AE9A - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_808AE8C - - thumb_func_start sub_808AF20 -sub_808AF20: @ 808AF20 - push {r4,r5,lr} - movs r5, 0 -_0808AF24: - movs r0, 0x64 - adds r1, r5, 0 - muls r1, r0 - ldr r0, _0808AF78 @ =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _0808AF66 - adds r0, r4, 0 - movs r1, 0x2D - bl GetMonData - cmp r0, 0 - bne _0808AF58 - ldr r0, _0808AF7C @ =gScriptItemId - ldrh r2, [r0] - adds r0, r4, 0 - movs r1, 0x3 - bl GetEvolutionTargetSpecies - lsls r0, 16 - cmp r0, 0 - bne _0808AF66 -_0808AF58: - adds r0, r5, 0 - bl sub_806D668 - adds r0, r5, 0 - movs r1, 0 - bl sub_806BC3C -_0808AF66: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x5 - bls _0808AF24 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0808AF78: .4byte gPlayerParty -_0808AF7C: .4byte gScriptItemId - thumb_func_end sub_808AF20 - - thumb_func_start sub_808AF80 -sub_808AF80: @ 808AF80 - push {r4,r5,lr} - ldr r5, _0808AFB0 @ =0x0201b260 -_0808AF84: - bl sub_806B124 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0808B00C - ldr r0, _0808AFB4 @ =gUnknown_02038561 - ldrb r0, [r0] - cmp r0, 0 - bne _0808AFC6 - ldr r0, _0808AFB8 @ =gScriptItemId - ldrh r0, [r0] - bl CheckIfItemIsTMHMOrEvolutionStone - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0808AFBC - cmp r0, 0x2 - beq _0808AFC2 - b _0808AFC6 - .align 2, 0 -_0808AFB0: .4byte 0x0201b260 -_0808AFB4: .4byte gUnknown_02038561 -_0808AFB8: .4byte gScriptItemId -_0808AFBC: - bl sub_808AE8C - b _0808AFC6 -_0808AFC2: - bl sub_808AF20 -_0808AFC6: - ldr r4, _0808B000 @ =gLastFieldPokeMenuOpened - ldrb r0, [r4] - cmp r0, 0x5 - bhi _0808AFE2 - adds r1, r0, 0 - movs r0, 0x64 - muls r0, r1 - ldr r1, _0808B004 @ =gPlayerParty - adds r0, r1 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - bne _0808AFE6 -_0808AFE2: - movs r0, 0 - strb r0, [r4] -_0808AFE6: - ldrb r0, [r5] - ldr r1, _0808B000 @ =gLastFieldPokeMenuOpened - ldrb r1, [r1] - bl sub_806C994 - ldrb r0, [r5] - movs r1, 0 - bl sub_806BF74 - ldr r0, _0808B008 @ =sub_806AEDC - bl SetMainCallback2 - b _0808B018 - .align 2, 0 -_0808B000: .4byte gLastFieldPokeMenuOpened -_0808B004: .4byte gPlayerParty -_0808B008: .4byte sub_806AEDC -_0808B00C: - bl sub_80F9344 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0808AF84 -_0808B018: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_808AF80 - - thumb_func_start sub_808B020 -sub_808B020: @ 808B020 - push {lr} - ldr r2, _0808B040 @ =gPaletteFade - ldrb r0, [r2, 0x8] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2, 0x8] - ldr r0, _0808B044 @ =gUnknown_02038561 - ldrb r0, [r0] - cmp r0, 0x1 - beq _0808B0A0 - cmp r0, 0x1 - bgt _0808B048 - cmp r0, 0 - beq _0808B052 - b _0808B0AC - .align 2, 0 -_0808B040: .4byte gPaletteFade -_0808B044: .4byte gUnknown_02038561 -_0808B048: - cmp r0, 0x3 - beq _0808B0A0 - cmp r0, 0x4 - beq _0808B08C - b _0808B0AC -_0808B052: - ldr r0, _0808B070 @ =gScriptItemId - ldrh r0, [r0] - bl CheckIfItemIsTMHMOrEvolutionStone - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0808B078 - ldr r2, _0808B074 @ =sub_808B0C0 - movs r0, 0 - movs r1, 0 - movs r3, 0x14 - bl sub_806AF4C - b _0808B0AC - .align 2, 0 -_0808B070: .4byte gScriptItemId -_0808B074: .4byte sub_808B0C0 -_0808B078: - ldr r2, _0808B088 @ =sub_808B0C0 - movs r0, 0 - movs r1, 0 - movs r3, 0x3 - bl sub_806AF4C - b _0808B0AC - .align 2, 0 -_0808B088: .4byte sub_808B0C0 -_0808B08C: - ldr r2, _0808B09C @ =sub_808B1EC - movs r0, 0 - movs r1, 0 - movs r3, 0xFF - bl sub_806AF4C - b _0808B0AC - .align 2, 0 -_0808B09C: .4byte sub_808B1EC -_0808B0A0: - ldr r2, _0808B0B8 @ =sub_808B0C0 - movs r0, 0 - movs r1, 0 - movs r3, 0x4 - bl sub_806AF4C -_0808B0AC: - ldr r0, _0808B0BC @ =sub_808AF80 - bl SetMainCallback2 - pop {r0} - bx r0 - .align 2, 0 -_0808B0B8: .4byte sub_808B0C0 -_0808B0BC: .4byte sub_808AF80 - thumb_func_end sub_808B020 - - thumb_func_start sub_808B0C0 -sub_808B0C0: @ 808B0C0 - push {r4,r5,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0808B0EC @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _0808B1CE - adds r0, r4, 0 - bl sub_806BD80 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - beq _0808B0F0 - cmp r0, 0x2 - beq _0808B184 - b _0808B1CE - .align 2, 0 -_0808B0EC: .4byte gPaletteFade -_0808B0F0: - adds r0, r4, 0 - bl sub_806CA38 - ldr r1, _0808B118 @ =gLastFieldPokeMenuOpened - strb r0, [r1] - ldrb r1, [r1] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0808B11C @ =gPlayerParty - adds r0, r1 - movs r1, 0x2D - bl GetMonData - cmp r0, 0 - beq _0808B120 - movs r0, 0x20 - bl PlaySE - b _0808B1CE - .align 2, 0 -_0808B118: .4byte gLastFieldPokeMenuOpened -_0808B11C: .4byte gPlayerParty -_0808B120: - bl sub_806D5A4 - ldr r5, _0808B16C @ =gUnknown_02038561 - ldrb r0, [r5] - cmp r0, 0 - bne _0808B13C - ldr r3, _0808B170 @ =gUnknown_03004AE4 - ldr r0, _0808B174 @ =gScriptItemId - ldrh r1, [r0] - ldr r2, _0808B178 @ =sub_808B224 - ldr r3, [r3] - adds r0, r4, 0 - bl _call_via_r3 -_0808B13C: - ldrb r0, [r5] - cmp r0, 0x1 - bne _0808B154 - movs r0, 0x5 - bl PlaySE - ldr r0, _0808B174 @ =gScriptItemId - ldrh r1, [r0] - ldr r2, _0808B17C @ =sub_808B2EC - adds r0, r4, 0 - bl PartyMenuTryGiveMonHeldItem -_0808B154: - ldrb r0, [r5] - cmp r0, 0x3 - bne _0808B1CE - movs r0, 0x5 - bl PlaySE - ldr r1, _0808B180 @ =sub_808B2B4 - adds r0, r4, 0 - bl PartyMenuTryGiveMonMail - b _0808B1CE - .align 2, 0 -_0808B16C: .4byte gUnknown_02038561 -_0808B170: .4byte gUnknown_03004AE4 -_0808B174: .4byte gScriptItemId -_0808B178: .4byte sub_808B224 -_0808B17C: .4byte sub_808B2EC -_0808B180: .4byte sub_808B2B4 -_0808B184: - adds r0, r4, 0 - bl sub_806CA38 - ldr r1, _0808B1D8 @ =gLastFieldPokeMenuOpened - strb r0, [r1] - movs r0, 0x5 - bl PlaySE - movs r0, 0x1 - negs r0, r0 - str r5, [sp] - movs r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r2, _0808B1DC @ =gUnknown_02038561 - ldrb r0, [r2] - cmp r0, 0x1 - bhi _0808B1BA - ldr r0, _0808B1E0 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _0808B1E4 @ =sub_808B25C - str r0, [r1] -_0808B1BA: - ldrb r0, [r2] - cmp r0, 0x3 - bne _0808B1CE - ldr r0, _0808B1E0 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _0808B1E8 @ =sub_808B2B4 - str r0, [r1] -_0808B1CE: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0808B1D8: .4byte gLastFieldPokeMenuOpened -_0808B1DC: .4byte gUnknown_02038561 -_0808B1E0: .4byte gTasks -_0808B1E4: .4byte sub_808B25C -_0808B1E8: .4byte sub_808B2B4 - thumb_func_end sub_808B0C0 - - thumb_func_start sub_808B1EC -sub_808B1EC: @ 808B1EC - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0808B214 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0808B20E - ldr r3, _0808B218 @ =gUnknown_03004AE4 - ldr r0, _0808B21C @ =gScriptItemId - ldrh r1, [r0] - ldr r2, _0808B220 @ =sub_808B224 - ldr r3, [r3] - adds r0, r4, 0 - bl _call_via_r3 -_0808B20E: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808B214: .4byte gPaletteFade -_0808B218: .4byte gUnknown_03004AE4 -_0808B21C: .4byte gScriptItemId -_0808B220: .4byte sub_808B224 - thumb_func_end sub_808B1EC - - thumb_func_start sub_808B224 -sub_808B224: @ 808B224 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r1, _0808B254 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0808B258 @ =sub_808B25C - str r1, [r0] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808B254: .4byte gTasks -_0808B258: .4byte sub_808B25C - thumb_func_end sub_808B224 - - thumb_func_start sub_808B25C -sub_808B25C: @ 808B25C - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0808B280 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0808B27A - ldr r0, _0808B284 @ =sub_80A5B40 - bl SetMainCallback2 - adds r0, r4, 0 - bl DestroyTask -_0808B27A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808B280: .4byte gPaletteFade -_0808B284: .4byte sub_80A5B40 - thumb_func_end sub_808B25C - - thumb_func_start sub_808B288 -sub_808B288: @ 808B288 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0808B2AC @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0808B2A6 - ldr r0, _0808B2B0 @ =Mailbox_ReturnToMailListAfterDeposit - bl SetMainCallback2 - adds r0, r4, 0 - bl DestroyTask -_0808B2A6: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808B2AC: .4byte gPaletteFade -_0808B2B0: .4byte Mailbox_ReturnToMailListAfterDeposit - thumb_func_end sub_808B288 - - thumb_func_start sub_808B2B4 -sub_808B2B4: @ 808B2B4 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r1, _0808B2E4 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0808B2E8 @ =sub_808B288 - str r1, [r0] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808B2E4: .4byte gTasks -_0808B2E8: .4byte sub_808B288 - thumb_func_end sub_808B2B4 - - thumb_func_start sub_808B2EC -sub_808B2EC: @ 808B2EC - push {r4,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0808B31C @ =gUnknown_0202E8F4 - ldrb r0, [r0] - cmp r0, 0x2 - bne _0808B328 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r1, _0808B320 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0808B324 @ =sub_808B338 - str r1, [r0] - b _0808B32E - .align 2, 0 -_0808B31C: .4byte gUnknown_0202E8F4 -_0808B320: .4byte gTasks -_0808B324: .4byte sub_808B338 -_0808B328: - adds r0, r4, 0 - bl sub_808B224 -_0808B32E: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_808B2EC - - thumb_func_start sub_808B338 -sub_808B338: @ 808B338 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _0808B38C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0808B384 - adds r0, r5, 0 - bl sub_806CA38 - ldr r1, _0808B390 @ =gLastFieldPokeMenuOpened - strb r0, [r1] - ldrb r1, [r1] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0808B394 @ =gPlayerParty - adds r0, r1 - movs r1, 0x40 - bl GetMonData - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r5, 0 - bl DestroyTask - lsls r1, r4, 3 - adds r1, r4 - lsls r1, 2 - ldr r0, _0808B398 @ =gSaveBlock1 + 0x2B4C - adds r1, r0 - ldr r2, _0808B39C @ =sub_808B3EC - movs r0, 0x4 - movs r3, 0x3 - bl sub_80E62A0 -_0808B384: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0808B38C: .4byte gPaletteFade -_0808B390: .4byte gLastFieldPokeMenuOpened -_0808B394: .4byte gPlayerParty -_0808B398: .4byte gSaveBlock1 + 0x2B4C -_0808B39C: .4byte sub_808B3EC - thumb_func_end sub_808B338 - - thumb_func_start sub_808B3A0 -sub_808B3A0: @ 808B3A0 - push {r4,lr} - ldr r4, _0808B3A8 @ =0x0201b260 - b _0808B3B8 - .align 2, 0 -_0808B3A8: .4byte 0x0201b260 -_0808B3AC: - bl sub_80F9344 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0808B3DC -_0808B3B8: - bl sub_806B124 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0808B3AC - ldrb r0, [r4] - ldr r1, _0808B3E4 @ =gLastFieldPokeMenuOpened - ldrb r1, [r1] - bl sub_806C994 - ldrb r0, [r4] - movs r1, 0 - bl sub_806BF74 - ldr r0, _0808B3E8 @ =sub_806AEDC - bl SetMainCallback2 -_0808B3DC: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808B3E4: .4byte gLastFieldPokeMenuOpened -_0808B3E8: .4byte sub_806AEDC - thumb_func_end sub_808B3A0 - - thumb_func_start sub_808B3EC -sub_808B3EC: @ 808B3EC - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r0, _0808B464 @ =gPaletteFade - mov r8, r0 - ldrb r0, [r0, 0x8] - movs r1, 0x80 - orrs r0, r1 - mov r1, r8 - strb r0, [r1, 0x8] - ldr r0, _0808B468 @ =gScriptResult - ldrh r0, [r0] - cmp r0, 0 - bne _0808B480 - ldr r7, _0808B46C @ =gUnknown_0202E8F8 - ldrh r0, [r7] - cmp r0, 0 - beq _0808B416 - movs r1, 0x1 - bl RemoveBagItem -_0808B416: - ldr r6, _0808B470 @ =gLastFieldPokeMenuOpened - ldrb r0, [r6] - movs r5, 0x64 - muls r0, r5 - ldr r4, _0808B474 @ =gPlayerParty - adds r0, r4 - movs r1, 0xC - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1 - bl AddBagItem - ldrb r0, [r6] - muls r0, r5 - adds r0, r4 - bl TakeMailFromMon - ldrb r0, [r6] - muls r0, r5 - adds r0, r4 - movs r1, 0xC - adds r2, r7, 0 - bl SetMonData - ldr r0, _0808B478 @ =sub_808B25C - movs r1, 0x5 - bl CreateTask - mov r0, r8 - ldrb r1, [r0, 0x8] - movs r0, 0x7F - ands r0, r1 - mov r1, r8 - strb r0, [r1, 0x8] - ldr r0, _0808B47C @ =sub_806AEDC - b _0808B48E - .align 2, 0 -_0808B464: .4byte gPaletteFade -_0808B468: .4byte gScriptResult -_0808B46C: .4byte gUnknown_0202E8F8 -_0808B470: .4byte gLastFieldPokeMenuOpened -_0808B474: .4byte gPlayerParty -_0808B478: .4byte sub_808B25C -_0808B47C: .4byte sub_806AEDC -_0808B480: - ldr r2, _0808B49C @ =sub_808B4A4 - movs r0, 0 - movs r1, 0 - movs r3, 0xFF - bl sub_806AF4C - ldr r0, _0808B4A0 @ =sub_808B3A0 -_0808B48E: - bl SetMainCallback2 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0808B49C: .4byte sub_808B4A4 -_0808B4A0: .4byte sub_808B3A0 - thumb_func_end sub_808B3EC - - thumb_func_start sub_808B4A4 -sub_808B4A4: @ 808B4A4 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0808B4D8 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0808B4D2 - ldr r0, _0808B4DC @ =gLastFieldPokeMenuOpened - ldrb r0, [r0] - ldr r1, _0808B4E0 @ =gScriptItemId - ldrh r1, [r1] - movs r2, 0x1 - bl DisplayGiveHeldItemMessage - ldr r1, _0808B4E4 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0808B4E8 @ =sub_808B4EC - str r1, [r0] -_0808B4D2: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808B4D8: .4byte gPaletteFade -_0808B4DC: .4byte gLastFieldPokeMenuOpened -_0808B4E0: .4byte gScriptItemId -_0808B4E4: .4byte gTasks -_0808B4E8: .4byte sub_808B4EC - thumb_func_end sub_808B4A4 - - thumb_func_start sub_808B4EC -sub_808B4EC: @ 808B4EC - push {lr} - lsls r0, 24 - lsrs r1, r0, 24 - ldr r0, _0808B504 @ =gUnknown_0202E8F6 - ldrb r0, [r0] - cmp r0, 0x1 - beq _0808B500 - adds r0, r1, 0 - bl sub_808B224 -_0808B500: - pop {r0} - bx r0 - .align 2, 0 -_0808B504: .4byte gUnknown_0202E8F6 - thumb_func_end sub_808B4EC - - thumb_func_start sub_808B508 -sub_808B508: @ 808B508 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl sub_808B224 - pop {r0} - bx r0 - thumb_func_end sub_808B508 - - thumb_func_start sub_808B518 -sub_808B518: @ 808B518 - push {r4,lr} - ldr r4, _0808B520 @ =0x0201b260 - b _0808B530 - .align 2, 0 -_0808B520: .4byte 0x0201b260 -_0808B524: - bl sub_80F9344 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0808B554 -_0808B530: - bl sub_806B124 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0808B524 - ldrb r0, [r4] - ldr r1, _0808B55C @ =gUnknown_020384F0 - ldrb r1, [r1] - bl sub_806C994 - ldrb r0, [r4] - movs r1, 0 - bl sub_806BF74 - ldr r0, _0808B560 @ =sub_806AEDC - bl SetMainCallback2 -_0808B554: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808B55C: .4byte gUnknown_020384F0 -_0808B560: .4byte sub_806AEDC - thumb_func_end sub_808B518 - - thumb_func_start sub_808B564 -sub_808B564: @ 808B564 - push {lr} - ldr r2, _0808B58C @ =gPaletteFade - ldrb r0, [r2, 0x8] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2, 0x8] - bl sub_809FA30 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - beq _0808B594 - ldr r2, _0808B590 @ =TaughtMove - movs r0, 0 - movs r1, 0 - movs r3, 0xFF - bl sub_806AF4C - b _0808B5A0 - .align 2, 0 -_0808B58C: .4byte gPaletteFade -_0808B590: .4byte TaughtMove -_0808B594: - ldr r2, _0808B5AC @ =StopTryingToTeachMove_806F588 - movs r0, 0 - movs r1, 0 - movs r3, 0xFF - bl sub_806AF4C -_0808B5A0: - ldr r0, _0808B5B0 @ =sub_808B518 - bl SetMainCallback2 - pop {r0} - bx r0 - .align 2, 0 -_0808B5AC: .4byte StopTryingToTeachMove_806F588 -_0808B5B0: .4byte sub_808B518 - thumb_func_end sub_808B564 - - thumb_func_start sub_808B5B4 -sub_808B5B4: @ 808B5B4 - push {lr} - ldr r3, _0808B5D8 @ =gUnknown_03005CF0 - ldr r2, _0808B5DC @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r2, [r1] - str r2, [r3] - ldr r2, _0808B5E0 @ =sub_808B5E4 - str r2, [r1] - lsls r0, 24 - lsrs r0, 24 - bl _call_via_r2 - pop {r0} - bx r0 - .align 2, 0 -_0808B5D8: .4byte gUnknown_03005CF0 -_0808B5DC: .4byte gTasks -_0808B5E0: .4byte sub_808B5E4 - thumb_func_end sub_808B5B4 - - thumb_func_start sub_808B5E4 -sub_808B5E4: @ 808B5E4 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl sub_8055870 - cmp r0, 0x1 - beq _0808B602 - ldr r1, _0808B608 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0808B60C @ =gUnknown_03005CF0 - ldr r1, [r1] - str r1, [r0] -_0808B602: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808B608: .4byte gTasks -_0808B60C: .4byte gUnknown_03005CF0 - thumb_func_end sub_808B5E4 - - .align 2, 0 @ Don't pad with nop. diff --git a/common_syms/pokemon_menu.txt b/common_syms/pokemon_menu.txt new file mode 100644 index 000000000..98a1bf53b --- /dev/null +++ b/common_syms/pokemon_menu.txt @@ -0,0 +1,2 @@ +gLastFieldPokeMenuOpened +gUnknown_03005CE4 diff --git a/data/pokemon_menu.s b/data/pokemon_menu.s deleted file mode 100644 index 477b33a4a..000000000 --- a/data/pokemon_menu.s +++ /dev/null @@ -1,82 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - - .align 2 -sPokemonMenuActions:: @ 839F494 - .4byte OtherText_Summary, PokemonMenu_Summary - .4byte OtherText_Switch2, PokemonMenu_Switch - .4byte OtherText_Item, PokemonMenu_Item - .4byte gOtherText_CancelNoTerminator, PokemonMenu_Cancel - .4byte OtherText_Give2, PokemonMenu_GiveItem - .4byte OtherText_Take2, PokemonMenu_TakeItem - .4byte OtherText_Take, PokemonMenu_TakeMail - .4byte OtherText_Mail, PokemonMenu_Mail - .4byte OtherText_Read2, PokemonMenu_ReadMail - .4byte gOtherText_CancelNoTerminator, PokemonMenu_CancelSubmenu - .4byte gMoveNames + 13 * MOVE_CUT, PokemonMenu_FieldMove - .4byte gMoveNames + 13 * MOVE_FLASH, PokemonMenu_FieldMove - .4byte gMoveNames + 13 * MOVE_ROCK_SMASH, PokemonMenu_FieldMove - .4byte gMoveNames + 13 * MOVE_STRENGTH, PokemonMenu_FieldMove - .4byte gMoveNames + 13 * MOVE_SURF, PokemonMenu_FieldMove - .4byte gMoveNames + 13 * MOVE_FLY, PokemonMenu_FieldMove - .4byte gMoveNames + 13 * MOVE_DIVE, PokemonMenu_FieldMove - .4byte gMoveNames + 13 * MOVE_WATERFALL, PokemonMenu_FieldMove - .4byte gMoveNames + 13 * MOVE_TELEPORT, PokemonMenu_FieldMove - .4byte gMoveNames + 13 * MOVE_DIG, PokemonMenu_FieldMove - .4byte gMoveNames + 13 * MOVE_SECRET_POWER, PokemonMenu_FieldMove - .4byte gMoveNames + 13 * MOVE_MILK_DRINK, PokemonMenu_FieldMove - .4byte gMoveNames + 13 * MOVE_SOFT_BOILED, PokemonMenu_FieldMove - .4byte gMoveNames + 13 * MOVE_SWEET_SCENT, PokemonMenu_FieldMove - - .align 1 -sPokeMenuFieldMoves:: @ 839F554 - .2byte MOVE_CUT - .2byte MOVE_FLASH - .2byte MOVE_ROCK_SMASH - .2byte MOVE_STRENGTH - .2byte MOVE_SURF - .2byte MOVE_FLY - .2byte MOVE_DIVE - .2byte MOVE_WATERFALL - .2byte MOVE_TELEPORT - .2byte MOVE_DIG - .2byte MOVE_SECRET_POWER - .2byte MOVE_MILK_DRINK - .2byte MOVE_SOFT_BOILED - .2byte MOVE_SWEET_SCENT - .2byte 0xFF - -Unknown_39F572: @ 839F572 - .byte 4, 5, 9, 0 - - .align 2 -gUnknown_0839F578:: @ 839F578 - .byte 3, 6, 0, 0 - .4byte Unknown_39F572 - -Unknown_39F580: @ 839F580 - .byte 8, 6, 9, 0 - - .align 2 -gUnknown_0839F584:: @ 839F584 - .byte 3, 9, 0, 0 - .4byte Unknown_39F580 - - .align 2 -gFieldMoveFuncs:: @ 839F58C - .4byte SetUpFieldMove_Cut, 0x6 - .4byte SetUpFieldMove_Flash, 0x9 - .4byte SetUpFieldMove_RockSmash, 0x9 - .4byte SetUpFieldMove_Strength, 0x9 - .4byte SetUpFieldMove_Surf, 0x7 - .4byte SetUpFieldMove_Fly, 0x9 - .4byte SetUpFieldMove_Dive, 0x9 - .4byte SetUpFieldMove_Waterfall, 0x9 - .4byte SetUpFieldMove_Teleport, 0x9 - .4byte SetUpFieldMove_Dig, 0x9 - .4byte SetUpFieldMove_SecretPower, 0x9 - .4byte SetUpFieldMove_SoftBoiled, 0x10 - .4byte SetUpFieldMove_SoftBoiled, 0x10 - .4byte SetUpFieldMove_SweetScent, 0x9 diff --git a/include/braille_puzzles.h b/include/braille_puzzles.h index 2b0e2bb96..e9d1f5d7c 100644 --- a/include/braille_puzzles.h +++ b/include/braille_puzzles.h @@ -2,6 +2,7 @@ #define GUARD_BRAILLEPUZZLES_H bool8 ShouldDoBrailleStrengthEffect(void); +bool8 ShouldDoBrailleFlyEffect(void); void DoBrailleStrengthEffect(void); void UseFlyAncientTomb_Callback(void); void UseFlyAncientTomb_Finish(void); @@ -10,5 +11,6 @@ bool32 BrailleWait_CheckButtonPress(void); void SealedChamberShakingEffect(u8 taskId); bool8 ShouldDoBrailleDigEffect(void); void DoBrailleDigEffect(void); +void DoBrailleFlyEffect(void); #endif diff --git a/include/data2.h b/include/data2.h index 2837a4451..7a58e3a8e 100644 --- a/include/data2.h +++ b/include/data2.h @@ -44,7 +44,7 @@ extern u8 gEnemyMonElevation[]; extern const u8 gTrainerClassNames[][13]; extern const struct Trainer gTrainers[]; extern u8 gSpeciesNames[][11]; -extern u8 gMoveNames[][13]; +extern const u8 gMoveNames[][13]; extern const u8 gAbilityNames[][13]; extern const u8 gTypeNames[][7]; extern const struct UnknownStructD2 gUnknown_081F9674; diff --git a/include/item_use.h b/include/item_use.h index 1558f7691..aae2b017a 100644 --- a/include/item_use.h +++ b/include/item_use.h @@ -49,5 +49,6 @@ void ItemUseInBattle_Escape(u8); void ItemUseOutOfBattle_EnigmaBerry(u8); void ItemUseInBattle_EnigmaBerry(u8); void ItemUseOutOfBattle_CannotUse(u8); +u8 CheckIfItemIsTMHMOrEvolutionStone(u16 itemId); #endif // GUARD_ITEM_USE_H diff --git a/include/menu.h b/include/menu.h index e1bb4f1e4..24ac39762 100644 --- a/include/menu.h +++ b/include/menu.h @@ -59,7 +59,7 @@ void sub_807274C(u8, u8, u8, u8, const struct MenuAction[], u8, u32); s8 sub_80727CC(void); u8 sub_807288C(u8); void PrintMenuItems(u8, u8, u8, const struct MenuAction[]); -void PrintMenuItemsReordered(u8, u8, u8, const struct MenuAction[], const u8*); +void PrintMenuItemsReordered(u8 left, u8 top, u8 menuItemCount, const struct MenuAction menuItems[], const u8 *order); void InitYesNoMenu(u8, u8, u8); void DisplayYesNoMenu(u8, u8, u32); s8 ProcessMenuInputNoWrap_(void); diff --git a/include/party_menu.h b/include/party_menu.h index 9ce476869..5250486bb 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -53,38 +53,55 @@ struct Struct201B000 u16 unk282; }; +struct Unk2001000 +{ + u8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; + u8 unk4; + u8 unk5; + u8 unk6; + u8 unk7; + u8 unk8; + u8 unk9; + u8 unkA; + u8 unkB; + void* unkC; + u16 array[53561]; +}; + extern u8 ewram[]; +#define ewram01000 (*(struct Unk2001000 *)(ewram + 0x01000)) #define ewram1B000 (*(struct Unk201B000 *)(ewram + 0x1B000)) #define ewram1B000_alt (*(struct Struct201B000 *)(ewram + 0x1B000)) #define EWRAM_1B000 ewram1B000_alt void sub_806AEDC(void); -void sub_806AF4C(); +void sub_806AF4C(u8 arg0, u8 arg1, void* arg2, u8 arg3); void OpenPartyMenu(u8, u8); void OpenPartyMenu(); -u8 sub_806B124(void); +bool8 sub_806B124(void); u8 IsLinkDoubleBattle(void); u8 sub_806B58C(u8); u8 sub_806B58C(u8); void sub_806BC3C(u8, u8); u8 sub_806BD58(u8, u8); u8 sub_806BD58(u8, u8); -u16 sub_806BD80(); // undefined args in battle_party_menu.c +u16 sub_806BD80(u8); void task_pc_turn_off(); -void sub_806BF74(); -void sub_806C994(); -u8 sub_806CA38(u8); +void sub_806BF74(u8 arg0, u8 arg1); +void sub_806C994(u8 arg0, u8 arg1); +u8 sub_806CA38(u8 taskID); void sub_806CB74(u8 taskId); void sub_806CCE4(void); void sub_806CD44(u8 taskId); -void sub_806D538(); -void sub_806D538(); -void sub_806D538(); +void sub_806D538(u8 arg0, u8 arg1); void sub_806D5A4(void); void SetMonIconAnim(); void TryCreatePartyMenuMonIcon(u8, u8, struct Pokemon *); void LoadHeldItemIconGraphics(void); -void LoadHeldItemIconGraphics(void); +void PartyMenuTryGiveMonHeldItem(u8 taskId, u16 newItem, TaskFunc c); void CreateHeldItemIcons_806DC34(); // undefined args void CreateHeldItemIcons_806DC34(); u8 GetMonIconSpriteId_maybe(); @@ -151,5 +168,13 @@ void DoRareCandyItemEffect(u8, u16, TaskFunc); void Task_RareCandy1(u8); void Task_RareCandy2(u8); void sub_8070848(u8 taskId); +void sub_806CA60(u8 taskId); +void sub_806CD5C(u8 taskId); +void DoTakeMail(u8 taskId, TaskFunc func); +void PartyMenuTryGiveMonHeldItem_806ECE8(u8 taskId, TaskFunc func); +void PartyMenuTryGiveMonMail(u8 taskId, TaskFunc func); +void sub_806D668(u8 partyID); +void TaughtMove(u8 taskId); +void StopTryingToTeachMove_806F588(u8 taskId); #endif // GUARD_PARTY_MENU_H diff --git a/include/pokemon_menu.h b/include/pokemon_menu.h index 841e62035..7dfa1c183 100644 --- a/include/pokemon_menu.h +++ b/include/pokemon_menu.h @@ -5,36 +5,43 @@ enum { - POKEMENU_SUMMARY, // 0 - POKEMENU_SWITCH, // 1 - POKEMENU_ITEM, // 2 - POKEMENU_CANCEL, // 3 - POKEMENU_MAIL = 7, - POKEMENU_CUT = 10, - POKEMENU_FLASH, - POKEMENU_ROCK_SMASH, - POKEMENU_STRENGTH, - POKEMENU_SURF, - POKEMENU_FLY, - POKEMENU_DIVE, - POKEMENU_WATERFALL, - POKEMENU_TELEPORT, - POKEMENU_DIG, - POKEMENU_SECRET_POWER, - POKEMENU_MILK_DRINK, - POKEMENU_SOFT_BOILED, - POKEMENU_SWEET_SCENT, + POKEMENU_SUMMARY, // 0 + POKEMENU_SWITCH, // 1 + POKEMENU_ITEM, // 2 + POKEMENU_CANCEL, // 3 + POKEMENU_GIVE_ITEM, // 4 + POKEMENU_TAKE_ITEM, // 5 + POKEMENU_TAKE_MAIL, // 6 + POKEMENU_MAIL, // 7 + POKEMENU_READ_MAIL, // 8 + POKEMENU_CANCEL_SUBMENU, // 9 + POKEMENU_CUT, // 10 + POKEMENU_FLASH, // 11 + POKEMENU_ROCK_SMASH, // 12 + POKEMENU_STRENGTH, // 13 + POKEMENU_SURF, // 14 + POKEMENU_FLY, // 15 + POKEMENU_DIVE, // 16 + POKEMENU_WATERFALL, // 17 + POKEMENU_TELEPORT, // 18 + POKEMENU_DIG, // 19 + POKEMENU_SECRET_POWER, // 20 + POKEMENU_MILK_DRINK, // 21 + POKEMENU_SOFT_BOILED, // 22 + POKEMENU_SWEET_SCENT, // 23 }; +extern u8 gLastFieldPokeMenuOpened; +extern void (*gUnknown_03005CE4)(void); + +void sub_808B5B4(u32 taskID); void sub_8089A70(void); -void sub_808A004(); -void sub_808AB90(void); -void sub_808AB90(void); // unknown args +void sub_808A004(u8 taskID); void sub_808AB90(void); void sub_808AD58(void); void sub_808B020(void); -void sub_808B0C0(u8); +void sub_808B0C0(u8 taskID); void sub_808B508(u8); -void sub_808B564(); +void sub_808B564(void); #endif // GUARD_POKEMON_MENU_H diff --git a/ld_script.txt b/ld_script.txt index 4700c48b0..2bfb27e2a 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -137,7 +137,6 @@ SECTIONS { src/field_effect.o(.text); src/unknown_task.o(.text); src/pokemon_menu.o(.text); - asm/pokemon_menu.o(.text); src/option_menu.o(.text); src/pokedex.o(.text); src/trainer_card.o(.text); @@ -389,7 +388,7 @@ SECTIONS { src/wild_encounter.o(.rodata); data/wild_encounter.o(.rodata); src/field_effect.o(.rodata); - data/pokemon_menu.o(.rodata); + src/pokemon_menu.o(.rodata); src/option_menu.o(.rodata); src/pokedex.o(.rodata); src/trainer_card.o(.rodata); diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c index 73b847713..49e0b8432 100644 --- a/src/battle_party_menu.c +++ b/src/battle_party_menu.c @@ -35,23 +35,16 @@ extern void PartyMenuDrawHPBars(void); extern u8 sub_806B58C(u8); extern u8 GetItemEffectType(); extern void sub_806E750(u8, const struct PartyPopupMenu *, const struct PartyMenuItem *, int); -extern u16 sub_806BD80(); -extern u8 sub_806CA38(); extern void sub_806D5A4(void); extern void sub_802E414(void); extern void sub_80A6DCC(void); extern void sub_806AF4C(); -extern u8 sub_80F9344(void); -extern u8 sub_806B124(void); -extern void sub_806C994(); -extern void sub_806BF74(); extern void sub_806AEDC(void); extern TaskFunc PartyMenuGetPopupMenuFunc(u8, const struct PartyPopupMenu *, const struct PartyMenuItem *, u8); extern void sub_806E7D0(u8, const struct PartyPopupMenu *); extern u8 *sub_8040D08(); extern void sub_8040B8C(void); extern void sub_806E6F0(); -extern void sub_806D538(); extern void nullsub_14(); extern void OpenPartyMenu(); extern u8 sub_803FBBC(void); @@ -586,7 +579,7 @@ static void Task_809538C(void) { do { - if (sub_806B124() == 1) + if (sub_806B124() == TRUE) { sub_806C994(EWRAM_1B000.unk260, gUnknown_020384F0); sub_806BF74(EWRAM_1B000.unk260, 0); diff --git a/src/choose_party.c b/src/choose_party.c index 7b2c833e1..27181cf74 100644 --- a/src/choose_party.c +++ b/src/choose_party.c @@ -6,6 +6,7 @@ #include "name_string_util.h" #include "palette.h" #include "party_menu.h" +#include "pokemon_menu.h" #include "pokemon.h" #include "pokemon_summary_screen.h" #include "rom4.h" @@ -50,10 +51,8 @@ extern void PartyMenuPrintMonsLevelOrStatus(void); extern void PrintPartyMenuMonNicknames(void); extern void sub_806BC3C(u8, u8); extern u8 sub_806B58C(u8); -extern void sub_806D538(); extern u16 sub_806BE38(); extern u8 sub_806CA38(); -extern void sub_808B5B4(); extern TaskFunc PartyMenuGetPopupMenuFunc(u8, const struct PartyPopupMenu *, const struct PartyMenuItem *, u8); extern u8 sub_806B124(); extern void sub_806C994(); @@ -84,8 +83,6 @@ extern void PartyMenuDoPutNicknameTilemap(u16, u8, u8, u8, const u8 *); extern void box_print(u8, int, const u8 *); extern void sub_806BCE8(void); extern void sub_806E750(u8, const struct PartyPopupMenu *, const struct PartyMenuItem *, int); -extern u16 sub_806BD80(); -extern void sub_806BF74(); static void ClearPartySelection(void); static bool8 IsMonAllowedInBattleTower(struct Pokemon *); diff --git a/src/party_menu.c b/src/party_menu.c index 1fcd2cdda..39477e293 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -33,15 +33,6 @@ #include "species.h" #include "party_menu.h" -#define DATA_COUNT (6) - -struct Unk2001000 -{ - u8 unk0; - u8 unk1; - u8 unk2; -}; - struct Unk201C000 { /*0x00*/ struct Pokemon *pokemon; @@ -68,8 +59,6 @@ struct UnknownStruct5 u16 *unk4; }; -extern u8 ewram[]; -#define ewram01000 (*(struct Unk2001000 *)(ewram + 0x01000)) #define ewram1C000 (*(struct Unk201C000 *)(ewram + 0x1C000)) #define ewram1F000 (*(struct Unk201F000 *)(ewram + 0x1F000)) diff --git a/src/pokemon_menu.c b/src/pokemon_menu.c index 6fc692138..c73efc62d 100644 --- a/src/pokemon_menu.c +++ b/src/pokemon_menu.c @@ -5,6 +5,30 @@ #include "palette.h" #include "menu.h" #include "mail_data.h" +#include "songs.h" +#include "sound.h" +#include "main.h" +#include "rom4.h" +#include "menu_helpers.h" +#include "pokemon_summary_screen.h" +#include "moves.h" +#include "data2.h" +#include "strings.h" +#include "item_use.h" +#include "item.h" +#include "event_data.h" +#include "mail.h" +#include "field_player_avatar.h" +#include "fldeff_softboiled.h" +#include "braille_puzzles.h" +#include "field_fadetransition.h" +#include "field_weather.h" +#include "field_effect.h" +#include "field_control_avatar.h" +#include "metatile_behavior.h" +#include "fieldmap.h" +#include "item_menu.h" +#include "player_pc.h" /* Pokemon menu: @@ -13,16 +37,149 @@ Pokemon menu: overworld 'pokemon' menu */ -extern u8 gLastFieldPokeMenuOpened; +struct PokeMenuFieldMoveFunc +{ + bool8 (*func)(void); + u8 field_1; +}; + +extern u8 gUnknown_020384F0; +extern u8 gUnknown_0202E8F4; +extern u8 gUnknown_0202E8F5; +extern u8 gUnknown_0202E8F6; +extern u8 gUnknown_02038561; +extern u16 gUnknown_0202E8F8; +extern u8 ewram[]; +extern void (*gUnknown_03004AE4)(u8 taskID, u16 itemID, TaskFunc func); +extern TaskFunc gUnknown_03005CF0; -EWRAM_DATA u8 sPokeMenuCursorPos = 0; -EWRAM_DATA u8 sPokeMenuOptionsNo = 0; -EWRAM_DATA u8 sPokeMenuOptionsIDs[8] = {0}; // 4 possible field moves and 4 default options +void sub_80E62A0(u8 arg0, struct MailStruct* arg1, void* arg2, u8 arg3); +void sub_808A520(void); +void sub_80A61D0(void); +void CB2_InitFlyRegionMap(void); +u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem); +bool8 SetUpFieldMove_Cut(void); +bool8 SetUpFieldMove_Flash(void); +bool8 SetUpFieldMove_RockSmash(void); +bool8 SetUpFieldMove_Strength(void); +bool8 SetUpFieldMove_Teleport(void); +bool8 SetUpFieldMove_Dig(void); +bool8 SetUpFieldMove_SecretPower(void); +bool8 SetUpFieldMove_SoftBoiled(void); +bool8 SetUpFieldMove_SoftBoiled(void); +bool8 SetUpFieldMove_SweetScent(void); #define sFieldMovesTerminator 0xFF // note: should be changed to 0xFFFF, because currently it makes it impossible to add a field move with 0xFF index -extern const u16 sPokeMenuFieldMoves[]; -extern const struct MenuAction sPokemonMenuActions[]; +// this file's functions +static void sub_808A8A8(void); +static void sub_808B3EC(void); +static void sub_8089D94(u8 taskID); +static void sub_8089E4C(u8 taskID); +static void sub_808A5BC(u8 taskID); +static void sub_808A8D4(u8 taskID); +static void sub_808A73C(u8 taskID); +static void sub_808A848(u8 taskID); +static void sub_808AAF0(u8 taskID); +static void sub_808ABF4(u8 taskID); +static void sub_808AB34(u8 taskID); +static void sub_808ABA8(u8 taskID); +static void sub_808B224(u8 taskID); +static void sub_808B2EC(u8 taskID); +static void sub_808B2B4(u8 taskID); +static void sub_808B25C(u8 taskID); +static void sub_808B1EC(u8 taskID); +static void sub_808B338(u8 taskID); +static void sub_808B4A4(u8 taskID); +static void sub_808B4EC(u8 taskID); +static void sub_808B5E4(u8 taskID); +static void PokemonMenu_Summary(u8 taskID); +static void PokemonMenu_Switch(u8 taskID); +static void PokemonMenu_Item(u8 taskID); +static void PokemonMenu_Cancel(u8 taskID); +static void PokemonMenu_GiveItem(u8 taskID); +static void PokemonMenu_TakeItem(u8 taskID); +static void PokemonMenu_TakeMail(u8 taskID); +static void PokemonMenu_Mail(u8 taskID); +static void PokemonMenu_ReadMail(u8 taskID); +static void PokemonMenu_CancelSubmenu(u8 taskID); +static void PokemonMenu_FieldMove(u8 taskID); +static bool8 SetUpFieldMove_Waterfall(void); +static bool8 SetUpFieldMove_Surf(void); +static bool8 SetUpFieldMove_Fly(void); +static bool8 SetUpFieldMove_Dive(void); + +// ewram data + +EWRAM_DATA static u8 sPokeMenuCursorPos = 0; +EWRAM_DATA static u8 sPokeMenuOptionsNo = 0; +EWRAM_DATA static u8 sPokeMenuOptionsOrder[8] = {0}; // 4 possible field moves and 4 default options + +// iwram common +u8 gLastFieldPokeMenuOpened; +void (*gUnknown_03005CE4)(void); + +// const data + +static const struct MenuAction sPokemonMenuActions[] = +{ + {OtherText_Summary, (void*) PokemonMenu_Summary}, + {OtherText_Switch2, (void*) PokemonMenu_Switch}, + {OtherText_Item, (void*) PokemonMenu_Item}, + {gOtherText_CancelNoTerminator, (void*) PokemonMenu_Cancel}, + {OtherText_Give2, (void*) PokemonMenu_GiveItem}, + {OtherText_Take2, (void*) PokemonMenu_TakeItem}, + {OtherText_Take, (void*) PokemonMenu_TakeMail}, + {OtherText_Mail, (void*) PokemonMenu_Mail}, + {OtherText_Read2, (void*) PokemonMenu_ReadMail}, + {gOtherText_CancelNoTerminator, (void*) PokemonMenu_CancelSubmenu}, + {gMoveNames[MOVE_CUT], (void*) PokemonMenu_FieldMove}, + {gMoveNames[MOVE_FLASH], (void*) PokemonMenu_FieldMove}, + {gMoveNames[MOVE_ROCK_SMASH], (void*) PokemonMenu_FieldMove}, + {gMoveNames[MOVE_STRENGTH], (void*) PokemonMenu_FieldMove}, + {gMoveNames[MOVE_SURF], (void*) PokemonMenu_FieldMove}, + {gMoveNames[MOVE_FLY], (void*) PokemonMenu_FieldMove}, + {gMoveNames[MOVE_DIVE], (void*) PokemonMenu_FieldMove}, + {gMoveNames[MOVE_WATERFALL], (void*) PokemonMenu_FieldMove}, + {gMoveNames[MOVE_TELEPORT], (void*) PokemonMenu_FieldMove}, + {gMoveNames[MOVE_DIG], (void*) PokemonMenu_FieldMove}, + {gMoveNames[MOVE_SECRET_POWER], (void*) PokemonMenu_FieldMove}, + {gMoveNames[MOVE_MILK_DRINK], (void*) PokemonMenu_FieldMove}, + {gMoveNames[MOVE_SOFT_BOILED], (void*) PokemonMenu_FieldMove}, + {gMoveNames[MOVE_SWEET_SCENT], (void*) PokemonMenu_FieldMove}, +}; + +static const u16 sPokeMenuFieldMoves[] = +{ + MOVE_CUT, MOVE_FLASH, MOVE_ROCK_SMASH, MOVE_STRENGTH, + MOVE_SURF, MOVE_FLY, MOVE_DIVE, MOVE_WATERFALL, + MOVE_TELEPORT, MOVE_DIG, MOVE_SECRET_POWER, MOVE_MILK_DRINK, + MOVE_SOFT_BOILED, MOVE_SWEET_SCENT, sFieldMovesTerminator, +}; + +static const u8 sUnknown_39F572[] = {4, 5, 9, 0}; +static const struct PartyPopupMenu sUnknown_0839F578 = {3, 6, sUnknown_39F572}; + +static const u8 sUnknown_39F580[] = {8, 6, 9, 0}; +static const struct PartyPopupMenu sUnknown_0839F584 = {3, 9, sUnknown_39F580}; + +static const struct PokeMenuFieldMoveFunc sFieldMoveFuncs[] = +{ + {SetUpFieldMove_Cut, 0x6}, + {SetUpFieldMove_Flash, 0x9}, + {SetUpFieldMove_RockSmash, 0x9}, + {SetUpFieldMove_Strength, 0x9}, + {SetUpFieldMove_Surf, 0x7}, + {SetUpFieldMove_Fly, 0x9}, + {SetUpFieldMove_Dive, 0x9}, + {SetUpFieldMove_Waterfall, 0x9}, + {SetUpFieldMove_Teleport, 0x9}, + {SetUpFieldMove_Dig, 0x9}, + {SetUpFieldMove_SecretPower, 0x9}, + {SetUpFieldMove_SoftBoiled, 0x10}, + {SetUpFieldMove_SoftBoiled, 0x10}, + {SetUpFieldMove_SweetScent, 0x9}, +}; void sub_8089A70(void) { @@ -30,15 +187,15 @@ void sub_8089A70(void) OpenPartyMenu(0, 0); } -void sub_8089A8C(void) +static void sub_8089A8C(void) { sPokeMenuOptionsNo = 0; // if checking pokemon is an egg, we can't give it an item and it doesn't know any move if (GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_IS_EGG)) { - AppendToList(sPokeMenuOptionsIDs, &sPokeMenuOptionsNo, POKEMENU_SUMMARY); - AppendToList(sPokeMenuOptionsIDs, &sPokeMenuOptionsNo, POKEMENU_SWITCH); - AppendToList(sPokeMenuOptionsIDs, &sPokeMenuOptionsNo, POKEMENU_CANCEL); + AppendToList(sPokeMenuOptionsOrder, &sPokeMenuOptionsNo, POKEMENU_SUMMARY); + AppendToList(sPokeMenuOptionsOrder, &sPokeMenuOptionsNo, POKEMENU_SWITCH); + AppendToList(sPokeMenuOptionsOrder, &sPokeMenuOptionsNo, POKEMENU_CANCEL); } else { @@ -50,43 +207,991 @@ void sub_8089A8C(void) if (GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_MOVE1 + moveID) == sPokeMenuFieldMoves[tableID]) { u8 fieldID = tableID + POKEMENU_FIRST_FIELD_MOVE_ID; - AppendToList(sPokeMenuOptionsIDs, &sPokeMenuOptionsNo, fieldID); + AppendToList(sPokeMenuOptionsOrder, &sPokeMenuOptionsNo, fieldID); break; } } } - AppendToList(sPokeMenuOptionsIDs, &sPokeMenuOptionsNo, POKEMENU_SUMMARY); + AppendToList(sPokeMenuOptionsOrder, &sPokeMenuOptionsNo, POKEMENU_SUMMARY); // can't switch a pokemon if it's the only one in the party if (GetMonData(&gPlayerParty[1], MON_DATA_SPECIES) != 0) - AppendToList(sPokeMenuOptionsIDs, &sPokeMenuOptionsNo, POKEMENU_SWITCH); + AppendToList(sPokeMenuOptionsOrder, &sPokeMenuOptionsNo, POKEMENU_SWITCH); if (ItemIsMail(GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_HELD_ITEM))) - AppendToList(sPokeMenuOptionsIDs, &sPokeMenuOptionsNo, POKEMENU_MAIL); + AppendToList(sPokeMenuOptionsOrder, &sPokeMenuOptionsNo, POKEMENU_MAIL); else - AppendToList(sPokeMenuOptionsIDs, &sPokeMenuOptionsNo, POKEMENU_ITEM); + AppendToList(sPokeMenuOptionsOrder, &sPokeMenuOptionsNo, POKEMENU_ITEM); - AppendToList(sPokeMenuOptionsIDs, &sPokeMenuOptionsNo, POKEMENU_CANCEL); + AppendToList(sPokeMenuOptionsOrder, &sPokeMenuOptionsNo, POKEMENU_CANCEL); } } -void sub_8089BDC(u8 arg0, u8 arg1, u8 arg2, u8 arg3, const struct MenuAction* arg4, const u8* arg5, u8 arg6) +static void sub_8089BDC(u8 arg0, u8 arg1, u8 arg2, u8 noOfOptions, const struct MenuAction* menuActions, const u8* order, u8 arg6) { sub_806D538(5, arg6); - MenuDrawTextWindow(arg0, arg1, arg0 + arg2, (arg3 * 2) + arg1 + 1); - PrintMenuItemsReordered(arg0 + 1, arg1 + 1, arg3, arg4, arg5); + MenuDrawTextWindow(arg0, arg1, arg0 + arg2, (noOfOptions * 2) + arg1 + 1); + PrintMenuItemsReordered(arg0 + 1, arg1 + 1, noOfOptions, menuActions, order); } -void sub_8089C50(u8 arg0, u8 arg1, u8 arg2, u8 arg3, const struct MenuAction* arg4, const u8* arg5) +void sub_8089C50(u8 arg0, u8 arg1, u8 arg2, u8 noOfOptions, const struct MenuAction* menuActions, const u8* order) { - sub_8089BDC(arg0, arg1, arg2, arg3, arg4, arg5, 1); + sub_8089BDC(arg0, arg1, arg2, noOfOptions, menuActions, order, 1); } -void sub_8089C7C(u8 arg0) +static void sub_8089C7C(u8 arg0) { u32 r4 = (u8)(18 - (sPokeMenuOptionsNo << 1)); - sub_8089BDC(19, r4, 10, sPokeMenuOptionsNo, sPokemonMenuActions, sPokeMenuOptionsIDs, 3); + sub_8089BDC(19, r4, 10, sPokeMenuOptionsNo, sPokemonMenuActions, sPokeMenuOptionsOrder, 3); r4 |= 1; InitMenu(0, 20, r4, sPokeMenuOptionsNo, arg0, 9); } + +void sub_8089CD4(u8 taskID) +{ + if (!gPaletteFade.active) + { + switch (sub_806BD80(taskID)) + { + case 1: + PlaySE(SE_SELECT); + gLastFieldPokeMenuOpened = sub_806CA38(taskID); + GetMonNickname(&gPlayerParty[gLastFieldPokeMenuOpened], gStringVar1); + sub_8089A8C(); + sPokeMenuCursorPos = 0; + sub_8089C7C(0); + gTasks[taskID].func = sub_8089D94; + sub_808B5B4(taskID); + break; + case 2: + PlaySE(SE_SELECT); + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + gTasks[taskID].func = sub_8089E4C; + break; + } + } +} + +static void sub_8089D94(u8 taskID) +{ + if (!gPaletteFade.active) + { + if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP) + { + PlaySE(SE_SELECT); + sPokeMenuCursorPos = MoveMenuCursor(-1); + sub_808B5B4(taskID); + } + else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN) + { + PlaySE(SE_SELECT); + sPokeMenuCursorPos = MoveMenuCursor(1); + sub_808B5B4(taskID); + } + else if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + sPokemonMenuActions[sPokeMenuOptionsOrder[sPokeMenuCursorPos]].func(taskID); + sub_808B5B4(taskID); + } + else if (gMain.newKeys & B_BUTTON) + { + PokemonMenu_Cancel(taskID); + sub_808B5B4(taskID); + } + } +} + +static void sub_8089E4C(u8 taskID) +{ + if (!gPaletteFade.active) + { + gLastFieldPokeMenuOpened = 0; + SetMainCallback2(sub_805469C); + DestroyTask(taskID); + } +} + +static void sub_8089E84(void) +{ + GetMonNickname(&gPlayerParty[gLastFieldPokeMenuOpened], gStringVar1); + sub_8089A8C(); + sPokeMenuCursorPos = 0; + sub_8089C7C(0); +} + +static void sub_8089EBC(void) +{ + do + { + if (sub_806B124() == TRUE) + { + sub_806C994(EWRAM_1B000.unk260, gUnknown_020384F0); + sub_806BF74(EWRAM_1B000.unk260, 0); + gLastFieldPokeMenuOpened = gUnknown_020384F0; + sub_8089E84(); + SetMainCallback2(sub_806AEDC); + break; + } + } while (sub_80F9344() != TRUE); +} + +static void sub_8089F14(void) +{ + gPaletteFade.bufferTransferDisabled = 1; + sub_806AF4C(0, 0xFF, sub_8089D94, 5); + SetMainCallback2(sub_8089EBC); +} + +static void sub_8089F44(u8 taskID) +{ + if (!gPaletteFade.active) + { + u8 spriteID = gSprites[gTasks[taskID].data[3] >> 8].data0; + DestroyTask(taskID); + ewram1B000_alt.unk262 = 1; + ShowPokemonSummaryScreen(gPlayerParty, spriteID, gPlayerPartyCount - 1, sub_8089F14, 0); + } +} + +static void PokemonMenu_Summary(u8 taskID) +{ + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + gTasks[taskID].func = sub_8089F44; +} + +void sub_808A004(u8 taskID) +{ + SetTaskFuncWithFollowupFunc(taskID, sub_806CA60, sub_8089CD4); + MenuZeroFillWindowRect(19, 0, 29, 19); +} + +static void PokemonMenu_Switch(u8 taskID) +{ + HandleDestroyMenuCursors(); + ewram01000.unkC = sub_806CD5C; + ewram01000.array[53553] = 1; + sub_808A004(taskID); +} + +static void sub_808A060(u8 taskID) +{ + if (gMain.newKeys == DPAD_UP && sPokeMenuCursorPos != 0) + { + sPokeMenuCursorPos = MoveMenuCursor(-1); + PlaySE(SE_SELECT); + } + if (gMain.newKeys == DPAD_DOWN && sPokeMenuCursorPos != 2) + { + sPokeMenuCursorPos = MoveMenuCursor(1); + PlaySE(SE_SELECT); + } + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + PartyMenuGetPopupMenuFunc(0, &sUnknown_0839F578, (void*) sPokemonMenuActions, sPokeMenuCursorPos)(taskID); + } + else if (gMain.newKeys & B_BUTTON) + { + sub_806E7D0(0, &sUnknown_0839F578); + PokemonMenu_CancelSubmenu(taskID); + } +} + +static void sub_808A100(u8 taskID) +{ + sub_806E750(0, &sUnknown_0839F578, (void*)(sPokemonMenuActions), 0); + sub_806D538(0xD, 2); + gTasks[taskID].func = sub_808A060; +} + +static void PokemonMenu_Item(u8 taskID) +{ + HandleDestroyMenuCursors(); + sPokeMenuCursorPos = 0; + MenuZeroFillWindowRect(19, 0, 29, 19); + gTasks[taskID].func = sub_808A100; +} + +static void sub_808A180(u8 taskID) +{ + if (!gPaletteFade.active) + { + u8 mailID = GetMonData(&gPlayerParty[sub_806CA38(taskID)], MON_DATA_MAIL); + DestroyTask(taskID); + sub_80E62A0(4, &gSaveBlock1.mail[mailID], sub_808A520, 3); + } +} + +static void sub_808A1E0(u8 taskID) +{ + if (gUnknown_0202E8F6 != 1) + { + SetHeldItemIconVisibility(taskID, sub_806CA38(taskID)); + sub_806D538(0, 0); + gTasks[taskID].func = sub_8089CD4; + } +} + +static void sub_808A228(u8 taskID) +{ + if (ItemIsMail(gScriptItemId) && gUnknown_0202E8F4 != 0) + { + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + gTasks[taskID].func = sub_808A180; + } + else + { + MenuZeroFillWindowRect(0, 0, 29, 19); + sub_806D538(0, 0); + gTasks[taskID].func = sub_8089CD4; + } +} + +static void sub_808A2AC(u8 taskID) +{ + if (!gPaletteFade.active) + PartyMenuTryGiveMonHeldItem(taskID, gScriptItemId, sub_808A228); +} + +static void sub_808A2DC(u8 taskID) +{ + u8 mailID = GetMonData(&gPlayerParty[sub_806CA38(taskID)], MON_DATA_MAIL); + DestroyTask(taskID); + sub_80E62A0(4, &gSaveBlock1.mail[mailID], sub_808A520, 3); +} + +static void sub_808A330(u8 taskID) +{ + PartyMenuTryGiveMonHeldItem(taskID, gScriptItemId, sub_808A2DC); +} + +static void sub_808A34C(void) +{ + RunTasks(); +} + +static void sub_808A358(void) +{ + while (1) + { + if (sub_806B124() == TRUE) + { + sub_806C994(EWRAM_1B000.unk260, gLastFieldPokeMenuOpened); + sub_806BF74(EWRAM_1B000.unk260, 0); + SetMainCallback2(sub_806AEDC); + break; + } + if (sub_80F9344() == TRUE) + break; + } +} + +static void sub_808A3A4(void) +{ + while (1) + { + if (sub_806B124() == TRUE) + { + sub_806C994(EWRAM_1B000.unk260, gLastFieldPokeMenuOpened); + sub_806BF74(EWRAM_1B000.unk260, 0); + EWRAM_1B000.unk262 = 3; + sub_8089E84(); + SetMainCallback2(sub_806AEDC); + break; + } + if (sub_80F9344() == TRUE) + break; + } +} + +void sub_808A3F8(void) +{ + if (ItemIsMail(gScriptItemId)) + { + u8 taskID = CreateTask(sub_808A330, 0); + gPaletteFade.bufferTransferDisabled = 1; + sub_806BD58(taskID, 0); + sub_806C994(taskID, gLastFieldPokeMenuOpened); + sub_806BF74(taskID, 0); + if (!(bool8)(GetMonData(&gPlayerParty[sub_806CA38(taskID)], MON_DATA_HELD_ITEM))) + { + SetMainCallback2(sub_808A34C); + return; + } + else + DestroyTask(taskID); + } + gPaletteFade.bufferTransferDisabled = 1; + if (gScriptItemId) + { + sub_806AF4C(0, 0xFF, sub_808A2AC, 0xFF); + SetMainCallback2(sub_808A358); + } + else + { + sub_806AF4C(0, 0xFF, sub_8089D94, 5); + SetMainCallback2(sub_808A3A4); + } +} + +static void sub_808A4D4(void) +{ + while (1) + { + if (sub_806B124() == TRUE) + { + sub_806C994(EWRAM_1B000.unk260, gLastFieldPokeMenuOpened); + sub_806BF74(EWRAM_1B000.unk260, 0); + SetMainCallback2(sub_806AEDC); + break; + } + if (sub_80F9344() == TRUE) + break; + } +} + +void sub_808A520(void) +{ + gPaletteFade.bufferTransferDisabled = 1; + if (gScriptResult == 0) + { + if (gUnknown_0202E8F8) + RemoveBagItem(gUnknown_0202E8F8, 1); + AddBagItem(GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_HELD_ITEM), 1); + TakeMailFromMon(&gPlayerParty[gLastFieldPokeMenuOpened]); + SetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_HELD_ITEM, (void*) &gUnknown_0202E8F8); + sub_806AF4C(0, 0xFF, sub_8089CD4, 0); + } + else + sub_806AF4C(0, 0xFF, sub_808A5BC, 0xFF); + SetMainCallback2(sub_808A4D4); +} + +static void sub_808A5BC(u8 taskID) +{ + if (!gPaletteFade.active) + { + DisplayGiveHeldItemMessage(gLastFieldPokeMenuOpened, gScriptItemId, 0); + gTasks[taskID].func = sub_808A1E0; + } +} + +static void sub_808A604(u8 taskID) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(sub_80A61D0); + DestroyTask(taskID); + } +} + +static void PokemonMenu_GiveItem(u8 taskID) +{ + gUnknown_0202E8F5 = sub_806CA38(taskID); + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + gTasks[taskID].func = sub_808A604; +} + +static void sub_808A678(u8 taskID) +{ + sub_808A8D4(taskID); +} + +static void PokemonMenu_TakeItem(u8 taskID) +{ + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(19, 0, 29, 19); + sub_806D5A4(); + PartyMenuTryGiveMonHeldItem_806ECE8(taskID, sub_808A678); +} + +static void PokemonMenu_TakeMail(u8 taskID) +{ + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(19, 0, 29, 19); + sub_806D5A4(); + DoTakeMail(taskID, sub_808A678); +} + +static void PokemonMenu_Mail(u8 taskID) +{ + HandleDestroyMenuCursors(); + sPokeMenuCursorPos = 0; + MenuZeroFillWindowRect(19, 0, 29, 19); + sub_806E750(0, &sUnknown_0839F584, (void*) sPokemonMenuActions, 0); + gTasks[taskID].func = sub_808A73C; +} + +static void sub_808A73C(u8 taskID) +{ + if (gMain.newAndRepeatedKeys == DPAD_UP) + { + PlaySE(SE_SELECT); + if (sPokeMenuCursorPos == 0) + sPokeMenuCursorPos = MoveMenuCursor(sUnknown_0839F584.unk0 - 1); + else + sPokeMenuCursorPos = MoveMenuCursor(-1); + } + if (gMain.newAndRepeatedKeys == DPAD_DOWN) + { + PlaySE(SE_SELECT); + if (sPokeMenuCursorPos == sUnknown_0839F584.unk0 - 1) + sPokeMenuCursorPos = MoveMenuCursor(1 - sUnknown_0839F584.unk0); + else + sPokeMenuCursorPos = MoveMenuCursor(1); + } + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + PartyMenuGetPopupMenuFunc(0, &sUnknown_0839F584, (void*) sPokemonMenuActions, sPokeMenuCursorPos)(taskID); + } + else if (gMain.newKeys & B_BUTTON) + { + sub_806E7D0(0, &sUnknown_0839F584); + PokemonMenu_Cancel(taskID); + } +} + +static void PokemonMenu_ReadMail(u8 taskID) +{ + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + gTasks[taskID].func = sub_808A848; +} + +static void sub_808A848(u8 taskID) +{ + if (!gPaletteFade.active) + { + u8 mailID = GetMonData(&gPlayerParty[sub_806CA38(taskID)], MON_DATA_MAIL); + DestroyTask(taskID); + HandleReadMail(&gSaveBlock1.mail[mailID], sub_808A8A8, 1); + } +} + +static void sub_808A8A8(void) +{ + gUnknown_020384F0 = gLastFieldPokeMenuOpened; + ewram1B000.unk262 = 4; + sub_8089F14(); +} + +static void sub_808A8D4(u8 taskID) +{ + sPokeMenuCursorPos = 0; + MenuZeroFillWindowRect(19, 0, 29, 19); + sub_806D538(0, 0); + gTasks[taskID].func = sub_8089CD4; +} + +static void PokemonMenu_Cancel(u8 taskID) +{ + HandleDestroyMenuCursors(); + PlaySE(SE_SELECT); + sub_808A8D4(taskID); +} + +static void PokemonMenu_CancelSubmenu(u8 taskID) +{ + HandleDestroyMenuCursors(); + PlaySE(SE_SELECT); + MenuZeroFillWindowRect(19, 0, 29, 19); + sub_806D5A4(); + sub_8089C7C(sPokeMenuCursorPos); + gTasks[taskID].func = sub_8089D94; +} + +#define IS_SOFTBOILED_MILKDRINK(ID)((ID == (POKEMENU_MILK_DRINK - POKEMENU_FIRST_FIELD_MOVE_ID) || ID == (POKEMENU_SOFT_BOILED - POKEMENU_FIRST_FIELD_MOVE_ID))) +#define IS_SURF(ID)((ID == (POKEMENU_SURF - POKEMENU_FIRST_FIELD_MOVE_ID))) +#define IS_FLY(ID)((ID == (POKEMENU_FLY - POKEMENU_FIRST_FIELD_MOVE_ID))) + +#define TASK_FIELD_MOVE_ID 11 + +static void PokemonMenu_FieldMove(u8 taskID) +{ + s16* taskData = gTasks[taskID].data; + HandleDestroyMenuCursors(); + taskData[TASK_FIELD_MOVE_ID] = sPokeMenuOptionsOrder[sPokeMenuCursorPos] - POKEMENU_FIRST_FIELD_MOVE_ID; + if (sub_80F9344() == TRUE) + { + MenuZeroFillWindowRect(19, 0, 29, 19); + if (IS_SOFTBOILED_MILKDRINK(taskData[TASK_FIELD_MOVE_ID])) + sub_806D538(9, 0); + else + sub_806D538(sFieldMoveFuncs[taskData[TASK_FIELD_MOVE_ID]].field_1, 0); + gTasks[taskID].func = sub_808ABF4; + } + else if (taskData[TASK_FIELD_MOVE_ID] <= 7 && FlagGet(BADGE01_GET + taskData[TASK_FIELD_MOVE_ID]) != TRUE) + { + // can't use a field HM move without a proper badge + MenuZeroFillWindowRect(19, 0, 29, 19); + sub_806D5A4(); + sub_806E834(gOtherText_CantBeUsedBadge, 1); + gTasks[taskID].func = sub_808AAF0; + } + else + { + if (sFieldMoveFuncs[taskData[TASK_FIELD_MOVE_ID]].func() == TRUE) + { + sPokeMenuCursorPos = 0; + if (!IS_SOFTBOILED_MILKDRINK(taskData[TASK_FIELD_MOVE_ID])) + { + gTasks[taskID].func = sub_808AB34; + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + } + else + sub_8133D28(taskID); + } + else + { + MenuZeroFillWindowRect(19, 0, 29, 19); + if (IS_SURF(taskData[TASK_FIELD_MOVE_ID]) && TestPlayerAvatarFlags(8)) + sub_806D538(8, 0); + else + sub_806D538(sFieldMoveFuncs[taskData[TASK_FIELD_MOVE_ID]].field_1, 0); + gTasks[taskID].func = sub_808ABF4; + } + } +} + +static void sub_808AAF0(u8 taskID) +{ + if (gUnknown_0202E8F6 != 1 && (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON)) + { + MenuZeroFillWindowRect(0, 14, 29, 19); + PokemonMenu_Cancel(taskID); + } +} + +static void sub_808AB34(u8 taskID) +{ + if (!gPaletteFade.active) + { + if (!IS_FLY(gTasks[taskID].data[TASK_FIELD_MOVE_ID]) || ShouldDoBrailleFlyEffect()) + SetMainCallback2(c2_exit_to_overworld_2_switch); + else + SetMainCallback2(CB2_InitFlyRegionMap); + DestroyTask(taskID); + } +} + +void sub_808AB90(void) +{ + pal_fill_black(); + CreateTask(sub_808ABA8, 8); +} + +static void sub_808ABA8(u8 taskID) +{ + if (sub_807D770() == TRUE) + { + gUnknown_0202FF84[0] = GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_SPECIES); + gUnknown_03005CE4(); + DestroyTask(taskID); + } +} + +static void sub_808ABF4(u8 taskID) +{ + if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) + { + MenuZeroFillWindowRect(1, 17, 28, 18); + PokemonMenu_Cancel(taskID); + } +} + +static void sub_808AC2C(void) +{ + gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + FieldEffectStart(FLDEFF_USE_SURF); +} + +static bool8 SetUpFieldMove_Surf(void) +{ + if (PartyHasMonWithSurf() == TRUE && IsPlayerFacingSurfableFishableWater() == TRUE) + { + gFieldCallback = sub_808AB90; + gUnknown_03005CE4 = sub_808AC2C; + return TRUE; + } + else + return FALSE; +} + +static void sub_808AC8C(void) +{ + gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + FieldEffectStart(FLDEFF_USE_FLY); +} + +static bool8 SetUpFieldMove_Fly(void) +{ + if (ShouldDoBrailleFlyEffect()) + { + gFieldCallback = sub_808AB90; + gUnknown_03005CE4 = DoBrailleFlyEffect; + return TRUE; + } + if (is_light_level_1_2_3_or_6(gMapHeader.mapType) == 1) + { + gFieldCallback = sub_808AB90; + gUnknown_03005CE4 = sub_808AC8C; + return TRUE; + } + return FALSE; +} + +static void sub_808AD0C(void) +{ + while (1) + { + if (sub_806B124() == TRUE) + { + sub_806C994(EWRAM_1B000.unk260, gLastFieldPokeMenuOpened); + sub_806BF74(EWRAM_1B000.unk260, 0); + SetMainCallback2(sub_806AEDC); + break; + } + if (sub_80F9344() == TRUE) + break; + } +} + +void sub_808AD58(void) +{ + gPaletteFade.bufferTransferDisabled = 1; + sub_806AF4C(0, 0xFF, sub_8089CD4, 0); + SetMainCallback2(sub_808AD0C); +} + +u16 unref_sub_808AD88(void) +{ + return GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_SPECIES); +} + +static void sub_808ADAC(void) +{ + gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + FieldEffectStart(FLDEFF_USE_DIVE); +} + +static bool8 SetUpFieldMove_Dive(void) +{ + gUnknown_0202FF84[1] = sub_8068F18(); + if (gUnknown_0202FF84[1]) + { + gFieldCallback = sub_808AB90; + gUnknown_03005CE4 = sub_808ADAC; + return TRUE; + } + else + return FALSE; +} + +static void sub_808AE08(void) +{ + gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + FieldEffectStart(FLDEFF_USE_WATERFALL); +} + +static bool8 SetUpFieldMove_Waterfall(void) +{ + s16 x, y; + GetXYCoordsOneStepInFrontOfPlayer(&x, &y); + if (MetatileBehavior_IsWaterfall(MapGridGetMetatileBehaviorAt(x, y)) == TRUE + && IsPlayerSurfingNorth() == TRUE) + { + gFieldCallback = sub_808AB90; + gUnknown_03005CE4 = sub_808AE08; + return TRUE; + } + else + return FALSE; +} + +static void sub_808AE8C(void) +{ + u8 i; + u8 arg = gScriptItemId - 33; + for (i = 0; i < 6; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES)) + { + sub_806D668(i); + if (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) || !CanMonLearnTMHM(&gPlayerParty[i], arg)) + sub_806BC3C(i, 0x9A); + else if (pokemon_has_move(&gPlayerParty[i], ItemIdToBattleMoveId(gScriptItemId))) + sub_806BC3C(i, 0xA8); + else + sub_806BC3C(i, 0x8C); + } + } +} + +static void sub_808AF20(void) +{ + u8 i; + for (i = 0; i < 6; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES)) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) || !GetEvolutionTargetSpecies(&gPlayerParty[i], 3, gScriptItemId)) + { + sub_806D668(i); + sub_806BC3C(i, 0); + } + } + } +} + +static void sub_808AF80(void) +{ + while (1) + { + if (sub_806B124() == TRUE) + { + if (gUnknown_02038561 == 0) + { + switch (CheckIfItemIsTMHMOrEvolutionStone(gScriptItemId)) + { + case 1: + sub_808AE8C(); + break; + case 2: + sub_808AF20(); + break; + } + } + if (gLastFieldPokeMenuOpened > 5 || !GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_SPECIES)) + gLastFieldPokeMenuOpened = 0; + sub_806C994(ewram1B000.unk260, gLastFieldPokeMenuOpened); + sub_806BF74(ewram1B000.unk260, 0); + SetMainCallback2(sub_806AEDC); + break; + } + if (sub_80F9344() == TRUE) + break; + } +} + +void sub_808B020(void) +{ + gPaletteFade.bufferTransferDisabled = 1; + switch (gUnknown_02038561) + { + case 0: + if (CheckIfItemIsTMHMOrEvolutionStone(gScriptItemId) == 1) + sub_806AF4C(0, 0, sub_808B0C0, 20); + else + sub_806AF4C(0, 0, sub_808B0C0, 3); + break; + case 4: + sub_806AF4C(0, 0, sub_808B1EC, 0xFF); + break; + case 1: + case 3: + sub_806AF4C(0, 0, sub_808B0C0, 4); + break; + } + SetMainCallback2(sub_808AF80); +} + +void sub_808B0C0(u8 taskID) +{ + if (!gPaletteFade.active) + { + switch (sub_806BD80(taskID)) + { + case 1: + gLastFieldPokeMenuOpened = sub_806CA38(taskID); + if (GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_IS_EGG)) + PlaySE(SE_HAZURE); + else + { + sub_806D5A4(); + if (gUnknown_02038561 == 0) + gUnknown_03004AE4(taskID, gScriptItemId, sub_808B224); + if (gUnknown_02038561 == 1) + { + PlaySE(SE_SELECT); + PartyMenuTryGiveMonHeldItem(taskID, gScriptItemId, sub_808B2EC); + } + if (gUnknown_02038561 == 3) + { + PlaySE(SE_SELECT); + PartyMenuTryGiveMonMail(taskID, sub_808B2B4); + } + } + break; + case 2: + gLastFieldPokeMenuOpened = sub_806CA38(taskID); + PlaySE(SE_SELECT); + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + if (gUnknown_02038561 == 0 || gUnknown_02038561 == 1) + gTasks[taskID].func = sub_808B25C; + if (gUnknown_02038561 == 3) + gTasks[taskID].func = sub_808B2B4; + break; + } + } +} + +static void sub_808B1EC(u8 taskID) +{ + if (!gPaletteFade.active) + gUnknown_03004AE4(taskID, gScriptItemId, sub_808B224); +} + +static void sub_808B224(u8 taskID) +{ + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + gTasks[taskID].func = sub_808B25C; +} + +static void sub_808B25C(u8 taskID) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(sub_80A5B40); + DestroyTask(taskID); + } +} + +static void sub_808B288(u8 taskID) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(Mailbox_ReturnToMailListAfterDeposit); + DestroyTask(taskID); + } +} + +static void sub_808B2B4(u8 taskID) +{ + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + gTasks[taskID].func = sub_808B288; +} + +static void sub_808B2EC(u8 taskID) +{ + if (gUnknown_0202E8F4 == 2) + { + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + gTasks[taskID].func = sub_808B338; + } + else + sub_808B224(taskID); +} + +static void sub_808B338(u8 taskID) +{ + if (!gPaletteFade.active) + { + u8 mailID; + + gLastFieldPokeMenuOpened = sub_806CA38(taskID); + mailID = GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_MAIL); + DestroyTask(taskID); + sub_80E62A0(4, &gSaveBlock1.mail[mailID], sub_808B3EC, 3); + } +} + +static void sub_808B3A0(void) +{ + while (1) + { + if (sub_806B124() == TRUE) + { + sub_806C994(EWRAM_1B000.unk260, gLastFieldPokeMenuOpened); + sub_806BF74(EWRAM_1B000.unk260, 0); + SetMainCallback2(sub_806AEDC); + break; + } + if (sub_80F9344() == TRUE) + break; + } +} + +static void sub_808B3EC(void) +{ + IntrCallback callback; + + gPaletteFade.bufferTransferDisabled = 1; + if (gScriptResult == 0) + { + if (gUnknown_0202E8F8) + RemoveBagItem(gUnknown_0202E8F8, 1); + AddBagItem(GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_HELD_ITEM), 1); + TakeMailFromMon(&gPlayerParty[gLastFieldPokeMenuOpened]); + SetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_HELD_ITEM, (void*) &gUnknown_0202E8F8); + CreateTask(sub_808B25C, 5); + gPaletteFade.bufferTransferDisabled = 0; + callback = sub_806AEDC; + } + else + { + sub_806AF4C(0, 0, sub_808B4A4, 0xFF); + callback = sub_808B3A0; + } + SetMainCallback2(callback); +} + +static void sub_808B4A4(u8 taskID) +{ + if (!gPaletteFade.active) + { + DisplayGiveHeldItemMessage(gLastFieldPokeMenuOpened, gScriptItemId, 1); + gTasks[taskID].func = sub_808B4EC; + } +} + +static void sub_808B4EC(u8 taskID) +{ + if (gUnknown_0202E8F6 != 1) + sub_808B224(taskID); +} + +void sub_808B508(u8 taskID) +{ + sub_808B224(taskID); +} + +static void sub_808B518(void) +{ + while (1) + { + if (sub_806B124() == TRUE) + { + sub_806C994(EWRAM_1B000.unk260, gUnknown_020384F0); + sub_806BF74(EWRAM_1B000.unk260, 0); + SetMainCallback2(sub_806AEDC); + break; + } + if (sub_80F9344() == TRUE) + break; + } +} + +void sub_808B564(void) +{ + gPaletteFade.bufferTransferDisabled = 1; + if (sub_809FA30() != 4) + sub_806AF4C(0, 0, TaughtMove, 0xFF); + else + sub_806AF4C(0, 0, StopTryingToTeachMove_806F588, 0xFF); + SetMainCallback2(sub_808B518); +} + +void sub_808B5B4(u32 taskID) +{ + gUnknown_03005CF0 = gTasks[taskID].func; + gTasks[taskID].func = sub_808B5E4; + sub_808B5E4(taskID); +} + +static void sub_808B5E4(u8 taskID) +{ + if (sub_8055870() != TRUE) + gTasks[taskID].func = gUnknown_03005CF0; +} diff --git a/sym_common.txt b/sym_common.txt index 5a535ae87..b6577d375 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -160,14 +160,7 @@ gUnknown_03005560: @ 3005560 gUnknown_030056A0: @ 30056A0 .space 0x640 -@ pokemon_menu - -gLastFieldPokeMenuOpened: @ 3005CE0 - .space 0x4 - -gUnknown_03005CE4: @ 3005CE4 - .space 0x4 - + .include "pokemon_menu.o" .include "pokedex.o" @ pokemon_summary_screen -- cgit v1.2.3 From 8d48b463ec11099fdc21ad8b709503e4b8e24f4c Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 29 Aug 2017 23:30:31 +0200 Subject: lol that warning, cam fix pls --- src/easy_chat.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/easy_chat.c b/src/easy_chat.c index cca8c1355..214e4ef64 100644 --- a/src/easy_chat.c +++ b/src/easy_chat.c @@ -144,7 +144,7 @@ u8 *sub_80EB544(u8 *dst, u16 *words, u16 arg2, u16 arg3) u16 unref_sub_80EB5E0(u16 arg0) { - u8 *chars; + const u8 *chars; u16 i; u16 length; int group, word; -- cgit v1.2.3 From f25a1e6106fef11318301666359ee5ec2d45677f Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 29 Aug 2017 22:14:29 -0400 Subject: Daycare_SendPokemon --- include/daycare.h | 2 +- include/global.h | 36 ++++++---- include/mail_data.h | 2 +- include/pokemon_storage_system.h | 2 + src/daycare.c | 151 ++++++++------------------------------- src/mori_debug_menu.c | 6 +- src/record_mixing.c | 32 ++++----- 7 files changed, 76 insertions(+), 155 deletions(-) diff --git a/include/daycare.h b/include/daycare.h index b90c50610..23ddb1cdd 100644 --- a/include/daycare.h +++ b/include/daycare.h @@ -2,7 +2,7 @@ #define GUARD_DAYCARE_H u8 Daycare_CountPokemon(struct BoxPokemon *); -void sub_8041324(struct BoxPokemon *, struct RecordMixing_UnknownStruct *); +void sub_8041324(struct BoxPokemon *, struct DayCareMailEtc *); void sub_8041790(int i); u16 sub_8041870(u16); void sub_8041940(void); diff --git a/include/global.h b/include/global.h index f076274cc..d5535a9c7 100644 --- a/include/global.h +++ b/include/global.h @@ -534,18 +534,32 @@ struct GabbyAndTyData /*2b1b*/ u8 valB_5:3; }; -struct RecordMixing_UnknownStructSub +struct DayCareMail { - u32 unk0; - u8 data[0x34]; - //u8 data[0x38]; + /*0x00*/ struct MailStruct mail; + /*0x24*/ u8 names[19]; }; -struct RecordMixing_UnknownStruct -{ - struct RecordMixing_UnknownStructSub data[2]; +struct DayCareMailExtra { u32 unk70; - u16 unk74[0x2]; + u16 unk74[2]; +}; + +struct DayCareMailEtc +{ + struct DayCareMail data[2]; + union { + struct DayCareMailExtra rc; + u32 unk70[2]; + } extra; +}; + +struct DayCareData { + struct BoxPokemon mons[2]; + struct DayCareMailEtc mail; + u8 unk_118[2]; + u8 unk_11a; + u8 unk_11b; }; struct LinkBattleRecord @@ -644,11 +658,7 @@ struct SaveBlock1 /* 0x02025734 */ /*0x2DD4*/ struct EasyChatPair easyChatPairs[5]; //Dewford trend [0] and some other stuff /*0x2DFC*/ u8 filler_2DFC[0x8]; /*0x2E04*/ SB_Struct sbStruct; - /*0x2F9C*/ struct BoxPokemon daycareData[2]; - /*0x303C*/ struct RecordMixing_UnknownStruct filler_303C; - /*0x30AC*/ u8 filler_30B4[0x2]; - /*0x30B6*/ u8 filler_30B6; - /*0x30B7*/ u8 filler_30B7[1]; + /*0x2F9C*/ struct DayCareData daycareData; /*0x30B8*/ struct LinkBattleRecord linkBattleRecords[5]; /*0x3108*/ u8 filler_3108[8]; /*0x3110*/ u8 giftRibbons[7]; diff --git a/include/mail_data.h b/include/mail_data.h index df4b385a1..2659c0d37 100644 --- a/include/mail_data.h +++ b/include/mail_data.h @@ -11,6 +11,6 @@ u8 GiveMailToMon2(struct Pokemon *, struct MailStruct *); void TakeMailFromMon(struct Pokemon *); u8 TakeMailFromMon2(struct Pokemon *); bool8 ItemIsMail(u16); -bool8 ItemIsMail(u16); +bool8 MonHasMail(struct Pokemon *); #endif // GUARD_MAIL_DATA_H diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index bd4e7915b..9fe3436ef 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -2,5 +2,7 @@ #define GUARD_POKEMON_STORAGE_SYSTEM_H void ResetPokemonStorageSystem(void); +void BoxMonRestorePP(struct BoxPokemon *); +void party_compaction(void); #endif // GUARD_POKEMON_STORAGE_SYSTEM_H diff --git a/src/daycare.c b/src/daycare.c index cded18207..64eac981e 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -4,6 +4,9 @@ #include "species.h" #include "items.h" #include "string_util.h" +#include "mail_data.h" +#include "name_string_util.h" +#include "pokemon_storage_system.h" extern u8 gLastFieldPokeMenuOpened; @@ -35,7 +38,7 @@ u8 Daycare_CountPokemon(struct BoxPokemon *daycare_data) return count; } -void sub_8041324(struct BoxPokemon * box_pokemon, struct RecordMixing_UnknownStruct * void_pointer) +void sub_8041324(struct BoxPokemon * box_pokemon, struct DayCareMailEtc * void_pointer) { u8 i; u8 specCount; @@ -47,17 +50,17 @@ void sub_8041324(struct BoxPokemon * box_pokemon, struct RecordMixing_UnknownStr specCount ++; if (GetBoxMonData(&box_pokemon[i], MON_DATA_HELD_ITEM) == ITEM_NONE) { - void_pointer->unk74[i] = 0; + void_pointer->extra.rc.unk74[i] = 0; } else { - void_pointer->unk74[i] = 1; + void_pointer->extra.rc.unk74[i] = 1; } } else { - void_pointer->unk74[i] = 1; + void_pointer->extra.rc.unk74[i] = 1; } } - void_pointer->unk70 = specCount; + void_pointer->extra.rc.unk70 = specCount; } s8 Daycare_FindEmptySpot(struct BoxPokemon * daycare_data) @@ -71,126 +74,32 @@ s8 Daycare_FindEmptySpot(struct BoxPokemon * daycare_data) return -1; } -/*void Daycare_SendPokemon(struct Pokemon * mon, struct BoxPokemon * daycare_data){ // unfinished +void Daycare_SendPokemon(struct Pokemon * mon, struct DayCareData * daycare_data){ // unfinished s8 empty_slot; + u8 mail; + u8 *names; - empty_slot = Daycare_FindEmptySpot(daycare_data); - if(MonHasMail(mon) != 0){ // if the mon holds a mail? - u8 empty_slot_times_56 = empty_slot * 56; - u8 * something2 = ((u8 *) (daycare_data + 2)) + empty_slot_times_56 + 36; - StringCopy(something2, gSaveBlock2.playerName); - PadNameString(something2, 0xFC); - something2 += 8; - GetMonNick(mon, something2); - u8 pokerus = GetMonData(mon, MON_DATA_64); - something1 += (u8 * daycare_data) -}*/ - -__attribute__((naked)) -void Daycare_SendPokemon() -{ - // strange stack usage - happens because THUMB ARM only allows R0-R7 to be pushed/popped: - // all registers in reglist must be Lo registers, except that PUSH can include the LR, and POP can include the PC - // the ldm/stm section probably copies some struct, but I'm not sure how the code would look - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r9\n\ - mov r6, r8\n\ - push {r6,r7}\n\ - adds r7, r0, 0\n\ - mov r8, r1\n\ - mov r0, r8\n\ - bl Daycare_FindEmptySpot\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - mov r9, r4\n\ - adds r0, r7, 0\n\ - bl MonHasMail\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _0804144A\n\ - lsls r0, r4, 24\n\ - asrs r0, 24\n\ - lsls r4, r0, 3\n\ - subs r4, r0\n\ - lsls r4, 3\n\ - adds r5, r4, 0\n\ - adds r5, 0xA0\n\ - add r5, r8\n\ - adds r6, r5, 0\n\ - adds r6, 0x24\n\ - ldr r1, _08041490 @ =gSaveBlock2\n\ - adds r0, r6, 0\n\ - bl StringCopy\n\ - adds r0, r6, 0\n\ - movs r1, 0xFC\n\ - bl PadNameString\n\ - adds r6, 0x8\n\ - adds r0, r7, 0\n\ - adds r1, r6, 0\n\ - bl GetMonNick\n\ - adds r0, r7, 0\n\ - movs r1, 0x40\n\ - bl GetMonData\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - add r4, r8\n\ - ldr r2, _08041494 @ =gSaveBlock1\n\ - lsls r1, r0, 3\n\ - adds r1, r0\n\ - lsls r1, 2\n\ - adds r1, r2\n\ - adds r4, 0xA0\n\ - ldr r0, _08041498 @ =0x00002b4c\n\ - adds r1, r0\n\ - ldm r1!, {r0,r2,r3}\n\ - stm r4!, {r0,r2,r3}\n\ - ldm r1!, {r0,r2,r3}\n\ - stm r4!, {r0,r2,r3}\n\ - ldm r1!, {r0,r2,r3}\n\ - stm r4!, {r0,r2,r3}\n\ - adds r0, r7, 0\n\ - bl TakeMailFromMon\n\ -_0804144A:\n\ - mov r2, r9\n\ - lsls r4, r2, 24\n\ - asrs r4, 24\n\ - lsls r5, r4, 2\n\ - adds r4, r5, r4\n\ - lsls r4, 4\n\ - add r4, r8\n\ - adds r0, r4, 0\n\ - adds r1, r7, 0\n\ - movs r2, 0x50\n\ - bl memcpy\n\ - adds r0, r4, 0\n\ - bl BoxMonRestorePP\n\ - movs r0, 0x88\n\ - lsls r0, 1\n\ - add r0, r8\n\ - adds r0, r5\n\ - movs r1, 0\n\ - str r1, [r0]\n\ - adds r0, r7, 0\n\ - bl ZeroMonData\n\ - bl party_compaction\n\ - bl CalculatePlayerPartyCount\n\ - pop {r3,r4}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_08041490: .4byte gSaveBlock2\n\ -_08041494: .4byte gSaveBlock1\n\ -_08041498: .4byte 0x00002b4c\n\ - .syntax divided\n"); + empty_slot = Daycare_FindEmptySpot(daycare_data->mons); + if(MonHasMail(mon)) { + StringCopy((names = daycare_data->mail.data[empty_slot].names), gSaveBlock2.playerName); + PadNameString(names, 0xFC); + names += 8; + GetMonNick(mon, names); + mail = GetMonData(mon, MON_DATA_MAIL); + daycare_data->mail.data[empty_slot].mail = gSaveBlock1.mail[mail]; + TakeMailFromMon(mon); + } + daycare_data->mons[empty_slot] = mon->box; + BoxMonRestorePP(&daycare_data->mons[empty_slot]); + daycare_data->mail.extra.unk70[empty_slot] = 0; + ZeroMonData(mon); + party_compaction(); + CalculatePlayerPartyCount(); } void Daycare_SendPokemon_Special() { - Daycare_SendPokemon(gPlayerParty + gLastFieldPokeMenuOpened, gSaveBlock1.daycareData); + Daycare_SendPokemon(gPlayerParty + gLastFieldPokeMenuOpened, &gSaveBlock1.daycareData); } void sub_80417F4(u8 *); @@ -235,7 +144,7 @@ void sub_804151C(struct Pokemon * mon) } __attribute__((naked)) -u16 sub_8041570(struct BoxPokemon * daycare_data, u8 a2){ +u16 sub_8041570(struct DayCareData * daycare_data, u8 a2){ asm(".syntax unified\n\ push {r4-r7,lr}\n\ mov r7, r9\n\ @@ -339,7 +248,7 @@ extern u8 gSpecialVar_0x8004; u16 sub_8041648() { - return sub_8041570(gSaveBlock1.daycareData, gSpecialVar_0x8004); + return sub_8041570(&gSaveBlock1.daycareData, gSpecialVar_0x8004); } u8 Daycare_GetLevelAfterSteps(struct BoxPokemon * mon, u32 steps){ diff --git a/src/mori_debug_menu.c b/src/mori_debug_menu.c index 4eadaa78b..abb09d889 100644 --- a/src/mori_debug_menu.c +++ b/src/mori_debug_menu.c @@ -67,7 +67,7 @@ u8 MoriDebugMenu_SearchChild(u8 a1, u8 a2, u8 *ptr) s8 MoriDebugMenu_Egg(void) { - if ( Daycare_CountPokemon(gSaveBlock1.daycareData) == 2 && daycare_relationship_score_from_savegame() ) + if ( Daycare_CountPokemon(gSaveBlock1.daycareData.mons) == 2 && daycare_relationship_score_from_savegame() ) sub_8041940(); CloseMenu(); @@ -76,7 +76,7 @@ s8 MoriDebugMenu_Egg(void) s8 MoriDebugMenu_MaleEgg(void) { - if ( Daycare_CountPokemon(gSaveBlock1.daycareData) == 2 && daycare_relationship_score_from_savegame() ) + if ( Daycare_CountPokemon(gSaveBlock1.daycareData.mons) == 2 && daycare_relationship_score_from_savegame() ) sub_8041950(); CloseMenu(); @@ -117,7 +117,7 @@ s8 MoriDebugMenu_BreedEgg(void) SetMonData(&gPlayerParty[loopCounter], MON_DATA_FRIENDSHIP, &friendship); } } - gSaveBlock1.filler_30B6 = -3; + gSaveBlock1.daycareData.extra.unk_2 = -3; CloseMenu(); return 1; } diff --git a/src/record_mixing.c b/src/record_mixing.c index d1083910c..aa6d2c5a9 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -29,7 +29,7 @@ extern u8 ewram[]; #define unk_2018000 (*(struct PlayerRecords *)(ewram + 0x18000)) #define unk_2008000 (*(struct PlayerRecords *)(ewram + 0x08000)) -extern struct RecordMixing_UnknownStruct gUnknown_02038738; +extern struct DayCareMailEtc gUnknown_02038738; extern u16 gSpecialVar_0x8005; u32 gUnknown_03005D2C; @@ -42,7 +42,7 @@ void *recordMixingTvShows = &gSaveBlock1.tvShows; void *gUnknown_083D0274 = &gSaveBlock1.unknown_2ABC; void *gUnknown_083D0278 = &gSaveBlock1.oldMan; void *recordMixingEasyChatPairs = &gSaveBlock1.easyChatPairs; -struct RecordMixing_UnknownStruct *gUnknown_083D0280 = &gUnknown_02038738; +struct DayCareMailEtc *gUnknown_083D0280 = &gUnknown_02038738; void *gUnknown_083D0284 = &gSaveBlock2.filler_A8; #define BUFFER_CHUNK_SIZE 200 @@ -59,7 +59,7 @@ struct PlayerRecords u8 filler1004[0x40]; u8 filler1044[0x40]; struct EasyChatPair easyChatPairs[5]; - struct RecordMixing_UnknownStruct filler10AC; + struct DayCareMailEtc filler10AC; u8 filler1124[0xA4]; u16 filler11C8[0x34]; }; @@ -74,10 +74,10 @@ void RecordMixing_PrepareExchangePacket(void) memcpy(unk_2018000.filler1004, gUnknown_083D0274, sizeof(unk_2008000.filler1004)); memcpy(unk_2018000.filler1044, gUnknown_083D0278, sizeof(unk_2008000.filler1044)); memcpy(unk_2018000.easyChatPairs, recordMixingEasyChatPairs, sizeof(unk_2018000.easyChatPairs)); - gUnknown_02038738.data[0] = gSaveBlock1.filler_303C.data[0]; - gUnknown_02038738.data[1] = gSaveBlock1.filler_303C.data[1]; - sub_8041324(gSaveBlock1.daycareData, &gUnknown_02038738); - memcpy(&unk_2018000.filler10AC, gUnknown_083D0280, sizeof(struct RecordMixing_UnknownStruct)); + gUnknown_02038738.data[0] = gSaveBlock1.daycareData.mail.data[0]; + gUnknown_02038738.data[1] = gSaveBlock1.daycareData.mail.data[1]; + sub_8041324(gSaveBlock1.daycareData.mons, &gUnknown_02038738); + memcpy(&unk_2018000.filler10AC, gUnknown_083D0280, sizeof(struct DayCareMailEtc)); memcpy(unk_2018000.filler1124, gUnknown_083D0284, sizeof(unk_2018000.filler1124)); if (GetMultiplayerId() == 0) @@ -461,10 +461,10 @@ u8 sub_80B9BBC(u16 *a) void sub_80B9BC4(u8 *a, size_t b, u8 c[][2], u8 d, u8 e) { - struct RecordMixing_UnknownStructSub *r6 = (struct RecordMixing_UnknownStructSub *)(a + b * c[d][0]); - struct RecordMixing_UnknownStructSub *src = r6 + c[d][1]; - struct RecordMixing_UnknownStructSub sp0 = *src; - struct RecordMixing_UnknownStructSub *r8 = (struct RecordMixing_UnknownStructSub *)(a + b * c[e][0]); + struct DayCareMail *r6 = (struct DayCareMail *)(a + b * c[d][0]); + struct DayCareMail *src = r6 + c[d][1]; + struct DayCareMail sp0 = *src; + struct DayCareMail *r8 = (struct DayCareMail *)(a + b * c[e][0]); r6 += c[d][1]; *r6 = *(r8 + c[e][1]); @@ -511,7 +511,7 @@ void sub_80B9C6C(u8 *a, u32 b, u8 c, void *d) u16 i; // r3 u16 r7; u8 r1; - struct RecordMixing_UnknownStruct *r6; + struct DayCareMailEtc *r6; //asm("":::"r8"); SeedRng(gLinkPlayers[0].trainerId); @@ -526,7 +526,7 @@ void sub_80B9C6C(u8 *a, u32 b, u8 c, void *d) sp3C = 0; for (i = 0; i < r8; i++) { - r6 = (struct RecordMixing_UnknownStruct *)(a + b * i); + r6 = (struct DayCareMailEtc *)(a + b * i); if (r6->unk70 != 0) { for (r7 = 0; r7 < r6->unk70; r7++) @@ -540,7 +540,7 @@ void sub_80B9C6C(u8 *a, u32 b, u8 c, void *d) //_080B9D46 for (r7 = 0, i = 0; i < r8; i++) { - r6 = (struct RecordMixing_UnknownStruct *)(a + b * i); + r6 = (struct DayCareMailEtc *)(a + b * i); if (sp1C[i][0] == 1 || sp1C[i][1] == 1) sp3C++; if (sp1C[i][0] == 1 && sp1C[i][1] == 0) @@ -596,7 +596,7 @@ void sub_80B9C6C(u8 *a, u32 b, u8 c, void *d) //_080B9E3E for (i = 0; i < 4; i++) { - r6 = (struct RecordMixing_UnknownStruct *)a + b * c; + r6 = (struct DayCareMailEtc *)a + b * c; spC[i] = r6; } r1 = sub_80B9C4C(d) % 3; @@ -630,7 +630,7 @@ void sub_80B9C6C(u8 *a, u32 b, u8 c, void *d) //_080B9EF0 //memcpy(&gSaveBlock1.filler_303C.data[0], a + b * c, 0x38); //memcpy(&gSaveBlock1.filler_303C.data[1], a + b * c + 0x38, 0x38); - r6 = (struct RecordMixing_UnknownStruct *)(a + b * c); + r6 = (struct DayCareMailEtc *)(a + b * c); gSaveBlock1.filler_303C.data[0] = r6->data[0]; gSaveBlock1.filler_303C.data[1] = r6->data[1]; //memcpy(&gSaveBlock1.filler_303C.data[0], &r6->data[0], 0x38); -- cgit v1.2.3 From 36bafa9f9fad1efd7baead651c7f357f6a832023 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 29 Aug 2017 22:41:26 -0400 Subject: sub_8041570 --- include/global.h | 2 +- include/pokemon.h | 4 +- src/daycare.c | 149 ++++++++++++++---------------------------------------- src/pokemon_1.c | 4 +- 4 files changed, 45 insertions(+), 114 deletions(-) diff --git a/include/global.h b/include/global.h index d5535a9c7..3f30544a8 100644 --- a/include/global.h +++ b/include/global.h @@ -550,7 +550,7 @@ struct DayCareMailEtc struct DayCareMail data[2]; union { struct DayCareMailExtra rc; - u32 unk70[2]; + u32 steps[2]; } extra; }; diff --git a/include/pokemon.h b/include/pokemon.h index 594295b40..7d94dbb7d 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -93,6 +93,8 @@ #define MON_DATA_SPATK2 87 #define MON_DATA_SPDEF2 88 +#define MAX_LEVEL 100 + #define MON_MALE 0x00 #define MON_FEMALE 0xFE #define MON_GENDERLESS 0xFF @@ -510,7 +512,7 @@ void sub_803ADE8(struct Pokemon *mon, struct UnknownPokemonStruct *src); void sub_803AF78(struct Pokemon *mon, struct UnknownPokemonStruct *dest); u16 CalculateBoxMonChecksum(struct BoxPokemon *boxMon); void CalculateMonStats(struct Pokemon *mon); -void sub_803B4B4(struct Pokemon *src, struct Pokemon *dest); +void sub_803B4B4(const struct BoxPokemon *src, struct Pokemon *dest); u8 GetLevelFromMonExp(struct Pokemon *mon); u8 GetLevelFromBoxMonExp(struct BoxPokemon *boxMon); u16 GiveMoveToMon(struct Pokemon *mon, u16 move); diff --git a/src/daycare.c b/src/daycare.c index 64eac981e..2f30c1479 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -3,6 +3,7 @@ #include "pokemon.h" #include "species.h" #include "items.h" +#include "text.h" #include "string_util.h" #include "mail_data.h" #include "name_string_util.h" @@ -91,7 +92,7 @@ void Daycare_SendPokemon(struct Pokemon * mon, struct DayCareData * daycare_data } daycare_data->mons[empty_slot] = mon->box; BoxMonRestorePP(&daycare_data->mons[empty_slot]); - daycare_data->mail.extra.unk70[empty_slot] = 0; + daycare_data->mail.extra.steps[empty_slot] = 0; ZeroMonData(mon); party_compaction(); CalculatePlayerPartyCount(); @@ -102,18 +103,18 @@ void Daycare_SendPokemon_Special() Daycare_SendPokemon(gPlayerParty + gLastFieldPokeMenuOpened, &gSaveBlock1.daycareData); } -void sub_80417F4(u8 *); +void sub_80417F4(struct MailStruct *); -void sub_80414C0(struct BoxPokemon * daycare_data) +void sub_80414C0(struct DayCareData * daycare_data) { - u32 second_species; - if((GetBoxMonData(&daycare_data[1], MON_DATA_SPECIES) != 0) && ((second_species = GetBoxMonData(&daycare_data[0], MON_DATA_SPECIES)) == 0)){ - daycare_data[0] = daycare_data[1]; - ZeroBoxMonData(&daycare_data[1]); - memcpy(daycare_data + 2, (u8 *) (daycare_data + 1) + 0x88, 0x38); - *((u32 *)(daycare_data) + 68) = *((u32 *)(daycare_data) + 69); - *((u32 *)(daycare_data) + 69) = second_species; - sub_80417F4((u8 *) (daycare_data + 1) + 0x88); + if((GetBoxMonData(&daycare_data->mons[1], MON_DATA_SPECIES) != 0) && GetBoxMonData(&daycare_data->mons[0], MON_DATA_SPECIES) == 0) + { + daycare_data->mons[0] = daycare_data->mons[1]; + ZeroBoxMonData(&daycare_data->mons[1]); + daycare_data->mail.data[0] = daycare_data->mail.data[1]; + daycare_data->mail.extra.steps[0] = daycare_data->mail.extra.steps[1]; + daycare_data->mail.extra.steps[1] = 0; + sub_80417F4(&daycare_data->mail.data[1].mail); } } @@ -143,105 +144,33 @@ void sub_804151C(struct Pokemon * mon) CalculateMonStats(mon); } -__attribute__((naked)) -u16 sub_8041570(struct DayCareData * daycare_data, u8 a2){ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r9\n\ - mov r6, r8\n\ - push {r6,r7}\n\ - sub sp, 0x68\n\ - adds r5, r0, 0\n\ - lsls r1, 24\n\ - lsrs r4, r1, 24\n\ - lsls r7, r4, 2\n\ - adds r0, r7, r4\n\ - lsls r0, 4\n\ - adds r6, r5, r0\n\ - ldr r1, _08041640 @ =gStringVar1\n\ - adds r0, r6, 0\n\ - bl GetBoxMonNick\n\ - adds r0, r6, 0\n\ - movs r1, 0xB\n\ - bl GetBoxMonData\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - mov r9, r0\n\ - adds r0, r6, 0\n\ - mov r1, sp\n\ - bl sub_803B4B4\n\ - mov r0, sp\n\ - movs r1, 0x38\n\ - bl GetMonData\n\ - cmp r0, 0x64\n\ - beq _080415D8\n\ - mov r0, sp\n\ - movs r1, 0x19\n\ - bl GetMonData\n\ - movs r2, 0x88\n\ - lsls r2, 1\n\ - adds r1, r5, r2\n\ - adds r1, r7\n\ - ldr r1, [r1]\n\ - adds r0, r1\n\ - str r0, [sp, 0x64]\n\ - add r2, sp, 0x64\n\ - mov r0, sp\n\ - movs r1, 0x19\n\ - bl SetMonData\n\ - mov r0, sp\n\ - bl sub_804151C\n\ -_080415D8:\n\ - ldr r0, _08041644 @ =gPlayerParty\n\ - movs r1, 0xFA\n\ - lsls r1, 1\n\ - adds r1, r0\n\ - mov r8, r1\n\ - mov r0, r8\n\ - mov r1, sp\n\ - movs r2, 0x64\n\ - bl memcpy\n\ - lsls r0, r4, 3\n\ - subs r0, r4\n\ - lsls r1, r0, 3\n\ - adds r0, r5, r1\n\ - adds r0, 0xC0\n\ - ldrh r0, [r0]\n\ - cmp r0, 0\n\ - beq _08041610\n\ - adds r4, r1, 0\n\ - adds r4, 0xA0\n\ - adds r4, r5, r4\n\ - mov r0, r8\n\ - adds r1, r4, 0\n\ - bl GiveMailToMon2\n\ - adds r0, r4, 0\n\ - bl sub_80417F4\n\ -_08041610:\n\ - bl party_compaction\n\ - adds r0, r6, 0\n\ - bl ZeroBoxMonData\n\ - movs r2, 0x88\n\ - lsls r2, 1\n\ - adds r0, r5, r2\n\ - adds r0, r7\n\ - movs r1, 0\n\ - str r1, [r0]\n\ - adds r0, r5, 0\n\ - bl sub_80414C0\n\ - bl CalculatePlayerPartyCount\n\ - mov r0, r9\n\ - add sp, 0x68\n\ - pop {r3,r4}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - pop {r4-r7}\n\ - pop {r1}\n\ - bx r1\n\ - .align 2, 0\n\ -_08041640: .4byte gStringVar1\n\ -_08041644: .4byte gPlayerParty\n\ - .syntax divided"); +u16 sub_8041570(struct DayCareData * daycare_data, u8 a2) +{ + u16 species; + u32 experience; + struct Pokemon pokemon; + + GetBoxMonNick(&daycare_data->mons[a2], gStringVar1); + species = GetBoxMonData(&daycare_data->mons[a2], MON_DATA_SPECIES); + sub_803B4B4(&daycare_data->mons[a2], &pokemon); + if (GetMonData(&pokemon, MON_DATA_LEVEL) != MAX_LEVEL) + { + experience = GetMonData(&pokemon, MON_DATA_EXP) + daycare_data->mail.extra.steps[a2]; + SetMonData(&pokemon, MON_DATA_EXP, (u8 *)&experience); + sub_804151C(&pokemon); + } + gPlayerParty[PARTY_SIZE - 1] = pokemon; + if (daycare_data->mail.data[a2].mail.itemId) + { + GiveMailToMon2(&gPlayerParty[PARTY_SIZE - 1], &daycare_data->mail.data[a2].mail); + sub_80417F4(&daycare_data->mail.data[a2].mail); + } + party_compaction(); + ZeroBoxMonData(&daycare_data->mons[a2]); + daycare_data->mail.extra.steps[a2] = 0; + sub_80414C0(daycare_data); + CalculatePlayerPartyCount(); + return species; } extern u8 gSpecialVar_0x8004; diff --git a/src/pokemon_1.c b/src/pokemon_1.c index c65bfa185..5cfd2c794 100644 --- a/src/pokemon_1.c +++ b/src/pokemon_1.c @@ -467,10 +467,10 @@ void CalculateMonStats(struct Pokemon *mon) SetMonData(mon, MON_DATA_HP, (u8 *)¤tHP); } -void sub_803B4B4(struct Pokemon *src, struct Pokemon *dest) +void sub_803B4B4(const struct BoxPokemon *src, struct Pokemon *dest) { u32 value = 0; - memcpy(&dest->box, &src->box, sizeof(struct BoxPokemon)); + dest->box = *src; SetMonData(dest, MON_DATA_STATUS, (u8 *)&value); SetMonData(dest, MON_DATA_HP, (u8 *)&value); SetMonData(dest, MON_DATA_MAX_HP, (u8 *)&value); -- cgit v1.2.3 From 710346afa3c90682e123ebd981fb8c8ffb30784f Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 29 Aug 2017 22:57:04 -0400 Subject: sub_80416A0 --- asm/daycare.s | 37 ------------------------------------- src/daycare.c | 33 +++++++++++++++++++++------------ 2 files changed, 21 insertions(+), 49 deletions(-) diff --git a/asm/daycare.s b/asm/daycare.s index a0ea9124a..50f1eee69 100644 --- a/asm/daycare.s +++ b/asm/daycare.s @@ -6,43 +6,6 @@ .text - thumb_func_start sub_80416A0 -sub_80416A0: @ 80416A0 - push {r4-r6,lr} - mov r6, r8 - push {r6} - adds r5, r0, 0 - lsls r4, r1, 24 - lsrs r4, 24 - lsls r0, r4, 2 - mov r8, r0 - add r4, r8 - lsls r4, 4 - adds r4, r5, r4 - adds r0, r4, 0 - bl GetLevelFromBoxMonExp - adds r6, r0, 0 - lsls r6, 24 - lsrs r6, 24 - movs r0, 0x88 - lsls r0, 1 - adds r5, r0 - add r5, r8 - ldr r1, [r5] - adds r0, r4, 0 - bl Daycare_GetLevelAfterSteps - lsls r0, 24 - lsrs r0, 24 - subs r0, r6 - lsls r0, 24 - lsrs r0, 24 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_80416A0 - thumb_func_start sub_80416E8 sub_80416E8: @ 80416E8 push {r4-r6,lr} diff --git a/src/daycare.c b/src/daycare.c index 2f30c1479..f067ec8ec 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -1,6 +1,7 @@ #include "global.h" #include "daycare.h" #include "pokemon.h" +#include "event_data.h" #include "species.h" #include "items.h" #include "text.h" @@ -144,37 +145,35 @@ void sub_804151C(struct Pokemon * mon) CalculateMonStats(mon); } -u16 sub_8041570(struct DayCareData * daycare_data, u8 a2) +u16 sub_8041570(struct DayCareData * daycare_data, u8 slot) { u16 species; u32 experience; struct Pokemon pokemon; - GetBoxMonNick(&daycare_data->mons[a2], gStringVar1); - species = GetBoxMonData(&daycare_data->mons[a2], MON_DATA_SPECIES); - sub_803B4B4(&daycare_data->mons[a2], &pokemon); + GetBoxMonNick(&daycare_data->mons[slot], gStringVar1); + species = GetBoxMonData(&daycare_data->mons[slot], MON_DATA_SPECIES); + sub_803B4B4(&daycare_data->mons[slot], &pokemon); if (GetMonData(&pokemon, MON_DATA_LEVEL) != MAX_LEVEL) { - experience = GetMonData(&pokemon, MON_DATA_EXP) + daycare_data->mail.extra.steps[a2]; + experience = GetMonData(&pokemon, MON_DATA_EXP) + daycare_data->mail.extra.steps[slot]; SetMonData(&pokemon, MON_DATA_EXP, (u8 *)&experience); sub_804151C(&pokemon); } gPlayerParty[PARTY_SIZE - 1] = pokemon; - if (daycare_data->mail.data[a2].mail.itemId) + if (daycare_data->mail.data[slot].mail.itemId) { - GiveMailToMon2(&gPlayerParty[PARTY_SIZE - 1], &daycare_data->mail.data[a2].mail); - sub_80417F4(&daycare_data->mail.data[a2].mail); + GiveMailToMon2(&gPlayerParty[PARTY_SIZE - 1], &daycare_data->mail.data[slot].mail); + sub_80417F4(&daycare_data->mail.data[slot].mail); } party_compaction(); - ZeroBoxMonData(&daycare_data->mons[a2]); - daycare_data->mail.extra.steps[a2] = 0; + ZeroBoxMonData(&daycare_data->mons[slot]); + daycare_data->mail.extra.steps[slot] = 0; sub_80414C0(daycare_data); CalculatePlayerPartyCount(); return species; } -extern u8 gSpecialVar_0x8004; - u16 sub_8041648() { return sub_8041570(&gSaveBlock1.daycareData, gSpecialVar_0x8004); @@ -186,3 +185,13 @@ u8 Daycare_GetLevelAfterSteps(struct BoxPokemon * mon, u32 steps){ SetBoxMonData(&temp, MON_DATA_EXP, (u8 *) &new_exp); return GetLevelFromBoxMonExp(&temp); } + +u8 sub_80416A0(struct DayCareData *daycareData, u8 slot) +{ + u8 levelBefore; + u8 levelAfter; + + levelBefore = GetLevelFromBoxMonExp(&daycareData->mons[slot]); + levelAfter = Daycare_GetLevelAfterSteps(&daycareData->mons[slot], daycareData->mail.extra.steps[slot]); + return levelAfter - levelBefore; +} -- cgit v1.2.3 From 93809c58cfb8279f4faa086e8c5f8fd65a368fc3 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 29 Aug 2017 23:01:28 -0400 Subject: sub_80416E8 --- asm/daycare.s | 32 -------------------------------- src/daycare.c | 8 ++++++++ 2 files changed, 8 insertions(+), 32 deletions(-) diff --git a/asm/daycare.s b/asm/daycare.s index 50f1eee69..59c77d399 100644 --- a/asm/daycare.s +++ b/asm/daycare.s @@ -6,38 +6,6 @@ .text - thumb_func_start sub_80416E8 -sub_80416E8: @ 80416E8 - push {r4-r6,lr} - adds r6, r0, 0 - lsls r4, r1, 24 - lsrs r4, 24 - adds r1, r4, 0 - bl sub_80416A0 - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 4 - adds r6, r0 - ldr r1, _08041720 @ =gStringVar1 - adds r0, r6, 0 - bl GetBoxMonNick - ldr r0, _08041724 @ =gStringVar2 - adds r1, r5, 0 - movs r2, 0 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - adds r0, r5, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08041720: .4byte gStringVar1 -_08041724: .4byte gStringVar2 - thumb_func_end sub_80416E8 - thumb_func_start sub_8041728 sub_8041728: @ 8041728 push {r4-r6,lr} diff --git a/src/daycare.c b/src/daycare.c index f067ec8ec..bb503b041 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -195,3 +195,11 @@ u8 sub_80416A0(struct DayCareData *daycareData, u8 slot) levelAfter = Daycare_GetLevelAfterSteps(&daycareData->mons[slot], daycareData->mail.extra.steps[slot]); return levelAfter - levelBefore; } + +u8 sub_80416E8(struct DayCareData *dayCareData, u8 slot) +{ + u8 levelDelta = sub_80416A0(dayCareData, slot); + GetBoxMonNick(&dayCareData->mons[slot], gStringVar1); + ConvertIntToDecimalStringN(gStringVar2, levelDelta, STR_CONV_MODE_LEFT_ALIGN, 2); + return levelDelta; +} -- cgit v1.2.3 From b700afb37edcd53b2190fdbae05a4236a60ff46d Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 29 Aug 2017 23:08:06 -0400 Subject: sub_8041728 --- asm/daycare.s | 36 ------------------------------------ src/daycare.c | 11 +++++++++++ 2 files changed, 11 insertions(+), 36 deletions(-) diff --git a/asm/daycare.s b/asm/daycare.s index 59c77d399..7ed5009bc 100644 --- a/asm/daycare.s +++ b/asm/daycare.s @@ -6,42 +6,6 @@ .text - thumb_func_start sub_8041728 -sub_8041728: @ 8041728 - push {r4-r6,lr} - adds r6, r0, 0 - lsls r4, r1, 24 - lsrs r4, 24 - adds r1, r4, 0 - bl sub_80416A0 - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 4 - adds r6, r0 - ldr r1, _08041768 @ =gStringVar1 - adds r0, r6, 0 - bl GetBoxMonNick - movs r0, 0x64 - adds r4, r5, 0 - muls r4, r0 - adds r4, 0x64 - ldr r0, _0804176C @ =gStringVar2 - adds r1, r4, 0 - movs r2, 0 - movs r3, 0x5 - bl ConvertIntToDecimalStringN - adds r0, r4, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08041768: .4byte gStringVar1 -_0804176C: .4byte gStringVar2 - thumb_func_end sub_8041728 - thumb_func_start sub_8041770 sub_8041770: @ 8041770 push {lr} diff --git a/src/daycare.c b/src/daycare.c index bb503b041..77df3de23 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -203,3 +203,14 @@ u8 sub_80416E8(struct DayCareData *dayCareData, u8 slot) ConvertIntToDecimalStringN(gStringVar2, levelDelta, STR_CONV_MODE_LEFT_ALIGN, 2); return levelDelta; } + +int sub_8041728(struct DayCareData *dayCareData, u8 slot) +{ + int cost; + + u8 levelDelta = sub_80416A0(dayCareData, slot); + GetBoxMonNick(&dayCareData->mons[slot], gStringVar1); + cost = 100 + 100 * levelDelta; + ConvertIntToDecimalStringN(gStringVar2, cost, STR_CONV_MODE_LEFT_ALIGN, 5); + return cost; +} -- cgit v1.2.3 From c3f70c933c0a32d70ce1a471cc66833b88ce03f1 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 29 Aug 2017 23:09:53 -0400 Subject: sub_8041770 --- asm/daycare.s | 17 ----------------- src/daycare.c | 9 +++++++-- 2 files changed, 7 insertions(+), 19 deletions(-) diff --git a/asm/daycare.s b/asm/daycare.s index 7ed5009bc..e1ccebec9 100644 --- a/asm/daycare.s +++ b/asm/daycare.s @@ -6,23 +6,6 @@ .text - thumb_func_start sub_8041770 -sub_8041770: @ 8041770 - push {lr} - ldr r0, _08041784 @ =gSaveBlock1 + 0x2F9C - ldr r1, _08041788 @ =gSpecialVar_0x8004 - ldrb r1, [r1] - bl sub_8041728 - ldr r1, _0804178C @ =gSpecialVar_0x8005 - strh r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08041784: .4byte gSaveBlock1 + 0x2F9C -_08041788: .4byte gSpecialVar_0x8004 -_0804178C: .4byte gSpecialVar_0x8005 - thumb_func_end sub_8041770 - thumb_func_start sub_8041790 sub_8041790: @ 8041790 lsls r0, 16 diff --git a/src/daycare.c b/src/daycare.c index 77df3de23..2a66548cf 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -204,9 +204,9 @@ u8 sub_80416E8(struct DayCareData *dayCareData, u8 slot) return levelDelta; } -int sub_8041728(struct DayCareData *dayCareData, u8 slot) +u16 sub_8041728(struct DayCareData *dayCareData, u8 slot) { - int cost; + u16 cost; u8 levelDelta = sub_80416A0(dayCareData, slot); GetBoxMonNick(&dayCareData->mons[slot], gStringVar1); @@ -214,3 +214,8 @@ int sub_8041728(struct DayCareData *dayCareData, u8 slot) ConvertIntToDecimalStringN(gStringVar2, cost, STR_CONV_MODE_LEFT_ALIGN, 5); return cost; } + +void sub_8041770(void) +{ + gSpecialVar_0x8005 = sub_8041728(&gSaveBlock1.daycareData, gSpecialVar_0x8004); +} -- cgit v1.2.3 From 99d478f1d392729a421c4d50ad074f49501857e3 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 29 Aug 2017 23:18:46 -0400 Subject: Through sub_80417B8 --- asm/daycare.s | 53 ----------------------------------------------------- include/daycare.h | 2 +- src/daycare.c | 13 +++++++++++++ 3 files changed, 14 insertions(+), 54 deletions(-) diff --git a/asm/daycare.s b/asm/daycare.s index e1ccebec9..7f62cc9a9 100644 --- a/asm/daycare.s +++ b/asm/daycare.s @@ -6,59 +6,6 @@ .text - thumb_func_start sub_8041790 -sub_8041790: @ 8041790 - lsls r0, 16 - lsrs r0, 16 - ldr r2, _080417AC @ =gSaveBlock1 - ldr r1, _080417B0 @ =0x000030ac - adds r3, r2, r1 - ldr r1, [r3] - adds r1, r0 - str r1, [r3] - ldr r1, _080417B4 @ =0x000030b0 - adds r2, r1 - ldr r1, [r2] - adds r1, r0 - str r1, [r2] - bx lr - .align 2, 0 -_080417AC: .4byte gSaveBlock1 -_080417B0: .4byte 0x000030ac -_080417B4: .4byte 0x000030b0 - thumb_func_end sub_8041790 - - thumb_func_start sub_80417B8 -sub_80417B8: @ 80417B8 - push {r4,r5,lr} - ldr r5, _080417D8 @ =gSpecialVar_0x8004 - ldrh r1, [r5] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - ldr r4, _080417DC @ =gSaveBlock1 + 0x2F9C - adds r0, r4 - movs r1, 0xB - bl GetBoxMonData - cmp r0, 0 - bne _080417E0 - movs r0, 0 - b _080417EC - .align 2, 0 -_080417D8: .4byte gSpecialVar_0x8004 -_080417DC: .4byte gSaveBlock1 + 0x2F9C -_080417E0: - ldrb r1, [r5] - adds r0, r4, 0 - bl sub_80416E8 - lsls r0, 24 - lsrs r0, 24 -_080417EC: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80417B8 - thumb_func_start sub_80417F4 sub_80417F4: @ 80417F4 push {lr} diff --git a/include/daycare.h b/include/daycare.h index 23ddb1cdd..59d10e18f 100644 --- a/include/daycare.h +++ b/include/daycare.h @@ -3,7 +3,7 @@ u8 Daycare_CountPokemon(struct BoxPokemon *); void sub_8041324(struct BoxPokemon *, struct DayCareMailEtc *); -void sub_8041790(int i); +void sub_8041790(u16 i); u16 sub_8041870(u16); void sub_8041940(void); void sub_8041950(void); diff --git a/src/daycare.c b/src/daycare.c index 2a66548cf..fc5e9a0d0 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -219,3 +219,16 @@ void sub_8041770(void) { gSpecialVar_0x8005 = sub_8041728(&gSaveBlock1.daycareData, gSpecialVar_0x8004); } + +void sub_8041790(u16 i) +{ + gSaveBlock1.daycareData.mail.extra.steps[0] += i; + gSaveBlock1.daycareData.mail.extra.steps[1] += i; +} + +u8 sub_80417B8(void) +{ + if (GetBoxMonData(&gSaveBlock1.daycareData.mons[gSpecialVar_0x8004], MON_DATA_SPECIES) != 0) + return sub_80416E8(&gSaveBlock1.daycareData, gSpecialVar_0x8004); + return 0; +} -- cgit v1.2.3 From d3b3cd6568afe59521c5fbc8ff878d3cb06134c9 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 29 Aug 2017 23:38:07 -0400 Subject: sub_80417F4 --- asm/daycare.s | 28 ---------------------------- src/daycare.c | 22 +++++++++++++++++++--- 2 files changed, 19 insertions(+), 31 deletions(-) diff --git a/asm/daycare.s b/asm/daycare.s index 7f62cc9a9..5377e4909 100644 --- a/asm/daycare.s +++ b/asm/daycare.s @@ -6,34 +6,6 @@ .text - thumb_func_start sub_80417F4 -sub_80417F4: @ 80417F4 - push {lr} - movs r3, 0 - movs r2, 0x7 - adds r1, r0, 0 - adds r1, 0x2B -_080417FE: - strb r3, [r1] - subs r1, 0x1 - subs r2, 0x1 - cmp r2, 0 - bge _080417FE - adds r2, r0, 0 - adds r2, 0x2C - movs r3, 0 - adds r1, r0, 0 - adds r1, 0x36 -_08041812: - strb r3, [r1] - subs r1, 0x1 - cmp r1, r2 - bge _08041812 - bl ClearMailStruct - pop {r0} - bx r0 - thumb_func_end sub_80417F4 - thumb_func_start unref_sub_8041824 unref_sub_8041824: @ 8041824 push {r4-r6,lr} diff --git a/src/daycare.c b/src/daycare.c index fc5e9a0d0..d7ded8721 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -104,7 +104,7 @@ void Daycare_SendPokemon_Special() Daycare_SendPokemon(gPlayerParty + gLastFieldPokeMenuOpened, &gSaveBlock1.daycareData); } -void sub_80417F4(struct MailStruct *); +void sub_80417F4(struct DayCareMail *); void sub_80414C0(struct DayCareData * daycare_data) { @@ -115,7 +115,7 @@ void sub_80414C0(struct DayCareData * daycare_data) daycare_data->mail.data[0] = daycare_data->mail.data[1]; daycare_data->mail.extra.steps[0] = daycare_data->mail.extra.steps[1]; daycare_data->mail.extra.steps[1] = 0; - sub_80417F4(&daycare_data->mail.data[1].mail); + sub_80417F4(&daycare_data->mail.data[1]); } } @@ -164,7 +164,7 @@ u16 sub_8041570(struct DayCareData * daycare_data, u8 slot) if (daycare_data->mail.data[slot].mail.itemId) { GiveMailToMon2(&gPlayerParty[PARTY_SIZE - 1], &daycare_data->mail.data[slot].mail); - sub_80417F4(&daycare_data->mail.data[slot].mail); + sub_80417F4(&daycare_data->mail.data[slot]); } party_compaction(); ZeroBoxMonData(&daycare_data->mons[slot]); @@ -232,3 +232,19 @@ u8 sub_80417B8(void) return sub_80416E8(&gSaveBlock1.daycareData, gSpecialVar_0x8004); return 0; } + +void sub_80417F4(struct DayCareMail *mail) +{ + u8 zero; + u8 *names; + u8 *names2; + int i; + zero = 0; + for (i = 7, names = mail->names + 7; i >= 0; i --) + *names-- = zero; + names2 = mail->names + 8; + zero = 0; + names = mail->names + 18; + do *names-- = zero; while ((int)names >= (int)names2); + ClearMailStruct(&mail->mail); +} -- cgit v1.2.3 From 885aa7d1b875de62569319f28a5d2836d5c366e6 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 30 Aug 2017 08:15:03 -0400 Subject: unref_sub_8041824 --- asm/daycare.s | 41 ----------------------------------------- include/global.h | 2 +- src/daycare.c | 13 +++++++++++++ 3 files changed, 14 insertions(+), 42 deletions(-) diff --git a/asm/daycare.s b/asm/daycare.s index 5377e4909..1882ad61e 100644 --- a/asm/daycare.s +++ b/asm/daycare.s @@ -6,47 +6,6 @@ .text - thumb_func_start unref_sub_8041824 -unref_sub_8041824: @ 8041824 - push {r4-r6,lr} - adds r6, r0, 0 - movs r5, 0 -_0804182A: - lsls r4, r5, 2 - adds r0, r4, r5 - lsls r0, 4 - adds r0, r6, r0 - bl ZeroBoxMonData - movs r1, 0x88 - lsls r1, 1 - adds r0, r6, r1 - adds r0, r4 - movs r4, 0 - str r4, [r0] - lsls r0, r5, 3 - subs r0, r5 - lsls r0, 3 - adds r0, 0xA0 - adds r0, r6, r0 - bl sub_80417F4 - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x1 - bls _0804182A - movs r2, 0x8C - lsls r2, 1 - adds r0, r6, r2 - movs r1, 0 - strh r4, [r0] - adds r2, 0x2 - adds r0, r6, r2 - strb r1, [r0] - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end unref_sub_8041824 - thumb_func_start sub_8041870 sub_8041870: @ 8041870 push {r4-r7,lr} diff --git a/include/global.h b/include/global.h index 3f30544a8..ee54007b2 100644 --- a/include/global.h +++ b/include/global.h @@ -557,7 +557,7 @@ struct DayCareMailEtc struct DayCareData { struct BoxPokemon mons[2]; struct DayCareMailEtc mail; - u8 unk_118[2]; + u16 unk_118; u8 unk_11a; u8 unk_11b; }; diff --git a/src/daycare.c b/src/daycare.c index d7ded8721..3f65c5bea 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -248,3 +248,16 @@ void sub_80417F4(struct DayCareMail *mail) do *names-- = zero; while ((int)names >= (int)names2); ClearMailStruct(&mail->mail); } + +void unref_sub_8041824(struct DayCareData *dayCareData) +{ + u8 slot; + for (slot = 0; slot < ARRAY_COUNT(dayCareData->mons); slot ++) + { + ZeroBoxMonData(&dayCareData->mons[slot]); + dayCareData->mail.extra.steps[slot] = 0; + sub_80417F4(&dayCareData->mail.data[slot]); + } + dayCareData->unk_118 = 0; + dayCareData->unk_11a = 0; +} -- cgit v1.2.3 From 448df1097658cab72dca07b48d205acb0c7e7164 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 30 Aug 2017 08:43:32 -0400 Subject: sub_8041870 (find pre-evo) --- asm/daycare.s | 73 ----------------------------------------------------------- src/daycare.c | 27 ++++++++++++++++++++++ 2 files changed, 27 insertions(+), 73 deletions(-) diff --git a/asm/daycare.s b/asm/daycare.s index 1882ad61e..764069e67 100644 --- a/asm/daycare.s +++ b/asm/daycare.s @@ -6,79 +6,6 @@ .text - thumb_func_start sub_8041870 -sub_8041870: @ 8041870 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 16 - lsrs r2, r0, 16 - movs r0, 0 - mov r8, r0 - ldr r0, _0804189C @ =gEvolutionTable - mov r12, r0 -_08041882: - movs r7, 0 - movs r6, 0x1 - movs r4, 0x80 - lsls r4, 9 - movs r5, 0x28 - mov r3, r12 - adds r3, 0x28 -_08041890: - movs r1, 0 - ldrh r0, [r3, 0x4] - cmp r0, r2 - bne _080418A0 - lsrs r2, r4, 16 - b _080418CC - .align 2, 0 -_0804189C: .4byte gEvolutionTable -_080418A0: - adds r1, 0x1 - cmp r1, 0x4 - bgt _080418B6 - lsls r0, r1, 3 - adds r0, r5 - add r0, r12 - ldrh r0, [r0, 0x4] - cmp r0, r2 - bne _080418A0 - lsrs r2, r4, 16 - movs r7, 0x1 -_080418B6: - cmp r7, 0 - bne _080418CC - movs r0, 0x80 - lsls r0, 9 - adds r4, r0 - adds r5, 0x28 - adds r3, 0x28 - adds r6, 0x1 - ldr r0, _080418EC @ =0x0000019b - cmp r6, r0 - ble _08041890 -_080418CC: - movs r0, 0xCE - lsls r0, 1 - cmp r6, r0 - beq _080418DE - movs r0, 0x1 - add r8, r0 - mov r0, r8 - cmp r0, 0x4 - ble _08041882 -_080418DE: - adds r0, r2, 0 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080418EC: .4byte 0x0000019b - thumb_func_end sub_8041870 - thumb_func_start sub_80418F0 sub_80418F0: @ 80418F0 push {r4,lr} diff --git a/src/daycare.c b/src/daycare.c index 3f65c5bea..dc1300182 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -261,3 +261,30 @@ void unref_sub_8041824(struct DayCareData *dayCareData) dayCareData->unk_118 = 0; dayCareData->unk_11a = 0; } + +u16 sub_8041870(u16 species) +{ + int i, j, k; + bool8 found; + for (i = 0; i < 5; i ++) + { + found = FALSE; + for (j = 1; j < NUM_SPECIES; j ++) + { + for (k = 0; k < 5; k ++) + { + if (gEvolutionTable[j].evolutions[k].targetSpecies == species) + { + species = j; + found = TRUE; + break; + } + } + if (found) + break; + } + if (j == 412) + break; + } + return species; +} -- cgit v1.2.3 From 2286c4306f67a091e48eac724536e7853117f0e0 Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 30 Aug 2017 09:20:21 -0400 Subject: Fix building --- src/mori_debug_menu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mori_debug_menu.c b/src/mori_debug_menu.c index abb09d889..df3446d3e 100644 --- a/src/mori_debug_menu.c +++ b/src/mori_debug_menu.c @@ -117,7 +117,7 @@ s8 MoriDebugMenu_BreedEgg(void) SetMonData(&gPlayerParty[loopCounter], MON_DATA_FRIENDSHIP, &friendship); } } - gSaveBlock1.daycareData.extra.unk_2 = -3; + gSaveBlock1.daycareData.unk_11a = -3; CloseMenu(); return 1; } -- cgit v1.2.3 From b9cf26cd89505d5340343adeb41312012714fd0a Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 30 Aug 2017 09:24:57 -0400 Subject: sub_80418F0 --- asm/daycare.s | 23 ----------------------- src/daycare.c | 7 +++++++ 2 files changed, 7 insertions(+), 23 deletions(-) diff --git a/asm/daycare.s b/asm/daycare.s index 764069e67..c30582c2e 100644 --- a/asm/daycare.s +++ b/asm/daycare.s @@ -6,29 +6,6 @@ .text - thumb_func_start sub_80418F0 -sub_80418F0: @ 80418F0 - push {r4,lr} - adds r4, r0, 0 - bl Random - lsls r0, 16 - lsrs r0, 16 - ldr r1, _08041918 @ =0x0000fffe - bl __umodsi3 - adds r0, 0x1 - movs r1, 0x8C - lsls r1, 1 - adds r4, r1 - strh r0, [r4] - movs r0, 0x86 - bl FlagSet - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08041918: .4byte 0x0000fffe - thumb_func_end sub_80418F0 - thumb_func_start sub_804191C sub_804191C: @ 804191C push {r4,lr} diff --git a/src/daycare.c b/src/daycare.c index dc1300182..3fc1ecd99 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -9,6 +9,7 @@ #include "mail_data.h" #include "name_string_util.h" #include "pokemon_storage_system.h" +#include "rng.h" extern u8 gLastFieldPokeMenuOpened; @@ -288,3 +289,9 @@ u16 sub_8041870(u16 species) } return species; } + +void sub_80418F0(struct DayCareData *dayCareData) +{ + dayCareData->unk_118 = (Random() % 0xfffe) + 1; + FlagSet(0x86); +} -- cgit v1.2.3 From 7755869cd2b521cb0a608f5f71c8a272e81cb214 Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 30 Aug 2017 09:43:48 -0400 Subject: Convert egg moves and daycare strings/pointers to C objects --- data/daycare.s | 17 - data/egg_moves.inc | 1306 ------------------------------------- include/data/pokemon/egg_moves.h | 1318 ++++++++++++++++++++++++++++++++++++++ ld_script.txt | 2 +- src/daycare.c | 12 + 5 files changed, 1331 insertions(+), 1324 deletions(-) delete mode 100644 data/daycare.s delete mode 100644 data/egg_moves.inc create mode 100644 include/data/pokemon/egg_moves.h diff --git a/data/daycare.s b/data/daycare.s deleted file mode 100644 index 92eb4637e..000000000 --- a/data/daycare.s +++ /dev/null @@ -1,17 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - -@ 82091DC - .include "data/egg_moves.inc" - - .align 2 -gUnknown_08209AC4:: @ 8209AC4 - .4byte DaycareText_GetAlongVeryWell - .4byte DaycareText_GetAlong - .4byte DaycareText_DontLikeOther - .4byte DaycareText_PlayOther - -gUnknown_08209AD4:: @ 8209AD4 - .string "タマゴ$" diff --git a/data/egg_moves.inc b/data/egg_moves.inc deleted file mode 100644 index e684e04ce..000000000 --- a/data/egg_moves.inc +++ /dev/null @@ -1,1306 +0,0 @@ - .align 2 -gEggMoves:: @ 82091DC - egg_moves_begin SPECIES_BULBASAUR - .2byte MOVE_LIGHT_SCREEN - .2byte MOVE_SKULL_BASH - .2byte MOVE_SAFEGUARD - .2byte MOVE_CHARM - .2byte MOVE_PETAL_DANCE - .2byte MOVE_MAGICAL_LEAF - .2byte MOVE_GRASS_WHISTLE - .2byte MOVE_CURSE - - egg_moves_begin SPECIES_CHARMANDER - .2byte MOVE_BELLY_DRUM - .2byte MOVE_ANCIENT_POWER - .2byte MOVE_ROCK_SLIDE - .2byte MOVE_BITE - .2byte MOVE_OUTRAGE - .2byte MOVE_BEAT_UP - .2byte MOVE_SWORDS_DANCE - .2byte MOVE_DRAGON_DANCE - - egg_moves_begin SPECIES_SQUIRTLE - .2byte MOVE_MIRROR_COAT - .2byte MOVE_HAZE - .2byte MOVE_MIST - .2byte MOVE_FORESIGHT - .2byte MOVE_FLAIL - .2byte MOVE_REFRESH - .2byte MOVE_MUD_SPORT - .2byte MOVE_YAWN - - egg_moves_begin SPECIES_PIDGEY - .2byte MOVE_PURSUIT - .2byte MOVE_FAINT_ATTACK - .2byte MOVE_FORESIGHT - .2byte MOVE_STEEL_WING - .2byte MOVE_AIR_CUTTER - - egg_moves_begin SPECIES_RATTATA - .2byte MOVE_SCREECH - .2byte MOVE_FLAME_WHEEL - .2byte MOVE_FURY_SWIPES - .2byte MOVE_BITE - .2byte MOVE_COUNTER - .2byte MOVE_REVERSAL - .2byte MOVE_UPROAR - .2byte MOVE_SWAGGER - - egg_moves_begin SPECIES_SPEAROW - .2byte MOVE_FAINT_ATTACK - .2byte MOVE_FALSE_SWIPE - .2byte MOVE_SCARY_FACE - .2byte MOVE_QUICK_ATTACK - .2byte MOVE_TRI_ATTACK - .2byte MOVE_ASTONISH - .2byte MOVE_SKY_ATTACK - - egg_moves_begin SPECIES_EKANS - .2byte MOVE_PURSUIT - .2byte MOVE_SLAM - .2byte MOVE_SPITE - .2byte MOVE_BEAT_UP - .2byte MOVE_POISON_FANG - - egg_moves_begin SPECIES_SANDSHREW - .2byte MOVE_FLAIL - .2byte MOVE_SAFEGUARD - .2byte MOVE_COUNTER - .2byte MOVE_RAPID_SPIN - .2byte MOVE_ROCK_SLIDE - .2byte MOVE_METAL_CLAW - .2byte MOVE_SWORDS_DANCE - .2byte MOVE_CRUSH_CLAW - - egg_moves_begin SPECIES_NIDORAN_F - .2byte MOVE_SUPERSONIC - .2byte MOVE_DISABLE - .2byte MOVE_TAKE_DOWN - .2byte MOVE_FOCUS_ENERGY - .2byte MOVE_CHARM - .2byte MOVE_COUNTER - .2byte MOVE_BEAT_UP - - egg_moves_begin SPECIES_NIDORAN_M - .2byte MOVE_COUNTER - .2byte MOVE_DISABLE - .2byte MOVE_SUPERSONIC - .2byte MOVE_TAKE_DOWN - .2byte MOVE_AMNESIA - .2byte MOVE_CONFUSION - .2byte MOVE_BEAT_UP - - egg_moves_begin SPECIES_VULPIX - .2byte MOVE_FAINT_ATTACK - .2byte MOVE_HYPNOSIS - .2byte MOVE_FLAIL - .2byte MOVE_SPITE - .2byte MOVE_DISABLE - .2byte MOVE_HOWL - .2byte MOVE_PSYCH_UP - .2byte MOVE_HEAT_WAVE - - egg_moves_begin SPECIES_ZUBAT - .2byte MOVE_QUICK_ATTACK - .2byte MOVE_PURSUIT - .2byte MOVE_FAINT_ATTACK - .2byte MOVE_GUST - .2byte MOVE_WHIRLWIND - .2byte MOVE_CURSE - - egg_moves_begin SPECIES_ODDISH - .2byte MOVE_SWORDS_DANCE - .2byte MOVE_RAZOR_LEAF - .2byte MOVE_FLAIL - .2byte MOVE_SYNTHESIS - .2byte MOVE_CHARM - .2byte MOVE_INGRAIN - - egg_moves_begin SPECIES_PARAS - .2byte MOVE_FALSE_SWIPE - .2byte MOVE_SCREECH - .2byte MOVE_COUNTER - .2byte MOVE_PSYBEAM - .2byte MOVE_FLAIL - .2byte MOVE_SWEET_SCENT - .2byte MOVE_LIGHT_SCREEN - .2byte MOVE_PURSUIT - - egg_moves_begin SPECIES_VENONAT - .2byte MOVE_BATON_PASS - .2byte MOVE_SCREECH - .2byte MOVE_GIGA_DRAIN - .2byte MOVE_SIGNAL_BEAM - - egg_moves_begin SPECIES_DIGLETT - .2byte MOVE_FAINT_ATTACK - .2byte MOVE_SCREECH - .2byte MOVE_ANCIENT_POWER - .2byte MOVE_PURSUIT - .2byte MOVE_BEAT_UP - .2byte MOVE_UPROAR - .2byte MOVE_ROCK_SLIDE - - egg_moves_begin SPECIES_MEOWTH - .2byte MOVE_SPITE - .2byte MOVE_CHARM - .2byte MOVE_HYPNOSIS - .2byte MOVE_AMNESIA - .2byte MOVE_PSYCH_UP - .2byte MOVE_ASSIST - - egg_moves_begin SPECIES_PSYDUCK - .2byte MOVE_HYPNOSIS - .2byte MOVE_PSYBEAM - .2byte MOVE_FORESIGHT - .2byte MOVE_LIGHT_SCREEN - .2byte MOVE_FUTURE_SIGHT - .2byte MOVE_PSYCHIC - .2byte MOVE_CROSS_CHOP - .2byte MOVE_REFRESH - - egg_moves_begin SPECIES_MANKEY - .2byte MOVE_ROCK_SLIDE - .2byte MOVE_FORESIGHT - .2byte MOVE_MEDITATE - .2byte MOVE_COUNTER - .2byte MOVE_REVERSAL - .2byte MOVE_BEAT_UP - .2byte MOVE_REVENGE - .2byte MOVE_SMELLING_SALT - - egg_moves_begin SPECIES_GROWLITHE - .2byte MOVE_BODY_SLAM - .2byte MOVE_SAFEGUARD - .2byte MOVE_CRUNCH - .2byte MOVE_THRASH - .2byte MOVE_FIRE_SPIN - .2byte MOVE_HOWL - .2byte MOVE_HEAT_WAVE - - egg_moves_begin SPECIES_POLIWAG - .2byte MOVE_MIST - .2byte MOVE_SPLASH - .2byte MOVE_BUBBLE_BEAM - .2byte MOVE_HAZE - .2byte MOVE_MIND_READER - .2byte MOVE_WATER_SPORT - .2byte MOVE_ICE_BALL - - egg_moves_begin SPECIES_ABRA - .2byte MOVE_ENCORE - .2byte MOVE_BARRIER - .2byte MOVE_KNOCK_OFF - .2byte MOVE_FIRE_PUNCH - .2byte MOVE_THUNDER_PUNCH - .2byte MOVE_ICE_PUNCH - - egg_moves_begin SPECIES_MACHOP - .2byte MOVE_LIGHT_SCREEN - .2byte MOVE_MEDITATE - .2byte MOVE_ROLLING_KICK - .2byte MOVE_ENCORE - .2byte MOVE_SMELLING_SALT - .2byte MOVE_COUNTER - .2byte MOVE_ROCK_SLIDE - - egg_moves_begin SPECIES_BELLSPROUT - .2byte MOVE_SWORDS_DANCE - .2byte MOVE_ENCORE - .2byte MOVE_REFLECT - .2byte MOVE_SYNTHESIS - .2byte MOVE_LEECH_LIFE - .2byte MOVE_INGRAIN - .2byte MOVE_MAGICAL_LEAF - - egg_moves_begin SPECIES_TENTACOOL - .2byte MOVE_AURORA_BEAM - .2byte MOVE_MIRROR_COAT - .2byte MOVE_RAPID_SPIN - .2byte MOVE_HAZE - .2byte MOVE_SAFEGUARD - .2byte MOVE_CONFUSE_RAY - - egg_moves_begin SPECIES_GEODUDE - .2byte MOVE_MEGA_PUNCH - .2byte MOVE_ROCK_SLIDE - .2byte MOVE_BLOCK - - egg_moves_begin SPECIES_PONYTA - .2byte MOVE_FLAME_WHEEL - .2byte MOVE_THRASH - .2byte MOVE_DOUBLE_KICK - .2byte MOVE_HYPNOSIS - .2byte MOVE_CHARM - .2byte MOVE_DOUBLE_EDGE - - egg_moves_begin SPECIES_SLOWPOKE - .2byte MOVE_SAFEGUARD - .2byte MOVE_BELLY_DRUM - .2byte MOVE_FUTURE_SIGHT - .2byte MOVE_STOMP - .2byte MOVE_MUD_SPORT - .2byte MOVE_SLEEP_TALK - .2byte MOVE_SNORE - - egg_moves_begin SPECIES_FARFETCHD - .2byte MOVE_STEEL_WING - .2byte MOVE_FORESIGHT - .2byte MOVE_MIRROR_MOVE - .2byte MOVE_GUST - .2byte MOVE_QUICK_ATTACK - .2byte MOVE_FLAIL - .2byte MOVE_FEATHER_DANCE - .2byte MOVE_CURSE - - egg_moves_begin SPECIES_DODUO - .2byte MOVE_QUICK_ATTACK - .2byte MOVE_SUPERSONIC - .2byte MOVE_HAZE - .2byte MOVE_FAINT_ATTACK - .2byte MOVE_FLAIL - .2byte MOVE_ENDEAVOR - - egg_moves_begin SPECIES_SEEL - .2byte MOVE_LICK - .2byte MOVE_PERISH_SONG - .2byte MOVE_DISABLE - .2byte MOVE_HORN_DRILL - .2byte MOVE_SLAM - .2byte MOVE_ENCORE - .2byte MOVE_FAKE_OUT - .2byte MOVE_ICICLE_SPEAR - - egg_moves_begin SPECIES_GRIMER - .2byte MOVE_HAZE - .2byte MOVE_MEAN_LOOK - .2byte MOVE_LICK - .2byte MOVE_IMPRISON - .2byte MOVE_CURSE - .2byte MOVE_SHADOW_PUNCH - .2byte MOVE_EXPLOSION - - egg_moves_begin SPECIES_SHELLDER - .2byte MOVE_BUBBLE_BEAM - .2byte MOVE_TAKE_DOWN - .2byte MOVE_BARRIER - .2byte MOVE_RAPID_SPIN - .2byte MOVE_SCREECH - .2byte MOVE_ICICLE_SPEAR - - egg_moves_begin SPECIES_GASTLY - .2byte MOVE_PSYWAVE - .2byte MOVE_PERISH_SONG - .2byte MOVE_HAZE - .2byte MOVE_ASTONISH - .2byte MOVE_WILL_O_WISP - .2byte MOVE_GRUDGE - .2byte MOVE_EXPLOSION - - egg_moves_begin SPECIES_ONIX - .2byte MOVE_ROCK_SLIDE - .2byte MOVE_FLAIL - .2byte MOVE_EXPLOSION - .2byte MOVE_BLOCK - - egg_moves_begin SPECIES_DROWZEE - .2byte MOVE_BARRIER - .2byte MOVE_ASSIST - .2byte MOVE_ROLE_PLAY - .2byte MOVE_FIRE_PUNCH - .2byte MOVE_THUNDER_PUNCH - .2byte MOVE_ICE_PUNCH - - egg_moves_begin SPECIES_KRABBY - .2byte MOVE_DIG - .2byte MOVE_HAZE - .2byte MOVE_AMNESIA - .2byte MOVE_FLAIL - .2byte MOVE_SLAM - .2byte MOVE_KNOCK_OFF - .2byte MOVE_SWORDS_DANCE - - egg_moves_begin SPECIES_EXEGGCUTE - .2byte MOVE_SYNTHESIS - .2byte MOVE_MOONLIGHT - .2byte MOVE_REFLECT - .2byte MOVE_ANCIENT_POWER - .2byte MOVE_PSYCH_UP - .2byte MOVE_INGRAIN - .2byte MOVE_CURSE - - egg_moves_begin SPECIES_CUBONE - .2byte MOVE_ROCK_SLIDE - .2byte MOVE_ANCIENT_POWER - .2byte MOVE_BELLY_DRUM - .2byte MOVE_SCREECH - .2byte MOVE_SKULL_BASH - .2byte MOVE_PERISH_SONG - .2byte MOVE_SWORDS_DANCE - - egg_moves_begin SPECIES_LICKITUNG - .2byte MOVE_BELLY_DRUM - .2byte MOVE_MAGNITUDE - .2byte MOVE_BODY_SLAM - .2byte MOVE_CURSE - .2byte MOVE_SMELLING_SALT - .2byte MOVE_SLEEP_TALK - .2byte MOVE_SNORE - .2byte MOVE_SUBSTITUTE - - egg_moves_begin SPECIES_KOFFING - .2byte MOVE_SCREECH - .2byte MOVE_PSYWAVE - .2byte MOVE_PSYBEAM - .2byte MOVE_DESTINY_BOND - .2byte MOVE_PAIN_SPLIT - .2byte MOVE_WILL_O_WISP - - egg_moves_begin SPECIES_RHYHORN - .2byte MOVE_CRUNCH - .2byte MOVE_REVERSAL - .2byte MOVE_ROCK_SLIDE - .2byte MOVE_COUNTER - .2byte MOVE_MAGNITUDE - .2byte MOVE_SWORDS_DANCE - .2byte MOVE_CURSE - .2byte MOVE_CRUSH_CLAW - - egg_moves_begin SPECIES_CHANSEY - .2byte MOVE_PRESENT - .2byte MOVE_METRONOME - .2byte MOVE_HEAL_BELL - .2byte MOVE_AROMATHERAPY - .2byte MOVE_SUBSTITUTE - - egg_moves_begin SPECIES_TANGELA - .2byte MOVE_FLAIL - .2byte MOVE_CONFUSION - .2byte MOVE_MEGA_DRAIN - .2byte MOVE_REFLECT - .2byte MOVE_AMNESIA - .2byte MOVE_LEECH_SEED - .2byte MOVE_NATURE_POWER - - egg_moves_begin SPECIES_KANGASKHAN - .2byte MOVE_STOMP - .2byte MOVE_FORESIGHT - .2byte MOVE_FOCUS_ENERGY - .2byte MOVE_SAFEGUARD - .2byte MOVE_DISABLE - .2byte MOVE_COUNTER - .2byte MOVE_CRUSH_CLAW - .2byte MOVE_SUBSTITUTE - - egg_moves_begin SPECIES_HORSEA - .2byte MOVE_FLAIL - .2byte MOVE_AURORA_BEAM - .2byte MOVE_OCTAZOOKA - .2byte MOVE_DISABLE - .2byte MOVE_SPLASH - .2byte MOVE_DRAGON_RAGE - .2byte MOVE_DRAGON_BREATH - - egg_moves_begin SPECIES_GOLDEEN - .2byte MOVE_PSYBEAM - .2byte MOVE_HAZE - .2byte MOVE_HYDRO_PUMP - .2byte MOVE_SLEEP_TALK - .2byte MOVE_MUD_SPORT - - egg_moves_begin SPECIES_MR_MIME - .2byte MOVE_FUTURE_SIGHT - .2byte MOVE_HYPNOSIS - .2byte MOVE_MIMIC - .2byte MOVE_PSYCH_UP - .2byte MOVE_FAKE_OUT - .2byte MOVE_TRICK - - egg_moves_begin SPECIES_SCYTHER - .2byte MOVE_COUNTER - .2byte MOVE_SAFEGUARD - .2byte MOVE_BATON_PASS - .2byte MOVE_RAZOR_WIND - .2byte MOVE_REVERSAL - .2byte MOVE_LIGHT_SCREEN - .2byte MOVE_ENDURE - .2byte MOVE_SILVER_WIND - - egg_moves_begin SPECIES_PINSIR - .2byte MOVE_FURY_ATTACK - .2byte MOVE_FLAIL - .2byte MOVE_FALSE_SWIPE - .2byte MOVE_FAINT_ATTACK - - egg_moves_begin SPECIES_LAPRAS - .2byte MOVE_FORESIGHT - .2byte MOVE_SUBSTITUTE - .2byte MOVE_TICKLE - .2byte MOVE_REFRESH - .2byte MOVE_DRAGON_DANCE - .2byte MOVE_CURSE - .2byte MOVE_SLEEP_TALK - .2byte MOVE_HORN_DRILL - - egg_moves_begin SPECIES_EEVEE - .2byte MOVE_CHARM - .2byte MOVE_FLAIL - .2byte MOVE_ENDURE - .2byte MOVE_CURSE - .2byte MOVE_TICKLE - .2byte MOVE_WISH - - egg_moves_begin SPECIES_OMANYTE - .2byte MOVE_BUBBLE_BEAM - .2byte MOVE_AURORA_BEAM - .2byte MOVE_SLAM - .2byte MOVE_SUPERSONIC - .2byte MOVE_HAZE - .2byte MOVE_ROCK_SLIDE - .2byte MOVE_SPIKES - - egg_moves_begin SPECIES_KABUTO - .2byte MOVE_BUBBLE_BEAM - .2byte MOVE_AURORA_BEAM - .2byte MOVE_RAPID_SPIN - .2byte MOVE_DIG - .2byte MOVE_FLAIL - .2byte MOVE_KNOCK_OFF - .2byte MOVE_CONFUSE_RAY - - egg_moves_begin SPECIES_AERODACTYL - .2byte MOVE_WHIRLWIND - .2byte MOVE_PURSUIT - .2byte MOVE_FORESIGHT - .2byte MOVE_STEEL_WING - .2byte MOVE_DRAGON_BREATH - .2byte MOVE_CURSE - - egg_moves_begin SPECIES_SNORLAX - .2byte MOVE_LICK - .2byte MOVE_CHARM - .2byte MOVE_DOUBLE_EDGE - .2byte MOVE_CURSE - .2byte MOVE_FISSURE - .2byte MOVE_SUBSTITUTE - - egg_moves_begin SPECIES_DRATINI - .2byte MOVE_LIGHT_SCREEN - .2byte MOVE_MIST - .2byte MOVE_HAZE - .2byte MOVE_SUPERSONIC - .2byte MOVE_DRAGON_BREATH - .2byte MOVE_DRAGON_DANCE - - egg_moves_begin SPECIES_CHIKORITA - .2byte MOVE_VINE_WHIP - .2byte MOVE_LEECH_SEED - .2byte MOVE_COUNTER - .2byte MOVE_ANCIENT_POWER - .2byte MOVE_FLAIL - .2byte MOVE_NATURE_POWER - .2byte MOVE_INGRAIN - .2byte MOVE_GRASS_WHISTLE - - egg_moves_begin SPECIES_CYNDAQUIL - .2byte MOVE_FURY_SWIPES - .2byte MOVE_QUICK_ATTACK - .2byte MOVE_REVERSAL - .2byte MOVE_THRASH - .2byte MOVE_FORESIGHT - .2byte MOVE_COVET - .2byte MOVE_HOWL - .2byte MOVE_CRUSH_CLAW - - egg_moves_begin SPECIES_TOTODILE - .2byte MOVE_CRUNCH - .2byte MOVE_THRASH - .2byte MOVE_HYDRO_PUMP - .2byte MOVE_ANCIENT_POWER - .2byte MOVE_ROCK_SLIDE - .2byte MOVE_MUD_SPORT - .2byte MOVE_WATER_SPORT - .2byte MOVE_DRAGON_CLAW - - egg_moves_begin SPECIES_SENTRET - .2byte MOVE_DOUBLE_EDGE - .2byte MOVE_PURSUIT - .2byte MOVE_SLASH - .2byte MOVE_FOCUS_ENERGY - .2byte MOVE_REVERSAL - .2byte MOVE_SUBSTITUTE - .2byte MOVE_TRICK - .2byte MOVE_ASSIST - - egg_moves_begin SPECIES_HOOTHOOT - .2byte MOVE_MIRROR_MOVE - .2byte MOVE_SUPERSONIC - .2byte MOVE_FAINT_ATTACK - .2byte MOVE_WING_ATTACK - .2byte MOVE_WHIRLWIND - .2byte MOVE_SKY_ATTACK - .2byte MOVE_FEATHER_DANCE - - egg_moves_begin SPECIES_LEDYBA - .2byte MOVE_PSYBEAM - .2byte MOVE_BIDE - .2byte MOVE_SILVER_WIND - - egg_moves_begin SPECIES_SPINARAK - .2byte MOVE_PSYBEAM - .2byte MOVE_DISABLE - .2byte MOVE_SONIC_BOOM - .2byte MOVE_BATON_PASS - .2byte MOVE_PURSUIT - .2byte MOVE_SIGNAL_BEAM - - egg_moves_begin SPECIES_CHINCHOU - .2byte MOVE_FLAIL - .2byte MOVE_SCREECH - .2byte MOVE_AMNESIA - - egg_moves_begin SPECIES_PICHU - .2byte MOVE_REVERSAL - .2byte MOVE_BIDE - .2byte MOVE_PRESENT - .2byte MOVE_ENCORE - .2byte MOVE_DOUBLE_SLAP - .2byte MOVE_WISH - .2byte MOVE_CHARGE - - egg_moves_begin SPECIES_CLEFFA - .2byte MOVE_PRESENT - .2byte MOVE_METRONOME - .2byte MOVE_AMNESIA - .2byte MOVE_BELLY_DRUM - .2byte MOVE_SPLASH - .2byte MOVE_MIMIC - .2byte MOVE_WISH - .2byte MOVE_SUBSTITUTE - - egg_moves_begin SPECIES_IGGLYBUFF - .2byte MOVE_PERISH_SONG - .2byte MOVE_PRESENT - .2byte MOVE_FAINT_ATTACK - .2byte MOVE_WISH - .2byte MOVE_FAKE_TEARS - - egg_moves_begin SPECIES_TOGEPI - .2byte MOVE_PRESENT - .2byte MOVE_MIRROR_MOVE - .2byte MOVE_PECK - .2byte MOVE_FORESIGHT - .2byte MOVE_FUTURE_SIGHT - .2byte MOVE_SUBSTITUTE - .2byte MOVE_PSYCH_UP - - egg_moves_begin SPECIES_NATU - .2byte MOVE_HAZE - .2byte MOVE_DRILL_PECK - .2byte MOVE_QUICK_ATTACK - .2byte MOVE_FAINT_ATTACK - .2byte MOVE_STEEL_WING - .2byte MOVE_PSYCH_UP - .2byte MOVE_FEATHER_DANCE - .2byte MOVE_REFRESH - - egg_moves_begin SPECIES_MAREEP - .2byte MOVE_TAKE_DOWN - .2byte MOVE_BODY_SLAM - .2byte MOVE_SAFEGUARD - .2byte MOVE_SCREECH - .2byte MOVE_REFLECT - .2byte MOVE_ODOR_SLEUTH - .2byte MOVE_CHARGE - - egg_moves_begin SPECIES_MARILL - .2byte MOVE_LIGHT_SCREEN - .2byte MOVE_PRESENT - .2byte MOVE_AMNESIA - .2byte MOVE_FUTURE_SIGHT - .2byte MOVE_BELLY_DRUM - .2byte MOVE_PERISH_SONG - .2byte MOVE_SUPERSONIC - .2byte MOVE_SUBSTITUTE - - egg_moves_begin SPECIES_SUDOWOODO - .2byte MOVE_SELF_DESTRUCT - - egg_moves_begin SPECIES_HOPPIP - .2byte MOVE_CONFUSION - .2byte MOVE_ENCORE - .2byte MOVE_DOUBLE_EDGE - .2byte MOVE_REFLECT - .2byte MOVE_AMNESIA - .2byte MOVE_HELPING_HAND - .2byte MOVE_PSYCH_UP - - egg_moves_begin SPECIES_AIPOM - .2byte MOVE_COUNTER - .2byte MOVE_SCREECH - .2byte MOVE_PURSUIT - .2byte MOVE_AGILITY - .2byte MOVE_SPITE - .2byte MOVE_SLAM - .2byte MOVE_DOUBLE_SLAP - .2byte MOVE_BEAT_UP - - egg_moves_begin SPECIES_SUNKERN - .2byte MOVE_GRASS_WHISTLE - .2byte MOVE_ENCORE - .2byte MOVE_LEECH_SEED - .2byte MOVE_NATURE_POWER - .2byte MOVE_CURSE - .2byte MOVE_HELPING_HAND - - egg_moves_begin SPECIES_YANMA - .2byte MOVE_WHIRLWIND - .2byte MOVE_REVERSAL - .2byte MOVE_LEECH_LIFE - .2byte MOVE_SIGNAL_BEAM - .2byte MOVE_SILVER_WIND - - egg_moves_begin SPECIES_WOOPER - .2byte MOVE_BODY_SLAM - .2byte MOVE_ANCIENT_POWER - .2byte MOVE_SAFEGUARD - .2byte MOVE_CURSE - .2byte MOVE_MUD_SPORT - .2byte MOVE_STOCKPILE - .2byte MOVE_SWALLOW - .2byte MOVE_SPIT_UP - - egg_moves_begin SPECIES_MURKROW - .2byte MOVE_WHIRLWIND - .2byte MOVE_DRILL_PECK - .2byte MOVE_MIRROR_MOVE - .2byte MOVE_WING_ATTACK - .2byte MOVE_SKY_ATTACK - .2byte MOVE_CONFUSE_RAY - .2byte MOVE_FEATHER_DANCE - .2byte MOVE_PERISH_SONG - - egg_moves_begin SPECIES_MISDREAVUS - .2byte MOVE_SCREECH - .2byte MOVE_DESTINY_BOND - .2byte MOVE_PSYCH_UP - .2byte MOVE_IMPRISON - - egg_moves_begin SPECIES_GIRAFARIG - .2byte MOVE_TAKE_DOWN - .2byte MOVE_AMNESIA - .2byte MOVE_FORESIGHT - .2byte MOVE_FUTURE_SIGHT - .2byte MOVE_BEAT_UP - .2byte MOVE_PSYCH_UP - .2byte MOVE_WISH - .2byte MOVE_MAGIC_COAT - - egg_moves_begin SPECIES_PINECO - .2byte MOVE_REFLECT - .2byte MOVE_PIN_MISSILE - .2byte MOVE_FLAIL - .2byte MOVE_SWIFT - .2byte MOVE_COUNTER - .2byte MOVE_SAND_TOMB - - egg_moves_begin SPECIES_DUNSPARCE - .2byte MOVE_BIDE - .2byte MOVE_ANCIENT_POWER - .2byte MOVE_ROCK_SLIDE - .2byte MOVE_BITE - .2byte MOVE_HEADBUTT - .2byte MOVE_ASTONISH - .2byte MOVE_CURSE - - egg_moves_begin SPECIES_GLIGAR - .2byte MOVE_METAL_CLAW - .2byte MOVE_WING_ATTACK - .2byte MOVE_RAZOR_WIND - .2byte MOVE_COUNTER - .2byte MOVE_SAND_TOMB - - egg_moves_begin SPECIES_SNUBBULL - .2byte MOVE_METRONOME - .2byte MOVE_FAINT_ATTACK - .2byte MOVE_REFLECT - .2byte MOVE_PRESENT - .2byte MOVE_CRUNCH - .2byte MOVE_HEAL_BELL - .2byte MOVE_SNORE - .2byte MOVE_SMELLING_SALT - - egg_moves_begin SPECIES_QWILFISH - .2byte MOVE_FLAIL - .2byte MOVE_HAZE - .2byte MOVE_BUBBLE_BEAM - .2byte MOVE_SUPERSONIC - .2byte MOVE_ASTONISH - - egg_moves_begin SPECIES_SHUCKLE - .2byte MOVE_SWEET_SCENT - - egg_moves_begin SPECIES_HERACROSS - .2byte MOVE_HARDEN - .2byte MOVE_BIDE - .2byte MOVE_FLAIL - .2byte MOVE_FALSE_SWIPE - - egg_moves_begin SPECIES_SNEASEL - .2byte MOVE_COUNTER - .2byte MOVE_SPITE - .2byte MOVE_FORESIGHT - .2byte MOVE_REFLECT - .2byte MOVE_BITE - .2byte MOVE_CRUSH_CLAW - .2byte MOVE_FAKE_OUT - - egg_moves_begin SPECIES_TEDDIURSA - .2byte MOVE_CRUNCH - .2byte MOVE_TAKE_DOWN - .2byte MOVE_SEISMIC_TOSS - .2byte MOVE_COUNTER - .2byte MOVE_METAL_CLAW - .2byte MOVE_FAKE_TEARS - .2byte MOVE_YAWN - .2byte MOVE_SLEEP_TALK - - egg_moves_begin SPECIES_SLUGMA - .2byte MOVE_ACID_ARMOR - .2byte MOVE_HEAT_WAVE - - egg_moves_begin SPECIES_SWINUB - .2byte MOVE_TAKE_DOWN - .2byte MOVE_BITE - .2byte MOVE_BODY_SLAM - .2byte MOVE_ROCK_SLIDE - .2byte MOVE_ANCIENT_POWER - .2byte MOVE_MUD_SHOT - .2byte MOVE_ICICLE_SPEAR - .2byte MOVE_DOUBLE_EDGE - - egg_moves_begin SPECIES_CORSOLA - .2byte MOVE_ROCK_SLIDE - .2byte MOVE_SCREECH - .2byte MOVE_MIST - .2byte MOVE_AMNESIA - .2byte MOVE_BARRIER - .2byte MOVE_INGRAIN - .2byte MOVE_CONFUSE_RAY - .2byte MOVE_ICICLE_SPEAR - - egg_moves_begin SPECIES_REMORAID - .2byte MOVE_AURORA_BEAM - .2byte MOVE_OCTAZOOKA - .2byte MOVE_SUPERSONIC - .2byte MOVE_HAZE - .2byte MOVE_SCREECH - .2byte MOVE_THUNDER_WAVE - .2byte MOVE_ROCK_BLAST - - egg_moves_begin SPECIES_DELIBIRD - .2byte MOVE_AURORA_BEAM - .2byte MOVE_QUICK_ATTACK - .2byte MOVE_FUTURE_SIGHT - .2byte MOVE_SPLASH - .2byte MOVE_RAPID_SPIN - .2byte MOVE_ICE_BALL - - egg_moves_begin SPECIES_MANTINE - .2byte MOVE_TWISTER - .2byte MOVE_HYDRO_PUMP - .2byte MOVE_HAZE - .2byte MOVE_SLAM - .2byte MOVE_MUD_SPORT - .2byte MOVE_ROCK_SLIDE - - egg_moves_begin SPECIES_SKARMORY - .2byte MOVE_DRILL_PECK - .2byte MOVE_PURSUIT - .2byte MOVE_WHIRLWIND - .2byte MOVE_SKY_ATTACK - .2byte MOVE_CURSE - - egg_moves_begin SPECIES_HOUNDOUR - .2byte MOVE_FIRE_SPIN - .2byte MOVE_RAGE - .2byte MOVE_PURSUIT - .2byte MOVE_COUNTER - .2byte MOVE_SPITE - .2byte MOVE_REVERSAL - .2byte MOVE_BEAT_UP - .2byte MOVE_WILL_O_WISP - - egg_moves_begin SPECIES_PHANPY - .2byte MOVE_FOCUS_ENERGY - .2byte MOVE_BODY_SLAM - .2byte MOVE_ANCIENT_POWER - .2byte MOVE_SNORE - .2byte MOVE_COUNTER - .2byte MOVE_FISSURE - - egg_moves_begin SPECIES_STANTLER - .2byte MOVE_SPITE - .2byte MOVE_DISABLE - .2byte MOVE_BITE - .2byte MOVE_SWAGGER - .2byte MOVE_PSYCH_UP - .2byte MOVE_EXTRASENSORY - - egg_moves_begin SPECIES_TYROGUE - .2byte MOVE_RAPID_SPIN - .2byte MOVE_HI_JUMP_KICK - .2byte MOVE_MACH_PUNCH - .2byte MOVE_MIND_READER - .2byte MOVE_HELPING_HAND - - egg_moves_begin SPECIES_SMOOCHUM - .2byte MOVE_MEDITATE - .2byte MOVE_PSYCH_UP - .2byte MOVE_FAKE_OUT - .2byte MOVE_WISH - .2byte MOVE_ICE_PUNCH - - egg_moves_begin SPECIES_ELEKID - .2byte MOVE_KARATE_CHOP - .2byte MOVE_BARRIER - .2byte MOVE_ROLLING_KICK - .2byte MOVE_MEDITATE - .2byte MOVE_CROSS_CHOP - .2byte MOVE_FIRE_PUNCH - .2byte MOVE_ICE_PUNCH - - egg_moves_begin SPECIES_MAGBY - .2byte MOVE_KARATE_CHOP - .2byte MOVE_MEGA_PUNCH - .2byte MOVE_BARRIER - .2byte MOVE_SCREECH - .2byte MOVE_CROSS_CHOP - .2byte MOVE_THUNDER_PUNCH - - egg_moves_begin SPECIES_MILTANK - .2byte MOVE_PRESENT - .2byte MOVE_REVERSAL - .2byte MOVE_SEISMIC_TOSS - .2byte MOVE_ENDURE - .2byte MOVE_PSYCH_UP - .2byte MOVE_CURSE - .2byte MOVE_HELPING_HAND - .2byte MOVE_SLEEP_TALK - - egg_moves_begin SPECIES_LARVITAR - .2byte MOVE_PURSUIT - .2byte MOVE_STOMP - .2byte MOVE_OUTRAGE - .2byte MOVE_FOCUS_ENERGY - .2byte MOVE_ANCIENT_POWER - .2byte MOVE_DRAGON_DANCE - .2byte MOVE_CURSE - - egg_moves_begin SPECIES_TREECKO - .2byte MOVE_CRUNCH - .2byte MOVE_MUD_SPORT - .2byte MOVE_ENDEAVOR - .2byte MOVE_LEECH_SEED - .2byte MOVE_DRAGON_BREATH - .2byte MOVE_CRUSH_CLAW - - egg_moves_begin SPECIES_TORCHIC - .2byte MOVE_COUNTER - .2byte MOVE_REVERSAL - .2byte MOVE_ENDURE - .2byte MOVE_SWAGGER - .2byte MOVE_ROCK_SLIDE - .2byte MOVE_SMELLING_SALT - - egg_moves_begin SPECIES_MUDKIP - .2byte MOVE_REFRESH - .2byte MOVE_UPROAR - .2byte MOVE_CURSE - .2byte MOVE_STOMP - .2byte MOVE_ICE_BALL - .2byte MOVE_MIRROR_COAT - - egg_moves_begin SPECIES_POOCHYENA - .2byte MOVE_ASTONISH - .2byte MOVE_POISON_FANG - .2byte MOVE_COVET - .2byte MOVE_LEER - .2byte MOVE_YAWN - - egg_moves_begin SPECIES_ZIGZAGOON - .2byte MOVE_CHARM - .2byte MOVE_PURSUIT - .2byte MOVE_SUBSTITUTE - .2byte MOVE_TICKLE - .2byte MOVE_TRICK - - egg_moves_begin SPECIES_LOTAD - .2byte MOVE_SYNTHESIS - .2byte MOVE_RAZOR_LEAF - .2byte MOVE_SWEET_SCENT - .2byte MOVE_LEECH_SEED - .2byte MOVE_FLAIL - .2byte MOVE_WATER_GUN - - egg_moves_begin SPECIES_SEEDOT - .2byte MOVE_LEECH_SEED - .2byte MOVE_AMNESIA - .2byte MOVE_QUICK_ATTACK - .2byte MOVE_RAZOR_WIND - .2byte MOVE_TAKE_DOWN - .2byte MOVE_FALSE_SWIPE - - egg_moves_begin SPECIES_NINCADA - .2byte MOVE_ENDURE - .2byte MOVE_FAINT_ATTACK - .2byte MOVE_GUST - .2byte MOVE_SILVER_WIND - - egg_moves_begin SPECIES_TAILLOW - .2byte MOVE_PURSUIT - .2byte MOVE_SUPERSONIC - .2byte MOVE_REFRESH - .2byte MOVE_MIRROR_MOVE - .2byte MOVE_RAGE - .2byte MOVE_SKY_ATTACK - - egg_moves_begin SPECIES_SHROOMISH - .2byte MOVE_FAKE_TEARS - .2byte MOVE_SWAGGER - .2byte MOVE_CHARM - .2byte MOVE_FALSE_SWIPE - .2byte MOVE_HELPING_HAND - - egg_moves_begin SPECIES_SPINDA - .2byte MOVE_ENCORE - .2byte MOVE_ROCK_SLIDE - .2byte MOVE_ASSIST - .2byte MOVE_DISABLE - .2byte MOVE_BATON_PASS - .2byte MOVE_WISH - .2byte MOVE_TRICK - .2byte MOVE_SMELLING_SALT - - egg_moves_begin SPECIES_WINGULL - .2byte MOVE_MIST - .2byte MOVE_TWISTER - .2byte MOVE_AGILITY - .2byte MOVE_GUST - .2byte MOVE_WATER_SPORT - - egg_moves_begin SPECIES_SURSKIT - .2byte MOVE_FORESIGHT - .2byte MOVE_MUD_SHOT - .2byte MOVE_PSYBEAM - .2byte MOVE_HYDRO_PUMP - .2byte MOVE_MIND_READER - - egg_moves_begin SPECIES_WAILMER - .2byte MOVE_DOUBLE_EDGE - .2byte MOVE_THRASH - .2byte MOVE_SWAGGER - .2byte MOVE_SNORE - .2byte MOVE_SLEEP_TALK - .2byte MOVE_CURSE - .2byte MOVE_FISSURE - .2byte MOVE_TICKLE - - egg_moves_begin SPECIES_SKITTY - .2byte MOVE_HELPING_HAND - .2byte MOVE_PSYCH_UP - .2byte MOVE_UPROAR - .2byte MOVE_FAKE_TEARS - .2byte MOVE_WISH - .2byte MOVE_BATON_PASS - .2byte MOVE_SUBSTITUTE - .2byte MOVE_TICKLE - - egg_moves_begin SPECIES_KECLEON - .2byte MOVE_DISABLE - .2byte MOVE_MAGIC_COAT - .2byte MOVE_TRICK - - egg_moves_begin SPECIES_NOSEPASS - .2byte MOVE_MAGNITUDE - .2byte MOVE_ROLLOUT - .2byte MOVE_EXPLOSION - - egg_moves_begin SPECIES_TORKOAL - .2byte MOVE_ERUPTION - .2byte MOVE_ENDURE - .2byte MOVE_SLEEP_TALK - .2byte MOVE_YAWN - - egg_moves_begin SPECIES_SABLEYE - .2byte MOVE_PSYCH_UP - .2byte MOVE_RECOVER - .2byte MOVE_MOONLIGHT - - egg_moves_begin SPECIES_BARBOACH - .2byte MOVE_THRASH - .2byte MOVE_WHIRLPOOL - .2byte MOVE_SPARK - - egg_moves_begin SPECIES_LUVDISC - .2byte MOVE_SPLASH - .2byte MOVE_SUPERSONIC - .2byte MOVE_WATER_SPORT - .2byte MOVE_MUD_SPORT - - egg_moves_begin SPECIES_CORPHISH - .2byte MOVE_MUD_SPORT - .2byte MOVE_ENDEAVOR - .2byte MOVE_BODY_SLAM - .2byte MOVE_ANCIENT_POWER - - egg_moves_begin SPECIES_FEEBAS - .2byte MOVE_MIRROR_COAT - .2byte MOVE_DRAGON_BREATH - .2byte MOVE_MUD_SPORT - .2byte MOVE_HYPNOSIS - .2byte MOVE_LIGHT_SCREEN - .2byte MOVE_CONFUSE_RAY - - egg_moves_begin SPECIES_CARVANHA - .2byte MOVE_HYDRO_PUMP - .2byte MOVE_DOUBLE_EDGE - .2byte MOVE_THRASH - - egg_moves_begin SPECIES_TRAPINCH - .2byte MOVE_FOCUS_ENERGY - .2byte MOVE_QUICK_ATTACK - .2byte MOVE_GUST - - egg_moves_begin SPECIES_MAKUHITA - .2byte MOVE_FAINT_ATTACK - .2byte MOVE_DETECT - .2byte MOVE_FORESIGHT - .2byte MOVE_HELPING_HAND - .2byte MOVE_CROSS_CHOP - .2byte MOVE_REVENGE - .2byte MOVE_DYNAMIC_PUNCH - .2byte MOVE_COUNTER - - egg_moves_begin SPECIES_ELECTRIKE - .2byte MOVE_CRUNCH - .2byte MOVE_HEADBUTT - .2byte MOVE_UPROAR - .2byte MOVE_CURSE - .2byte MOVE_SWIFT - - egg_moves_begin SPECIES_NUMEL - .2byte MOVE_HOWL - .2byte MOVE_SCARY_FACE - .2byte MOVE_BODY_SLAM - .2byte MOVE_ROLLOUT - .2byte MOVE_DEFENSE_CURL - .2byte MOVE_STOMP - - egg_moves_begin SPECIES_SPHEAL - .2byte MOVE_WATER_SPORT - .2byte MOVE_STOCKPILE - .2byte MOVE_SWALLOW - .2byte MOVE_SPIT_UP - .2byte MOVE_YAWN - .2byte MOVE_ROCK_SLIDE - .2byte MOVE_CURSE - .2byte MOVE_FISSURE - - egg_moves_begin SPECIES_CACNEA - .2byte MOVE_GRASS_WHISTLE - .2byte MOVE_ACID - .2byte MOVE_TEETER_DANCE - .2byte MOVE_DYNAMIC_PUNCH - .2byte MOVE_COUNTER - - egg_moves_begin SPECIES_SNORUNT - .2byte MOVE_BLOCK - .2byte MOVE_SPIKES - - egg_moves_begin SPECIES_AZURILL - .2byte MOVE_ENCORE - .2byte MOVE_SING - .2byte MOVE_REFRESH - .2byte MOVE_SLAM - .2byte MOVE_TICKLE - - egg_moves_begin SPECIES_SPOINK - .2byte MOVE_FUTURE_SIGHT - .2byte MOVE_EXTRASENSORY - .2byte MOVE_SUBSTITUTE - .2byte MOVE_TRICK - - egg_moves_begin SPECIES_PLUSLE - .2byte MOVE_SUBSTITUTE - .2byte MOVE_WISH - - egg_moves_begin SPECIES_MINUN - .2byte MOVE_SUBSTITUTE - .2byte MOVE_WISH - - egg_moves_begin SPECIES_MAWILE - .2byte MOVE_SWORDS_DANCE - .2byte MOVE_FALSE_SWIPE - .2byte MOVE_POISON_FANG - .2byte MOVE_PSYCH_UP - .2byte MOVE_ANCIENT_POWER - .2byte MOVE_TICKLE - - egg_moves_begin SPECIES_MEDITITE - .2byte MOVE_FIRE_PUNCH - .2byte MOVE_THUNDER_PUNCH - .2byte MOVE_ICE_PUNCH - .2byte MOVE_FORESIGHT - .2byte MOVE_FAKE_OUT - .2byte MOVE_BATON_PASS - .2byte MOVE_DYNAMIC_PUNCH - - egg_moves_begin SPECIES_SWABLU - .2byte MOVE_AGILITY - .2byte MOVE_HAZE - .2byte MOVE_PURSUIT - .2byte MOVE_RAGE - - egg_moves_begin SPECIES_DUSKULL - .2byte MOVE_IMPRISON - .2byte MOVE_DESTINY_BOND - .2byte MOVE_PAIN_SPLIT - .2byte MOVE_GRUDGE - .2byte MOVE_MEMENTO - .2byte MOVE_FAINT_ATTACK - - egg_moves_begin SPECIES_ROSELIA - .2byte MOVE_SPIKES - .2byte MOVE_SYNTHESIS - .2byte MOVE_PIN_MISSILE - .2byte MOVE_COTTON_SPORE - - egg_moves_begin SPECIES_SLAKOTH - .2byte MOVE_PURSUIT - .2byte MOVE_SLASH - .2byte MOVE_BODY_SLAM - .2byte MOVE_SNORE - .2byte MOVE_CRUSH_CLAW - .2byte MOVE_CURSE - .2byte MOVE_SLEEP_TALK - - egg_moves_begin SPECIES_GULPIN - .2byte MOVE_DREAM_EATER - .2byte MOVE_ACID_ARMOR - .2byte MOVE_SMOG - .2byte MOVE_PAIN_SPLIT - - egg_moves_begin SPECIES_TROPIUS - .2byte MOVE_HEADBUTT - .2byte MOVE_SLAM - .2byte MOVE_RAZOR_WIND - .2byte MOVE_LEECH_SEED - .2byte MOVE_NATURE_POWER - - egg_moves_begin SPECIES_WHISMUR - .2byte MOVE_TAKE_DOWN - .2byte MOVE_SNORE - .2byte MOVE_SWAGGER - .2byte MOVE_EXTRASENSORY - .2byte MOVE_SMELLING_SALT - - egg_moves_begin SPECIES_CLAMPERL - .2byte MOVE_REFRESH - .2byte MOVE_MUD_SPORT - .2byte MOVE_BODY_SLAM - .2byte MOVE_SUPERSONIC - .2byte MOVE_BARRIER - .2byte MOVE_CONFUSE_RAY - - egg_moves_begin SPECIES_ABSOL - .2byte MOVE_BATON_PASS - .2byte MOVE_FAINT_ATTACK - .2byte MOVE_DOUBLE_EDGE - .2byte MOVE_MAGIC_COAT - .2byte MOVE_CURSE - .2byte MOVE_SUBSTITUTE - - egg_moves_begin SPECIES_SHUPPET - .2byte MOVE_DISABLE - .2byte MOVE_DESTINY_BOND - .2byte MOVE_FORESIGHT - .2byte MOVE_ASTONISH - .2byte MOVE_IMPRISON - - egg_moves_begin SPECIES_SEVIPER - .2byte MOVE_STOCKPILE - .2byte MOVE_SWALLOW - .2byte MOVE_SPIT_UP - .2byte MOVE_BODY_SLAM - - egg_moves_begin SPECIES_ZANGOOSE - .2byte MOVE_FLAIL - .2byte MOVE_DOUBLE_KICK - .2byte MOVE_RAZOR_WIND - .2byte MOVE_COUNTER - .2byte MOVE_ROAR - .2byte MOVE_CURSE - - egg_moves_begin SPECIES_RELICANTH - .2byte MOVE_MAGNITUDE - .2byte MOVE_SKULL_BASH - .2byte MOVE_WATER_SPORT - .2byte MOVE_AMNESIA - .2byte MOVE_SLEEP_TALK - .2byte MOVE_ROCK_SLIDE - - egg_moves_begin SPECIES_ARON - .2byte MOVE_ENDEAVOR - .2byte MOVE_BODY_SLAM - .2byte MOVE_STOMP - .2byte MOVE_SMELLING_SALT - - egg_moves_begin SPECIES_CASTFORM - .2byte MOVE_FUTURE_SIGHT - .2byte MOVE_PSYCH_UP - - egg_moves_begin SPECIES_VOLBEAT - .2byte MOVE_BATON_PASS - .2byte MOVE_SILVER_WIND - .2byte MOVE_TRICK - - egg_moves_begin SPECIES_ILLUMISE - .2byte MOVE_BATON_PASS - .2byte MOVE_SILVER_WIND - .2byte MOVE_GROWTH - - egg_moves_begin SPECIES_LILEEP - .2byte MOVE_BARRIER - .2byte MOVE_RECOVER - .2byte MOVE_MIRROR_COAT - .2byte MOVE_ROCK_SLIDE - - egg_moves_begin SPECIES_ANORITH - .2byte MOVE_RAPID_SPIN - .2byte MOVE_KNOCK_OFF - .2byte MOVE_SWORDS_DANCE - .2byte MOVE_ROCK_SLIDE - - egg_moves_begin SPECIES_RALTS - .2byte MOVE_DISABLE - .2byte MOVE_WILL_O_WISP - .2byte MOVE_MEAN_LOOK - .2byte MOVE_MEMENTO - .2byte MOVE_DESTINY_BOND - - egg_moves_begin SPECIES_BAGON - .2byte MOVE_HYDRO_PUMP - .2byte MOVE_THRASH - .2byte MOVE_DRAGON_RAGE - .2byte MOVE_TWISTER - .2byte MOVE_DRAGON_DANCE - - egg_moves_begin SPECIES_CHIMECHO - .2byte MOVE_DISABLE - .2byte MOVE_CURSE - .2byte MOVE_HYPNOSIS - .2byte MOVE_DREAM_EATER - - .2byte -1 diff --git a/include/data/pokemon/egg_moves.h b/include/data/pokemon/egg_moves.h new file mode 100644 index 000000000..390052ec8 --- /dev/null +++ b/include/data/pokemon/egg_moves.h @@ -0,0 +1,1318 @@ +// +// Created by Scott Norton on 8/30/17. +// + +#ifndef POKERUBY_DAYCARE_H +#define POKERUBY_DAYCARE_H + +#define EGG_MOVES_SPECIES_OFFSET 20000 +#define egg_moves(species, moves...) (SPECIES_##species + EGG_MOVES_SPECIES_OFFSET), moves + +#endif //POKERUBY_DAYCARE_H + +const u16 gEggMoves[] = { + egg_moves(BULBASAUR, + MOVE_LIGHT_SCREEN, + MOVE_SKULL_BASH, + MOVE_SAFEGUARD, + MOVE_CHARM, + MOVE_PETAL_DANCE, + MOVE_MAGICAL_LEAF, + MOVE_GRASS_WHISTLE, + MOVE_CURSE), + + egg_moves(CHARMANDER, + MOVE_BELLY_DRUM, + MOVE_ANCIENT_POWER, + MOVE_ROCK_SLIDE, + MOVE_BITE, + MOVE_OUTRAGE, + MOVE_BEAT_UP, + MOVE_SWORDS_DANCE, + MOVE_DRAGON_DANCE), + + egg_moves(SQUIRTLE, + MOVE_MIRROR_COAT, + MOVE_HAZE, + MOVE_MIST, + MOVE_FORESIGHT, + MOVE_FLAIL, + MOVE_REFRESH, + MOVE_MUD_SPORT, + MOVE_YAWN), + + egg_moves(PIDGEY, + MOVE_PURSUIT, + MOVE_FAINT_ATTACK, + MOVE_FORESIGHT, + MOVE_STEEL_WING, + MOVE_AIR_CUTTER), + + egg_moves(RATTATA, + MOVE_SCREECH, + MOVE_FLAME_WHEEL, + MOVE_FURY_SWIPES, + MOVE_BITE, + MOVE_COUNTER, + MOVE_REVERSAL, + MOVE_UPROAR, + MOVE_SWAGGER), + + egg_moves(SPEAROW, + MOVE_FAINT_ATTACK, + MOVE_FALSE_SWIPE, + MOVE_SCARY_FACE, + MOVE_QUICK_ATTACK, + MOVE_TRI_ATTACK, + MOVE_ASTONISH, + MOVE_SKY_ATTACK), + + egg_moves(EKANS, + MOVE_PURSUIT, + MOVE_SLAM, + MOVE_SPITE, + MOVE_BEAT_UP, + MOVE_POISON_FANG), + + egg_moves(SANDSHREW, + MOVE_FLAIL, + MOVE_SAFEGUARD, + MOVE_COUNTER, + MOVE_RAPID_SPIN, + MOVE_ROCK_SLIDE, + MOVE_METAL_CLAW, + MOVE_SWORDS_DANCE, + MOVE_CRUSH_CLAW), + + egg_moves(NIDORAN_F, + MOVE_SUPERSONIC, + MOVE_DISABLE, + MOVE_TAKE_DOWN, + MOVE_FOCUS_ENERGY, + MOVE_CHARM, + MOVE_COUNTER, + MOVE_BEAT_UP), + + egg_moves(NIDORAN_M, + MOVE_COUNTER, + MOVE_DISABLE, + MOVE_SUPERSONIC, + MOVE_TAKE_DOWN, + MOVE_AMNESIA, + MOVE_CONFUSION, + MOVE_BEAT_UP), + + egg_moves(VULPIX, + MOVE_FAINT_ATTACK, + MOVE_HYPNOSIS, + MOVE_FLAIL, + MOVE_SPITE, + MOVE_DISABLE, + MOVE_HOWL, + MOVE_PSYCH_UP, + MOVE_HEAT_WAVE), + + egg_moves(ZUBAT, + MOVE_QUICK_ATTACK, + MOVE_PURSUIT, + MOVE_FAINT_ATTACK, + MOVE_GUST, + MOVE_WHIRLWIND, + MOVE_CURSE), + + egg_moves(ODDISH, + MOVE_SWORDS_DANCE, + MOVE_RAZOR_LEAF, + MOVE_FLAIL, + MOVE_SYNTHESIS, + MOVE_CHARM, + MOVE_INGRAIN), + + egg_moves(PARAS, + MOVE_FALSE_SWIPE, + MOVE_SCREECH, + MOVE_COUNTER, + MOVE_PSYBEAM, + MOVE_FLAIL, + MOVE_SWEET_SCENT, + MOVE_LIGHT_SCREEN, + MOVE_PURSUIT), + + egg_moves(VENONAT, + MOVE_BATON_PASS, + MOVE_SCREECH, + MOVE_GIGA_DRAIN, + MOVE_SIGNAL_BEAM), + + egg_moves(DIGLETT, + MOVE_FAINT_ATTACK, + MOVE_SCREECH, + MOVE_ANCIENT_POWER, + MOVE_PURSUIT, + MOVE_BEAT_UP, + MOVE_UPROAR, + MOVE_ROCK_SLIDE), + + egg_moves(MEOWTH, + MOVE_SPITE, + MOVE_CHARM, + MOVE_HYPNOSIS, + MOVE_AMNESIA, + MOVE_PSYCH_UP, + MOVE_ASSIST), + + egg_moves(PSYDUCK, + MOVE_HYPNOSIS, + MOVE_PSYBEAM, + MOVE_FORESIGHT, + MOVE_LIGHT_SCREEN, + MOVE_FUTURE_SIGHT, + MOVE_PSYCHIC, + MOVE_CROSS_CHOP, + MOVE_REFRESH), + + egg_moves(MANKEY, + MOVE_ROCK_SLIDE, + MOVE_FORESIGHT, + MOVE_MEDITATE, + MOVE_COUNTER, + MOVE_REVERSAL, + MOVE_BEAT_UP, + MOVE_REVENGE, + MOVE_SMELLING_SALT), + + egg_moves(GROWLITHE, + MOVE_BODY_SLAM, + MOVE_SAFEGUARD, + MOVE_CRUNCH, + MOVE_THRASH, + MOVE_FIRE_SPIN, + MOVE_HOWL, + MOVE_HEAT_WAVE), + + egg_moves(POLIWAG, + MOVE_MIST, + MOVE_SPLASH, + MOVE_BUBBLE_BEAM, + MOVE_HAZE, + MOVE_MIND_READER, + MOVE_WATER_SPORT, + MOVE_ICE_BALL), + + egg_moves(ABRA, + MOVE_ENCORE, + MOVE_BARRIER, + MOVE_KNOCK_OFF, + MOVE_FIRE_PUNCH, + MOVE_THUNDER_PUNCH, + MOVE_ICE_PUNCH), + + egg_moves(MACHOP, + MOVE_LIGHT_SCREEN, + MOVE_MEDITATE, + MOVE_ROLLING_KICK, + MOVE_ENCORE, + MOVE_SMELLING_SALT, + MOVE_COUNTER, + MOVE_ROCK_SLIDE), + + egg_moves(BELLSPROUT, + MOVE_SWORDS_DANCE, + MOVE_ENCORE, + MOVE_REFLECT, + MOVE_SYNTHESIS, + MOVE_LEECH_LIFE, + MOVE_INGRAIN, + MOVE_MAGICAL_LEAF), + + egg_moves(TENTACOOL, + MOVE_AURORA_BEAM, + MOVE_MIRROR_COAT, + MOVE_RAPID_SPIN, + MOVE_HAZE, + MOVE_SAFEGUARD, + MOVE_CONFUSE_RAY), + + egg_moves(GEODUDE, + MOVE_MEGA_PUNCH, + MOVE_ROCK_SLIDE, + MOVE_BLOCK), + + egg_moves(PONYTA, + MOVE_FLAME_WHEEL, + MOVE_THRASH, + MOVE_DOUBLE_KICK, + MOVE_HYPNOSIS, + MOVE_CHARM, + MOVE_DOUBLE_EDGE), + + egg_moves(SLOWPOKE, + MOVE_SAFEGUARD, + MOVE_BELLY_DRUM, + MOVE_FUTURE_SIGHT, + MOVE_STOMP, + MOVE_MUD_SPORT, + MOVE_SLEEP_TALK, + MOVE_SNORE), + + egg_moves(FARFETCHD, + MOVE_STEEL_WING, + MOVE_FORESIGHT, + MOVE_MIRROR_MOVE, + MOVE_GUST, + MOVE_QUICK_ATTACK, + MOVE_FLAIL, + MOVE_FEATHER_DANCE, + MOVE_CURSE), + + egg_moves(DODUO, + MOVE_QUICK_ATTACK, + MOVE_SUPERSONIC, + MOVE_HAZE, + MOVE_FAINT_ATTACK, + MOVE_FLAIL, + MOVE_ENDEAVOR), + + egg_moves(SEEL, + MOVE_LICK, + MOVE_PERISH_SONG, + MOVE_DISABLE, + MOVE_HORN_DRILL, + MOVE_SLAM, + MOVE_ENCORE, + MOVE_FAKE_OUT, + MOVE_ICICLE_SPEAR), + + egg_moves(GRIMER, + MOVE_HAZE, + MOVE_MEAN_LOOK, + MOVE_LICK, + MOVE_IMPRISON, + MOVE_CURSE, + MOVE_SHADOW_PUNCH, + MOVE_EXPLOSION), + + egg_moves(SHELLDER, + MOVE_BUBBLE_BEAM, + MOVE_TAKE_DOWN, + MOVE_BARRIER, + MOVE_RAPID_SPIN, + MOVE_SCREECH, + MOVE_ICICLE_SPEAR), + + egg_moves(GASTLY, + MOVE_PSYWAVE, + MOVE_PERISH_SONG, + MOVE_HAZE, + MOVE_ASTONISH, + MOVE_WILL_O_WISP, + MOVE_GRUDGE, + MOVE_EXPLOSION), + + egg_moves(ONIX, + MOVE_ROCK_SLIDE, + MOVE_FLAIL, + MOVE_EXPLOSION, + MOVE_BLOCK), + + egg_moves(DROWZEE, + MOVE_BARRIER, + MOVE_ASSIST, + MOVE_ROLE_PLAY, + MOVE_FIRE_PUNCH, + MOVE_THUNDER_PUNCH, + MOVE_ICE_PUNCH), + + egg_moves(KRABBY, + MOVE_DIG, + MOVE_HAZE, + MOVE_AMNESIA, + MOVE_FLAIL, + MOVE_SLAM, + MOVE_KNOCK_OFF, + MOVE_SWORDS_DANCE), + + egg_moves(EXEGGCUTE, + MOVE_SYNTHESIS, + MOVE_MOONLIGHT, + MOVE_REFLECT, + MOVE_ANCIENT_POWER, + MOVE_PSYCH_UP, + MOVE_INGRAIN, + MOVE_CURSE), + + egg_moves(CUBONE, + MOVE_ROCK_SLIDE, + MOVE_ANCIENT_POWER, + MOVE_BELLY_DRUM, + MOVE_SCREECH, + MOVE_SKULL_BASH, + MOVE_PERISH_SONG, + MOVE_SWORDS_DANCE), + + egg_moves(LICKITUNG, + MOVE_BELLY_DRUM, + MOVE_MAGNITUDE, + MOVE_BODY_SLAM, + MOVE_CURSE, + MOVE_SMELLING_SALT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE), + + egg_moves(KOFFING, + MOVE_SCREECH, + MOVE_PSYWAVE, + MOVE_PSYBEAM, + MOVE_DESTINY_BOND, + MOVE_PAIN_SPLIT, + MOVE_WILL_O_WISP), + + egg_moves(RHYHORN, + MOVE_CRUNCH, + MOVE_REVERSAL, + MOVE_ROCK_SLIDE, + MOVE_COUNTER, + MOVE_MAGNITUDE, + MOVE_SWORDS_DANCE, + MOVE_CURSE, + MOVE_CRUSH_CLAW), + + egg_moves(CHANSEY, + MOVE_PRESENT, + MOVE_METRONOME, + MOVE_HEAL_BELL, + MOVE_AROMATHERAPY, + MOVE_SUBSTITUTE), + + egg_moves(TANGELA, + MOVE_FLAIL, + MOVE_CONFUSION, + MOVE_MEGA_DRAIN, + MOVE_REFLECT, + MOVE_AMNESIA, + MOVE_LEECH_SEED, + MOVE_NATURE_POWER), + + egg_moves(KANGASKHAN, + MOVE_STOMP, + MOVE_FORESIGHT, + MOVE_FOCUS_ENERGY, + MOVE_SAFEGUARD, + MOVE_DISABLE, + MOVE_COUNTER, + MOVE_CRUSH_CLAW, + MOVE_SUBSTITUTE), + + egg_moves(HORSEA, + MOVE_FLAIL, + MOVE_AURORA_BEAM, + MOVE_OCTAZOOKA, + MOVE_DISABLE, + MOVE_SPLASH, + MOVE_DRAGON_RAGE, + MOVE_DRAGON_BREATH), + + egg_moves(GOLDEEN, + MOVE_PSYBEAM, + MOVE_HAZE, + MOVE_HYDRO_PUMP, + MOVE_SLEEP_TALK, + MOVE_MUD_SPORT), + + egg_moves(MR_MIME, + MOVE_FUTURE_SIGHT, + MOVE_HYPNOSIS, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_FAKE_OUT, + MOVE_TRICK), + + egg_moves(SCYTHER, + MOVE_COUNTER, + MOVE_SAFEGUARD, + MOVE_BATON_PASS, + MOVE_RAZOR_WIND, + MOVE_REVERSAL, + MOVE_LIGHT_SCREEN, + MOVE_ENDURE, + MOVE_SILVER_WIND), + + egg_moves(PINSIR, + MOVE_FURY_ATTACK, + MOVE_FLAIL, + MOVE_FALSE_SWIPE, + MOVE_FAINT_ATTACK), + + egg_moves(LAPRAS, + MOVE_FORESIGHT, + MOVE_SUBSTITUTE, + MOVE_TICKLE, + MOVE_REFRESH, + MOVE_DRAGON_DANCE, + MOVE_CURSE, + MOVE_SLEEP_TALK, + MOVE_HORN_DRILL), + + egg_moves(EEVEE, + MOVE_CHARM, + MOVE_FLAIL, + MOVE_ENDURE, + MOVE_CURSE, + MOVE_TICKLE, + MOVE_WISH), + + egg_moves(OMANYTE, + MOVE_BUBBLE_BEAM, + MOVE_AURORA_BEAM, + MOVE_SLAM, + MOVE_SUPERSONIC, + MOVE_HAZE, + MOVE_ROCK_SLIDE, + MOVE_SPIKES), + + egg_moves(KABUTO, + MOVE_BUBBLE_BEAM, + MOVE_AURORA_BEAM, + MOVE_RAPID_SPIN, + MOVE_DIG, + MOVE_FLAIL, + MOVE_KNOCK_OFF, + MOVE_CONFUSE_RAY), + + egg_moves(AERODACTYL, + MOVE_WHIRLWIND, + MOVE_PURSUIT, + MOVE_FORESIGHT, + MOVE_STEEL_WING, + MOVE_DRAGON_BREATH, + MOVE_CURSE), + + egg_moves(SNORLAX, + MOVE_LICK, + MOVE_CHARM, + MOVE_DOUBLE_EDGE, + MOVE_CURSE, + MOVE_FISSURE, + MOVE_SUBSTITUTE), + + egg_moves(DRATINI, + MOVE_LIGHT_SCREEN, + MOVE_MIST, + MOVE_HAZE, + MOVE_SUPERSONIC, + MOVE_DRAGON_BREATH, + MOVE_DRAGON_DANCE), + + egg_moves(CHIKORITA, + MOVE_VINE_WHIP, + MOVE_LEECH_SEED, + MOVE_COUNTER, + MOVE_ANCIENT_POWER, + MOVE_FLAIL, + MOVE_NATURE_POWER, + MOVE_INGRAIN, + MOVE_GRASS_WHISTLE), + + egg_moves(CYNDAQUIL, + MOVE_FURY_SWIPES, + MOVE_QUICK_ATTACK, + MOVE_REVERSAL, + MOVE_THRASH, + MOVE_FORESIGHT, + MOVE_COVET, + MOVE_HOWL, + MOVE_CRUSH_CLAW), + + egg_moves(TOTODILE, + MOVE_CRUNCH, + MOVE_THRASH, + MOVE_HYDRO_PUMP, + MOVE_ANCIENT_POWER, + MOVE_ROCK_SLIDE, + MOVE_MUD_SPORT, + MOVE_WATER_SPORT, + MOVE_DRAGON_CLAW), + + egg_moves(SENTRET, + MOVE_DOUBLE_EDGE, + MOVE_PURSUIT, + MOVE_SLASH, + MOVE_FOCUS_ENERGY, + MOVE_REVERSAL, + MOVE_SUBSTITUTE, + MOVE_TRICK, + MOVE_ASSIST), + + egg_moves(HOOTHOOT, + MOVE_MIRROR_MOVE, + MOVE_SUPERSONIC, + MOVE_FAINT_ATTACK, + MOVE_WING_ATTACK, + MOVE_WHIRLWIND, + MOVE_SKY_ATTACK, + MOVE_FEATHER_DANCE), + + egg_moves(LEDYBA, + MOVE_PSYBEAM, + MOVE_BIDE, + MOVE_SILVER_WIND), + + egg_moves(SPINARAK, + MOVE_PSYBEAM, + MOVE_DISABLE, + MOVE_SONIC_BOOM, + MOVE_BATON_PASS, + MOVE_PURSUIT, + MOVE_SIGNAL_BEAM), + + egg_moves(CHINCHOU, + MOVE_FLAIL, + MOVE_SCREECH, + MOVE_AMNESIA), + + egg_moves(PICHU, + MOVE_REVERSAL, + MOVE_BIDE, + MOVE_PRESENT, + MOVE_ENCORE, + MOVE_DOUBLE_SLAP, + MOVE_WISH, + MOVE_CHARGE), + + egg_moves(CLEFFA, + MOVE_PRESENT, + MOVE_METRONOME, + MOVE_AMNESIA, + MOVE_BELLY_DRUM, + MOVE_SPLASH, + MOVE_MIMIC, + MOVE_WISH, + MOVE_SUBSTITUTE), + + egg_moves(IGGLYBUFF, + MOVE_PERISH_SONG, + MOVE_PRESENT, + MOVE_FAINT_ATTACK, + MOVE_WISH, + MOVE_FAKE_TEARS), + + egg_moves(TOGEPI, + MOVE_PRESENT, + MOVE_MIRROR_MOVE, + MOVE_PECK, + MOVE_FORESIGHT, + MOVE_FUTURE_SIGHT, + MOVE_SUBSTITUTE, + MOVE_PSYCH_UP), + + egg_moves(NATU, + MOVE_HAZE, + MOVE_DRILL_PECK, + MOVE_QUICK_ATTACK, + MOVE_FAINT_ATTACK, + MOVE_STEEL_WING, + MOVE_PSYCH_UP, + MOVE_FEATHER_DANCE, + MOVE_REFRESH), + + egg_moves(MAREEP, + MOVE_TAKE_DOWN, + MOVE_BODY_SLAM, + MOVE_SAFEGUARD, + MOVE_SCREECH, + MOVE_REFLECT, + MOVE_ODOR_SLEUTH, + MOVE_CHARGE), + + egg_moves(MARILL, + MOVE_LIGHT_SCREEN, + MOVE_PRESENT, + MOVE_AMNESIA, + MOVE_FUTURE_SIGHT, + MOVE_BELLY_DRUM, + MOVE_PERISH_SONG, + MOVE_SUPERSONIC, + MOVE_SUBSTITUTE), + + egg_moves(SUDOWOODO, + MOVE_SELF_DESTRUCT), + + egg_moves(HOPPIP, + MOVE_CONFUSION, + MOVE_ENCORE, + MOVE_DOUBLE_EDGE, + MOVE_REFLECT, + MOVE_AMNESIA, + MOVE_HELPING_HAND, + MOVE_PSYCH_UP), + + egg_moves(AIPOM, + MOVE_COUNTER, + MOVE_SCREECH, + MOVE_PURSUIT, + MOVE_AGILITY, + MOVE_SPITE, + MOVE_SLAM, + MOVE_DOUBLE_SLAP, + MOVE_BEAT_UP), + + egg_moves(SUNKERN, + MOVE_GRASS_WHISTLE, + MOVE_ENCORE, + MOVE_LEECH_SEED, + MOVE_NATURE_POWER, + MOVE_CURSE, + MOVE_HELPING_HAND), + + egg_moves(YANMA, + MOVE_WHIRLWIND, + MOVE_REVERSAL, + MOVE_LEECH_LIFE, + MOVE_SIGNAL_BEAM, + MOVE_SILVER_WIND), + + egg_moves(WOOPER, + MOVE_BODY_SLAM, + MOVE_ANCIENT_POWER, + MOVE_SAFEGUARD, + MOVE_CURSE, + MOVE_MUD_SPORT, + MOVE_STOCKPILE, + MOVE_SWALLOW, + MOVE_SPIT_UP), + + egg_moves(MURKROW, + MOVE_WHIRLWIND, + MOVE_DRILL_PECK, + MOVE_MIRROR_MOVE, + MOVE_WING_ATTACK, + MOVE_SKY_ATTACK, + MOVE_CONFUSE_RAY, + MOVE_FEATHER_DANCE, + MOVE_PERISH_SONG), + + egg_moves(MISDREAVUS, + MOVE_SCREECH, + MOVE_DESTINY_BOND, + MOVE_PSYCH_UP, + MOVE_IMPRISON), + + egg_moves(GIRAFARIG, + MOVE_TAKE_DOWN, + MOVE_AMNESIA, + MOVE_FORESIGHT, + MOVE_FUTURE_SIGHT, + MOVE_BEAT_UP, + MOVE_PSYCH_UP, + MOVE_WISH, + MOVE_MAGIC_COAT), + + egg_moves(PINECO, + MOVE_REFLECT, + MOVE_PIN_MISSILE, + MOVE_FLAIL, + MOVE_SWIFT, + MOVE_COUNTER, + MOVE_SAND_TOMB), + + egg_moves(DUNSPARCE, + MOVE_BIDE, + MOVE_ANCIENT_POWER, + MOVE_ROCK_SLIDE, + MOVE_BITE, + MOVE_HEADBUTT, + MOVE_ASTONISH, + MOVE_CURSE), + + egg_moves(GLIGAR, + MOVE_METAL_CLAW, + MOVE_WING_ATTACK, + MOVE_RAZOR_WIND, + MOVE_COUNTER, + MOVE_SAND_TOMB), + + egg_moves(SNUBBULL, + MOVE_METRONOME, + MOVE_FAINT_ATTACK, + MOVE_REFLECT, + MOVE_PRESENT, + MOVE_CRUNCH, + MOVE_HEAL_BELL, + MOVE_SNORE, + MOVE_SMELLING_SALT), + + egg_moves(QWILFISH, + MOVE_FLAIL, + MOVE_HAZE, + MOVE_BUBBLE_BEAM, + MOVE_SUPERSONIC, + MOVE_ASTONISH), + + egg_moves(SHUCKLE, + MOVE_SWEET_SCENT), + + egg_moves(HERACROSS, + MOVE_HARDEN, + MOVE_BIDE, + MOVE_FLAIL, + MOVE_FALSE_SWIPE), + + egg_moves(SNEASEL, + MOVE_COUNTER, + MOVE_SPITE, + MOVE_FORESIGHT, + MOVE_REFLECT, + MOVE_BITE, + MOVE_CRUSH_CLAW, + MOVE_FAKE_OUT), + + egg_moves(TEDDIURSA, + MOVE_CRUNCH, + MOVE_TAKE_DOWN, + MOVE_SEISMIC_TOSS, + MOVE_COUNTER, + MOVE_METAL_CLAW, + MOVE_FAKE_TEARS, + MOVE_YAWN, + MOVE_SLEEP_TALK), + + egg_moves(SLUGMA, + MOVE_ACID_ARMOR, + MOVE_HEAT_WAVE), + + egg_moves(SWINUB, + MOVE_TAKE_DOWN, + MOVE_BITE, + MOVE_BODY_SLAM, + MOVE_ROCK_SLIDE, + MOVE_ANCIENT_POWER, + MOVE_MUD_SHOT, + MOVE_ICICLE_SPEAR, + MOVE_DOUBLE_EDGE), + + egg_moves(CORSOLA, + MOVE_ROCK_SLIDE, + MOVE_SCREECH, + MOVE_MIST, + MOVE_AMNESIA, + MOVE_BARRIER, + MOVE_INGRAIN, + MOVE_CONFUSE_RAY, + MOVE_ICICLE_SPEAR), + + egg_moves(REMORAID, + MOVE_AURORA_BEAM, + MOVE_OCTAZOOKA, + MOVE_SUPERSONIC, + MOVE_HAZE, + MOVE_SCREECH, + MOVE_THUNDER_WAVE, + MOVE_ROCK_BLAST), + + egg_moves(DELIBIRD, + MOVE_AURORA_BEAM, + MOVE_QUICK_ATTACK, + MOVE_FUTURE_SIGHT, + MOVE_SPLASH, + MOVE_RAPID_SPIN, + MOVE_ICE_BALL), + + egg_moves(MANTINE, + MOVE_TWISTER, + MOVE_HYDRO_PUMP, + MOVE_HAZE, + MOVE_SLAM, + MOVE_MUD_SPORT, + MOVE_ROCK_SLIDE), + + egg_moves(SKARMORY, + MOVE_DRILL_PECK, + MOVE_PURSUIT, + MOVE_WHIRLWIND, + MOVE_SKY_ATTACK, + MOVE_CURSE), + + egg_moves(HOUNDOUR, + MOVE_FIRE_SPIN, + MOVE_RAGE, + MOVE_PURSUIT, + MOVE_COUNTER, + MOVE_SPITE, + MOVE_REVERSAL, + MOVE_BEAT_UP, + MOVE_WILL_O_WISP), + + egg_moves(PHANPY, + MOVE_FOCUS_ENERGY, + MOVE_BODY_SLAM, + MOVE_ANCIENT_POWER, + MOVE_SNORE, + MOVE_COUNTER, + MOVE_FISSURE), + + egg_moves(STANTLER, + MOVE_SPITE, + MOVE_DISABLE, + MOVE_BITE, + MOVE_SWAGGER, + MOVE_PSYCH_UP, + MOVE_EXTRASENSORY), + + egg_moves(TYROGUE, + MOVE_RAPID_SPIN, + MOVE_HI_JUMP_KICK, + MOVE_MACH_PUNCH, + MOVE_MIND_READER, + MOVE_HELPING_HAND), + + egg_moves(SMOOCHUM, + MOVE_MEDITATE, + MOVE_PSYCH_UP, + MOVE_FAKE_OUT, + MOVE_WISH, + MOVE_ICE_PUNCH), + + egg_moves(ELEKID, + MOVE_KARATE_CHOP, + MOVE_BARRIER, + MOVE_ROLLING_KICK, + MOVE_MEDITATE, + MOVE_CROSS_CHOP, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH), + + egg_moves(MAGBY, + MOVE_KARATE_CHOP, + MOVE_MEGA_PUNCH, + MOVE_BARRIER, + MOVE_SCREECH, + MOVE_CROSS_CHOP, + MOVE_THUNDER_PUNCH), + + egg_moves(MILTANK, + MOVE_PRESENT, + MOVE_REVERSAL, + MOVE_SEISMIC_TOSS, + MOVE_ENDURE, + MOVE_PSYCH_UP, + MOVE_CURSE, + MOVE_HELPING_HAND, + MOVE_SLEEP_TALK), + + egg_moves(LARVITAR, + MOVE_PURSUIT, + MOVE_STOMP, + MOVE_OUTRAGE, + MOVE_FOCUS_ENERGY, + MOVE_ANCIENT_POWER, + MOVE_DRAGON_DANCE, + MOVE_CURSE), + + egg_moves(TREECKO, + MOVE_CRUNCH, + MOVE_MUD_SPORT, + MOVE_ENDEAVOR, + MOVE_LEECH_SEED, + MOVE_DRAGON_BREATH, + MOVE_CRUSH_CLAW), + + egg_moves(TORCHIC, + MOVE_COUNTER, + MOVE_REVERSAL, + MOVE_ENDURE, + MOVE_SWAGGER, + MOVE_ROCK_SLIDE, + MOVE_SMELLING_SALT), + + egg_moves(MUDKIP, + MOVE_REFRESH, + MOVE_UPROAR, + MOVE_CURSE, + MOVE_STOMP, + MOVE_ICE_BALL, + MOVE_MIRROR_COAT), + + egg_moves(POOCHYENA, + MOVE_ASTONISH, + MOVE_POISON_FANG, + MOVE_COVET, + MOVE_LEER, + MOVE_YAWN), + + egg_moves(ZIGZAGOON, + MOVE_CHARM, + MOVE_PURSUIT, + MOVE_SUBSTITUTE, + MOVE_TICKLE, + MOVE_TRICK), + + egg_moves(LOTAD, + MOVE_SYNTHESIS, + MOVE_RAZOR_LEAF, + MOVE_SWEET_SCENT, + MOVE_LEECH_SEED, + MOVE_FLAIL, + MOVE_WATER_GUN), + + egg_moves(SEEDOT, + MOVE_LEECH_SEED, + MOVE_AMNESIA, + MOVE_QUICK_ATTACK, + MOVE_RAZOR_WIND, + MOVE_TAKE_DOWN, + MOVE_FALSE_SWIPE), + + egg_moves(NINCADA, + MOVE_ENDURE, + MOVE_FAINT_ATTACK, + MOVE_GUST, + MOVE_SILVER_WIND), + + egg_moves(TAILLOW, + MOVE_PURSUIT, + MOVE_SUPERSONIC, + MOVE_REFRESH, + MOVE_MIRROR_MOVE, + MOVE_RAGE, + MOVE_SKY_ATTACK), + + egg_moves(SHROOMISH, + MOVE_FAKE_TEARS, + MOVE_SWAGGER, + MOVE_CHARM, + MOVE_FALSE_SWIPE, + MOVE_HELPING_HAND), + + egg_moves(SPINDA, + MOVE_ENCORE, + MOVE_ROCK_SLIDE, + MOVE_ASSIST, + MOVE_DISABLE, + MOVE_BATON_PASS, + MOVE_WISH, + MOVE_TRICK, + MOVE_SMELLING_SALT), + + egg_moves(WINGULL, + MOVE_MIST, + MOVE_TWISTER, + MOVE_AGILITY, + MOVE_GUST, + MOVE_WATER_SPORT), + + egg_moves(SURSKIT, + MOVE_FORESIGHT, + MOVE_MUD_SHOT, + MOVE_PSYBEAM, + MOVE_HYDRO_PUMP, + MOVE_MIND_READER), + + egg_moves(WAILMER, + MOVE_DOUBLE_EDGE, + MOVE_THRASH, + MOVE_SWAGGER, + MOVE_SNORE, + MOVE_SLEEP_TALK, + MOVE_CURSE, + MOVE_FISSURE, + MOVE_TICKLE), + + egg_moves(SKITTY, + MOVE_HELPING_HAND, + MOVE_PSYCH_UP, + MOVE_UPROAR, + MOVE_FAKE_TEARS, + MOVE_WISH, + MOVE_BATON_PASS, + MOVE_SUBSTITUTE, + MOVE_TICKLE), + + egg_moves(KECLEON, + MOVE_DISABLE, + MOVE_MAGIC_COAT, + MOVE_TRICK), + + egg_moves(NOSEPASS, + MOVE_MAGNITUDE, + MOVE_ROLLOUT, + MOVE_EXPLOSION), + + egg_moves(TORKOAL, + MOVE_ERUPTION, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_YAWN), + + egg_moves(SABLEYE, + MOVE_PSYCH_UP, + MOVE_RECOVER, + MOVE_MOONLIGHT), + + egg_moves(BARBOACH, + MOVE_THRASH, + MOVE_WHIRLPOOL, + MOVE_SPARK), + + egg_moves(LUVDISC, + MOVE_SPLASH, + MOVE_SUPERSONIC, + MOVE_WATER_SPORT, + MOVE_MUD_SPORT), + + egg_moves(CORPHISH, + MOVE_MUD_SPORT, + MOVE_ENDEAVOR, + MOVE_BODY_SLAM, + MOVE_ANCIENT_POWER), + + egg_moves(FEEBAS, + MOVE_MIRROR_COAT, + MOVE_DRAGON_BREATH, + MOVE_MUD_SPORT, + MOVE_HYPNOSIS, + MOVE_LIGHT_SCREEN, + MOVE_CONFUSE_RAY), + + egg_moves(CARVANHA, + MOVE_HYDRO_PUMP, + MOVE_DOUBLE_EDGE, + MOVE_THRASH), + + egg_moves(TRAPINCH, + MOVE_FOCUS_ENERGY, + MOVE_QUICK_ATTACK, + MOVE_GUST), + + egg_moves(MAKUHITA, + MOVE_FAINT_ATTACK, + MOVE_DETECT, + MOVE_FORESIGHT, + MOVE_HELPING_HAND, + MOVE_CROSS_CHOP, + MOVE_REVENGE, + MOVE_DYNAMIC_PUNCH, + MOVE_COUNTER), + + egg_moves(ELECTRIKE, + MOVE_CRUNCH, + MOVE_HEADBUTT, + MOVE_UPROAR, + MOVE_CURSE, + MOVE_SWIFT), + + egg_moves(NUMEL, + MOVE_HOWL, + MOVE_SCARY_FACE, + MOVE_BODY_SLAM, + MOVE_ROLLOUT, + MOVE_DEFENSE_CURL, + MOVE_STOMP), + + egg_moves(SPHEAL, + MOVE_WATER_SPORT, + MOVE_STOCKPILE, + MOVE_SWALLOW, + MOVE_SPIT_UP, + MOVE_YAWN, + MOVE_ROCK_SLIDE, + MOVE_CURSE, + MOVE_FISSURE), + + egg_moves(CACNEA, + MOVE_GRASS_WHISTLE, + MOVE_ACID, + MOVE_TEETER_DANCE, + MOVE_DYNAMIC_PUNCH, + MOVE_COUNTER), + + egg_moves(SNORUNT, + MOVE_BLOCK, + MOVE_SPIKES), + + egg_moves(AZURILL, + MOVE_ENCORE, + MOVE_SING, + MOVE_REFRESH, + MOVE_SLAM, + MOVE_TICKLE), + + egg_moves(SPOINK, + MOVE_FUTURE_SIGHT, + MOVE_EXTRASENSORY, + MOVE_SUBSTITUTE, + MOVE_TRICK), + + egg_moves(PLUSLE, + MOVE_SUBSTITUTE, + MOVE_WISH), + + egg_moves(MINUN, + MOVE_SUBSTITUTE, + MOVE_WISH), + + egg_moves(MAWILE, + MOVE_SWORDS_DANCE, + MOVE_FALSE_SWIPE, + MOVE_POISON_FANG, + MOVE_PSYCH_UP, + MOVE_ANCIENT_POWER, + MOVE_TICKLE), + + egg_moves(MEDITITE, + MOVE_FIRE_PUNCH, + MOVE_THUNDER_PUNCH, + MOVE_ICE_PUNCH, + MOVE_FORESIGHT, + MOVE_FAKE_OUT, + MOVE_BATON_PASS, + MOVE_DYNAMIC_PUNCH), + + egg_moves(SWABLU, + MOVE_AGILITY, + MOVE_HAZE, + MOVE_PURSUIT, + MOVE_RAGE), + + egg_moves(DUSKULL, + MOVE_IMPRISON, + MOVE_DESTINY_BOND, + MOVE_PAIN_SPLIT, + MOVE_GRUDGE, + MOVE_MEMENTO, + MOVE_FAINT_ATTACK), + + egg_moves(ROSELIA, + MOVE_SPIKES, + MOVE_SYNTHESIS, + MOVE_PIN_MISSILE, + MOVE_COTTON_SPORE), + + egg_moves(SLAKOTH, + MOVE_PURSUIT, + MOVE_SLASH, + MOVE_BODY_SLAM, + MOVE_SNORE, + MOVE_CRUSH_CLAW, + MOVE_CURSE, + MOVE_SLEEP_TALK), + + egg_moves(GULPIN, + MOVE_DREAM_EATER, + MOVE_ACID_ARMOR, + MOVE_SMOG, + MOVE_PAIN_SPLIT), + + egg_moves(TROPIUS, + MOVE_HEADBUTT, + MOVE_SLAM, + MOVE_RAZOR_WIND, + MOVE_LEECH_SEED, + MOVE_NATURE_POWER), + + egg_moves(WHISMUR, + MOVE_TAKE_DOWN, + MOVE_SNORE, + MOVE_SWAGGER, + MOVE_EXTRASENSORY, + MOVE_SMELLING_SALT), + + egg_moves(CLAMPERL, + MOVE_REFRESH, + MOVE_MUD_SPORT, + MOVE_BODY_SLAM, + MOVE_SUPERSONIC, + MOVE_BARRIER, + MOVE_CONFUSE_RAY), + + egg_moves(ABSOL, + MOVE_BATON_PASS, + MOVE_FAINT_ATTACK, + MOVE_DOUBLE_EDGE, + MOVE_MAGIC_COAT, + MOVE_CURSE, + MOVE_SUBSTITUTE), + + egg_moves(SHUPPET, + MOVE_DISABLE, + MOVE_DESTINY_BOND, + MOVE_FORESIGHT, + MOVE_ASTONISH, + MOVE_IMPRISON), + + egg_moves(SEVIPER, + MOVE_STOCKPILE, + MOVE_SWALLOW, + MOVE_SPIT_UP, + MOVE_BODY_SLAM), + + egg_moves(ZANGOOSE, + MOVE_FLAIL, + MOVE_DOUBLE_KICK, + MOVE_RAZOR_WIND, + MOVE_COUNTER, + MOVE_ROAR, + MOVE_CURSE), + + egg_moves(RELICANTH, + MOVE_MAGNITUDE, + MOVE_SKULL_BASH, + MOVE_WATER_SPORT, + MOVE_AMNESIA, + MOVE_SLEEP_TALK, + MOVE_ROCK_SLIDE), + + egg_moves(ARON, + MOVE_ENDEAVOR, + MOVE_BODY_SLAM, + MOVE_STOMP, + MOVE_SMELLING_SALT), + + egg_moves(CASTFORM, + MOVE_FUTURE_SIGHT, + MOVE_PSYCH_UP), + + egg_moves(VOLBEAT, + MOVE_BATON_PASS, + MOVE_SILVER_WIND, + MOVE_TRICK), + + egg_moves(ILLUMISE, + MOVE_BATON_PASS, + MOVE_SILVER_WIND, + MOVE_GROWTH), + + egg_moves(LILEEP, + MOVE_BARRIER, + MOVE_RECOVER, + MOVE_MIRROR_COAT, + MOVE_ROCK_SLIDE), + + egg_moves(ANORITH, + MOVE_RAPID_SPIN, + MOVE_KNOCK_OFF, + MOVE_SWORDS_DANCE, + MOVE_ROCK_SLIDE), + + egg_moves(RALTS, + MOVE_DISABLE, + MOVE_WILL_O_WISP, + MOVE_MEAN_LOOK, + MOVE_MEMENTO, + MOVE_DESTINY_BOND), + + egg_moves(BAGON, + MOVE_HYDRO_PUMP, + MOVE_THRASH, + MOVE_DRAGON_RAGE, + MOVE_TWISTER, + MOVE_DRAGON_DANCE), + + egg_moves(CHIMECHO, + MOVE_DISABLE, + MOVE_CURSE, + MOVE_HYPNOSIS, + MOVE_DREAM_EATER), + + 0xFFFF +}; diff --git a/ld_script.txt b/ld_script.txt index 4f3ff093d..10905b93f 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -341,7 +341,7 @@ SECTIONS { . = ALIGN(4); src/trig.o(.rodata); src/util.o(.rodata); - data/daycare.o(.rodata); + src/daycare.o(.rodata); src/egg_hatch.o(.rodata); data/battle_interface.o(.rodata); src/pokeball.o(.rodata); diff --git a/src/daycare.c b/src/daycare.c index 3fc1ecd99..8096904b0 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -10,6 +10,18 @@ #include "name_string_util.h" #include "pokemon_storage_system.h" #include "rng.h" +#include "moves.h" +#include "strings2.h" +#include "data/pokemon/egg_moves.h" + +const u8 *const gUnknown_08209AC4[] = { + DaycareText_GetAlongVeryWell, + DaycareText_GetAlong, + DaycareText_DontLikeOther, + DaycareText_PlayOther +}; + +const u8 gUnknown_08209AD4[] = _("タマゴ"); extern u8 gLastFieldPokeMenuOpened; -- cgit v1.2.3 From c8ceacec344b229a56ec44bf1835345a7a7f5f54 Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 30 Aug 2017 09:52:16 -0400 Subject: Through sub_8041960 --- asm/daycare.s | 84 ----------------------------------------------------------- src/daycare.c | 29 +++++++++++++++++++++ 2 files changed, 29 insertions(+), 84 deletions(-) diff --git a/asm/daycare.s b/asm/daycare.s index c30582c2e..55d068cd1 100644 --- a/asm/daycare.s +++ b/asm/daycare.s @@ -6,90 +6,6 @@ .text - thumb_func_start sub_804191C -sub_804191C: @ 804191C - push {r4,lr} - adds r4, r0, 0 - bl Random - movs r2, 0x80 - lsls r2, 8 - adds r1, r2, 0 - movs r2, 0x8C - lsls r2, 1 - adds r4, r2 - orrs r1, r0 - strh r1, [r4] - movs r0, 0x86 - bl FlagSet - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_804191C - - thumb_func_start sub_8041940 -sub_8041940: @ 8041940 - push {lr} - ldr r0, _0804194C @ =gSaveBlock1 + 0x2F9C - bl sub_80418F0 - pop {r0} - bx r0 - .align 2, 0 -_0804194C: .4byte gSaveBlock1 + 0x2F9C - thumb_func_end sub_8041940 - - thumb_func_start sub_8041950 -sub_8041950: @ 8041950 - push {lr} - ldr r0, _0804195C @ =gSaveBlock1 + 0x2F9C - bl sub_804191C - pop {r0} - bx r0 - .align 2, 0 -_0804195C: .4byte gSaveBlock1 + 0x2F9C - thumb_func_end sub_8041950 - - thumb_func_start sub_8041960 -sub_8041960: @ 8041960 - push {r4,lr} - sub sp, 0x8 - adds r4, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r1, r4, r1 - movs r0, 0xFF - strb r0, [r1] - movs r2, 0 -_08041972: - mov r1, sp - adds r0, r1, r2 - adds r1, r4, r2 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x5 - ble _08041972 - movs r3, 0 - movs r2, 0 -_08041986: - mov r1, sp - adds r0, r1, r2 - ldrb r1, [r0] - adds r0, r1, 0 - cmp r0, 0xFF - beq _08041998 - adds r0, r4, r3 - strb r1, [r0] - adds r3, 0x1 -_08041998: - adds r2, 0x1 - cmp r2, 0x5 - ble _08041986 - add sp, 0x8 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8041960 - thumb_func_start sub_80419A8 sub_80419A8: @ 80419A8 push {r4-r7,lr} diff --git a/src/daycare.c b/src/daycare.c index 8096904b0..922d1fd45 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -307,3 +307,32 @@ void sub_80418F0(struct DayCareData *dayCareData) dayCareData->unk_118 = (Random() % 0xfffe) + 1; FlagSet(0x86); } + +void sub_804191C(struct DayCareData *dayCareData) +{ + dayCareData->unk_118 = Random() | 0x8000; + FlagSet(0x86); +} + +void sub_8041940(void) +{ + sub_80418F0(&gSaveBlock1.daycareData); +} + +void sub_8041950(void) +{ + sub_804191C(&gSaveBlock1.daycareData); +} + +void sub_8041960(u8 *data, u8 idx) +{ + int i, j; + u8 temp[6]; + data[idx] = 0xff; + for (i = 0; i < 6; i ++) + temp[i] = data[i]; + j = 0; + for (i = 0; i < 6; i ++) + if (temp[i] != 0xff) + data[j++] = temp[i]; +} -- cgit v1.2.3 From d5840cf101fb6fd3720c525003b891d50611b9b0 Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 30 Aug 2017 10:06:55 -0400 Subject: InheritIVs --- asm/daycare.s | 185 +--------------------------------------------------------- src/daycare.c | 48 +++++++++++++++ 2 files changed, 49 insertions(+), 184 deletions(-) diff --git a/asm/daycare.s b/asm/daycare.s index 55d068cd1..7d4be18d3 100644 --- a/asm/daycare.s +++ b/asm/daycare.s @@ -6,189 +6,6 @@ .text - thumb_func_start sub_80419A8 -sub_80419A8: @ 80419A8 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x14 - mov r9, r0 - mov r8, r1 - movs r5, 0 - add r1, sp, 0x4 - add r7, sp, 0xC - adds r2, r1, 0 -_080419BE: - adds r0, r2, r5 - strb r5, [r0] - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x5 - bls _080419BE - movs r5, 0 - adds r6, r1, 0 -_080419D0: - bl Random - mov r1, sp - adds r4, r1, r5 - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x6 - subs r1, r5 - bl __modsi3 - adds r0, r6, r0 - ldrb r0, [r0] - strb r0, [r4] - ldrb r1, [r4] - adds r0, r6, 0 - bl sub_8041960 - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x2 - bls _080419D0 - movs r5, 0 - movs r4, 0x1 -_08041A00: - bl Random - adds r1, r7, r5 - lsls r0, 16 - lsrs r0, 16 - ands r0, r4 - strb r0, [r1] - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x2 - bls _08041A00 - movs r5, 0 -_08041A1A: - mov r1, sp - adds r0, r1, r5 - ldrb r0, [r0] - cmp r0, 0x5 - bhi _08041B02 - lsls r0, 2 - ldr r1, _08041A30 @ =_08041A34 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08041A30: .4byte _08041A34 - .align 2, 0 -_08041A34: - .4byte _08041A4C - .4byte _08041A6C - .4byte _08041A88 - .4byte _08041AA4 - .4byte _08041AC0 - .4byte _08041AE2 -_08041A4C: - adds r0, r7, r5 - ldrb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - add r0, r8 - movs r1, 0x27 - bl GetBoxMonData - add r2, sp, 0x10 - strb r0, [r2] - mov r0, r9 - movs r1, 0x27 - bl SetMonData - b _08041B02 -_08041A6C: - add r4, sp, 0x10 - adds r0, r7, r5 - ldrb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - add r0, r8 - movs r1, 0x28 - bl GetBoxMonData - strb r0, [r4] - mov r0, r9 - movs r1, 0x28 - b _08041ADA -_08041A88: - add r4, sp, 0x10 - adds r0, r7, r5 - ldrb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - add r0, r8 - movs r1, 0x29 - bl GetBoxMonData - strb r0, [r4] - mov r0, r9 - movs r1, 0x29 - b _08041ADA -_08041AA4: - add r4, sp, 0x10 - adds r0, r7, r5 - ldrb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - add r0, r8 - movs r1, 0x2A - bl GetBoxMonData - strb r0, [r4] - mov r0, r9 - movs r1, 0x2A - b _08041ADA -_08041AC0: - add r4, sp, 0x10 - adds r0, r7, r5 - ldrb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - add r0, r8 - movs r1, 0x2B - bl GetBoxMonData - strb r0, [r4] - mov r0, r9 - movs r1, 0x2B -_08041ADA: - adds r2, r4, 0 - bl SetMonData - b _08041B02 -_08041AE2: - add r4, sp, 0x10 - adds r0, r7, r5 - ldrb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - add r0, r8 - movs r1, 0x2C - bl GetBoxMonData - strb r0, [r4] - mov r0, r9 - movs r1, 0x2C - adds r2, r4, 0 - bl SetMonData -_08041B02: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x2 - bls _08041A1A - add sp, 0x14 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80419A8 - thumb_func_start pokemon_get_eggmoves pokemon_get_eggmoves: @ 8041B1C push {r4-r7,lr} @@ -828,7 +645,7 @@ sub_8041FC4: @ 8041FC4 bl sub_80420FC mov r0, sp adds r1, r5, 0 - bl sub_80419A8 + bl InheritIVs ldrb r0, [r6, 0x1] lsls r1, r0, 2 adds r1, r0 diff --git a/src/daycare.c b/src/daycare.c index 922d1fd45..641b8d68d 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -336,3 +336,51 @@ void sub_8041960(u8 *data, u8 idx) if (temp[i] != 0xff) data[j++] = temp[i]; } + +void InheritIVs(struct Pokemon *egg, struct DayCareData *dayCareData) +{ + u8 i; + u8 selectedIvs[3]; + u8 allIvs[6]; + u8 whichParent[3]; + u8 iv; + for (i = 0; i < 6; i ++) + allIvs[i] = i; + for (i = 0; i < 3; i ++) + { + selectedIvs[i] = allIvs[Random() % (6 - i)]; + sub_8041960(allIvs, selectedIvs[i]); + } + for (i = 0; i < 3; i ++) + whichParent[i] = Random() % 2; + for (i = 0; i < 3; i ++) + { + switch (selectedIvs[i]) + { + case 0: + iv = GetBoxMonData(&dayCareData->mons[whichParent[i]], MON_DATA_HP_IV); + SetMonData(egg, MON_DATA_HP_IV, &iv); + break; + case 1: + iv = GetBoxMonData(&dayCareData->mons[whichParent[i]], MON_DATA_ATK_IV); + SetMonData(egg, MON_DATA_ATK_IV, &iv); + break; + case 2: + iv = GetBoxMonData(&dayCareData->mons[whichParent[i]], MON_DATA_DEF_IV); + SetMonData(egg, MON_DATA_DEF_IV, &iv); + break; + case 3: + iv = GetBoxMonData(&dayCareData->mons[whichParent[i]], MON_DATA_SPD_IV); + SetMonData(egg, MON_DATA_SPD_IV, &iv); + break; + case 4: + iv = GetBoxMonData(&dayCareData->mons[whichParent[i]], MON_DATA_SPATK_IV); + SetMonData(egg, MON_DATA_SPATK_IV, &iv); + break; + case 5: + iv = GetBoxMonData(&dayCareData->mons[whichParent[i]], MON_DATA_SPDEF_IV); + SetMonData(egg, MON_DATA_SPDEF_IV, &iv); + break; + } + } +} -- cgit v1.2.3 From 562454400bf37a5a9bd945969ef43d8c416bef12 Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 30 Aug 2017 12:39:29 -0400 Subject: Nearly-matching pokemon_get_eggmoves --- asm/daycare.s | 88 --------------------------------------------- src/daycare.c | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 113 insertions(+), 89 deletions(-) diff --git a/asm/daycare.s b/asm/daycare.s index 7d4be18d3..9cc8c54a8 100644 --- a/asm/daycare.s +++ b/asm/daycare.s @@ -6,94 +6,6 @@ .text - thumb_func_start pokemon_get_eggmoves -pokemon_get_eggmoves: @ 8041B1C - push {r4-r7,lr} - mov r7, r8 - push {r7} - mov r8, r1 - movs r6, 0 - movs r4, 0 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r3, r0, 16 - movs r2, 0 - ldr r5, _08041B44 @ =gEggMoves - ldrh r1, [r5] - ldr r7, _08041B48 @ =0x00004e20 - adds r0, r3, r7 - cmp r1, r0 - bne _08041B4C - movs r4, 0x1 - b _08041B6E - .align 2, 0 -_08041B44: .4byte gEggMoves -_08041B48: .4byte 0x00004e20 -_08041B4C: - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - ldr r0, _08041BB8 @ =0x00000471 - ldr r5, _08041BBC @ =gEggMoves - cmp r2, r0 - bhi _08041B6E - lsls r0, r2, 1 - adds r0, r5 - ldrh r1, [r0] - ldr r7, _08041BC0 @ =0x00004e20 - adds r0, r3, r7 - cmp r1, r0 - bne _08041B4C - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 -_08041B6E: - movs r2, 0 - lsls r0, r4, 1 - adds r0, r5 - ldrh r0, [r0] - ldr r1, _08041BC0 @ =0x00004e20 - cmp r0, r1 - bhi _08041BAA - adds r7, r5, 0 - adds r3, r1, 0 -_08041B80: - lsls r1, r2, 1 - add r1, r8 - adds r0, r4, r2 - lsls r0, 1 - adds r0, r7 - ldrh r0, [r0] - strh r0, [r1] - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0x9 - bhi _08041BAA - adds r0, r4, r2 - lsls r0, 1 - adds r0, r5 - ldrh r0, [r0] - cmp r0, r3 - bls _08041B80 -_08041BAA: - lsls r0, r6, 24 - lsrs r0, 24 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08041BB8: .4byte 0x00000471 -_08041BBC: .4byte gEggMoves -_08041BC0: .4byte 0x00004e20 - thumb_func_end pokemon_get_eggmoves - thumb_func_start daycare_build_child_moveset daycare_build_child_moveset: @ 8041BC4 push {r4-r7,lr} diff --git a/src/daycare.c b/src/daycare.c index 641b8d68d..129fbeb6d 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -324,7 +324,7 @@ void sub_8041950(void) sub_804191C(&gSaveBlock1.daycareData); } -void sub_8041960(u8 *data, u8 idx) +static void sub_8041960(u8 *data, u8 idx) { int i, j; u8 temp[6]; @@ -384,3 +384,115 @@ void InheritIVs(struct Pokemon *egg, struct DayCareData *dayCareData) } } } + +#ifdef NONMATCHING +u8 pokemon_get_eggmoves(struct Pokemon *egg, u16 buffer[10]) +{ + u16 i, j; + u16 nEggMoves = 0; + u16 offset = 0; + u16 species = GetMonData(egg, MON_DATA_SPECIES); + for (i = 0; i < ARRAY_COUNT(gEggMoves) - 1; i ++) + if (gEggMoves[i] == species + EGG_MOVES_SPECIES_OFFSET) + { + offset = i + 1; + break; + } + // Register differences incurred here due to cryptic duplication of gEggMoves pointer + for (j = 0; j < 10 && gEggMoves[offset + j] <= EGG_MOVES_SPECIES_OFFSET; j ++) + { + buffer[j] = gEggMoves[offset + j]; + nEggMoves ++; + } + return nEggMoves; +} +#else +__attribute__((naked)) +u8 pokemon_get_eggmoves(struct Pokemon *egg, u16 buffer[10]) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r8\n" + "\tpush {r7}\n" + "\tmov r8, r1\n" + "\tmovs r6, 0\n" + "\tmovs r4, 0\n" + "\tmovs r1, 0xB\n" + "\tbl GetMonData\n" + "\tlsls r0, 16\n" + "\tlsrs r3, r0, 16\n" + "\tmovs r2, 0\n" + "\tldr r5, _08041B44 @ =gEggMoves\n" + "\tldrh r1, [r5]\n" + "\tldr r7, _08041B48 @ =0x00004e20\n" + "\tadds r0, r3, r7\n" + "\tcmp r1, r0\n" + "\tbne _08041B4C\n" + "\tmovs r4, 0x1\n" + "\tb _08041B6E\n" + "\t.align 2, 0\n" + "_08041B44: .4byte gEggMoves\n" + "_08041B48: .4byte 0x00004e20\n" + "_08041B4C:\n" + "\tadds r0, r2, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r2, r0, 16\n" + "\tldr r0, _08041BB8 @ =0x00000471\n" + "\tldr r5, _08041BBC @ =gEggMoves\n" + "\tcmp r2, r0\n" + "\tbhi _08041B6E\n" + "\tlsls r0, r2, 1\n" + "\tadds r0, r5\n" + "\tldrh r1, [r0]\n" + "\tldr r7, _08041BC0 @ =0x00004e20\n" + "\tadds r0, r3, r7\n" + "\tcmp r1, r0\n" + "\tbne _08041B4C\n" + "\tadds r0, r2, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r4, r0, 16\n" + "_08041B6E:\n" + "\tmovs r2, 0\n" + "\tlsls r0, r4, 1\n" + "\tadds r0, r5\n" + "\tldrh r0, [r0]\n" + "\tldr r1, _08041BC0 @ =0x00004e20\n" + "\tcmp r0, r1\n" + "\tbhi _08041BAA\n" + "\tadds r7, r5, 0\n" + "\tadds r3, r1, 0\n" + "_08041B80:\n" + "\tlsls r1, r2, 1\n" + "\tadd r1, r8\n" + "\tadds r0, r4, r2\n" + "\tlsls r0, 1\n" + "\tadds r0, r7\n" + "\tldrh r0, [r0]\n" + "\tstrh r0, [r1]\n" + "\tadds r0, r6, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r6, r0, 16\n" + "\tadds r0, r2, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r2, r0, 16\n" + "\tcmp r2, 0x9\n" + "\tbhi _08041BAA\n" + "\tadds r0, r4, r2\n" + "\tlsls r0, 1\n" + "\tadds r0, r5\n" + "\tldrh r0, [r0]\n" + "\tcmp r0, r3\n" + "\tbls _08041B80\n" + "_08041BAA:\n" + "\tlsls r0, r6, 24\n" + "\tlsrs r0, 24\n" + "\tpop {r3}\n" + "\tmov r8, r3\n" + "\tpop {r4-r7}\n" + "\tpop {r1}\n" + "\tbx r1\n" + "\t.align 2, 0\n" + "_08041BB8: .4byte 0x00000471\n" + "_08041BBC: .4byte gEggMoves\n" + "_08041BC0: .4byte 0x00004e20"); +} +#endif -- cgit v1.2.3 From 6442f46338f5efd04b76a3790a06ee90101f5441 Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 30 Aug 2017 15:19:26 -0400 Subject: Nonmatching build_child_moveset --- asm/daycare.s | 338 ------------------------------------------------------ include/pokemon.h | 1 + src/daycare.c | 91 +++++++++++++++ 3 files changed, 92 insertions(+), 338 deletions(-) diff --git a/asm/daycare.s b/asm/daycare.s index 9cc8c54a8..a9612e8f7 100644 --- a/asm/daycare.s +++ b/asm/daycare.s @@ -6,344 +6,6 @@ .text - thumb_func_start daycare_build_child_moveset -daycare_build_child_moveset: @ 8041BC4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - adds r7, r0, 0 - mov r10, r1 - mov r9, r2 - movs r0, 0 - str r0, [sp] - movs r6, 0 - ldr r5, _08041CC8 @ =gUnknown_03000500 - movs r2, 0 - ldr r4, _08041CCC @ =gUnknown_030004D8 - ldr r3, _08041CD0 @ =gUnknown_030004E0 -_08041BE4: - lsls r1, r6, 1 - adds r0, r1, r5 - strh r2, [r0] - adds r0, r1, r4 - strh r2, [r0] - adds r1, r3 - strh r2, [r1] - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - cmp r6, 0x3 - bls _08041BE4 - movs r6, 0 - ldr r2, _08041CD4 @ =gUnknown_030004E8 - movs r1, 0 -_08041C02: - lsls r0, r6, 1 - adds r0, r2 - strh r1, [r0] - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - cmp r6, 0x9 - bls _08041C02 - movs r6, 0 - ldr r2, _08041CD8 @ =gUnknown_03000470 - movs r1, 0 -_08041C18: - lsls r0, r6, 1 - adds r0, r2 - strh r1, [r0] - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - cmp r6, 0x31 - bls _08041C18 - adds r0, r7, 0 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - ldr r1, _08041CD8 @ =gUnknown_03000470 - bl GetLevelUpMovesBySpecies - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x4] - movs r6, 0 - ldr r1, _08041CCC @ =gUnknown_030004D8 - mov r8, r1 -_08041C46: - adds r5, r6, 0 - adds r5, 0xD - mov r0, r10 - adds r1, r5, 0 - bl GetBoxMonData - lsls r4, r6, 1 - mov r2, r8 - adds r1, r4, r2 - strh r0, [r1] - mov r0, r9 - adds r1, r5, 0 - bl GetBoxMonData - ldr r1, _08041CC8 @ =gUnknown_03000500 - adds r4, r1 - strh r0, [r4] - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - cmp r6, 0x3 - bls _08041C46 - ldr r1, _08041CD4 @ =gUnknown_030004E8 - adds r0, r7, 0 - bl pokemon_get_eggmoves - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - movs r6, 0 -_08041C82: - ldr r0, _08041CCC @ =gUnknown_030004D8 - lsls r1, r6, 1 - adds r2, r1, r0 - ldrh r1, [r2] - mov r9, r0 - cmp r1, 0 - beq _08041CF8 - movs r5, 0 - cmp r5, r8 - bcs _08041CEA - adds r4, r2, 0 - ldr r2, _08041CDC @ =0x0000ffff -_08041C9A: - ldr r0, _08041CD4 @ =gUnknown_030004E8 - lsls r1, r5, 1 - adds r1, r0 - ldrh r0, [r4] - ldrh r1, [r1] - cmp r0, r1 - bne _08041CE0 - adds r1, r0, 0 - adds r0, r7, 0 - str r2, [sp, 0x8] - bl GiveMoveToMon - lsls r0, 16 - lsrs r0, 16 - ldr r2, [sp, 0x8] - cmp r0, r2 - bne _08041CEA - ldrh r1, [r4] - adds r0, r7, 0 - bl DeleteFirstMoveAndGiveMoveToMon - b _08041CEA - .align 2, 0 -_08041CC8: .4byte gUnknown_03000500 -_08041CCC: .4byte gUnknown_030004D8 -_08041CD0: .4byte gUnknown_030004E0 -_08041CD4: .4byte gUnknown_030004E8 -_08041CD8: .4byte gUnknown_03000470 -_08041CDC: .4byte 0x0000ffff -_08041CE0: - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, r8 - bcc _08041C9A -_08041CEA: - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - ldr r3, _08041E14 @ =gUnknown_030004D8 - mov r9, r3 - cmp r6, 0x3 - bls _08041C82 -_08041CF8: - movs r6, 0 -_08041CFA: - lsls r0, r6, 1 - mov r2, r9 - adds r1, r0, r2 - ldrh r1, [r1] - adds r2, r0, 0 - adds r6, 0x1 - mov r8, r6 - cmp r1, 0 - beq _08041D5C - movs r5, 0 - ldr r0, _08041E14 @ =gUnknown_030004D8 - adds r4, r2, r0 - ldr r6, _08041E18 @ =0x0000ffff - mov r9, r0 -_08041D16: - ldr r3, _08041E1C @ =0x00000121 - adds r0, r5, r3 - lsls r0, 16 - lsrs r0, 16 - bl ItemIdToBattleMoveId - ldrh r1, [r4] - lsls r0, 16 - lsrs r0, 16 - cmp r1, r0 - bne _08041D52 - lsls r1, r5, 24 - lsrs r1, 24 - adds r0, r7, 0 - bl CanMonLearnTMHM - cmp r0, 0 - beq _08041D52 - ldrh r1, [r4] - adds r0, r7, 0 - bl GiveMoveToMon - lsls r0, 16 - lsrs r0, 16 - cmp r0, r6 - bne _08041D52 - ldrh r1, [r4] - adds r0, r7, 0 - bl DeleteFirstMoveAndGiveMoveToMon -_08041D52: - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0x39 - bls _08041D16 -_08041D5C: - mov r1, r8 - lsls r0, r1, 16 - lsrs r6, r0, 16 - cmp r6, 0x3 - bls _08041CFA - movs r6, 0 - mov r2, r9 - ldrh r0, [r2] - ldr r3, _08041E20 @ =gUnknown_030004E0 - mov r10, r3 - cmp r0, 0 - beq _08041DC6 - mov r4, r9 - ldr r0, _08041E24 @ =gUnknown_03000500 - mov r9, r0 - mov r12, r10 -_08041D7C: - movs r5, 0 - lsls r2, r6, 1 - adds r6, 0x1 - mov r8, r6 - adds r3, r2, r4 -_08041D86: - lsls r0, r5, 1 - add r0, r9 - ldrh r2, [r3] - adds r1, r2, 0 - ldrh r0, [r0] - cmp r1, r0 - bne _08041DA8 - cmp r1, 0 - beq _08041DA8 - ldr r1, [sp] - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r0, 16 - str r0, [sp] - lsls r1, 1 - add r1, r12 - strh r2, [r1] -_08041DA8: - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0x3 - bls _08041D86 - mov r1, r8 - lsls r0, r1, 16 - lsrs r6, r0, 16 - cmp r6, 0x3 - bhi _08041DC6 - lsls r0, r6, 1 - adds r0, r4 - ldrh r0, [r0] - cmp r0, 0 - bne _08041D7C -_08041DC6: - movs r6, 0 - mov r2, r10 - ldrh r0, [r2] - cmp r0, 0 - beq _08041E50 -_08041DD0: - movs r5, 0 - adds r3, r6, 0x1 - mov r8, r3 - ldr r0, [sp, 0x4] - cmp r5, r0 - bcs _08041E38 - ldr r2, _08041E18 @ =0x0000ffff -_08041DDE: - ldr r1, _08041E28 @ =gUnknown_03000470 - lsls r0, r5, 1 - adds r0, r1 - ldrh r1, [r0] - cmp r1, 0 - beq _08041E2C - lsls r0, r6, 1 - mov r3, r10 - adds r4, r0, r3 - ldrh r0, [r4] - cmp r0, r1 - bne _08041E2C - adds r1, r0, 0 - adds r0, r7, 0 - str r2, [sp, 0x8] - bl GiveMoveToMon - lsls r0, 16 - lsrs r0, 16 - ldr r2, [sp, 0x8] - cmp r0, r2 - bne _08041E38 - ldrh r1, [r4] - adds r0, r7, 0 - bl DeleteFirstMoveAndGiveMoveToMon - b _08041E38 - .align 2, 0 -_08041E14: .4byte gUnknown_030004D8 -_08041E18: .4byte 0x0000ffff -_08041E1C: .4byte 0x00000121 -_08041E20: .4byte gUnknown_030004E0 -_08041E24: .4byte gUnknown_03000500 -_08041E28: .4byte gUnknown_03000470 -_08041E2C: - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - ldr r0, [sp, 0x4] - cmp r5, r0 - bcc _08041DDE -_08041E38: - mov r1, r8 - lsls r0, r1, 16 - lsrs r6, r0, 16 - cmp r6, 0x3 - bhi _08041E50 - ldr r0, _08041E60 @ =gUnknown_030004E0 - lsls r1, r6, 1 - adds r1, r0 - ldrh r1, [r1] - mov r10, r0 - cmp r1, 0 - bne _08041DD0 -_08041E50: - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08041E60: .4byte gUnknown_030004E0 - thumb_func_end daycare_build_child_moveset - thumb_func_start sub_8041E64 sub_8041E64: @ 8041E64 adds r3, r0, 0 diff --git a/include/pokemon.h b/include/pokemon.h index 7d94dbb7d..da9a5f041 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -601,5 +601,6 @@ u8 *sub_8040D08(); bool32 sub_8040D3C(u16 species, u8 *name, u8 language); s8 sub_8040A54(struct Pokemon *, u8); u16 GetMonEVCount(struct Pokemon *); +u8 GetLevelUpMovesBySpecies(u16, u16 *); #endif // GUARD_POKEMON_H diff --git a/src/daycare.c b/src/daycare.c index 129fbeb6d..a4dd438bb 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -13,6 +13,7 @@ #include "moves.h" #include "strings2.h" #include "data/pokemon/egg_moves.h" +#include "party_menu.h" const u8 *const gUnknown_08209AC4[] = { DaycareText_GetAlongVeryWell, @@ -496,3 +497,93 @@ u8 pokemon_get_eggmoves(struct Pokemon *egg, u16 buffer[10]) "_08041BC0: .4byte 0x00004e20"); } #endif + +extern u16 gUnknown_03000470[50]; +extern u16 gUnknown_030004D8[4]; +extern u16 gUnknown_030004E0[4]; +extern u16 gUnknown_030004E8[10]; +extern u16 gUnknown_03000500[4]; + +void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, struct BoxPokemon *mom) +{ + u16 numSharedParentMoves; + u8 numLevelUpMoves; + u8 numEggMoves; + u16 i, j; + + numSharedParentMoves = 0; + for (i = 0; i < 4; i ++) + { + gUnknown_03000500[i] = 0; + gUnknown_030004D8[i] = 0; + gUnknown_030004E0[i] = 0; + } + for (i = 0; i < 10; i ++) + gUnknown_030004E8[i] = 0; + for (i = 0; i < 50; i ++) + gUnknown_03000470[i] = 0; + + numLevelUpMoves = GetLevelUpMovesBySpecies(GetMonData(egg, MON_DATA_SPECIES), gUnknown_03000470); + for (i = 0; i < 4; i ++) + { + gUnknown_030004D8[i] = GetBoxMonData(dad, MON_DATA_MOVE1 + i); + gUnknown_03000500[i] = GetBoxMonData(mom, MON_DATA_MOVE1 + i); + } + numEggMoves = pokemon_get_eggmoves(egg, gUnknown_030004E8); + + for (i = 0; i < 4; i ++) + { + if (gUnknown_030004D8[i] != MOVE_NONE) + { + for (j = 0; j < numEggMoves; j ++) + { + if (gUnknown_030004D8[i] == gUnknown_030004E8[j]) + { + if (GiveMoveToMon(egg, gUnknown_030004D8[i]) == 0xffff) + DeleteFirstMoveAndGiveMoveToMon(egg, gUnknown_030004D8[i]); + break; + } + } + } + else + break; + } + for (i = 0; i < 4; i ++) + { + if (gUnknown_030004D8[i] != MOVE_NONE) + { + for (j = 0; j < 50 + 8; j ++) + { + if (gUnknown_030004D8[i] == ItemIdToBattleMoveId(ITEM_TM01 + j) && CanMonLearnTMHM(egg, j)) + { + if (GiveMoveToMon(egg, gUnknown_030004D8[i]) == 0xffff) + DeleteFirstMoveAndGiveMoveToMon(egg, gUnknown_030004D8[i]); + } + } + } + } + for (i = 0; i < 4; i ++) + { + if (gUnknown_030004D8[i] == MOVE_NONE) + break; + for (j = 0; j < 4; j ++) + { + if (gUnknown_030004D8[i] == gUnknown_03000500[j] && gUnknown_030004D8[i] != MOVE_NONE) + gUnknown_030004E0[numSharedParentMoves++] = gUnknown_030004D8[i]; + } + } + for (i = 0; i < 4; i ++) + { + if (gUnknown_030004E0[i] == MOVE_NONE) + break; + for (j = 0; j < numLevelUpMoves; j ++) + { + if (gUnknown_03000470[j] != MOVE_NONE && gUnknown_030004E0[i] == gUnknown_03000470[j]) + { + if (GiveMoveToMon(egg, gUnknown_030004E0[i]) == 0xffff) + DeleteFirstMoveAndGiveMoveToMon(egg, gUnknown_030004E0[i]); + break; + } + } + } +} -- cgit v1.2.3 From 433823c4e330032b68a379784c98efaa3a94f15c Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 30 Aug 2017 15:32:14 -0400 Subject: Fix pokemon_get_eggmoves --- src/daycare.c | 463 +++++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 361 insertions(+), 102 deletions(-) diff --git a/src/daycare.c b/src/daycare.c index a4dd438bb..38bfba85e 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -386,117 +386,35 @@ void InheritIVs(struct Pokemon *egg, struct DayCareData *dayCareData) } } -#ifdef NONMATCHING -u8 pokemon_get_eggmoves(struct Pokemon *egg, u16 buffer[10]) +u8 pokemon_get_eggmoves(struct Pokemon *pokemon, u16 *eggMoves) { - u16 i, j; - u16 nEggMoves = 0; - u16 offset = 0; - u16 species = GetMonData(egg, MON_DATA_SPECIES); + u16 eggMoveIdx; + u16 numMovesFound; + u16 species; + u16 i; + + numMovesFound = 0; + eggMoveIdx = 0; + species = GetMonData(pokemon, MON_DATA_SPECIES); for (i = 0; i < ARRAY_COUNT(gEggMoves) - 1; i ++) + { if (gEggMoves[i] == species + EGG_MOVES_SPECIES_OFFSET) { - offset = i + 1; + eggMoveIdx = i + 1; break; } - // Register differences incurred here due to cryptic duplication of gEggMoves pointer - for (j = 0; j < 10 && gEggMoves[offset + j] <= EGG_MOVES_SPECIES_OFFSET; j ++) + } + for (i = 0; i < 10; i ++) { - buffer[j] = gEggMoves[offset + j]; - nEggMoves ++; + if (gEggMoves[eggMoveIdx + i] > EGG_MOVES_SPECIES_OFFSET) + { + break; + } + eggMoves[i] = gEggMoves[eggMoveIdx + i]; + numMovesFound++; } - return nEggMoves; -} -#else -__attribute__((naked)) -u8 pokemon_get_eggmoves(struct Pokemon *egg, u16 buffer[10]) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r8\n" - "\tpush {r7}\n" - "\tmov r8, r1\n" - "\tmovs r6, 0\n" - "\tmovs r4, 0\n" - "\tmovs r1, 0xB\n" - "\tbl GetMonData\n" - "\tlsls r0, 16\n" - "\tlsrs r3, r0, 16\n" - "\tmovs r2, 0\n" - "\tldr r5, _08041B44 @ =gEggMoves\n" - "\tldrh r1, [r5]\n" - "\tldr r7, _08041B48 @ =0x00004e20\n" - "\tadds r0, r3, r7\n" - "\tcmp r1, r0\n" - "\tbne _08041B4C\n" - "\tmovs r4, 0x1\n" - "\tb _08041B6E\n" - "\t.align 2, 0\n" - "_08041B44: .4byte gEggMoves\n" - "_08041B48: .4byte 0x00004e20\n" - "_08041B4C:\n" - "\tadds r0, r2, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r2, r0, 16\n" - "\tldr r0, _08041BB8 @ =0x00000471\n" - "\tldr r5, _08041BBC @ =gEggMoves\n" - "\tcmp r2, r0\n" - "\tbhi _08041B6E\n" - "\tlsls r0, r2, 1\n" - "\tadds r0, r5\n" - "\tldrh r1, [r0]\n" - "\tldr r7, _08041BC0 @ =0x00004e20\n" - "\tadds r0, r3, r7\n" - "\tcmp r1, r0\n" - "\tbne _08041B4C\n" - "\tadds r0, r2, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r4, r0, 16\n" - "_08041B6E:\n" - "\tmovs r2, 0\n" - "\tlsls r0, r4, 1\n" - "\tadds r0, r5\n" - "\tldrh r0, [r0]\n" - "\tldr r1, _08041BC0 @ =0x00004e20\n" - "\tcmp r0, r1\n" - "\tbhi _08041BAA\n" - "\tadds r7, r5, 0\n" - "\tadds r3, r1, 0\n" - "_08041B80:\n" - "\tlsls r1, r2, 1\n" - "\tadd r1, r8\n" - "\tadds r0, r4, r2\n" - "\tlsls r0, 1\n" - "\tadds r0, r7\n" - "\tldrh r0, [r0]\n" - "\tstrh r0, [r1]\n" - "\tadds r0, r6, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r6, r0, 16\n" - "\tadds r0, r2, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r2, r0, 16\n" - "\tcmp r2, 0x9\n" - "\tbhi _08041BAA\n" - "\tadds r0, r4, r2\n" - "\tlsls r0, 1\n" - "\tadds r0, r5\n" - "\tldrh r0, [r0]\n" - "\tcmp r0, r3\n" - "\tbls _08041B80\n" - "_08041BAA:\n" - "\tlsls r0, r6, 24\n" - "\tlsrs r0, 24\n" - "\tpop {r3}\n" - "\tmov r8, r3\n" - "\tpop {r4-r7}\n" - "\tpop {r1}\n" - "\tbx r1\n" - "\t.align 2, 0\n" - "_08041BB8: .4byte 0x00000471\n" - "_08041BBC: .4byte gEggMoves\n" - "_08041BC0: .4byte 0x00004e20"); + return numMovesFound; } -#endif extern u16 gUnknown_03000470[50]; extern u16 gUnknown_030004D8[4]; @@ -504,6 +422,7 @@ extern u16 gUnknown_030004E0[4]; extern u16 gUnknown_030004E8[10]; extern u16 gUnknown_03000500[4]; +#ifdef NONMATCHING void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, struct BoxPokemon *mom) { u16 numSharedParentMoves; @@ -587,3 +506,343 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st } } } +#else +__attribute__((naked)) +void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, struct BoxPokemon *mom) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0xC\n" + "\tadds r7, r0, 0\n" + "\tmov r10, r1\n" + "\tmov r9, r2\n" + "\tmovs r0, 0\n" + "\tstr r0, [sp]\n" + "\tmovs r6, 0\n" + "\tldr r5, _08041CC8 @ =gUnknown_03000500\n" + "\tmovs r2, 0\n" + "\tldr r4, _08041CCC @ =gUnknown_030004D8\n" + "\tldr r3, _08041CD0 @ =gUnknown_030004E0\n" + "_08041BE4:\n" + "\tlsls r1, r6, 1\n" + "\tadds r0, r1, r5\n" + "\tstrh r2, [r0]\n" + "\tadds r0, r1, r4\n" + "\tstrh r2, [r0]\n" + "\tadds r1, r3\n" + "\tstrh r2, [r1]\n" + "\tadds r0, r6, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r6, r0, 16\n" + "\tcmp r6, 0x3\n" + "\tbls _08041BE4\n" + "\tmovs r6, 0\n" + "\tldr r2, _08041CD4 @ =gUnknown_030004E8\n" + "\tmovs r1, 0\n" + "_08041C02:\n" + "\tlsls r0, r6, 1\n" + "\tadds r0, r2\n" + "\tstrh r1, [r0]\n" + "\tadds r0, r6, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r6, r0, 16\n" + "\tcmp r6, 0x9\n" + "\tbls _08041C02\n" + "\tmovs r6, 0\n" + "\tldr r2, _08041CD8 @ =gUnknown_03000470\n" + "\tmovs r1, 0\n" + "_08041C18:\n" + "\tlsls r0, r6, 1\n" + "\tadds r0, r2\n" + "\tstrh r1, [r0]\n" + "\tadds r0, r6, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r6, r0, 16\n" + "\tcmp r6, 0x31\n" + "\tbls _08041C18\n" + "\tadds r0, r7, 0\n" + "\tmovs r1, 0xB\n" + "\tbl GetMonData\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tldr r1, _08041CD8 @ =gUnknown_03000470\n" + "\tbl GetLevelUpMovesBySpecies\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tstr r0, [sp, 0x4]\n" + "\tmovs r6, 0\n" + "\tldr r1, _08041CCC @ =gUnknown_030004D8\n" + "\tmov r8, r1\n" + "_08041C46:\n" + "\tadds r5, r6, 0\n" + "\tadds r5, 0xD\n" + "\tmov r0, r10\n" + "\tadds r1, r5, 0\n" + "\tbl GetBoxMonData\n" + "\tlsls r4, r6, 1\n" + "\tmov r2, r8\n" + "\tadds r1, r4, r2\n" + "\tstrh r0, [r1]\n" + "\tmov r0, r9\n" + "\tadds r1, r5, 0\n" + "\tbl GetBoxMonData\n" + "\tldr r1, _08041CC8 @ =gUnknown_03000500\n" + "\tadds r4, r1\n" + "\tstrh r0, [r4]\n" + "\tadds r0, r6, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r6, r0, 16\n" + "\tcmp r6, 0x3\n" + "\tbls _08041C46\n" + "\tldr r1, _08041CD4 @ =gUnknown_030004E8\n" + "\tadds r0, r7, 0\n" + "\tbl pokemon_get_eggmoves\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tmov r8, r0\n" + "\tmovs r6, 0\n" + "_08041C82:\n" + "\tldr r0, _08041CCC @ =gUnknown_030004D8\n" + "\tlsls r1, r6, 1\n" + "\tadds r2, r1, r0\n" + "\tldrh r1, [r2]\n" + "\tmov r9, r0\n" + "\tcmp r1, 0\n" + "\tbeq _08041CF8\n" + "\tmovs r5, 0\n" + "\tcmp r5, r8\n" + "\tbcs _08041CEA\n" + "\tadds r4, r2, 0\n" + "\tldr r2, _08041CDC @ =0x0000ffff\n" + "_08041C9A:\n" + "\tldr r0, _08041CD4 @ =gUnknown_030004E8\n" + "\tlsls r1, r5, 1\n" + "\tadds r1, r0\n" + "\tldrh r0, [r4]\n" + "\tldrh r1, [r1]\n" + "\tcmp r0, r1\n" + "\tbne _08041CE0\n" + "\tadds r1, r0, 0\n" + "\tadds r0, r7, 0\n" + "\tstr r2, [sp, 0x8]\n" + "\tbl GiveMoveToMon\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tldr r2, [sp, 0x8]\n" + "\tcmp r0, r2\n" + "\tbne _08041CEA\n" + "\tldrh r1, [r4]\n" + "\tadds r0, r7, 0\n" + "\tbl DeleteFirstMoveAndGiveMoveToMon\n" + "\tb _08041CEA\n" + "\t.align 2, 0\n" + "_08041CC8: .4byte gUnknown_03000500\n" + "_08041CCC: .4byte gUnknown_030004D8\n" + "_08041CD0: .4byte gUnknown_030004E0\n" + "_08041CD4: .4byte gUnknown_030004E8\n" + "_08041CD8: .4byte gUnknown_03000470\n" + "_08041CDC: .4byte 0x0000ffff\n" + "_08041CE0:\n" + "\tadds r0, r5, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r5, r0, 16\n" + "\tcmp r5, r8\n" + "\tbcc _08041C9A\n" + "_08041CEA:\n" + "\tadds r0, r6, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r6, r0, 16\n" + "\tldr r3, _08041E14 @ =gUnknown_030004D8\n" + "\tmov r9, r3\n" + "\tcmp r6, 0x3\n" + "\tbls _08041C82\n" + "_08041CF8:\n" + "\tmovs r6, 0\n" + "_08041CFA:\n" + "\tlsls r0, r6, 1\n" + "\tmov r2, r9\n" + "\tadds r1, r0, r2\n" + "\tldrh r1, [r1]\n" + "\tadds r2, r0, 0\n" + "\tadds r6, 0x1\n" + "\tmov r8, r6\n" + "\tcmp r1, 0\n" + "\tbeq _08041D5C\n" + "\tmovs r5, 0\n" + "\tldr r0, _08041E14 @ =gUnknown_030004D8\n" + "\tadds r4, r2, r0\n" + "\tldr r6, _08041E18 @ =0x0000ffff\n" + "\tmov r9, r0\n" + "_08041D16:\n" + "\tldr r3, _08041E1C @ =0x00000121\n" + "\tadds r0, r5, r3\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tbl ItemIdToBattleMoveId\n" + "\tldrh r1, [r4]\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tcmp r1, r0\n" + "\tbne _08041D52\n" + "\tlsls r1, r5, 24\n" + "\tlsrs r1, 24\n" + "\tadds r0, r7, 0\n" + "\tbl CanMonLearnTMHM\n" + "\tcmp r0, 0\n" + "\tbeq _08041D52\n" + "\tldrh r1, [r4]\n" + "\tadds r0, r7, 0\n" + "\tbl GiveMoveToMon\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tcmp r0, r6\n" + "\tbne _08041D52\n" + "\tldrh r1, [r4]\n" + "\tadds r0, r7, 0\n" + "\tbl DeleteFirstMoveAndGiveMoveToMon\n" + "_08041D52:\n" + "\tadds r0, r5, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r5, r0, 16\n" + "\tcmp r5, 0x39\n" + "\tbls _08041D16\n" + "_08041D5C:\n" + "\tmov r1, r8\n" + "\tlsls r0, r1, 16\n" + "\tlsrs r6, r0, 16\n" + "\tcmp r6, 0x3\n" + "\tbls _08041CFA\n" + "\tmovs r6, 0\n" + "\tmov r2, r9\n" + "\tldrh r0, [r2]\n" + "\tldr r3, _08041E20 @ =gUnknown_030004E0\n" + "\tmov r10, r3\n" + "\tcmp r0, 0\n" + "\tbeq _08041DC6\n" + "\tmov r4, r9\n" + "\tldr r0, _08041E24 @ =gUnknown_03000500\n" + "\tmov r9, r0\n" + "\tmov r12, r10\n" + "_08041D7C:\n" + "\tmovs r5, 0\n" + "\tlsls r2, r6, 1\n" + "\tadds r6, 0x1\n" + "\tmov r8, r6\n" + "\tadds r3, r2, r4\n" + "_08041D86:\n" + "\tlsls r0, r5, 1\n" + "\tadd r0, r9\n" + "\tldrh r2, [r3]\n" + "\tadds r1, r2, 0\n" + "\tldrh r0, [r0]\n" + "\tcmp r1, r0\n" + "\tbne _08041DA8\n" + "\tcmp r1, 0\n" + "\tbeq _08041DA8\n" + "\tldr r1, [sp]\n" + "\tadds r0, r1, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tstr r0, [sp]\n" + "\tlsls r1, 1\n" + "\tadd r1, r12\n" + "\tstrh r2, [r1]\n" + "_08041DA8:\n" + "\tadds r0, r5, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r5, r0, 16\n" + "\tcmp r5, 0x3\n" + "\tbls _08041D86\n" + "\tmov r1, r8\n" + "\tlsls r0, r1, 16\n" + "\tlsrs r6, r0, 16\n" + "\tcmp r6, 0x3\n" + "\tbhi _08041DC6\n" + "\tlsls r0, r6, 1\n" + "\tadds r0, r4\n" + "\tldrh r0, [r0]\n" + "\tcmp r0, 0\n" + "\tbne _08041D7C\n" + "_08041DC6:\n" + "\tmovs r6, 0\n" + "\tmov r2, r10\n" + "\tldrh r0, [r2]\n" + "\tcmp r0, 0\n" + "\tbeq _08041E50\n" + "_08041DD0:\n" + "\tmovs r5, 0\n" + "\tadds r3, r6, 0x1\n" + "\tmov r8, r3\n" + "\tldr r0, [sp, 0x4]\n" + "\tcmp r5, r0\n" + "\tbcs _08041E38\n" + "\tldr r2, _08041E18 @ =0x0000ffff\n" + "_08041DDE:\n" + "\tldr r1, _08041E28 @ =gUnknown_03000470\n" + "\tlsls r0, r5, 1\n" + "\tadds r0, r1\n" + "\tldrh r1, [r0]\n" + "\tcmp r1, 0\n" + "\tbeq _08041E2C\n" + "\tlsls r0, r6, 1\n" + "\tmov r3, r10\n" + "\tadds r4, r0, r3\n" + "\tldrh r0, [r4]\n" + "\tcmp r0, r1\n" + "\tbne _08041E2C\n" + "\tadds r1, r0, 0\n" + "\tadds r0, r7, 0\n" + "\tstr r2, [sp, 0x8]\n" + "\tbl GiveMoveToMon\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tldr r2, [sp, 0x8]\n" + "\tcmp r0, r2\n" + "\tbne _08041E38\n" + "\tldrh r1, [r4]\n" + "\tadds r0, r7, 0\n" + "\tbl DeleteFirstMoveAndGiveMoveToMon\n" + "\tb _08041E38\n" + "\t.align 2, 0\n" + "_08041E14: .4byte gUnknown_030004D8\n" + "_08041E18: .4byte 0x0000ffff\n" + "_08041E1C: .4byte 0x00000121\n" + "_08041E20: .4byte gUnknown_030004E0\n" + "_08041E24: .4byte gUnknown_03000500\n" + "_08041E28: .4byte gUnknown_03000470\n" + "_08041E2C:\n" + "\tadds r0, r5, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r5, r0, 16\n" + "\tldr r0, [sp, 0x4]\n" + "\tcmp r5, r0\n" + "\tbcc _08041DDE\n" + "_08041E38:\n" + "\tmov r1, r8\n" + "\tlsls r0, r1, 16\n" + "\tlsrs r6, r0, 16\n" + "\tcmp r6, 0x3\n" + "\tbhi _08041E50\n" + "\tldr r0, _08041E60 @ =gUnknown_030004E0\n" + "\tlsls r1, r6, 1\n" + "\tadds r1, r0\n" + "\tldrh r1, [r1]\n" + "\tmov r10, r0\n" + "\tcmp r1, 0\n" + "\tbne _08041DD0\n" + "_08041E50:\n" + "\tadd sp, 0xC\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_08041E60: .4byte gUnknown_030004E0"); +} +#endif -- cgit v1.2.3 From 97d9399be794f6a94137a1945af52ef1e26de4a7 Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 30 Aug 2017 16:02:46 -0400 Subject: Restore previously-decompiled functions; make static what should be static --- asm/daycare.s | 429 ------------------------------------------------------ include/global.h | 2 +- include/pokemon.h | 1 + src/daycare.c | 219 +++++++++++++++++++++++----- 4 files changed, 182 insertions(+), 469 deletions(-) diff --git a/asm/daycare.s b/asm/daycare.s index a9612e8f7..08000a294 100644 --- a/asm/daycare.s +++ b/asm/daycare.s @@ -6,435 +6,6 @@ .text - thumb_func_start sub_8041E64 -sub_8041E64: @ 8041E64 - adds r3, r0, 0 - movs r1, 0x8C - lsls r1, 1 - adds r0, r3, r1 - movs r2, 0 - movs r1, 0 - strh r1, [r0] - movs r1, 0x8D - lsls r1, 1 - adds r0, r3, r1 - strb r2, [r0] - bx lr - thumb_func_end sub_8041E64 - - thumb_func_start sub_8041E7C -sub_8041E7C: @ 8041E7C - push {lr} - ldr r0, _08041E88 @ =gSaveBlock1 + 0x2F9C - bl sub_8041E64 - pop {r0} - bx r0 - .align 2, 0 -_08041E88: .4byte gSaveBlock1 + 0x2F9C - thumb_func_end sub_8041E7C - - thumb_func_start incense_effects -incense_effects: @ 8041E8C - push {r4-r7,lr} - adds r4, r0, 0 - adds r5, r1, 0 - ldrh r1, [r4] - movs r7, 0xB4 - lsls r7, 1 - cmp r1, r7 - beq _08041EA4 - movs r0, 0xAF - lsls r0, 1 - cmp r1, r0 - bne _08041EE6 -_08041EA4: - adds r0, r5, 0 - movs r1, 0xC - bl GetBoxMonData - lsls r0, 16 - lsrs r6, r0, 16 - adds r0, r5, 0 - adds r0, 0x50 - movs r1, 0xC - bl GetBoxMonData - lsls r0, 16 - lsrs r2, r0, 16 - ldrh r0, [r4] - cmp r0, r7 - bne _08041ED0 - cmp r6, 0xDD - beq _08041ED0 - cmp r2, 0xDD - beq _08041ED0 - movs r0, 0xCA - strh r0, [r4] -_08041ED0: - ldrh r1, [r4] - movs r0, 0xAF - lsls r0, 1 - cmp r1, r0 - bne _08041EE6 - cmp r6, 0xDC - beq _08041EE6 - cmp r2, 0xDC - beq _08041EE6 - movs r0, 0xB7 - strh r0, [r4] -_08041EE6: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end incense_effects - - thumb_func_start sub_8041EEC -sub_8041EEC: @ 8041EEC - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - mov r8, r0 - adds r6, r1, 0 - movs r4, 0 - movs r7, 0x1 -_08041EFC: - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 4 - mov r1, r8 - adds r5, r1, r0 - adds r0, r5, 0 - movs r1, 0xB - bl GetBoxMonData - lsls r1, r4, 1 - add r1, sp - strh r0, [r1] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x84 - bne _08041F26 - adds r0, r4, 0 - eors r0, r7 - strb r0, [r6] - strb r4, [r6, 0x1] - b _08041F3C -_08041F26: - adds r0, r5, 0 - bl GetBoxMonGender - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFE - bne _08041F3C - strb r4, [r6] - adds r0, r4, 0 - eors r0, r7 - strb r0, [r6, 0x1] -_08041F3C: - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x1 - bls _08041EFC - ldrb r0, [r6] - lsls r0, 1 - add r0, sp - ldrh r0, [r0] - bl sub_8041870 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x1D - bne _08041F6E - movs r0, 0x8C - lsls r0, 1 - add r0, r8 - ldrh r1, [r0] - movs r0, 0x80 - lsls r0, 8 - ands r0, r1 - cmp r0, 0 - beq _08041F6E - movs r4, 0x20 -_08041F6E: - ldr r0, _08041FC0 @ =0x00000183 - cmp r4, r0 - bne _08041F88 - subs r0, 0x6B - add r0, r8 - ldrh r1, [r0] - movs r0, 0x80 - lsls r0, 8 - ands r0, r1 - cmp r0, 0 - beq _08041F88 - movs r4, 0xC1 - lsls r4, 1 -_08041F88: - ldrb r0, [r6, 0x1] - lsls r0, 1 - add r0, sp - ldrh r0, [r0] - cmp r0, 0x84 - bne _08041FB2 - ldrb r1, [r6] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - add r0, r8 - bl GetBoxMonGender - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFE - beq _08041FB2 - ldrb r1, [r6, 0x1] - ldrb r0, [r6] - strb r0, [r6, 0x1] - strb r1, [r6] -_08041FB2: - adds r0, r4, 0 - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08041FC0: .4byte 0x00000183 - thumb_func_end sub_8041EEC - - thumb_func_start sub_8041FC4 -sub_8041FC4: @ 8041FC4 - push {r4-r6,lr} - sub sp, 0x6C - adds r5, r0, 0 - add r6, sp, 0x64 - adds r1, r6, 0 - bl sub_8041EEC - add r4, sp, 0x68 - strh r0, [r4] - adds r0, r4, 0 - adds r1, r5, 0 - bl incense_effects - ldrh r1, [r4] - mov r0, sp - adds r2, r5, 0 - bl sub_80420FC - mov r0, sp - adds r1, r5, 0 - bl InheritIVs - ldrb r0, [r6, 0x1] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 4 - adds r1, r5, r1 - ldrb r0, [r6] - lsls r2, r0, 2 - adds r2, r0 - lsls r2, 4 - adds r2, r5, r2 - mov r0, sp - bl daycare_build_child_moveset - mov r2, sp - adds r2, 0x6A - movs r0, 0x1 - strb r0, [r2] - mov r0, sp - movs r1, 0x2D - bl SetMonData - ldr r0, _08042040 @ =gPlayerParty - movs r1, 0xFA - lsls r1, 1 - adds r0, r1 - mov r1, sp - movs r2, 0x64 - bl memcpy - bl party_compaction - bl CalculatePlayerPartyCount - adds r0, r5, 0 - bl sub_8041E64 - add sp, 0x6C - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08042040: .4byte gPlayerParty - thumb_func_end sub_8041FC4 - - thumb_func_start sub_8042044 -sub_8042044: @ 8042044 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x18 - adds r7, r0, 0 - adds r5, r1, 0 - adds r6, r2, 0 - lsls r5, 16 - lsrs r5, 16 - lsls r6, 24 - lsrs r6, 24 - movs r4, 0 - str r4, [sp] - str r4, [sp, 0x4] - str r4, [sp, 0x8] - str r4, [sp, 0xC] - adds r1, r5, 0 - movs r2, 0x5 - movs r3, 0x20 - bl CreateMon - movs r0, 0x12 - add r0, sp - mov r8, r0 - strb r4, [r0] - movs r1, 0x4 - add r0, sp, 0x10 - strh r1, [r0] - mov r4, sp - adds r4, 0x13 - movs r0, 0x1 - mov r9, r0 - mov r0, r9 - strb r0, [r4] - adds r0, r7, 0 - movs r1, 0x26 - add r2, sp, 0x10 - bl SetMonData - ldr r2, _080420F4 @ =gUnknown_08209AD4 - adds r0, r7, 0 - movs r1, 0x2 - bl SetMonData - lsls r2, r5, 3 - subs r2, r5 - lsls r2, 2 - ldr r0, _080420F8 @ =gBaseStats + 0x11 @ egg cycles offset - adds r2, r0 - adds r0, r7, 0 - movs r1, 0x20 - bl SetMonData - adds r0, r7, 0 - movs r1, 0x24 - mov r2, r8 - bl SetMonData - adds r0, r7, 0 - movs r1, 0x3 - adds r2, r4, 0 - bl SetMonData - cmp r6, 0 - beq _080420D6 - add r2, sp, 0x14 - movs r0, 0xFD - strb r0, [r2] - adds r0, r7, 0 - movs r1, 0x23 - bl SetMonData -_080420D6: - mov r2, sp - adds r2, 0x15 - mov r0, r9 - strb r0, [r2] - adds r0, r7, 0 - movs r1, 0x2D - bl SetMonData - add sp, 0x18 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080420F4: .4byte gUnknown_08209AD4 -_080420F8: .4byte gBaseStats + 0x11 @ egg cycles offset - thumb_func_end sub_8042044 - - thumb_func_start sub_80420FC -sub_80420FC: @ 80420FC - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - sub sp, 0x14 - adds r6, r0, 0 - adds r5, r1, 0 - adds r4, r2, 0 - lsls r5, 16 - lsrs r5, 16 - bl Random - movs r1, 0x8C - lsls r1, 1 - adds r4, r1 - ldrh r1, [r4] - lsls r0, 16 - orrs r1, r0 - movs r0, 0x1 - mov r8, r0 - str r0, [sp] - str r1, [sp, 0x4] - movs r4, 0 - str r4, [sp, 0x8] - str r4, [sp, 0xC] - adds r0, r6, 0 - adds r1, r5, 0 - movs r2, 0x5 - movs r3, 0x20 - bl CreateMon - movs r1, 0x12 - add r1, sp - mov r9, r1 - strb r4, [r1] - movs r1, 0x4 - add r0, sp, 0x10 - strh r1, [r0] - mov r4, sp - adds r4, 0x13 - mov r0, r8 - strb r0, [r4] - adds r0, r6, 0 - movs r1, 0x26 - add r2, sp, 0x10 - bl SetMonData - ldr r2, _08042198 @ =gUnknown_08209AD4 - adds r0, r6, 0 - movs r1, 0x2 - bl SetMonData - lsls r2, r5, 3 - subs r2, r5 - lsls r2, 2 - ldr r0, _0804219C @ =gBaseStats + 0x11 @ egg cycles offset - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x20 - bl SetMonData - adds r0, r6, 0 - movs r1, 0x24 - mov r2, r9 - bl SetMonData - adds r0, r6, 0 - movs r1, 0x3 - adds r2, r4, 0 - bl SetMonData - add sp, 0x14 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08042198: .4byte gUnknown_08209AD4 -_0804219C: .4byte gBaseStats + 0x11 @ egg cycles offset - thumb_func_end sub_80420FC - - thumb_func_start sp0B8_daycare -sp0B8_daycare: @ 80421A0 - push {lr} - ldr r0, _080421AC @ =gSaveBlock1 + 0x2F9C - bl sub_8041FC4 - pop {r0} - bx r0 - .align 2, 0 -_080421AC: .4byte gSaveBlock1 + 0x2F9C - thumb_func_end sp0B8_daycare - thumb_func_start sub_80421B0 sub_80421B0: @ 80421B0 push {r4-r7,lr} diff --git a/include/global.h b/include/global.h index ee54007b2..82dcd1a53 100644 --- a/include/global.h +++ b/include/global.h @@ -557,7 +557,7 @@ struct DayCareMailEtc struct DayCareData { struct BoxPokemon mons[2]; struct DayCareMailEtc mail; - u16 unk_118; + u16 eggPersonalityLo; u8 unk_11a; u8 unk_11b; }; diff --git a/include/pokemon.h b/include/pokemon.h index da9a5f041..184bc6cdb 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -602,5 +602,6 @@ bool32 sub_8040D3C(u16 species, u8 *name, u8 language); s8 sub_8040A54(struct Pokemon *, u8); u16 GetMonEVCount(struct Pokemon *); u8 GetLevelUpMovesBySpecies(u16, u16 *); +u8 TryIncrementMonLevel(struct Pokemon *); #endif // GUARD_POKEMON_H diff --git a/src/daycare.c b/src/daycare.c index 38bfba85e..1faaea4c6 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -14,6 +14,12 @@ #include "strings2.h" #include "data/pokemon/egg_moves.h" #include "party_menu.h" +#include "field_effect.h" + +extern u16 word_2024E82; + +static void sub_80417F4(struct DayCareMail *); +static void sub_80420FC(struct Pokemon *, u16, struct DayCareData *); const u8 *const gUnknown_08209AC4[] = { DaycareText_GetAlongVeryWell, @@ -24,8 +30,6 @@ const u8 *const gUnknown_08209AC4[] = { const u8 gUnknown_08209AD4[] = _("タマゴ"); -extern u8 gLastFieldPokeMenuOpened; - u8 *GetMonNick(struct Pokemon *mon, u8 *dest) { s8 nickname[POKEMON_NAME_LENGTH * 2]; @@ -54,7 +58,7 @@ u8 Daycare_CountPokemon(struct BoxPokemon *daycare_data) return count; } -void sub_8041324(struct BoxPokemon * box_pokemon, struct DayCareMailEtc * void_pointer) +void sub_8041324(struct BoxPokemon * box_pokemon, struct DayCareMailEtc * daycareMailEtc) { u8 i; u8 specCount; @@ -66,20 +70,20 @@ void sub_8041324(struct BoxPokemon * box_pokemon, struct DayCareMailEtc * void_p specCount ++; if (GetBoxMonData(&box_pokemon[i], MON_DATA_HELD_ITEM) == ITEM_NONE) { - void_pointer->extra.rc.unk74[i] = 0; + daycareMailEtc->extra.rc.unk74[i] = 0; } else { - void_pointer->extra.rc.unk74[i] = 1; + daycareMailEtc->extra.rc.unk74[i] = 1; } } else { - void_pointer->extra.rc.unk74[i] = 1; + daycareMailEtc->extra.rc.unk74[i] = 1; } } - void_pointer->extra.rc.unk70 = specCount; + daycareMailEtc->extra.rc.unk70 = specCount; } -s8 Daycare_FindEmptySpot(struct BoxPokemon * daycare_data) +static s8 Daycare_FindEmptySpot(struct BoxPokemon * daycare_data) { u8 i; @@ -90,7 +94,8 @@ s8 Daycare_FindEmptySpot(struct BoxPokemon * daycare_data) return -1; } -void Daycare_SendPokemon(struct Pokemon * mon, struct DayCareData * daycare_data){ // unfinished +static void Daycare_SendPokemon(struct Pokemon * mon, struct DayCareData * daycare_data) +{ s8 empty_slot; u8 mail; u8 *names; @@ -118,9 +123,7 @@ void Daycare_SendPokemon_Special() Daycare_SendPokemon(gPlayerParty + gLastFieldPokeMenuOpened, &gSaveBlock1.daycareData); } -void sub_80417F4(struct DayCareMail *); - -void sub_80414C0(struct DayCareData * daycare_data) +static void sub_80414C0(struct DayCareData * daycare_data) { if((GetBoxMonData(&daycare_data->mons[1], MON_DATA_SPECIES) != 0) && GetBoxMonData(&daycare_data->mons[0], MON_DATA_SPECIES) == 0) { @@ -133,33 +136,32 @@ void sub_80414C0(struct DayCareData * daycare_data) } } -u8 TryIncrementMonLevel(struct Pokemon *); -extern u16 word_2024E82; - -void sub_804151C(struct Pokemon * mon) +static void DayCare_LevelUpMoves(struct Pokemon * mon) { s32 i; u8 r6; u16 temp; - for(i = 0; i < 100; i++){ - if(TryIncrementMonLevel(mon) == FALSE) goto end; - - r6 = 1; - while((temp = sub_803B7C8(mon, r6)) != 0){ - r6 = 0; - if(temp == 0xffff){ - DeleteFirstMoveAndGiveMoveToMon(mon, word_2024E82); + for (i = 0; i < 100; i++) + { + if (TryIncrementMonLevel(mon)) + { + r6 = 1; + while ((temp = sub_803B7C8(mon, r6)) != 0) + { + r6 = 0; + if (temp == 0xffff) + DeleteFirstMoveAndGiveMoveToMon(mon, word_2024E82); } } + else + break; } - end: - CalculateMonStats(mon); } -u16 sub_8041570(struct DayCareData * daycare_data, u8 slot) +static u16 sub_8041570(struct DayCareData * daycare_data, u8 slot) { u16 species; u32 experience; @@ -172,7 +174,7 @@ u16 sub_8041570(struct DayCareData * daycare_data, u8 slot) { experience = GetMonData(&pokemon, MON_DATA_EXP) + daycare_data->mail.extra.steps[slot]; SetMonData(&pokemon, MON_DATA_EXP, (u8 *)&experience); - sub_804151C(&pokemon); + DayCare_LevelUpMoves(&pokemon); } gPlayerParty[PARTY_SIZE - 1] = pokemon; if (daycare_data->mail.data[slot].mail.itemId) @@ -200,7 +202,7 @@ u8 Daycare_GetLevelAfterSteps(struct BoxPokemon * mon, u32 steps){ return GetLevelFromBoxMonExp(&temp); } -u8 sub_80416A0(struct DayCareData *daycareData, u8 slot) +static u8 sub_80416A0(struct DayCareData *daycareData, u8 slot) { u8 levelBefore; u8 levelAfter; @@ -210,7 +212,7 @@ u8 sub_80416A0(struct DayCareData *daycareData, u8 slot) return levelAfter - levelBefore; } -u8 sub_80416E8(struct DayCareData *dayCareData, u8 slot) +static u8 sub_80416E8(struct DayCareData *dayCareData, u8 slot) { u8 levelDelta = sub_80416A0(dayCareData, slot); GetBoxMonNick(&dayCareData->mons[slot], gStringVar1); @@ -218,7 +220,7 @@ u8 sub_80416E8(struct DayCareData *dayCareData, u8 slot) return levelDelta; } -u16 sub_8041728(struct DayCareData *dayCareData, u8 slot) +static u16 sub_8041728(struct DayCareData *dayCareData, u8 slot) { u16 cost; @@ -247,7 +249,7 @@ u8 sub_80417B8(void) return 0; } -void sub_80417F4(struct DayCareMail *mail) +static void sub_80417F4(struct DayCareMail *mail) { u8 zero; u8 *names; @@ -272,7 +274,7 @@ void unref_sub_8041824(struct DayCareData *dayCareData) dayCareData->mail.extra.steps[slot] = 0; sub_80417F4(&dayCareData->mail.data[slot]); } - dayCareData->unk_118 = 0; + dayCareData->eggPersonalityLo = 0; dayCareData->unk_11a = 0; } @@ -303,15 +305,15 @@ u16 sub_8041870(u16 species) return species; } -void sub_80418F0(struct DayCareData *dayCareData) +static void sub_80418F0(struct DayCareData *dayCareData) { - dayCareData->unk_118 = (Random() % 0xfffe) + 1; + dayCareData->eggPersonalityLo = (Random() % 0xfffe) + 1; FlagSet(0x86); } -void sub_804191C(struct DayCareData *dayCareData) +static void sub_804191C(struct DayCareData *dayCareData) { - dayCareData->unk_118 = Random() | 0x8000; + dayCareData->eggPersonalityLo = Random() | 0x8000; FlagSet(0x86); } @@ -338,7 +340,7 @@ static void sub_8041960(u8 *data, u8 idx) data[j++] = temp[i]; } -void InheritIVs(struct Pokemon *egg, struct DayCareData *dayCareData) +static void InheritIVs(struct Pokemon *egg, struct DayCareData *dayCareData) { u8 i; u8 selectedIvs[3]; @@ -386,6 +388,9 @@ void InheritIVs(struct Pokemon *egg, struct DayCareData *dayCareData) } } +#ifdef NONMATCHING +static +#endif u8 pokemon_get_eggmoves(struct Pokemon *pokemon, u16 *eggMoves) { u16 eggMoveIdx; @@ -416,13 +421,13 @@ u8 pokemon_get_eggmoves(struct Pokemon *pokemon, u16 *eggMoves) return numMovesFound; } +#ifdef NONMATCHING extern u16 gUnknown_03000470[50]; extern u16 gUnknown_030004D8[4]; extern u16 gUnknown_030004E0[4]; extern u16 gUnknown_030004E8[10]; extern u16 gUnknown_03000500[4]; -#ifdef NONMATCHING void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, struct BoxPokemon *mom) { u16 numSharedParentMoves; @@ -846,3 +851,139 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st "_08041E60: .4byte gUnknown_030004E0"); } #endif + +static void RemoveEggFromDayCare(struct DayCareData *dayCareData) +{ + dayCareData->eggPersonalityLo = 0; + dayCareData->unk_11a = 0; +} + +void sub_8041E7C(void) +{ + RemoveEggFromDayCare(&gSaveBlock1.daycareData); +} + +static void incense_effects(u16 *species, struct DayCareData *dayCareData) +{ + u16 momItem, dadItem; + if (*species == SPECIES_WYNAUT || *species == SPECIES_AZURILL) + { + momItem = GetBoxMonData(&dayCareData->mons[0], MON_DATA_HELD_ITEM); + dadItem = GetBoxMonData(&dayCareData->mons[1], MON_DATA_HELD_ITEM); + if (*species == SPECIES_WYNAUT && momItem != ITEM_LAX_INCENSE && dadItem != ITEM_LAX_INCENSE) + { + *species = SPECIES_WOBBUFFET; + } + if (*species == SPECIES_AZURILL && momItem != ITEM_SEA_INCENSE && dadItem != ITEM_SEA_INCENSE) + { + *species = SPECIES_MARILL; + } + } +} + +static u16 sub_8041EEC(struct DayCareData *dayCareData, u8 *a1) // inherit_species_from_mom +{ + u16 i; + u16 species[2]; + u16 eggSpecies; + u8 buffer; + for (i=0; i<2; i++) + { + species[i] = GetBoxMonData(&dayCareData->mons[i], MON_DATA_SPECIES); + if (species[i] == SPECIES_DITTO) + { + a1[0] = i ^ 1; + a1[1] = i; + } + else if (GetBoxMonGender(&dayCareData->mons[i]) == MON_FEMALE) + { + a1[0] = i; + a1[1] = i ^ 1; + } + } + eggSpecies = sub_8041870(species[a1[0]]); + if (eggSpecies == SPECIES_NIDORAN_F && dayCareData->eggPersonalityLo & 0x8000) + { + eggSpecies = SPECIES_NIDORAN_M; + } + if (eggSpecies == SPECIES_ILLUMISE && dayCareData->eggPersonalityLo & 0x8000) + { + eggSpecies = SPECIES_VOLBEAT; + } + if (species[a1[1]] == SPECIES_DITTO && GetBoxMonGender(&dayCareData->mons[a1[0]]) != MON_FEMALE) + { + buffer = a1[1]; + a1[1] = a1[0]; + a1[0] = buffer; + } + return eggSpecies; +} + +static void sub_8041FC4(struct DayCareData *dayCareData) // give_egg +{ + struct Pokemon egg; + u16 species; + u8 parents[2]; + u8 isEgg; + species = sub_8041EEC(dayCareData, parents); + incense_effects(&species, dayCareData); + sub_80420FC(&egg, species, dayCareData); + InheritIVs(&egg, dayCareData); + daycare_build_child_moveset(&egg, &dayCareData->mons[parents[1]], &dayCareData->mons[parents[0]]); + isEgg = TRUE; + SetMonData(&egg, MON_DATA_IS_EGG, &isEgg); + gPlayerParty[5] = egg; + party_compaction(); + CalculatePlayerPartyCount(); + RemoveEggFromDayCare(dayCareData); +} + + +void sub_8042044(struct Pokemon *mon, u16 species, u8 overwriteMetLocation) // scr_create_egg +{ + u8 metLevel; + u16 ball; + u8 language; + u8 metLocation; + u8 isEgg; + CreateMon(mon, species, 5, 0x20, FALSE, 0, FALSE, 0); + metLevel = 0; + ball = ITEM_POKE_BALL; + language = LANGUAGE_JAPANESE; + SetMonData(mon, MON_DATA_POKEBALL, (u8 *)&ball); + SetMonData(mon, MON_DATA_NICKNAME, gUnknown_08209AD4); + SetMonData(mon, MON_DATA_FRIENDSHIP, &gBaseStats[species].eggCycles); + SetMonData(mon, MON_DATA_MET_LEVEL, &metLevel); + SetMonData(mon, MON_DATA_LANGUAGE, &language); + if (overwriteMetLocation) + { + metLocation = 0xfd; + SetMonData(mon, MON_DATA_MET_LOCATION, &metLocation); + } + isEgg = TRUE; + SetMonData(mon, MON_DATA_IS_EGG, &isEgg); +} + +static void sub_80420FC(struct Pokemon *mon, u16 species, struct DayCareData *dayCareData) +{ + u32 personality; + u16 ball; + u8 metLevel; + u8 language; + personality = dayCareData->eggPersonalityLo | (Random() << 16); + CreateMon(mon, species, 5, 0x20, TRUE, personality, FALSE, 0); + metLevel = 0; + ball = ITEM_POKE_BALL; + language = LANGUAGE_JAPANESE; + SetMonData(mon, MON_DATA_POKEBALL, (u8 *)&ball); + SetMonData(mon, MON_DATA_NICKNAME, gUnknown_08209AD4); + SetMonData(mon, MON_DATA_FRIENDSHIP, &gBaseStats[species].eggCycles); + SetMonData(mon, MON_DATA_MET_LEVEL, &metLevel); + SetMonData(mon, MON_DATA_LANGUAGE, &language); +} + +void sp0B8_daycare(void) +{ + sub_8041FC4(&gSaveBlock1.daycareData); +} + -- cgit v1.2.3 From a1c5f2e6bad52af49dbf7de48ac78d4015dd073f Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 30 Aug 2017 16:42:05 -0400 Subject: Nonmatching sub_80421B0 --- asm/daycare.s | 122 --------------------------------- include/global.h | 16 +++-- src/daycare.c | 200 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 192 insertions(+), 146 deletions(-) diff --git a/asm/daycare.s b/asm/daycare.s index 08000a294..01eb6afc0 100644 --- a/asm/daycare.s +++ b/asm/daycare.s @@ -6,128 +6,6 @@ .text - thumb_func_start sub_80421B0 -sub_80421B0: @ 80421B0 - push {r4-r7,lr} - sub sp, 0x8 - adds r7, r0, 0 - movs r2, 0 - movs r6, 0 - adds r5, r7, 0 -_080421BC: - lsls r4, r6, 2 - adds r0, r5, 0 - movs r1, 0x5 - str r2, [sp, 0x4] - bl GetBoxMonData - ldr r2, [sp, 0x4] - cmp r0, 0 - beq _080421DE - movs r0, 0x88 - lsls r0, 1 - adds r1, r7, r0 - adds r1, r4 - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - adds r2, 0x1 -_080421DE: - adds r5, 0x50 - adds r6, 0x1 - cmp r6, 0x1 - bls _080421BC - movs r1, 0x8C - lsls r1, 1 - adds r0, r7, r1 - ldrh r0, [r0] - cmp r0, 0 - bne _08042226 - cmp r2, 0x2 - bne _08042226 - subs r1, 0x4 - adds r0, r7, r1 - ldrb r0, [r0] - cmp r0, 0xFF - bne _08042226 - adds r0, r7, 0 - bl daycare_relationship_score - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x64 - muls r0, r1 - ldr r1, _08042240 @ =0x0000ffff - bl __udivsi3 - cmp r4, r0 - bls _08042226 - bl sub_8041940 -_08042226: - movs r0, 0x8D - lsls r0, 1 - adds r1, r7, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - bne _08042290 - movs r6, 0 - b _08042288 - .align 2, 0 -_08042240: .4byte 0x0000ffff -_08042244: - movs r0, 0x64 - adds r1, r6, 0 - muls r1, r0 - ldr r0, _08042270 @ =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0x2D - bl GetMonData - cmp r0, 0 - beq _08042286 - adds r0, r4, 0 - movs r1, 0x20 - bl GetMonData - str r0, [sp] - cmp r0, 0 - bne _08042278 - ldr r0, _08042274 @ =gSpecialVar_0x8004 - strh r6, [r0] - movs r0, 0x1 - b _08042292 - .align 2, 0 -_08042270: .4byte gPlayerParty -_08042274: .4byte gSpecialVar_0x8004 -_08042278: - subs r0, 0x1 - str r0, [sp] - adds r0, r4, 0 - movs r1, 0x20 - mov r2, sp - bl SetMonData -_08042286: - adds r6, 0x1 -_08042288: - ldr r0, _0804229C @ =gPlayerPartyCount - ldrb r0, [r0] - cmp r6, r0 - bcc _08042244 -_08042290: - movs r0, 0 -_08042292: - add sp, 0x8 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0804229C: .4byte gPlayerPartyCount - thumb_func_end sub_80421B0 - thumb_func_start sub_80422A0 sub_80422A0: @ 80422A0 push {lr} diff --git a/include/global.h b/include/global.h index 82dcd1a53..b2b4ffcc4 100644 --- a/include/global.h +++ b/include/global.h @@ -540,26 +540,30 @@ struct DayCareMail /*0x24*/ u8 names[19]; }; -struct DayCareMailExtra { +struct DayCareMailExtra_RecordMixing { u32 unk70; u16 unk74[2]; }; +struct DayCareMailExtra_EggData { + u32 steps[2]; + u16 personalityLo; + u8 unk_11a; +}; + struct DayCareMailEtc { struct DayCareMail data[2]; union { - struct DayCareMailExtra rc; - u32 steps[2]; + struct DayCareMailExtra_RecordMixing rc; + struct DayCareMailExtra_EggData egg; + u8 misc[12]; } extra; }; struct DayCareData { struct BoxPokemon mons[2]; struct DayCareMailEtc mail; - u16 eggPersonalityLo; - u8 unk_11a; - u8 unk_11b; }; struct LinkBattleRecord diff --git a/src/daycare.c b/src/daycare.c index 1faaea4c6..5efec9810 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -20,6 +20,7 @@ extern u16 word_2024E82; static void sub_80417F4(struct DayCareMail *); static void sub_80420FC(struct Pokemon *, u16, struct DayCareData *); +u8 daycare_relationship_score(struct DayCareData *); const u8 *const gUnknown_08209AC4[] = { DaycareText_GetAlongVeryWell, @@ -112,7 +113,7 @@ static void Daycare_SendPokemon(struct Pokemon * mon, struct DayCareData * dayca } daycare_data->mons[empty_slot] = mon->box; BoxMonRestorePP(&daycare_data->mons[empty_slot]); - daycare_data->mail.extra.steps[empty_slot] = 0; + daycare_data->mail.extra.egg.steps[empty_slot] = 0; ZeroMonData(mon); party_compaction(); CalculatePlayerPartyCount(); @@ -130,8 +131,8 @@ static void sub_80414C0(struct DayCareData * daycare_data) daycare_data->mons[0] = daycare_data->mons[1]; ZeroBoxMonData(&daycare_data->mons[1]); daycare_data->mail.data[0] = daycare_data->mail.data[1]; - daycare_data->mail.extra.steps[0] = daycare_data->mail.extra.steps[1]; - daycare_data->mail.extra.steps[1] = 0; + daycare_data->mail.extra.egg.steps[0] = daycare_data->mail.extra.egg.steps[1]; + daycare_data->mail.extra.egg.steps[1] = 0; sub_80417F4(&daycare_data->mail.data[1]); } } @@ -172,7 +173,7 @@ static u16 sub_8041570(struct DayCareData * daycare_data, u8 slot) sub_803B4B4(&daycare_data->mons[slot], &pokemon); if (GetMonData(&pokemon, MON_DATA_LEVEL) != MAX_LEVEL) { - experience = GetMonData(&pokemon, MON_DATA_EXP) + daycare_data->mail.extra.steps[slot]; + experience = GetMonData(&pokemon, MON_DATA_EXP) + daycare_data->mail.extra.egg.steps[slot]; SetMonData(&pokemon, MON_DATA_EXP, (u8 *)&experience); DayCare_LevelUpMoves(&pokemon); } @@ -184,7 +185,7 @@ static u16 sub_8041570(struct DayCareData * daycare_data, u8 slot) } party_compaction(); ZeroBoxMonData(&daycare_data->mons[slot]); - daycare_data->mail.extra.steps[slot] = 0; + daycare_data->mail.extra.egg.steps[slot] = 0; sub_80414C0(daycare_data); CalculatePlayerPartyCount(); return species; @@ -208,7 +209,7 @@ static u8 sub_80416A0(struct DayCareData *daycareData, u8 slot) u8 levelAfter; levelBefore = GetLevelFromBoxMonExp(&daycareData->mons[slot]); - levelAfter = Daycare_GetLevelAfterSteps(&daycareData->mons[slot], daycareData->mail.extra.steps[slot]); + levelAfter = Daycare_GetLevelAfterSteps(&daycareData->mons[slot], daycareData->mail.extra.egg.steps[slot]); return levelAfter - levelBefore; } @@ -238,8 +239,8 @@ void sub_8041770(void) void sub_8041790(u16 i) { - gSaveBlock1.daycareData.mail.extra.steps[0] += i; - gSaveBlock1.daycareData.mail.extra.steps[1] += i; + gSaveBlock1.daycareData.mail.extra.egg.steps[0] += i; + gSaveBlock1.daycareData.mail.extra.egg.steps[1] += i; } u8 sub_80417B8(void) @@ -271,11 +272,11 @@ void unref_sub_8041824(struct DayCareData *dayCareData) for (slot = 0; slot < ARRAY_COUNT(dayCareData->mons); slot ++) { ZeroBoxMonData(&dayCareData->mons[slot]); - dayCareData->mail.extra.steps[slot] = 0; + dayCareData->mail.extra.egg.steps[slot] = 0; sub_80417F4(&dayCareData->mail.data[slot]); } - dayCareData->eggPersonalityLo = 0; - dayCareData->unk_11a = 0; + dayCareData->mail.extra.egg.personalityLo = 0; + dayCareData->mail.extra.egg.unk_11a = 0; } u16 sub_8041870(u16 species) @@ -307,13 +308,13 @@ u16 sub_8041870(u16 species) static void sub_80418F0(struct DayCareData *dayCareData) { - dayCareData->eggPersonalityLo = (Random() % 0xfffe) + 1; + dayCareData->mail.extra.egg.personalityLo = (Random() % 0xfffe) + 1; FlagSet(0x86); } static void sub_804191C(struct DayCareData *dayCareData) { - dayCareData->eggPersonalityLo = Random() | 0x8000; + dayCareData->mail.extra.egg.personalityLo = Random() | 0x8000; FlagSet(0x86); } @@ -854,8 +855,8 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st static void RemoveEggFromDayCare(struct DayCareData *dayCareData) { - dayCareData->eggPersonalityLo = 0; - dayCareData->unk_11a = 0; + dayCareData->mail.extra.egg.personalityLo = 0; + dayCareData->mail.extra.egg.unk_11a = 0; } void sub_8041E7C(void) @@ -902,11 +903,11 @@ static u16 sub_8041EEC(struct DayCareData *dayCareData, u8 *a1) // inherit_speci } } eggSpecies = sub_8041870(species[a1[0]]); - if (eggSpecies == SPECIES_NIDORAN_F && dayCareData->eggPersonalityLo & 0x8000) + if (eggSpecies == SPECIES_NIDORAN_F && dayCareData->mail.extra.egg.personalityLo & 0x8000) { eggSpecies = SPECIES_NIDORAN_M; } - if (eggSpecies == SPECIES_ILLUMISE && dayCareData->eggPersonalityLo & 0x8000) + if (eggSpecies == SPECIES_ILLUMISE && dayCareData->mail.extra.egg.personalityLo & 0x8000) { eggSpecies = SPECIES_VOLBEAT; } @@ -970,7 +971,7 @@ static void sub_80420FC(struct Pokemon *mon, u16 species, struct DayCareData *da u16 ball; u8 metLevel; u8 language; - personality = dayCareData->eggPersonalityLo | (Random() << 16); + personality = dayCareData->mail.extra.egg.personalityLo | (Random() << 16); CreateMon(mon, species, 5, 0x20, TRUE, personality, FALSE, 0); metLevel = 0; ball = ITEM_POKE_BALL; @@ -987,3 +988,166 @@ void sp0B8_daycare(void) sub_8041FC4(&gSaveBlock1.daycareData); } +#ifdef NONMATCHING +bool8 sub_80421B0(struct DayCareData *dayCareData) +{ + struct BoxPokemon *parent; + u32 i; + int v0; + int steps; + v0 = 0; + for (i=0, parent=&dayCareData->mons[0]; i<2; parent++, i++) + { + if (GetBoxMonData(parent, MON_DATA_SANITY_BIT2, v0)) + { + dayCareData->mail.extra.egg.steps[i]++; + v0++; + } + } + if (dayCareData->mail.extra.egg.personalityLo == 0 && v0 == 2 && dayCareData->mail.extra.misc[4] == 0xff && daycare_relationship_score(dayCareData) > (u32)((u32)(Random() * 100) / 0xffff)) + { + sub_8041940(); + } + if ((++dayCareData->mail.extra.egg.unk_11a) == 0xff) + { + for (i=0; i Date: Wed, 30 Aug 2017 16:46:51 -0400 Subject: Through daycare_relationship_score (nonmatching) --- asm/daycare.s | 323 ------------------------------------------------------ include/daycare.h | 2 +- src/daycare.c | 293 ++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 292 insertions(+), 326 deletions(-) diff --git a/asm/daycare.s b/asm/daycare.s index 01eb6afc0..65f2aa78e 100644 --- a/asm/daycare.s +++ b/asm/daycare.s @@ -6,329 +6,6 @@ .text - thumb_func_start sub_80422A0 -sub_80422A0: @ 80422A0 - push {lr} - ldr r0, _080422B0 @ =gSaveBlock1 + 0x2F9C - bl sub_80421B0 - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_080422B0: .4byte gSaveBlock1 + 0x2F9C - thumb_func_end sub_80422A0 - - thumb_func_start sub_80422B4 -sub_80422B4: @ 80422B4 - movs r1, 0x8C - lsls r1, 1 - adds r0, r1 - ldrh r1, [r0] - negs r0, r1 - orrs r0, r1 - lsrs r0, 31 - bx lr - thumb_func_end sub_80422B4 - - thumb_func_start sub_80422C4 -sub_80422C4: @ 80422C4 - push {r4-r6,lr} - adds r6, r0, 0 - movs r1, 0xB - bl GetBoxMonData - cmp r0, 0 - beq _080422FC - ldr r1, _0804231C @ =gStringVar1 - adds r0, r6, 0 - bl GetBoxMonNick - adds r0, r6, 0 - movs r1, 0x3 - bl GetBoxMonData - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r5, _08042320 @ =gStringVar3 - adds r0, r6, 0 - movs r1, 0x7 - adds r2, r5, 0 - bl GetBoxMonData - adds r0, r5, 0 - adds r1, r4, 0 - bl ConvertInternationalString -_080422FC: - adds r4, r6, 0 - adds r4, 0x50 - adds r0, r4, 0 - movs r1, 0xB - bl GetBoxMonData - cmp r0, 0 - beq _08042314 - ldr r1, _08042324 @ =gStringVar2 - adds r0, r4, 0 - bl GetBoxMonNick -_08042314: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0804231C: .4byte gStringVar1 -_08042320: .4byte gStringVar3 -_08042324: .4byte gStringVar2 - thumb_func_end sub_80422C4 - - thumb_func_start sub_8042328 -sub_8042328: @ 8042328 - push {r4-r6,lr} - ldr r6, _08042354 @ =gLastFieldPokeMenuOpened - ldrb r0, [r6] - movs r5, 0x64 - muls r0, r5 - ldr r4, _08042358 @ =gPlayerParty - adds r0, r4 - ldr r1, _0804235C @ =gStringVar1 - bl GetBoxMonNick - ldrb r0, [r6] - muls r0, r5 - adds r0, r4 - movs r1, 0xB - bl GetBoxMonData - lsls r0, 16 - lsrs r0, 16 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08042354: .4byte gLastFieldPokeMenuOpened -_08042358: .4byte gPlayerParty -_0804235C: .4byte gStringVar1 - thumb_func_end sub_8042328 - - thumb_func_start sp0B5_daycare -sp0B5_daycare: @ 8042360 - push {lr} - ldr r0, _0804236C @ =gSaveBlock1 + 0x2F9C - bl sub_80422C4 - pop {r0} - bx r0 - .align 2, 0 -_0804236C: .4byte gSaveBlock1 + 0x2F9C - thumb_func_end sp0B5_daycare - - thumb_func_start sp0B6_daycare -sp0B6_daycare: @ 8042370 - push {r4,lr} - ldr r4, _08042384 @ =gSaveBlock1 + 0x2F9C - adds r0, r4, 0 - bl sub_80422B4 - lsls r0, 24 - cmp r0, 0 - beq _08042388 - movs r0, 0x1 - b _080423A0 - .align 2, 0 -_08042384: .4byte gSaveBlock1 + 0x2F9C -_08042388: - adds r0, r4, 0 - bl Daycare_CountPokemon - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - bne _0804239A - movs r0, 0 - b _080423A0 -_0804239A: - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 -_080423A0: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sp0B6_daycare - - thumb_func_start sub_80423A8 -sub_80423A8: @ 80423A8 - push {r4-r6,lr} - adds r5, r1, 0 - movs r4, 0 - adds r1, r0, 0 -_080423B0: - movs r3, 0 - ldrh r0, [r1] - adds r2, r5, 0 -_080423B6: - ldrh r6, [r2] - cmp r0, r6 - bne _080423C0 - movs r0, 0x1 - b _080423D2 -_080423C0: - adds r2, 0x2 - adds r3, 0x1 - cmp r3, 0x1 - ble _080423B6 - adds r1, 0x2 - adds r4, 0x1 - cmp r4, 0x1 - ble _080423B0 - movs r0, 0 -_080423D2: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_80423A8 - - thumb_func_start daycare_relationship_score -daycare_relationship_score: @ 80423D8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x2C - movs r1, 0 - mov r8, r1 - mov r2, sp - adds r2, 0x8 - str r2, [sp, 0x1C] - add r1, sp, 0xC - mov r10, r1 - adds r2, 0xC - str r2, [sp, 0x20] - mov r1, sp - adds r1, 0x2 - ldr r2, _08042488 @ =gBaseStats - mov r9, r2 - ldr r5, [sp, 0x1C] - adds r7, r1, 0 - mov r6, sp - ldr r1, [sp, 0x20] - str r1, [sp, 0x24] - mov r2, r10 - str r2, [sp, 0x28] - adds r4, r0, 0 -_0804240E: - adds r0, r4, 0 - movs r1, 0xB - bl GetBoxMonData - strh r0, [r5] - adds r0, r4, 0 - movs r1, 0x1 - bl GetBoxMonData - ldr r1, [sp, 0x28] - stm r1!, {r0} - str r1, [sp, 0x28] - adds r0, r4, 0 - movs r1, 0 - bl GetBoxMonData - adds r1, r0, 0 - ldrh r0, [r5] - bl GetGenderFromSpeciesAndPersonality - lsls r0, 24 - lsrs r0, 24 - ldr r2, [sp, 0x24] - stm r2!, {r0} - str r2, [sp, 0x24] - ldrh r1, [r5] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - add r0, r9 - ldrb r0, [r0, 0x14] - strh r0, [r6] - ldrh r1, [r5] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - add r0, r9 - ldrb r0, [r0, 0x15] - strh r0, [r7] - adds r5, 0x2 - adds r7, 0x4 - adds r6, 0x4 - adds r4, 0x50 - movs r0, 0x1 - add r8, r0 - mov r1, r8 - cmp r1, 0x1 - bls _0804240E - mov r0, sp - ldrh r1, [r0] - cmp r1, 0xF - beq _08042484 - ldrh r0, [r0, 0x4] - cmp r0, 0xF - beq _08042484 - cmp r1, 0xD - bne _0804248C - cmp r0, 0xD - bne _08042490 -_08042484: - movs r0, 0 - b _080424E4 - .align 2, 0 -_08042488: .4byte gBaseStats -_0804248C: - cmp r0, 0xD - bne _0804249C -_08042490: - ldr r1, [sp, 0xC] - mov r2, r10 - ldr r0, [r2, 0x4] - cmp r1, r0 - beq _080424DE - b _080424E2 -_0804249C: - ldr r0, [sp, 0x14] - ldr r2, [sp, 0x20] - ldr r1, [r2, 0x4] - cmp r0, r1 - beq _08042484 - cmp r0, 0xFF - beq _08042484 - cmp r1, 0xFF - beq _08042484 - add r1, sp, 0x4 - mov r0, sp - bl sub_80423A8 - lsls r0, 24 - cmp r0, 0 - beq _08042484 - ldr r0, [sp, 0x1C] - ldrh r1, [r0, 0x2] - ldrh r0, [r0] - cmp r0, r1 - bne _080424D4 - ldr r1, [sp, 0xC] - mov r2, r10 - ldr r0, [r2, 0x4] - cmp r1, r0 - beq _080424E2 - movs r0, 0x46 - b _080424E4 -_080424D4: - ldr r1, [sp, 0xC] - mov r2, r10 - ldr r0, [r2, 0x4] - cmp r1, r0 - bne _080424E2 -_080424DE: - movs r0, 0x14 - b _080424E4 -_080424E2: - movs r0, 0x32 -_080424E4: - add sp, 0x2C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end daycare_relationship_score - thumb_func_start daycare_relationship_score_from_savegame daycare_relationship_score_from_savegame: @ 80424F4 push {lr} diff --git a/include/daycare.h b/include/daycare.h index 59d10e18f..912b49649 100644 --- a/include/daycare.h +++ b/include/daycare.h @@ -1,7 +1,7 @@ #ifndef GUARD_DAYCARE_H #define GUARD_DAYCARE_H -u8 Daycare_CountPokemon(struct BoxPokemon *); +u8 Daycare_CountPokemon(struct DayCareData *); void sub_8041324(struct BoxPokemon *, struct DayCareMailEtc *); void sub_8041790(u16 i); u16 sub_8041870(u16); diff --git a/src/daycare.c b/src/daycare.c index 5efec9810..e0dc83962 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -47,13 +47,13 @@ u8 *GetBoxMonNick(struct BoxPokemon *mon, u8 *dest) return StringCopy10(dest, nickname); } -u8 Daycare_CountPokemon(struct BoxPokemon *daycare_data) +u8 Daycare_CountPokemon(struct DayCareData *daycare_data) { u8 i, count; count = 0; for(i = 0;i <= 1;i++) - if(GetBoxMonData(daycare_data + i, MON_DATA_SPECIES) != 0) + if(GetBoxMonData(&daycare_data->mons[i], MON_DATA_SPECIES) != 0) count++; return count; @@ -1151,3 +1151,292 @@ bool8 sub_80421B0(struct DayCareData *dayCareData) "_0804229C: .4byte gPlayerPartyCount"); } #endif + +bool8 sub_80422A0(void) +{ + return sub_80421B0(&gSaveBlock1.daycareData); +} + +bool8 sub_80422B4(struct DayCareData *dayCareData) +{ + return (u32)((-dayCareData->mail.extra.egg.personalityLo) | dayCareData->mail.extra.egg.personalityLo) >> 31; +} + +void sub_80422C4(struct DayCareData *dayCareData) +{ + u8 language; + if (GetBoxMonData(&dayCareData->mons[0], MON_DATA_SPECIES) != 0) + { + GetBoxMonNick(&dayCareData->mons[0], gStringVar1); + language = GetBoxMonData(&dayCareData->mons[0], MON_DATA_LANGUAGE); + GetBoxMonData(&dayCareData->mons[0], MON_DATA_OT_NAME, gStringVar3); + ConvertInternationalString(gStringVar3, language); + } + if (GetBoxMonData(&dayCareData->mons[1], MON_DATA_SPECIES) != 0) + { + GetBoxMonNick(&dayCareData->mons[1], gStringVar2); + } +} + +u16 sub_8042328(void) +{ + GetBoxMonNick(&gPlayerParty[gLastFieldPokeMenuOpened].box, gStringVar1); + return GetBoxMonData(&gPlayerParty[gLastFieldPokeMenuOpened].box, MON_DATA_SPECIES); +} + +void sp0B5_daycare(void) +{ + sub_80422C4(&gSaveBlock1.daycareData); +} + +u8 sp0B6_daycare(void) +{ + u8 monCount; + if (sub_80422B4(&gSaveBlock1.daycareData)) + { + return 1; + } + monCount = Daycare_CountPokemon(&gSaveBlock1.daycareData); + if (monCount != 0) + { + return monCount + 1; + } + return 0; +} + +bool8 sub_80423A8(u16 *a, u16 *b) +{ + int i, j; + u16 *v0, *v1, v2; + for (i=0, v0=a; i<2; v0++, i++) + { + for (j=0, v2=*v0, v1=b; j<2; v1++, j++) + { + if (v2 == *v1) + { + return TRUE; + } + } + } + return FALSE; +} + +#ifdef NONMATCHING +u8 daycare_relationship_score(struct DayCareData *dayCareData) +{ + u16 species[2]; + u32 otIds[2]; + u32 genders[2]; + u16 eggGroups[2][2]; + int i; + u16 *spc; + u32 *ids; + u32 *gnd; + u16 *egg1; + u16 *egg2; + struct BoxPokemon *parent; + for (i=0, parent=&dayCareData->mons[0], spc=species, ids=otIds, gnd=genders, egg1=&eggGroups[0][0], egg2=&eggGroups[0][1]; i<2; spc++, egg1+=2, egg2+=2, parent++, i++) + { + *spc = GetBoxMonData(parent, MON_DATA_SPECIES); + *ids++ = GetBoxMonData(parent, MON_DATA_OT_ID); + *gnd++ = GetGenderFromSpeciesAndPersonality(*spc, GetBoxMonData(parent, MON_DATA_PERSONALITY)); + *egg1 = gBaseStats[*spc].eggGroup1; + *egg2 = gBaseStats[*spc].eggGroup2; + } + if (eggGroups[0][0] == 0xf) + { + return 0; + } + if (eggGroups[1][0] == 0xf) + { + return 0; + } + if (eggGroups[0][0] == 0xd && eggGroups[1][0] == 0xd) + { + return 0; + } + else if (eggGroups[0][0] == 0xd || eggGroups[1][0] == 0xd) + { + if (otIds[0] == otIds[1]) + { + return 20; + } + return 50; + } + if (genders[0] == genders[1] || genders[0] == MON_GENDERLESS || genders[1] == MON_GENDERLESS) + { + return 0; + } + if (!sub_80423A8(eggGroups[0], eggGroups[1])) + { + return 0; + } + if (species[0] == species[1]) + { + if (otIds[0] == otIds[1]) + { + return 50; + } + return 70; + } + else + { + if (otIds[0] != otIds[1]) + { + return 50; + } + return 20; + } +} +#else +__attribute__((naked)) +u8 daycare_relationship_score(struct DayCareData *dayCareData) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x2C\n" + "\tmovs r1, 0\n" + "\tmov r8, r1\n" + "\tmov r2, sp\n" + "\tadds r2, 0x8\n" + "\tstr r2, [sp, 0x1C]\n" + "\tadd r1, sp, 0xC\n" + "\tmov r10, r1\n" + "\tadds r2, 0xC\n" + "\tstr r2, [sp, 0x20]\n" + "\tmov r1, sp\n" + "\tadds r1, 0x2\n" + "\tldr r2, _08042488 @ =gBaseStats\n" + "\tmov r9, r2\n" + "\tldr r5, [sp, 0x1C]\n" + "\tadds r7, r1, 0\n" + "\tmov r6, sp\n" + "\tldr r1, [sp, 0x20]\n" + "\tstr r1, [sp, 0x24]\n" + "\tmov r2, r10\n" + "\tstr r2, [sp, 0x28]\n" + "\tadds r4, r0, 0\n" + "_0804240E:\n" + "\tadds r0, r4, 0\n" + "\tmovs r1, 0xB\n" + "\tbl GetBoxMonData\n" + "\tstrh r0, [r5]\n" + "\tadds r0, r4, 0\n" + "\tmovs r1, 0x1\n" + "\tbl GetBoxMonData\n" + "\tldr r1, [sp, 0x28]\n" + "\tstm r1!, {r0}\n" + "\tstr r1, [sp, 0x28]\n" + "\tadds r0, r4, 0\n" + "\tmovs r1, 0\n" + "\tbl GetBoxMonData\n" + "\tadds r1, r0, 0\n" + "\tldrh r0, [r5]\n" + "\tbl GetGenderFromSpeciesAndPersonality\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tldr r2, [sp, 0x24]\n" + "\tstm r2!, {r0}\n" + "\tstr r2, [sp, 0x24]\n" + "\tldrh r1, [r5]\n" + "\tlsls r0, r1, 3\n" + "\tsubs r0, r1\n" + "\tlsls r0, 2\n" + "\tadd r0, r9\n" + "\tldrb r0, [r0, 0x14]\n" + "\tstrh r0, [r6]\n" + "\tldrh r1, [r5]\n" + "\tlsls r0, r1, 3\n" + "\tsubs r0, r1\n" + "\tlsls r0, 2\n" + "\tadd r0, r9\n" + "\tldrb r0, [r0, 0x15]\n" + "\tstrh r0, [r7]\n" + "\tadds r5, 0x2\n" + "\tadds r7, 0x4\n" + "\tadds r6, 0x4\n" + "\tadds r4, 0x50\n" + "\tmovs r0, 0x1\n" + "\tadd r8, r0\n" + "\tmov r1, r8\n" + "\tcmp r1, 0x1\n" + "\tbls _0804240E\n" + "\tmov r0, sp\n" + "\tldrh r1, [r0]\n" + "\tcmp r1, 0xF\n" + "\tbeq _08042484\n" + "\tldrh r0, [r0, 0x4]\n" + "\tcmp r0, 0xF\n" + "\tbeq _08042484\n" + "\tcmp r1, 0xD\n" + "\tbne _0804248C\n" + "\tcmp r0, 0xD\n" + "\tbne _08042490\n" + "_08042484:\n" + "\tmovs r0, 0\n" + "\tb _080424E4\n" + "\t.align 2, 0\n" + "_08042488: .4byte gBaseStats\n" + "_0804248C:\n" + "\tcmp r0, 0xD\n" + "\tbne _0804249C\n" + "_08042490:\n" + "\tldr r1, [sp, 0xC]\n" + "\tmov r2, r10\n" + "\tldr r0, [r2, 0x4]\n" + "\tcmp r1, r0\n" + "\tbeq _080424DE\n" + "\tb _080424E2\n" + "_0804249C:\n" + "\tldr r0, [sp, 0x14]\n" + "\tldr r2, [sp, 0x20]\n" + "\tldr r1, [r2, 0x4]\n" + "\tcmp r0, r1\n" + "\tbeq _08042484\n" + "\tcmp r0, 0xFF\n" + "\tbeq _08042484\n" + "\tcmp r1, 0xFF\n" + "\tbeq _08042484\n" + "\tadd r1, sp, 0x4\n" + "\tmov r0, sp\n" + "\tbl sub_80423A8\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _08042484\n" + "\tldr r0, [sp, 0x1C]\n" + "\tldrh r1, [r0, 0x2]\n" + "\tldrh r0, [r0]\n" + "\tcmp r0, r1\n" + "\tbne _080424D4\n" + "\tldr r1, [sp, 0xC]\n" + "\tmov r2, r10\n" + "\tldr r0, [r2, 0x4]\n" + "\tcmp r1, r0\n" + "\tbeq _080424E2\n" + "\tmovs r0, 0x46\n" + "\tb _080424E4\n" + "_080424D4:\n" + "\tldr r1, [sp, 0xC]\n" + "\tmov r2, r10\n" + "\tldr r0, [r2, 0x4]\n" + "\tcmp r1, r0\n" + "\tbne _080424E2\n" + "_080424DE:\n" + "\tmovs r0, 0x14\n" + "\tb _080424E4\n" + "_080424E2:\n" + "\tmovs r0, 0x32\n" + "_080424E4:\n" + "\tadd sp, 0x2C\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r1}\n" + "\tbx r1"); +} +#endif -- cgit v1.2.3 From d26e349392d745b4b7d12fedb08559b636b4ac09 Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 30 Aug 2017 16:50:11 -0400 Subject: through sp0B9_daycare_relationship_comment --- asm/daycare.s | 50 -------------------------------------------------- src/daycare.c | 23 +++++++++++++++++++++++ 2 files changed, 23 insertions(+), 50 deletions(-) diff --git a/asm/daycare.s b/asm/daycare.s index 65f2aa78e..0552fbe2c 100644 --- a/asm/daycare.s +++ b/asm/daycare.s @@ -6,56 +6,6 @@ .text - thumb_func_start daycare_relationship_score_from_savegame -daycare_relationship_score_from_savegame: @ 80424F4 - push {lr} - ldr r0, _08042504 @ =gSaveBlock1 + 0x2F9C - bl daycare_relationship_score - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_08042504: .4byte gSaveBlock1 + 0x2F9C - thumb_func_end daycare_relationship_score_from_savegame - - thumb_func_start sp0B9_daycare_relationship_comment -sp0B9_daycare_relationship_comment: @ 8042508 - push {lr} - bl daycare_relationship_score_from_savegame - lsls r0, 24 - lsrs r0, 24 - adds r2, r0, 0 - movs r1, 0 - cmp r0, 0 - bne _0804251C - movs r1, 0x3 -_0804251C: - cmp r0, 0x14 - bne _08042522 - movs r1, 0x2 -_08042522: - cmp r0, 0x32 - bne _08042528 - movs r1, 0x1 -_08042528: - cmp r2, 0x46 - bne _0804252E - movs r1, 0 -_0804252E: - ldr r0, _08042540 @ =gStringVar4 - ldr r2, _08042544 @ =gUnknown_08209AC4 - lsls r1, 2 - adds r1, r2 - ldr r1, [r1] - bl StringCopy - pop {r0} - bx r0 - .align 2, 0 -_08042540: .4byte gStringVar4 -_08042544: .4byte gUnknown_08209AC4 - thumb_func_end sp0B9_daycare_relationship_comment - thumb_func_start NameHasGenderSymbol NameHasGenderSymbol: @ 8042548 push {r4,r5,lr} diff --git a/src/daycare.c b/src/daycare.c index e0dc83962..4f6d2e1d1 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -1440,3 +1440,26 @@ u8 daycare_relationship_score(struct DayCareData *dayCareData) "\tbx r1"); } #endif + +u8 daycare_relationship_score_from_savegame(void) +{ + return daycare_relationship_score(&gSaveBlock1.daycareData); +} + +void sp0B9_daycare_relationship_comment(void) +{ + u8 whichString; + u8 relationshipScore; + + relationshipScore = daycare_relationship_score_from_savegame(); + whichString = 0; + if (relationshipScore == 0) + whichString = 3; + if (relationshipScore == 20) + whichString = 2; + if (relationshipScore == 50) + whichString = 1; + if (relationshipScore == 70) + whichString = 0; + StringCopy(gStringVar4, gUnknown_08209AC4[whichString]); +} -- cgit v1.2.3 From 3d0ed365b41a5be040bee12bab3bcb502ad44eee Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 30 Aug 2017 17:36:29 -0400 Subject: Through DaycareLevelMenuGetText --- asm/daycare.s | 192 -------------------------------------------------------- include/trade.h | 12 ++++ src/daycare.c | 136 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 148 insertions(+), 192 deletions(-) create mode 100644 include/trade.h diff --git a/asm/daycare.s b/asm/daycare.s index 0552fbe2c..b3fbe6c5c 100644 --- a/asm/daycare.s +++ b/asm/daycare.s @@ -6,198 +6,6 @@ .text - thumb_func_start NameHasGenderSymbol -NameHasGenderSymbol: @ 8042548 - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r1, 24 - lsrs r5, r1, 24 - mov r2, sp - mov r1, sp - movs r0, 0 - strb r0, [r1, 0x1] - strb r0, [r2] - movs r3, 0 - ldrb r0, [r4] - cmp r0, 0xFF - beq _0804258C -_08042564: - adds r1, r4, r3 - ldrb r0, [r1] - cmp r0, 0xB5 - bne _08042572 - ldrb r0, [r2] - adds r0, 0x1 - strb r0, [r2] -_08042572: - ldrb r0, [r1] - cmp r0, 0xB6 - bne _0804257E - ldrb r0, [r2, 0x1] - adds r0, 0x1 - strb r0, [r2, 0x1] -_0804257E: - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - adds r0, r4, r3 - ldrb r0, [r0] - cmp r0, 0xFF - bne _08042564 -_0804258C: - cmp r5, 0 - bne _080425A0 - mov r0, sp - ldrb r0, [r0] - cmp r0, 0 - beq _080425A0 - mov r0, sp - ldrb r0, [r0, 0x1] - cmp r0, 0 - beq _080425B4 -_080425A0: - cmp r5, 0xFE - bne _080425B8 - mov r0, sp - ldrb r0, [r0, 0x1] - cmp r0, 0 - beq _080425B8 - mov r0, sp - ldrb r0, [r0] - cmp r0, 0 - bne _080425B8 -_080425B4: - movs r0, 0x1 - b _080425BA -_080425B8: - movs r0, 0 -_080425BA: - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end NameHasGenderSymbol - - thumb_func_start AppendGenderSymbol -AppendGenderSymbol: @ 80425C4 - push {r4,lr} - adds r4, r0, 0 - lsls r1, 24 - lsrs r1, 24 - cmp r1, 0 - bne _080425E4 - movs r1, 0 - bl NameHasGenderSymbol - lsls r0, 24 - cmp r0, 0 - bne _08042600 - ldr r1, _080425E0 @ =gOtherText_MaleSymbol3 - b _08042602 - .align 2, 0 -_080425E0: .4byte gOtherText_MaleSymbol3 -_080425E4: - cmp r1, 0xFE - bne _08042600 - adds r0, r4, 0 - movs r1, 0xFE - bl NameHasGenderSymbol - lsls r0, 24 - cmp r0, 0 - bne _08042600 - ldr r1, _080425FC @ =gOtherText_FemaleSymbol3 - b _08042602 - .align 2, 0 -_080425FC: .4byte gOtherText_FemaleSymbol3 -_08042600: - ldr r1, _08042610 @ =gOtherText_GenderlessSymbol -_08042602: - adds r0, r4, 0 - bl StringAppend - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08042610: .4byte gOtherText_GenderlessSymbol - thumb_func_end AppendGenderSymbol - - thumb_func_start MonAppendGenderSymbol -MonAppendGenderSymbol: @ 8042614 - push {r4,lr} - adds r4, r0, 0 - adds r0, r1, 0 - bl GetBoxMonGender - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl AppendGenderSymbol - pop {r4} - pop {r1} - bx r1 - thumb_func_end MonAppendGenderSymbol - - thumb_func_start DaycareLevelMenuGetText -DaycareLevelMenuGetText: @ 8042630 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x28 - mov r8, r0 - adds r7, r1, 0 - movs r0, 0xFF - strb r0, [r7] - movs r6, 0 - add r0, sp, 0x14 - mov r9, r0 -_08042648: - lsls r0, r6, 2 - adds r0, r6 - lsls r4, r0, 4 - add r4, r8 - lsls r0, 2 - mov r1, sp - adds r5, r1, r0 - adds r0, r4, 0 - adds r1, r5, 0 - bl GetBoxMonNick - adds r0, r5, 0 - adds r1, r4, 0 - bl MonAppendGenderSymbol - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0x1 - bls _08042648 - adds r0, r7, 0 - mov r1, sp - bl StringCopy - ldr r4, _080426A8 @ =gOtherText_NewLine2 - adds r0, r7, 0 - adds r1, r4, 0 - bl StringAppend - adds r0, r7, 0 - mov r1, r9 - bl StringAppend - adds r0, r7, 0 - adds r1, r4, 0 - bl StringAppend - ldr r1, _080426AC @ =gOtherText_CancelAndLv - adds r0, r7, 0 - bl StringAppend - add sp, 0x28 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080426A8: .4byte gOtherText_NewLine2 -_080426AC: .4byte gOtherText_CancelAndLv - thumb_func_end DaycareLevelMenuGetText - thumb_func_start DaycareLevelMenuGetLevelText DaycareLevelMenuGetLevelText: @ 80426B0 push {r4-r7,lr} diff --git a/include/trade.h b/include/trade.h new file mode 100644 index 000000000..8966d7305 --- /dev/null +++ b/include/trade.h @@ -0,0 +1,12 @@ +// +// Created by Scott Norton on 8/30/17. +// + +#ifndef POKERUBY_TRADE_H +#define POKERUBY_TRADE_H + +const u8 gOtherText_MaleSymbol3[1]; +const u8 gOtherText_FemaleSymbol3[1]; +const u8 gOtherText_GenderlessSymbol[1]; + +#endif //POKERUBY_TRADE_H diff --git a/src/daycare.c b/src/daycare.c index 4f6d2e1d1..e39c39f71 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -11,6 +11,7 @@ #include "pokemon_storage_system.h" #include "rng.h" #include "moves.h" +#include "trade.h" #include "strings2.h" #include "data/pokemon/egg_moves.h" #include "party_menu.h" @@ -1463,3 +1464,138 @@ void sp0B9_daycare_relationship_comment(void) whichString = 0; StringCopy(gStringVar4, gUnknown_08209AC4[whichString]); } + +#ifdef NONMATCHING +bool8 NameHasGenderSymbol(const u8 *name, u8 genderRatio) +{ + u8 i; + u8 flags[2]; + + // This portion is nonmatching + flags[1] = 0; + flags[0] = 0; + for (i = 0; name[i] != EOS; i ++) + // End nonmatching portion + + { + if (name[i] == CHAR_MALE) flags[0] ++; + if (name[i] == CHAR_FEMALE) flags[1] ++; + } + if (genderRatio == MON_MALE && flags[0] && !flags[1]) return TRUE; + if (genderRatio == MON_FEMALE && flags[1] && !flags[0]) return TRUE; + return FALSE; +} +#else +__attribute__((naked)) +bool8 NameHasGenderSymbol(const u8 *name, u8 genderRatio) +{ + asm_unified("\n" + "\tpush {r4,r5,lr}\n" + "\tsub sp, 0x4\n" + "\tadds r4, r0, 0\n" + "\tlsls r1, 24\n" + "\tlsrs r5, r1, 24\n" + "\tmov r2, sp\n" + "\tmov r1, sp\n" + "\tmovs r0, 0\n" + "\tstrb r0, [r1, 0x1]\n" + "\tstrb r0, [r2]\n" + "\tmovs r3, 0\n" + "\tldrb r0, [r4]\n" + "\tcmp r0, 0xFF\n" + "\tbeq _0804258C\n" + "_08042564:\n" + "\tadds r1, r4, r3\n" + "\tldrb r0, [r1]\n" + "\tcmp r0, 0xB5\n" + "\tbne _08042572\n" + "\tldrb r0, [r2]\n" + "\tadds r0, 0x1\n" + "\tstrb r0, [r2]\n" + "_08042572:\n" + "\tldrb r0, [r1]\n" + "\tcmp r0, 0xB6\n" + "\tbne _0804257E\n" + "\tldrb r0, [r2, 0x1]\n" + "\tadds r0, 0x1\n" + "\tstrb r0, [r2, 0x1]\n" + "_0804257E:\n" + "\tadds r0, r3, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r3, r0, 24\n" + "\tadds r0, r4, r3\n" + "\tldrb r0, [r0]\n" + "\tcmp r0, 0xFF\n" + "\tbne _08042564\n" + "_0804258C:\n" + "\tcmp r5, 0\n" + "\tbne _080425A0\n" + "\tmov r0, sp\n" + "\tldrb r0, [r0]\n" + "\tcmp r0, 0\n" + "\tbeq _080425A0\n" + "\tmov r0, sp\n" + "\tldrb r0, [r0, 0x1]\n" + "\tcmp r0, 0\n" + "\tbeq _080425B4\n" + "_080425A0:\n" + "\tcmp r5, 0xFE\n" + "\tbne _080425B8\n" + "\tmov r0, sp\n" + "\tldrb r0, [r0, 0x1]\n" + "\tcmp r0, 0\n" + "\tbeq _080425B8\n" + "\tmov r0, sp\n" + "\tldrb r0, [r0]\n" + "\tcmp r0, 0\n" + "\tbne _080425B8\n" + "_080425B4:\n" + "\tmovs r0, 0x1\n" + "\tb _080425BA\n" + "_080425B8:\n" + "\tmovs r0, 0\n" + "_080425BA:\n" + "\tadd sp, 0x4\n" + "\tpop {r4,r5}\n" + "\tpop {r1}\n" + "\tbx r1"); +} +#endif + +u8 *AppendGenderSymbol(u8 *name, u8 gender) +{ + if (gender == MON_MALE) + { + if (!NameHasGenderSymbol(name, MON_MALE)) + return StringAppend(name, gOtherText_MaleSymbol3); + } + + else if (gender == MON_FEMALE) + { + if (!NameHasGenderSymbol(name, MON_FEMALE)) + return StringAppend(name, gOtherText_FemaleSymbol3); + } + return StringAppend(name, gOtherText_GenderlessSymbol); +} + +u8 *MonAppendGenderSymbol(u8 *name, struct BoxPokemon *boxMon) +{ + return AppendGenderSymbol(name, GetBoxMonGender(boxMon)); +} + +void DaycareLevelMenuGetText(struct DayCareData *dayCareData, u8 *dest) +{ + u8 buffers[2][20]; + u8 i; + *dest = EOS; + for (i = 0; i < 2; i ++) + { + GetBoxMonNick(&dayCareData->mons[i], buffers[i]); + MonAppendGenderSymbol(buffers[i], &dayCareData->mons[i]); + } + StringCopy(dest, buffers[0]); + StringAppend(dest, gOtherText_NewLine2); + StringAppend(dest, buffers[1]); + StringAppend(dest, gOtherText_NewLine2); + StringAppend(dest, gOtherText_CancelAndLv); +} -- cgit v1.2.3 From d73bd667323a309c3a38d380bcb0c644a101a251 Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 30 Aug 2017 17:43:31 -0400 Subject: DaycareLevelMenuGetLevelText --- asm/daycare.s | 64 ----------------------------------------------------------- src/daycare.c | 21 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 64 deletions(-) diff --git a/asm/daycare.s b/asm/daycare.s index b3fbe6c5c..290fa594e 100644 --- a/asm/daycare.s +++ b/asm/daycare.s @@ -6,70 +6,6 @@ .text - thumb_func_start DaycareLevelMenuGetLevelText -DaycareLevelMenuGetLevelText: @ 80426B0 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r6, r0, 0 - adds r4, r1, 0 - movs r0, 0xFF - strb r0, [r4] - movs r5, 0 - movs r0, 0xFC - mov r8, r0 - movs r7, 0x14 -_080426C6: - lsls r2, r5, 2 - adds r0, r2, r5 - lsls r0, 4 - adds r0, r6, r0 - movs r3, 0x88 - lsls r3, 1 - adds r1, r6, r3 - adds r1, r2 - ldr r1, [r1] - bl Daycare_GetLevelAfterSteps - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - movs r0, 0x34 - strb r0, [r4] - mov r0, r8 - strb r0, [r4, 0x1] - strb r7, [r4, 0x2] - movs r0, 0x6 - strb r0, [r4, 0x3] - adds r0, r4, 0x4 - movs r2, 0x1 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - adds r4, r0, 0 - mov r3, r8 - strb r3, [r4] - strb r7, [r4, 0x1] - movs r0, 0 - strb r0, [r4, 0x2] - adds r0, r4, 0x3 - ldr r1, _08042728 @ =gOtherText_NewLine2 - bl StringCopy - adds r4, r0, 0 - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x1 - bls _080426C6 - movs r0, 0xFF - strb r0, [r4] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08042728: .4byte gOtherText_NewLine2 - thumb_func_end DaycareLevelMenuGetLevelText - thumb_func_start DaycareLevelMenuProcessKeyInput DaycareLevelMenuProcessKeyInput: @ 804272C push {r4,r5,lr} diff --git a/src/daycare.c b/src/daycare.c index e39c39f71..e4dc2cc45 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -1599,3 +1599,24 @@ void DaycareLevelMenuGetText(struct DayCareData *dayCareData, u8 *dest) StringAppend(dest, gOtherText_NewLine2); StringAppend(dest, gOtherText_CancelAndLv); } + +void DaycareLevelMenuGetLevelText(struct DayCareData *dayCareData, u8 *dest) +{ + u8 i; + u8 level; + *dest = EOS; + for (i = 0; i < 2; i ++) + { + level = Daycare_GetLevelAfterSteps(&dayCareData->mons[i], dayCareData->mail.extra.egg.steps[i]); + dest[0] = 0x34; + dest[1] = 0xFC; + dest[2] = 0x14; + dest[3] = 0x06; + dest = ConvertIntToDecimalStringN(dest + 4, level, STR_CONV_MODE_RIGHT_ALIGN, 3); + dest[0] = 0xFC; + dest[1] = 0x14; + dest[2] = 0x00; + dest = StringCopy(dest + 3, gOtherText_NewLine2); + } + *dest = EOS; +} -- cgit v1.2.3 From 50e82f84d6d379b6e94e7f70a7de47361156ad0f Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 30 Aug 2017 17:51:25 -0400 Subject: DaycareLevelMenuProcessKeyInput --- asm/daycare.s | 115 ---------------------------------------------------------- src/daycare.c | 44 ++++++++++++++++++++++ 2 files changed, 44 insertions(+), 115 deletions(-) diff --git a/asm/daycare.s b/asm/daycare.s index 290fa594e..609fcbf15 100644 --- a/asm/daycare.s +++ b/asm/daycare.s @@ -6,121 +6,6 @@ .text - thumb_func_start DaycareLevelMenuProcessKeyInput -DaycareLevelMenuProcessKeyInput: @ 804272C - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r5, r4, 0 - ldr r0, _08042760 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08042768 - ldr r0, _08042764 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldrh r2, [r1, 0x8] - movs r3, 0x8 - ldrsh r0, [r1, r3] - cmp r0, 0 - beq _08042816 - subs r0, r2, 0x1 - strh r0, [r1, 0x8] - movs r0, 0x1 - negs r0, r0 - b _0804278A - .align 2, 0 -_08042760: .4byte gMain -_08042764: .4byte gTasks -_08042768: - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0804279C - ldr r0, _08042798 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldrh r2, [r1, 0x8] - movs r3, 0x8 - ldrsh r0, [r1, r3] - cmp r0, 0x2 - beq _08042816 - adds r0, r2, 0x1 - strh r0, [r1, 0x8] - movs r0, 0x1 -_0804278A: - bl MoveMenuCursor - movs r0, 0x5 - bl PlaySE - b _08042816 - .align 2, 0 -_08042798: .4byte gTasks -_0804279C: - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080427E8 - bl HandleDestroyMenuCursors - movs r0, 0x5 - bl PlaySE - ldr r3, _080427DC @ =gLastFieldPokeMenuOpened - ldr r2, _080427E0 @ =gScriptResult - ldr r1, _080427E4 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldrh r0, [r0, 0x8] - strh r0, [r2] - strb r0, [r3] - adds r0, r4, 0 - bl DestroyTask - movs r0, 0xF - movs r1, 0x6 - movs r2, 0x1D - movs r3, 0xD - bl MenuZeroFillWindowRect - bl EnableBothScriptContexts - b _08042816 - .align 2, 0 -_080427DC: .4byte gLastFieldPokeMenuOpened -_080427E0: .4byte gScriptResult -_080427E4: .4byte gTasks -_080427E8: - movs r4, 0x2 - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - beq _08042816 - bl HandleDestroyMenuCursors - ldr r0, _0804281C @ =gLastFieldPokeMenuOpened - ldr r1, _08042820 @ =gScriptResult - strh r4, [r1] - movs r1, 0x2 - strb r1, [r0] - adds r0, r5, 0 - bl DestroyTask - movs r0, 0xF - movs r1, 0x6 - movs r2, 0x1D - movs r3, 0xD - bl MenuZeroFillWindowRect - bl EnableBothScriptContexts -_08042816: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0804281C: .4byte gLastFieldPokeMenuOpened -_08042820: .4byte gScriptResult - thumb_func_end DaycareLevelMenuProcessKeyInput - thumb_func_start ShowDaycareLevelMenu ShowDaycareLevelMenu: @ 8042824 push {r4,lr} diff --git a/src/daycare.c b/src/daycare.c index e4dc2cc45..8a86c9205 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -16,6 +16,11 @@ #include "data/pokemon/egg_moves.h" #include "party_menu.h" #include "field_effect.h" +#include "main.h" +#include "menu.h" +#include "sound.h" +#include "songs.h" +#include "script.h" extern u16 word_2024E82; @@ -1620,3 +1625,42 @@ void DaycareLevelMenuGetLevelText(struct DayCareData *dayCareData, u8 *dest) } *dest = EOS; } + +void DaycareLevelMenuProcessKeyInput(u8 taskId) +{ + if (gMain.newKeys & DPAD_UP) + { + if (gTasks[taskId].data[0] != 0) + { + gTasks[taskId].data[0] --; + MoveMenuCursor(-1); + PlaySE(SE_SELECT); + } + } + else if (gMain.newKeys & DPAD_DOWN) + { + if (gTasks[taskId].data[0] != 2) + { + gTasks[taskId].data[0] ++; + MoveMenuCursor(+1); + PlaySE(SE_SELECT); + } + } + else if (gMain.newKeys & A_BUTTON) + { + HandleDestroyMenuCursors(); + PlaySE(SE_SELECT); + gLastFieldPokeMenuOpened = gScriptResult = gTasks[taskId].data[0]; + DestroyTask(taskId); + MenuZeroFillWindowRect(15, 6, 29, 13); + EnableBothScriptContexts(); + } + else if (gMain.newKeys & B_BUTTON) + { + HandleDestroyMenuCursors(); + gLastFieldPokeMenuOpened = gScriptResult = 2; + DestroyTask(taskId); + MenuZeroFillWindowRect(15, 6, 29, 13); + EnableBothScriptContexts(); + } +} -- cgit v1.2.3 From 5a939d216b0b2ee84e3adbf2c1678bfee475bbaa Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 30 Aug 2017 17:56:31 -0400 Subject: Finish decompilation of daycare --- asm/daycare.s | 71 ----------------------------------------------------------- ld_script.txt | 1 - src/daycare.c | 19 ++++++++++++++++ 3 files changed, 19 insertions(+), 72 deletions(-) delete mode 100644 asm/daycare.s diff --git a/asm/daycare.s b/asm/daycare.s deleted file mode 100644 index 609fcbf15..000000000 --- a/asm/daycare.s +++ /dev/null @@ -1,71 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start ShowDaycareLevelMenu -ShowDaycareLevelMenu: @ 8042824 - push {r4,lr} - sub sp, 0x6C - movs r0, 0xF - movs r1, 0x6 - movs r2, 0x1D - movs r3, 0xD - bl MenuDrawTextWindow - ldr r4, _08042880 @ =gSaveBlock1 + 0x2F9C - adds r0, r4, 0 - add r1, sp, 0x8 - bl DaycareLevelMenuGetText - add r0, sp, 0x8 - movs r1, 0x10 - movs r2, 0x7 - bl MenuPrint - adds r0, r4, 0 - add r1, sp, 0x8 - bl DaycareLevelMenuGetLevelText - add r0, sp, 0x8 - movs r1, 0xCE - movs r2, 0x38 - movs r3, 0x1 - bl MenuPrint_PixelCoords - movs r0, 0 - str r0, [sp] - movs r0, 0xD - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0x10 - movs r2, 0x7 - movs r3, 0x3 - bl InitMenu - ldr r0, _08042884 @ =DaycareLevelMenuProcessKeyInput - movs r1, 0x3 - bl CreateTask - add sp, 0x6C - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08042880: .4byte gSaveBlock1 + 0x2F9C -_08042884: .4byte DaycareLevelMenuProcessKeyInput - thumb_func_end ShowDaycareLevelMenu - - thumb_func_start ChooseSendDaycareMon -ChooseSendDaycareMon: @ 8042888 - push {lr} - movs r0, 0x6 - movs r1, 0 - bl OpenPartyMenu - ldr r1, _0804289C @ =gMain - ldr r0, _080428A0 @ =c2_exit_to_overworld_2_switch - str r0, [r1, 0x8] - pop {r0} - bx r0 - .align 2, 0 -_0804289C: .4byte gMain -_080428A0: .4byte c2_exit_to_overworld_2_switch - thumb_func_end ChooseSendDaycareMon - - .align 2, 0 @ Don't pad with nop. diff --git a/ld_script.txt b/ld_script.txt index 10905b93f..eaf87a172 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -72,7 +72,6 @@ SECTIONS { src/util.o(.text); src/blend_palette.o(.text); src/daycare.o(.text); - asm/daycare.o(.text); src/egg_hatch.o(.text); src/battle_interface.o(.text); src/smokescreen.o(.text); diff --git a/src/daycare.c b/src/daycare.c index 8a86c9205..63f3a6861 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -21,6 +21,7 @@ #include "sound.h" #include "songs.h" #include "script.h" +#include "rom4.h" extern u16 word_2024E82; @@ -1664,3 +1665,21 @@ void DaycareLevelMenuProcessKeyInput(u8 taskId) EnableBothScriptContexts(); } } + +void ShowDaycareLevelMenu(void) +{ + u8 buffer[100]; + MenuDrawTextWindow(15, 6, 29, 13); + DaycareLevelMenuGetText(&gSaveBlock1.daycareData, buffer); + MenuPrint(buffer, 16, 7); + DaycareLevelMenuGetLevelText(&gSaveBlock1.daycareData, buffer); + MenuPrint_PixelCoords(buffer, 0xce, 0x38, TRUE); + InitMenu(0, 16, 7, 3, 0, 13); + CreateTask(DaycareLevelMenuProcessKeyInput, 3); +} + +void ChooseSendDaycareMon(void) +{ + OpenPartyMenu(6, 0); + gMain.savedCallback = c2_exit_to_overworld_2_switch; +} -- cgit v1.2.3 From e8d49bf6287142fcb463f416bb7edfd62c053959 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 30 Aug 2017 18:29:31 -0400 Subject: Make static what of the remainder should be static --- src/daycare.c | 27 +++++++++++++++------------ src/mori_debug_menu.c | 8 ++++---- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/src/daycare.c b/src/daycare.c index 63f3a6861..77786f3d1 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -27,7 +27,7 @@ extern u16 word_2024E82; static void sub_80417F4(struct DayCareMail *); static void sub_80420FC(struct Pokemon *, u16, struct DayCareData *); -u8 daycare_relationship_score(struct DayCareData *); +static u8 daycare_relationship_score(struct DayCareData *); const u8 *const gUnknown_08209AC4[] = { DaycareText_GetAlongVeryWell, @@ -996,7 +996,7 @@ void sp0B8_daycare(void) } #ifdef NONMATCHING -bool8 sub_80421B0(struct DayCareData *dayCareData) +static bool8 sub_80421B0(struct DayCareData *dayCareData) { struct BoxPokemon *parent; u32 i; @@ -1036,7 +1036,7 @@ bool8 sub_80421B0(struct DayCareData *dayCareData) } #else __attribute__((naked)) -bool8 sub_80421B0(struct DayCareData *dayCareData) +static bool8 sub_80421B0(struct DayCareData *dayCareData) { asm_unified("\tpush {r4-r7,lr}\n" "\tsub sp, 0x8\n" @@ -1164,12 +1164,12 @@ bool8 sub_80422A0(void) return sub_80421B0(&gSaveBlock1.daycareData); } -bool8 sub_80422B4(struct DayCareData *dayCareData) +static bool8 sub_80422B4(struct DayCareData *dayCareData) { return (u32)((-dayCareData->mail.extra.egg.personalityLo) | dayCareData->mail.extra.egg.personalityLo) >> 31; } -void sub_80422C4(struct DayCareData *dayCareData) +static void sub_80422C4(struct DayCareData *dayCareData) { u8 language; if (GetBoxMonData(&dayCareData->mons[0], MON_DATA_SPECIES) != 0) @@ -1211,6 +1211,9 @@ u8 sp0B6_daycare(void) return 0; } +#ifdef NONMATCHING +static +#endif bool8 sub_80423A8(u16 *a, u16 *b) { int i, j; @@ -1229,7 +1232,7 @@ bool8 sub_80423A8(u16 *a, u16 *b) } #ifdef NONMATCHING -u8 daycare_relationship_score(struct DayCareData *dayCareData) +static u8 daycare_relationship_score(struct DayCareData *dayCareData) { u16 species[2]; u32 otIds[2]; @@ -1297,7 +1300,7 @@ u8 daycare_relationship_score(struct DayCareData *dayCareData) } #else __attribute__((naked)) -u8 daycare_relationship_score(struct DayCareData *dayCareData) +static u8 daycare_relationship_score(struct DayCareData *dayCareData) { asm_unified("\tpush {r4-r7,lr}\n" "\tmov r7, r10\n" @@ -1568,7 +1571,7 @@ bool8 NameHasGenderSymbol(const u8 *name, u8 genderRatio) } #endif -u8 *AppendGenderSymbol(u8 *name, u8 gender) +static u8 *AppendGenderSymbol(u8 *name, u8 gender) { if (gender == MON_MALE) { @@ -1584,12 +1587,12 @@ u8 *AppendGenderSymbol(u8 *name, u8 gender) return StringAppend(name, gOtherText_GenderlessSymbol); } -u8 *MonAppendGenderSymbol(u8 *name, struct BoxPokemon *boxMon) +static u8 *MonAppendGenderSymbol(u8 *name, struct BoxPokemon *boxMon) { return AppendGenderSymbol(name, GetBoxMonGender(boxMon)); } -void DaycareLevelMenuGetText(struct DayCareData *dayCareData, u8 *dest) +static void DaycareLevelMenuGetText(struct DayCareData *dayCareData, u8 *dest) { u8 buffers[2][20]; u8 i; @@ -1606,7 +1609,7 @@ void DaycareLevelMenuGetText(struct DayCareData *dayCareData, u8 *dest) StringAppend(dest, gOtherText_CancelAndLv); } -void DaycareLevelMenuGetLevelText(struct DayCareData *dayCareData, u8 *dest) +static void DaycareLevelMenuGetLevelText(struct DayCareData *dayCareData, u8 *dest) { u8 i; u8 level; @@ -1627,7 +1630,7 @@ void DaycareLevelMenuGetLevelText(struct DayCareData *dayCareData, u8 *dest) *dest = EOS; } -void DaycareLevelMenuProcessKeyInput(u8 taskId) +static void DaycareLevelMenuProcessKeyInput(u8 taskId) { if (gMain.newKeys & DPAD_UP) { diff --git a/src/mori_debug_menu.c b/src/mori_debug_menu.c index df3446d3e..a00b3bf71 100644 --- a/src/mori_debug_menu.c +++ b/src/mori_debug_menu.c @@ -52,7 +52,7 @@ u8 MoriDebugMenu_SearchChild(u8 a1, u8 a2, u8 *ptr) u16 monData; u16 var; - monData = GetMonData(gPlayerParty, 11, ptr); + monData = GetMonData(gPlayerParty, MON_DATA_SPECIES, ptr); var = sub_8041870(monData); StringCopy(localPtr, gSpeciesNames[monData]); StringAppend(localPtr, gUnknown_0839B24D); @@ -67,7 +67,7 @@ u8 MoriDebugMenu_SearchChild(u8 a1, u8 a2, u8 *ptr) s8 MoriDebugMenu_Egg(void) { - if ( Daycare_CountPokemon(gSaveBlock1.daycareData.mons) == 2 && daycare_relationship_score_from_savegame() ) + if ( Daycare_CountPokemon(&gSaveBlock1.daycareData) == 2 && daycare_relationship_score_from_savegame() ) sub_8041940(); CloseMenu(); @@ -76,7 +76,7 @@ s8 MoriDebugMenu_Egg(void) s8 MoriDebugMenu_MaleEgg(void) { - if ( Daycare_CountPokemon(gSaveBlock1.daycareData.mons) == 2 && daycare_relationship_score_from_savegame() ) + if ( Daycare_CountPokemon(&gSaveBlock1.daycareData) == 2 && daycare_relationship_score_from_savegame() ) sub_8041950(); CloseMenu(); @@ -117,7 +117,7 @@ s8 MoriDebugMenu_BreedEgg(void) SetMonData(&gPlayerParty[loopCounter], MON_DATA_FRIENDSHIP, &friendship); } } - gSaveBlock1.daycareData.unk_11a = -3; + gSaveBlock1.daycareData.mail.extra.egg.unk_11a = -3; CloseMenu(); return 1; } -- cgit v1.2.3 From b7f9479bdb37f12774f7e31a934a3dd5e8f821e0 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 30 Aug 2017 19:04:07 -0400 Subject: Fix building --- include/daycare.h | 2 +- include/global.h | 13 +++++++----- src/daycare.c | 56 +++++++++++++++++++++++++-------------------------- src/mori_debug_menu.c | 2 +- src/record_mixing.c | 8 ++++---- 5 files changed, 42 insertions(+), 39 deletions(-) diff --git a/include/daycare.h b/include/daycare.h index 912b49649..e3aec68d3 100644 --- a/include/daycare.h +++ b/include/daycare.h @@ -2,7 +2,7 @@ #define GUARD_DAYCARE_H u8 Daycare_CountPokemon(struct DayCareData *); -void sub_8041324(struct BoxPokemon *, struct DayCareMailEtc *); +void sub_8041324(struct BoxPokemon *, struct RecordMixingDayCareMail *); void sub_8041790(u16 i); u16 sub_8041870(u16); void sub_8041940(void); diff --git a/include/global.h b/include/global.h index b2b4ffcc4..0a415e3e6 100644 --- a/include/global.h +++ b/include/global.h @@ -551,14 +551,17 @@ struct DayCareMailExtra_EggData { u8 unk_11a; }; +struct RecordMixingDayCareMail +{ + struct DayCareMail data[2]; + u32 unk70; + u16 unk74[2]; +}; + struct DayCareMailEtc { struct DayCareMail data[2]; - union { - struct DayCareMailExtra_RecordMixing rc; - struct DayCareMailExtra_EggData egg; - u8 misc[12]; - } extra; + struct DayCareMailExtra_EggData egg; }; struct DayCareData { diff --git a/src/daycare.c b/src/daycare.c index 77786f3d1..b0f7a193f 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -66,7 +66,7 @@ u8 Daycare_CountPokemon(struct DayCareData *daycare_data) return count; } -void sub_8041324(struct BoxPokemon * box_pokemon, struct DayCareMailEtc * daycareMailEtc) +void sub_8041324(struct BoxPokemon * box_pokemon, struct RecordMixingDayCareMail * daycareMailEtc) { u8 i; u8 specCount; @@ -78,17 +78,17 @@ void sub_8041324(struct BoxPokemon * box_pokemon, struct DayCareMailEtc * daycar specCount ++; if (GetBoxMonData(&box_pokemon[i], MON_DATA_HELD_ITEM) == ITEM_NONE) { - daycareMailEtc->extra.rc.unk74[i] = 0; + daycareMailEtc->unk74[i] = 0; } else { - daycareMailEtc->extra.rc.unk74[i] = 1; + daycareMailEtc->unk74[i] = 1; } } else { - daycareMailEtc->extra.rc.unk74[i] = 1; + daycareMailEtc->unk74[i] = 1; } } - daycareMailEtc->extra.rc.unk70 = specCount; + daycareMailEtc->unk70 = specCount; } static s8 Daycare_FindEmptySpot(struct BoxPokemon * daycare_data) @@ -120,7 +120,7 @@ static void Daycare_SendPokemon(struct Pokemon * mon, struct DayCareData * dayca } daycare_data->mons[empty_slot] = mon->box; BoxMonRestorePP(&daycare_data->mons[empty_slot]); - daycare_data->mail.extra.egg.steps[empty_slot] = 0; + daycare_data->mail.egg.steps[empty_slot] = 0; ZeroMonData(mon); party_compaction(); CalculatePlayerPartyCount(); @@ -138,8 +138,8 @@ static void sub_80414C0(struct DayCareData * daycare_data) daycare_data->mons[0] = daycare_data->mons[1]; ZeroBoxMonData(&daycare_data->mons[1]); daycare_data->mail.data[0] = daycare_data->mail.data[1]; - daycare_data->mail.extra.egg.steps[0] = daycare_data->mail.extra.egg.steps[1]; - daycare_data->mail.extra.egg.steps[1] = 0; + daycare_data->mail.egg.steps[0] = daycare_data->mail.egg.steps[1]; + daycare_data->mail.egg.steps[1] = 0; sub_80417F4(&daycare_data->mail.data[1]); } } @@ -180,7 +180,7 @@ static u16 sub_8041570(struct DayCareData * daycare_data, u8 slot) sub_803B4B4(&daycare_data->mons[slot], &pokemon); if (GetMonData(&pokemon, MON_DATA_LEVEL) != MAX_LEVEL) { - experience = GetMonData(&pokemon, MON_DATA_EXP) + daycare_data->mail.extra.egg.steps[slot]; + experience = GetMonData(&pokemon, MON_DATA_EXP) + daycare_data->mail.egg.steps[slot]; SetMonData(&pokemon, MON_DATA_EXP, (u8 *)&experience); DayCare_LevelUpMoves(&pokemon); } @@ -192,7 +192,7 @@ static u16 sub_8041570(struct DayCareData * daycare_data, u8 slot) } party_compaction(); ZeroBoxMonData(&daycare_data->mons[slot]); - daycare_data->mail.extra.egg.steps[slot] = 0; + daycare_data->mail.egg.steps[slot] = 0; sub_80414C0(daycare_data); CalculatePlayerPartyCount(); return species; @@ -216,7 +216,7 @@ static u8 sub_80416A0(struct DayCareData *daycareData, u8 slot) u8 levelAfter; levelBefore = GetLevelFromBoxMonExp(&daycareData->mons[slot]); - levelAfter = Daycare_GetLevelAfterSteps(&daycareData->mons[slot], daycareData->mail.extra.egg.steps[slot]); + levelAfter = Daycare_GetLevelAfterSteps(&daycareData->mons[slot], daycareData->mail.egg.steps[slot]); return levelAfter - levelBefore; } @@ -246,8 +246,8 @@ void sub_8041770(void) void sub_8041790(u16 i) { - gSaveBlock1.daycareData.mail.extra.egg.steps[0] += i; - gSaveBlock1.daycareData.mail.extra.egg.steps[1] += i; + gSaveBlock1.daycareData.mail.egg.steps[0] += i; + gSaveBlock1.daycareData.mail.egg.steps[1] += i; } u8 sub_80417B8(void) @@ -279,11 +279,11 @@ void unref_sub_8041824(struct DayCareData *dayCareData) for (slot = 0; slot < ARRAY_COUNT(dayCareData->mons); slot ++) { ZeroBoxMonData(&dayCareData->mons[slot]); - dayCareData->mail.extra.egg.steps[slot] = 0; + dayCareData->mail.egg.steps[slot] = 0; sub_80417F4(&dayCareData->mail.data[slot]); } - dayCareData->mail.extra.egg.personalityLo = 0; - dayCareData->mail.extra.egg.unk_11a = 0; + dayCareData->mail.egg.personalityLo = 0; + dayCareData->mail.egg.unk_11a = 0; } u16 sub_8041870(u16 species) @@ -315,13 +315,13 @@ u16 sub_8041870(u16 species) static void sub_80418F0(struct DayCareData *dayCareData) { - dayCareData->mail.extra.egg.personalityLo = (Random() % 0xfffe) + 1; + dayCareData->mail.egg.personalityLo = (Random() % 0xfffe) + 1; FlagSet(0x86); } static void sub_804191C(struct DayCareData *dayCareData) { - dayCareData->mail.extra.egg.personalityLo = Random() | 0x8000; + dayCareData->mail.egg.personalityLo = Random() | 0x8000; FlagSet(0x86); } @@ -862,8 +862,8 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st static void RemoveEggFromDayCare(struct DayCareData *dayCareData) { - dayCareData->mail.extra.egg.personalityLo = 0; - dayCareData->mail.extra.egg.unk_11a = 0; + dayCareData->mail.egg.personalityLo = 0; + dayCareData->mail.egg.unk_11a = 0; } void sub_8041E7C(void) @@ -910,11 +910,11 @@ static u16 sub_8041EEC(struct DayCareData *dayCareData, u8 *a1) // inherit_speci } } eggSpecies = sub_8041870(species[a1[0]]); - if (eggSpecies == SPECIES_NIDORAN_F && dayCareData->mail.extra.egg.personalityLo & 0x8000) + if (eggSpecies == SPECIES_NIDORAN_F && dayCareData->mail.egg.personalityLo & 0x8000) { eggSpecies = SPECIES_NIDORAN_M; } - if (eggSpecies == SPECIES_ILLUMISE && dayCareData->mail.extra.egg.personalityLo & 0x8000) + if (eggSpecies == SPECIES_ILLUMISE && dayCareData->mail.egg.personalityLo & 0x8000) { eggSpecies = SPECIES_VOLBEAT; } @@ -978,7 +978,7 @@ static void sub_80420FC(struct Pokemon *mon, u16 species, struct DayCareData *da u16 ball; u8 metLevel; u8 language; - personality = dayCareData->mail.extra.egg.personalityLo | (Random() << 16); + personality = dayCareData->mail.egg.personalityLo | (Random() << 16); CreateMon(mon, species, 5, 0x20, TRUE, personality, FALSE, 0); metLevel = 0; ball = ITEM_POKE_BALL; @@ -1007,15 +1007,15 @@ static bool8 sub_80421B0(struct DayCareData *dayCareData) { if (GetBoxMonData(parent, MON_DATA_SANITY_BIT2, v0)) { - dayCareData->mail.extra.egg.steps[i]++; + dayCareData->mail.egg.steps[i]++; v0++; } } - if (dayCareData->mail.extra.egg.personalityLo == 0 && v0 == 2 && dayCareData->mail.extra.misc[4] == 0xff && daycare_relationship_score(dayCareData) > (u32)((u32)(Random() * 100) / 0xffff)) + if (dayCareData->mail.egg.personalityLo == 0 && v0 == 2 && dayCareData->mail.extra.misc[4] == 0xff && daycare_relationship_score(dayCareData) > (u32)((u32)(Random() * 100) / 0xffff)) { sub_8041940(); } - if ((++dayCareData->mail.extra.egg.unk_11a) == 0xff) + if ((++dayCareData->mail.egg.unk_11a) == 0xff) { for (i=0; imail.extra.egg.personalityLo) | dayCareData->mail.extra.egg.personalityLo) >> 31; + return (u32)((-dayCareData->mail.egg.personalityLo) | dayCareData->mail.egg.personalityLo) >> 31; } static void sub_80422C4(struct DayCareData *dayCareData) @@ -1616,7 +1616,7 @@ static void DaycareLevelMenuGetLevelText(struct DayCareData *dayCareData, u8 *de *dest = EOS; for (i = 0; i < 2; i ++) { - level = Daycare_GetLevelAfterSteps(&dayCareData->mons[i], dayCareData->mail.extra.egg.steps[i]); + level = Daycare_GetLevelAfterSteps(&dayCareData->mons[i], dayCareData->mail.egg.steps[i]); dest[0] = 0x34; dest[1] = 0xFC; dest[2] = 0x14; diff --git a/src/mori_debug_menu.c b/src/mori_debug_menu.c index a00b3bf71..62837c8e6 100644 --- a/src/mori_debug_menu.c +++ b/src/mori_debug_menu.c @@ -117,7 +117,7 @@ s8 MoriDebugMenu_BreedEgg(void) SetMonData(&gPlayerParty[loopCounter], MON_DATA_FRIENDSHIP, &friendship); } } - gSaveBlock1.daycareData.mail.extra.egg.unk_11a = -3; + gSaveBlock1.daycareData.mail.egg.unk_11a = -3; CloseMenu(); return 1; } diff --git a/src/record_mixing.c b/src/record_mixing.c index aa6d2c5a9..7c46d4d0a 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -29,7 +29,7 @@ extern u8 ewram[]; #define unk_2018000 (*(struct PlayerRecords *)(ewram + 0x18000)) #define unk_2008000 (*(struct PlayerRecords *)(ewram + 0x08000)) -extern struct DayCareMailEtc gUnknown_02038738; +extern struct RecordMixingDayCareMail gUnknown_02038738; extern u16 gSpecialVar_0x8005; u32 gUnknown_03005D2C; @@ -42,7 +42,7 @@ void *recordMixingTvShows = &gSaveBlock1.tvShows; void *gUnknown_083D0274 = &gSaveBlock1.unknown_2ABC; void *gUnknown_083D0278 = &gSaveBlock1.oldMan; void *recordMixingEasyChatPairs = &gSaveBlock1.easyChatPairs; -struct DayCareMailEtc *gUnknown_083D0280 = &gUnknown_02038738; +struct RecordMixingDayCareMail *gUnknown_083D0280 = &gUnknown_02038738; void *gUnknown_083D0284 = &gSaveBlock2.filler_A8; #define BUFFER_CHUNK_SIZE 200 @@ -59,7 +59,7 @@ struct PlayerRecords u8 filler1004[0x40]; u8 filler1044[0x40]; struct EasyChatPair easyChatPairs[5]; - struct DayCareMailEtc filler10AC; + struct RecordMixingDayCareMail filler10AC; u8 filler1124[0xA4]; u16 filler11C8[0x34]; }; @@ -77,7 +77,7 @@ void RecordMixing_PrepareExchangePacket(void) gUnknown_02038738.data[0] = gSaveBlock1.daycareData.mail.data[0]; gUnknown_02038738.data[1] = gSaveBlock1.daycareData.mail.data[1]; sub_8041324(gSaveBlock1.daycareData.mons, &gUnknown_02038738); - memcpy(&unk_2018000.filler10AC, gUnknown_083D0280, sizeof(struct DayCareMailEtc)); + memcpy(&unk_2018000.filler10AC, gUnknown_083D0280, sizeof(struct RecordMixingDayCareMail)); memcpy(unk_2018000.filler1124, gUnknown_083D0284, sizeof(unk_2018000.filler1124)); if (GetMultiplayerId() == 0) -- cgit v1.2.3 From b767f1fae9ec77dfe7da67d4fc4ecdccb6723965 Mon Sep 17 00:00:00 2001 From: Touched Date: Sun, 3 Sep 2017 19:05:38 +0200 Subject: Intersperse data with functions --- src/field_ground_effect.c | 213 +++++++++++++++++++++------------------------- 1 file changed, 98 insertions(+), 115 deletions(-) diff --git a/src/field_ground_effect.c b/src/field_ground_effect.c index 1e5f5ba20..b9935463b 100644 --- a/src/field_ground_effect.c +++ b/src/field_ground_effect.c @@ -32,97 +32,6 @@ void GroundEffect_HotSprings(struct MapObject *mapObj, struct Sprite *sprite); void GroundEffect_Seaweed(struct MapObject *mapObj, struct Sprite *sprite); u8 GetReflectionTypeByMetatileBehavior(u32 behavior); -static const u32 sReflectionFlags[] = { 0x00000020, 0x00000010 }; - -typedef bool8 (*MetatileFunc)(u8); - -static const MetatileFunc metatileFuncs[] = { - MetatileBehavior_IsTallGrass, - MetatileBehavior_IsLongGrass, - MetatileBehavior_IsPuddle, - MetatileBehavior_IsSurfableWaterOrUnderwater, - MetatileBehavior_IsShallowFlowingWater, - MetatileBehavior_IsATile, -}; - -static const u32 jumpLandingFlags[] = { - 0x00001000, // Landing in tall grass - 0x00002000, // Landing in long grass - 0x00004000, // Landing on puddle - 0x00008000, // Landing on surfable water or underwater - 0x00004000, // Landing on shallow flowing water - 0x00010000, // Landing on any other type of ground -}; - -static bool8 (*const gUnknown_08376040[])(u8) = { - MetatileBehavior_IsJumpSouth, - MetatileBehavior_IsJumpNorth, - MetatileBehavior_IsJumpWest, - MetatileBehavior_IsJumpEast, -}; - -static const u8 gUnknown_08376050[] = { - 0x73, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x00, 0x00, 0x73 -}; - -// Each byte corresponds to a sprite priority for a field object. -// This is directly the inverse of gFieldObjectPriorities_08376070. -static const u8 gFieldObjectPriorities_08376060[] = { - 2, 2, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 0, 0, 2 -}; - -// Each byte corresponds to a sprite priority for a field object. -// This is the inverse of gFieldObjectPriorities_08376060. -// 1 = Above player sprite -// 2 = Below player sprite -static const u8 gFieldObjectPriorities_08376070[] = { - 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 0, 0, 1, -}; - -static void (*const gUnknown_08376080[])(struct MapObject *mapObj, struct Sprite *sprite, u8 a) = { - nullsub, DoTracksGroundEffect_Footprints, DoTracksGroundEffect_BikeTireTracks, -}; - -// First byte is a Field Effect script id. (gFieldEffectScriptPointers) -// Last three bytes are unknown. -static const u8 gSandFootprints_FieldEffectData[] = { 0xD, 0x0, 0x18, 0x0 }; - -// Specifies which bike track shape to show next. -// For example, when the bike turns from up to right, it will show -// a track that curves to the right. -// Each 4-byte row corresponds to the initial direction of the bike, and -// each byte in that row is for the next direction of the bike in the order -// of down, up, left, right. -static const u8 gBikeTireTracks_Transitions[4][4] = { - 1, 2, 7, 8, - 1, 2, 6, 5, - 5, 8, 3, 4, - 6, 7, 3, 4, -}; - -static void (*const gUnknown_083760A0[])(struct MapObject *mapObj, struct Sprite *sprite) = { - GroundEffect_SpawnOnTallGrass, - sub_8063E94, - sub_8063EE0, - sub_8063F2C, - GroundEffect_WaterReflection, - GroundEffect_IceReflection, - GroundEffect_FlowingWater, - sub_8063FA0, - sub_8063FCC, - GroundEffect_Ripple, - GroundEffect_StepOnPuddle, - GroundEffect_SandPile, - GroundEffect_JumpOnTallGrass, - GroundEffect_JumpOnLongGrass, - GroundEffect_JumpOnShallowWater, - GroundEffect_JumpOnWater, - GroundEffect_JumpLandingDust, - GroundEffect_ShortGrass, - GroundEffect_HotSprings, - GroundEffect_Seaweed -}; - static void GetAllGroundEffectFlags_OnSpawn(struct MapObject *mapObj, u32 *flags) { FieldObjectUpdateMetatileBehaviors(mapObj); @@ -170,19 +79,8 @@ void FieldObjectUpdateMetatileBehaviors(struct MapObject *mapObj) void GetGroundEffectFlags_Reflection(struct MapObject *mapObj, u32 *flags) { - u32 reflectionFlags[2]; - u32 a; - u32 b; - u8 type; - - // Declaring sReflectionFlags inside the function is a neater match than - // this. - b = sReflectionFlags[1]; - a = sReflectionFlags[0]; - reflectionFlags[0] = a; - reflectionFlags[1] = b; - - type = FieldObjectCheckForReflectiveSurface(mapObj); + u32 reflectionFlags[2] = { 0x00000020, 0x00000010 }; + u8 type = FieldObjectCheckForReflectiveSurface(mapObj); if (type) { @@ -333,6 +231,25 @@ void GetGroundEffectFlags_Seaweed(struct MapObject *mapObj, u32 *flags) void GetGroundEffectFlags_JumpLanding(struct MapObject *mapObj, u32 *flags) { + typedef bool8 (*MetatileFunc)(u8); + + static const MetatileFunc metatileFuncs[] = { + MetatileBehavior_IsTallGrass, + MetatileBehavior_IsLongGrass, + MetatileBehavior_IsPuddle, + MetatileBehavior_IsSurfableWaterOrUnderwater, + MetatileBehavior_IsShallowFlowingWater, + MetatileBehavior_IsATile, + }; + + static const u32 jumpLandingFlags[] = { + 0x00001000, // Landing in tall grass + 0x00002000, // Landing in long grass + 0x00004000, // Landing on puddle + 0x00008000, // Landing on surfable water or underwater + 0x00004000, // Landing on shallow flowing water + 0x00010000, // Landing on any other type of ground + }; if (mapObj->mapobj_bit_5 && !mapObj->mapobj_bit_25) { @@ -397,6 +314,13 @@ u8 GetReflectionTypeByMetatileBehavior(u32 behavior) u8 GetLedgeJumpDirection(s16 x, s16 y, u8 z) { + static bool8 (*const unknown_08376040[])(u8) = { + MetatileBehavior_IsJumpSouth, + MetatileBehavior_IsJumpNorth, + MetatileBehavior_IsJumpWest, + MetatileBehavior_IsJumpEast, + }; + u8 b; u8 index = z; @@ -408,7 +332,7 @@ u8 GetLedgeJumpDirection(s16 x, s16 y, u8 z) index--; b = MapGridGetMetatileBehaviorAt(x, y); - if (gUnknown_08376040[index](b) == 1) + if (unknown_08376040[index](b) == 1) return index + 1; return 0; @@ -449,6 +373,24 @@ bool8 IsZCoordMismatchAt(u8 z, s16 x, s16 y) return FALSE; } +static const u8 sUnknown_08376050[] = { + 0x73, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x00, 0x00, 0x73 +}; + +// Each byte corresponds to a sprite priority for a field object. +// This is directly the inverse of gFieldObjectPriorities_08376070. +static const u8 sFieldObjectPriorities_08376060[] = { + 2, 2, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 0, 0, 2 +}; + +// Each byte corresponds to a sprite priority for a field object. +// This is the inverse of gFieldObjectPriorities_08376060. +// 1 = Above player sprite +// 2 = Below player sprite +static const u8 sFieldObjectPriorities_08376070[] = { + 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 0, 0, 1, +}; + void FieldObjectUpdateZCoordAndPriority(struct MapObject *mapObj, struct Sprite *sprite) { if (mapObj->mapobj_bit_26) @@ -456,19 +398,19 @@ void FieldObjectUpdateZCoordAndPriority(struct MapObject *mapObj, struct Sprite FieldObjectUpdateZCoord(mapObj); - sprite->subspriteTableNum = gFieldObjectPriorities_08376070[mapObj->elevation]; - sprite->oam.priority = gFieldObjectPriorities_08376060[mapObj->elevation]; + sprite->subspriteTableNum = sFieldObjectPriorities_08376070[mapObj->elevation]; + sprite->oam.priority = sFieldObjectPriorities_08376060[mapObj->elevation]; } void InitObjectPriorityByZCoord(struct Sprite *sprite, u8 z) { - sprite->subspriteTableNum = gFieldObjectPriorities_08376070[z]; - sprite->oam.priority = gFieldObjectPriorities_08376060[z]; + sprite->subspriteTableNum = sFieldObjectPriorities_08376070[z]; + sprite->oam.priority = sFieldObjectPriorities_08376060[z]; } u8 ZCoordToPriority(u8 z) { - return gFieldObjectPriorities_08376060[z]; + return sFieldObjectPriorities_08376060[z]; } void FieldObjectUpdateZCoord(struct MapObject *mapObj) @@ -492,7 +434,7 @@ void SetObjectSubpriorityByZCoord(u8 a, struct Sprite *sprite, u8 b) u32 tmpb = *(u16 *)&gSpriteCoordOffsetY; s32 tmp2 = (tmpa - tmp) + tmpb; u16 tmp3 = (0x10 - ((((u32)tmp2 + 8) & 0xFF) >> 4)) * 2; - sprite->subpriority = tmp3 + gUnknown_08376050[a] + b; + sprite->subpriority = tmp3 + sUnknown_08376050[a] + b; } void FieldObjectUpdateSubpriority(struct MapObject *mapObj, struct Sprite *sprite) @@ -605,6 +547,10 @@ void GroundEffect_FlowingWater(struct MapObject *mapObj, struct Sprite *sprite) oe_exec_and_other_stuff(FLDEFF_FEET_IN_FLOWING_WATER, mapObj); } +static void (*const gUnknown_08376080[])(struct MapObject *mapObj, struct Sprite *sprite, u8 a) = { + nullsub, DoTracksGroundEffect_Footprints, DoTracksGroundEffect_BikeTireTracks, +}; + void sub_8063FA0(struct MapObject *mapObj, struct Sprite *sprite) { const struct MapObjectGraphicsInfo *info = GetFieldObjectGraphicsInfo(mapObj->graphicsId); @@ -623,19 +569,33 @@ static void nullsub(struct MapObject *mapObj, struct Sprite *sprite, u8 a) static void DoTracksGroundEffect_Footprints(struct MapObject *mapObj, struct Sprite *sprite, u8 a) { - u16 buf[2]; - memcpy(&buf, gSandFootprints_FieldEffectData, sizeof(gSandFootprints_FieldEffectData)); + // First half-word is a Field Effect script id. (gFieldEffectScriptPointers) + u16 sandFootprints_FieldEffectData[2] = { 0xD, 0x18 }; + gUnknown_0202FF84[0] = mapObj->coords3.x; gUnknown_0202FF84[1] = mapObj->coords3.y; gUnknown_0202FF84[2] = 149; gUnknown_0202FF84[3] = 2; gUnknown_0202FF84[4] = mapObj->mapobj_unk_18; - FieldEffectStart(buf[a]); + FieldEffectStart(sandFootprints_FieldEffectData[a]); } static void DoTracksGroundEffect_BikeTireTracks( struct MapObject *mapObj, struct Sprite *sprite, u8 a) { + // Specifies which bike track shape to show next. + // For example, when the bike turns from up to right, it will show + // a track that curves to the right. + // Each 4-byte row corresponds to the initial direction of the bike, and + // each byte in that row is for the next direction of the bike in the order + // of down, up, left, right. + static const u8 bikeTireTracks_Transitions[4][4] = { + 1, 2, 7, 8, + 1, 2, 6, 5, + 5, 8, 3, 4, + 6, 7, 3, 4, + }; + if (mapObj->coords2.x != mapObj->coords3.x || mapObj->coords2.y != mapObj->coords3.y) { gUnknown_0202FF84[0] = mapObj->coords3.x; @@ -643,7 +603,7 @@ static void DoTracksGroundEffect_BikeTireTracks( gUnknown_0202FF84[2] = 149; gUnknown_0202FF84[3] = 2; gUnknown_0202FF84[4] = - gBikeTireTracks_Transitions[mapObj->mapobj_unk_20][mapObj->mapobj_unk_18 - 5]; + bikeTireTracks_Transitions[mapObj->mapobj_unk_20][mapObj->mapobj_unk_18 - 5]; FieldEffectStart(FLDEFF_BIKE_TIRE_TRACKS); } } @@ -733,6 +693,29 @@ void GroundEffect_Seaweed(struct MapObject *mapObj, struct Sprite *sprite) FieldEffectStart(FLDEFF_BUBBLES); } +static void (*const gUnknown_083760A0[])(struct MapObject *mapObj, struct Sprite *sprite) = { + GroundEffect_SpawnOnTallGrass, + sub_8063E94, + sub_8063EE0, + sub_8063F2C, + GroundEffect_WaterReflection, + GroundEffect_IceReflection, + GroundEffect_FlowingWater, + sub_8063FA0, + sub_8063FCC, + GroundEffect_Ripple, + GroundEffect_StepOnPuddle, + GroundEffect_SandPile, + GroundEffect_JumpOnTallGrass, + GroundEffect_JumpOnLongGrass, + GroundEffect_JumpOnShallowWater, + GroundEffect_JumpOnWater, + GroundEffect_JumpLandingDust, + GroundEffect_ShortGrass, + GroundEffect_HotSprings, + GroundEffect_Seaweed +}; + void sub_8064218(struct MapObject *mapObj, struct Sprite *sprite, u32 flags) { u8 i; -- cgit v1.2.3 From 2df2b6280c69d6cd80f4f03be86cdc5628365bf5 Mon Sep 17 00:00:00 2001 From: luckytyphlosion Date: Mon, 4 Sep 2017 19:40:49 -0400 Subject: Add Discord and other disassemblies. --- README.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 0782f7a12..a840a9a78 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,24 @@ It builds the following roms: To set up the repository, see [INSTALL.md](INSTALL.md). -### irc: [freenode#pret][irc] +## See also +* Disassembly of [**Pokémon Red/Blue**][pokered] +* Disassembly of [**Pokémon Yellow**][pokeyellow] +* Disassembly of [**Pokémon Crystal**][pokecrystal] +* Disassembly of [**Pokémon Pinball**][pokepinball] +* Disassembly of [**Pokémon TCG**][poketcg] +* Disassembly of [**Pokémon Emerald**][pokeemerald] +* Discord: [**pret**][Discord] +* irc: **irc.freenode.net** [**#pret**][irc] + +[pokered]: https://github.com/pret/pokered +[pokeyellow]: https://github.com/pret/pokeyellow +[pokecrystal]: https://github.com/pret/pokecrystal +[pokepinball]: https://github.com/pret/pokepinball +[poketcg]: https://github.com/pret/poketcg +[pokeemerald]: https://github.com/pret/pokeemerald +[Discord]: https://discord.gg/cJxDDVP [irc]: https://kiwiirc.com/client/irc.freenode.net/?#pret [travis]: https://travis-ci.org/pret/pokeruby [travis-badge]: https://travis-ci.org/pret/pokeruby.svg?branch=master -- cgit v1.2.3 From e237627700dd2e4f39fec9c3bab4867b48df032b Mon Sep 17 00:00:00 2001 From: Henrique Lorenzi Date: Wed, 30 Aug 2017 17:21:25 -0300 Subject: decompile cable_club.c --- asm/cable_club.s | 1671 -------------------------------------------------- include/cable_club.h | 32 +- ld_script.txt | 2 - src/cable_club.c | 881 ++++++++++++++++++++++++-- 4 files changed, 844 insertions(+), 1742 deletions(-) delete mode 100644 asm/cable_club.s diff --git a/asm/cable_club.s b/asm/cable_club.s deleted file mode 100644 index 68804ca21..000000000 --- a/asm/cable_club.s +++ /dev/null @@ -1,1671 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_8082CD4 -sub_8082CD4: @ 8082CD4 - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, 24 - lsrs r5, r1, 24 - ldr r4, _08082D10 @ =sub_8082F20 - adds r0, r4, 0 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - bne _08082D08 - adds r0, r4, 0 - movs r1, 0x50 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08082D14 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - strh r6, [r1, 0xA] - strh r5, [r1, 0xC] -_08082D08: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08082D10: .4byte sub_8082F20 -_08082D14: .4byte gTasks - thumb_func_end sub_8082CD4 - - thumb_func_start sub_8082D18 -sub_8082D18: @ 8082D18 - push {lr} - adds r1, r0, 0 - ldr r0, _08082D44 @ =gStringVar1 - movs r2, 0 - movs r3, 0x1 - bl ConvertIntToDecimalStringN - movs r0, 0x12 - movs r1, 0xA - movs r2, 0x1C - movs r3, 0xD - bl MenuDrawTextWindow - ldr r0, _08082D48 @ =gOtherText_PLink - movs r1, 0x13 - movs r2, 0xB - movs r3, 0x48 - bl sub_8072BD8 - pop {r0} - bx r0 - .align 2, 0 -_08082D44: .4byte gStringVar1 -_08082D48: .4byte gOtherText_PLink - thumb_func_end sub_8082D18 - - thumb_func_start sub_8082D4C -sub_8082D4C: @ 8082D4C - push {lr} - movs r0, 0x12 - movs r1, 0xA - movs r2, 0x1C - movs r3, 0xD - bl MenuZeroFillWindowRect - pop {r0} - bx r0 - thumb_func_end sub_8082D4C - - thumb_func_start sub_8082D60 -sub_8082D60: @ 8082D60 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r4, r1, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _08082D88 @ =gTasks + 0x8 - adds r1, r0 - adds r5, r1, 0x6 - movs r2, 0x6 - ldrsh r0, [r1, r2] - cmp r4, r0 - beq _08082D94 - cmp r4, 0x1 - bhi _08082D8C - bl sub_8082D4C - b _08082D92 - .align 2, 0 -_08082D88: .4byte gTasks + 0x8 -_08082D8C: - adds r0, r4, 0 - bl sub_8082D18 -_08082D92: - strh r4, [r5] -_08082D94: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8082D60 - - thumb_func_start sub_8082D9C -sub_8082D9C: @ 8082D9C - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 24 - lsrs r5, r1, 24 - bl GetLinkPlayerDataExchangeStatusTimed - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - beq _08082DEC - cmp r0, 0x2 - bgt _08082DBC - cmp r0, 0x1 - beq _08082DC2 - b _08082DEC -_08082DBC: - cmp r0, 0x3 - beq _08082DE8 - b _08082DEC -_08082DC2: - bl GetLinkPlayerCount_2 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r4, r1 - bgt _08082DD6 - cmp r1, r5 - bgt _08082DD6 - movs r0, 0x1 - b _08082DEE -_08082DD6: - ldr r0, _08082DE4 @ =gStringVar1 - movs r2, 0 - movs r3, 0x1 - bl ConvertIntToDecimalStringN - movs r0, 0x4 - b _08082DEE - .align 2, 0 -_08082DE4: .4byte gStringVar1 -_08082DE8: - movs r0, 0x3 - b _08082DEE -_08082DEC: - movs r0, 0 -_08082DEE: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8082D9C - - thumb_func_start sub_8082DF4 -sub_8082DF4: @ 8082DF4 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl HasLinkErrorOccurred - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08082E0A - movs r0, 0 - b _08082E1A -_08082E0A: - ldr r0, _08082E20 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _08082E24 @ =sub_8083418 - str r0, [r1] - movs r0, 0x1 -_08082E1A: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08082E20: .4byte gTasks -_08082E24: .4byte sub_8083418 - thumb_func_end sub_8082DF4 - - thumb_func_start sub_8082E28 -sub_8082E28: @ 8082E28 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _08082E58 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08082E64 - bl IsLinkConnectionEstablished - lsls r0, 24 - cmp r0, 0 - bne _08082E64 - ldr r0, _08082E5C @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _08082E60 @ =sub_80833EC - str r0, [r1] - movs r0, 0x1 - b _08082E66 - .align 2, 0 -_08082E58: .4byte gMain -_08082E5C: .4byte gTasks -_08082E60: .4byte sub_80833EC -_08082E64: - movs r0, 0 -_08082E66: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8082E28 - - thumb_func_start sub_8082E6C -sub_8082E6C: @ 8082E6C - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl IsLinkConnectionEstablished - lsls r0, 24 - cmp r0, 0 - beq _08082E82 - movs r0, 0x1 - bl SetSuppressLinkErrorMessage -_08082E82: - ldr r0, _08082E94 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _08082E98 - movs r0, 0 - b _08082EA8 - .align 2, 0 -_08082E94: .4byte gMain -_08082E98: - ldr r0, _08082EB0 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _08082EB4 @ =sub_80833EC - str r0, [r1] - movs r0, 0x1 -_08082EA8: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08082EB0: .4byte gTasks -_08082EB4: .4byte sub_80833EC - thumb_func_end sub_8082E6C - - thumb_func_start sub_8082EB8 -sub_8082EB8: @ 8082EB8 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl GetSioMultiSI - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08082ECE - movs r0, 0 - b _08082EDE -_08082ECE: - ldr r0, _08082EE4 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _08082EE8 @ =sub_8083418 - str r0, [r1] - movs r0, 0x1 -_08082EDE: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08082EE4: .4byte gTasks -_08082EE8: .4byte sub_8083418 - thumb_func_end sub_8082EB8 - - thumb_func_start unref_sub_8082EEC -unref_sub_8082EEC: @ 8082EEC - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _08082F1C @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xA - bne _08082F16 - movs r0, 0x2 - bl sub_8007E9C - adds r0, r4, 0 - bl DestroyTask -_08082F16: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08082F1C: .4byte gTasks - thumb_func_end unref_sub_8082EEC - - thumb_func_start sub_8082F20 -sub_8082F20: @ 8082F20 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _08082F48 @ =gTasks + 0x8 - adds r4, r1, r0 - movs r3, 0 - ldrsh r2, [r4, r3] - cmp r2, 0 - bne _08082F4C - bl OpenLinkTimed - bl sub_80082EC - bl ResetLinkPlayers - b _08082F58 - .align 2, 0 -_08082F48: .4byte gTasks + 0x8 -_08082F4C: - cmp r2, 0x9 - ble _08082F58 - subs r0, 0x8 - adds r0, r1, r0 - ldr r1, _08082F64 @ =sub_8082F68 - str r1, [r0] -_08082F58: - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08082F64: .4byte sub_8082F68 - thumb_func_end sub_8082F20 - - thumb_func_start sub_8082F68 -sub_8082F68: @ 8082F68 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl GetLinkPlayerCount_2 - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r4, 0 - bl sub_8082E28 - cmp r0, 0x1 - beq _08082FDC - adds r0, r4, 0 - bl sub_8082E6C - cmp r0, 0x1 - beq _08082FDC - cmp r5, 0x1 - bls _08082FDC - movs r0, 0x1 - bl SetSuppressLinkErrorMessage - ldr r1, _08082FC0 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r4, r0, r1 - movs r0, 0 - strh r0, [r4, 0xE] - bl IsLinkMaster - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08082FCC - movs r0, 0x15 - bl PlaySE - ldr r0, _08082FC4 @ =gUnknown_081A4932 - bl ShowFieldAutoScrollMessage - ldr r0, _08082FC8 @ =sub_8082FEC - b _08082FDA - .align 2, 0 -_08082FC0: .4byte gTasks -_08082FC4: .4byte gUnknown_081A4932 -_08082FC8: .4byte sub_8082FEC -_08082FCC: - movs r0, 0x16 - bl PlaySE - ldr r0, _08082FE4 @ =gUnknown_081A49B6 - bl ShowFieldAutoScrollMessage - ldr r0, _08082FE8 @ =sub_80831F8 -_08082FDA: - str r0, [r4] -_08082FDC: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08082FE4: .4byte gUnknown_081A49B6 -_08082FE8: .4byte sub_80831F8 - thumb_func_end sub_8082F68 - - thumb_func_start sub_8082FEC -sub_8082FEC: @ 8082FEC - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl sub_8082E28 - cmp r0, 0x1 - beq _0808302C - adds r0, r4, 0 - bl sub_8082EB8 - cmp r0, 0x1 - beq _0808302C - adds r0, r4, 0 - bl sub_8082DF4 - cmp r0, 0x1 - beq _0808302C - bl GetFieldMessageBoxMode - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0 - bne _0808302C - ldr r0, _08083034 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - strh r2, [r1, 0xE] - ldr r0, _08083038 @ =sub_808303C - str r0, [r1] -_0808302C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08083034: .4byte gTasks -_08083038: .4byte sub_808303C - thumb_func_end sub_8082FEC - -.section .text_80830E4 - - - - - - - - - - thumb_func_start sub_80833C4 -sub_80833C4: @ 80833C4 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080833E8 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _080833E0 - bl sub_8082D4C - bl EnableBothScriptContexts - adds r0, r4, 0 - bl DestroyTask -_080833E0: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080833E8: .4byte gReceivedRemoteLinkPlayers - thumb_func_end sub_80833C4 - - thumb_func_start sub_80833EC -sub_80833EC: @ 80833EC - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r1, _08083414 @ =gScriptResult - movs r0, 0x5 - strh r0, [r1] - bl sub_8082D4C - bl HideFieldMessageBox - bl EnableBothScriptContexts - adds r0, r4, 0 - bl DestroyTask - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08083414: .4byte gScriptResult - thumb_func_end sub_80833EC - - thumb_func_start sub_8083418 -sub_8083418: @ 8083418 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r1, _08083440 @ =gScriptResult - movs r0, 0x6 - strh r0, [r1] - bl sub_8082D4C - bl HideFieldMessageBox - bl EnableBothScriptContexts - adds r0, r4, 0 - bl DestroyTask - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08083440: .4byte gScriptResult - thumb_func_end sub_8083418 - - thumb_func_start sub_8083444 -sub_8083444: @ 8083444 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08083468 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r2, r1, r2 - ldrh r0, [r2, 0x10] - adds r0, 0x1 - strh r0, [r2, 0x10] - lsls r0, 16 - movs r1, 0x96 - lsls r1, 18 - cmp r0, r1 - bgt _0808346C - movs r0, 0 - b _08083472 - .align 2, 0 -_08083468: .4byte gTasks -_0808346C: - ldr r0, _08083478 @ =sub_8083418 - str r0, [r2] - movs r0, 0x1 -_08083472: - pop {r1} - bx r1 - .align 2, 0 -_08083478: .4byte sub_8083418 - thumb_func_end sub_8083444 - - thumb_func_start sub_808347C -sub_808347C: @ 808347C - push {r4,lr} - movs r3, 0x2 - movs r2, 0x2 - ldr r0, _08083494 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - cmp r0, 0x2 - beq _080834B0 - cmp r0, 0x2 - bgt _08083498 - cmp r0, 0x1 - beq _0808349E - b _080834CC - .align 2, 0 -_08083494: .4byte gSpecialVar_0x8004 -_08083498: - cmp r0, 0x5 - beq _080834C0 - b _080834CC -_0808349E: - movs r3, 0x2 - ldr r1, _080834A8 @ =gLinkType - ldr r4, _080834AC @ =0x00002233 - b _080834C8 - .align 2, 0 -_080834A8: .4byte gLinkType -_080834AC: .4byte 0x00002233 -_080834B0: - movs r3, 0x2 - ldr r1, _080834B8 @ =gLinkType - ldr r4, _080834BC @ =0x00002244 - b _080834C8 - .align 2, 0 -_080834B8: .4byte gLinkType -_080834BC: .4byte 0x00002244 -_080834C0: - movs r3, 0x4 - movs r2, 0x4 - ldr r1, _080834DC @ =gLinkType - ldr r4, _080834E0 @ =0x00002255 -_080834C8: - adds r0, r4, 0 - strh r0, [r1] -_080834CC: - adds r0, r3, 0 - adds r1, r2, 0 - bl sub_8082CD4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080834DC: .4byte gLinkType -_080834E0: .4byte 0x00002255 - thumb_func_end sub_808347C - - thumb_func_start sub_80834E4 -sub_80834E4: @ 80834E4 - push {lr} - ldr r1, _08083500 @ =gLinkType - ldr r2, _08083504 @ =0x00001133 - adds r0, r2, 0 - strh r0, [r1] - ldr r1, _08083508 @ =gBattleTypeFlags - movs r0, 0 - strh r0, [r1] - movs r0, 0x2 - movs r1, 0x2 - bl sub_8082CD4 - pop {r0} - bx r0 - .align 2, 0 -_08083500: .4byte gLinkType -_08083504: .4byte 0x00001133 -_08083508: .4byte gBattleTypeFlags - thumb_func_end sub_80834E4 - - thumb_func_start sub_808350C -sub_808350C: @ 808350C - push {lr} - ldr r0, _0808352C @ =gScriptResult - movs r2, 0 - strh r2, [r0] - ldr r1, _08083530 @ =gLinkType - ldr r3, _08083534 @ =0x00003311 - adds r0, r3, 0 - strh r0, [r1] - ldr r0, _08083538 @ =gBattleTypeFlags - strh r2, [r0] - movs r0, 0x2 - movs r1, 0x4 - bl sub_8082CD4 - pop {r0} - bx r0 - .align 2, 0 -_0808352C: .4byte gScriptResult -_08083530: .4byte gLinkType -_08083534: .4byte 0x00003311 -_08083538: .4byte gBattleTypeFlags - thumb_func_end sub_808350C - - thumb_func_start sub_808353C -sub_808353C: @ 808353C - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _0808355C @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - movs r1, 0x8 - ldrsh r0, [r0, r1] - cmp r0, 0 - beq _08083560 - cmp r0, 0x1 - beq _080835BC - b _080835CE - .align 2, 0 -_0808355C: .4byte gTasks -_08083560: - ldr r0, _08083594 @ =gScriptResult - ldrh r0, [r0] - cmp r0, 0x1 - bne _08083586 - bl GetLinkPlayerCount - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - cmp r1, r0 - bge _08083586 - ldr r2, _08083598 @ =gLinkPlayers -_08083578: - ldrh r4, [r2, 0x1A] - cmp r4, 0x1 - beq _0808359C - adds r2, 0x1C - adds r1, 0x1 - cmp r1, r0 - blt _08083578 -_08083586: - bl EnableBothScriptContexts - adds r0, r5, 0 - bl DestroyTask - b _080835CE - .align 2, 0 -_08083594: .4byte gScriptResult -_08083598: .4byte gLinkPlayers -_0808359C: - ldr r1, _080835B4 @ =gScriptResult - movs r0, 0x7 - strh r0, [r1] - bl sub_8008480 - ldr r1, _080835B8 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - strh r4, [r0, 0x8] - b _080835CE - .align 2, 0 -_080835B4: .4byte gScriptResult -_080835B8: .4byte gTasks -_080835BC: - ldr r0, _080835D4 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _080835CE - bl EnableBothScriptContexts - adds r0, r5, 0 - bl DestroyTask -_080835CE: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080835D4: .4byte gReceivedRemoteLinkPlayers - thumb_func_end sub_808353C - - thumb_func_start sub_80835D8 -sub_80835D8: @ 80835D8 - push {r4,lr} - ldr r4, _0808360C @ =sub_808353C - adds r0, r4, 0 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0xFF - bne _08083604 - adds r0, r4, 0 - movs r1, 0x50 - bl CreateTask - lsls r0, 24 - lsrs r2, r0, 24 - ldr r1, _08083610 @ =gTasks - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r0, r1 - movs r1, 0 - strh r1, [r0, 0x8] -_08083604: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808360C: .4byte sub_808353C -_08083610: .4byte gTasks - thumb_func_end sub_80835D8 - - thumb_func_start sub_8083614 -sub_8083614: @ 8083614 - push {lr} - ldr r1, _08083630 @ =gLinkType - ldr r2, _08083634 @ =0x00004411 - adds r0, r2, 0 - strh r0, [r1] - ldr r1, _08083638 @ =gBattleTypeFlags - movs r0, 0 - strh r0, [r1] - movs r0, 0x2 - movs r1, 0x4 - bl sub_8082CD4 - pop {r0} - bx r0 - .align 2, 0 -_08083630: .4byte gLinkType -_08083634: .4byte 0x00004411 -_08083638: .4byte gBattleTypeFlags - thumb_func_end sub_8083614 - - thumb_func_start sub_808363C -sub_808363C: @ 808363C - push {lr} - ldr r1, _08083658 @ =gLinkType - ldr r2, _0808365C @ =0x00006601 - adds r0, r2, 0 - strh r0, [r1] - ldr r1, _08083660 @ =gBattleTypeFlags - movs r0, 0 - strh r0, [r1] - movs r0, 0x4 - movs r1, 0x4 - bl sub_8082CD4 - pop {r0} - bx r0 - .align 2, 0 -_08083658: .4byte gLinkType -_0808365C: .4byte 0x00006601 -_08083660: .4byte gBattleTypeFlags - thumb_func_end sub_808363C - - thumb_func_start sub_8083664 -sub_8083664: @ 8083664 - push {lr} - ldr r0, _08083678 @ =sub_8083710 - bl FuncIsActiveTask - lsls r0, 24 - cmp r0, 0 - beq _0808367C - movs r0, 0xFF - b _08083700 - .align 2, 0 -_08083678: .4byte sub_8083710 -_0808367C: - ldr r0, _08083690 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - subs r0, 0x1 - cmp r0, 0x4 - bhi _080836F4 - lsls r0, 2 - ldr r1, _08083694 @ =_08083698 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08083690: .4byte gSpecialVar_0x8004 -_08083694: .4byte _08083698 - .align 2, 0 -_08083698: - .4byte _080836AC - .4byte _080836BC - .4byte _080836DC - .4byte _080836EC - .4byte _080836CC -_080836AC: - ldr r1, _080836B4 @ =gLinkType - ldr r2, _080836B8 @ =0x00002233 - b _080836F0 - .align 2, 0 -_080836B4: .4byte gLinkType -_080836B8: .4byte 0x00002233 -_080836BC: - ldr r1, _080836C4 @ =gLinkType - ldr r2, _080836C8 @ =0x00002244 - b _080836F0 - .align 2, 0 -_080836C4: .4byte gLinkType -_080836C8: .4byte 0x00002244 -_080836CC: - ldr r1, _080836D4 @ =gLinkType - ldr r2, _080836D8 @ =0x00002255 - b _080836F0 - .align 2, 0 -_080836D4: .4byte gLinkType -_080836D8: .4byte 0x00002255 -_080836DC: - ldr r1, _080836E4 @ =gLinkType - ldr r2, _080836E8 @ =0x00001111 - b _080836F0 - .align 2, 0 -_080836E4: .4byte gLinkType -_080836E8: .4byte 0x00001111 -_080836EC: - ldr r1, _08083704 @ =gLinkType - ldr r2, _08083708 @ =0x00003322 -_080836F0: - adds r0, r2, 0 - strh r0, [r1] -_080836F4: - ldr r0, _0808370C @ =sub_8083710 - movs r1, 0x50 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 -_08083700: - pop {r1} - bx r1 - .align 2, 0 -_08083704: .4byte gLinkType -_08083708: .4byte 0x00003322 -_0808370C: .4byte sub_8083710 - thumb_func_end sub_8083664 - - thumb_func_start sub_8083710 -sub_8083710: @ 8083710 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0808373C @ =gTasks + 0x8 - adds r4, r1, r0 - movs r3, 0 - ldrsh r2, [r4, r3] - cmp r2, 0 - bne _08083744 - bl OpenLink - bl ResetLinkPlayers - ldr r0, _08083740 @ =sub_8083C50 - movs r1, 0x50 - bl CreateTask - b _08083750 - .align 2, 0 -_0808373C: .4byte gTasks + 0x8 -_08083740: .4byte sub_8083C50 -_08083744: - cmp r2, 0x9 - ble _08083750 - subs r0, 0x8 - adds r0, r1, r0 - ldr r1, _0808375C @ =sub_8083760 - str r1, [r0] -_08083750: - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808375C: .4byte sub_8083760 - thumb_func_end sub_8083710 - - thumb_func_start sub_8083760 -sub_8083760: @ 8083760 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r5, r4, 0 - bl GetLinkPlayerCount_2 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bls _080837A6 - bl IsLinkMaster - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08083798 - ldr r0, _08083790 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _08083794 @ =sub_80837B4 - b _080837A4 - .align 2, 0 -_08083790: .4byte gTasks -_08083794: .4byte sub_80837B4 -_08083798: - ldr r0, _080837AC @ =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r0 - ldr r0, _080837B0 @ =sub_80837EC -_080837A4: - str r0, [r1] -_080837A6: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080837AC: .4byte gTasks -_080837B0: .4byte sub_80837EC - thumb_func_end sub_8083760 - - thumb_func_start sub_80837B4 -sub_80837B4: @ 80837B4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - bl sub_800820C - adds r4, r0, 0 - bl GetLinkPlayerCount_2 - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - bne _080837DE - bl sub_8007F4C - ldr r0, _080837E4 @ =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r0 - ldr r0, _080837E8 @ =sub_80837EC - str r0, [r1] -_080837DE: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080837E4: .4byte gTasks -_080837E8: .4byte sub_80837EC - thumb_func_end sub_80837B4 - - thumb_func_start sub_80837EC -sub_80837EC: @ 80837EC - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0808381C @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0x1 - bne _08083814 - bl IsLinkPlayerDataExchangeComplete - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08083814 - bl sub_800826C - bl sub_8007B14 - adds r0, r4, 0 - bl DestroyTask -_08083814: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808381C: .4byte gReceivedRemoteLinkPlayers - thumb_func_end sub_80837EC - - thumb_func_start sub_8083820 -sub_8083820: @ 8083820 - push {lr} - bl InitSaveDialog - pop {r0} - bx r0 - thumb_func_end sub_8083820 - - thumb_func_start sub_808382C -sub_808382C: @ 808382C - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _08083850 @ =gTasks - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x5 - bls _08083846 - b _08083940 -_08083846: - lsls r0, 2 - ldr r1, _08083854 @ =_08083858 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08083850: .4byte gTasks -_08083854: .4byte _08083858 - .align 2, 0 -_08083858: - .4byte _08083870 - .4byte _08083890 - .4byte _080838A0 - .4byte _080838B0 - .4byte _080838B6 - .4byte _080838CC -_08083870: - movs r0, 0x1 - movs r1, 0 - bl fade_screen - ldr r1, _08083888 @ =gLinkType - ldr r2, _0808388C @ =0x00002211 - adds r0, r2, 0 - strh r0, [r1] - bl ClearLinkCallback_2 - b _080838BE - .align 2, 0 -_08083888: .4byte gLinkType -_0808388C: .4byte 0x00002211 -_08083890: - ldr r0, _0808389C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - b _080838BA - .align 2, 0 -_0808389C: .4byte gPaletteFade -_080838A0: - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x14 - ble _08083940 - b _080838BE -_080838B0: - bl sub_800832C - b _080838BE -_080838B6: - ldr r0, _080838C8 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] -_080838BA: - cmp r0, 0 - bne _08083940 -_080838BE: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _08083940 - .align 2, 0 -_080838C8: .4byte gReceivedRemoteLinkPlayers -_080838CC: - ldr r0, _080838E4 @ =gLinkPlayers - ldr r0, [r0, 0x4] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080838E8 - movs r0, 0xE6 - lsls r0, 1 - bl current_map_music_set__default_for_battle - b _080838EE - .align 2, 0 -_080838E4: .4byte gLinkPlayers -_080838E8: - ldr r0, _08083900 @ =0x000001cb - bl current_map_music_set__default_for_battle -_080838EE: - ldr r0, _08083904 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - cmp r0, 0x2 - beq _08083918 - cmp r0, 0x2 - bgt _08083908 - cmp r0, 0x1 - beq _0808390E - b _0808392E - .align 2, 0 -_08083900: .4byte 0x000001cb -_08083904: .4byte gSpecialVar_0x8004 -_08083908: - cmp r0, 0x5 - beq _08083924 - b _0808392E -_0808390E: - ldr r1, _08083914 @ =gBattleTypeFlags - movs r0, 0xA - b _0808392C - .align 2, 0 -_08083914: .4byte gBattleTypeFlags -_08083918: - ldr r1, _08083920 @ =gBattleTypeFlags - movs r0, 0xB - b _0808392C - .align 2, 0 -_08083920: .4byte gBattleTypeFlags -_08083924: - bl ReducePlayerPartyToThree - ldr r1, _08083948 @ =gBattleTypeFlags - movs r0, 0x4B -_0808392C: - strh r0, [r1] -_0808392E: - ldr r0, _0808394C @ =sub_800E7C4 - bl SetMainCallback2 - ldr r1, _08083950 @ =gMain - ldr r0, _08083954 @ =sub_8083958 - str r0, [r1, 0x8] - adds r0, r5, 0 - bl DestroyTask -_08083940: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08083948: .4byte gBattleTypeFlags -_0808394C: .4byte sub_800E7C4 -_08083950: .4byte gMain -_08083954: .4byte sub_8083958 - thumb_func_end sub_808382C - - thumb_func_start sub_8083958 -sub_8083958: @ 8083958 - push {lr} - bl call_map_music_set_to_zero - bl LoadPlayerParty - bl SavePlayerBag - bl sub_810FEFC - ldr r0, _08083990 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - cmp r0, 0x5 - beq _0808397E - ldr r0, _08083994 @ =gUnknown_03004860 - ldrb r1, [r0] - movs r0, 0x1 - eors r0, r1 - bl UpdateLinkBattleRecords -_0808397E: - ldr r0, _08083998 @ =gMain - ldr r1, _0808399C @ =sub_805465C - str r1, [r0, 0x8] - ldr r0, _080839A0 @ =sub_8071B28 - bl SetMainCallback2 - pop {r0} - bx r0 - .align 2, 0 -_08083990: .4byte gSpecialVar_0x8004 -_08083994: .4byte gUnknown_03004860 -_08083998: .4byte gMain -_0808399C: .4byte sub_805465C -_080839A0: .4byte sub_8071B28 - thumb_func_end sub_8083958 - - thumb_func_start sub_80839A4 -sub_80839A4: @ 80839A4 - push {lr} - ldr r0, _080839CC @ =gSpecialVar_0x8004 - ldrh r1, [r0] - subs r0, r1, 0x1 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bls _080839B8 - cmp r1, 0x5 - bne _080839C0 -_080839B8: - bl LoadPlayerParty - bl SavePlayerBag -_080839C0: - movs r0, 0x7F - bl copy_saved_warp2_bank_and_enter_x_to_warp1 - pop {r0} - bx r0 - .align 2, 0 -_080839CC: .4byte gSpecialVar_0x8004 - thumb_func_end sub_80839A4 - - thumb_func_start sub_80839D0 -sub_80839D0: @ 80839D0 - push {lr} - bl sub_805559C - pop {r0} - bx r0 - thumb_func_end sub_80839D0 - - thumb_func_start sub_80839DC -sub_80839DC: @ 80839DC - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, _08083A00 @ =gTasks - adds r5, r0, r1 - movs r1, 0x8 - ldrsh r0, [r5, r1] - cmp r0, 0x1 - beq _08083A20 - cmp r0, 0x1 - bgt _08083A04 - cmp r0, 0 - beq _08083A0E - b _08083A7E - .align 2, 0 -_08083A00: .4byte gTasks -_08083A04: - cmp r0, 0x2 - beq _08083A40 - cmp r0, 0x3 - beq _08083A68 - b _08083A7E -_08083A0E: - ldr r0, _08083A1C @ =gUnknown_081A490C - bl ShowFieldMessage - movs r0, 0x1 - strh r0, [r5, 0x8] - b _08083A7E - .align 2, 0 -_08083A1C: .4byte gUnknown_081A490C -_08083A20: - bl IsFieldMessageBoxHidden - lsls r0, 24 - cmp r0, 0 - beq _08083A7E - bl sub_8055574 - ldr r0, _08083A3C @ =gSpecialVar_0x8005 - ldrb r0, [r0] - bl sub_8007270 - movs r0, 0x2 - strh r0, [r5, 0x8] - b _08083A7E - .align 2, 0 -_08083A3C: .4byte gSpecialVar_0x8005 -_08083A40: - bl sub_80554F8 - cmp r0, 0x1 - beq _08083A52 - cmp r0, 0x1 - ble _08083A7E - cmp r0, 0x2 - beq _08083A62 - b _08083A7E -_08083A52: - bl HideFieldMessageBox - movs r0, 0 - strh r0, [r5, 0x8] - adds r0, r4, 0 - bl SwitchTaskToFollowupFunc - b _08083A7E -_08083A62: - movs r0, 0x3 - strh r0, [r5, 0x8] - b _08083A7E -_08083A68: - bl sub_8055588 - bl HideFieldMessageBox - bl MenuZeroFillScreen - adds r0, r4, 0 - bl DestroyTask - bl EnableBothScriptContexts -_08083A7E: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80839DC - - thumb_func_start sub_8083A84 -sub_8083A84: @ 8083A84 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r4, _08083AA8 @ =sub_80839DC - adds r0, r4, 0 - movs r1, 0x50 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - adds r1, r4, 0 - adds r2, r5, 0 - bl SetTaskFuncWithFollowupFunc - bl ScriptContext1_Stop - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08083AA8: .4byte sub_80839DC - thumb_func_end sub_8083A84 - - thumb_func_start sub_8083AAC -sub_8083AAC: @ 8083AAC - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _08083AD0 @ =gTasks - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _08083AF0 - cmp r0, 0x1 - bgt _08083AD4 - cmp r0, 0 - beq _08083ADE - b _08083B34 - .align 2, 0 -_08083AD0: .4byte gTasks -_08083AD4: - cmp r0, 0x2 - beq _08083B04 - cmp r0, 0x3 - beq _08083B20 - b _08083B34 -_08083ADE: - bl ScriptContext2_Enable - movs r0, 0x1 - movs r1, 0 - bl fade_screen - bl ClearLinkCallback_2 - b _08083B14 -_08083AF0: - ldr r0, _08083B00 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08083B34 - b _08083B14 - .align 2, 0 -_08083B00: .4byte gPaletteFade -_08083B04: - ldr r1, _08083B1C @ =gUnknown_020297D8 - movs r0, 0 - strb r0, [r1] - strb r0, [r1, 0x1] - bl m4aMPlayAllStop - bl sub_800832C -_08083B14: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _08083B34 - .align 2, 0 -_08083B1C: .4byte gUnknown_020297D8 -_08083B20: - ldr r0, _08083B3C @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _08083B34 - ldr r0, _08083B40 @ =sub_8047CD8 - bl SetMainCallback2 - adds r0, r5, 0 - bl DestroyTask -_08083B34: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08083B3C: .4byte gReceivedRemoteLinkPlayers -_08083B40: .4byte sub_8047CD8 - thumb_func_end sub_8083AAC - - thumb_func_start sub_8083B44 -sub_8083B44: @ 8083B44 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl sub_8083B6C - adds r0, r4, 0 - bl DestroyTask - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8083B44 - - thumb_func_start sub_8083B5C -sub_8083B5C: @ 8083B5C - push {lr} - ldr r0, _08083B68 @ =sub_8083B44 - bl sub_8083A84 - pop {r0} - bx r0 - .align 2, 0 -_08083B68: .4byte sub_8083B44 - thumb_func_end sub_8083B5C - - thumb_func_start sub_8083B6C -sub_8083B6C: @ 8083B6C - push {lr} - ldr r0, _08083B7C @ =sub_8083AAC - movs r1, 0x50 - bl CreateTask - pop {r0} - bx r0 - .align 2, 0 -_08083B7C: .4byte sub_8083AAC - thumb_func_end sub_8083B6C - - thumb_func_start sub_8083B80 -sub_8083B80: @ 8083B80 - push {lr} - bl sub_8083B6C - bl ScriptContext1_Stop - pop {r0} - bx r0 - thumb_func_end sub_8083B80 - - thumb_func_start sub_8083B90 -sub_8083B90: @ 8083B90 - push {lr} - ldr r0, _08083BA4 @ =gLinkType - ldr r2, _08083BA8 @ =0x00002211 - adds r1, r2, 0 - strh r1, [r0] - ldr r0, _08083BAC @ =sub_808382C - bl sub_8083A84 - pop {r0} - bx r0 - .align 2, 0 -_08083BA4: .4byte gLinkType -_08083BA8: .4byte 0x00002211 -_08083BAC: .4byte sub_808382C - thumb_func_end sub_8083B90 - - thumb_func_start unref_sub_8083BB0 -unref_sub_8083BB0: @ 8083BB0 - push {r4,lr} - ldr r4, _08083BD4 @ =sub_80839DC - adds r0, r4, 0 - movs r1, 0x50 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08083BD8 @ =Task_RecordMixing_Main - adds r1, r4, 0 - bl SetTaskFuncWithFollowupFunc - bl ScriptContext1_Stop - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08083BD4: .4byte sub_80839DC -_08083BD8: .4byte Task_RecordMixing_Main - thumb_func_end unref_sub_8083BB0 - - thumb_func_start sub_8083BDC -sub_8083BDC: @ 8083BDC - push {lr} - ldr r0, _08083BEC @ =gSpecialVar_0x8006 - ldrb r0, [r0] - ldr r1, _08083BF0 @ =c2_exit_to_overworld_1_continue_scripts_restart_music - bl sub_8093130 - pop {r0} - bx r0 - .align 2, 0 -_08083BEC: .4byte gSpecialVar_0x8006 -_08083BF0: .4byte c2_exit_to_overworld_1_continue_scripts_restart_music - thumb_func_end sub_8083BDC - - thumb_func_start sub_8083BF4 -sub_8083BF4: @ 8083BF4 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _08083C34 @ =gSpecialVar_0x8006 - strh r4, [r0] - ldr r0, _08083C38 @ =gStringVar1 - lsls r1, r4, 3 - subs r1, r4 - lsls r1, 2 - ldr r2, _08083C3C @ =gLinkPlayers + 0x8 - adds r1, r2 - bl StringCopy - adds r0, r4, 0 - bl sub_80934C4 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - beq _08083C48 - ldr r0, _08083C40 @ =gStringVar2 - ldr r2, _08083C44 @ =gTrainerCardColorNames - subs r1, 0x1 - lsls r1, 2 - adds r1, r2 - ldr r1, [r1] - bl StringCopy - movs r0, 0x1 - b _08083C4A - .align 2, 0 -_08083C34: .4byte gSpecialVar_0x8006 -_08083C38: .4byte gStringVar1 -_08083C3C: .4byte gLinkPlayers + 0x8 -_08083C40: .4byte gStringVar2 -_08083C44: .4byte gTrainerCardColorNames -_08083C48: - movs r0, 0 -_08083C4A: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8083BF4 - - thumb_func_start sub_8083C50 -sub_8083C50: @ 8083C50 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r5, r4, 0 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, _08083C98 @ =gTasks - adds r0, r1 - ldrh r1, [r0, 0x8] - adds r1, 0x1 - strh r1, [r0, 0x8] - lsls r1, 16 - movs r0, 0x96 - lsls r0, 17 - cmp r1, r0 - ble _08083C82 - bl CloseLink - ldr r0, _08083C9C @ =CB2_LinkError - bl SetMainCallback2 - adds r0, r4, 0 - bl DestroyTask -_08083C82: - ldr r0, _08083CA0 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - beq _08083C90 - adds r0, r5, 0 - bl DestroyTask -_08083C90: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08083C98: .4byte gTasks -_08083C9C: .4byte CB2_LinkError -_08083CA0: .4byte gReceivedRemoteLinkPlayers - thumb_func_end sub_8083C50 - - thumb_func_start sub_8083CA4 -sub_8083CA4: @ 8083CA4 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _08083CC4 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _08083CBC - bl EnableBothScriptContexts - adds r0, r4, 0 - bl DestroyTask -_08083CBC: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08083CC4: .4byte gReceivedRemoteLinkPlayers - thumb_func_end sub_8083CA4 - - thumb_func_start unref_sub_8083CC8 -unref_sub_8083CC8: @ 8083CC8 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl sub_800832C - ldr r1, _08083CE8 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _08083CEC @ =sub_8083CA4 - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08083CE8: .4byte gTasks -_08083CEC: .4byte sub_8083CA4 - thumb_func_end unref_sub_8083CC8 - - .align 2, 0 @ Don't pad with nop. diff --git a/include/cable_club.h b/include/cable_club.h index 9e6a703e3..e6ebec67f 100644 --- a/include/cable_club.h +++ b/include/cable_club.h @@ -3,20 +3,22 @@ #include "task.h" -void sub_8082D4C(); -void sub_8082D60(u8, u8); -u16 sub_8082D9C(u8, u8); -u32 sub_8082DF4(u8); -u32 sub_8082E28(u8); -u32 sub_8082EB8(u8); -void sub_8082FEC(u8 taskId); -void sub_80833C4(u8 taskId); -void sub_8083418(u8 taskId); -u8 sub_8083444(u8 taskId); -u8 sub_8083664(void); -void sub_8083A84(TaskFunc); -s32 sub_8083BF4(u8 id); -void sub_8083C50(u8); -void sub_8083188(u8 taskId); +void sub_808347C(u8 arg0); +void sub_80834E4(); +void sub_808350C(); +void sub_80835D8(); +void sub_8083614(); +void sub_808363C(); +u8 sub_8083664(); +void sub_8083820(); +void sub_80839A4(); +void sub_80839D0(); +void sub_8083A84(TaskFunc followupFunc); +void sub_8083B5C(); +void sub_8083B80(); +void sub_8083B90(); +void sub_8083BDC(); +s32 sub_8083BF4(u8 linkPlayerIndex); +void sub_8083C50(u8 taskId); #endif // GUARD_CABLE_CLUB_H diff --git a/ld_script.txt b/ld_script.txt index 4f3ff093d..c640ad5cc 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -128,9 +128,7 @@ SECTIONS { src/field_fadetransition.o(.text); src/field_screen_effect.o(.text); src/battle_setup.o(.text); - asm/cable_club.o(.text); src/cable_club.o(.text); - asm/cable_club.o(.text_80830E4); src/mori_debug_menu.o(.text); src/trainer_see.o(.text); src/wild_encounter.o(.text); diff --git a/src/cable_club.c b/src/cable_club.c index 20b087f4e..5ea91e3b9 100644 --- a/src/cable_club.c +++ b/src/cable_club.c @@ -1,30 +1,256 @@ #include "global.h" +#include "battle.h" +#include "battle_records.h" #include "cable_club.h" #include "field_message_box.h" +#include "field_weather.h" #include "link.h" +#include "load_save.h" +#include "m4a.h" #include "main.h" +#include "menu.h" +#include "palette.h" +#include "record_mixing.h" +#include "rom4.h" #include "script.h" +#include "script_pokemon_80C4.h" #include "songs.h" #include "sound.h" +#include "start_menu.h" #include "string_util.h" +#include "strings2.h" #include "task.h" #include "text.h" #include "trainer_card.h" extern u16 gScriptResult; extern struct TrainerCard gTrainerCards[4]; - extern u8 gUnknown_03004860; extern u8 gFieldLinkPlayerCount; - -extern u8 gUnknown_081A4932[]; +extern u16 gSpecialVar_0x8004; +extern u16 gSpecialVar_0x8005; +extern u16 gSpecialVar_0x8006; +extern u16 gBattleTypeFlags; +extern const u8 gUnknown_081A4932[]; extern const u8 gUnknown_081A4975[]; +extern const u8 gUnknown_081A49B6[]; +extern const u8 gUnknown_081A490C[]; +extern const u8* const gTrainerCardColorNames[]; +extern struct +{ + u8 field0; + u8 field1; +} gUnknown_020297D8; +static void sub_8082F20(u8 taskId); +static void sub_8082F68(u8 taskId); +static void sub_8082FEC(u8 taskId); +static void sub_808303C(u8 taskId); static void sub_80830E4(u8 taskId); +/*static*/ void sub_8083188(u8 taskId); /* When `sub_80830E4` matches, make this function static. */ static void sub_8083288(u8 taskId); static void sub_8083314(u8 taskId); +static void sub_80833C4(u8 taskId); +static void sub_80833EC(u8 taskId); +static void sub_8083418(u8 taskId); +static u8 sub_8083444(u8 taskId); +static void sub_808353C(u8 taskId); +static void sub_8083710(u8 taskId); +static void sub_8083760(u8 taskId); +static void sub_80837B4(u8 taskId); +static void sub_80837EC(u8 taskId); +static void sub_808382C(u8 taskId); +static void sub_8083958(); +static void sub_80839DC(u8 taskId); +static void sub_8083AAC(u8 taskId); +static void sub_8083B44(u8 taskId); +static void sub_8083B6C(); +static void sub_8083CA4(u8 taskId); + +extern void sub_80831F8(u8 taskId); +extern void call_map_music_set_to_zero(); +extern void sub_810FEFC(); +extern void sub_8047CD8(); +extern void sub_805559C(); +extern void sub_8055574(); +extern s32 sub_80554F8(); +extern void sub_805465C(); + +static void sub_8082CD4(u8 arg0, u8 arg1) +{ + if (FindTaskIdByFunc(sub_8082F20) == 0xFF) + { + u8 taskId = CreateTask(sub_8082F20, 0x50); + + gTasks[taskId].data[1] = arg0; + gTasks[taskId].data[2] = arg1; + } +} + +static void sub_8082D18(u32 value) +{ + ConvertIntToDecimalStringN(gStringVar1, value, 0, 1); + MenuDrawTextWindow(0x12, 0xA, 0x1C, 0xD); + sub_8072BD8(gOtherText_PLink, 0x13, 0xB, 0x48); +} + +static void sub_8082D4C() +{ + MenuZeroFillWindowRect(0x12, 0xA, 0x1C, 0xD); +} + +static void sub_8082D60(u8 taskId, u8 arg1) +{ + s16 *ptr = &gTasks[taskId].data[3]; + + if (arg1 != *ptr) + { + if (arg1 <= 1) + sub_8082D4C(); + else + sub_8082D18(arg1); + + *ptr = arg1; + } +} + +static u16 sub_8082D9C(u8 minPlayers, u8 maxPlayers) +{ + int playerCount; + + switch (GetLinkPlayerDataExchangeStatusTimed()) + { + case EXCHANGE_COMPLETE: + playerCount = GetLinkPlayerCount_2(); + if (minPlayers <= playerCount && playerCount <= maxPlayers) + return 1; + ConvertIntToDecimalStringN(gStringVar1, playerCount, 0, 1); + return 4; + case EXCHANGE_TIMED_OUT: + return 0; + case EXCHANGE_IN_PROGRESS: + return 3; + default: + return 0; + } +} + +static u32 sub_8082DF4(u8 taskId) +{ + if (HasLinkErrorOccurred() == TRUE) + { + gTasks[taskId].func = sub_8083418; + return 1; + } + return 0; +} + +static u32 sub_8082E28(u8 taskId) +{ + if ((gMain.newKeys & B_BUTTON) && + IsLinkConnectionEstablished() == 0) + { + gTasks[taskId].func = sub_80833EC; + return 1; + } + + return 0; +} + +static u32 sub_8082E6C(u8 taskId) +{ + if (IsLinkConnectionEstablished() != 0) + SetSuppressLinkErrorMessage(1); + + if ((gMain.newKeys & B_BUTTON) != 0) + { + gTasks[taskId].func = sub_80833EC; + return 1; + } + + return 0; +} + +static u32 sub_8082EB8(u8 taskId) +{ + if (GetSioMultiSI() == 1) + { + gTasks[taskId].func = sub_8083418; + return 1; + } + + return 0; +} + +void unref_sub_8082EEC(u8 taskId) +{ + gTasks[taskId].data[0] += 1; + + if (gTasks[taskId].data[0] == 0xA) + { + sub_8007E9C(2); + DestroyTask(taskId); + } +} + +static void sub_8082F20(u8 taskId) +{ + s16 *data = &gTasks[taskId].data[0]; + + if (*data == 0) + { + OpenLinkTimed(); + sub_80082EC(); + ResetLinkPlayers(); + } + else if (*data > 9) + gTasks[taskId].func = sub_8082F68; + + *data += 1; +} + +static void sub_8082F68(u8 taskId) +{ + u32 playerCount = GetLinkPlayerCount_2(); + + if (sub_8082E28(taskId) != 1 && + sub_8082E6C(taskId) != 1 && + playerCount > 1) + { + SetSuppressLinkErrorMessage(1); + gTasks[taskId].data[3] = 0; + + if (IsLinkMaster() == TRUE) + { + PlaySE(SE_PIN); + ShowFieldAutoScrollMessage(gUnknown_081A4932); + gTasks[taskId].func = sub_8082FEC; + } + else + { + PlaySE(SE_BOO); + ShowFieldAutoScrollMessage(gUnknown_081A49B6); + gTasks[taskId].func = sub_80831F8; + } + } +} + +static void sub_8082FEC(u8 taskId) +{ + if (sub_8082E28(taskId) != 1 && + sub_8082EB8(taskId) != 1 && + sub_8082DF4(taskId) != 1) + { + if (GetFieldMessageBoxMode() == 0) + { + gTasks[taskId].data[3] = 0; + gTasks[taskId].func = sub_808303C; + } + } +} -void sub_808303C(u8 taskId) { +static void sub_808303C(u8 taskId) +{ s32 linkPlayerCount; s16 *taskData; @@ -35,22 +261,16 @@ void sub_808303C(u8 taskId) { if (sub_8082E28(taskId) == 1 || sub_8082EB8(taskId) == 1 || sub_8082DF4(taskId) == 1) - { return; - } sub_8082D60(taskId, linkPlayerCount); if (!(gMain.newKeys & A_BUTTON)) - { return; - } #if ENGLISH if (linkPlayerCount < taskData[1]) - { return; - } sub_80081C8(linkPlayerCount); sub_8082D4C(); @@ -71,28 +291,26 @@ void sub_808303C(u8 taskId) { } #ifdef NONMATCHING -static void sub_80830E4(u8 taskId) { - if (sub_8082E28(taskId) == 1 || - sub_8082EB8(taskId) == 1 || - sub_8082DF4(taskId) == 1 || - GetFieldMessageBoxMode()) - { - return; - } - - if (sub_800820C() == GetLinkPlayerCount_2() && - !(gMain.heldKeys & B_BUTTON)) +// Matches, except for a strange register allocation (redundant r6 in the original). +static void sub_80830E4(u8 taskId) +{ + if (sub_8082E28(taskId) != 1 && + sub_8082EB8(taskId) != 1 && + sub_8082DF4(taskId) != 1 && + GetFieldMessageBoxMode() == 0) { - ShowFieldAutoScrollMessage(gUnknown_081A4932); - gTasks[taskId].func = sub_8082FEC; - return; - } - - if (gMain.heldKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - sub_8007F4C(); - gTasks[(u32) taskId].func = sub_8083188; + if (sub_800820C() != GetLinkPlayerCount_2() || + (gMain.heldKeys & B_BUTTON)) + { + ShowFieldAutoScrollMessage(gUnknown_081A4932); + gTasks[taskId].func = sub_8082FEC; + } + else if (gMain.heldKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + sub_8007F4C(); + gTasks[taskId].func = sub_8083188; + } } } #else @@ -174,19 +392,18 @@ _08083184: .4byte sub_8083188\n\ } #endif -void sub_8083188(u8 taskId) { +/* When the previous function matches, make this function static. */ +/*static*/ void sub_8083188(u8 taskId) +{ u8 local1, local2; u16 *result; local1 = gTasks[taskId].data[1]; local2 = gTasks[taskId].data[2]; - if (sub_8082DF4(taskId) == 1 || sub_8083444(taskId) == 1) - { return; - } if (GetLinkPlayerCount_2() != sub_800820C()) { @@ -197,12 +414,11 @@ void sub_8083188(u8 taskId) { result = &gScriptResult; *result = sub_8082D9C(local1, local2); if (*result) - { gTasks[taskId].func = sub_8083288; - } } -void sub_80831F8(u8 taskId) { +void sub_80831F8(u8 taskId) +{ u8 local1, local2; u16 *result; @@ -211,16 +427,12 @@ void sub_80831F8(u8 taskId) { if (sub_8082E28(taskId) == 1 || sub_8082DF4(taskId) == 1) - { return; - } result = &gScriptResult; *result = sub_8082D9C(local1, local2); if (*result == 0) - { return; - } if (*result == 3) @@ -239,11 +451,10 @@ void sub_80831F8(u8 taskId) { } } -static void sub_8083288(u8 taskId) { +static void sub_8083288(u8 taskId) +{ if (sub_8082DF4(taskId) == 1) - { return; - } if (gScriptResult == 3) { @@ -262,20 +473,16 @@ static void sub_8083288(u8 taskId) { } } -static void sub_8083314(u8 taskId) { +static void sub_8083314(u8 taskId) +{ u8 index; - struct TrainerCard *trainerCards; if (sub_8082DF4(taskId) == 1) - { return; - } if (GetBlockReceivedStatus() != sub_8008198()) - { return; - } index = 0; trainerCards = gTrainerCards; @@ -296,14 +503,12 @@ static void sub_8083314(u8 taskId) { u16 linkType; linkType = gLinkType; // FIXME: sub_8082D4C doesn't take any arguments - sub_8082D4C(0x00004411, linkType); + sub_8082D4C(0x4411, linkType); #elif GERMAN if (gLinkType != 0x4411) { if (gLinkType == 0x6601) - { deUnkValue2 = 1; - } } sub_8082D4C(); #endif @@ -315,3 +520,571 @@ static void sub_8083314(u8 taskId) { sub_800832C(); gTasks[taskId].func = sub_80833C4; } + +static void sub_80833C4(u8 taskId) +{ + if (gReceivedRemoteLinkPlayers == FALSE) + { + sub_8082D4C(); + EnableBothScriptContexts(); + DestroyTask(taskId); + } +} + +static void sub_80833EC(u8 taskId) +{ + gScriptResult = 5; + sub_8082D4C(); + HideFieldMessageBox(); + EnableBothScriptContexts(); + DestroyTask(taskId); +} + +static void sub_8083418(u8 taskId) +{ + gScriptResult = 6; + sub_8082D4C(); + HideFieldMessageBox(); + EnableBothScriptContexts(); + DestroyTask(taskId); +} + +static u8 sub_8083444(u8 taskId) +{ + gTasks[taskId].data[4]++; + if (gTasks[taskId].data[4] > 600) + { + gTasks[taskId].func = sub_8083418; + return 1; + } + + return 0; +} + +void sub_808347C(u8 arg0) +{ + u32 r3 = 2; + u32 r2 = 2; + + switch (gSpecialVar_0x8004) + { + case 1: + r3 = 2; + gLinkType = 0x2233; + break; + + case 2: + r3 = 2; + gLinkType = 0x2244; + break; + + case 5: + r3 = 4; + r2 = 4; + gLinkType = 0x2255; + break; + } + + sub_8082CD4(r3, r2); +} + +void sub_80834E4() +{ + gLinkType = 0x1133; + gBattleTypeFlags = 0; + sub_8082CD4(2, 2); +} + +void sub_808350C() +{ + gScriptResult = 0; + gLinkType = 0x3311; + gBattleTypeFlags = 0; + sub_8082CD4(2, 4); +} + +#ifdef NONMATCHING +/* Matches except for register allocation. */ +static void sub_808353C(u8 taskId) +{ + int playerCount; + int i; + + switch (gTasks[taskId].data[0]) + { + case 0: + if (gScriptResult == 1) + { + playerCount = GetLinkPlayerCount(); + for (i = 0; i < playerCount; i++) + { + if (gLinkPlayers[i].language == LANGUAGE_JAPANESE) + { + gScriptResult = 7; + sub_8008480(); + gTasks[taskId].data[0] = i; + return; + } + } + } + + EnableBothScriptContexts(); + DestroyTask(taskId); + break; + + case 1: + if (gReceivedRemoteLinkPlayers == FALSE) + { + EnableBothScriptContexts(); + DestroyTask(taskId); + } + break; + } +} +#else +__attribute__((naked)) +void sub_808353C(u8 taskId) { + asm(".syntax unified\n\ +sub_808353C: @ 808353C \n\ + push {r4,r5,lr} \n\ + lsls r0, 24 \n\ + lsrs r5, r0, 24 \n\ + ldr r1, _0808355C @ =gTasks \n\ + lsls r0, r5, 2 \n\ + adds r0, r5 \n\ + lsls r0, 3 \n\ + adds r0, r1 \n\ + movs r1, 0x8 \n\ + ldrsh r0, [r0, r1] \n\ + cmp r0, 0 \n\ + beq _08083560 \n\ + cmp r0, 0x1 \n\ + beq _080835BC \n\ + b _080835CE \n\ + .align 2, 0 \n\ +_0808355C: .4byte gTasks \n\ +_08083560: \n\ + ldr r0, _08083594 @ =gScriptResult \n\ + ldrh r0, [r0] \n\ + cmp r0, 0x1 \n\ + bne _08083586 \n\ + bl GetLinkPlayerCount \n\ + lsls r0, 24 \n\ + lsrs r0, 24 \n\ + movs r1, 0 \n\ + cmp r1, r0 \n\ + bge _08083586 \n\ + ldr r2, _08083598 @ =gLinkPlayers \n\ +_08083578: \n\ + ldrh r4, [r2, 0x1A] \n\ + cmp r4, 0x1 \n\ + beq _0808359C \n\ + adds r2, 0x1C \n\ + adds r1, 0x1 \n\ + cmp r1, r0 \n\ + blt _08083578 \n\ +_08083586: \n\ + bl EnableBothScriptContexts \n\ + adds r0, r5, 0 \n\ + bl DestroyTask \n\ + b _080835CE \n\ + .align 2, 0 \n\ +_08083594: .4byte gScriptResult \n\ +_08083598: .4byte gLinkPlayers \n\ +_0808359C: \n\ + ldr r1, _080835B4 @ =gScriptResult \n\ + movs r0, 0x7 \n\ + strh r0, [r1] \n\ + bl sub_8008480 \n\ + ldr r1, _080835B8 @ =gTasks \n\ + lsls r0, r5, 2 \n\ + adds r0, r5 \n\ + lsls r0, 3 \n\ + adds r0, r1 \n\ + strh r4, [r0, 0x8] \n\ + b _080835CE \n\ + .align 2, 0 \n\ +_080835B4: .4byte gScriptResult \n\ +_080835B8: .4byte gTasks \n\ +_080835BC: \n\ + ldr r0, _080835D4 @ =gReceivedRemoteLinkPlayers \n\ + ldrb r0, [r0] \n\ + cmp r0, 0 \n\ + bne _080835CE \n\ + bl EnableBothScriptContexts \n\ + adds r0, r5, 0 \n\ + bl DestroyTask \n\ +_080835CE: \n\ + pop {r4,r5} \n\ + pop {r0} \n\ + bx r0 \n\ + .align 2, 0 \n\ +_080835D4: .4byte gReceivedRemoteLinkPlayers \n\ + .syntax divided"); +} +#endif + +void sub_80835D8() +{ + int taskId = FindTaskIdByFunc(sub_808353C); + + if (taskId == 0xFF) + { + taskId = CreateTask(sub_808353C, 80); + gTasks[taskId].data[0] = 0; + } +} + +void sub_8083614() +{ + gLinkType = 0x4411; + gBattleTypeFlags = 0; + sub_8082CD4(2, 4); +} + +void sub_808363C() +{ + gLinkType = 0x6601; + gBattleTypeFlags = 0; + sub_8082CD4(4, 4); +} + +u8 sub_8083664() +{ + if (FuncIsActiveTask(sub_8083710) != FALSE) + return 0xFF; + + switch (gSpecialVar_0x8004 - 1) + { + case 0: + gLinkType = 0x2233; + break; + case 1: + gLinkType = 0x2244; + break; + case 4: + gLinkType = 0x2255; + break; + case 2: + gLinkType = 0x1111; + break; + case 3: + gLinkType = 0x3322; + break; + } + + return CreateTask(sub_8083710, 80); +} + +static void sub_8083710(u8 taskId) +{ + s16 *data = &gTasks[taskId].data[0]; + + if (*data == 0) + { + OpenLink(); + ResetLinkPlayers(); + CreateTask(sub_8083C50, 80); + } + else if (*data >= 10) + gTasks[taskId].func = sub_8083760; + + *data += 1; +} + +static void sub_8083760(u8 taskId) +{ + if (GetLinkPlayerCount_2() >= 2) + { + if (IsLinkMaster() == TRUE) + gTasks[taskId].func = sub_80837B4; + else + gTasks[taskId].func = sub_80837EC; + } +} + +static void sub_80837B4(u8 taskId) +{ + if (sub_800820C() == GetLinkPlayerCount_2()) + { + sub_8007F4C(); + gTasks[taskId].func = sub_80837EC; + } +} + +static void sub_80837EC(u8 taskId) +{ + if (gReceivedRemoteLinkPlayers == TRUE && + IsLinkPlayerDataExchangeComplete() == TRUE) + { + sub_800826C(); + sub_8007B14(); + DestroyTask(taskId); + } +} + +void sub_8083820() +{ + InitSaveDialog(); +} + +static void sub_808382C(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + fade_screen(1, 0); + gLinkType = 0x2211; + ClearLinkCallback_2(); + task->data[0]++; + break; + case 1: + if (!gPaletteFade.active) + task->data[0]++; + break; + case 2: + task->data[1]++; + if (task->data[1] > 20) + task->data[0]++; + break; + case 3: + sub_800832C(); + task->data[0]++; + break; + case 4: + if (!gReceivedRemoteLinkPlayers) + task->data[0]++; + break; + case 5: + if (gLinkPlayers[0].trainerId & 1) + current_map_music_set__default_for_battle(BGM_BATTLE32); + else + current_map_music_set__default_for_battle(BGM_BATTLE20); + + switch (gSpecialVar_0x8004) + { + case 1: + gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK; + break; + case 2: + gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK | BATTLE_TYPE_DOUBLE; + break; + case 5: + ReducePlayerPartyToThree(); + gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK | BATTLE_TYPE_DOUBLE | BATTLE_TYPE_MULTI; + break; + } + + SetMainCallback2(sub_800E7C4); + gMain.savedCallback = sub_8083958; + DestroyTask(taskId); + break; + } +} + +static void sub_8083958() +{ + call_map_music_set_to_zero(); + LoadPlayerParty(); + SavePlayerBag(); + sub_810FEFC(); + + if (gSpecialVar_0x8004 != 5) + UpdateLinkBattleRecords(gUnknown_03004860 ^ 1); + + gMain.savedCallback = sub_805465C; + SetMainCallback2(sub_8071B28); +} + +void sub_80839A4() +{ + u16 var = gSpecialVar_0x8004; + u16 varMinusOne = var - 1; + + if (varMinusOne < 2 || var == 5) + { + LoadPlayerParty(); + SavePlayerBag(); + } + + copy_saved_warp2_bank_and_enter_x_to_warp1(0x7F); +} + +void sub_80839D0() +{ + sub_805559C(); +} + +static void sub_80839DC(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + ShowFieldMessage(gUnknown_081A490C); + task->data[0] = 1; + break; + + case 1: + if (IsFieldMessageBoxHidden()) + { + sub_8055574(); + sub_8007270(gSpecialVar_0x8005); + task->data[0] = 2; + } + break; + + case 2: + switch (sub_80554F8()) + { + case 0: + break; + case 1: + HideFieldMessageBox(); + task->data[0] = 0; + SwitchTaskToFollowupFunc(taskId); + break; + case 2: + task->data[0] = 3; + break; + } + break; + + case 3: + sub_8055588(); + HideFieldMessageBox(); + MenuZeroFillScreen(); + DestroyTask(taskId); + EnableBothScriptContexts(); + break; + } +} + +void sub_8083A84(TaskFunc followupFunc) +{ + u8 taskId = CreateTask(sub_80839DC, 80); + SetTaskFuncWithFollowupFunc(taskId, sub_80839DC, followupFunc); + ScriptContext1_Stop(); +} + +static void sub_8083AAC(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + ScriptContext2_Enable(); + fade_screen(1, 0); + ClearLinkCallback_2(); + task->data[0]++; + break; + case 1: + if (!gPaletteFade.active) + task->data[0]++; + break; + case 2: + gUnknown_020297D8.field0 = 0; + gUnknown_020297D8.field1 = 0; + m4aMPlayAllStop(); + sub_800832C(); + task->data[0]++; + break; + case 3: + if (!gReceivedRemoteLinkPlayers) + { + SetMainCallback2(sub_8047CD8); + DestroyTask(taskId); + } + break; + } +} + +static void sub_8083B44(u8 taskId) +{ + sub_8083B6C(); + DestroyTask(taskId); +} + +void sub_8083B5C() +{ + sub_8083A84(sub_8083B44); +} + +static void sub_8083B6C() +{ + CreateTask(sub_8083AAC, 80); +} + +void sub_8083B80() +{ + sub_8083B6C(); + ScriptContext1_Stop(); +} + +void sub_8083B90() +{ + gLinkType = 0x2211; + sub_8083A84(sub_808382C); +} + +void unref_sub_8083BB0() +{ + u8 taskId = CreateTask(sub_80839DC, 80); + SetTaskFuncWithFollowupFunc(taskId, sub_80839DC, Task_RecordMixing_Main); + ScriptContext1_Stop(); +} + +void sub_8083BDC() +{ + sub_8093130(gSpecialVar_0x8006, c2_exit_to_overworld_1_continue_scripts_restart_music); +} + +s32 sub_8083BF4(u8 linkPlayerIndex) +{ + u32 trainerCardColorIndex; + + gSpecialVar_0x8006 = linkPlayerIndex; + StringCopy(gStringVar1, gLinkPlayers[linkPlayerIndex].name); + + trainerCardColorIndex = sub_80934C4(linkPlayerIndex); + if (trainerCardColorIndex == 0) + return 0; + + StringCopy(gStringVar2, gTrainerCardColorNames[trainerCardColorIndex - 1]); + return 1; +} + +void sub_8083C50(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + task->data[0]++; + if (task->data[0] > 300) + { + CloseLink(); + SetMainCallback2(CB2_LinkError); + DestroyTask(taskId); + } + + if (gReceivedRemoteLinkPlayers) + DestroyTask(taskId); +} + +static void sub_8083CA4(u8 taskId) +{ + if (!gReceivedRemoteLinkPlayers) + { + EnableBothScriptContexts(); + DestroyTask(taskId); + } +} + +void unref_sub_8083CC8(u8 taskId) +{ + sub_800832C(); + gTasks[taskId].func = sub_8083CA4; +} \ No newline at end of file -- cgit v1.2.3 From bc9258890480b0796ecb62eea4134a1d207cd091 Mon Sep 17 00:00:00 2001 From: Henrique Lorenzi Date: Fri, 8 Sep 2017 14:09:34 -0300 Subject: make zero-parameter functions `(void)` --- include/cable_club.h | 26 +++++++++++++------------- src/cable_club.c | 50 +++++++++++++++++++++++++------------------------- 2 files changed, 38 insertions(+), 38 deletions(-) diff --git a/include/cable_club.h b/include/cable_club.h index e6ebec67f..54db83721 100644 --- a/include/cable_club.h +++ b/include/cable_club.h @@ -4,20 +4,20 @@ #include "task.h" void sub_808347C(u8 arg0); -void sub_80834E4(); -void sub_808350C(); -void sub_80835D8(); -void sub_8083614(); -void sub_808363C(); -u8 sub_8083664(); -void sub_8083820(); -void sub_80839A4(); -void sub_80839D0(); +void sub_80834E4(void); +void sub_808350C(void); +void sub_80835D8(void); +void sub_8083614(void); +void sub_808363C(void); +u8 sub_8083664(void); +void sub_8083820(void); +void sub_80839A4(void); +void sub_80839D0(void); void sub_8083A84(TaskFunc followupFunc); -void sub_8083B5C(); -void sub_8083B80(); -void sub_8083B90(); -void sub_8083BDC(); +void sub_8083B5C(void); +void sub_8083B80(void); +void sub_8083B90(void); +void sub_8083BDC(void); s32 sub_8083BF4(u8 linkPlayerIndex); void sub_8083C50(u8 taskId); diff --git a/src/cable_club.c b/src/cable_club.c index 5ea91e3b9..d93ca5045 100644 --- a/src/cable_club.c +++ b/src/cable_club.c @@ -60,21 +60,21 @@ static void sub_8083760(u8 taskId); static void sub_80837B4(u8 taskId); static void sub_80837EC(u8 taskId); static void sub_808382C(u8 taskId); -static void sub_8083958(); +static void sub_8083958(void); static void sub_80839DC(u8 taskId); static void sub_8083AAC(u8 taskId); static void sub_8083B44(u8 taskId); -static void sub_8083B6C(); +static void sub_8083B6C(void); static void sub_8083CA4(u8 taskId); extern void sub_80831F8(u8 taskId); -extern void call_map_music_set_to_zero(); -extern void sub_810FEFC(); -extern void sub_8047CD8(); -extern void sub_805559C(); -extern void sub_8055574(); -extern s32 sub_80554F8(); -extern void sub_805465C(); +extern void call_map_music_set_to_zero(void); +extern void sub_810FEFC(void); +extern void sub_8047CD8(void); +extern void sub_805559C(void); +extern void sub_8055574(void); +extern s32 sub_80554F8(void); +extern void sub_805465C(void); static void sub_8082CD4(u8 arg0, u8 arg1) { @@ -588,14 +588,14 @@ void sub_808347C(u8 arg0) sub_8082CD4(r3, r2); } -void sub_80834E4() +void sub_80834E4(void) { gLinkType = 0x1133; gBattleTypeFlags = 0; sub_8082CD4(2, 2); } -void sub_808350C() +void sub_808350C(void) { gScriptResult = 0; gLinkType = 0x3311; @@ -724,7 +724,7 @@ _080835D4: .4byte gReceivedRemoteLinkPlayers \n\ } #endif -void sub_80835D8() +void sub_80835D8(void) { int taskId = FindTaskIdByFunc(sub_808353C); @@ -735,21 +735,21 @@ void sub_80835D8() } } -void sub_8083614() +void sub_8083614(void) { gLinkType = 0x4411; gBattleTypeFlags = 0; sub_8082CD4(2, 4); } -void sub_808363C() +void sub_808363C(void) { gLinkType = 0x6601; gBattleTypeFlags = 0; sub_8082CD4(4, 4); } -u8 sub_8083664() +u8 sub_8083664(void) { if (FuncIsActiveTask(sub_8083710) != FALSE) return 0xFF; @@ -823,7 +823,7 @@ static void sub_80837EC(u8 taskId) } } -void sub_8083820() +void sub_8083820(void) { InitSaveDialog(); } @@ -884,7 +884,7 @@ static void sub_808382C(u8 taskId) } } -static void sub_8083958() +static void sub_8083958(void) { call_map_music_set_to_zero(); LoadPlayerParty(); @@ -898,7 +898,7 @@ static void sub_8083958() SetMainCallback2(sub_8071B28); } -void sub_80839A4() +void sub_80839A4(void) { u16 var = gSpecialVar_0x8004; u16 varMinusOne = var - 1; @@ -912,7 +912,7 @@ void sub_80839A4() copy_saved_warp2_bank_and_enter_x_to_warp1(0x7F); } -void sub_80839D0() +void sub_80839D0(void) { sub_805559C(); } @@ -1009,36 +1009,36 @@ static void sub_8083B44(u8 taskId) DestroyTask(taskId); } -void sub_8083B5C() +void sub_8083B5C(void) { sub_8083A84(sub_8083B44); } -static void sub_8083B6C() +static void sub_8083B6C(void) { CreateTask(sub_8083AAC, 80); } -void sub_8083B80() +void sub_8083B80(void) { sub_8083B6C(); ScriptContext1_Stop(); } -void sub_8083B90() +void sub_8083B90(void) { gLinkType = 0x2211; sub_8083A84(sub_808382C); } -void unref_sub_8083BB0() +void unref_sub_8083BB0(void) { u8 taskId = CreateTask(sub_80839DC, 80); SetTaskFuncWithFollowupFunc(taskId, sub_80839DC, Task_RecordMixing_Main); ScriptContext1_Stop(); } -void sub_8083BDC() +void sub_8083BDC(void) { sub_8093130(gSpecialVar_0x8006, c2_exit_to_overworld_1_continue_scripts_restart_music); } -- cgit v1.2.3 From 626f4af51d270f8fd6d162990608527f6441cbb9 Mon Sep 17 00:00:00 2001 From: Henrique Lorenzi Date: Fri, 8 Sep 2017 14:35:42 -0300 Subject: match sub_808353C --- src/cable_club.c | 90 ++------------------------------------------------------ 1 file changed, 2 insertions(+), 88 deletions(-) diff --git a/src/cable_club.c b/src/cable_club.c index d93ca5045..efec19eb7 100644 --- a/src/cable_club.c +++ b/src/cable_club.c @@ -603,13 +603,11 @@ void sub_808350C(void) sub_8082CD4(2, 4); } -#ifdef NONMATCHING -/* Matches except for register allocation. */ static void sub_808353C(u8 taskId) { int playerCount; int i; - + switch (gTasks[taskId].data[0]) { case 0: @@ -622,16 +620,14 @@ static void sub_808353C(u8 taskId) { gScriptResult = 7; sub_8008480(); - gTasks[taskId].data[0] = i; + gTasks[taskId].data[0] = 1; return; } } } - EnableBothScriptContexts(); DestroyTask(taskId); break; - case 1: if (gReceivedRemoteLinkPlayers == FALSE) { @@ -641,88 +637,6 @@ static void sub_808353C(u8 taskId) break; } } -#else -__attribute__((naked)) -void sub_808353C(u8 taskId) { - asm(".syntax unified\n\ -sub_808353C: @ 808353C \n\ - push {r4,r5,lr} \n\ - lsls r0, 24 \n\ - lsrs r5, r0, 24 \n\ - ldr r1, _0808355C @ =gTasks \n\ - lsls r0, r5, 2 \n\ - adds r0, r5 \n\ - lsls r0, 3 \n\ - adds r0, r1 \n\ - movs r1, 0x8 \n\ - ldrsh r0, [r0, r1] \n\ - cmp r0, 0 \n\ - beq _08083560 \n\ - cmp r0, 0x1 \n\ - beq _080835BC \n\ - b _080835CE \n\ - .align 2, 0 \n\ -_0808355C: .4byte gTasks \n\ -_08083560: \n\ - ldr r0, _08083594 @ =gScriptResult \n\ - ldrh r0, [r0] \n\ - cmp r0, 0x1 \n\ - bne _08083586 \n\ - bl GetLinkPlayerCount \n\ - lsls r0, 24 \n\ - lsrs r0, 24 \n\ - movs r1, 0 \n\ - cmp r1, r0 \n\ - bge _08083586 \n\ - ldr r2, _08083598 @ =gLinkPlayers \n\ -_08083578: \n\ - ldrh r4, [r2, 0x1A] \n\ - cmp r4, 0x1 \n\ - beq _0808359C \n\ - adds r2, 0x1C \n\ - adds r1, 0x1 \n\ - cmp r1, r0 \n\ - blt _08083578 \n\ -_08083586: \n\ - bl EnableBothScriptContexts \n\ - adds r0, r5, 0 \n\ - bl DestroyTask \n\ - b _080835CE \n\ - .align 2, 0 \n\ -_08083594: .4byte gScriptResult \n\ -_08083598: .4byte gLinkPlayers \n\ -_0808359C: \n\ - ldr r1, _080835B4 @ =gScriptResult \n\ - movs r0, 0x7 \n\ - strh r0, [r1] \n\ - bl sub_8008480 \n\ - ldr r1, _080835B8 @ =gTasks \n\ - lsls r0, r5, 2 \n\ - adds r0, r5 \n\ - lsls r0, 3 \n\ - adds r0, r1 \n\ - strh r4, [r0, 0x8] \n\ - b _080835CE \n\ - .align 2, 0 \n\ -_080835B4: .4byte gScriptResult \n\ -_080835B8: .4byte gTasks \n\ -_080835BC: \n\ - ldr r0, _080835D4 @ =gReceivedRemoteLinkPlayers \n\ - ldrb r0, [r0] \n\ - cmp r0, 0 \n\ - bne _080835CE \n\ - bl EnableBothScriptContexts \n\ - adds r0, r5, 0 \n\ - bl DestroyTask \n\ -_080835CE: \n\ - pop {r4,r5} \n\ - pop {r0} \n\ - bx r0 \n\ - .align 2, 0 \n\ -_080835D4: .4byte gReceivedRemoteLinkPlayers \n\ - .syntax divided"); -} -#endif void sub_80835D8(void) { -- cgit v1.2.3 From bfa24e80d4d97330db9d05f8ad898965bae1fdae Mon Sep 17 00:00:00 2001 From: Henrique Lorenzi Date: Fri, 8 Sep 2017 14:45:40 -0300 Subject: match sub_80830E4 --- src/cable_club.c | 93 +++++--------------------------------------------------- 1 file changed, 8 insertions(+), 85 deletions(-) diff --git a/src/cable_club.c b/src/cable_club.c index efec19eb7..849b5221a 100644 --- a/src/cable_club.c +++ b/src/cable_club.c @@ -47,7 +47,7 @@ static void sub_8082F68(u8 taskId); static void sub_8082FEC(u8 taskId); static void sub_808303C(u8 taskId); static void sub_80830E4(u8 taskId); -/*static*/ void sub_8083188(u8 taskId); /* When `sub_80830E4` matches, make this function static. */ +static void sub_8083188(u8 taskId); static void sub_8083288(u8 taskId); static void sub_8083314(u8 taskId); static void sub_80833C4(u8 taskId); @@ -290,8 +290,6 @@ static void sub_808303C(u8 taskId) #endif } -#ifdef NONMATCHING -// Matches, except for a strange register allocation (redundant r6 in the original). static void sub_80830E4(u8 taskId) { if (sub_8082E28(taskId) != 1 && @@ -299,8 +297,12 @@ static void sub_80830E4(u8 taskId) sub_8082DF4(taskId) != 1 && GetFieldMessageBoxMode() == 0) { - if (sub_800820C() != GetLinkPlayerCount_2() || - (gMain.heldKeys & B_BUTTON)) + if (sub_800820C() != GetLinkPlayerCount_2()) + { + ShowFieldAutoScrollMessage(gUnknown_081A4932); + gTasks[taskId].func = sub_8082FEC; + } + else if (gMain.heldKeys & B_BUTTON) { ShowFieldAutoScrollMessage(gUnknown_081A4932); gTasks[taskId].func = sub_8082FEC; @@ -313,87 +315,8 @@ static void sub_80830E4(u8 taskId) } } } -#else -__attribute__((naked)) -static void sub_80830E4(u8 taskId) { - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - adds r6, r5, 0\n\ - adds r0, r5, 0\n\ - bl sub_8082E28\n\ - cmp r0, 0x1\n\ - beq _08083178\n\ - adds r0, r5, 0\n\ - bl sub_8082EB8\n\ - cmp r0, 0x1\n\ - beq _08083178\n\ - adds r0, r5, 0\n\ - bl sub_8082DF4\n\ - cmp r0, 0x1\n\ - beq _08083178\n\ - bl GetFieldMessageBoxMode\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _08083178\n\ - bl sub_800820C\n\ - adds r4, r0, 0\n\ - bl GetLinkPlayerCount_2\n\ - lsls r4, 24\n\ - lsls r0, 24\n\ - cmp r4, r0\n\ - bne _08083132\n\ - ldr r0, _08083148 @ =gMain\n\ - ldrh r1, [r0, 0x2C]\n\ - movs r0, 0x2\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08083158\n\ -_08083132:\n\ - ldr r0, _0808314C @ =gUnknown_081A4932\n\ - bl ShowFieldAutoScrollMessage\n\ - ldr r1, _08083150 @ =gTasks\n\ - lsls r0, r5, 2\n\ - adds r0, r5\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - ldr r1, _08083154 @ =sub_8082FEC\n\ - str r1, [r0]\n\ - b _08083178\n\ - .align 2, 0\n\ -_08083148: .4byte gMain\n\ -_0808314C: .4byte gUnknown_081A4932\n\ -_08083150: .4byte gTasks\n\ -_08083154: .4byte sub_8082FEC\n\ -_08083158:\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08083178\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - bl sub_8007F4C\n\ - ldr r0, _08083180 @ =gTasks\n\ - lsls r1, r6, 2\n\ - adds r1, r6\n\ - lsls r1, 3\n\ - adds r1, r0\n\ - ldr r0, _08083184 @ =sub_8083188\n\ - str r0, [r1]\n\ -_08083178:\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_08083180: .4byte gTasks\n\ -_08083184: .4byte sub_8083188\n\ - .syntax divided\n"); -} -#endif -/* When the previous function matches, make this function static. */ -/*static*/ void sub_8083188(u8 taskId) +static void sub_8083188(u8 taskId) { u8 local1, local2; u16 *result; -- cgit v1.2.3 From ef8be24b9dd2330ce417ac173b1c599640866d19 Mon Sep 17 00:00:00 2001 From: Henrique Lorenzi Date: Fri, 8 Sep 2017 15:30:38 -0300 Subject: fix formatting; use bool defines --- include/cable_club.h | 2 +- src/cable_club.c | 154 ++++++++++++++++++++++++++++++--------------------- 2 files changed, 91 insertions(+), 65 deletions(-) diff --git a/include/cable_club.h b/include/cable_club.h index 54db83721..a2fe46b30 100644 --- a/include/cable_club.h +++ b/include/cable_club.h @@ -18,7 +18,7 @@ void sub_8083B5C(void); void sub_8083B80(void); void sub_8083B90(void); void sub_8083BDC(void); -s32 sub_8083BF4(u8 linkPlayerIndex); +bool32 sub_8083BF4(u8 linkPlayerIndex); void sub_8083C50(u8 taskId); #endif // GUARD_CABLE_CLUB_H diff --git a/src/cable_club.c b/src/cable_club.c index 849b5221a..148f36eb7 100644 --- a/src/cable_club.c +++ b/src/cable_club.c @@ -53,7 +53,7 @@ static void sub_8083314(u8 taskId); static void sub_80833C4(u8 taskId); static void sub_80833EC(u8 taskId); static void sub_8083418(u8 taskId); -static u8 sub_8083444(u8 taskId); +static bool8 sub_8083444(u8 taskId); static void sub_808353C(u8 taskId); static void sub_8083710(u8 taskId); static void sub_8083760(u8 taskId); @@ -80,7 +80,7 @@ static void sub_8082CD4(u8 arg0, u8 arg1) { if (FindTaskIdByFunc(sub_8082F20) == 0xFF) { - u8 taskId = CreateTask(sub_8082F20, 0x50); + u8 taskId = CreateTask(sub_8082F20, 80); gTasks[taskId].data[1] = arg0; gTasks[taskId].data[2] = arg1; @@ -89,28 +89,28 @@ static void sub_8082CD4(u8 arg0, u8 arg1) static void sub_8082D18(u32 value) { - ConvertIntToDecimalStringN(gStringVar1, value, 0, 1); - MenuDrawTextWindow(0x12, 0xA, 0x1C, 0xD); - sub_8072BD8(gOtherText_PLink, 0x13, 0xB, 0x48); + ConvertIntToDecimalStringN(gStringVar1, value, STR_CONV_MODE_LEFT_ALIGN, 1); + MenuDrawTextWindow(18, 10, 28, 13); + sub_8072BD8(gOtherText_PLink, 19, 11, 72); } static void sub_8082D4C() { - MenuZeroFillWindowRect(0x12, 0xA, 0x1C, 0xD); + MenuZeroFillWindowRect(18, 10, 28, 13); } static void sub_8082D60(u8 taskId, u8 arg1) { - s16 *ptr = &gTasks[taskId].data[3]; + s16 *data = &gTasks[taskId].data[3]; - if (arg1 != *ptr) + if (arg1 != *data) { if (arg1 <= 1) sub_8082D4C(); else sub_8082D18(arg1); - *ptr = arg1; + *data = arg1; } } @@ -124,69 +124,73 @@ static u16 sub_8082D9C(u8 minPlayers, u8 maxPlayers) playerCount = GetLinkPlayerCount_2(); if (minPlayers <= playerCount && playerCount <= maxPlayers) return 1; - ConvertIntToDecimalStringN(gStringVar1, playerCount, 0, 1); + + ConvertIntToDecimalStringN(gStringVar1, playerCount, STR_CONV_MODE_LEFT_ALIGN, 1); return 4; + case EXCHANGE_TIMED_OUT: return 0; + case EXCHANGE_IN_PROGRESS: return 3; + default: return 0; } } -static u32 sub_8082DF4(u8 taskId) +static bool32 sub_8082DF4(u8 taskId) { if (HasLinkErrorOccurred() == TRUE) { gTasks[taskId].func = sub_8083418; - return 1; + return TRUE; } - return 0; + + return FALSE; } -static u32 sub_8082E28(u8 taskId) +static bool32 sub_8082E28(u8 taskId) { if ((gMain.newKeys & B_BUTTON) && - IsLinkConnectionEstablished() == 0) + IsLinkConnectionEstablished() == FALSE) { gTasks[taskId].func = sub_80833EC; - return 1; + return TRUE; } - return 0; + return FALSE; } -static u32 sub_8082E6C(u8 taskId) +static bool32 sub_8082E6C(u8 taskId) { - if (IsLinkConnectionEstablished() != 0) - SetSuppressLinkErrorMessage(1); + if (IsLinkConnectionEstablished()) + SetSuppressLinkErrorMessage(TRUE); - if ((gMain.newKeys & B_BUTTON) != 0) + if (gMain.newKeys & B_BUTTON) { gTasks[taskId].func = sub_80833EC; - return 1; + return TRUE; } - return 0; + return FALSE; } -static u32 sub_8082EB8(u8 taskId) +static bool32 sub_8082EB8(u8 taskId) { if (GetSioMultiSI() == 1) { gTasks[taskId].func = sub_8083418; - return 1; + return TRUE; } - return 0; + return FALSE; } void unref_sub_8082EEC(u8 taskId) { - gTasks[taskId].data[0] += 1; - - if (gTasks[taskId].data[0] == 0xA) + gTasks[taskId].data[0]++; + if (gTasks[taskId].data[0] == 10) { sub_8007E9C(2); DestroyTask(taskId); @@ -213,11 +217,11 @@ static void sub_8082F68(u8 taskId) { u32 playerCount = GetLinkPlayerCount_2(); - if (sub_8082E28(taskId) != 1 && - sub_8082E6C(taskId) != 1 && + if (sub_8082E28(taskId) != TRUE && + sub_8082E6C(taskId) != TRUE && playerCount > 1) { - SetSuppressLinkErrorMessage(1); + SetSuppressLinkErrorMessage(TRUE); gTasks[taskId].data[3] = 0; if (IsLinkMaster() == TRUE) @@ -237,11 +241,11 @@ static void sub_8082F68(u8 taskId) static void sub_8082FEC(u8 taskId) { - if (sub_8082E28(taskId) != 1 && - sub_8082EB8(taskId) != 1 && - sub_8082DF4(taskId) != 1) + if (sub_8082E28(taskId) != TRUE && + sub_8082EB8(taskId) != TRUE && + sub_8082DF4(taskId) != TRUE) { - if (GetFieldMessageBoxMode() == 0) + if (GetFieldMessageBoxMode() == FIELD_MESSAGE_BOX_HIDDEN) { gTasks[taskId].data[3] = 0; gTasks[taskId].func = sub_808303C; @@ -258,9 +262,9 @@ static void sub_808303C(u8 taskId) linkPlayerCount = GetLinkPlayerCount_2(); - if (sub_8082E28(taskId) == 1 || - sub_8082EB8(taskId) == 1 || - sub_8082DF4(taskId) == 1) + if (sub_8082E28(taskId) == TRUE || + sub_8082EB8(taskId) == TRUE || + sub_8082DF4(taskId) == TRUE) return; sub_8082D60(taskId, linkPlayerCount); @@ -274,17 +278,17 @@ static void sub_808303C(u8 taskId) sub_80081C8(linkPlayerCount); sub_8082D4C(); - ConvertIntToDecimalStringN(gStringVar1, linkPlayerCount, STR_CONV_MODE_LEFT_ALIGN, 1); // r5 - ShowFieldAutoScrollMessage((u8 *) gUnknown_081A4975); + ConvertIntToDecimalStringN(gStringVar1, linkPlayerCount, STR_CONV_MODE_LEFT_ALIGN, 1); + ShowFieldAutoScrollMessage((u8 *)gUnknown_081A4975); gTasks[taskId].func = sub_80830E4; #elif GERMAN - if ((gLinkType == 0x2255 && (u32) linkPlayerCount > 1) || + if ((gLinkType == 0x2255 && (u32)linkPlayerCount > 1) || (gLinkType != 0x2255 && taskData[1] <= linkPlayerCount)) { sub_80081C8(linkPlayerCount); sub_8082D4C(); - ConvertIntToDecimalStringN(gStringVar1, linkPlayerCount, STR_CONV_MODE_LEFT_ALIGN, 1); // r5 - ShowFieldAutoScrollMessage((u8 *) gUnknown_081A4975); + ConvertIntToDecimalStringN(gStringVar1, linkPlayerCount, STR_CONV_MODE_LEFT_ALIGN, 1); + ShowFieldAutoScrollMessage((u8 *)gUnknown_081A4975); gTasks[taskId].func = sub_80830E4; } #endif @@ -292,10 +296,10 @@ static void sub_808303C(u8 taskId) static void sub_80830E4(u8 taskId) { - if (sub_8082E28(taskId) != 1 && - sub_8082EB8(taskId) != 1 && - sub_8082DF4(taskId) != 1 && - GetFieldMessageBoxMode() == 0) + if (sub_8082E28(taskId) != TRUE && + sub_8082EB8(taskId) != TRUE && + sub_8082DF4(taskId) != TRUE && + GetFieldMessageBoxMode() == FIELD_MESSAGE_BOX_HIDDEN) { if (sub_800820C() != GetLinkPlayerCount_2()) { @@ -324,8 +328,8 @@ static void sub_8083188(u8 taskId) local1 = gTasks[taskId].data[1]; local2 = gTasks[taskId].data[2]; - if (sub_8082DF4(taskId) == 1 || - sub_8083444(taskId) == 1) + if (sub_8082DF4(taskId) == TRUE || + sub_8083444(taskId) == TRUE) return; if (GetLinkPlayerCount_2() != sub_800820C()) @@ -348,16 +352,15 @@ void sub_80831F8(u8 taskId) local1 = gTasks[taskId].data[1]; local2 = gTasks[taskId].data[2]; - if (sub_8082E28(taskId) == 1 || - sub_8082DF4(taskId) == 1) + if (sub_8082E28(taskId) == TRUE || + sub_8082DF4(taskId) == TRUE) return; result = &gScriptResult; *result = sub_8082D9C(local1, local2); if (*result == 0) return; - - + if (*result == 3) { sub_800832C(); @@ -369,14 +372,14 @@ void sub_80831F8(u8 taskId) gFieldLinkPlayerCount = GetLinkPlayerCount_2(); gUnknown_03004860 = GetMultiplayerId(); sub_80081C8(gFieldLinkPlayerCount); - sub_8093390((struct TrainerCard *) gBlockSendBuffer); + sub_8093390((struct TrainerCard *)gBlockSendBuffer); gTasks[taskId].func = sub_8083314; } } static void sub_8083288(u8 taskId) { - if (sub_8082DF4(taskId) == 1) + if (sub_8082DF4(taskId) == TRUE) return; if (gScriptResult == 3) @@ -390,7 +393,7 @@ static void sub_8083288(u8 taskId) gFieldLinkPlayerCount = GetLinkPlayerCount_2(); gUnknown_03004860 = GetMultiplayerId(); sub_80081C8(gFieldLinkPlayerCount); - sub_8093390((struct TrainerCard *) gBlockSendBuffer); + sub_8093390((struct TrainerCard *)gBlockSendBuffer); gTasks[taskId].func = sub_8083314; sub_8007E9C(2); } @@ -401,7 +404,7 @@ static void sub_8083314(u8 taskId) u8 index; struct TrainerCard *trainerCards; - if (sub_8082DF4(taskId) == 1) + if (sub_8082DF4(taskId) == TRUE) return; if (GetBlockReceivedStatus() != sub_8008198()) @@ -472,16 +475,16 @@ static void sub_8083418(u8 taskId) DestroyTask(taskId); } -static u8 sub_8083444(u8 taskId) +static bool8 sub_8083444(u8 taskId) { gTasks[taskId].data[4]++; if (gTasks[taskId].data[4] > 600) { gTasks[taskId].func = sub_8083418; - return 1; + return TRUE; } - return 0; + return FALSE; } void sub_808347C(u8 arg0) @@ -548,9 +551,11 @@ static void sub_808353C(u8 taskId) } } } + EnableBothScriptContexts(); DestroyTask(taskId); break; + case 1: if (gReceivedRemoteLinkPlayers == FALSE) { @@ -596,15 +601,19 @@ u8 sub_8083664(void) case 0: gLinkType = 0x2233; break; + case 1: gLinkType = 0x2244; break; + case 4: gLinkType = 0x2255; break; + case 2: gLinkType = 0x1111; break; + case 3: gLinkType = 0x3322; break; @@ -677,23 +686,31 @@ static void sub_808382C(u8 taskId) ClearLinkCallback_2(); task->data[0]++; break; + case 1: if (!gPaletteFade.active) task->data[0]++; + break; + case 2: task->data[1]++; if (task->data[1] > 20) task->data[0]++; + break; + case 3: sub_800832C(); task->data[0]++; break; + case 4: if (!gReceivedRemoteLinkPlayers) task->data[0]++; + break; + case 5: if (gLinkPlayers[0].trainerId & 1) current_map_music_set__default_for_battle(BGM_BATTLE32); @@ -705,9 +722,11 @@ static void sub_808382C(u8 taskId) case 1: gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK; break; + case 2: gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK | BATTLE_TYPE_DOUBLE; break; + case 5: ReducePlayerPartyToThree(); gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK | BATTLE_TYPE_DOUBLE | BATTLE_TYPE_MULTI; @@ -779,11 +798,13 @@ static void sub_80839DC(u8 taskId) { case 0: break; + case 1: HideFieldMessageBox(); task->data[0] = 0; SwitchTaskToFollowupFunc(taskId); break; + case 2: task->data[0] = 3; break; @@ -819,10 +840,13 @@ static void sub_8083AAC(u8 taskId) ClearLinkCallback_2(); task->data[0]++; break; + case 1: if (!gPaletteFade.active) task->data[0]++; + break; + case 2: gUnknown_020297D8.field0 = 0; gUnknown_020297D8.field1 = 0; @@ -830,12 +854,14 @@ static void sub_8083AAC(u8 taskId) sub_800832C(); task->data[0]++; break; + case 3: if (!gReceivedRemoteLinkPlayers) { SetMainCallback2(sub_8047CD8); DestroyTask(taskId); } + break; } } @@ -880,7 +906,7 @@ void sub_8083BDC(void) sub_8093130(gSpecialVar_0x8006, c2_exit_to_overworld_1_continue_scripts_restart_music); } -s32 sub_8083BF4(u8 linkPlayerIndex) +bool32 sub_8083BF4(u8 linkPlayerIndex) { u32 trainerCardColorIndex; @@ -889,10 +915,10 @@ s32 sub_8083BF4(u8 linkPlayerIndex) trainerCardColorIndex = sub_80934C4(linkPlayerIndex); if (trainerCardColorIndex == 0) - return 0; + return FALSE; StringCopy(gStringVar2, gTrainerCardColorNames[trainerCardColorIndex - 1]); - return 1; + return TRUE; } void sub_8083C50(u8 taskId) -- cgit v1.2.3 From a6811cb0890dfd9eedb22b714e13d894f95b3f42 Mon Sep 17 00:00:00 2001 From: Henrique Lorenzi Date: Fri, 8 Sep 2017 16:46:30 -0300 Subject: fix formatting; improve some code (from camthesaxman) --- src/cable_club.c | 248 ++++++++++++++++++++++--------------------------------- 1 file changed, 100 insertions(+), 148 deletions(-) diff --git a/src/cable_club.c b/src/cable_club.c index 148f36eb7..b81905cc5 100644 --- a/src/cable_club.c +++ b/src/cable_club.c @@ -81,7 +81,7 @@ static void sub_8082CD4(u8 arg0, u8 arg1) if (FindTaskIdByFunc(sub_8082F20) == 0xFF) { u8 taskId = CreateTask(sub_8082F20, 80); - + gTasks[taskId].data[1] = arg0; gTasks[taskId].data[2] = arg1; } @@ -109,12 +109,11 @@ static void sub_8082D60(u8 taskId, u8 arg1) sub_8082D4C(); else sub_8082D18(arg1); - *data = arg1; } } -static u16 sub_8082D9C(u8 minPlayers, u8 maxPlayers) +static u32 sub_8082D9C(u8 minPlayers, u8 maxPlayers) { int playerCount; @@ -124,16 +123,12 @@ static u16 sub_8082D9C(u8 minPlayers, u8 maxPlayers) playerCount = GetLinkPlayerCount_2(); if (minPlayers <= playerCount && playerCount <= maxPlayers) return 1; - ConvertIntToDecimalStringN(gStringVar1, playerCount, STR_CONV_MODE_LEFT_ALIGN, 1); return 4; - case EXCHANGE_TIMED_OUT: return 0; - case EXCHANGE_IN_PROGRESS: return 3; - default: return 0; } @@ -146,19 +141,17 @@ static bool32 sub_8082DF4(u8 taskId) gTasks[taskId].func = sub_8083418; return TRUE; } - return FALSE; } static bool32 sub_8082E28(u8 taskId) { - if ((gMain.newKeys & B_BUTTON) && - IsLinkConnectionEstablished() == FALSE) + if ((gMain.newKeys & B_BUTTON) + && IsLinkConnectionEstablished() == FALSE) { gTasks[taskId].func = sub_80833EC; return TRUE; } - return FALSE; } @@ -166,13 +159,12 @@ static bool32 sub_8082E6C(u8 taskId) { if (IsLinkConnectionEstablished()) SetSuppressLinkErrorMessage(TRUE); - + if (gMain.newKeys & B_BUTTON) { gTasks[taskId].func = sub_80833EC; return TRUE; } - return FALSE; } @@ -183,7 +175,6 @@ static bool32 sub_8082EB8(u8 taskId) gTasks[taskId].func = sub_8083418; return TRUE; } - return FALSE; } @@ -199,72 +190,68 @@ void unref_sub_8082EEC(u8 taskId) static void sub_8082F20(u8 taskId) { - s16 *data = &gTasks[taskId].data[0]; - - if (*data == 0) + s16 *data = gTasks[taskId].data; + + if (data[0] == 0) { OpenLinkTimed(); sub_80082EC(); ResetLinkPlayers(); } - else if (*data > 9) + else if (data[0] > 9) + { gTasks[taskId].func = sub_8082F68; - - *data += 1; + } + data[0]++; } static void sub_8082F68(u8 taskId) { u32 playerCount = GetLinkPlayerCount_2(); - - if (sub_8082E28(taskId) != TRUE && - sub_8082E6C(taskId) != TRUE && - playerCount > 1) + + if (sub_8082E28(taskId) == TRUE + || sub_8082E6C(taskId) == TRUE + || playerCount < 2) + return; + + SetSuppressLinkErrorMessage(TRUE); + gTasks[taskId].data[3] = 0; + if (IsLinkMaster() == TRUE) { - SetSuppressLinkErrorMessage(TRUE); - gTasks[taskId].data[3] = 0; - - if (IsLinkMaster() == TRUE) - { - PlaySE(SE_PIN); - ShowFieldAutoScrollMessage(gUnknown_081A4932); - gTasks[taskId].func = sub_8082FEC; - } - else - { - PlaySE(SE_BOO); - ShowFieldAutoScrollMessage(gUnknown_081A49B6); - gTasks[taskId].func = sub_80831F8; - } + PlaySE(SE_PIN); + ShowFieldAutoScrollMessage(gUnknown_081A4932); + gTasks[taskId].func = sub_8082FEC; + } + else + { + PlaySE(SE_BOO); + ShowFieldAutoScrollMessage(gUnknown_081A49B6); + gTasks[taskId].func = sub_80831F8; } } static void sub_8082FEC(u8 taskId) { - if (sub_8082E28(taskId) != TRUE && - sub_8082EB8(taskId) != TRUE && - sub_8082DF4(taskId) != TRUE) + if (sub_8082E28(taskId) == TRUE + || sub_8082EB8(taskId) == TRUE + || sub_8082DF4(taskId) == TRUE) + return; + + if (GetFieldMessageBoxMode() == FIELD_MESSAGE_BOX_HIDDEN) { - if (GetFieldMessageBoxMode() == FIELD_MESSAGE_BOX_HIDDEN) - { - gTasks[taskId].data[3] = 0; - gTasks[taskId].func = sub_808303C; - } + gTasks[taskId].data[3] = 0; + gTasks[taskId].func = sub_808303C; } } static void sub_808303C(u8 taskId) { - s32 linkPlayerCount; - s16 *taskData; - - taskData = gTasks[taskId].data; + s16 *taskData = gTasks[taskId].data; + s32 linkPlayerCount = GetLinkPlayerCount_2(); - linkPlayerCount = GetLinkPlayerCount_2(); - - if (sub_8082E28(taskId) == TRUE || - sub_8082EB8(taskId) == TRUE || - sub_8082DF4(taskId) == TRUE) + if (sub_8082E28(taskId) == TRUE + || sub_8082EB8(taskId) == TRUE + || sub_8082DF4(taskId) == TRUE) return; sub_8082D60(taskId, linkPlayerCount); @@ -282,8 +269,8 @@ static void sub_808303C(u8 taskId) ShowFieldAutoScrollMessage((u8 *)gUnknown_081A4975); gTasks[taskId].func = sub_80830E4; #elif GERMAN - if ((gLinkType == 0x2255 && (u32)linkPlayerCount > 1) || - (gLinkType != 0x2255 && taskData[1] <= linkPlayerCount)) + if ((gLinkType == 0x2255 && (u32)linkPlayerCount > 1) + || (gLinkType != 0x2255 && taskData[1] <= linkPlayerCount)) { sub_80081C8(linkPlayerCount); sub_8082D4C(); @@ -296,10 +283,12 @@ static void sub_808303C(u8 taskId) static void sub_80830E4(u8 taskId) { - if (sub_8082E28(taskId) != TRUE && - sub_8082EB8(taskId) != TRUE && - sub_8082DF4(taskId) != TRUE && - GetFieldMessageBoxMode() == FIELD_MESSAGE_BOX_HIDDEN) + if (sub_8082E28(taskId) == TRUE + || sub_8082EB8(taskId) == TRUE + || sub_8082DF4(taskId) == TRUE) + return; + + if (GetFieldMessageBoxMode() == FIELD_MESSAGE_BOX_HIDDEN) { if (sub_800820C() != GetLinkPlayerCount_2()) { @@ -322,46 +311,40 @@ static void sub_80830E4(u8 taskId) static void sub_8083188(u8 taskId) { - u8 local1, local2; - u16 *result; + u8 local1 = gTasks[taskId].data[1]; + u8 local2 = gTasks[taskId].data[2]; - local1 = gTasks[taskId].data[1]; - local2 = gTasks[taskId].data[2]; - - if (sub_8082DF4(taskId) == TRUE || - sub_8083444(taskId) == TRUE) + if (sub_8082DF4(taskId) == TRUE + || sub_8083444(taskId) == TRUE) return; if (GetLinkPlayerCount_2() != sub_800820C()) { gTasks[taskId].func = sub_8083418; - return; } - - result = &gScriptResult; - *result = sub_8082D9C(local1, local2); - if (*result) - gTasks[taskId].func = sub_8083288; + else + { + gScriptResult = sub_8082D9C(local1, local2); + if (gScriptResult != 0) + gTasks[taskId].func = sub_8083288; + } } void sub_80831F8(u8 taskId) { u8 local1, local2; - u16 *result; local1 = gTasks[taskId].data[1]; local2 = gTasks[taskId].data[2]; - if (sub_8082E28(taskId) == TRUE || - sub_8082DF4(taskId) == TRUE) + if (sub_8082E28(taskId) == TRUE + || sub_8082DF4(taskId) == TRUE) return; - result = &gScriptResult; - *result = sub_8082D9C(local1, local2); - if (*result == 0) + gScriptResult = sub_8082D9C(local1, local2); + if (gScriptResult == 0) return; - - if (*result == 3) + if (gScriptResult == 3) { sub_800832C(); HideFieldMessageBox(); @@ -483,7 +466,7 @@ static bool8 sub_8083444(u8 taskId) gTasks[taskId].func = sub_8083418; return TRUE; } - + return FALSE; } @@ -491,26 +474,24 @@ void sub_808347C(u8 arg0) { u32 r3 = 2; u32 r2 = 2; - + switch (gSpecialVar_0x8004) { case 1: r3 = 2; gLinkType = 0x2233; break; - case 2: r3 = 2; gLinkType = 0x2244; break; - case 5: r3 = 4; r2 = 4; gLinkType = 0x2255; break; } - + sub_8082CD4(r3, r2); } @@ -551,11 +532,9 @@ static void sub_808353C(u8 taskId) } } } - EnableBothScriptContexts(); DestroyTask(taskId); break; - case 1: if (gReceivedRemoteLinkPlayers == FALSE) { @@ -569,7 +548,7 @@ static void sub_808353C(u8 taskId) void sub_80835D8(void) { int taskId = FindTaskIdByFunc(sub_808353C); - + if (taskId == 0xFF) { taskId = CreateTask(sub_808353C, 80); @@ -595,47 +574,44 @@ u8 sub_8083664(void) { if (FuncIsActiveTask(sub_8083710) != FALSE) return 0xFF; - - switch (gSpecialVar_0x8004 - 1) + + switch (gSpecialVar_0x8004) { - case 0: + case 1: gLinkType = 0x2233; break; - - case 1: + case 2: gLinkType = 0x2244; break; - - case 4: + case 5: gLinkType = 0x2255; break; - - case 2: + case 3: gLinkType = 0x1111; break; - - case 3: + case 4: gLinkType = 0x3322; break; } - + return CreateTask(sub_8083710, 80); } static void sub_8083710(u8 taskId) { - s16 *data = &gTasks[taskId].data[0]; - - if (*data == 0) + s16 *data = gTasks[taskId].data; + + if (data[0] == 0) { OpenLink(); ResetLinkPlayers(); CreateTask(sub_8083C50, 80); } - else if (*data >= 10) + else if (data[0] >= 10) + { gTasks[taskId].func = sub_8083760; - - *data += 1; + } + data[0]++; } static void sub_8083760(u8 taskId) @@ -660,8 +636,8 @@ static void sub_80837B4(u8 taskId) static void sub_80837EC(u8 taskId) { - if (gReceivedRemoteLinkPlayers == TRUE && - IsLinkPlayerDataExchangeComplete() == TRUE) + if (gReceivedRemoteLinkPlayers == TRUE + && IsLinkPlayerDataExchangeComplete() == TRUE) { sub_800826C(); sub_8007B14(); @@ -677,7 +653,7 @@ void sub_8083820(void) static void sub_808382C(u8 taskId) { struct Task* task = &gTasks[taskId]; - + switch (task->data[0]) { case 0: @@ -686,53 +662,43 @@ static void sub_808382C(u8 taskId) ClearLinkCallback_2(); task->data[0]++; break; - case 1: if (!gPaletteFade.active) task->data[0]++; - break; - case 2: task->data[1]++; if (task->data[1] > 20) task->data[0]++; - break; - case 3: sub_800832C(); task->data[0]++; break; - case 4: if (!gReceivedRemoteLinkPlayers) task->data[0]++; - break; - case 5: if (gLinkPlayers[0].trainerId & 1) current_map_music_set__default_for_battle(BGM_BATTLE32); else current_map_music_set__default_for_battle(BGM_BATTLE20); - + switch (gSpecialVar_0x8004) { case 1: gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK; break; - case 2: gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK | BATTLE_TYPE_DOUBLE; break; - case 5: ReducePlayerPartyToThree(); gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK | BATTLE_TYPE_DOUBLE | BATTLE_TYPE_MULTI; break; } - + SetMainCallback2(sub_800E7C4); gMain.savedCallback = sub_8083958; DestroyTask(taskId); @@ -746,25 +712,21 @@ static void sub_8083958(void) LoadPlayerParty(); SavePlayerBag(); sub_810FEFC(); - + if (gSpecialVar_0x8004 != 5) UpdateLinkBattleRecords(gUnknown_03004860 ^ 1); - + gMain.savedCallback = sub_805465C; SetMainCallback2(sub_8071B28); } void sub_80839A4(void) { - u16 var = gSpecialVar_0x8004; - u16 varMinusOne = var - 1; - - if (varMinusOne < 2 || var == 5) + if (gSpecialVar_0x8004 == 1 || gSpecialVar_0x8004 == 2 || gSpecialVar_0x8004 == 5) { LoadPlayerParty(); SavePlayerBag(); } - copy_saved_warp2_bank_and_enter_x_to_warp1(0x7F); } @@ -776,14 +738,13 @@ void sub_80839D0(void) static void sub_80839DC(u8 taskId) { struct Task* task = &gTasks[taskId]; - + switch (task->data[0]) { case 0: ShowFieldMessage(gUnknown_081A490C); task->data[0] = 1; break; - case 1: if (IsFieldMessageBoxHidden()) { @@ -792,25 +753,21 @@ static void sub_80839DC(u8 taskId) task->data[0] = 2; } break; - case 2: switch (sub_80554F8()) { case 0: break; - case 1: HideFieldMessageBox(); task->data[0] = 0; SwitchTaskToFollowupFunc(taskId); break; - case 2: task->data[0] = 3; break; } break; - case 3: sub_8055588(); HideFieldMessageBox(); @@ -831,7 +788,7 @@ void sub_8083A84(TaskFunc followupFunc) static void sub_8083AAC(u8 taskId) { struct Task *task = &gTasks[taskId]; - + switch (task->data[0]) { case 0: @@ -840,13 +797,10 @@ static void sub_8083AAC(u8 taskId) ClearLinkCallback_2(); task->data[0]++; break; - case 1: if (!gPaletteFade.active) task->data[0]++; - break; - case 2: gUnknown_020297D8.field0 = 0; gUnknown_020297D8.field1 = 0; @@ -854,14 +808,12 @@ static void sub_8083AAC(u8 taskId) sub_800832C(); task->data[0]++; break; - case 3: if (!gReceivedRemoteLinkPlayers) { SetMainCallback2(sub_8047CD8); DestroyTask(taskId); } - break; } } @@ -909,14 +861,14 @@ void sub_8083BDC(void) bool32 sub_8083BF4(u8 linkPlayerIndex) { u32 trainerCardColorIndex; - + gSpecialVar_0x8006 = linkPlayerIndex; StringCopy(gStringVar1, gLinkPlayers[linkPlayerIndex].name); - + trainerCardColorIndex = sub_80934C4(linkPlayerIndex); if (trainerCardColorIndex == 0) return FALSE; - + StringCopy(gStringVar2, gTrainerCardColorNames[trainerCardColorIndex - 1]); return TRUE; } @@ -924,7 +876,7 @@ bool32 sub_8083BF4(u8 linkPlayerIndex) void sub_8083C50(u8 taskId) { struct Task *task = &gTasks[taskId]; - + task->data[0]++; if (task->data[0] > 300) { @@ -932,7 +884,7 @@ void sub_8083C50(u8 taskId) SetMainCallback2(CB2_LinkError); DestroyTask(taskId); } - + if (gReceivedRemoteLinkPlayers) DestroyTask(taskId); } -- cgit v1.2.3 From 7c62102116b7594f4f428ce8a1352d09f281337f Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Fri, 8 Sep 2017 19:17:58 -0500 Subject: fix tab/space issues --- src/pokemon_menu.c | 52 ++++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/src/pokemon_menu.c b/src/pokemon_menu.c index c73efc62d..821101569 100644 --- a/src/pokemon_menu.c +++ b/src/pokemon_menu.c @@ -124,37 +124,37 @@ void (*gUnknown_03005CE4)(void); static const struct MenuAction sPokemonMenuActions[] = { {OtherText_Summary, (void*) PokemonMenu_Summary}, - {OtherText_Switch2, (void*) PokemonMenu_Switch}, - {OtherText_Item, (void*) PokemonMenu_Item}, - {gOtherText_CancelNoTerminator, (void*) PokemonMenu_Cancel}, - {OtherText_Give2, (void*) PokemonMenu_GiveItem}, - {OtherText_Take2, (void*) PokemonMenu_TakeItem}, - {OtherText_Take, (void*) PokemonMenu_TakeMail}, - {OtherText_Mail, (void*) PokemonMenu_Mail}, - {OtherText_Read2, (void*) PokemonMenu_ReadMail}, - {gOtherText_CancelNoTerminator, (void*) PokemonMenu_CancelSubmenu}, - {gMoveNames[MOVE_CUT], (void*) PokemonMenu_FieldMove}, - {gMoveNames[MOVE_FLASH], (void*) PokemonMenu_FieldMove}, - {gMoveNames[MOVE_ROCK_SMASH], (void*) PokemonMenu_FieldMove}, - {gMoveNames[MOVE_STRENGTH], (void*) PokemonMenu_FieldMove}, - {gMoveNames[MOVE_SURF], (void*) PokemonMenu_FieldMove}, - {gMoveNames[MOVE_FLY], (void*) PokemonMenu_FieldMove}, - {gMoveNames[MOVE_DIVE], (void*) PokemonMenu_FieldMove}, - {gMoveNames[MOVE_WATERFALL], (void*) PokemonMenu_FieldMove}, - {gMoveNames[MOVE_TELEPORT], (void*) PokemonMenu_FieldMove}, - {gMoveNames[MOVE_DIG], (void*) PokemonMenu_FieldMove}, - {gMoveNames[MOVE_SECRET_POWER], (void*) PokemonMenu_FieldMove}, - {gMoveNames[MOVE_MILK_DRINK], (void*) PokemonMenu_FieldMove}, - {gMoveNames[MOVE_SOFT_BOILED], (void*) PokemonMenu_FieldMove}, - {gMoveNames[MOVE_SWEET_SCENT], (void*) PokemonMenu_FieldMove}, + {OtherText_Switch2, (void*) PokemonMenu_Switch}, + {OtherText_Item, (void*) PokemonMenu_Item}, + {gOtherText_CancelNoTerminator, (void*) PokemonMenu_Cancel}, + {OtherText_Give2, (void*) PokemonMenu_GiveItem}, + {OtherText_Take2, (void*) PokemonMenu_TakeItem}, + {OtherText_Take, (void*) PokemonMenu_TakeMail}, + {OtherText_Mail, (void*) PokemonMenu_Mail}, + {OtherText_Read2, (void*) PokemonMenu_ReadMail}, + {gOtherText_CancelNoTerminator, (void*) PokemonMenu_CancelSubmenu}, + {gMoveNames[MOVE_CUT], (void*) PokemonMenu_FieldMove}, + {gMoveNames[MOVE_FLASH], (void*) PokemonMenu_FieldMove}, + {gMoveNames[MOVE_ROCK_SMASH], (void*) PokemonMenu_FieldMove}, + {gMoveNames[MOVE_STRENGTH], (void*) PokemonMenu_FieldMove}, + {gMoveNames[MOVE_SURF], (void*) PokemonMenu_FieldMove}, + {gMoveNames[MOVE_FLY], (void*) PokemonMenu_FieldMove}, + {gMoveNames[MOVE_DIVE], (void*) PokemonMenu_FieldMove}, + {gMoveNames[MOVE_WATERFALL], (void*) PokemonMenu_FieldMove}, + {gMoveNames[MOVE_TELEPORT], (void*) PokemonMenu_FieldMove}, + {gMoveNames[MOVE_DIG], (void*) PokemonMenu_FieldMove}, + {gMoveNames[MOVE_SECRET_POWER], (void*) PokemonMenu_FieldMove}, + {gMoveNames[MOVE_MILK_DRINK], (void*) PokemonMenu_FieldMove}, + {gMoveNames[MOVE_SOFT_BOILED], (void*) PokemonMenu_FieldMove}, + {gMoveNames[MOVE_SWEET_SCENT], (void*) PokemonMenu_FieldMove}, }; static const u16 sPokeMenuFieldMoves[] = { MOVE_CUT, MOVE_FLASH, MOVE_ROCK_SMASH, MOVE_STRENGTH, - MOVE_SURF, MOVE_FLY, MOVE_DIVE, MOVE_WATERFALL, - MOVE_TELEPORT, MOVE_DIG, MOVE_SECRET_POWER, MOVE_MILK_DRINK, - MOVE_SOFT_BOILED, MOVE_SWEET_SCENT, sFieldMovesTerminator, + MOVE_SURF, MOVE_FLY, MOVE_DIVE, MOVE_WATERFALL, + MOVE_TELEPORT, MOVE_DIG, MOVE_SECRET_POWER, MOVE_MILK_DRINK, + MOVE_SOFT_BOILED, MOVE_SWEET_SCENT, sFieldMovesTerminator, }; static const u8 sUnknown_39F572[] = {4, 5, 9, 0}; -- cgit v1.2.3 From 3ca2cec4f0cca98664feabae80aa5b0d3c691bf6 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Fri, 8 Sep 2017 21:53:51 -0500 Subject: decompile more evolution_scene.c functions --- src/evolution_scene.c | 4654 +++++++++++++++++++++++++------------------------ 1 file changed, 2361 insertions(+), 2293 deletions(-) diff --git a/src/evolution_scene.c b/src/evolution_scene.c index 5d34d0d41..eeeb04f56 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -31,6 +31,28 @@ struct EvoInfo u8 postEvoSpriteID; u8 evoTaskID; u8 field_3; + + u8 unk4[0x40]; + u8 unk44[0x40]; + u8 unk84[0x40]; + + u8 unkC4[0x40][0x20]; // 0x20148C4 + u8 unk8C4[0x40][0x20]; // 0x20150C4 + u8 unk10C4[0x40][0x20]; // 0x20158C4 + u8 unk18C4[0x40][0x20]; // 0x20160C4 + u8 unk20C4[0x40][0x20]; // 0x20168C4 + u8 unk28C4[0x40][0x20]; // 0x20170C4 + u8 unk30C4[0x40][0x20]; // 0x20178C4 + u8 unk38C4[0x40][0x20]; // 0x20180C4 + + u8 *unk40C4[0x40][0x20]; // 0x20188C4 + + u16 unk60C4[0x40][0x20]; // 0x201A8C4 + u16 unk70C4[0x40][0x20]; // 0x201B8C4 + u16 unk80C4[0x40][0x20]; // 0x201C8C4 + u16 unk90C4[0x40][0x20]; // 0x201D8C4 + + u8 unkA0C4; // 0x201E8C4 }; #define sEvoInfo ((*(struct EvoInfo*)(ewram + 0x14800))) @@ -1201,151 +1223,446 @@ NOTE: functions. */ +/* +void unref_sub_8113B50(u8 *a, u8 *b) +{ + //u8 *sp0 = a; + //u8 *sp4 = b; +#define sp0 a +#define sp4 b + s32 sp8; + s32 spC = 0; + u32 sp10 = 0; + s32 sp14; + s32 r6; + u32 r8; + + for (sp8 = 0; sp8 < 64; sp8++) + { + sEvoInfo.unk84[sp8] = 0; + sEvoInfo.unk4[sp8] = 0; + sEvoInfo.unk44[sp8] = 0; + for (r6 = 0; r6 < 32; r6++) + { + sEvoInfo.unk10C4[sp8][r6] = 0; + sEvoInfo.unk18C4[sp8][r6] = 0; + sEvoInfo.unk20C4[sp8][r6] = 0; + sEvoInfo.unk28C4[sp8][r6] = 0; + sEvoInfo.unkC4[sp8][r6] = 0; + sEvoInfo.unk8C4[sp8][r6] = 0; + sEvoInfo.unk30C4[sp8][r6] = 0; + sEvoInfo.unk38C4[sp8][r6] = 0; + + sEvoInfo.unk60C4[sp8][r6] = 0; + sEvoInfo.unk70C4[sp8][r6] = 0; + sEvoInfo.unk80C4[sp8][r6] = 0; + sEvoInfo.unk90C4[sp8][r6] = 0; + } + } + + sEvoInfo.unkA0C4 = 64; + r8 = 0; + for (sp8 = 0; sp8 < 64; sp8++) + { + //_08113C32 + u32 r3 = 0; + u8 *r2 = sp0 + r8; + + for (r6 = 0; r6 < 64; r6++) + { + sEvoInfo.unk40C4[sp8][r6 >> 1] = r2; + switch (r3) + { + case 0: + switch (r6 & 1) + { + case 0: + if (*r2 & 0xF) + { + sEvoInfo.unk10C4[sp8][sEvoInfo.unk4[sp8]] = r6; + r3 = 1; + } + break; + case 1: + if (*r2 & 0xF0) + { + sEvoInfo.unk10C4[sp8][sEvoInfo.unk4[sp8]] = r6; + r3 = 1; + } + break; + } + break; + case 1: + switch (r6 & r3) + { + case 0: + if (*r2 & 0xF) + { + sEvoInfo.unk18C4[sp8][sEvoInfo.unk4[sp8]] = r6 - 1; + sEvoInfo.unk4[sp8]++; + r3 = 0; + } + break; + case 1: + if (*r2 & 0xF0) + { + sEvoInfo.unk18C4[sp8][sEvoInfo.unk4[sp8]] = r6 - 1; + sEvoInfo.unk4[sp8]++; + r3 = 0; + } + break; + } + } + //if (!((r6 + 1) & 7)) + if ((r6 + 1) % 8 == 0) + r2 += 0x1D; + else if (r6 & 1) + r2 += 1; + } + if (r3) + { + sEvoInfo.unk18C4[sp8][sEvoInfo.unk4[sp8]] = r6; + sEvoInfo.unk4[sp8]++; + } + //_08113D26 + if (!((sp8 + 1) & 7)) + r8 += 0xE4; + else + r8 += 4; + } + //_08113D4A + r8 = 0; + for (sp8 = 0; sp8 < 64; sp8++) + { + //_08113D6A + u32 r3 = 0; + u8 *r2 = sp4 + r8; + + for (r6 = 0; r6 < 64; r6++) + { + switch (r3) + { + case 0: + switch (r6 & 1) + { + case 0: + if (*r2 & 0xF) + { + sEvoInfo.unk20C4[sp8][sEvoInfo.unk44[sp8]] = r6; + r3 = 1; + } + break; + case 1: + if (*r2 & 0xF0) + { + sEvoInfo.unk20C4[sp8][sEvoInfo.unk44[sp8]] = r6; + r3 = 1; + } + break; + } + break; + case 1: + switch (r6 & r3) + { + case 0: + if (*r2 & 0xF) + { + sEvoInfo.unk28C4[sp8][sEvoInfo.unk44[sp8]] = r6 - 1; + sEvoInfo.unk44[sp8]++; + r3 = 0; + } + break; + case 1: + if (*r2 & 0xF0) + { + sEvoInfo.unk28C4[sp8][sEvoInfo.unk44[sp8]] = r6 - 1; + sEvoInfo.unk44[sp8]++; + r3 = 0; + } + break; + } + } + //_08113DE4 + if (!((r6 + 1) & 7)) + r2 += 0x1D; + else if (r6 & 1) + r2 += 1; + + } + if (r3) + { + sEvoInfo.unk28C4[sp8][sEvoInfo.unk44[sp8]] = r6; + sEvoInfo.unk44[sp8]++; + } + //if (!((sp8 + 1) & 7)) + if ((sp8 + 1) % 8 == 0) + r8 += 0xE4; + else + r8 += 4; + } + + for (sp8 = 0; sp8 < 0x40; sp8++) //_08113E3A + { + if (sEvoInfo.unk4[sp8] < sEvoInfo.unk44[sp8]) + { + for (spC = 0; spC < sEvoInfo.unk4[sp8]; spC++) + { + sp14 = 0x100; + + for (r6 = 0; r6 < sEvoInfo.unk44[sp8]; r6++) + { + s32 r3; + + //_08113EA4 + if (sEvoInfo.unk10C4[sp8][spC] > sEvoInfo.unk20C4[sp8][r6]) + r3 = sEvoInfo.unk10C4[sp8][spC] - sEvoInfo.unk20C4[sp8][r6]; + else + r3 = sEvoInfo.unk20C4[sp8][r6] - sEvoInfo.unk10C4[sp8][spC]; + + if (sEvoInfo.unk18C4[sp8][spC] > sEvoInfo.unk28C4[sp8][spC]) + r3 += sEvoInfo.unk18C4[sp8][spC] - sEvoInfo.unk28C4[sp8][spC]; + else + r3 += sEvoInfo.unk28C4[sp8][spC] - sEvoInfo.unk18C4[sp8][spC]; + + if (sp14 >= r3 && sEvoInfo.unkC4[sp8][r6] == 0 && sEvoInfo.unk8C4[sp8][r6] == 0) + { + sp10 = r6; + sp14 = r3; + } + } + //_08113F3E + sub_81141F0(spC, sp10, sp8); + } + //_08113F54 + + for (r6 = 0; r6 < sEvoInfo.unk44[sp8]; r6++) + { + if (sEvoInfo.unkC4[sp8][r6] == 0 && sEvoInfo.unk8C4[sp8][r6] == 0) + sub_811430C(r6, sp8); + } + } + //_08113F9E + if (sEvoInfo.unk4[sp8] == sEvoInfo.unk44[sp8]) + { + for (r6 = 0; r6 < sEvoInfo.unk4[sp8]; r6++) + sub_81141F0(r6, r6, sp8); + } + //_08113FCC + if (sEvoInfo.unk4[sp8] > sEvoInfo.unk44[sp8]) + { + for (sp10 = 0; sp10 < sEvoInfo.unk44[sp8]; sp10++) + { + sp14 = 0x100; + + for (r6 = 0; r6 < sEvoInfo.unk4[sp8]; r6++) + { + s32 r3; + + if (sEvoInfo.unk10C4[sp8][r6] > sEvoInfo.unk20C4[sp8][sp10]) + r3 = sEvoInfo.unk10C4[sp8][r6] - sEvoInfo.unk20C4[sp8][sp10]; + else + r3 = sEvoInfo.unk20C4[sp8][sp10] - sEvoInfo.unk10C4[sp8][r6]; + + if (sEvoInfo.unk18C4[sp8][r6] > sEvoInfo.unk28C4[sp8][sp10]) + r3 += sEvoInfo.unk18C4[sp8][r6] - sEvoInfo.unk28C4[sp8][sp10]; + else + r3 += sEvoInfo.unk28C4[sp8][sp10] - sEvoInfo.unk18C4[sp8][r6]; + + //r3 = abs(sEvoInfo.unk10C4[sp8][r6] - sEvoInfo.unk20C4[sp8][sp10]); + //r3 += abs(sEvoInfo.unk18C4[sp8][r6] - sEvoInfo.unk28C4[sp8][sp10]); + + if (sp14 > r3 && sEvoInfo.unkC4[sp8][r6] == 0) + { + spC = r6; + sp14 = r3; + } + } + //_081140C4 + sEvoInfo.unk30C4[sp8][spC] = sEvoInfo.unk20C4[sp8][sp10]; + sEvoInfo.unk38C4[sp8][spC] = sEvoInfo.unk28C4[sp8][sp10]; + sEvoInfo.unkC4[sp8][spC] = 1; + } + //_08114104 + for (r6 = 0; r6 < sEvoInfo.unk4[sp8]; r6++) + { + sEvoInfo.unk20C4[sp8][r6] = sEvoInfo.unk30C4[sp8][r6]; + sEvoInfo.unk28C4[sp8][r6] = sEvoInfo.unk38C4[sp8][r6]; + if (sEvoInfo.unkC4[sp8][r6] != 0) + { + sEvoInfo.unkC4[sp8][r6] = 0; + sub_81141F0(r6, r6, sp8); + } + else + { + // Ugh, can't get this part right + //u8 *ptr1 = &sEvoInfo.unk10C4[sp8][r6]; + //u8 *ptr2 = &sEvoInfo.unk18C4[sp8][r6]; + //s32 r2 = *ptr1 + (*ptr2 - *ptr1) / 2; + + //u8 r0_ = sEvoInfo.unk10C4[sp8][r6]; + //u8 r2_ = sEvoInfo.unk18C4[sp8][r6]; + //s32 r2 = (r0_ - r2_) / 2; + + s32 r2 = (sEvoInfo.unk18C4[sp8][r6] - sEvoInfo.unk10C4[sp8][r6]); + s32 r2_ = sEvoInfo.unk10C4[sp8][r6]; + + sEvoInfo.unk20C4[sp8][r6] = sEvoInfo.unk28C4[sp8][r6] = r2_ + r2 / 2; + sEvoInfo.unk28C4[sp8][r6]++; + sub_81141F0(r6, r6, sp8); + } + } + } + //_081141C4 + } +#undef sp0 +#undef sp4 +} +*/ __attribute__((naked)) void unref_sub_8113B50() { asm(".syntax unified\n\ push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x3C\n\ - str r0, [sp]\n\ - str r1, [sp, 0x4]\n\ - movs r0, 0\n\ - str r0, [sp, 0xC]\n\ - movs r1, 0\n\ - str r1, [sp, 0x10]\n\ - movs r2, 0\n\ - str r2, [sp, 0x8]\n\ - ldr r3, _08113C60 @ =0x02014800\n\ - mov r12, r3\n\ - ldr r4, _08113C64 @ =0x000018c4\n\ - add r4, r12\n\ - mov r10, r4\n\ - ldr r5, _08113C68 @ =0x000020c4\n\ - add r5, r12\n\ - mov r8, r5\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x3C\n\ + str r0, [sp]\n\ + str r1, [sp, 0x4]\n\ + movs r0, 0\n\ + str r0, [sp, 0xC]\n\ + movs r1, 0\n\ + str r1, [sp, 0x10]\n\ + movs r2, 0\n\ + str r2, [sp, 0x8]\n\ + ldr r3, _08113C60 @ =0x02014800\n\ + mov r12, r3\n\ + ldr r4, _08113C64 @ =0x000018c4\n\ + add r4, r12\n\ + mov r10, r4\n\ + ldr r5, _08113C68 @ =0x000020c4\n\ + add r5, r12\n\ + mov r8, r5\n\ _08113B7C:\n\ - adds r0, r3, 0\n\ - adds r0, 0x84\n\ - ldr r1, [sp, 0x8]\n\ - adds r0, r1, r0\n\ - strb r2, [r0]\n\ - adds r0, r3, 0x4\n\ - adds r0, r1, r0\n\ - strb r2, [r0]\n\ - ldr r4, _08113C6C @ =0x02014844\n\ - adds r0, r1, r4\n\ - strb r2, [r0]\n\ - movs r6, 0\n\ - lsls r1, 5\n\ - mov r9, r1\n\ - ldr r5, [sp, 0x8]\n\ - lsls r4, r5, 6\n\ + adds r0, r3, 0\n\ + adds r0, 0x84\n\ + ldr r1, [sp, 0x8]\n\ + adds r0, r1, r0\n\ + strb r2, [r0]\n\ + adds r0, r3, 0x4\n\ + adds r0, r1, r0\n\ + strb r2, [r0]\n\ + ldr r4, _08113C6C @ =0x02014844\n\ + adds r0, r1, r4\n\ + strb r2, [r0]\n\ + movs r6, 0\n\ + lsls r1, 5\n\ + mov r9, r1\n\ + ldr r5, [sp, 0x8]\n\ + lsls r4, r5, 6\n\ _08113B9C:\n\ - mov r0, r9\n\ - adds r1, r6, r0\n\ - ldr r5, _08113C70 @ =0x020158c4\n\ - adds r0, r1, r5\n\ - strb r2, [r0]\n\ - mov r5, r10\n\ - adds r0, r1, r5\n\ - strb r2, [r0]\n\ - mov r5, r8\n\ - adds r0, r1, r5\n\ - strb r2, [r0]\n\ - ldr r5, _08113C74 @ =0x020170c4\n\ - adds r0, r1, r5\n\ - strb r2, [r0]\n\ - adds r7, r3, 0\n\ - adds r7, 0xC4\n\ - adds r0, r1, r7\n\ - strb r2, [r0]\n\ - ldr r5, _08113C78 @ =0x000008c4\n\ - adds r0, r3, r5\n\ - adds r0, r1, r0\n\ - strb r2, [r0]\n\ - ldr r5, _08113C7C @ =0x000030c4\n\ - adds r0, r3, r5\n\ - adds r0, r1, r0\n\ - strb r2, [r0]\n\ - ldr r5, _08113C80 @ =0x000038c4\n\ - adds r0, r3, r5\n\ - adds r1, r0\n\ - strb r2, [r1]\n\ - lsls r1, r6, 1\n\ - adds r1, r4\n\ - ldr r5, _08113C84 @ =0x000060c4\n\ - adds r0, r3, r5\n\ - adds r0, r1, r0\n\ - strh r2, [r0]\n\ - ldr r5, _08113C88 @ =0x000070c4\n\ - adds r0, r3, r5\n\ - adds r0, r1, r0\n\ - strh r2, [r0]\n\ - ldr r5, _08113C8C @ =0x000080c4\n\ - adds r0, r3, r5\n\ - adds r0, r1, r0\n\ - strh r2, [r0]\n\ - ldr r5, _08113C90 @ =0x000090c4\n\ - adds r0, r3, r5\n\ - adds r1, r0\n\ - strh r2, [r1]\n\ - adds r6, 0x1\n\ - cmp r6, 0x1F\n\ - ble _08113B9C\n\ - ldr r0, [sp, 0x8]\n\ - adds r0, 0x1\n\ - str r0, [sp, 0x8]\n\ - cmp r0, 0x3F\n\ - ble _08113B7C\n\ - ldr r1, _08113C94 @ =0x0000a0c4\n\ - add r1, r12\n\ - movs r0, 0x40\n\ - strb r0, [r1]\n\ - movs r1, 0\n\ - mov r8, r1\n\ - movs r2, 0\n\ - str r2, [sp, 0x8]\n\ - movs r3, 0x80\n\ - lsls r3, 5\n\ - adds r3, r7\n\ - mov r12, r3\n\ - movs r4, 0xC0\n\ - lsls r4, 5\n\ - adds r4, r7\n\ - mov r9, r4\n\ - movs r5, 0\n\ - adds r4, r7, 0\n\ - subs r4, 0xC0\n\ + mov r0, r9\n\ + adds r1, r6, r0\n\ + ldr r5, _08113C70 @ =0x020158c4\n\ + adds r0, r1, r5\n\ + strb r2, [r0]\n\ + mov r5, r10\n\ + adds r0, r1, r5\n\ + strb r2, [r0]\n\ + mov r5, r8\n\ + adds r0, r1, r5\n\ + strb r2, [r0]\n\ + ldr r5, _08113C74 @ =0x020170c4\n\ + adds r0, r1, r5\n\ + strb r2, [r0]\n\ + adds r7, r3, 0\n\ + adds r7, 0xC4\n\ + adds r0, r1, r7\n\ + strb r2, [r0]\n\ + ldr r5, _08113C78 @ =0x000008c4\n\ + adds r0, r3, r5\n\ + adds r0, r1, r0\n\ + strb r2, [r0]\n\ + ldr r5, _08113C7C @ =0x000030c4\n\ + adds r0, r3, r5\n\ + adds r0, r1, r0\n\ + strb r2, [r0]\n\ + ldr r5, _08113C80 @ =0x000038c4\n\ + adds r0, r3, r5\n\ + adds r1, r0\n\ + strb r2, [r1]\n\ + lsls r1, r6, 1\n\ + adds r1, r4\n\ + ldr r5, _08113C84 @ =0x000060c4\n\ + adds r0, r3, r5\n\ + adds r0, r1, r0\n\ + strh r2, [r0]\n\ + ldr r5, _08113C88 @ =0x000070c4\n\ + adds r0, r3, r5\n\ + adds r0, r1, r0\n\ + strh r2, [r0]\n\ + ldr r5, _08113C8C @ =0x000080c4\n\ + adds r0, r3, r5\n\ + adds r0, r1, r0\n\ + strh r2, [r0]\n\ + ldr r5, _08113C90 @ =0x000090c4\n\ + adds r0, r3, r5\n\ + adds r1, r0\n\ + strh r2, [r1]\n\ + adds r6, 0x1\n\ + cmp r6, 0x1F\n\ + ble _08113B9C\n\ + ldr r0, [sp, 0x8]\n\ + adds r0, 0x1\n\ + str r0, [sp, 0x8]\n\ + cmp r0, 0x3F\n\ + ble _08113B7C\n\ + ldr r1, _08113C94 @ =0x0000a0c4\n\ + add r1, r12\n\ + movs r0, 0x40\n\ + strb r0, [r1]\n\ + movs r1, 0\n\ + mov r8, r1\n\ + movs r2, 0\n\ + str r2, [sp, 0x8]\n\ + movs r3, 0x80\n\ + lsls r3, 5\n\ + adds r3, r7\n\ + mov r12, r3\n\ + movs r4, 0xC0\n\ + lsls r4, 5\n\ + adds r4, r7\n\ + mov r9, r4\n\ + movs r5, 0\n\ + adds r4, r7, 0\n\ + subs r4, 0xC0\n\ _08113C32:\n\ - movs r3, 0\n\ - ldr r2, [sp]\n\ - add r2, r8\n\ - movs r6, 0\n\ - ldr r0, [sp, 0x8]\n\ - adds r0, 0x1\n\ - str r0, [sp, 0x30]\n\ - ldr r1, [sp, 0x8]\n\ - lsls r1, 7\n\ - mov r10, r1\n\ - movs r7, 0x1\n\ - negs r7, r7\n\ + movs r3, 0\n\ + ldr r2, [sp]\n\ + add r2, r8\n\ + movs r6, 0\n\ + ldr r0, [sp, 0x8]\n\ + adds r0, 0x1\n\ + str r0, [sp, 0x30]\n\ + ldr r1, [sp, 0x8]\n\ + lsls r1, 7\n\ + mov r10, r1\n\ + movs r7, 0x1\n\ + negs r7, r7\n\ _08113C4A:\n\ - asrs r0, r6, 1\n\ - lsls r0, 2\n\ - add r0, r10\n\ - ldr r1, _08113C98 @ =0x020188c4\n\ - adds r0, r1\n\ - str r2, [r0]\n\ - cmp r3, 0\n\ - beq _08113C9C\n\ - cmp r3, 0x1\n\ - beq _08113CC6\n\ - b _08113CF4\n\ - .align 2, 0\n\ + asrs r0, r6, 1\n\ + lsls r0, 2\n\ + add r0, r10\n\ + ldr r1, _08113C98 @ =0x020188c4\n\ + adds r0, r1\n\ + str r2, [r0]\n\ + cmp r3, 0\n\ + beq _08113C9C\n\ + cmp r3, 0x1\n\ + beq _08113CC6\n\ + b _08113CF4\n\ + .align 2, 0\n\ _08113C60: .4byte 0x02014800\n\ _08113C64: .4byte 0x000018c4\n\ _08113C68: .4byte 0x000020c4\n\ @@ -1362,518 +1679,518 @@ _08113C90: .4byte 0x000090c4\n\ _08113C94: .4byte 0x0000a0c4\n\ _08113C98: .4byte 0x020188c4\n\ _08113C9C:\n\ - movs r0, 0x1\n\ - ands r0, r6\n\ - cmp r0, 0\n\ - beq _08113CAA\n\ - cmp r0, 0x1\n\ - beq _08113CB0\n\ - b _08113CF4\n\ + movs r0, 0x1\n\ + ands r0, r6\n\ + cmp r0, 0\n\ + beq _08113CAA\n\ + cmp r0, 0x1\n\ + beq _08113CB0\n\ + b _08113CF4\n\ _08113CAA:\n\ - ldrb r1, [r2]\n\ - movs r0, 0xF\n\ - b _08113CB4\n\ + ldrb r1, [r2]\n\ + movs r0, 0xF\n\ + b _08113CB4\n\ _08113CB0:\n\ - ldrb r1, [r2]\n\ - movs r0, 0xF0\n\ + ldrb r1, [r2]\n\ + movs r0, 0xF0\n\ _08113CB4:\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08113CF4\n\ - ldrb r0, [r4]\n\ - adds r0, r5\n\ - add r0, r12\n\ - strb r6, [r0]\n\ - movs r3, 0x1\n\ - b _08113CF4\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08113CF4\n\ + ldrb r0, [r4]\n\ + adds r0, r5\n\ + add r0, r12\n\ + strb r6, [r0]\n\ + movs r3, 0x1\n\ + b _08113CF4\n\ _08113CC6:\n\ - adds r0, r6, 0\n\ - ands r0, r3\n\ - cmp r0, 0\n\ - beq _08113CD4\n\ - cmp r0, 0x1\n\ - beq _08113CDA\n\ - b _08113CF4\n\ + adds r0, r6, 0\n\ + ands r0, r3\n\ + cmp r0, 0\n\ + beq _08113CD4\n\ + cmp r0, 0x1\n\ + beq _08113CDA\n\ + b _08113CF4\n\ _08113CD4:\n\ - ldrb r1, [r2]\n\ - movs r0, 0xF\n\ - b _08113CDE\n\ + ldrb r1, [r2]\n\ + movs r0, 0xF\n\ + b _08113CDE\n\ _08113CDA:\n\ - ldrb r1, [r2]\n\ - movs r0, 0xF0\n\ + ldrb r1, [r2]\n\ + movs r0, 0xF0\n\ _08113CDE:\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _08113CF4\n\ - ldrb r0, [r4]\n\ - adds r0, r5\n\ - add r0, r9\n\ - strb r7, [r0]\n\ - ldrb r0, [r4]\n\ - adds r0, 0x1\n\ - strb r0, [r4]\n\ - movs r3, 0\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08113CF4\n\ + ldrb r0, [r4]\n\ + adds r0, r5\n\ + add r0, r9\n\ + strb r7, [r0]\n\ + ldrb r0, [r4]\n\ + adds r0, 0x1\n\ + strb r0, [r4]\n\ + movs r3, 0\n\ _08113CF4:\n\ - adds r0, r6, 0x1\n\ - movs r1, 0x7\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _08113D02\n\ - adds r2, 0x1D\n\ - b _08113D0C\n\ + adds r0, r6, 0x1\n\ + movs r1, 0x7\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08113D02\n\ + adds r2, 0x1D\n\ + b _08113D0C\n\ _08113D02:\n\ - movs r0, 0x1\n\ - ands r0, r6\n\ - cmp r0, 0\n\ - beq _08113D0C\n\ - adds r2, 0x1\n\ + movs r0, 0x1\n\ + ands r0, r6\n\ + cmp r0, 0\n\ + beq _08113D0C\n\ + adds r2, 0x1\n\ _08113D0C:\n\ - adds r7, 0x1\n\ - adds r6, 0x1\n\ - cmp r6, 0x3F\n\ - ble _08113C4A\n\ - cmp r3, 0\n\ - beq _08113D26\n\ - ldrb r0, [r4]\n\ - adds r0, r5\n\ - add r0, r9\n\ - strb r6, [r0]\n\ - ldrb r0, [r4]\n\ - adds r0, 0x1\n\ - strb r0, [r4]\n\ + adds r7, 0x1\n\ + adds r6, 0x1\n\ + cmp r6, 0x3F\n\ + ble _08113C4A\n\ + cmp r3, 0\n\ + beq _08113D26\n\ + ldrb r0, [r4]\n\ + adds r0, r5\n\ + add r0, r9\n\ + strb r6, [r0]\n\ + ldrb r0, [r4]\n\ + adds r0, 0x1\n\ + strb r0, [r4]\n\ _08113D26:\n\ - movs r0, 0x7\n\ - ldr r2, [sp, 0x30]\n\ - ands r2, r0\n\ - cmp r2, 0\n\ - bne _08113D36\n\ - movs r3, 0xE4\n\ - add r8, r3\n\ - b _08113D3A\n\ + movs r0, 0x7\n\ + ldr r2, [sp, 0x30]\n\ + ands r2, r0\n\ + cmp r2, 0\n\ + bne _08113D36\n\ + movs r3, 0xE4\n\ + add r8, r3\n\ + b _08113D3A\n\ _08113D36:\n\ - movs r0, 0x4\n\ - add r8, r0\n\ + movs r0, 0x4\n\ + add r8, r0\n\ _08113D3A:\n\ - adds r5, 0x20\n\ - adds r4, 0x1\n\ - ldr r1, [sp, 0x8]\n\ - adds r1, 0x1\n\ - str r1, [sp, 0x8]\n\ - cmp r1, 0x3F\n\ - bgt _08113D4A\n\ - b _08113C32\n\ + adds r5, 0x20\n\ + adds r4, 0x1\n\ + ldr r1, [sp, 0x8]\n\ + adds r1, 0x1\n\ + str r1, [sp, 0x8]\n\ + cmp r1, 0x3F\n\ + bgt _08113D4A\n\ + b _08113C32\n\ _08113D4A:\n\ - movs r2, 0\n\ - mov r8, r2\n\ - movs r3, 0\n\ - str r3, [sp, 0x8]\n\ - ldr r0, _08113D84 @ =0x02014844\n\ - movs r4, 0x82\n\ - lsls r4, 6\n\ - adds r4, r0\n\ - mov r10, r4\n\ - movs r5, 0xA2\n\ - lsls r5, 6\n\ - adds r7, r0, r5\n\ - movs r5, 0\n\ - adds r4, r0, 0\n\ - movs r0, 0x1\n\ - mov r9, r0\n\ + movs r2, 0\n\ + mov r8, r2\n\ + movs r3, 0\n\ + str r3, [sp, 0x8]\n\ + ldr r0, _08113D84 @ =0x02014844\n\ + movs r4, 0x82\n\ + lsls r4, 6\n\ + adds r4, r0\n\ + mov r10, r4\n\ + movs r5, 0xA2\n\ + lsls r5, 6\n\ + adds r7, r0, r5\n\ + movs r5, 0\n\ + adds r4, r0, 0\n\ + movs r0, 0x1\n\ + mov r9, r0\n\ _08113D6A:\n\ - movs r3, 0\n\ - ldr r2, [sp, 0x4]\n\ - add r2, r8\n\ - movs r6, 0\n\ - ldr r1, [sp, 0x8]\n\ - adds r1, 0x1\n\ - str r1, [sp, 0x30]\n\ + movs r3, 0\n\ + ldr r2, [sp, 0x4]\n\ + add r2, r8\n\ + movs r6, 0\n\ + ldr r1, [sp, 0x8]\n\ + adds r1, 0x1\n\ + str r1, [sp, 0x30]\n\ _08113D78:\n\ - cmp r3, 0\n\ - beq _08113D88\n\ - cmp r3, 0x1\n\ - beq _08113DB4\n\ - b _08113DE4\n\ - .align 2, 0\n\ + cmp r3, 0\n\ + beq _08113D88\n\ + cmp r3, 0x1\n\ + beq _08113DB4\n\ + b _08113DE4\n\ + .align 2, 0\n\ _08113D84: .4byte 0x02014844\n\ _08113D88:\n\ - adds r0, r6, 0\n\ - mov r1, r9\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08113D98\n\ - cmp r0, 0x1\n\ - beq _08113D9E\n\ - b _08113DE4\n\ + adds r0, r6, 0\n\ + mov r1, r9\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08113D98\n\ + cmp r0, 0x1\n\ + beq _08113D9E\n\ + b _08113DE4\n\ _08113D98:\n\ - ldrb r1, [r2]\n\ - movs r0, 0xF\n\ - b _08113DA2\n\ + ldrb r1, [r2]\n\ + movs r0, 0xF\n\ + b _08113DA2\n\ _08113D9E:\n\ - ldrb r1, [r2]\n\ - movs r0, 0xF0\n\ + ldrb r1, [r2]\n\ + movs r0, 0xF0\n\ _08113DA2:\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08113DE4\n\ - ldrb r0, [r4]\n\ - adds r0, r5\n\ - add r0, r10\n\ - strb r6, [r0]\n\ - movs r3, 0x1\n\ - b _08113DE4\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08113DE4\n\ + ldrb r0, [r4]\n\ + adds r0, r5\n\ + add r0, r10\n\ + strb r6, [r0]\n\ + movs r3, 0x1\n\ + b _08113DE4\n\ _08113DB4:\n\ - adds r0, r6, 0\n\ - ands r0, r3\n\ - cmp r0, 0\n\ - beq _08113DC2\n\ - cmp r0, 0x1\n\ - beq _08113DC8\n\ - b _08113DE4\n\ + adds r0, r6, 0\n\ + ands r0, r3\n\ + cmp r0, 0\n\ + beq _08113DC2\n\ + cmp r0, 0x1\n\ + beq _08113DC8\n\ + b _08113DE4\n\ _08113DC2:\n\ - ldrb r1, [r2]\n\ - movs r0, 0xF\n\ - b _08113DCC\n\ + ldrb r1, [r2]\n\ + movs r0, 0xF\n\ + b _08113DCC\n\ _08113DC8:\n\ - ldrb r1, [r2]\n\ - movs r0, 0xF0\n\ + ldrb r1, [r2]\n\ + movs r0, 0xF0\n\ _08113DCC:\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _08113DE4\n\ - ldrb r0, [r4]\n\ - adds r0, r5\n\ - adds r0, r7\n\ - subs r1, r6, 0x1\n\ - strb r1, [r0]\n\ - ldrb r0, [r4]\n\ - adds r0, 0x1\n\ - strb r0, [r4]\n\ - movs r3, 0\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08113DE4\n\ + ldrb r0, [r4]\n\ + adds r0, r5\n\ + adds r0, r7\n\ + subs r1, r6, 0x1\n\ + strb r1, [r0]\n\ + ldrb r0, [r4]\n\ + adds r0, 0x1\n\ + strb r0, [r4]\n\ + movs r3, 0\n\ _08113DE4:\n\ - adds r1, r6, 0x1\n\ - movs r0, 0x7\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _08113DF2\n\ - adds r2, 0x1D\n\ - b _08113DFC\n\ + adds r1, r6, 0x1\n\ + movs r0, 0x7\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08113DF2\n\ + adds r2, 0x1D\n\ + b _08113DFC\n\ _08113DF2:\n\ - mov r0, r9\n\ - ands r6, r0\n\ - cmp r6, 0\n\ - beq _08113DFC\n\ - adds r2, 0x1\n\ + mov r0, r9\n\ + ands r6, r0\n\ + cmp r6, 0\n\ + beq _08113DFC\n\ + adds r2, 0x1\n\ _08113DFC:\n\ - adds r6, r1, 0\n\ - cmp r6, 0x3F\n\ - ble _08113D78\n\ - cmp r3, 0\n\ - beq _08113E14\n\ - ldrb r0, [r4]\n\ - adds r0, r5\n\ - adds r0, r7\n\ - strb r6, [r0]\n\ - ldrb r0, [r4]\n\ - adds r0, 0x1\n\ - strb r0, [r4]\n\ + adds r6, r1, 0\n\ + cmp r6, 0x3F\n\ + ble _08113D78\n\ + cmp r3, 0\n\ + beq _08113E14\n\ + ldrb r0, [r4]\n\ + adds r0, r5\n\ + adds r0, r7\n\ + strb r6, [r0]\n\ + ldrb r0, [r4]\n\ + adds r0, 0x1\n\ + strb r0, [r4]\n\ _08113E14:\n\ - movs r0, 0x7\n\ - ldr r1, [sp, 0x30]\n\ - ands r1, r0\n\ - cmp r1, 0\n\ - bne _08113E24\n\ - movs r2, 0xE4\n\ - add r8, r2\n\ - b _08113E28\n\ + movs r0, 0x7\n\ + ldr r1, [sp, 0x30]\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + bne _08113E24\n\ + movs r2, 0xE4\n\ + add r8, r2\n\ + b _08113E28\n\ _08113E24:\n\ - movs r3, 0x4\n\ - add r8, r3\n\ + movs r3, 0x4\n\ + add r8, r3\n\ _08113E28:\n\ - adds r5, 0x20\n\ - adds r4, 0x1\n\ - ldr r0, [sp, 0x8]\n\ - adds r0, 0x1\n\ - str r0, [sp, 0x8]\n\ - cmp r0, 0x3F\n\ - ble _08113D6A\n\ - movs r1, 0\n\ - str r1, [sp, 0x8]\n\ + adds r5, 0x20\n\ + adds r4, 0x1\n\ + ldr r0, [sp, 0x8]\n\ + adds r0, 0x1\n\ + str r0, [sp, 0x8]\n\ + cmp r0, 0x3F\n\ + ble _08113D6A\n\ + movs r1, 0\n\ + str r1, [sp, 0x8]\n\ _08113E3A:\n\ - ldr r3, [sp, 0x8]\n\ - ldr r4, _08113EBC @ =0x02014804\n\ - adds r2, r3, r4\n\ - ldr r5, _08113EC0 @ =0x02014844\n\ - adds r1, r3, r5\n\ - ldrb r0, [r2]\n\ - adds r3, 0x1\n\ - str r3, [sp, 0x30]\n\ - ldrb r1, [r1]\n\ - cmp r0, r1\n\ - bcc _08113E52\n\ - b _08113F9E\n\ + ldr r3, [sp, 0x8]\n\ + ldr r4, _08113EBC @ =0x02014804\n\ + adds r2, r3, r4\n\ + ldr r5, _08113EC0 @ =0x02014844\n\ + adds r1, r3, r5\n\ + ldrb r0, [r2]\n\ + adds r3, 0x1\n\ + str r3, [sp, 0x30]\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + bcc _08113E52\n\ + b _08113F9E\n\ _08113E52:\n\ - movs r0, 0\n\ - str r0, [sp, 0xC]\n\ - ldrb r2, [r2]\n\ - cmp r0, r2\n\ - bge _08113F54\n\ - ldr r0, _08113EC4 @ =0x02014800\n\ - adds r0, 0x4\n\ - ldr r1, [sp, 0x8]\n\ - adds r0, r1, r0\n\ - str r0, [sp, 0x18]\n\ + movs r0, 0\n\ + str r0, [sp, 0xC]\n\ + ldrb r2, [r2]\n\ + cmp r0, r2\n\ + bge _08113F54\n\ + ldr r0, _08113EC4 @ =0x02014800\n\ + adds r0, 0x4\n\ + ldr r1, [sp, 0x8]\n\ + adds r0, r1, r0\n\ + str r0, [sp, 0x18]\n\ _08113E66:\n\ - movs r2, 0x80\n\ - lsls r2, 1\n\ - str r2, [sp, 0x14]\n\ - movs r6, 0\n\ - ldr r3, [sp, 0x8]\n\ - ldr r4, _08113EC0 @ =0x02014844\n\ - adds r0, r3, r4\n\ - ldr r5, [sp, 0xC]\n\ - adds r5, 0x1\n\ - str r5, [sp, 0x34]\n\ - ldrb r0, [r0]\n\ - cmp r6, r0\n\ - bge _08113F3E\n\ - ldr r0, _08113EC4 @ =0x02014800\n\ - mov r10, r0\n\ - lsls r0, r3, 5\n\ - ldr r2, [sp, 0xC]\n\ - adds r1, r2, r0\n\ - mov r9, r0\n\ - ldr r0, _08113EC4 @ =0x02014800\n\ - adds r0, 0xC4\n\ - mov r3, r9\n\ - adds r7, r3, r0\n\ - mov r5, r9\n\ - ldr r4, _08113EC4 @ =0x02014800\n\ - ldr r2, _08113EC8 @ =0x000010c4\n\ - adds r0, r4, r2\n\ - adds r1, r0\n\ - mov r8, r1\n\ - ldrb r3, [r1]\n\ - str r3, [sp, 0x1C]\n\ + movs r2, 0x80\n\ + lsls r2, 1\n\ + str r2, [sp, 0x14]\n\ + movs r6, 0\n\ + ldr r3, [sp, 0x8]\n\ + ldr r4, _08113EC0 @ =0x02014844\n\ + adds r0, r3, r4\n\ + ldr r5, [sp, 0xC]\n\ + adds r5, 0x1\n\ + str r5, [sp, 0x34]\n\ + ldrb r0, [r0]\n\ + cmp r6, r0\n\ + bge _08113F3E\n\ + ldr r0, _08113EC4 @ =0x02014800\n\ + mov r10, r0\n\ + lsls r0, r3, 5\n\ + ldr r2, [sp, 0xC]\n\ + adds r1, r2, r0\n\ + mov r9, r0\n\ + ldr r0, _08113EC4 @ =0x02014800\n\ + adds r0, 0xC4\n\ + mov r3, r9\n\ + adds r7, r3, r0\n\ + mov r5, r9\n\ + ldr r4, _08113EC4 @ =0x02014800\n\ + ldr r2, _08113EC8 @ =0x000010c4\n\ + adds r0, r4, r2\n\ + adds r1, r0\n\ + mov r8, r1\n\ + ldrb r3, [r1]\n\ + str r3, [sp, 0x1C]\n\ _08113EA4:\n\ - ldr r0, _08113ECC @ =0x000020c4\n\ - add r0, r10\n\ - adds r0, r5, r0\n\ - ldr r4, [sp, 0x1C]\n\ - ldrb r1, [r0]\n\ - cmp r4, r1\n\ - bls _08113ED0\n\ - mov r2, r8\n\ - ldrb r1, [r2]\n\ - ldrb r0, [r0]\n\ - b _08113ED6\n\ - .align 2, 0\n\ + ldr r0, _08113ECC @ =0x000020c4\n\ + add r0, r10\n\ + adds r0, r5, r0\n\ + ldr r4, [sp, 0x1C]\n\ + ldrb r1, [r0]\n\ + cmp r4, r1\n\ + bls _08113ED0\n\ + mov r2, r8\n\ + ldrb r1, [r2]\n\ + ldrb r0, [r0]\n\ + b _08113ED6\n\ + .align 2, 0\n\ _08113EBC: .4byte 0x02014804\n\ _08113EC0: .4byte 0x02014844\n\ _08113EC4: .4byte 0x02014800\n\ _08113EC8: .4byte 0x000010c4\n\ _08113ECC: .4byte 0x000020c4\n\ _08113ED0:\n\ - ldrb r1, [r0]\n\ - mov r3, r8\n\ - ldrb r0, [r3]\n\ + ldrb r1, [r0]\n\ + mov r3, r8\n\ + ldrb r0, [r3]\n\ _08113ED6:\n\ - subs r3, r1, r0\n\ - ldr r1, [sp, 0xC]\n\ - add r1, r9\n\ - ldr r0, _08113EFC @ =0x000018c4\n\ - add r0, r10\n\ - adds r4, r1, r0\n\ - ldr r0, _08113F00 @ =0x000028c4\n\ - add r0, r10\n\ - adds r2, r5, r0\n\ - ldrb r0, [r4]\n\ - ldr r1, _08113F04 @ =0x02014800\n\ - mov r12, r1\n\ - ldrb r1, [r2]\n\ - cmp r0, r1\n\ - bls _08113F08\n\ - adds r1, r0, 0\n\ - ldrb r0, [r2]\n\ - b _08113F0C\n\ - .align 2, 0\n\ + subs r3, r1, r0\n\ + ldr r1, [sp, 0xC]\n\ + add r1, r9\n\ + ldr r0, _08113EFC @ =0x000018c4\n\ + add r0, r10\n\ + adds r4, r1, r0\n\ + ldr r0, _08113F00 @ =0x000028c4\n\ + add r0, r10\n\ + adds r2, r5, r0\n\ + ldrb r0, [r4]\n\ + ldr r1, _08113F04 @ =0x02014800\n\ + mov r12, r1\n\ + ldrb r1, [r2]\n\ + cmp r0, r1\n\ + bls _08113F08\n\ + adds r1, r0, 0\n\ + ldrb r0, [r2]\n\ + b _08113F0C\n\ + .align 2, 0\n\ _08113EFC: .4byte 0x000018c4\n\ _08113F00: .4byte 0x000028c4\n\ _08113F04: .4byte 0x02014800\n\ _08113F08:\n\ - ldrb r1, [r2]\n\ - ldrb r0, [r4]\n\ + ldrb r1, [r2]\n\ + ldrb r0, [r4]\n\ _08113F0C:\n\ - subs r1, r0\n\ - adds r3, r1\n\ - ldr r2, [sp, 0x14]\n\ - cmp r2, r3\n\ - ble _08113F2C\n\ - ldrb r0, [r7]\n\ - cmp r0, 0\n\ - bne _08113F2C\n\ - ldr r0, _08114050 @ =0x000008c4\n\ - add r0, r12\n\ - adds r0, r5, r0\n\ - ldrb r0, [r0]\n\ - cmp r0, 0\n\ - bne _08113F2C\n\ - str r6, [sp, 0x10]\n\ - str r3, [sp, 0x14]\n\ + subs r1, r0\n\ + adds r3, r1\n\ + ldr r2, [sp, 0x14]\n\ + cmp r2, r3\n\ + ble _08113F2C\n\ + ldrb r0, [r7]\n\ + cmp r0, 0\n\ + bne _08113F2C\n\ + ldr r0, _08114050 @ =0x000008c4\n\ + add r0, r12\n\ + adds r0, r5, r0\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + bne _08113F2C\n\ + str r6, [sp, 0x10]\n\ + str r3, [sp, 0x14]\n\ _08113F2C:\n\ - adds r7, 0x1\n\ - adds r5, 0x1\n\ - adds r6, 0x1\n\ - ldr r3, [sp, 0x8]\n\ - ldr r4, _08114054 @ =0x02014844\n\ - adds r0, r3, r4\n\ - ldrb r0, [r0]\n\ - cmp r6, r0\n\ - blt _08113EA4\n\ + adds r7, 0x1\n\ + adds r5, 0x1\n\ + adds r6, 0x1\n\ + ldr r3, [sp, 0x8]\n\ + ldr r4, _08114054 @ =0x02014844\n\ + adds r0, r3, r4\n\ + ldrb r0, [r0]\n\ + cmp r6, r0\n\ + blt _08113EA4\n\ _08113F3E:\n\ - ldr r0, [sp, 0xC]\n\ - ldr r1, [sp, 0x10]\n\ - ldr r2, [sp, 0x8]\n\ - bl sub_81141F0\n\ - ldr r5, [sp, 0x34]\n\ - str r5, [sp, 0xC]\n\ - ldr r0, [sp, 0x18]\n\ - ldrb r0, [r0]\n\ - cmp r5, r0\n\ - blt _08113E66\n\ + ldr r0, [sp, 0xC]\n\ + ldr r1, [sp, 0x10]\n\ + ldr r2, [sp, 0x8]\n\ + bl sub_81141F0\n\ + ldr r5, [sp, 0x34]\n\ + str r5, [sp, 0xC]\n\ + ldr r0, [sp, 0x18]\n\ + ldrb r0, [r0]\n\ + cmp r5, r0\n\ + blt _08113E66\n\ _08113F54:\n\ - movs r6, 0\n\ - ldr r2, _08114058 @ =0x02014800\n\ - ldr r1, [sp, 0x8]\n\ - ldr r3, _08114054 @ =0x02014844\n\ - adds r0, r1, r3\n\ - adds r4, r2, 0\n\ - mov r12, r4\n\ - ldrb r0, [r0]\n\ - cmp r6, r0\n\ - bge _08113F9E\n\ - mov r0, r12\n\ - adds r0, 0x44\n\ - adds r4, r1, r0\n\ + movs r6, 0\n\ + ldr r2, _08114058 @ =0x02014800\n\ + ldr r1, [sp, 0x8]\n\ + ldr r3, _08114054 @ =0x02014844\n\ + adds r0, r1, r3\n\ + adds r4, r2, 0\n\ + mov r12, r4\n\ + ldrb r0, [r0]\n\ + cmp r6, r0\n\ + bge _08113F9E\n\ + mov r0, r12\n\ + adds r0, 0x44\n\ + adds r4, r1, r0\n\ _08113F6E:\n\ - ldr r5, [sp, 0x8]\n\ - lsls r0, r5, 5\n\ - adds r1, r6, r0\n\ - adds r0, r2, 0\n\ - adds r0, 0xC4\n\ - adds r0, r1, r0\n\ - ldrb r0, [r0]\n\ - cmp r0, 0\n\ - bne _08113F94\n\ - ldr r3, _08114050 @ =0x000008c4\n\ - adds r0, r2, r3\n\ - adds r0, r1, r0\n\ - ldrb r0, [r0]\n\ - cmp r0, 0\n\ - bne _08113F94\n\ - adds r0, r6, 0\n\ - adds r1, r5, 0\n\ - bl sub_811430C\n\ + ldr r5, [sp, 0x8]\n\ + lsls r0, r5, 5\n\ + adds r1, r6, r0\n\ + adds r0, r2, 0\n\ + adds r0, 0xC4\n\ + adds r0, r1, r0\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + bne _08113F94\n\ + ldr r3, _08114050 @ =0x000008c4\n\ + adds r0, r2, r3\n\ + adds r0, r1, r0\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + bne _08113F94\n\ + adds r0, r6, 0\n\ + adds r1, r5, 0\n\ + bl sub_811430C\n\ _08113F94:\n\ - adds r6, 0x1\n\ - ldr r2, _08114058 @ =0x02014800\n\ - ldrb r5, [r4]\n\ - cmp r6, r5\n\ - blt _08113F6E\n\ + adds r6, 0x1\n\ + ldr r2, _08114058 @ =0x02014800\n\ + ldrb r5, [r4]\n\ + cmp r6, r5\n\ + blt _08113F6E\n\ _08113F9E:\n\ - ldr r0, [sp, 0x8]\n\ - ldr r1, _0811405C @ =0x02014804\n\ - adds r2, r0, r1\n\ - ldr r3, _08114054 @ =0x02014844\n\ - adds r1, r0, r3\n\ - ldrb r0, [r2]\n\ - ldrb r1, [r1]\n\ - cmp r0, r1\n\ - bne _08113FCC\n\ - movs r6, 0\n\ - ldrb r4, [r2]\n\ - cmp r6, r4\n\ - bge _08113FCC\n\ - adds r4, r2, 0\n\ + ldr r0, [sp, 0x8]\n\ + ldr r1, _0811405C @ =0x02014804\n\ + adds r2, r0, r1\n\ + ldr r3, _08114054 @ =0x02014844\n\ + adds r1, r0, r3\n\ + ldrb r0, [r2]\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + bne _08113FCC\n\ + movs r6, 0\n\ + ldrb r4, [r2]\n\ + cmp r6, r4\n\ + bge _08113FCC\n\ + adds r4, r2, 0\n\ _08113FBA:\n\ - adds r0, r6, 0\n\ - adds r1, r6, 0\n\ - ldr r2, [sp, 0x8]\n\ - bl sub_81141F0\n\ - adds r6, 0x1\n\ - ldrb r5, [r4]\n\ - cmp r6, r5\n\ - blt _08113FBA\n\ + adds r0, r6, 0\n\ + adds r1, r6, 0\n\ + ldr r2, [sp, 0x8]\n\ + bl sub_81141F0\n\ + adds r6, 0x1\n\ + ldrb r5, [r4]\n\ + cmp r6, r5\n\ + blt _08113FBA\n\ _08113FCC:\n\ - ldr r0, [sp, 0x8]\n\ - ldr r1, _0811405C @ =0x02014804\n\ - adds r2, r0, r1\n\ - ldr r3, _08114054 @ =0x02014844\n\ - adds r1, r0, r3\n\ - ldrb r0, [r2]\n\ - ldr r4, _08114058 @ =0x02014800\n\ - ldrb r5, [r1]\n\ - cmp r0, r5\n\ - bhi _08113FE2\n\ - b _081141C4\n\ + ldr r0, [sp, 0x8]\n\ + ldr r1, _0811405C @ =0x02014804\n\ + adds r2, r0, r1\n\ + ldr r3, _08114054 @ =0x02014844\n\ + adds r1, r0, r3\n\ + ldrb r0, [r2]\n\ + ldr r4, _08114058 @ =0x02014800\n\ + ldrb r5, [r1]\n\ + cmp r0, r5\n\ + bhi _08113FE2\n\ + b _081141C4\n\ _08113FE2:\n\ - movs r0, 0\n\ - str r0, [sp, 0x10]\n\ - ldrb r1, [r1]\n\ - cmp r0, r1\n\ - blt _08113FEE\n\ - b _08114104\n\ + movs r0, 0\n\ + str r0, [sp, 0x10]\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + blt _08113FEE\n\ + b _08114104\n\ _08113FEE:\n\ - str r2, [sp, 0x2C]\n\ - ldr r1, [sp, 0x8]\n\ - lsls r1, 5\n\ - mov r9, r1\n\ - adds r0, r4, 0\n\ - adds r0, 0x44\n\ - ldr r2, [sp, 0x8]\n\ - adds r0, r2, r0\n\ - str r0, [sp, 0x20]\n\ - mov r3, r9\n\ - str r3, [sp, 0x24]\n\ + str r2, [sp, 0x2C]\n\ + ldr r1, [sp, 0x8]\n\ + lsls r1, 5\n\ + mov r9, r1\n\ + adds r0, r4, 0\n\ + adds r0, 0x44\n\ + ldr r2, [sp, 0x8]\n\ + adds r0, r2, r0\n\ + str r0, [sp, 0x20]\n\ + mov r3, r9\n\ + str r3, [sp, 0x24]\n\ _08114004:\n\ - movs r4, 0x80\n\ - lsls r4, 1\n\ - str r4, [sp, 0x14]\n\ - movs r6, 0\n\ - ldr r5, [sp, 0x10]\n\ - adds r5, 0x1\n\ - str r5, [sp, 0x38]\n\ - ldr r0, [sp, 0x2C]\n\ - ldrb r0, [r0]\n\ - cmp r6, r0\n\ - bge _081140C4\n\ - ldr r1, [sp, 0x10]\n\ - ldr r2, [sp, 0x24]\n\ - adds r1, r2\n\ - mov r10, r1\n\ - ldr r0, _08114058 @ =0x02014800\n\ - adds r0, 0xC4\n\ - adds r2, r0\n\ - mov r8, r2\n\ - ldr r7, [sp, 0x24]\n\ - ldr r3, _08114058 @ =0x02014800\n\ - ldr r4, _08114060 @ =0x000010c4\n\ - adds r0, r3, r4\n\ - adds r5, r7, r0\n\ - ldr r0, _08114064 @ =0x020168c4\n\ - add r0, r10\n\ - mov r12, r0\n\ - ldrb r1, [r0]\n\ - str r1, [sp, 0x28]\n\ + movs r4, 0x80\n\ + lsls r4, 1\n\ + str r4, [sp, 0x14]\n\ + movs r6, 0\n\ + ldr r5, [sp, 0x10]\n\ + adds r5, 0x1\n\ + str r5, [sp, 0x38]\n\ + ldr r0, [sp, 0x2C]\n\ + ldrb r0, [r0]\n\ + cmp r6, r0\n\ + bge _081140C4\n\ + ldr r1, [sp, 0x10]\n\ + ldr r2, [sp, 0x24]\n\ + adds r1, r2\n\ + mov r10, r1\n\ + ldr r0, _08114058 @ =0x02014800\n\ + adds r0, 0xC4\n\ + adds r2, r0\n\ + mov r8, r2\n\ + ldr r7, [sp, 0x24]\n\ + ldr r3, _08114058 @ =0x02014800\n\ + ldr r4, _08114060 @ =0x000010c4\n\ + adds r0, r3, r4\n\ + adds r5, r7, r0\n\ + ldr r0, _08114064 @ =0x020168c4\n\ + add r0, r10\n\ + mov r12, r0\n\ + ldrb r1, [r0]\n\ + str r1, [sp, 0x28]\n\ _0811403E:\n\ - ldrb r0, [r5]\n\ - ldr r2, [sp, 0x28]\n\ - cmp r0, r2\n\ - bls _08114068\n\ - adds r1, r0, 0\n\ - mov r3, r12\n\ - ldrb r0, [r3]\n\ - b _0811406E\n\ - .align 2, 0\n\ + ldrb r0, [r5]\n\ + ldr r2, [sp, 0x28]\n\ + cmp r0, r2\n\ + bls _08114068\n\ + adds r1, r0, 0\n\ + mov r3, r12\n\ + ldrb r0, [r3]\n\ + b _0811406E\n\ + .align 2, 0\n\ _08114050: .4byte 0x000008c4\n\ _08114054: .4byte 0x02014844\n\ _08114058: .4byte 0x02014800\n\ @@ -1881,135 +2198,135 @@ _0811405C: .4byte 0x02014804\n\ _08114060: .4byte 0x000010c4\n\ _08114064: .4byte 0x020168c4\n\ _08114068:\n\ - mov r4, r12\n\ - ldrb r1, [r4]\n\ - ldrb r0, [r5]\n\ + mov r4, r12\n\ + ldrb r1, [r4]\n\ + ldrb r0, [r5]\n\ _0811406E:\n\ - subs r3, r1, r0\n\ - ldr r1, _0811408C @ =0x02014800\n\ - ldr r2, _08114090 @ =0x000018c4\n\ - adds r0, r1, r2\n\ - adds r4, r7, r0\n\ - ldr r2, _08114094 @ =0x020170c4\n\ - add r2, r10\n\ - ldrb r0, [r4]\n\ - ldrb r1, [r2]\n\ - cmp r0, r1\n\ - bls _08114098\n\ - adds r1, r0, 0\n\ - ldrb r0, [r2]\n\ - b _0811409C\n\ - .align 2, 0\n\ + subs r3, r1, r0\n\ + ldr r1, _0811408C @ =0x02014800\n\ + ldr r2, _08114090 @ =0x000018c4\n\ + adds r0, r1, r2\n\ + adds r4, r7, r0\n\ + ldr r2, _08114094 @ =0x020170c4\n\ + add r2, r10\n\ + ldrb r0, [r4]\n\ + ldrb r1, [r2]\n\ + cmp r0, r1\n\ + bls _08114098\n\ + adds r1, r0, 0\n\ + ldrb r0, [r2]\n\ + b _0811409C\n\ + .align 2, 0\n\ _0811408C: .4byte 0x02014800\n\ _08114090: .4byte 0x000018c4\n\ _08114094: .4byte 0x020170c4\n\ _08114098:\n\ - ldrb r1, [r2]\n\ - ldrb r0, [r4]\n\ + ldrb r1, [r2]\n\ + ldrb r0, [r4]\n\ _0811409C:\n\ - subs r1, r0\n\ - adds r3, r1\n\ - ldr r2, [sp, 0x14]\n\ - cmp r2, r3\n\ - ble _081140B2\n\ - mov r4, r8\n\ - ldrb r0, [r4]\n\ - cmp r0, 0\n\ - bne _081140B2\n\ - str r6, [sp, 0xC]\n\ - str r3, [sp, 0x14]\n\ + subs r1, r0\n\ + adds r3, r1\n\ + ldr r2, [sp, 0x14]\n\ + cmp r2, r3\n\ + ble _081140B2\n\ + mov r4, r8\n\ + ldrb r0, [r4]\n\ + cmp r0, 0\n\ + bne _081140B2\n\ + str r6, [sp, 0xC]\n\ + str r3, [sp, 0x14]\n\ _081140B2:\n\ - movs r0, 0x1\n\ - add r8, r0\n\ - adds r7, 0x1\n\ - adds r5, 0x1\n\ - adds r6, 0x1\n\ - ldr r1, [sp, 0x2C]\n\ - ldrb r1, [r1]\n\ - cmp r6, r1\n\ - blt _0811403E\n\ + movs r0, 0x1\n\ + add r8, r0\n\ + adds r7, 0x1\n\ + adds r5, 0x1\n\ + adds r6, 0x1\n\ + ldr r1, [sp, 0x2C]\n\ + ldrb r1, [r1]\n\ + cmp r6, r1\n\ + blt _0811403E\n\ _081140C4:\n\ - ldr r3, [sp, 0xC]\n\ - add r3, r9\n\ - ldr r2, _08114164 @ =0x02014800\n\ - ldr r4, _08114168 @ =0x000030c4\n\ - adds r1, r2, r4\n\ - adds r1, r3, r1\n\ - ldr r2, [sp, 0x10]\n\ - add r2, r9\n\ - ldr r5, _0811416C @ =0x020168c4\n\ - adds r0, r2, r5\n\ - ldrb r0, [r0]\n\ - strb r0, [r1]\n\ - ldr r0, _08114164 @ =0x02014800\n\ - ldr r4, _08114170 @ =0x000038c4\n\ - adds r1, r0, r4\n\ - adds r1, r3, r1\n\ - ldr r5, _08114174 @ =0x020170c4\n\ - adds r2, r5\n\ - ldrb r0, [r2]\n\ - strb r0, [r1]\n\ - ldr r0, _08114164 @ =0x02014800\n\ - adds r0, 0xC4\n\ - adds r3, r0\n\ - movs r0, 0x1\n\ - strb r0, [r3]\n\ - ldr r0, [sp, 0x38]\n\ - str r0, [sp, 0x10]\n\ - ldr r1, [sp, 0x20]\n\ - ldrb r1, [r1]\n\ - cmp r0, r1\n\ - bge _08114104\n\ - b _08114004\n\ + ldr r3, [sp, 0xC]\n\ + add r3, r9\n\ + ldr r2, _08114164 @ =0x02014800\n\ + ldr r4, _08114168 @ =0x000030c4\n\ + adds r1, r2, r4\n\ + adds r1, r3, r1\n\ + ldr r2, [sp, 0x10]\n\ + add r2, r9\n\ + ldr r5, _0811416C @ =0x020168c4\n\ + adds r0, r2, r5\n\ + ldrb r0, [r0]\n\ + strb r0, [r1]\n\ + ldr r0, _08114164 @ =0x02014800\n\ + ldr r4, _08114170 @ =0x000038c4\n\ + adds r1, r0, r4\n\ + adds r1, r3, r1\n\ + ldr r5, _08114174 @ =0x020170c4\n\ + adds r2, r5\n\ + ldrb r0, [r2]\n\ + strb r0, [r1]\n\ + ldr r0, _08114164 @ =0x02014800\n\ + adds r0, 0xC4\n\ + adds r3, r0\n\ + movs r0, 0x1\n\ + strb r0, [r3]\n\ + ldr r0, [sp, 0x38]\n\ + str r0, [sp, 0x10]\n\ + ldr r1, [sp, 0x20]\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + bge _08114104\n\ + b _08114004\n\ _08114104:\n\ - movs r6, 0\n\ - ldr r4, _08114164 @ =0x02014800\n\ - ldr r2, [sp, 0x8]\n\ - ldr r3, _08114178 @ =0x02014804\n\ - adds r0, r2, r3\n\ - ldrb r0, [r0]\n\ - cmp r6, r0\n\ - bge _081141C4\n\ - adds r7, r4, 0\n\ - mov r9, r6\n\ - movs r5, 0xC4\n\ - adds r5, r7\n\ - mov r8, r5\n\ + movs r6, 0\n\ + ldr r4, _08114164 @ =0x02014800\n\ + ldr r2, [sp, 0x8]\n\ + ldr r3, _08114178 @ =0x02014804\n\ + adds r0, r2, r3\n\ + ldrb r0, [r0]\n\ + cmp r6, r0\n\ + bge _081141C4\n\ + adds r7, r4, 0\n\ + mov r9, r6\n\ + movs r5, 0xC4\n\ + adds r5, r7\n\ + mov r8, r5\n\ _0811411E:\n\ - ldr r1, [sp, 0x8]\n\ - lsls r0, r1, 5\n\ - adds r2, r6, r0\n\ - ldr r3, _0811417C @ =0x000020c4\n\ - adds r0, r7, r3\n\ - adds r0, r2\n\ - mov r10, r0\n\ - ldr r5, _08114168 @ =0x000030c4\n\ - adds r0, r7, r5\n\ - adds r0, r2, r0\n\ - ldrb r0, [r0]\n\ - mov r1, r10\n\ - strb r0, [r1]\n\ - ldr r3, _08114180 @ =0x000028c4\n\ - adds r0, r7, r3\n\ - adds r3, r2, r0\n\ - ldr r5, _08114170 @ =0x000038c4\n\ - adds r0, r7, r5\n\ - adds r0, r2, r0\n\ - ldrb r0, [r0]\n\ - strb r0, [r3]\n\ - mov r0, r8\n\ - adds r1, r2, r0\n\ - ldrb r0, [r1]\n\ - cmp r0, 0\n\ - beq _08114184\n\ - mov r2, r9\n\ - strb r2, [r1]\n\ - adds r0, r6, 0\n\ - adds r1, r6, 0\n\ - ldr r2, [sp, 0x8]\n\ - bl sub_81141F0\n\ - b _081141B4\n\ - .align 2, 0\n\ + ldr r1, [sp, 0x8]\n\ + lsls r0, r1, 5\n\ + adds r2, r6, r0\n\ + ldr r3, _0811417C @ =0x000020c4\n\ + adds r0, r7, r3\n\ + adds r0, r2\n\ + mov r10, r0\n\ + ldr r5, _08114168 @ =0x000030c4\n\ + adds r0, r7, r5\n\ + adds r0, r2, r0\n\ + ldrb r0, [r0]\n\ + mov r1, r10\n\ + strb r0, [r1]\n\ + ldr r3, _08114180 @ =0x000028c4\n\ + adds r0, r7, r3\n\ + adds r3, r2, r0\n\ + ldr r5, _08114170 @ =0x000038c4\n\ + adds r0, r7, r5\n\ + adds r0, r2, r0\n\ + ldrb r0, [r0]\n\ + strb r0, [r3]\n\ + mov r0, r8\n\ + adds r1, r2, r0\n\ + ldrb r0, [r1]\n\ + cmp r0, 0\n\ + beq _08114184\n\ + mov r2, r9\n\ + strb r2, [r1]\n\ + adds r0, r6, 0\n\ + adds r1, r6, 0\n\ + ldr r2, [sp, 0x8]\n\ + bl sub_81141F0\n\ + b _081141B4\n\ + .align 2, 0\n\ _08114164: .4byte 0x02014800\n\ _08114168: .4byte 0x000030c4\n\ _0811416C: .4byte 0x020168c4\n\ @@ -2019,54 +2336,54 @@ _08114178: .4byte 0x02014804\n\ _0811417C: .4byte 0x000020c4\n\ _08114180: .4byte 0x000028c4\n\ _08114184:\n\ - ldr r5, _081141E0 @ =0x000010c4\n\ - adds r1, r4, r5\n\ - adds r1, r2, r1\n\ - ldr r5, _081141E4 @ =0x000018c4\n\ - adds r0, r4, r5\n\ - adds r0, r2, r0\n\ - ldrb r0, [r0]\n\ - ldrb r2, [r1]\n\ - subs r0, r2\n\ - lsrs r1, r0, 31\n\ - adds r0, r1\n\ - asrs r0, 1\n\ - adds r2, r0\n\ - strb r2, [r3]\n\ - mov r0, r10\n\ - strb r2, [r0]\n\ - ldrb r0, [r3]\n\ - subs r0, 0x1\n\ - strb r0, [r3]\n\ - adds r0, r6, 0\n\ - adds r1, r6, 0\n\ - ldr r2, [sp, 0x8]\n\ - bl sub_81141F0\n\ + ldr r5, _081141E0 @ =0x000010c4\n\ + adds r1, r4, r5\n\ + adds r1, r2, r1\n\ + ldr r5, _081141E4 @ =0x000018c4\n\ + adds r0, r4, r5\n\ + adds r0, r2, r0\n\ + ldrb r0, [r0]\n\ + ldrb r2, [r1]\n\ + subs r0, r2\n\ + lsrs r1, r0, 31\n\ + adds r0, r1\n\ + asrs r0, 1\n\ + adds r2, r0\n\ + strb r2, [r3]\n\ + mov r0, r10\n\ + strb r2, [r0]\n\ + ldrb r0, [r3]\n\ + subs r0, 0x1\n\ + strb r0, [r3]\n\ + adds r0, r6, 0\n\ + adds r1, r6, 0\n\ + ldr r2, [sp, 0x8]\n\ + bl sub_81141F0\n\ _081141B4:\n\ - adds r6, 0x1\n\ - ldr r4, _081141E8 @ =0x02014800\n\ - ldr r1, [sp, 0x8]\n\ - ldr r2, _081141EC @ =0x02014804\n\ - adds r0, r1, r2\n\ - ldrb r0, [r0]\n\ - cmp r6, r0\n\ - blt _0811411E\n\ + adds r6, 0x1\n\ + ldr r4, _081141E8 @ =0x02014800\n\ + ldr r1, [sp, 0x8]\n\ + ldr r2, _081141EC @ =0x02014804\n\ + adds r0, r1, r2\n\ + ldrb r0, [r0]\n\ + cmp r6, r0\n\ + blt _0811411E\n\ _081141C4:\n\ - ldr r3, [sp, 0x30]\n\ - str r3, [sp, 0x8]\n\ - cmp r3, 0x3F\n\ - bgt _081141CE\n\ - b _08113E3A\n\ + ldr r3, [sp, 0x30]\n\ + str r3, [sp, 0x8]\n\ + cmp r3, 0x3F\n\ + bgt _081141CE\n\ + b _08113E3A\n\ _081141CE:\n\ - add sp, 0x3C\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\ + add sp, 0x3C\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\ _081141E0: .4byte 0x000010c4\n\ _081141E4: .4byte 0x000018c4\n\ _081141E8: .4byte 0x02014800\n\ @@ -2074,1557 +2391,1308 @@ _081141EC: .4byte 0x02014804\n\ .syntax divided"); } -__attribute__((naked)) -void sub_81141F0() +void sub_81141F0(s32 a, s32 b, s32 c) { - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r9\n\ - mov r6, r8\n\ - push {r6,r7}\n\ - adds r6, r0, 0\n\ - mov r8, r1\n\ - mov r9, r2\n\ - ldr r3, _0811424C @ =0x02014800\n\ - lsls r1, r2, 5\n\ - mov r0, r8\n\ - adds r4, r0, r1\n\ - ldr r5, _08114250 @ =0x000030c4\n\ - adds r2, r3, r5\n\ - adds r2, r4, r2\n\ - adds r1, r6, r1\n\ - ldr r7, _08114254 @ =0x000010c4\n\ - adds r0, r3, r7\n\ - adds r5, r1, r0\n\ - ldrb r0, [r5]\n\ - strb r0, [r2]\n\ - ldr r0, _08114258 @ =0x000038c4\n\ - adds r2, r3, r0\n\ - adds r2, r4, r2\n\ - ldr r7, _0811425C @ =0x000018c4\n\ - adds r0, r3, r7\n\ - adds r1, r0\n\ - ldrb r0, [r1]\n\ - strb r0, [r2]\n\ - movs r7, 0\n\ - ldr r1, _08114260 @ =0x000020c4\n\ - adds r0, r3, r1\n\ - adds r2, r4, r0\n\ - ldrb r1, [r5]\n\ - ldrb r0, [r2]\n\ - mov r12, r3\n\ - cmp r1, r0\n\ - bcs _08114264\n\ - mov r0, r12\n\ - adds r0, 0xC4\n\ - adds r0, r4, r0\n\ - movs r1, 0x4\n\ - strb r1, [r0]\n\ - ldrb r1, [r2]\n\ - ldrb r0, [r5]\n\ - b _08114276\n\ - .align 2, 0\n\ -_0811424C: .4byte 0x02014800\n\ -_08114250: .4byte 0x000030c4\n\ -_08114254: .4byte 0x000010c4\n\ -_08114258: .4byte 0x000038c4\n\ -_0811425C: .4byte 0x000018c4\n\ -_08114260: .4byte 0x000020c4\n\ -_08114264:\n\ - cmp r1, r0\n\ - bls _08114278\n\ - mov r0, r12\n\ - adds r0, 0xC4\n\ - adds r0, r4, r0\n\ - movs r1, 0x1\n\ - strb r1, [r0]\n\ - ldrb r1, [r5]\n\ - ldrb r0, [r2]\n\ -_08114276:\n\ - subs r7, r1, r0\n\ -_08114278:\n\ - mov r5, r8\n\ - lsls r3, r5, 1\n\ - mov r0, r9\n\ - lsls r4, r0, 6\n\ - adds r0, r3, r4\n\ - ldr r1, _081142BC @ =0x000080c4\n\ - add r1, r12\n\ - adds r0, r1\n\ - lsls r1, r7, 4\n\ - strh r1, [r0]\n\ - movs r7, 0\n\ - mov r1, r9\n\ - lsls r2, r1, 5\n\ - adds r1, r6, r2\n\ - ldr r0, _081142C0 @ =0x000018c4\n\ - add r0, r12\n\ - adds r6, r1, r0\n\ - adds r1, r5, r2\n\ - ldr r0, _081142C4 @ =0x000028c4\n\ - add r0, r12\n\ - adds r5, r1, r0\n\ - ldrb r2, [r6]\n\ - ldrb r0, [r5]\n\ - cmp r2, r0\n\ - bcs _081142CC\n\ - ldr r0, _081142C8 @ =0x000008c4\n\ - add r0, r12\n\ - adds r0, r1, r0\n\ - movs r1, 0x3\n\ - strb r1, [r0]\n\ - ldrb r1, [r5]\n\ - ldrb r0, [r6]\n\ - b _081142DE\n\ - .align 2, 0\n\ -_081142BC: .4byte 0x000080c4\n\ -_081142C0: .4byte 0x000018c4\n\ -_081142C4: .4byte 0x000028c4\n\ -_081142C8: .4byte 0x000008c4\n\ -_081142CC:\n\ - cmp r2, r0\n\ - bls _081142E0\n\ - ldr r0, _08114304 @ =0x000008c4\n\ - add r0, r12\n\ - adds r0, r1, r0\n\ - movs r1, 0x2\n\ - strb r1, [r0]\n\ - ldrb r1, [r6]\n\ - ldrb r0, [r5]\n\ -_081142DE:\n\ - subs r7, r1, r0\n\ -_081142E0:\n\ - adds r0, r3, r4\n\ - ldr r1, _08114308 @ =0x000090c4\n\ - add r1, r12\n\ - adds r0, r1\n\ - lsls r1, r7, 4\n\ - strh r1, [r0]\n\ - mov r1, r12\n\ - adds r1, 0x84\n\ - add r1, r9\n\ - ldrb r0, [r1]\n\ - adds r0, 0x1\n\ - strb r0, [r1]\n\ - pop {r3,r4}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_08114304: .4byte 0x000008c4\n\ -_08114308: .4byte 0x000090c4\n\ - .syntax divided"); + u32 r7; + + sEvoInfo.unk30C4[c][b] = sEvoInfo.unk10C4[c][a]; + sEvoInfo.unk38C4[c][b] = sEvoInfo.unk18C4[c][a]; + + r7 = 0; + if (sEvoInfo.unk10C4[c][a] < sEvoInfo.unk20C4[c][b]) + { + sEvoInfo.unkC4[c][b] = 4; + r7 = sEvoInfo.unk20C4[c][b] - sEvoInfo.unk10C4[c][a]; + } + else if (sEvoInfo.unk10C4[c][a] > sEvoInfo.unk20C4[c][b]) + { + sEvoInfo.unkC4[c][b] = 1; + r7 = sEvoInfo.unk10C4[c][a] - sEvoInfo.unk20C4[c][b]; + } + sEvoInfo.unk80C4[c][b] = r7 * 16; + + r7 = 0; + if (sEvoInfo.unk18C4[c][a] < sEvoInfo.unk28C4[c][b]) + { + sEvoInfo.unk8C4[c][b] = 3; + r7 = sEvoInfo.unk28C4[c][b] - sEvoInfo.unk18C4[c][a]; + } + else if (sEvoInfo.unk18C4[c][a] > sEvoInfo.unk28C4[c][b]) + { + sEvoInfo.unk8C4[c][b] = 2; + r7 = sEvoInfo.unk18C4[c][a] - sEvoInfo.unk28C4[c][b]; + } + sEvoInfo.unk90C4[c][b] = r7 * 16; + + sEvoInfo.unk84[c]++; } -__attribute__((naked)) -void sub_811430C() +void sub_811430C(u32 a, u32 b) { - 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\ - ldr r5, _081143AC @ =0x02014800\n\ - lsls r4, r1, 5\n\ - adds r4, r0, r4\n\ - ldr r2, _081143B0 @ =0x000028c4\n\ - adds r2, r5\n\ - mov r10, r2\n\ - add r10, r4\n\ - mov r3, r10\n\ - ldrb r2, [r3]\n\ - ldr r6, _081143B4 @ =0x000020c4\n\ - adds r6, r5\n\ - mov r8, r6\n\ - add r8, r4\n\ - mov r6, r8\n\ - ldrb r3, [r6]\n\ - subs r7, r2, r3\n\ - ldr r2, _081143B8 @ =0x000030c4\n\ - adds r6, r5, r2\n\ - adds r6, r4, r6\n\ - ldr r2, _081143BC @ =0x000038c4\n\ - adds r2, r5\n\ - mov r9, r2\n\ - add r9, r4\n\ - lsrs r2, r7, 31\n\ - adds r2, r7, r2\n\ - asrs r2, 1\n\ - adds r3, r2\n\ - mov r2, r9\n\ - strb r3, [r2]\n\ - strb r3, [r6]\n\ - adds r2, r5, 0\n\ - adds r2, 0xC4\n\ - adds r2, r4, r2\n\ - movs r3, 0x5\n\ - strb r3, [r2]\n\ - ldr r3, _081143C0 @ =0x000008c4\n\ - adds r2, r5, r3\n\ - adds r4, r2\n\ - movs r2, 0x7\n\ - strb r2, [r4]\n\ - adds r3, r5, 0\n\ - adds r3, 0x84\n\ - adds r3, r1, r3\n\ - ldrb r2, [r3]\n\ - adds r2, 0x1\n\ - strb r2, [r3]\n\ - ldrb r3, [r6]\n\ - mov r4, r8\n\ - ldrb r2, [r4]\n\ - subs r7, r3, r2\n\ - lsls r0, 1\n\ - lsls r1, 6\n\ - adds r0, r1\n\ - ldr r6, _081143C4 @ =0x000080c4\n\ - adds r1, r5, r6\n\ - adds r1, r0, r1\n\ - lsls r2, r7, 4\n\ - strh r2, [r1]\n\ - mov r1, r10\n\ - ldrb r2, [r1]\n\ - mov r3, r9\n\ - ldrb r1, [r3]\n\ - subs r7, r2, r1\n\ - ldr r4, _081143C8 @ =0x000090c4\n\ - adds r5, r4\n\ - adds r0, r5\n\ - lsls r1, r7, 4\n\ - strh r1, [r0]\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\ -_081143AC: .4byte 0x02014800\n\ -_081143B0: .4byte 0x000028c4\n\ -_081143B4: .4byte 0x000020c4\n\ -_081143B8: .4byte 0x000030c4\n\ -_081143BC: .4byte 0x000038c4\n\ -_081143C0: .4byte 0x000008c4\n\ -_081143C4: .4byte 0x000080c4\n\ -_081143C8: .4byte 0x000090c4\n\ - .syntax divided"); + u8 r2 = sEvoInfo.unk28C4[b][a]; + u8 r3 = sEvoInfo.unk20C4[b][a]; + s32 r7 = r2 - r3; + + sEvoInfo.unk30C4[b][a] = sEvoInfo.unk38C4[b][a] = r3 + r7 / 2; + sEvoInfo.unkC4[b][a] = 5; + sEvoInfo.unk8C4[b][a] = 7; + sEvoInfo.unk84[b]++; + r7 = sEvoInfo.unk30C4[b][a] - sEvoInfo.unk20C4[b][a]; + sEvoInfo.unk80C4[b][a] = r7 * 16; + r7 = sEvoInfo.unk28C4[b][a] - sEvoInfo.unk38C4[b][a]; + sEvoInfo.unk90C4[b][a] = r7 * 16; } __attribute__((naked)) void unref_sub_81143CC() { asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x14\n\ - movs r0, 0x1\n\ - str r0, [sp, 0x4]\n\ - ldr r0, _08114408 @ =0x02014800\n\ - ldr r2, _0811440C @ =0x0000a0c4\n\ - adds r1, r0, r2\n\ - ldrb r3, [r1]\n\ - adds r4, r0, 0\n\ - cmp r3, 0\n\ - beq _081143EE\n\ - subs r0, r3, 0x1\n\ - strb r0, [r1]\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x14\n\ + movs r0, 0x1\n\ + str r0, [sp, 0x4]\n\ + ldr r0, _08114408 @ =0x02014800\n\ + ldr r2, _0811440C @ =0x0000a0c4\n\ + adds r1, r0, r2\n\ + ldrb r3, [r1]\n\ + adds r4, r0, 0\n\ + cmp r3, 0\n\ + beq _081143EE\n\ + subs r0, r3, 0x1\n\ + strb r0, [r1]\n\ _081143EE:\n\ - movs r5, 0\n\ - str r5, [sp]\n\ + movs r5, 0\n\ + str r5, [sp]\n\ _081143F2:\n\ - movs r3, 0\n\ - adds r2, r4, 0\n\ - adds r0, r4, 0\n\ - adds r0, 0x84\n\ - ldr r1, [sp]\n\ - adds r0, r1, r0\n\ - adds r1, 0x1\n\ - str r1, [sp, 0x8]\n\ - bl _08114D84\n\ - .align 2, 0\n\ + movs r3, 0\n\ + adds r2, r4, 0\n\ + adds r0, r4, 0\n\ + adds r0, 0x84\n\ + ldr r1, [sp]\n\ + adds r0, r1, r0\n\ + adds r1, 0x1\n\ + str r1, [sp, 0x8]\n\ + bl _08114D84\n\ + .align 2, 0\n\ _08114408: .4byte 0x02014800\n\ _0811440C: .4byte 0x0000a0c4\n\ _08114410:\n\ - ldr r5, [sp]\n\ - lsls r0, r5, 5\n\ - adds r1, r3, r0\n\ - adds r2, 0xC4\n\ - adds r1, r2\n\ - ldrb r2, [r1]\n\ - mov r8, r0\n\ - adds r0, r3, 0x1\n\ - mov r10, r0\n\ - cmp r2, 0xC\n\ - bls _08114428\n\ - b _081148D2\n\ + ldr r5, [sp]\n\ + lsls r0, r5, 5\n\ + adds r1, r3, r0\n\ + adds r2, 0xC4\n\ + adds r1, r2\n\ + ldrb r2, [r1]\n\ + mov r8, r0\n\ + adds r0, r3, 0x1\n\ + mov r10, r0\n\ + cmp r2, 0xC\n\ + bls _08114428\n\ + b _081148D2\n\ _08114428:\n\ - lsls r0, r2, 2\n\ - ldr r1, _08114434 @ =_08114438\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ + lsls r0, r2, 2\n\ + ldr r1, _08114434 @ =_08114438\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ _08114434: .4byte _08114438\n\ - .align 2, 0\n\ + .align 2, 0\n\ _08114438:\n\ - .4byte _081148D2\n\ - .4byte _0811446C\n\ - .4byte _081144F0\n\ - .4byte _0811457C\n\ - .4byte _08114600\n\ - .4byte _0811468C\n\ - .4byte _081146C8\n\ - .4byte _08114704\n\ - .4byte _08114740\n\ - .4byte _0811477C\n\ - .4byte _081147D0\n\ - .4byte _08114810\n\ - .4byte _08114858\n\ + .4byte _081148D2\n\ + .4byte _0811446C\n\ + .4byte _081144F0\n\ + .4byte _0811457C\n\ + .4byte _08114600\n\ + .4byte _0811468C\n\ + .4byte _081146C8\n\ + .4byte _08114704\n\ + .4byte _08114740\n\ + .4byte _0811477C\n\ + .4byte _081147D0\n\ + .4byte _08114810\n\ + .4byte _08114858\n\ _0811446C:\n\ - movs r1, 0\n\ - str r1, [sp, 0x4]\n\ - lsls r0, r3, 1\n\ - ldr r2, [sp]\n\ - lsls r1, r2, 6\n\ - adds r0, r1\n\ - ldr r5, _081144E0 @ =0x000060c4\n\ - adds r2, r4, r5\n\ - adds r2, r0, r2\n\ - ldr r5, _081144E4 @ =0x000080c4\n\ - adds r1, r4, r5\n\ - adds r0, r1\n\ - ldrh r1, [r0]\n\ - ldrh r0, [r2]\n\ - adds r1, r0\n\ - movs r0, 0xFF\n\ - lsls r0, 8\n\ - ands r0, r1\n\ - lsrs r5, r0, 8\n\ - movs r0, 0xFF\n\ - ands r1, r0\n\ - strh r1, [r2]\n\ - movs r6, 0\n\ - adds r1, r3, 0x1\n\ - mov r10, r1\n\ - ldr r2, [sp, 0x4]\n\ - cmp r2, r5\n\ - blt _081144A6\n\ - b _081148D2\n\ + movs r1, 0\n\ + str r1, [sp, 0x4]\n\ + lsls r0, r3, 1\n\ + ldr r2, [sp]\n\ + lsls r1, r2, 6\n\ + adds r0, r1\n\ + ldr r5, _081144E0 @ =0x000060c4\n\ + adds r2, r4, r5\n\ + adds r2, r0, r2\n\ + ldr r5, _081144E4 @ =0x000080c4\n\ + adds r1, r4, r5\n\ + adds r0, r1\n\ + ldrh r1, [r0]\n\ + ldrh r0, [r2]\n\ + adds r1, r0\n\ + movs r0, 0xFF\n\ + lsls r0, 8\n\ + ands r0, r1\n\ + lsrs r5, r0, 8\n\ + movs r0, 0xFF\n\ + ands r1, r0\n\ + strh r1, [r2]\n\ + movs r6, 0\n\ + adds r1, r3, 0x1\n\ + mov r10, r1\n\ + ldr r2, [sp, 0x4]\n\ + cmp r2, r5\n\ + blt _081144A6\n\ + b _081148D2\n\ _081144A6:\n\ - mov r9, r4\n\ - mov r4, r8\n\ - adds r7, r3, r4\n\ - ldr r0, _081144E8 @ =0x000030c4\n\ - add r0, r9\n\ - adds r4, r7, r0\n\ - ldr r0, _081144EC @ =0x000020c4\n\ - add r0, r9\n\ - adds r2, r7, r0\n\ + mov r9, r4\n\ + mov r4, r8\n\ + adds r7, r3, r4\n\ + ldr r0, _081144E8 @ =0x000030c4\n\ + add r0, r9\n\ + adds r4, r7, r0\n\ + ldr r0, _081144EC @ =0x000020c4\n\ + add r0, r9\n\ + adds r2, r7, r0\n\ _081144B8:\n\ - ldrb r0, [r4]\n\ - subs r0, 0x1\n\ - strb r0, [r4]\n\ - ldrb r1, [r4]\n\ - ldr r0, [sp]\n\ - str r2, [sp, 0xC]\n\ - str r3, [sp, 0x10]\n\ - bl sub_8114DB4\n\ - ldrb r0, [r4]\n\ - ldr r2, [sp, 0xC]\n\ - ldr r3, [sp, 0x10]\n\ - ldrb r1, [r2]\n\ - cmp r0, r1\n\ - bne _081144D8\n\ - b _081148A0\n\ + ldrb r0, [r4]\n\ + subs r0, 0x1\n\ + strb r0, [r4]\n\ + ldrb r1, [r4]\n\ + ldr r0, [sp]\n\ + str r2, [sp, 0xC]\n\ + str r3, [sp, 0x10]\n\ + bl sub_8114DB4\n\ + ldrb r0, [r4]\n\ + ldr r2, [sp, 0xC]\n\ + ldr r3, [sp, 0x10]\n\ + ldrb r1, [r2]\n\ + cmp r0, r1\n\ + bne _081144D8\n\ + b _081148A0\n\ _081144D8:\n\ - adds r6, 0x1\n\ - cmp r6, r5\n\ - blt _081144B8\n\ - b _081148D2\n\ - .align 2, 0\n\ + adds r6, 0x1\n\ + cmp r6, r5\n\ + blt _081144B8\n\ + b _081148D2\n\ + .align 2, 0\n\ _081144E0: .4byte 0x000060c4\n\ _081144E4: .4byte 0x000080c4\n\ _081144E8: .4byte 0x000030c4\n\ _081144EC: .4byte 0x000020c4\n\ _081144F0:\n\ - movs r2, 0\n\ - str r2, [sp, 0x4]\n\ - ldr r4, _08114568 @ =0x02014800\n\ - lsls r0, r3, 1\n\ - ldr r5, [sp]\n\ - lsls r1, r5, 6\n\ - adds r0, r1\n\ - ldr r1, _0811456C @ =0x000060c4\n\ - adds r2, r4, r1\n\ - adds r2, r0, r2\n\ - ldr r5, _08114570 @ =0x000080c4\n\ - adds r1, r4, r5\n\ - adds r0, r1\n\ - ldrh r1, [r0]\n\ - ldrh r0, [r2]\n\ - adds r1, r0\n\ - movs r0, 0xFF\n\ - lsls r0, 8\n\ - ands r0, r1\n\ - lsrs r5, r0, 8\n\ - movs r0, 0xFF\n\ - ands r1, r0\n\ - strh r1, [r2]\n\ - movs r6, 0\n\ - adds r1, r3, 0x1\n\ - mov r10, r1\n\ - ldr r2, [sp, 0x4]\n\ - cmp r2, r5\n\ - blt _0811452C\n\ - b _081148D2\n\ + movs r2, 0\n\ + str r2, [sp, 0x4]\n\ + ldr r4, _08114568 @ =0x02014800\n\ + lsls r0, r3, 1\n\ + ldr r5, [sp]\n\ + lsls r1, r5, 6\n\ + adds r0, r1\n\ + ldr r1, _0811456C @ =0x000060c4\n\ + adds r2, r4, r1\n\ + adds r2, r0, r2\n\ + ldr r5, _08114570 @ =0x000080c4\n\ + adds r1, r4, r5\n\ + adds r0, r1\n\ + ldrh r1, [r0]\n\ + ldrh r0, [r2]\n\ + adds r1, r0\n\ + movs r0, 0xFF\n\ + lsls r0, 8\n\ + ands r0, r1\n\ + lsrs r5, r0, 8\n\ + movs r0, 0xFF\n\ + ands r1, r0\n\ + strh r1, [r2]\n\ + movs r6, 0\n\ + adds r1, r3, 0x1\n\ + mov r10, r1\n\ + ldr r2, [sp, 0x4]\n\ + cmp r2, r5\n\ + blt _0811452C\n\ + b _081148D2\n\ _0811452C:\n\ - mov r9, r4\n\ - mov r4, r8\n\ - adds r7, r3, r4\n\ - ldr r0, _08114574 @ =0x000030c4\n\ - add r0, r9\n\ - adds r4, r7, r0\n\ - ldr r0, _08114578 @ =0x000020c4\n\ - add r0, r9\n\ - adds r2, r7, r0\n\ + mov r9, r4\n\ + mov r4, r8\n\ + adds r7, r3, r4\n\ + ldr r0, _08114574 @ =0x000030c4\n\ + add r0, r9\n\ + adds r4, r7, r0\n\ + ldr r0, _08114578 @ =0x000020c4\n\ + add r0, r9\n\ + adds r2, r7, r0\n\ _0811453E:\n\ - ldrb r0, [r4]\n\ - ldrb r1, [r2]\n\ - cmp r0, r1\n\ - bne _08114548\n\ - b _081148B8\n\ + ldrb r0, [r4]\n\ + ldrb r1, [r2]\n\ + cmp r0, r1\n\ + bne _08114548\n\ + b _081148B8\n\ _08114548:\n\ - adds r1, r0, 0\n\ - ldr r0, [sp]\n\ - str r2, [sp, 0xC]\n\ - str r3, [sp, 0x10]\n\ - bl sub_8114DF0\n\ - ldrb r0, [r4]\n\ - subs r0, 0x1\n\ - strb r0, [r4]\n\ - adds r6, 0x1\n\ - ldr r2, [sp, 0xC]\n\ - ldr r3, [sp, 0x10]\n\ - cmp r6, r5\n\ - blt _0811453E\n\ - b _081148D2\n\ - .align 2, 0\n\ + adds r1, r0, 0\n\ + ldr r0, [sp]\n\ + str r2, [sp, 0xC]\n\ + str r3, [sp, 0x10]\n\ + bl sub_8114DF0\n\ + ldrb r0, [r4]\n\ + subs r0, 0x1\n\ + strb r0, [r4]\n\ + adds r6, 0x1\n\ + ldr r2, [sp, 0xC]\n\ + ldr r3, [sp, 0x10]\n\ + cmp r6, r5\n\ + blt _0811453E\n\ + b _081148D2\n\ + .align 2, 0\n\ _08114568: .4byte 0x02014800\n\ _0811456C: .4byte 0x000060c4\n\ _08114570: .4byte 0x000080c4\n\ _08114574: .4byte 0x000030c4\n\ _08114578: .4byte 0x000020c4\n\ _0811457C:\n\ - movs r2, 0\n\ - str r2, [sp, 0x4]\n\ - lsls r0, r3, 1\n\ - ldr r5, [sp]\n\ - lsls r1, r5, 6\n\ - adds r0, r1\n\ - ldr r1, _081145F0 @ =0x000060c4\n\ - adds r2, r4, r1\n\ - adds r2, r0, r2\n\ - ldr r5, _081145F4 @ =0x000080c4\n\ - adds r1, r4, r5\n\ - adds r0, r1\n\ - ldrh r1, [r0]\n\ - ldrh r0, [r2]\n\ - adds r1, r0\n\ - movs r0, 0xFF\n\ - lsls r0, 8\n\ - ands r0, r1\n\ - lsrs r5, r0, 8\n\ - movs r0, 0xFF\n\ - ands r1, r0\n\ - strh r1, [r2]\n\ - movs r6, 0\n\ - adds r1, r3, 0x1\n\ - mov r10, r1\n\ - ldr r2, [sp, 0x4]\n\ - cmp r2, r5\n\ - blt _081145B6\n\ - b _081148D2\n\ + movs r2, 0\n\ + str r2, [sp, 0x4]\n\ + lsls r0, r3, 1\n\ + ldr r5, [sp]\n\ + lsls r1, r5, 6\n\ + adds r0, r1\n\ + ldr r1, _081145F0 @ =0x000060c4\n\ + adds r2, r4, r1\n\ + adds r2, r0, r2\n\ + ldr r5, _081145F4 @ =0x000080c4\n\ + adds r1, r4, r5\n\ + adds r0, r1\n\ + ldrh r1, [r0]\n\ + ldrh r0, [r2]\n\ + adds r1, r0\n\ + movs r0, 0xFF\n\ + lsls r0, 8\n\ + ands r0, r1\n\ + lsrs r5, r0, 8\n\ + movs r0, 0xFF\n\ + ands r1, r0\n\ + strh r1, [r2]\n\ + movs r6, 0\n\ + adds r1, r3, 0x1\n\ + mov r10, r1\n\ + ldr r2, [sp, 0x4]\n\ + cmp r2, r5\n\ + blt _081145B6\n\ + b _081148D2\n\ _081145B6:\n\ - mov r9, r4\n\ - mov r4, r8\n\ - adds r7, r3, r4\n\ - ldr r0, _081145F8 @ =0x000030c4\n\ - add r0, r9\n\ - adds r4, r7, r0\n\ - ldr r0, _081145FC @ =0x000020c4\n\ - add r0, r9\n\ - adds r2, r7, r0\n\ + mov r9, r4\n\ + mov r4, r8\n\ + adds r7, r3, r4\n\ + ldr r0, _081145F8 @ =0x000030c4\n\ + add r0, r9\n\ + adds r4, r7, r0\n\ + ldr r0, _081145FC @ =0x000020c4\n\ + add r0, r9\n\ + adds r2, r7, r0\n\ _081145C8:\n\ - ldrb r0, [r4]\n\ - adds r0, 0x1\n\ - strb r0, [r4]\n\ - ldrb r1, [r4]\n\ - ldr r0, [sp]\n\ - str r2, [sp, 0xC]\n\ - str r3, [sp, 0x10]\n\ - bl sub_8114DB4\n\ - ldrb r0, [r4]\n\ - ldr r2, [sp, 0xC]\n\ - ldr r3, [sp, 0x10]\n\ - ldrb r1, [r2]\n\ - cmp r0, r1\n\ - bne _081145E8\n\ - b _081148AC\n\ + ldrb r0, [r4]\n\ + adds r0, 0x1\n\ + strb r0, [r4]\n\ + ldrb r1, [r4]\n\ + ldr r0, [sp]\n\ + str r2, [sp, 0xC]\n\ + str r3, [sp, 0x10]\n\ + bl sub_8114DB4\n\ + ldrb r0, [r4]\n\ + ldr r2, [sp, 0xC]\n\ + ldr r3, [sp, 0x10]\n\ + ldrb r1, [r2]\n\ + cmp r0, r1\n\ + bne _081145E8\n\ + b _081148AC\n\ _081145E8:\n\ - adds r6, 0x1\n\ - cmp r6, r5\n\ - blt _081145C8\n\ - b _081148D2\n\ - .align 2, 0\n\ + adds r6, 0x1\n\ + cmp r6, r5\n\ + blt _081145C8\n\ + b _081148D2\n\ + .align 2, 0\n\ _081145F0: .4byte 0x000060c4\n\ _081145F4: .4byte 0x000080c4\n\ _081145F8: .4byte 0x000030c4\n\ _081145FC: .4byte 0x000020c4\n\ _08114600:\n\ - movs r2, 0\n\ - str r2, [sp, 0x4]\n\ - ldr r4, _08114678 @ =0x02014800\n\ - lsls r0, r3, 1\n\ - ldr r5, [sp]\n\ - lsls r1, r5, 6\n\ - adds r0, r1\n\ - ldr r1, _0811467C @ =0x000060c4\n\ - adds r2, r4, r1\n\ - adds r2, r0, r2\n\ - ldr r5, _08114680 @ =0x000080c4\n\ - adds r1, r4, r5\n\ - adds r0, r1\n\ - ldrh r1, [r0]\n\ - ldrh r0, [r2]\n\ - adds r1, r0\n\ - movs r0, 0xFF\n\ - lsls r0, 8\n\ - ands r0, r1\n\ - lsrs r5, r0, 8\n\ - movs r0, 0xFF\n\ - ands r1, r0\n\ - strh r1, [r2]\n\ - movs r6, 0\n\ - adds r1, r3, 0x1\n\ - mov r10, r1\n\ - ldr r2, [sp, 0x4]\n\ - cmp r2, r5\n\ - blt _0811463C\n\ - b _081148D2\n\ + movs r2, 0\n\ + str r2, [sp, 0x4]\n\ + ldr r4, _08114678 @ =0x02014800\n\ + lsls r0, r3, 1\n\ + ldr r5, [sp]\n\ + lsls r1, r5, 6\n\ + adds r0, r1\n\ + ldr r1, _0811467C @ =0x000060c4\n\ + adds r2, r4, r1\n\ + adds r2, r0, r2\n\ + ldr r5, _08114680 @ =0x000080c4\n\ + adds r1, r4, r5\n\ + adds r0, r1\n\ + ldrh r1, [r0]\n\ + ldrh r0, [r2]\n\ + adds r1, r0\n\ + movs r0, 0xFF\n\ + lsls r0, 8\n\ + ands r0, r1\n\ + lsrs r5, r0, 8\n\ + movs r0, 0xFF\n\ + ands r1, r0\n\ + strh r1, [r2]\n\ + movs r6, 0\n\ + adds r1, r3, 0x1\n\ + mov r10, r1\n\ + ldr r2, [sp, 0x4]\n\ + cmp r2, r5\n\ + blt _0811463C\n\ + b _081148D2\n\ _0811463C:\n\ - mov r9, r4\n\ - mov r4, r8\n\ - adds r7, r3, r4\n\ - ldr r0, _08114684 @ =0x000030c4\n\ - add r0, r9\n\ - adds r4, r7, r0\n\ - ldr r0, _08114688 @ =0x000020c4\n\ - add r0, r9\n\ - adds r2, r7, r0\n\ + mov r9, r4\n\ + mov r4, r8\n\ + adds r7, r3, r4\n\ + ldr r0, _08114684 @ =0x000030c4\n\ + add r0, r9\n\ + adds r4, r7, r0\n\ + ldr r0, _08114688 @ =0x000020c4\n\ + add r0, r9\n\ + adds r2, r7, r0\n\ _0811464E:\n\ - ldrb r0, [r4]\n\ - ldrb r1, [r2]\n\ - cmp r0, r1\n\ - bne _08114658\n\ - b _081148B8\n\ + ldrb r0, [r4]\n\ + ldrb r1, [r2]\n\ + cmp r0, r1\n\ + bne _08114658\n\ + b _081148B8\n\ _08114658:\n\ - adds r1, r0, 0\n\ - ldr r0, [sp]\n\ - str r2, [sp, 0xC]\n\ - str r3, [sp, 0x10]\n\ - bl sub_8114DF0\n\ - ldrb r0, [r4]\n\ - adds r0, 0x1\n\ - strb r0, [r4]\n\ - adds r6, 0x1\n\ - ldr r2, [sp, 0xC]\n\ - ldr r3, [sp, 0x10]\n\ - cmp r6, r5\n\ - blt _0811464E\n\ - b _081148D2\n\ - .align 2, 0\n\ + adds r1, r0, 0\n\ + ldr r0, [sp]\n\ + str r2, [sp, 0xC]\n\ + str r3, [sp, 0x10]\n\ + bl sub_8114DF0\n\ + ldrb r0, [r4]\n\ + adds r0, 0x1\n\ + strb r0, [r4]\n\ + adds r6, 0x1\n\ + ldr r2, [sp, 0xC]\n\ + ldr r3, [sp, 0x10]\n\ + cmp r6, r5\n\ + blt _0811464E\n\ + b _081148D2\n\ + .align 2, 0\n\ _08114678: .4byte 0x02014800\n\ _0811467C: .4byte 0x000060c4\n\ _08114680: .4byte 0x000080c4\n\ _08114684: .4byte 0x000030c4\n\ _08114688: .4byte 0x000020c4\n\ _0811468C:\n\ - movs r2, 0\n\ - str r2, [sp, 0x4]\n\ - ldr r5, _081146C0 @ =0x02014800\n\ - mov r0, r8\n\ - adds r4, r3, r0\n\ - ldr r1, _081146C4 @ =0x000030c4\n\ - adds r0, r5, r1\n\ - adds r0, r4, r0\n\ - ldrb r1, [r0]\n\ - ldr r0, [sp]\n\ - str r3, [sp, 0x10]\n\ - bl sub_8114E48\n\ - lsls r0, 24\n\ - ldr r3, [sp, 0x10]\n\ - adds r2, r3, 0x1\n\ - mov r10, r2\n\ - cmp r0, 0\n\ - bne _081146B4\n\ - b _081148D2\n\ + movs r2, 0\n\ + str r2, [sp, 0x4]\n\ + ldr r5, _081146C0 @ =0x02014800\n\ + mov r0, r8\n\ + adds r4, r3, r0\n\ + ldr r1, _081146C4 @ =0x000030c4\n\ + adds r0, r5, r1\n\ + adds r0, r4, r0\n\ + ldrb r1, [r0]\n\ + ldr r0, [sp]\n\ + str r3, [sp, 0x10]\n\ + bl sub_8114E48\n\ + lsls r0, 24\n\ + ldr r3, [sp, 0x10]\n\ + adds r2, r3, 0x1\n\ + mov r10, r2\n\ + cmp r0, 0\n\ + bne _081146B4\n\ + b _081148D2\n\ _081146B4:\n\ - adds r0, r5, 0\n\ - adds r0, 0xC4\n\ - adds r0, r4, r0\n\ - movs r1, 0x9\n\ - strb r1, [r0]\n\ - b _081148D2\n\ - .align 2, 0\n\ + adds r0, r5, 0\n\ + adds r0, 0xC4\n\ + adds r0, r4, r0\n\ + movs r1, 0x9\n\ + strb r1, [r0]\n\ + b _081148D2\n\ + .align 2, 0\n\ _081146C0: .4byte 0x02014800\n\ _081146C4: .4byte 0x000030c4\n\ _081146C8:\n\ - movs r4, 0\n\ - str r4, [sp, 0x4]\n\ - ldr r5, _081146FC @ =0x02014800\n\ - mov r0, r8\n\ - adds r4, r3, r0\n\ - ldr r1, _08114700 @ =0x000030c4\n\ - adds r0, r5, r1\n\ - adds r0, r4, r0\n\ - ldrb r1, [r0]\n\ - ldr r0, [sp]\n\ - str r3, [sp, 0x10]\n\ - bl sub_8114E48\n\ - lsls r0, 24\n\ - ldr r3, [sp, 0x10]\n\ - adds r2, r3, 0x1\n\ - mov r10, r2\n\ - cmp r0, 0\n\ - bne _081146F0\n\ - b _081148D2\n\ + movs r4, 0\n\ + str r4, [sp, 0x4]\n\ + ldr r5, _081146FC @ =0x02014800\n\ + mov r0, r8\n\ + adds r4, r3, r0\n\ + ldr r1, _08114700 @ =0x000030c4\n\ + adds r0, r5, r1\n\ + adds r0, r4, r0\n\ + ldrb r1, [r0]\n\ + ldr r0, [sp]\n\ + str r3, [sp, 0x10]\n\ + bl sub_8114E48\n\ + lsls r0, 24\n\ + ldr r3, [sp, 0x10]\n\ + adds r2, r3, 0x1\n\ + mov r10, r2\n\ + cmp r0, 0\n\ + bne _081146F0\n\ + b _081148D2\n\ _081146F0:\n\ - adds r0, r5, 0\n\ - adds r0, 0xC4\n\ - adds r0, r4, r0\n\ - movs r1, 0xA\n\ - strb r1, [r0]\n\ - b _081148D2\n\ - .align 2, 0\n\ + adds r0, r5, 0\n\ + adds r0, 0xC4\n\ + adds r0, r4, r0\n\ + movs r1, 0xA\n\ + strb r1, [r0]\n\ + b _081148D2\n\ + .align 2, 0\n\ _081146FC: .4byte 0x02014800\n\ _08114700: .4byte 0x000030c4\n\ _08114704:\n\ - movs r4, 0\n\ - str r4, [sp, 0x4]\n\ - ldr r5, _08114738 @ =0x02014800\n\ - mov r0, r8\n\ - adds r4, r3, r0\n\ - ldr r1, _0811473C @ =0x000030c4\n\ - adds r0, r5, r1\n\ - adds r0, r4, r0\n\ - ldrb r1, [r0]\n\ - ldr r0, [sp]\n\ - str r3, [sp, 0x10]\n\ - bl sub_8114E48\n\ - lsls r0, 24\n\ - ldr r3, [sp, 0x10]\n\ - adds r2, r3, 0x1\n\ - mov r10, r2\n\ - cmp r0, 0\n\ - bne _0811472C\n\ - b _081148D2\n\ + movs r4, 0\n\ + str r4, [sp, 0x4]\n\ + ldr r5, _08114738 @ =0x02014800\n\ + mov r0, r8\n\ + adds r4, r3, r0\n\ + ldr r1, _0811473C @ =0x000030c4\n\ + adds r0, r5, r1\n\ + adds r0, r4, r0\n\ + ldrb r1, [r0]\n\ + ldr r0, [sp]\n\ + str r3, [sp, 0x10]\n\ + bl sub_8114E48\n\ + lsls r0, 24\n\ + ldr r3, [sp, 0x10]\n\ + adds r2, r3, 0x1\n\ + mov r10, r2\n\ + cmp r0, 0\n\ + bne _0811472C\n\ + b _081148D2\n\ _0811472C:\n\ - adds r0, r5, 0\n\ - adds r0, 0xC4\n\ - adds r0, r4, r0\n\ - movs r1, 0xB\n\ - strb r1, [r0]\n\ - b _081148D2\n\ - .align 2, 0\n\ + adds r0, r5, 0\n\ + adds r0, 0xC4\n\ + adds r0, r4, r0\n\ + movs r1, 0xB\n\ + strb r1, [r0]\n\ + b _081148D2\n\ + .align 2, 0\n\ _08114738: .4byte 0x02014800\n\ _0811473C: .4byte 0x000030c4\n\ _08114740:\n\ - movs r4, 0\n\ - str r4, [sp, 0x4]\n\ - ldr r5, _08114774 @ =0x02014800\n\ - mov r0, r8\n\ - adds r4, r3, r0\n\ - ldr r1, _08114778 @ =0x000030c4\n\ - adds r0, r5, r1\n\ - adds r0, r4, r0\n\ - ldrb r1, [r0]\n\ - ldr r0, [sp]\n\ - str r3, [sp, 0x10]\n\ - bl sub_8114E48\n\ - lsls r0, 24\n\ - ldr r3, [sp, 0x10]\n\ - adds r2, r3, 0x1\n\ - mov r10, r2\n\ - cmp r0, 0\n\ - bne _08114768\n\ - b _081148D2\n\ + movs r4, 0\n\ + str r4, [sp, 0x4]\n\ + ldr r5, _08114774 @ =0x02014800\n\ + mov r0, r8\n\ + adds r4, r3, r0\n\ + ldr r1, _08114778 @ =0x000030c4\n\ + adds r0, r5, r1\n\ + adds r0, r4, r0\n\ + ldrb r1, [r0]\n\ + ldr r0, [sp]\n\ + str r3, [sp, 0x10]\n\ + bl sub_8114E48\n\ + lsls r0, 24\n\ + ldr r3, [sp, 0x10]\n\ + adds r2, r3, 0x1\n\ + mov r10, r2\n\ + cmp r0, 0\n\ + bne _08114768\n\ + b _081148D2\n\ _08114768:\n\ - adds r0, r5, 0\n\ - adds r0, 0xC4\n\ - adds r0, r4, r0\n\ - movs r1, 0xC\n\ - strb r1, [r0]\n\ - b _081148D2\n\ - .align 2, 0\n\ + adds r0, r5, 0\n\ + adds r0, 0xC4\n\ + adds r0, r4, r0\n\ + movs r1, 0xC\n\ + strb r1, [r0]\n\ + b _081148D2\n\ + .align 2, 0\n\ _08114774: .4byte 0x02014800\n\ _08114778: .4byte 0x000030c4\n\ _0811477C:\n\ - movs r4, 0\n\ - str r4, [sp, 0x4]\n\ - ldr r6, _081147B4 @ =0x02014800\n\ - mov r0, r8\n\ - adds r5, r3, r0\n\ - ldr r1, _081147B8 @ =0x000030c4\n\ - adds r4, r6, r1\n\ - adds r4, r5, r4\n\ - ldrb r1, [r4]\n\ - ldr r0, [sp]\n\ - str r3, [sp, 0x10]\n\ - bl sub_8114DB4\n\ - ldr r2, _081147BC @ =0x000020c4\n\ - adds r0, r6, r2\n\ - adds r0, r5, r0\n\ - ldrb r1, [r4]\n\ - ldr r3, [sp, 0x10]\n\ - ldrb r0, [r0]\n\ - cmp r1, r0\n\ - bne _081147C0\n\ - adds r0, r6, 0\n\ - adds r0, 0xC4\n\ - adds r0, r5, r0\n\ - mov r4, sp\n\ - ldrb r4, [r4, 0x4]\n\ - strb r4, [r0]\n\ - b _08114844\n\ - .align 2, 0\n\ + movs r4, 0\n\ + str r4, [sp, 0x4]\n\ + ldr r6, _081147B4 @ =0x02014800\n\ + mov r0, r8\n\ + adds r5, r3, r0\n\ + ldr r1, _081147B8 @ =0x000030c4\n\ + adds r4, r6, r1\n\ + adds r4, r5, r4\n\ + ldrb r1, [r4]\n\ + ldr r0, [sp]\n\ + str r3, [sp, 0x10]\n\ + bl sub_8114DB4\n\ + ldr r2, _081147BC @ =0x000020c4\n\ + adds r0, r6, r2\n\ + adds r0, r5, r0\n\ + ldrb r1, [r4]\n\ + ldr r3, [sp, 0x10]\n\ + ldrb r0, [r0]\n\ + cmp r1, r0\n\ + bne _081147C0\n\ + adds r0, r6, 0\n\ + adds r0, 0xC4\n\ + adds r0, r5, r0\n\ + mov r4, sp\n\ + ldrb r4, [r4, 0x4]\n\ + strb r4, [r0]\n\ + b _08114844\n\ + .align 2, 0\n\ _081147B4: .4byte 0x02014800\n\ _081147B8: .4byte 0x000030c4\n\ _081147BC: .4byte 0x000020c4\n\ _081147C0:\n\ - adds r0, r6, 0\n\ - adds r0, 0xC4\n\ - adds r0, r5, r0\n\ - movs r1, 0x1\n\ - strb r1, [r0]\n\ - adds r0, r3, 0x1\n\ - mov r10, r0\n\ - b _081148D2\n\ + adds r0, r6, 0\n\ + adds r0, 0xC4\n\ + adds r0, r5, r0\n\ + movs r1, 0x1\n\ + strb r1, [r0]\n\ + adds r0, r3, 0x1\n\ + mov r10, r0\n\ + b _081148D2\n\ _081147D0:\n\ - movs r1, 0\n\ - str r1, [sp, 0x4]\n\ - ldr r6, _08114804 @ =0x02014800\n\ - mov r2, r8\n\ - adds r5, r3, r2\n\ - ldr r0, _08114808 @ =0x000030c4\n\ - adds r4, r6, r0\n\ - adds r4, r5, r4\n\ - ldrb r1, [r4]\n\ - ldr r0, [sp]\n\ - str r3, [sp, 0x10]\n\ - bl sub_8114DF0\n\ - ldr r1, _0811480C @ =0x000020c4\n\ - adds r0, r6, r1\n\ - adds r0, r5, r0\n\ - ldrb r1, [r4]\n\ - ldr r3, [sp, 0x10]\n\ - ldrb r0, [r0]\n\ - cmp r1, r0\n\ - beq _08114882\n\ - adds r0, r6, 0\n\ - adds r0, 0xC4\n\ - adds r0, r5, r0\n\ - movs r1, 0x2\n\ - b _08114842\n\ - .align 2, 0\n\ + movs r1, 0\n\ + str r1, [sp, 0x4]\n\ + ldr r6, _08114804 @ =0x02014800\n\ + mov r2, r8\n\ + adds r5, r3, r2\n\ + ldr r0, _08114808 @ =0x000030c4\n\ + adds r4, r6, r0\n\ + adds r4, r5, r4\n\ + ldrb r1, [r4]\n\ + ldr r0, [sp]\n\ + str r3, [sp, 0x10]\n\ + bl sub_8114DF0\n\ + ldr r1, _0811480C @ =0x000020c4\n\ + adds r0, r6, r1\n\ + adds r0, r5, r0\n\ + ldrb r1, [r4]\n\ + ldr r3, [sp, 0x10]\n\ + ldrb r0, [r0]\n\ + cmp r1, r0\n\ + beq _08114882\n\ + adds r0, r6, 0\n\ + adds r0, 0xC4\n\ + adds r0, r5, r0\n\ + movs r1, 0x2\n\ + b _08114842\n\ + .align 2, 0\n\ _08114804: .4byte 0x02014800\n\ _08114808: .4byte 0x000030c4\n\ _0811480C: .4byte 0x000020c4\n\ _08114810:\n\ - movs r0, 0\n\ - str r0, [sp, 0x4]\n\ - ldr r6, _0811484C @ =0x02014800\n\ - mov r1, r8\n\ - adds r5, r3, r1\n\ - ldr r2, _08114850 @ =0x000030c4\n\ - adds r4, r6, r2\n\ - adds r4, r5, r4\n\ - ldrb r1, [r4]\n\ - ldr r0, [sp]\n\ - str r3, [sp, 0x10]\n\ - bl sub_8114DB4\n\ - ldr r1, _08114854 @ =0x000020c4\n\ - adds r0, r6, r1\n\ - adds r0, r5, r0\n\ - ldrb r1, [r4]\n\ - ldr r3, [sp, 0x10]\n\ - ldrb r0, [r0]\n\ - cmp r1, r0\n\ - beq _08114882\n\ - adds r0, r6, 0\n\ - adds r0, 0xC4\n\ - adds r0, r5, r0\n\ - movs r1, 0x3\n\ + movs r0, 0\n\ + str r0, [sp, 0x4]\n\ + ldr r6, _0811484C @ =0x02014800\n\ + mov r1, r8\n\ + adds r5, r3, r1\n\ + ldr r2, _08114850 @ =0x000030c4\n\ + adds r4, r6, r2\n\ + adds r4, r5, r4\n\ + ldrb r1, [r4]\n\ + ldr r0, [sp]\n\ + str r3, [sp, 0x10]\n\ + bl sub_8114DB4\n\ + ldr r1, _08114854 @ =0x000020c4\n\ + adds r0, r6, r1\n\ + adds r0, r5, r0\n\ + ldrb r1, [r4]\n\ + ldr r3, [sp, 0x10]\n\ + ldrb r0, [r0]\n\ + cmp r1, r0\n\ + beq _08114882\n\ + adds r0, r6, 0\n\ + adds r0, 0xC4\n\ + adds r0, r5, r0\n\ + movs r1, 0x3\n\ _08114842:\n\ - strb r1, [r0]\n\ + strb r1, [r0]\n\ _08114844:\n\ - adds r5, r3, 0x1\n\ - mov r10, r5\n\ - b _081148D2\n\ - .align 2, 0\n\ + adds r5, r3, 0x1\n\ + mov r10, r5\n\ + b _081148D2\n\ + .align 2, 0\n\ _0811484C: .4byte 0x02014800\n\ _08114850: .4byte 0x000030c4\n\ _08114854: .4byte 0x000020c4\n\ _08114858:\n\ - movs r0, 0\n\ - str r0, [sp, 0x4]\n\ - ldr r6, _08114894 @ =0x02014800\n\ - mov r1, r8\n\ - adds r5, r3, r1\n\ - ldr r2, _08114898 @ =0x000030c4\n\ - adds r4, r6, r2\n\ - adds r4, r5, r4\n\ - ldrb r1, [r4]\n\ - ldr r0, [sp]\n\ - str r3, [sp, 0x10]\n\ - bl sub_8114DF0\n\ - ldr r1, _0811489C @ =0x000020c4\n\ - adds r0, r6, r1\n\ - adds r0, r5, r0\n\ - ldrb r1, [r4]\n\ - ldr r3, [sp, 0x10]\n\ - ldrb r0, [r0]\n\ - cmp r1, r0\n\ - bne _081148C4\n\ + movs r0, 0\n\ + str r0, [sp, 0x4]\n\ + ldr r6, _08114894 @ =0x02014800\n\ + mov r1, r8\n\ + adds r5, r3, r1\n\ + ldr r2, _08114898 @ =0x000030c4\n\ + adds r4, r6, r2\n\ + adds r4, r5, r4\n\ + ldrb r1, [r4]\n\ + ldr r0, [sp]\n\ + str r3, [sp, 0x10]\n\ + bl sub_8114DF0\n\ + ldr r1, _0811489C @ =0x000020c4\n\ + adds r0, r6, r1\n\ + adds r0, r5, r0\n\ + ldrb r1, [r4]\n\ + ldr r3, [sp, 0x10]\n\ + ldrb r0, [r0]\n\ + cmp r1, r0\n\ + bne _081148C4\n\ _08114882:\n\ - adds r0, r6, 0\n\ - adds r0, 0xC4\n\ - adds r0, r5, r0\n\ - mov r2, sp\n\ - ldrb r2, [r2, 0x4]\n\ - strb r2, [r0]\n\ - adds r4, r3, 0x1\n\ - mov r10, r4\n\ - b _081148D2\n\ - .align 2, 0\n\ + adds r0, r6, 0\n\ + adds r0, 0xC4\n\ + adds r0, r5, r0\n\ + mov r2, sp\n\ + ldrb r2, [r2, 0x4]\n\ + strb r2, [r0]\n\ + adds r4, r3, 0x1\n\ + mov r10, r4\n\ + b _081148D2\n\ + .align 2, 0\n\ _08114894: .4byte 0x02014800\n\ _08114898: .4byte 0x000030c4\n\ _0811489C: .4byte 0x000020c4\n\ _081148A0:\n\ - mov r0, r9\n\ - adds r0, 0xC4\n\ - adds r0, r7, r0\n\ - movs r5, 0\n\ - strb r5, [r0]\n\ - b _081148D2\n\ + mov r0, r9\n\ + adds r0, 0xC4\n\ + adds r0, r7, r0\n\ + movs r5, 0\n\ + strb r5, [r0]\n\ + b _081148D2\n\ _081148AC:\n\ - mov r0, r9\n\ - adds r0, 0xC4\n\ - adds r0, r7, r0\n\ - movs r1, 0\n\ - strb r1, [r0]\n\ - b _081148D2\n\ + mov r0, r9\n\ + adds r0, 0xC4\n\ + adds r0, r7, r0\n\ + movs r1, 0\n\ + strb r1, [r0]\n\ + b _081148D2\n\ _081148B8:\n\ - mov r0, r9\n\ - adds r0, 0xC4\n\ - adds r0, r7, r0\n\ - movs r1, 0\n\ - strb r1, [r0]\n\ - b _081148D2\n\ + mov r0, r9\n\ + adds r0, 0xC4\n\ + adds r0, r7, r0\n\ + movs r1, 0\n\ + strb r1, [r0]\n\ + b _081148D2\n\ _081148C4:\n\ - adds r0, r6, 0\n\ - adds r0, 0xC4\n\ - adds r0, r5, r0\n\ - movs r1, 0x4\n\ - strb r1, [r0]\n\ - adds r2, r3, 0x1\n\ - mov r10, r2\n\ + adds r0, r6, 0\n\ + adds r0, 0xC4\n\ + adds r0, r5, r0\n\ + movs r1, 0x4\n\ + strb r1, [r0]\n\ + adds r2, r3, 0x1\n\ + mov r10, r2\n\ _081148D2:\n\ - ldr r0, _081148F4 @ =0x02014800\n\ - mov r4, r8\n\ - adds r1, r3, r4\n\ - ldr r5, _081148F8 @ =0x000008c4\n\ - adds r2, r0, r5\n\ - adds r1, r2\n\ - ldrb r1, [r1]\n\ - adds r4, r0, 0\n\ - cmp r1, 0xC\n\ - bls _081148E8\n\ - b _08114D76\n\ + ldr r0, _081148F4 @ =0x02014800\n\ + mov r4, r8\n\ + adds r1, r3, r4\n\ + ldr r5, _081148F8 @ =0x000008c4\n\ + adds r2, r0, r5\n\ + adds r1, r2\n\ + ldrb r1, [r1]\n\ + adds r4, r0, 0\n\ + cmp r1, 0xC\n\ + bls _081148E8\n\ + b _08114D76\n\ _081148E8:\n\ - lsls r0, r1, 2\n\ - ldr r1, _081148FC @ =_08114900\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ + lsls r0, r1, 2\n\ + ldr r1, _081148FC @ =_08114900\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ _081148F4: .4byte 0x02014800\n\ _081148F8: .4byte 0x000008c4\n\ _081148FC: .4byte _08114900\n\ - .align 2, 0\n\ + .align 2, 0\n\ _08114900:\n\ - .4byte _08114D76\n\ - .4byte _08114934\n\ - .4byte _081149B8\n\ - .4byte _08114A3C\n\ - .4byte _08114AC0\n\ - .4byte _08114B44\n\ - .4byte _08114B7C\n\ - .4byte _08114BB4\n\ - .4byte _08114BEC\n\ - .4byte _08114C24\n\ - .4byte _08114C78\n\ - .4byte _08114CB8\n\ - .4byte _08114CF8\n\ + .4byte _08114D76\n\ + .4byte _08114934\n\ + .4byte _081149B8\n\ + .4byte _08114A3C\n\ + .4byte _08114AC0\n\ + .4byte _08114B44\n\ + .4byte _08114B7C\n\ + .4byte _08114BB4\n\ + .4byte _08114BEC\n\ + .4byte _08114C24\n\ + .4byte _08114C78\n\ + .4byte _08114CB8\n\ + .4byte _08114CF8\n\ _08114934:\n\ - movs r0, 0\n\ - str r0, [sp, 0x4]\n\ - lsls r0, r3, 1\n\ - ldr r2, [sp]\n\ - lsls r1, r2, 6\n\ - adds r0, r1\n\ - ldr r5, _081149A8 @ =0x000070c4\n\ - adds r2, r4, r5\n\ - adds r2, r0, r2\n\ - ldr r5, _081149AC @ =0x000090c4\n\ - adds r1, r4, r5\n\ - adds r0, r1\n\ - ldrh r1, [r0]\n\ - ldrh r0, [r2]\n\ - adds r1, r0\n\ - movs r0, 0xFF\n\ - lsls r0, 8\n\ - ands r0, r1\n\ - lsrs r5, r0, 8\n\ - movs r0, 0xFF\n\ - ands r1, r0\n\ - strh r1, [r2]\n\ - movs r6, 0\n\ - ldr r1, [sp, 0x4]\n\ - cmp r1, r5\n\ - blt _0811496A\n\ - b _08114D76\n\ + movs r0, 0\n\ + str r0, [sp, 0x4]\n\ + lsls r0, r3, 1\n\ + ldr r2, [sp]\n\ + lsls r1, r2, 6\n\ + adds r0, r1\n\ + ldr r5, _081149A8 @ =0x000070c4\n\ + adds r2, r4, r5\n\ + adds r2, r0, r2\n\ + ldr r5, _081149AC @ =0x000090c4\n\ + adds r1, r4, r5\n\ + adds r0, r1\n\ + ldrh r1, [r0]\n\ + ldrh r0, [r2]\n\ + adds r1, r0\n\ + movs r0, 0xFF\n\ + lsls r0, 8\n\ + ands r0, r1\n\ + lsrs r5, r0, 8\n\ + movs r0, 0xFF\n\ + ands r1, r0\n\ + strh r1, [r2]\n\ + movs r6, 0\n\ + ldr r1, [sp, 0x4]\n\ + cmp r1, r5\n\ + blt _0811496A\n\ + b _08114D76\n\ _0811496A:\n\ - mov r9, r4\n\ - mov r2, r8\n\ - adds r7, r3, r2\n\ - ldr r0, _081149B0 @ =0x000038c4\n\ - add r0, r9\n\ - adds r4, r7, r0\n\ - movs r3, 0\n\ - ldr r0, _081149B4 @ =0x000028c4\n\ - add r0, r9\n\ - adds r2, r7, r0\n\ + mov r9, r4\n\ + mov r2, r8\n\ + adds r7, r3, r2\n\ + ldr r0, _081149B0 @ =0x000038c4\n\ + add r0, r9\n\ + adds r4, r7, r0\n\ + movs r3, 0\n\ + ldr r0, _081149B4 @ =0x000028c4\n\ + add r0, r9\n\ + adds r2, r7, r0\n\ _0811497E:\n\ - ldrb r0, [r4]\n\ - subs r0, 0x1\n\ - strb r0, [r4]\n\ - ldrb r1, [r4]\n\ - ldr r0, [sp]\n\ - str r2, [sp, 0xC]\n\ - str r3, [sp, 0x10]\n\ - bl sub_8114DB4\n\ - ldrb r0, [r4]\n\ - ldr r2, [sp, 0xC]\n\ - ldr r3, [sp, 0x10]\n\ - ldrb r1, [r2]\n\ - cmp r0, r1\n\ - bne _0811499E\n\ - b _08114D4C\n\ + ldrb r0, [r4]\n\ + subs r0, 0x1\n\ + strb r0, [r4]\n\ + ldrb r1, [r4]\n\ + ldr r0, [sp]\n\ + str r2, [sp, 0xC]\n\ + str r3, [sp, 0x10]\n\ + bl sub_8114DB4\n\ + ldrb r0, [r4]\n\ + ldr r2, [sp, 0xC]\n\ + ldr r3, [sp, 0x10]\n\ + ldrb r1, [r2]\n\ + cmp r0, r1\n\ + bne _0811499E\n\ + b _08114D4C\n\ _0811499E:\n\ - adds r6, 0x1\n\ - cmp r6, r5\n\ - blt _0811497E\n\ - b _08114D76\n\ - .align 2, 0\n\ + adds r6, 0x1\n\ + cmp r6, r5\n\ + blt _0811497E\n\ + b _08114D76\n\ + .align 2, 0\n\ _081149A8: .4byte 0x000070c4\n\ _081149AC: .4byte 0x000090c4\n\ _081149B0: .4byte 0x000038c4\n\ _081149B4: .4byte 0x000028c4\n\ _081149B8:\n\ - movs r2, 0\n\ - str r2, [sp, 0x4]\n\ - ldr r4, _08114A28 @ =0x02014800\n\ - lsls r0, r3, 1\n\ - ldr r5, [sp]\n\ - lsls r1, r5, 6\n\ - adds r0, r1\n\ - ldr r1, _08114A2C @ =0x000070c4\n\ - adds r2, r4, r1\n\ - adds r2, r0, r2\n\ - ldr r5, _08114A30 @ =0x000090c4\n\ - adds r1, r4, r5\n\ - adds r0, r1\n\ - ldrh r1, [r0]\n\ - ldrh r0, [r2]\n\ - adds r1, r0\n\ - movs r0, 0xFF\n\ - lsls r0, 8\n\ - ands r0, r1\n\ - lsrs r5, r0, 8\n\ - movs r0, 0xFF\n\ - ands r1, r0\n\ - strh r1, [r2]\n\ - movs r6, 0\n\ - ldr r1, [sp, 0x4]\n\ - cmp r1, r5\n\ - blt _081149F0\n\ - b _08114D76\n\ + movs r2, 0\n\ + str r2, [sp, 0x4]\n\ + ldr r4, _08114A28 @ =0x02014800\n\ + lsls r0, r3, 1\n\ + ldr r5, [sp]\n\ + lsls r1, r5, 6\n\ + adds r0, r1\n\ + ldr r1, _08114A2C @ =0x000070c4\n\ + adds r2, r4, r1\n\ + adds r2, r0, r2\n\ + ldr r5, _08114A30 @ =0x000090c4\n\ + adds r1, r4, r5\n\ + adds r0, r1\n\ + ldrh r1, [r0]\n\ + ldrh r0, [r2]\n\ + adds r1, r0\n\ + movs r0, 0xFF\n\ + lsls r0, 8\n\ + ands r0, r1\n\ + lsrs r5, r0, 8\n\ + movs r0, 0xFF\n\ + ands r1, r0\n\ + strh r1, [r2]\n\ + movs r6, 0\n\ + ldr r1, [sp, 0x4]\n\ + cmp r1, r5\n\ + blt _081149F0\n\ + b _08114D76\n\ _081149F0:\n\ - mov r9, r4\n\ - mov r2, r8\n\ - adds r7, r3, r2\n\ - ldr r0, _08114A34 @ =0x000038c4\n\ - add r0, r9\n\ - adds r4, r7, r0\n\ - ldr r0, _08114A38 @ =0x000028c4\n\ - add r0, r9\n\ - adds r2, r7, r0\n\ + mov r9, r4\n\ + mov r2, r8\n\ + adds r7, r3, r2\n\ + ldr r0, _08114A34 @ =0x000038c4\n\ + add r0, r9\n\ + adds r4, r7, r0\n\ + ldr r0, _08114A38 @ =0x000028c4\n\ + add r0, r9\n\ + adds r2, r7, r0\n\ _08114A02:\n\ - ldrb r0, [r4]\n\ - ldrb r1, [r2]\n\ - cmp r0, r1\n\ - bne _08114A0C\n\ - b _08114D3C\n\ + ldrb r0, [r4]\n\ + ldrb r1, [r2]\n\ + cmp r0, r1\n\ + bne _08114A0C\n\ + b _08114D3C\n\ _08114A0C:\n\ - adds r1, r0, 0\n\ - ldr r0, [sp]\n\ - str r2, [sp, 0xC]\n\ - bl sub_8114DF0\n\ - ldrb r0, [r4]\n\ - subs r0, 0x1\n\ - strb r0, [r4]\n\ - adds r6, 0x1\n\ - ldr r2, [sp, 0xC]\n\ - cmp r6, r5\n\ - blt _08114A02\n\ - b _08114D76\n\ - .align 2, 0\n\ + adds r1, r0, 0\n\ + ldr r0, [sp]\n\ + str r2, [sp, 0xC]\n\ + bl sub_8114DF0\n\ + ldrb r0, [r4]\n\ + subs r0, 0x1\n\ + strb r0, [r4]\n\ + adds r6, 0x1\n\ + ldr r2, [sp, 0xC]\n\ + cmp r6, r5\n\ + blt _08114A02\n\ + b _08114D76\n\ + .align 2, 0\n\ _08114A28: .4byte 0x02014800\n\ _08114A2C: .4byte 0x000070c4\n\ _08114A30: .4byte 0x000090c4\n\ _08114A34: .4byte 0x000038c4\n\ _08114A38: .4byte 0x000028c4\n\ _08114A3C:\n\ - movs r2, 0\n\ - str r2, [sp, 0x4]\n\ - lsls r0, r3, 1\n\ - ldr r5, [sp]\n\ - lsls r1, r5, 6\n\ - adds r0, r1\n\ - ldr r1, _08114AB0 @ =0x000070c4\n\ - adds r2, r4, r1\n\ - adds r2, r0, r2\n\ - ldr r5, _08114AB4 @ =0x000090c4\n\ - adds r1, r4, r5\n\ - adds r0, r1\n\ - ldrh r1, [r0]\n\ - ldrh r0, [r2]\n\ - adds r1, r0\n\ - movs r0, 0xFF\n\ - lsls r0, 8\n\ - ands r0, r1\n\ - lsrs r5, r0, 8\n\ - movs r0, 0xFF\n\ - ands r1, r0\n\ - strh r1, [r2]\n\ - movs r6, 0\n\ - ldr r1, [sp, 0x4]\n\ - cmp r1, r5\n\ - blt _08114A72\n\ - b _08114D76\n\ + movs r2, 0\n\ + str r2, [sp, 0x4]\n\ + lsls r0, r3, 1\n\ + ldr r5, [sp]\n\ + lsls r1, r5, 6\n\ + adds r0, r1\n\ + ldr r1, _08114AB0 @ =0x000070c4\n\ + adds r2, r4, r1\n\ + adds r2, r0, r2\n\ + ldr r5, _08114AB4 @ =0x000090c4\n\ + adds r1, r4, r5\n\ + adds r0, r1\n\ + ldrh r1, [r0]\n\ + ldrh r0, [r2]\n\ + adds r1, r0\n\ + movs r0, 0xFF\n\ + lsls r0, 8\n\ + ands r0, r1\n\ + lsrs r5, r0, 8\n\ + movs r0, 0xFF\n\ + ands r1, r0\n\ + strh r1, [r2]\n\ + movs r6, 0\n\ + ldr r1, [sp, 0x4]\n\ + cmp r1, r5\n\ + blt _08114A72\n\ + b _08114D76\n\ _08114A72:\n\ - mov r9, r4\n\ - mov r2, r8\n\ - adds r7, r3, r2\n\ - ldr r0, _08114AB8 @ =0x000038c4\n\ - add r0, r9\n\ - adds r4, r7, r0\n\ - movs r3, 0\n\ - ldr r0, _08114ABC @ =0x000028c4\n\ - add r0, r9\n\ - adds r2, r7, r0\n\ + mov r9, r4\n\ + mov r2, r8\n\ + adds r7, r3, r2\n\ + ldr r0, _08114AB8 @ =0x000038c4\n\ + add r0, r9\n\ + adds r4, r7, r0\n\ + movs r3, 0\n\ + ldr r0, _08114ABC @ =0x000028c4\n\ + add r0, r9\n\ + adds r2, r7, r0\n\ _08114A86:\n\ - ldrb r0, [r4]\n\ - adds r0, 0x1\n\ - strb r0, [r4]\n\ - ldrb r1, [r4]\n\ - ldr r0, [sp]\n\ - str r2, [sp, 0xC]\n\ - str r3, [sp, 0x10]\n\ - bl sub_8114DB4\n\ - ldrb r0, [r4]\n\ - ldr r2, [sp, 0xC]\n\ - ldr r3, [sp, 0x10]\n\ - ldrb r1, [r2]\n\ - cmp r0, r1\n\ - bne _08114AA6\n\ - b _08114D4C\n\ + ldrb r0, [r4]\n\ + adds r0, 0x1\n\ + strb r0, [r4]\n\ + ldrb r1, [r4]\n\ + ldr r0, [sp]\n\ + str r2, [sp, 0xC]\n\ + str r3, [sp, 0x10]\n\ + bl sub_8114DB4\n\ + ldrb r0, [r4]\n\ + ldr r2, [sp, 0xC]\n\ + ldr r3, [sp, 0x10]\n\ + ldrb r1, [r2]\n\ + cmp r0, r1\n\ + bne _08114AA6\n\ + b _08114D4C\n\ _08114AA6:\n\ - adds r6, 0x1\n\ - cmp r6, r5\n\ - blt _08114A86\n\ - b _08114D76\n\ - .align 2, 0\n\ + adds r6, 0x1\n\ + cmp r6, r5\n\ + blt _08114A86\n\ + b _08114D76\n\ + .align 2, 0\n\ _08114AB0: .4byte 0x000070c4\n\ _08114AB4: .4byte 0x000090c4\n\ _08114AB8: .4byte 0x000038c4\n\ _08114ABC: .4byte 0x000028c4\n\ _08114AC0:\n\ - movs r2, 0\n\ - str r2, [sp, 0x4]\n\ - ldr r4, _08114B30 @ =0x02014800\n\ - lsls r0, r3, 1\n\ - ldr r5, [sp]\n\ - lsls r1, r5, 6\n\ - adds r0, r1\n\ - ldr r1, _08114B34 @ =0x000070c4\n\ - adds r2, r4, r1\n\ - adds r2, r0, r2\n\ - ldr r5, _08114B38 @ =0x000090c4\n\ - adds r1, r4, r5\n\ - adds r0, r1\n\ - ldrh r1, [r0]\n\ - ldrh r0, [r2]\n\ - adds r1, r0\n\ - movs r0, 0xFF\n\ - lsls r0, 8\n\ - ands r0, r1\n\ - lsrs r5, r0, 8\n\ - movs r0, 0xFF\n\ - ands r1, r0\n\ - strh r1, [r2]\n\ - movs r6, 0\n\ - ldr r1, [sp, 0x4]\n\ - cmp r1, r5\n\ - blt _08114AF8\n\ - b _08114D76\n\ + movs r2, 0\n\ + str r2, [sp, 0x4]\n\ + ldr r4, _08114B30 @ =0x02014800\n\ + lsls r0, r3, 1\n\ + ldr r5, [sp]\n\ + lsls r1, r5, 6\n\ + adds r0, r1\n\ + ldr r1, _08114B34 @ =0x000070c4\n\ + adds r2, r4, r1\n\ + adds r2, r0, r2\n\ + ldr r5, _08114B38 @ =0x000090c4\n\ + adds r1, r4, r5\n\ + adds r0, r1\n\ + ldrh r1, [r0]\n\ + ldrh r0, [r2]\n\ + adds r1, r0\n\ + movs r0, 0xFF\n\ + lsls r0, 8\n\ + ands r0, r1\n\ + lsrs r5, r0, 8\n\ + movs r0, 0xFF\n\ + ands r1, r0\n\ + strh r1, [r2]\n\ + movs r6, 0\n\ + ldr r1, [sp, 0x4]\n\ + cmp r1, r5\n\ + blt _08114AF8\n\ + b _08114D76\n\ _08114AF8:\n\ - mov r9, r4\n\ - mov r2, r8\n\ - adds r7, r3, r2\n\ - ldr r0, _08114B3C @ =0x000038c4\n\ - add r0, r9\n\ - adds r4, r7, r0\n\ - ldr r0, _08114B40 @ =0x000028c4\n\ - add r0, r9\n\ - adds r2, r7, r0\n\ + mov r9, r4\n\ + mov r2, r8\n\ + adds r7, r3, r2\n\ + ldr r0, _08114B3C @ =0x000038c4\n\ + add r0, r9\n\ + adds r4, r7, r0\n\ + ldr r0, _08114B40 @ =0x000028c4\n\ + add r0, r9\n\ + adds r2, r7, r0\n\ _08114B0A:\n\ - ldrb r0, [r4]\n\ - ldrb r1, [r2]\n\ - cmp r0, r1\n\ - bne _08114B14\n\ - b _08114D5C\n\ + ldrb r0, [r4]\n\ + ldrb r1, [r2]\n\ + cmp r0, r1\n\ + bne _08114B14\n\ + b _08114D5C\n\ _08114B14:\n\ - adds r1, r0, 0\n\ - ldr r0, [sp]\n\ - str r2, [sp, 0xC]\n\ - bl sub_8114DF0\n\ - ldrb r0, [r4]\n\ - adds r0, 0x1\n\ - strb r0, [r4]\n\ - adds r6, 0x1\n\ - ldr r2, [sp, 0xC]\n\ - cmp r6, r5\n\ - blt _08114B0A\n\ - b _08114D76\n\ - .align 2, 0\n\ + adds r1, r0, 0\n\ + ldr r0, [sp]\n\ + str r2, [sp, 0xC]\n\ + bl sub_8114DF0\n\ + ldrb r0, [r4]\n\ + adds r0, 0x1\n\ + strb r0, [r4]\n\ + adds r6, 0x1\n\ + ldr r2, [sp, 0xC]\n\ + cmp r6, r5\n\ + blt _08114B0A\n\ + b _08114D76\n\ + .align 2, 0\n\ _08114B30: .4byte 0x02014800\n\ _08114B34: .4byte 0x000070c4\n\ _08114B38: .4byte 0x000090c4\n\ _08114B3C: .4byte 0x000038c4\n\ _08114B40: .4byte 0x000028c4\n\ _08114B44:\n\ - movs r2, 0\n\ - str r2, [sp, 0x4]\n\ - ldr r5, _08114B70 @ =0x02014800\n\ - mov r0, r8\n\ - adds r4, r3, r0\n\ - ldr r1, _08114B74 @ =0x000038c4\n\ - adds r0, r5, r1\n\ - adds r0, r4, r0\n\ - ldrb r1, [r0]\n\ - ldr r0, [sp]\n\ - bl sub_8114E48\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _08114B64\n\ - b _08114D76\n\ + movs r2, 0\n\ + str r2, [sp, 0x4]\n\ + ldr r5, _08114B70 @ =0x02014800\n\ + mov r0, r8\n\ + adds r4, r3, r0\n\ + ldr r1, _08114B74 @ =0x000038c4\n\ + adds r0, r5, r1\n\ + adds r0, r4, r0\n\ + ldrb r1, [r0]\n\ + ldr r0, [sp]\n\ + bl sub_8114E48\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _08114B64\n\ + b _08114D76\n\ _08114B64:\n\ - ldr r2, _08114B78 @ =0x000008c4\n\ - adds r0, r5, r2\n\ - adds r0, r4, r0\n\ - movs r1, 0x9\n\ - b _08114D74\n\ - .align 2, 0\n\ + ldr r2, _08114B78 @ =0x000008c4\n\ + adds r0, r5, r2\n\ + adds r0, r4, r0\n\ + movs r1, 0x9\n\ + b _08114D74\n\ + .align 2, 0\n\ _08114B70: .4byte 0x02014800\n\ _08114B74: .4byte 0x000038c4\n\ _08114B78: .4byte 0x000008c4\n\ _08114B7C:\n\ - movs r4, 0\n\ - str r4, [sp, 0x4]\n\ - ldr r5, _08114BA8 @ =0x02014800\n\ - mov r0, r8\n\ - adds r4, r3, r0\n\ - ldr r1, _08114BAC @ =0x000038c4\n\ - adds r0, r5, r1\n\ - adds r0, r4, r0\n\ - ldrb r1, [r0]\n\ - ldr r0, [sp]\n\ - bl sub_8114E48\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _08114B9C\n\ - b _08114D76\n\ + movs r4, 0\n\ + str r4, [sp, 0x4]\n\ + ldr r5, _08114BA8 @ =0x02014800\n\ + mov r0, r8\n\ + adds r4, r3, r0\n\ + ldr r1, _08114BAC @ =0x000038c4\n\ + adds r0, r5, r1\n\ + adds r0, r4, r0\n\ + ldrb r1, [r0]\n\ + ldr r0, [sp]\n\ + bl sub_8114E48\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _08114B9C\n\ + b _08114D76\n\ _08114B9C:\n\ - ldr r2, _08114BB0 @ =0x000008c4\n\ - adds r0, r5, r2\n\ - adds r0, r4, r0\n\ - movs r1, 0xA\n\ - b _08114D74\n\ - .align 2, 0\n\ + ldr r2, _08114BB0 @ =0x000008c4\n\ + adds r0, r5, r2\n\ + adds r0, r4, r0\n\ + movs r1, 0xA\n\ + b _08114D74\n\ + .align 2, 0\n\ _08114BA8: .4byte 0x02014800\n\ _08114BAC: .4byte 0x000038c4\n\ _08114BB0: .4byte 0x000008c4\n\ _08114BB4:\n\ - movs r4, 0\n\ - str r4, [sp, 0x4]\n\ - ldr r5, _08114BE0 @ =0x02014800\n\ - mov r0, r8\n\ - adds r4, r3, r0\n\ - ldr r1, _08114BE4 @ =0x000038c4\n\ - adds r0, r5, r1\n\ - adds r0, r4, r0\n\ - ldrb r1, [r0]\n\ - ldr r0, [sp]\n\ - bl sub_8114E48\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _08114BD4\n\ - b _08114D76\n\ + movs r4, 0\n\ + str r4, [sp, 0x4]\n\ + ldr r5, _08114BE0 @ =0x02014800\n\ + mov r0, r8\n\ + adds r4, r3, r0\n\ + ldr r1, _08114BE4 @ =0x000038c4\n\ + adds r0, r5, r1\n\ + adds r0, r4, r0\n\ + ldrb r1, [r0]\n\ + ldr r0, [sp]\n\ + bl sub_8114E48\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _08114BD4\n\ + b _08114D76\n\ _08114BD4:\n\ - ldr r2, _08114BE8 @ =0x000008c4\n\ - adds r0, r5, r2\n\ - adds r0, r4, r0\n\ - movs r1, 0xB\n\ - b _08114D74\n\ - .align 2, 0\n\ + ldr r2, _08114BE8 @ =0x000008c4\n\ + adds r0, r5, r2\n\ + adds r0, r4, r0\n\ + movs r1, 0xB\n\ + b _08114D74\n\ + .align 2, 0\n\ _08114BE0: .4byte 0x02014800\n\ _08114BE4: .4byte 0x000038c4\n\ _08114BE8: .4byte 0x000008c4\n\ _08114BEC:\n\ - movs r4, 0\n\ - str r4, [sp, 0x4]\n\ - ldr r5, _08114C18 @ =0x02014800\n\ - mov r0, r8\n\ - adds r4, r3, r0\n\ - ldr r1, _08114C1C @ =0x000038c4\n\ - adds r0, r5, r1\n\ - adds r0, r4, r0\n\ - ldrb r1, [r0]\n\ - ldr r0, [sp]\n\ - bl sub_8114E48\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _08114C0C\n\ - b _08114D76\n\ + movs r4, 0\n\ + str r4, [sp, 0x4]\n\ + ldr r5, _08114C18 @ =0x02014800\n\ + mov r0, r8\n\ + adds r4, r3, r0\n\ + ldr r1, _08114C1C @ =0x000038c4\n\ + adds r0, r5, r1\n\ + adds r0, r4, r0\n\ + ldrb r1, [r0]\n\ + ldr r0, [sp]\n\ + bl sub_8114E48\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _08114C0C\n\ + b _08114D76\n\ _08114C0C:\n\ - ldr r2, _08114C20 @ =0x000008c4\n\ - adds r0, r5, r2\n\ - adds r0, r4, r0\n\ - movs r1, 0xC\n\ - b _08114D74\n\ - .align 2, 0\n\ + ldr r2, _08114C20 @ =0x000008c4\n\ + adds r0, r5, r2\n\ + adds r0, r4, r0\n\ + movs r1, 0xC\n\ + b _08114D74\n\ + .align 2, 0\n\ _08114C18: .4byte 0x02014800\n\ _08114C1C: .4byte 0x000038c4\n\ _08114C20: .4byte 0x000008c4\n\ _08114C24:\n\ - movs r4, 0\n\ - str r4, [sp, 0x4]\n\ - ldr r6, _08114C58 @ =0x02014800\n\ - mov r0, r8\n\ - adds r5, r3, r0\n\ - ldr r1, _08114C5C @ =0x000038c4\n\ - adds r4, r6, r1\n\ - adds r4, r5, r4\n\ - ldrb r1, [r4]\n\ - ldr r0, [sp]\n\ - bl sub_8114DB4\n\ - ldr r2, _08114C60 @ =0x000028c4\n\ - adds r0, r6, r2\n\ - adds r0, r5, r0\n\ - ldrb r1, [r4]\n\ - ldrb r0, [r0]\n\ - cmp r1, r0\n\ - bne _08114C68\n\ - ldr r4, _08114C64 @ =0x000008c4\n\ - adds r0, r6, r4\n\ - adds r0, r5, r0\n\ - mov r5, sp\n\ - ldrb r5, [r5, 0x4]\n\ - strb r5, [r0]\n\ - b _08114D76\n\ - .align 2, 0\n\ + movs r4, 0\n\ + str r4, [sp, 0x4]\n\ + ldr r6, _08114C58 @ =0x02014800\n\ + mov r0, r8\n\ + adds r5, r3, r0\n\ + ldr r1, _08114C5C @ =0x000038c4\n\ + adds r4, r6, r1\n\ + adds r4, r5, r4\n\ + ldrb r1, [r4]\n\ + ldr r0, [sp]\n\ + bl sub_8114DB4\n\ + ldr r2, _08114C60 @ =0x000028c4\n\ + adds r0, r6, r2\n\ + adds r0, r5, r0\n\ + ldrb r1, [r4]\n\ + ldrb r0, [r0]\n\ + cmp r1, r0\n\ + bne _08114C68\n\ + ldr r4, _08114C64 @ =0x000008c4\n\ + adds r0, r6, r4\n\ + adds r0, r5, r0\n\ + mov r5, sp\n\ + ldrb r5, [r5, 0x4]\n\ + strb r5, [r0]\n\ + b _08114D76\n\ + .align 2, 0\n\ _08114C58: .4byte 0x02014800\n\ _08114C5C: .4byte 0x000038c4\n\ _08114C60: .4byte 0x000028c4\n\ _08114C64: .4byte 0x000008c4\n\ _08114C68:\n\ - ldr r1, _08114C74 @ =0x000008c4\n\ - adds r0, r6, r1\n\ - adds r0, r5, r0\n\ - movs r1, 0x1\n\ - b _08114D74\n\ - .align 2, 0\n\ + ldr r1, _08114C74 @ =0x000008c4\n\ + adds r0, r6, r1\n\ + adds r0, r5, r0\n\ + movs r1, 0x1\n\ + b _08114D74\n\ + .align 2, 0\n\ _08114C74: .4byte 0x000008c4\n\ _08114C78:\n\ - movs r2, 0\n\ - str r2, [sp, 0x4]\n\ - ldr r6, _08114CA8 @ =0x02014800\n\ - mov r4, r8\n\ - adds r5, r3, r4\n\ - ldr r0, _08114CAC @ =0x000038c4\n\ - adds r4, r6, r0\n\ - adds r4, r5, r4\n\ - ldrb r1, [r4]\n\ - ldr r0, [sp]\n\ - bl sub_8114DF0\n\ - ldr r1, _08114CB0 @ =0x000028c4\n\ - adds r0, r6, r1\n\ - adds r0, r5, r0\n\ - ldrb r1, [r4]\n\ - ldrb r0, [r0]\n\ - cmp r1, r0\n\ - beq _08114D1E\n\ - ldr r1, _08114CB4 @ =0x000008c4\n\ - adds r0, r6, r1\n\ - adds r0, r5, r0\n\ - movs r1, 0x2\n\ - b _08114D74\n\ - .align 2, 0\n\ + movs r2, 0\n\ + str r2, [sp, 0x4]\n\ + ldr r6, _08114CA8 @ =0x02014800\n\ + mov r4, r8\n\ + adds r5, r3, r4\n\ + ldr r0, _08114CAC @ =0x000038c4\n\ + adds r4, r6, r0\n\ + adds r4, r5, r4\n\ + ldrb r1, [r4]\n\ + ldr r0, [sp]\n\ + bl sub_8114DF0\n\ + ldr r1, _08114CB0 @ =0x000028c4\n\ + adds r0, r6, r1\n\ + adds r0, r5, r0\n\ + ldrb r1, [r4]\n\ + ldrb r0, [r0]\n\ + cmp r1, r0\n\ + beq _08114D1E\n\ + ldr r1, _08114CB4 @ =0x000008c4\n\ + adds r0, r6, r1\n\ + adds r0, r5, r0\n\ + movs r1, 0x2\n\ + b _08114D74\n\ + .align 2, 0\n\ _08114CA8: .4byte 0x02014800\n\ _08114CAC: .4byte 0x000038c4\n\ _08114CB0: .4byte 0x000028c4\n\ _08114CB4: .4byte 0x000008c4\n\ _08114CB8:\n\ - movs r2, 0\n\ - str r2, [sp, 0x4]\n\ - ldr r6, _08114CE8 @ =0x02014800\n\ - mov r4, r8\n\ - adds r5, r3, r4\n\ - ldr r0, _08114CEC @ =0x000038c4\n\ - adds r4, r6, r0\n\ - adds r4, r5, r4\n\ - ldrb r1, [r4]\n\ - ldr r0, [sp]\n\ - bl sub_8114DB4\n\ - ldr r1, _08114CF0 @ =0x000028c4\n\ - adds r0, r6, r1\n\ - adds r0, r5, r0\n\ - ldrb r1, [r4]\n\ - ldrb r0, [r0]\n\ - cmp r1, r0\n\ - beq _08114D1E\n\ - ldr r1, _08114CF4 @ =0x000008c4\n\ - adds r0, r6, r1\n\ - adds r0, r5, r0\n\ - movs r1, 0x3\n\ - b _08114D74\n\ - .align 2, 0\n\ + movs r2, 0\n\ + str r2, [sp, 0x4]\n\ + ldr r6, _08114CE8 @ =0x02014800\n\ + mov r4, r8\n\ + adds r5, r3, r4\n\ + ldr r0, _08114CEC @ =0x000038c4\n\ + adds r4, r6, r0\n\ + adds r4, r5, r4\n\ + ldrb r1, [r4]\n\ + ldr r0, [sp]\n\ + bl sub_8114DB4\n\ + ldr r1, _08114CF0 @ =0x000028c4\n\ + adds r0, r6, r1\n\ + adds r0, r5, r0\n\ + ldrb r1, [r4]\n\ + ldrb r0, [r0]\n\ + cmp r1, r0\n\ + beq _08114D1E\n\ + ldr r1, _08114CF4 @ =0x000008c4\n\ + adds r0, r6, r1\n\ + adds r0, r5, r0\n\ + movs r1, 0x3\n\ + b _08114D74\n\ + .align 2, 0\n\ _08114CE8: .4byte 0x02014800\n\ _08114CEC: .4byte 0x000038c4\n\ _08114CF0: .4byte 0x000028c4\n\ _08114CF4: .4byte 0x000008c4\n\ _08114CF8:\n\ - movs r2, 0\n\ - str r2, [sp, 0x4]\n\ - ldr r6, _08114D2C @ =0x02014800\n\ - mov r4, r8\n\ - adds r5, r3, r4\n\ - ldr r0, _08114D30 @ =0x000038c4\n\ - adds r4, r6, r0\n\ - adds r4, r5, r4\n\ - ldrb r1, [r4]\n\ - ldr r0, [sp]\n\ - bl sub_8114DF0\n\ - ldr r1, _08114D34 @ =0x000028c4\n\ - adds r0, r6, r1\n\ - adds r0, r5, r0\n\ - ldrb r1, [r4]\n\ - ldrb r0, [r0]\n\ - cmp r1, r0\n\ - bne _08114D6C\n\ + movs r2, 0\n\ + str r2, [sp, 0x4]\n\ + ldr r6, _08114D2C @ =0x02014800\n\ + mov r4, r8\n\ + adds r5, r3, r4\n\ + ldr r0, _08114D30 @ =0x000038c4\n\ + adds r4, r6, r0\n\ + adds r4, r5, r4\n\ + ldrb r1, [r4]\n\ + ldr r0, [sp]\n\ + bl sub_8114DF0\n\ + ldr r1, _08114D34 @ =0x000028c4\n\ + adds r0, r6, r1\n\ + adds r0, r5, r0\n\ + ldrb r1, [r4]\n\ + ldrb r0, [r0]\n\ + cmp r1, r0\n\ + bne _08114D6C\n\ _08114D1E:\n\ - ldr r2, _08114D38 @ =0x000008c4\n\ - adds r0, r6, r2\n\ - adds r0, r5, r0\n\ - mov r4, sp\n\ - ldrb r4, [r4, 0x4]\n\ - strb r4, [r0]\n\ - b _08114D76\n\ - .align 2, 0\n\ + ldr r2, _08114D38 @ =0x000008c4\n\ + adds r0, r6, r2\n\ + adds r0, r5, r0\n\ + mov r4, sp\n\ + ldrb r4, [r4, 0x4]\n\ + strb r4, [r0]\n\ + b _08114D76\n\ + .align 2, 0\n\ _08114D2C: .4byte 0x02014800\n\ _08114D30: .4byte 0x000038c4\n\ _08114D34: .4byte 0x000028c4\n\ _08114D38: .4byte 0x000008c4\n\ _08114D3C:\n\ - ldr r0, _08114D48 @ =0x000008c4\n\ - add r0, r9\n\ - adds r0, r7, r0\n\ - movs r1, 0\n\ - b _08114D74\n\ - .align 2, 0\n\ + ldr r0, _08114D48 @ =0x000008c4\n\ + add r0, r9\n\ + adds r0, r7, r0\n\ + movs r1, 0\n\ + b _08114D74\n\ + .align 2, 0\n\ _08114D48: .4byte 0x000008c4\n\ _08114D4C:\n\ - ldr r0, _08114D58 @ =0x000008c4\n\ - add r0, r9\n\ - adds r0, r7, r0\n\ - strb r3, [r0]\n\ - b _08114D76\n\ - .align 2, 0\n\ + ldr r0, _08114D58 @ =0x000008c4\n\ + add r0, r9\n\ + adds r0, r7, r0\n\ + strb r3, [r0]\n\ + b _08114D76\n\ + .align 2, 0\n\ _08114D58: .4byte 0x000008c4\n\ _08114D5C:\n\ - ldr r0, _08114D68 @ =0x000008c4\n\ - add r0, r9\n\ - adds r0, r7, r0\n\ - movs r1, 0\n\ - b _08114D74\n\ - .align 2, 0\n\ + ldr r0, _08114D68 @ =0x000008c4\n\ + add r0, r9\n\ + adds r0, r7, r0\n\ + movs r1, 0\n\ + b _08114D74\n\ + .align 2, 0\n\ _08114D68: .4byte 0x000008c4\n\ _08114D6C:\n\ - ldr r1, _08114DAC @ =0x000008c4\n\ - adds r0, r6, r1\n\ - adds r0, r5, r0\n\ - movs r1, 0x4\n\ + ldr r1, _08114DAC @ =0x000008c4\n\ + adds r0, r6, r1\n\ + adds r0, r5, r0\n\ + movs r1, 0x4\n\ _08114D74:\n\ - strb r1, [r0]\n\ + strb r1, [r0]\n\ _08114D76:\n\ - mov r3, r10\n\ - ldr r2, _08114DB0 @ =0x02014800\n\ - adds r0, r2, 0\n\ - adds r0, 0x84\n\ - ldr r4, [sp]\n\ - adds r0, r4, r0\n\ - adds r4, r2, 0\n\ + mov r3, r10\n\ + ldr r2, _08114DB0 @ =0x02014800\n\ + adds r0, r2, 0\n\ + adds r0, 0x84\n\ + ldr r4, [sp]\n\ + adds r0, r4, r0\n\ + adds r4, r2, 0\n\ _08114D84:\n\ - ldrb r0, [r0]\n\ - cmp r3, r0\n\ - bge _08114D8E\n\ - bl _08114410\n\ + ldrb r0, [r0]\n\ + cmp r3, r0\n\ + bge _08114D8E\n\ + bl _08114410\n\ _08114D8E:\n\ - ldr r5, [sp, 0x8]\n\ - str r5, [sp]\n\ - cmp r5, 0x3F\n\ - bgt _08114D9A\n\ - bl _081143F2\n\ + ldr r5, [sp, 0x8]\n\ + str r5, [sp]\n\ + cmp r5, 0x3F\n\ + bgt _08114D9A\n\ + bl _081143F2\n\ _08114D9A:\n\ - ldr r0, [sp, 0x4]\n\ - add sp, 0x14\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\ + ldr r0, [sp, 0x4]\n\ + add sp, 0x14\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\ _08114DAC: .4byte 0x000008c4\n\ _08114DB0: .4byte 0x02014800\n\ .syntax divided"); } -__attribute__((naked)) -void sub_8114DB4() +void sub_8114DB4(u32 a, u8 b) { - asm(".syntax unified\n\ - push {lr}\n\ - lsls r1, 24\n\ - lsrs r3, r1, 24\n\ - ldr r2, _08114DDC @ =0x02014800\n\ - lsrs r1, 25\n\ - lsls r1, 2\n\ - lsls r0, 7\n\ - adds r1, r0\n\ - ldr r0, _08114DE0 @ =0x000040c4\n\ - adds r2, r0\n\ - adds r1, r2\n\ - ldr r2, [r1]\n\ - movs r0, 0x1\n\ - ands r3, r0\n\ - cmp r3, 0\n\ - beq _08114DE4\n\ - ldrb r0, [r2]\n\ - movs r1, 0xF0\n\ - b _08114DE8\n\ - .align 2, 0\n\ -_08114DDC: .4byte 0x02014800\n\ -_08114DE0: .4byte 0x000040c4\n\ -_08114DE4:\n\ - ldrb r0, [r2]\n\ - movs r1, 0xF\n\ -_08114DE8:\n\ - orrs r0, r1\n\ - strb r0, [r2]\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided"); + u8 *r2 = sEvoInfo.unk40C4[a][b / 2]; + + if (b % 2 != 0) + *r2 |= 0xF0; + else + *r2 |= 0x0F; } -__attribute__((naked)) -void sub_8114DF0() +void sub_8114DF0(u32 a, u8 b) { - asm(".syntax unified\n\ - push {lr}\n\ - lsls r1, 24\n\ - lsrs r3, r1, 24\n\ - ldr r2, _08114E28 @ =0x02014800\n\ - lsrs r1, 25\n\ - lsls r1, 2\n\ - lsls r0, 7\n\ - adds r1, r0\n\ - ldr r0, _08114E2C @ =0x000040c4\n\ - adds r2, r0\n\ - adds r1, r2\n\ - ldr r2, [r1]\n\ - movs r0, 0xC0\n\ - lsls r0, 7\n\ - adds r1, r2, r0\n\ - movs r0, 0x1\n\ - ands r3, r0\n\ - cmp r3, 0\n\ - beq _08114E30\n\ - ldrb r1, [r1]\n\ - movs r0, 0xF0\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _08114E42\n\ - ldrb r1, [r2]\n\ - movs r0, 0xF\n\ - b _08114E3E\n\ - .align 2, 0\n\ -_08114E28: .4byte 0x02014800\n\ -_08114E2C: .4byte 0x000040c4\n\ -_08114E30:\n\ - ldrb r1, [r1]\n\ - movs r0, 0xF\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _08114E42\n\ - ldrb r1, [r2]\n\ - movs r0, 0xF0\n\ -_08114E3E:\n\ - ands r0, r1\n\ - strb r0, [r2]\n\ -_08114E42:\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided"); + u8 *r2 = sEvoInfo.unk40C4[a][b / 2]; + u8 *r1 = r2 + 0x6000; + + if (b % 2 != 0) + { + if (!(*r1 & 0xF0)) + *r2 &= 0x0F; + } + else + { + if (!(*r1 & 0x0F)) + *r2 &= 0xF0; + } } __attribute__((naked)) @@ -3632,218 +3700,218 @@ void sub_8114E48() { asm(".syntax unified\n\ push {r4-r7,lr}\n\ - adds r4, r0, 0\n\ - lsls r1, 24\n\ - lsrs r6, r1, 24\n\ - ldr r1, _08114E6C @ =0x02014800\n\ - ldr r2, _08114E70 @ =0x0000a0c4\n\ - adds r0, r1, r2\n\ - ldrb r0, [r0]\n\ - adds r5, r1, 0\n\ - cmp r0, 0\n\ - bne _08114E60\n\ - b _08114F5E\n\ + adds r4, r0, 0\n\ + lsls r1, 24\n\ + lsrs r6, r1, 24\n\ + ldr r1, _08114E6C @ =0x02014800\n\ + ldr r2, _08114E70 @ =0x0000a0c4\n\ + adds r0, r1, r2\n\ + ldrb r0, [r0]\n\ + adds r5, r1, 0\n\ + cmp r0, 0\n\ + bne _08114E60\n\ + b _08114F5E\n\ _08114E60:\n\ - movs r1, 0\n\ - movs r3, 0\n\ - cmp r4, 0\n\ - bne _08114E74\n\ - movs r1, 0x1\n\ - b _08114EA6\n\ - .align 2, 0\n\ + movs r1, 0\n\ + movs r3, 0\n\ + cmp r4, 0\n\ + bne _08114E74\n\ + movs r1, 0x1\n\ + b _08114EA6\n\ + .align 2, 0\n\ _08114E6C: .4byte 0x02014800\n\ _08114E70: .4byte 0x0000a0c4\n\ _08114E74:\n\ - subs r0, r4, 0x1\n\ - lsls r0, 5\n\ - adds r2, r3, r0\n\ - adds r0, r5, 0\n\ - adds r0, 0xC4\n\ - adds r0, r2, r0\n\ - ldrb r0, [r0]\n\ - cmp r0, 0\n\ - bne _08114EA6\n\ - ldr r7, _08114EC4 @ =0x000008c4\n\ - adds r0, r5, r7\n\ - adds r0, r2, r0\n\ - ldrb r0, [r0]\n\ - cmp r0, 0\n\ - bne _08114EA6\n\ - adds r3, 0x1\n\ - cmp r3, 0x1F\n\ - bgt _08114EA6\n\ - cmp r4, 0\n\ - bne _08114E74\n\ - lsls r0, r1, 24\n\ - movs r1, 0x80\n\ - lsls r1, 17\n\ - adds r0, r1\n\ - lsrs r1, r0, 24\n\ + subs r0, r4, 0x1\n\ + lsls r0, 5\n\ + adds r2, r3, r0\n\ + adds r0, r5, 0\n\ + adds r0, 0xC4\n\ + adds r0, r2, r0\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + bne _08114EA6\n\ + ldr r7, _08114EC4 @ =0x000008c4\n\ + adds r0, r5, r7\n\ + adds r0, r2, r0\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + bne _08114EA6\n\ + adds r3, 0x1\n\ + cmp r3, 0x1F\n\ + bgt _08114EA6\n\ + cmp r4, 0\n\ + bne _08114E74\n\ + lsls r0, r1, 24\n\ + movs r1, 0x80\n\ + lsls r1, 17\n\ + adds r0, r1\n\ + lsrs r1, r0, 24\n\ _08114EA6:\n\ - cmp r3, 0x20\n\ - bne _08114EB4\n\ - lsls r0, r1, 24\n\ - movs r2, 0x80\n\ - lsls r2, 17\n\ - adds r0, r2\n\ - lsrs r1, r0, 24\n\ + cmp r3, 0x20\n\ + bne _08114EB4\n\ + lsls r0, r1, 24\n\ + movs r2, 0x80\n\ + lsls r2, 17\n\ + adds r0, r2\n\ + lsrs r1, r0, 24\n\ _08114EB4:\n\ - movs r3, 0\n\ - cmp r4, 0x3F\n\ - bne _08114EC8\n\ - lsls r0, r1, 24\n\ - movs r7, 0x80\n\ - lsls r7, 17\n\ - adds r0, r7\n\ - b _08114EF8\n\ - .align 2, 0\n\ + movs r3, 0\n\ + cmp r4, 0x3F\n\ + bne _08114EC8\n\ + lsls r0, r1, 24\n\ + movs r7, 0x80\n\ + lsls r7, 17\n\ + adds r0, r7\n\ + b _08114EF8\n\ + .align 2, 0\n\ _08114EC4: .4byte 0x000008c4\n\ _08114EC8:\n\ - adds r0, r4, 0x1\n\ - lsls r0, 5\n\ - adds r2, r3, r0\n\ - adds r0, r5, 0\n\ - adds r0, 0xC4\n\ - adds r0, r2, r0\n\ - ldrb r0, [r0]\n\ - cmp r0, 0\n\ - bne _08114EFA\n\ - ldr r7, _08114F64 @ =0x000008c4\n\ - adds r0, r5, r7\n\ - adds r0, r2, r0\n\ - ldrb r0, [r0]\n\ - cmp r0, 0\n\ - bne _08114EFA\n\ - adds r3, 0x1\n\ - cmp r3, 0x1F\n\ - bgt _08114EFA\n\ - cmp r4, 0x3F\n\ - bne _08114EC8\n\ - lsls r0, r1, 24\n\ - movs r1, 0x80\n\ - lsls r1, 17\n\ - adds r0, r1\n\ + adds r0, r4, 0x1\n\ + lsls r0, 5\n\ + adds r2, r3, r0\n\ + adds r0, r5, 0\n\ + adds r0, 0xC4\n\ + adds r0, r2, r0\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + bne _08114EFA\n\ + ldr r7, _08114F64 @ =0x000008c4\n\ + adds r0, r5, r7\n\ + adds r0, r2, r0\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + bne _08114EFA\n\ + adds r3, 0x1\n\ + cmp r3, 0x1F\n\ + bgt _08114EFA\n\ + cmp r4, 0x3F\n\ + bne _08114EC8\n\ + lsls r0, r1, 24\n\ + movs r1, 0x80\n\ + lsls r1, 17\n\ + adds r0, r1\n\ _08114EF8:\n\ - lsrs r1, r0, 24\n\ + lsrs r1, r0, 24\n\ _08114EFA:\n\ - cmp r3, 0x20\n\ - bne _08114F08\n\ - lsls r0, r1, 24\n\ - movs r2, 0x80\n\ - lsls r2, 17\n\ - adds r0, r2\n\ - lsrs r1, r0, 24\n\ + cmp r3, 0x20\n\ + bne _08114F08\n\ + lsls r0, r1, 24\n\ + movs r2, 0x80\n\ + lsls r2, 17\n\ + adds r0, r2\n\ + lsrs r1, r0, 24\n\ _08114F08:\n\ - cmp r1, 0x2\n\ - beq _08114F5E\n\ - subs r0, r6, 0x2\n\ - lsls r0, 24\n\ - lsrs r1, r0, 24\n\ - cmp r0, 0\n\ - bge _08114F18\n\ - movs r1, 0\n\ + cmp r1, 0x2\n\ + beq _08114F5E\n\ + subs r0, r6, 0x2\n\ + lsls r0, 24\n\ + lsrs r1, r0, 24\n\ + cmp r0, 0\n\ + bge _08114F18\n\ + movs r1, 0\n\ _08114F18:\n\ - adds r0, r6, 0x2\n\ - lsls r0, 24\n\ - lsrs r2, r0, 24\n\ - asrs r0, 24\n\ - cmp r0, 0x3F\n\ - ble _08114F26\n\ - movs r2, 0x3F\n\ + adds r0, r6, 0x2\n\ + lsls r0, 24\n\ + lsrs r2, r0, 24\n\ + asrs r0, 24\n\ + cmp r0, 0x3F\n\ + ble _08114F26\n\ + movs r2, 0x3F\n\ _08114F26:\n\ - lsls r1, 24\n\ - asrs r3, r1, 24\n\ - lsls r0, r2, 24\n\ - asrs r2, r0, 24\n\ - adds r6, r1, 0\n\ - adds r7, r0, 0\n\ - cmp r3, r2\n\ - bge _08114F7C\n\ - cmp r4, 0\n\ - beq _08114F7C\n\ - subs r0, r4, 0x1\n\ - lsls r5, r0, 7\n\ - ldr r0, _08114F68 @ =0x020188c4\n\ - mov r12, r0\n\ + lsls r1, 24\n\ + asrs r3, r1, 24\n\ + lsls r0, r2, 24\n\ + asrs r2, r0, 24\n\ + adds r6, r1, 0\n\ + adds r7, r0, 0\n\ + cmp r3, r2\n\ + bge _08114F7C\n\ + cmp r4, 0\n\ + beq _08114F7C\n\ + subs r0, r4, 0x1\n\ + lsls r5, r0, 7\n\ + ldr r0, _08114F68 @ =0x020188c4\n\ + mov r12, r0\n\ _08114F42:\n\ - asrs r0, r3, 1\n\ - lsls r0, 2\n\ - adds r0, r5\n\ - add r0, r12\n\ - ldr r1, [r0]\n\ - movs r0, 0x1\n\ - ands r0, r3\n\ - cmp r0, 0\n\ - beq _08114F6C\n\ - ldrb r1, [r1]\n\ - movs r0, 0xF0\n\ + asrs r0, r3, 1\n\ + lsls r0, 2\n\ + adds r0, r5\n\ + add r0, r12\n\ + ldr r1, [r0]\n\ + movs r0, 0x1\n\ + ands r0, r3\n\ + cmp r0, 0\n\ + beq _08114F6C\n\ + ldrb r1, [r1]\n\ + movs r0, 0xF0\n\ _08114F58:\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08114F72\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08114F72\n\ _08114F5E:\n\ - movs r0, 0x1\n\ - b _08114FCA\n\ - .align 2, 0\n\ + movs r0, 0x1\n\ + b _08114FCA\n\ + .align 2, 0\n\ _08114F64: .4byte 0x000008c4\n\ _08114F68: .4byte 0x020188c4\n\ _08114F6C:\n\ - ldrb r1, [r1]\n\ - movs r0, 0xF\n\ - b _08114F58\n\ + ldrb r1, [r1]\n\ + movs r0, 0xF\n\ + b _08114F58\n\ _08114F72:\n\ - adds r3, 0x1\n\ - cmp r3, r2\n\ - bge _08114F7C\n\ - cmp r4, 0\n\ - bne _08114F42\n\ + adds r3, 0x1\n\ + cmp r3, r2\n\ + bge _08114F7C\n\ + cmp r4, 0\n\ + bne _08114F42\n\ _08114F7C:\n\ - asrs r3, r6, 24\n\ - asrs r1, r7, 24\n\ - cmp r3, r1\n\ - bge _08114FC8\n\ - cmp r4, 0x3F\n\ - beq _08114FC8\n\ - adds r0, r4, 0x1\n\ - lsls r5, r0, 7\n\ - ldr r6, _08114FB0 @ =0x020188c4\n\ - adds r2, r1, 0\n\ + asrs r3, r6, 24\n\ + asrs r1, r7, 24\n\ + cmp r3, r1\n\ + bge _08114FC8\n\ + cmp r4, 0x3F\n\ + beq _08114FC8\n\ + adds r0, r4, 0x1\n\ + lsls r5, r0, 7\n\ + ldr r6, _08114FB0 @ =0x020188c4\n\ + adds r2, r1, 0\n\ _08114F90:\n\ - asrs r0, r3, 1\n\ - lsls r0, 2\n\ - adds r0, r5\n\ - adds r0, r6\n\ - ldr r1, [r0]\n\ - movs r0, 0x1\n\ - ands r0, r3\n\ - cmp r0, 0\n\ - beq _08114FB4\n\ - ldrb r1, [r1]\n\ - movs r0, 0xF0\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08114FBE\n\ - b _08114F5E\n\ - .align 2, 0\n\ + asrs r0, r3, 1\n\ + lsls r0, 2\n\ + adds r0, r5\n\ + adds r0, r6\n\ + ldr r1, [r0]\n\ + movs r0, 0x1\n\ + ands r0, r3\n\ + cmp r0, 0\n\ + beq _08114FB4\n\ + ldrb r1, [r1]\n\ + movs r0, 0xF0\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08114FBE\n\ + b _08114F5E\n\ + .align 2, 0\n\ _08114FB0: .4byte 0x020188c4\n\ _08114FB4:\n\ - ldrb r1, [r1]\n\ - movs r0, 0xF\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _08114F5E\n\ + ldrb r1, [r1]\n\ + movs r0, 0xF\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08114F5E\n\ _08114FBE:\n\ - adds r3, 0x1\n\ - cmp r3, r2\n\ - bge _08114FC8\n\ - cmp r4, 0x3F\n\ - bne _08114F90\n\ + adds r3, 0x1\n\ + cmp r3, r2\n\ + bge _08114FC8\n\ + cmp r4, 0x3F\n\ + bne _08114F90\n\ _08114FC8:\n\ - movs r0, 0\n\ + movs r0, 0\n\ _08114FCA:\n\ - pop {r4-r7}\n\ - pop {r1}\n\ - bx r1\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n\ .syntax divided"); } -- cgit v1.2.3 From 3e68cbc51f867e507644c1c19bb3be7a89fcd3e4 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Fri, 8 Sep 2017 22:02:20 -0500 Subject: mauville_old_man -> mauville_man --- include/mauville_man.h | 18 + include/mauville_old_man.h | 18 - ld_script.txt | 4 +- src/mauville_man.c | 1311 ++++++++++++++++++++++++++++++++++++++++++++ src/mauville_old_man.c | 1311 -------------------------------------------- src/new_game.c | 2 +- src/record_mixing.c | 2 +- src/strings.c | 4 +- src/trader.c | 2 +- sym_bss.txt | 6 +- sym_ewram.txt | 2 +- 11 files changed, 1338 insertions(+), 1342 deletions(-) create mode 100644 include/mauville_man.h delete mode 100644 include/mauville_old_man.h create mode 100644 src/mauville_man.c delete mode 100644 src/mauville_old_man.c diff --git a/include/mauville_man.h b/include/mauville_man.h new file mode 100644 index 000000000..2b8f139f2 --- /dev/null +++ b/include/mauville_man.h @@ -0,0 +1,18 @@ +#ifndef GUARD_MAUVILLE_OLD_MAN_H +#define GUARD_MAUVILLE_OLD_MAN_H + +// IDs +enum +{ + MAUVILLE_MAN_BARD, + MAUVILLE_MAN_HIPSTER, + MAUVILLE_MAN_TRADER, + MAUVILLE_MAN_STORYTELLER, + MAUVILLE_MAN_GIDDY, +}; + +void SetupMauvilleOldMan(void); +void sub_80F7F30(void); +void sub_80F83D0(void); + +#endif // GUARD_MAUVILLE_OLD_MAN_H diff --git a/include/mauville_old_man.h b/include/mauville_old_man.h deleted file mode 100644 index 2b8f139f2..000000000 --- a/include/mauville_old_man.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef GUARD_MAUVILLE_OLD_MAN_H -#define GUARD_MAUVILLE_OLD_MAN_H - -// IDs -enum -{ - MAUVILLE_MAN_BARD, - MAUVILLE_MAN_HIPSTER, - MAUVILLE_MAN_TRADER, - MAUVILLE_MAN_STORYTELLER, - MAUVILLE_MAN_GIDDY, -}; - -void SetupMauvilleOldMan(void); -void sub_80F7F30(void); -void sub_80F83D0(void); - -#endif // GUARD_MAUVILLE_OLD_MAN_H diff --git a/ld_script.txt b/ld_script.txt index 5e604b480..fad2bcc03 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -189,7 +189,7 @@ SECTIONS { src/pokenav.o(.text); asm/pokenav.o(.text_80F708C); src/mon_markings.o(.text); - src/mauville_old_man.o(.text); + src/mauville_man.o(.text); src/mail.o(.text); src/menu_helpers.o(.text); src/script_pokemon_util_80F99CC.o(.text); @@ -420,7 +420,7 @@ SECTIONS { data/easy_chat.o(.rodata); data/pokenav.o(.rodata); data/mon_markings.o(.rodata); - src/mauville_old_man.o(.rodata); + src/mauville_man.o(.rodata); data/mail.o(.rodata); src/menu_helpers.o(.rodata); src/heal_location.o(.rodata); diff --git a/src/mauville_man.c b/src/mauville_man.c new file mode 100644 index 000000000..4a77717f1 --- /dev/null +++ b/src/mauville_man.c @@ -0,0 +1,1311 @@ +#include "global.h" +#include "bard_music.h" +#include "mauville_man.h" +#include "easy_chat.h" +#include "event_data.h" +#include "field_message_box.h" +#include "m4a.h" +#include "menu.h" +#include "rom4.h" +#include "rng.h" +#include "script.h" +#include "songs.h" +#include "sound.h" +#include "string_util.h" +#include "strings.h" +#include "task.h" +#include "trader.h" + +#define MACRO1(a) (((a) % 4) + (((a) / 8) & 1)) + +extern struct MusicPlayerInfo gMPlay_SE2; + +extern u16 gScriptResult; +extern u16 gSpecialVar_0x8004; + +extern const u8 gTextStoryteller_Story1Title[]; +extern const u8 gTextStoryteller_Story1Action[]; +extern const u8 gTextStoryteller_Story1Text[]; +extern const u8 gTextStoryteller_Story2Title[]; +extern const u8 gTextStoryteller_Story2Action[]; +extern const u8 gTextStoryteller_Story2Text[]; +extern const u8 gTextStoryteller_Story3Title[]; +extern const u8 gTextStoryteller_Story3Action[]; +extern const u8 gTextStoryteller_Story3Text[]; +extern const u8 gTextStoryteller_Story4Title[]; +extern const u8 gTextStoryteller_Story4Action[]; +extern const u8 gTextStoryteller_Story4Text[]; +extern const u8 gTextStoryteller_Story5Title[]; +extern const u8 gTextStoryteller_Story5Action[]; +extern const u8 gTextStoryteller_Story5Text[]; +extern const u8 gTextStoryteller_Story6Title[]; +extern const u8 gTextStoryteller_Story6Action[]; +extern const u8 gTextStoryteller_Story6Text[]; +extern const u8 gTextStoryteller_Story7Title[]; +extern const u8 gTextStoryteller_Story7Action[]; +extern const u8 gTextStoryteller_Story7Text[]; +extern const u8 gTextStoryteller_Story8Title[]; +extern const u8 gTextStoryteller_Story8Action[]; +extern const u8 gTextStoryteller_Story8Text[]; +extern const u8 gTextStoryteller_Story9Title[]; +extern const u8 gTextStoryteller_Story9Action[]; +extern const u8 gTextStoryteller_Story9Text[]; +extern const u8 gTextStoryteller_Story10Title[]; +extern const u8 gTextStoryteller_Story10Action[]; +extern const u8 gTextStoryteller_Story10Text[]; +extern const u8 gTextStoryteller_Story11Title[]; +extern const u8 gTextStoryteller_Story11Action[]; +extern const u8 gTextStoryteller_Story11Text[]; +extern const u8 gTextStoryteller_Story12Title[]; +extern const u8 gTextStoryteller_Story12Action[]; +extern const u8 gTextStoryteller_Story12Text[]; +extern const u8 gTextStoryteller_Story13Title[]; +extern const u8 gTextStoryteller_Story13Action[]; +extern const u8 gTextStoryteller_Story13Text[]; +extern const u8 gTextStoryteller_Story14Title[]; +extern const u8 gTextStoryteller_Story14Action[]; +extern const u8 gTextStoryteller_Story14Text[]; +extern const u8 gTextStoryteller_Story15Title[]; +extern const u8 gTextStoryteller_Story15Action[]; +extern const u8 gTextStoryteller_Story15Text[]; +extern const u8 gTextStoryteller_Story16Title[]; +extern const u8 gTextStoryteller_Story16Action[]; +extern const u8 gTextStoryteller_Story16Text[]; +extern const u8 gTextStoryteller_Story17Title[]; +extern const u8 gTextStoryteller_Story17Action[]; +extern const u8 gTextStoryteller_Story17Text[]; +extern const u8 gTextStoryteller_Story18Title[]; +extern const u8 gTextStoryteller_Story18Action[]; +extern const u8 gTextStoryteller_Story18Text[]; +extern const u8 gTextStoryteller_Story19Title[]; +extern const u8 gTextStoryteller_Story19Action[]; +extern const u8 gTextStoryteller_Story19Text[]; +extern const u8 gTextStoryteller_Story20Title[]; +extern const u8 gTextStoryteller_Story20Action[]; +extern const u8 gTextStoryteller_Story20Text[]; +extern const u8 gTextStoryteller_Story21Title[]; +extern const u8 gTextStoryteller_Story21Action[]; +extern const u8 gTextStoryteller_Story21Text[]; +extern const u8 gTextStoryteller_Story22Title[]; +extern const u8 gTextStoryteller_Story22Action[]; +extern const u8 gTextStoryteller_Story22Text[]; +extern const u8 gTextStoryteller_Story23Title[]; +extern const u8 gTextStoryteller_Story23Action[]; +extern const u8 gTextStoryteller_Story23Text[]; +extern const u8 gTextStoryteller_Story24Title[]; +extern const u8 gTextStoryteller_Story24Action[]; +extern const u8 gTextStoryteller_Story24Text[]; +extern const u8 gTextStoryteller_Story25Title[]; +extern const u8 gTextStoryteller_Story25Action[]; +extern const u8 gTextStoryteller_Story25Text[]; +extern const u8 gTextStoryteller_Story26Title[]; +extern const u8 gTextStoryteller_Story26Action[]; +extern const u8 gTextStoryteller_Story26Text[]; +extern const u8 gTextStoryteller_Story27Title[]; +extern const u8 gTextStoryteller_Story27Action[]; +extern const u8 gTextStoryteller_Story27Text[]; +extern const u8 gTextStoryteller_Story28Title[]; +extern const u8 gTextStoryteller_Story28Action[]; +extern const u8 gTextStoryteller_Story28Text[]; +extern const u8 gTextStoryteller_Story29Title[]; +extern const u8 gTextStoryteller_Story29Action[]; +extern const u8 gTextStoryteller_Story29Text[]; +extern const u8 gTextStoryteller_Story30Title[]; +extern const u8 gTextStoryteller_Story30Action[]; +extern const u8 gTextStoryteller_Story30Text[]; +extern const u8 gTextStoryteller_Story31Title[]; +extern const u8 gTextStoryteller_Story31Action[]; +extern const u8 gTextStoryteller_Story31Text[]; +extern const u8 gTextStoryteller_Story32Title[]; +extern const u8 gTextStoryteller_Story32Action[]; +extern const u8 gTextStoryteller_Story32Text[]; +extern const u8 gTextStoryteller_Story33Title[]; +extern const u8 gTextStoryteller_Story33Action[]; +extern const u8 gTextStoryteller_Story33Text[]; +extern const u8 gTextStoryteller_Story34Title[]; +extern const u8 gTextStoryteller_Story34Action[]; +extern const u8 gTextStoryteller_Story34Text[]; +extern const u8 gTextStoryteller_Story35Title[]; +extern const u8 gTextStoryteller_Story35Action[]; +extern const u8 gTextStoryteller_Story35Text[]; +extern const u8 gTextStoryteller_Story36Title[]; +extern const u8 gTextStoryteller_Story36Action[]; +extern const u8 gTextStoryteller_Story36Text[]; + +extern struct BardSong gUnknown_03005DA0; + +EWRAM_DATA static u16 gUnknown_020388BC = 0; // set but not used? + +static const u16 sDefaultBardSongLyrics[] = +{ +#ifdef ENGLISH + EC_WORD_SISTER, + EC_WORD_EATS, + EC_WORD_SWEETS, + EC_WORD_VORACIOUS, + EC_WORD_AND, + EC_WORD_DROOLING, +#else + EC_WORD_SISTER, + EC_WORD_MUST_BE, + EC_WORD_SWEETS, + EC_WORD_VORACIOUS, + EC_WORD_DROOLING, + EC_WORD_THICK, +#endif +}; + +static const u8 *const sGiddyAdjectives[] = +{ + OtherText_SoPretty, + OtherText_SoDarling, + OtherText_SoRelaxed, + OtherText_SoSunny, + OtherText_SoDesirable, + OtherText_SoExciting, + OtherText_SoAmusing, + OtherText_SoMagical, +}; + +static const u8 *const sGiddyQuestions[] = +{ + OtherText_WantVacationNicePlace, + OtherText_BoughtCrayonsIsNice, + OtherText_IfWeCouldFloat, + OtherText_SandWashesAwayMakeSad, + OtherText_WhatsBottomSeaLike, + OtherText_SeeSettingSun, + OtherText_LyingInGreenGrass, + OtherText_SecretBasesWonderful, +}; + +static void sub_80F7DC0(void); +static void Task_BardSong(u8); +static void StartBardSong(u8); +static void StorytellerSetup(void); +static void sub_80F8428(void); + +static void SetupBard(void) +{ + u16 i; + struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard; + + bard->id = MAUVILLE_MAN_BARD; + bard->hasChangedSong = FALSE; + for (i = 0; i < 6; i++) + bard->songLyrics[i] = sDefaultBardSongLyrics[i]; +} + +static void SetupHipster(void) +{ + struct MauvilleManHipster *hipster = &gSaveBlock1.mauvilleMan.hipster; + + hipster->id = MAUVILLE_MAN_HIPSTER; + hipster->alreadySpoken = FALSE; +} + +static void SetupStoryteller(void) +{ + StorytellerSetup(); +} + +static void SetupGiddy(void) +{ + struct MauvilleManGiddy *giddy = &gSaveBlock1.mauvilleMan.giddy; + + giddy->id = MAUVILLE_MAN_GIDDY; + giddy->taleCounter = 0; +} + +static void SetupTrader(void) +{ + TraderSetup(); +} + +void SetupMauvilleOldMan(void) +{ + u16 trainerId = (gSaveBlock2.playerTrainerId[1] << 8) | gSaveBlock2.playerTrainerId[0]; + + // Determine man based on the last digit of the player's trainer ID. + switch ((trainerId % 10) / 2) + { + case MAUVILLE_MAN_BARD: + SetupBard(); + break; + case MAUVILLE_MAN_HIPSTER: + SetupHipster(); + break; + case MAUVILLE_MAN_TRADER: + SetupTrader(); + break; + case MAUVILLE_MAN_STORYTELLER: + SetupStoryteller(); + break; + case MAUVILLE_MAN_GIDDY: + SetupGiddy(); + break; + } + sub_80F83D0(); +} + +static u8 GetCurrentMauvilleOldMan(void) +{ + struct MauvilleManCommon *common = &gSaveBlock1.mauvilleMan.common; + + return common->id; +} + +void ScrSpecial_GetCurrentMauvilleMan(void) +{ + gScriptResult = GetCurrentMauvilleOldMan(); +} + +void ScrSpecial_HasBardSongBeenChanged(void) +{ + u16 *scriptResult = &gScriptResult; // why?? + struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard; + + *scriptResult = bard->hasChangedSong; +} + +void ScrSpecial_SaveBardSongLyrics(void) +{ + u16 i; + struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard; + + StringCopy(bard->playerName, gSaveBlock2.playerName); + + for (i = 0; i < 4; i++) + bard->playerTrainerId[i] = gSaveBlock2.playerTrainerId[i]; + + for (i = 0; i < 6; i++) + bard->songLyrics[i] = bard->temporaryLyrics[i]; + + bard->hasChangedSong = TRUE; +} + +// Copies lyrics into gStringVar4 +void PrepareSongText(void) +{ + struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard; + u16 specialVar = gSpecialVar_0x8004; // It's a bit odd to use this temp variable, but it seems needed to match. + u16 *lyrics; + u16 lineNum; + u8 *wordEnd; + u8 *str; + + lyrics = bard->temporaryLyrics; + if (specialVar == 0) + lyrics = bard->songLyrics; + wordEnd = gStringVar4; + str = wordEnd; + // Put three words on each line + for (lineNum = 0; lineNum < 2; lineNum++) + { + wordEnd = EasyChat_GetWordText(wordEnd, *(lyrics++)); + while (wordEnd != str) + { + if (*str == CHAR_SPACE) + *str = CHAR_SONG_WORD_SEPARATOR; + str++; + } + + str++; + *(wordEnd++) = CHAR_SPACE; + + wordEnd = EasyChat_GetWordText(wordEnd, *(lyrics++)); + while (wordEnd != str) + { + if (*str == CHAR_SPACE) + *str = CHAR_SONG_WORD_SEPARATOR; + str++; + } + + str++; + *(wordEnd++) = CHAR_NEWLINE; + + wordEnd = EasyChat_GetWordText(wordEnd, *(lyrics++)); + while (wordEnd != str) + { + if (*str == CHAR_SPACE) + *str = CHAR_SONG_WORD_SEPARATOR; + str++; + } + + if (lineNum == 0) + { + *(wordEnd++) = EXT_CTRL_CODE_BEGIN; + *(wordEnd++) = 15; + } + } +} + +void ScrSpecial_PlayBardSong(void) +{ + StartBardSong(gSpecialVar_0x8004); + MenuDisplayMessageBox(); + ScriptContext1_Stop(); +} + +void ScrSpecial_GetHipsterSpokenFlag(void) +{ + u16 *scriptResult = &gScriptResult; // again?? + struct MauvilleManHipster *hipster = &gSaveBlock1.mauvilleMan.hipster; + + *scriptResult = hipster->alreadySpoken; +} + +void ScrSpecial_SetHipsterSpokenFlag(void) +{ + struct MauvilleManHipster *hipster = &gSaveBlock1.mauvilleMan.hipster; + + hipster->alreadySpoken = TRUE; +} + +void ScrSpecial_HipsterTeachWord(void) +{ + u16 var = sub_80EB8EC(); + + if (var == 0xFFFF) + { + gScriptResult = FALSE; + } + else + { + EasyChat_GetWordText(gStringVar1, var); + gScriptResult = TRUE; + } +} + +void ScrSpecial_GiddyShouldTellAnotherTale(void) +{ + struct MauvilleManGiddy *giddy = &gSaveBlock1.mauvilleMan.giddy; + + if (giddy->taleCounter == 10) + { + gScriptResult = FALSE; + giddy->taleCounter = 0; + } + else + { + gScriptResult = TRUE; + } +} + +void ScrSpecial_GenerateGiddyLine(void) +{ + struct MauvilleManGiddy *giddy = &gSaveBlock1.mauvilleMan.giddy; + + if (giddy->taleCounter == 0) + sub_80F7DC0(); + + if (giddy->randomWords[giddy->taleCounter] != 0xFFFF) // is not the last element of the array? + { + u8 *stringPtr; + u32 adjective = Random(); + + adjective %= 8; + stringPtr = EasyChat_GetWordText(gStringVar4, giddy->randomWords[giddy->taleCounter]); + stringPtr = StringCopy(stringPtr, gOtherText_Is); + stringPtr = StringCopy(stringPtr, sGiddyAdjectives[adjective]); + StringCopy(stringPtr, gOtherText_DontYouAgree); + } + else + { + StringCopy(gStringVar4, sGiddyQuestions[giddy->questionList[giddy->questionNum++]]); + } + + if (!(Random() % 10)) + giddy->taleCounter = 10; + else + giddy->taleCounter++; + + gScriptResult = TRUE; +} + +#ifdef NONMATCHING +static void sub_80F7DC0(void) +{ + u16 arr[][2] = + { + { 0x0, 0}, + { 0xC, 0}, + { 0xD, 0}, + {0x12, 0}, + {0x13, 0}, + {0x15, 0}, + }; + u16 i; + u16 r10; + u16 r7; + + for (i = 0; i < 8; i++) + { + struct MauvilleManGiddy *giddy = &gSaveBlock1.mauvilleMan.giddy; + + //gSaveBlock1.mauvilleMan.giddy.questionList[i] = i; + giddy->questionList[i] = i; + } + + // Scramble questions + for (i = 0; i < 8; i++) + { + struct MauvilleManGiddy *giddy = &gSaveBlock1.mauvilleMan.giddy; + + /* + u16 r1 = Random() % (i + 1); + u8 r7 = gSaveBlock1.mauvilleMan.giddy.questionList[i]; + gSaveBlock1.mauvilleMan.giddy.questionList[i] = gSaveBlock1.mauvilleMan.giddy.questionList[r1]; + gSaveBlock1.mauvilleMan.giddy.questionList[r1] = r7; + */ + u16 r1 = Random() % (i + 1); + u8 r7 = giddy->questionList[i]; + giddy->questionList[i] = giddy->questionList[r1]; + giddy->questionList[r1] = r7; + } + + r10 = 0; + for (i = 0; i < 6; i++) + { + arr[i][1] = sub_80EAE88(arr[i][0]); + r10 += arr[i][1]; + } + + { + struct MauvilleManGiddy *giddy = &gSaveBlock1.mauvilleMan.giddy; + giddy->questionNum = 0; + } + //gSaveBlock1.mauvilleMan.giddy.questionNum = 0; + + r7 = 0; + for (i = 0; i < 10; i++) + { + struct MauvilleManGiddy *giddy = &gSaveBlock1.mauvilleMan.giddy; + + u16 var = Random() % 10; + if (var < 3 && r7 < 8) + { + //gSaveBlock1.mauvilleMan.giddy.randomWords[i] = 0xFFFF; + giddy->randomWords[i] = 0xFFFF; + r7++; + } + //_080F7E90 + else + { + s16 r2 = Random() % r10; + + u16 r1 = 0; + + while (i < 6) // comparing the wrong variable + { + r2 = arr[r1][1] - r2; + if (r2 <= 0) + break; + r1++; + } + + if (r1 == 6) + r1 = 0; + //gSaveBlock1.mauvilleMan.giddy.randomWords[i] = sub_80EB784(arr[r1][0]); + giddy->randomWords[i] = sub_80EB784(arr[r1][0]); + } + } +} +#else + +static const u16 gUnknown_083E53C8[][2] = +{ + { 0x0, 0}, + { 0xC, 0}, + { 0xD, 0}, + {0x12, 0}, + {0x13, 0}, + {0x15, 0}, +}; + +__attribute__((naked)) +static void sub_80F7DC0(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\ + sub sp, 0x18\n\ + ldr r1, _080F7E84 @ =gUnknown_083E53C8\n\ + mov r0, sp\n\ + movs r2, 0x18\n\ + bl memcpy\n\ + movs r5, 0\n\ + movs r0, 0x2\n\ + add r0, sp\n\ + mov r8, r0\n\ + ldr r1, _080F7E88 @ =gSaveBlock1 + 0x2D94\n\ + adds r1, 0x18\n\ + adds r3, r1, 0\n\ +_080F7DE4:\n\ + adds r0, r3, r5\n\ + strb r5, [r0]\n\ + adds r0, r5, 0x1\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + cmp r5, 0x7\n\ + bls _080F7DE4\n\ + movs r5, 0\n\ + ldr r2, _080F7E88 @ =gSaveBlock1 + 0x2D94\n\ + adds r2, 0x4\n\ + mov r9, r2\n\ + adds r6, r1, 0\n\ +_080F7DFC:\n\ + bl Random\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + adds r4, r5, 0x1\n\ + adds r1, r4, 0\n\ + bl __modsi3\n\ + lsls r0, 16\n\ + lsrs r1, r0, 16\n\ + adds r2, r6, r5\n\ + ldrb r7, [r2]\n\ + adds r1, r6, r1\n\ + ldrb r0, [r1]\n\ + strb r0, [r2]\n\ + strb r7, [r1]\n\ + lsls r4, 16\n\ + lsrs r5, r4, 16\n\ + cmp r5, 0x7\n\ + bls _080F7DFC\n\ + movs r3, 0\n\ + mov r10, r3\n\ + movs r5, 0\n\ +_080F7E2A:\n\ + lsls r4, r5, 2\n\ + mov r1, sp\n\ + adds r0, r1, r4\n\ + ldrb r0, [r0]\n\ + bl sub_80EAE88\n\ + add r4, r8\n\ + strh r0, [r4]\n\ + add r0, r10\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + mov r10, r0\n\ + adds r0, r5, 0x1\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + cmp r5, 0x5\n\ + bls _080F7E2A\n\ + movs r0, 0\n\ + ldr r2, _080F7E88 @ =gSaveBlock1 + 0x2D94\n\ + strb r0, [r2, 0x2]\n\ + movs r7, 0\n\ + movs r5, 0\n\ +_080F7E56:\n\ + bl Random\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0xA\n\ + bl __umodsi3\n\ + lsls r0, 16\n\ + lsrs r1, r0, 16\n\ + cmp r1, 0x2\n\ + bhi _080F7E90\n\ + cmp r7, 0x7\n\ + bhi _080F7E90\n\ + lsls r0, r5, 1\n\ + add r0, r9\n\ + ldr r1, _080F7E8C @ =0x0000ffff\n\ + strh r1, [r0]\n\ + adds r0, r7, 0x1\n\ + lsls r0, 16\n\ + lsrs r7, r0, 16\n\ + adds r4, r5, 0x1\n\ + b _080F7EE2\n\ + .align 2, 0\n\ +_080F7E84: .4byte gUnknown_083E53C8\n\ +_080F7E88: .4byte gSaveBlock1 + 0x2D94\n\ +_080F7E8C: .4byte 0x0000ffff\n\ +_080F7E90:\n\ + bl Random\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + mov r1, r10\n\ + bl __umodsi3\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + movs r1, 0\n\ + adds r4, r5, 0x1\n\ + lsls r6, r5, 1\n\ + cmp r5, 0x5\n\ + bhi _080F7ECC\n\ + mov r3, r8\n\ + ldrh r0, [r3]\n\ + b _080F7EC2\n\ +_080F7EB2:\n\ + adds r0, r1, 0x1\n\ + lsls r0, 16\n\ + lsrs r1, r0, 16\n\ + cmp r5, 0x5\n\ + bhi _080F7ECC\n\ + lsls r0, r1, 2\n\ + adds r0, r3, r0\n\ + ldrh r0, [r0]\n\ +_080F7EC2:\n\ + subs r0, r2, r0\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + cmp r0, 0\n\ + bgt _080F7EB2\n\ +_080F7ECC:\n\ + cmp r1, 0x6\n\ + bne _080F7ED2\n\ + movs r1, 0\n\ +_080F7ED2:\n\ + lsls r0, r1, 2\n\ + add r0, sp\n\ + ldrh r0, [r0]\n\ + bl sub_80EB784\n\ + mov r2, r9\n\ + adds r1, r2, r6\n\ + strh r0, [r1]\n\ +_080F7EE2:\n\ + lsls r0, r4, 16\n\ + lsrs r5, r0, 16\n\ + cmp r5, 0x9\n\ + bls _080F7E56\n\ + add sp, 0x18\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\ + .syntax divided\n"); +} +#endif + +static void sub_80F7EFC(void) +{ + struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard; + + bard->hasChangedSong = FALSE; +} + +static void sub_80F7F0C(void) +{ + struct MauvilleManHipster *hipster = &gSaveBlock1.mauvilleMan.hipster; + + hipster->alreadySpoken = FALSE; +} + +static void sub_80F7F18(void) +{ + sub_8109A20(); +} + +static void sub_80F7F24(void) +{ + sub_80F8428(); +} + +void sub_80F7F30(void) +{ + switch (GetCurrentMauvilleOldMan()) + { + case MAUVILLE_MAN_BARD: + sub_80F7EFC(); + break; + case MAUVILLE_MAN_HIPSTER: + sub_80F7F0C(); + break; + case MAUVILLE_MAN_STORYTELLER: + sub_80F7F24(); + break; + case MAUVILLE_MAN_TRADER: + sub_80F7F18(); + break; + case MAUVILLE_MAN_GIDDY: + break; + } + sub_80F83D0(); +} + +#define tState data[0] +#define tCharIndex data[3] +#define tCurrWord data[4] +#define tUseTemporaryLyrics data[5] + +static void StartBardSong(bool8 useTemporaryLyrics) +{ + u8 taskId = CreateTask(Task_BardSong, 0x50); + + gTasks[taskId].tUseTemporaryLyrics = useTemporaryLyrics; +} + +static void BardSing(struct Task *task, struct BardSong *song) +{ + switch (task->tState) + { + case 0: // Initialize song + { + struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard; + u16 *lyrics; + s32 i; + + // Copy lyrics + if (gSpecialVar_0x8004 == 0) + lyrics = bard->songLyrics; + else + lyrics = bard->temporaryLyrics; + for (i = 0; i < 6; i++) + song->lyrics[i] = lyrics[i]; + + // Clear phonemes + for (i = 0; i < 6; i++) + { + song->phonemes[i].sound = 0xFFFF; + song->phonemes[i].length = 0; + song->phonemes[i].pitch = 0; + song->phonemes[i].volume = 0; + } + song->currWord = 0; + song->currPhoneme = 0; + song->var04 = 0; + } + break; + case 1: // Wait for BGM to end + break; + case 2: // Initialize word + { + u16 word = song->lyrics[song->currWord]; + const struct BardSound *sounds = GetWordSounds(EC_GROUP(word), EC_INDEX(word)); + + song->var04 = 0; + GetWordPhonemes(song, sounds, MACRO1(word)); + } + break; + case 3: + case 4: + { + struct BardPhoneme *phoneme = &song->phonemes[song->currPhoneme]; + + switch (song->state) + { + case 0: + if (song->phonemeTimer == 0) // Timer has expired. Move to next phoneme + { + if (song->currPhoneme == 6 || phoneme->sound == 0xFF) + { + song->state = 0xFE; + break; + } + song->phonemeTimer = phoneme->length; + if (phoneme->sound <= 50) + { + u16 num = phoneme->sound / 3; + + m4aSongNumStart(249 + num * 3); + } + song->state = 1; + } + else + { + if (song->voiceInflection > 10) + song->volume -= 2; + if (song->voiceInflection & 1) + song->pitch += 64; + else + song->pitch -= 64; + m4aMPlayVolumeControl(&gMPlay_SE2, 0xFFFF, song->volume); + m4aMPlayPitchControl(&gMPlay_SE2, 0xFFFF, song->pitch); + song->voiceInflection++; + } + song->phonemeTimer--; + break; + case 1: + song->currPhoneme++; + song->state = 0; + if (phoneme->sound <= 50) + { + song->volume = 0x100 + phoneme->volume * 16; + m4aMPlayVolumeControl(&gMPlay_SE2, 0xFFFF, song->volume); + song->pitch = 0x200 + phoneme->pitch; + m4aMPlayPitchControl(&gMPlay_SE2, 0xFFFF, song->pitch); + } + break; + case 0xFE: + m4aMPlayStop(&gMPlay_SE2); + song->state = 0xFF; + break; + } + } + break; + case 5: + break; + } +} + +static void Task_BardSong(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; // r5 + + BardSing(task, &gUnknown_03005DA0); + switch (task->tState) + { + case 0: // Initialize song + PrepareSongText(); + InitWindowFromConfig(gMenuWindowPtr, &gWindowConfig_81E6CE4); + sub_8002EB0(gMenuWindowPtr, gStringVar4, 2, 4, 15); + task->data[1] = 0; + task->data[2] = 0; + task->tCharIndex = 0; + task->tCurrWord = 0; + FadeOutBGMTemporarily(4); + task->tState = 1; + break; + case 1: // Wait for BGM to end + if (IsBGMPausedOrStopped()) + task->tState = 2; + break; + case 2: // Initialize word + { + struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard; + u8 *str = gStringVar4 + task->tCharIndex; + u16 wordLen = 0; + // Can't get it to match without hacking + u32 temp; + register s16 zero asm("r1"); + + while (*str != CHAR_SPACE + && *str != CHAR_NEWLINE + && *str != EXT_CTRL_CODE_BEGIN + && *str != EOS) + { + str++; + wordLen++; + } + if (!task->tUseTemporaryLyrics) + gUnknown_020388BC = MACRO1(bard->songLyrics[task->tCurrWord]); + else + gUnknown_020388BC = MACRO1(bard->temporaryLyrics[task->tCurrWord]); + temp = gUnknown_03005DA0.var04 / wordLen; + zero = 0; + gUnknown_03005DA0.var04 = temp; + if (gUnknown_03005DA0.var04 <= 0) + gUnknown_03005DA0.var04 = 1; + task->tCurrWord++; + if (task->data[2] == 0) + task->tState = 3; + else + task->tState = 5; + task->data[1] = zero; + } + break; + case 5: + if (task->data[2] == 0) + task->tState = 3; + else + task->data[2]--; + break; + case 3: + if (gStringVar4[task->tCharIndex] == EOS) + { + FadeInNewBGM(BGM_POKECEN, 6); + m4aMPlayFadeOutTemporarily(&gMPlay_SE2, 2); + EnableBothScriptContexts(); + DestroyTask(taskId); + } + else if (gStringVar4[task->tCharIndex] == CHAR_SPACE) + { + sub_8003418(gMenuWindowPtr); + task->tCharIndex++; + task->tState = 2; + task->data[2] = 0; + } + else if (gStringVar4[task->tCharIndex] == CHAR_NEWLINE) + { + task->tCharIndex++; + task->tState = 2; + task->data[2] = 0; + } + else if (gStringVar4[task->tCharIndex] == EXT_CTRL_CODE_BEGIN) + { + task->tCharIndex += 2; // skip over control codes + task->tState = 2; + task->data[2] = 8; + } + else if (gStringVar4[task->tCharIndex] == CHAR_SONG_WORD_SEPARATOR) + { + gStringVar4[task->tCharIndex] = CHAR_SPACE; // restore it back to a space + sub_8003418(gMenuWindowPtr); + task->tCharIndex++; + task->data[2] = 0; + } + else + { + switch (task->data[1]) + { + case 0: + sub_8003418(gMenuWindowPtr); + task->data[1]++; + break; + case 1: + task->data[1]++; + break; + case 2: + task->tCharIndex++; + task->data[1] = 0; + task->data[2] = gUnknown_03005DA0.var04; + task->tState = 4; + break; + } + } + break; + case 4: + task->data[2]--; + if (task->data[2] == 0) + task->tState = 3; + break; + } +} + +void sub_80F83D0(void) +{ + VarSet(0x4010, 0x45 + GetCurrentMauvilleOldMan()); +} + +struct Story +{ + u8 stat; + u8 minVal; + const u8 *title; + const u8 *action; + const u8 *fullText; +}; + +static const struct Story sStorytellerStories[] = +{ + {0x32, 1, gTextStoryteller_Story1Title, gTextStoryteller_Story1Action, gTextStoryteller_Story1Text}, + {0x02, 1, gTextStoryteller_Story2Title, gTextStoryteller_Story2Action, gTextStoryteller_Story2Text}, + {0x03, 1, gTextStoryteller_Story3Title, gTextStoryteller_Story3Action, gTextStoryteller_Story3Text}, + {0x04, 1, gTextStoryteller_Story4Title, gTextStoryteller_Story4Action, gTextStoryteller_Story4Text}, + {0x06, 1, gTextStoryteller_Story5Title, gTextStoryteller_Story5Action, gTextStoryteller_Story5Text}, + {0x09, 1, gTextStoryteller_Story6Title, gTextStoryteller_Story6Action, gTextStoryteller_Story6Text}, + {0x0B, 1, gTextStoryteller_Story7Title, gTextStoryteller_Story7Action, gTextStoryteller_Story7Text}, + {0x0C, 1, gTextStoryteller_Story8Title, gTextStoryteller_Story8Action, gTextStoryteller_Story8Text}, + {0x0D, 1, gTextStoryteller_Story9Title, gTextStoryteller_Story9Action, gTextStoryteller_Story9Text}, + {0x0E, 1, gTextStoryteller_Story10Title, gTextStoryteller_Story10Action, gTextStoryteller_Story10Text}, + {0x0F, 1, gTextStoryteller_Story11Title, gTextStoryteller_Story11Action, gTextStoryteller_Story11Text}, + {0x10, 1, gTextStoryteller_Story12Title, gTextStoryteller_Story12Action, gTextStoryteller_Story12Text}, + {0x11, 1, gTextStoryteller_Story13Title, gTextStoryteller_Story13Action, gTextStoryteller_Story13Text}, + {0x12, 1, gTextStoryteller_Story14Title, gTextStoryteller_Story14Action, gTextStoryteller_Story14Text}, + {0x13, 1, gTextStoryteller_Story15Title, gTextStoryteller_Story15Action, gTextStoryteller_Story15Text}, + {0x14, 1, gTextStoryteller_Story16Title, gTextStoryteller_Story16Action, gTextStoryteller_Story16Text}, + {0x1A, 1, gTextStoryteller_Story17Title, gTextStoryteller_Story17Action, gTextStoryteller_Story17Text}, + {0x1B, 1, gTextStoryteller_Story18Title, gTextStoryteller_Story18Action, gTextStoryteller_Story18Text}, + {0x1C, 1, gTextStoryteller_Story19Title, gTextStoryteller_Story19Action, gTextStoryteller_Story19Text}, + {0x1D, 2, gTextStoryteller_Story20Title, gTextStoryteller_Story20Action, gTextStoryteller_Story20Text}, + {0x1E, 1, gTextStoryteller_Story21Title, gTextStoryteller_Story21Action, gTextStoryteller_Story21Text}, + {0x21, 1, gTextStoryteller_Story22Title, gTextStoryteller_Story22Action, gTextStoryteller_Story22Text}, + {0x24, 1, gTextStoryteller_Story23Title, gTextStoryteller_Story23Action, gTextStoryteller_Story23Text}, + {0x25, 1, gTextStoryteller_Story24Title, gTextStoryteller_Story24Action, gTextStoryteller_Story24Text}, + {0x26, 1, gTextStoryteller_Story25Title, gTextStoryteller_Story25Action, gTextStoryteller_Story25Text}, + {0x27, 1, gTextStoryteller_Story26Title, gTextStoryteller_Story26Action, gTextStoryteller_Story26Text}, + {0x28, 1, gTextStoryteller_Story27Title, gTextStoryteller_Story27Action, gTextStoryteller_Story27Text}, + {0x29, 1, gTextStoryteller_Story28Title, gTextStoryteller_Story28Action, gTextStoryteller_Story28Text}, + {0x2A, 1, gTextStoryteller_Story29Title, gTextStoryteller_Story29Action, gTextStoryteller_Story29Text}, + {0x2B, 1, gTextStoryteller_Story30Title, gTextStoryteller_Story30Action, gTextStoryteller_Story30Text}, + {0x2C, 1, gTextStoryteller_Story31Title, gTextStoryteller_Story31Action, gTextStoryteller_Story31Text}, + {0x2D, 1, gTextStoryteller_Story32Title, gTextStoryteller_Story32Action, gTextStoryteller_Story32Text}, + {0x2E, 1, gTextStoryteller_Story33Title, gTextStoryteller_Story33Action, gTextStoryteller_Story33Text}, + {0x2F, 1, gTextStoryteller_Story34Title, gTextStoryteller_Story34Action, gTextStoryteller_Story34Text}, + {0x30, 1, gTextStoryteller_Story35Title, gTextStoryteller_Story35Action, gTextStoryteller_Story35Text}, + {0x31, 1, gTextStoryteller_Story36Title, gTextStoryteller_Story36Action, gTextStoryteller_Story36Text}, +}; + +static void StorytellerSetup(void) +{ + struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; + s32 i; + + storyteller->id = MAUVILLE_MAN_STORYTELLER; + storyteller->alreadyRecorded = FALSE; + for (i = 0; i < 4; i++) + { + storyteller->gameStatIDs[i] = 0; + storyteller->trainerNames[0][i] = EOS; // Maybe they meant storyteller->trainerNames[i][0] instead? + } +} + +static void sub_80F8428(void) +{ + struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; + + storyteller->id = MAUVILLE_MAN_STORYTELLER; + storyteller->alreadyRecorded = FALSE; +} + +static u32 StorytellerGetGameStat(u8 stat) +{ + if (stat == NUM_GAME_STATS) + stat = 0; + return GetGameStat(stat); +} + +static const struct Story *GetStoryByStat(u32 stat) +{ + s32 i; + + for (i = 0; i < 36; i++) + { + if (sStorytellerStories[i].stat == stat) + return &sStorytellerStories[i]; + } + return &sStorytellerStories[35]; +} + +static const u8 *GetStoryTitleByStat(u32 stat) +{ + return GetStoryByStat(stat)->title; +} + +static const u8 *GetStoryTextByStat(u32 stat) +{ + return GetStoryByStat(stat)->fullText; +} + +static const u8 *GetStoryActionByStat(u32 stat) +{ + return GetStoryByStat(stat)->action; +} + +static u8 GetFreeStorySlot(void) +{ + u8 i; + + for (i = 0; i < 4; i++) + { + struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; + + if (storyteller->gameStatIDs[i] == 0) + break; + } + return i; +} + +static u32 StorytellerGetRecordedTrainerStat(u32 trainer) +{ + u8 *ptr = gSaveBlock1.mauvilleMan.storyteller.statValues[trainer]; + + return ptr[0] | (ptr[1] << 8) | (ptr[2] << 16) | (ptr[3] << 24); +} + +static void StorytellerSetRecordedTrainerStat(u32 trainer, u32 val) +{ + u8 *ptr = gSaveBlock1.mauvilleMan.storyteller.statValues[trainer]; + + ptr[0] = val; + ptr[1] = val >> 8; + ptr[2] = val >> 16; + ptr[3] = val >> 24; +} + +static bool32 HasTrainerStatIncreased(u32 trainer) +{ + struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; + + if (StorytellerGetGameStat(storyteller->gameStatIDs[trainer]) > StorytellerGetRecordedTrainerStat(trainer)) + return TRUE; + else + return FALSE; +} + +static void GetStoryByStattellerPlayerName(u32 player, void *dst) +{ + u8 *name = gSaveBlock1.mauvilleMan.storyteller.trainerNames[player]; + + memset(dst, EOS, 8); + memcpy(dst, name, 7); +} + +static void StorytellerSetPlayerName(u32 player, const u8 *src) +{ + u8 *name = gSaveBlock1.mauvilleMan.storyteller.trainerNames[player]; + u8 len = StringLength(src); + + memset(name, EOS, 7); + StringCopyN(name, src, len); +} + +static void StorytellerRecordNewStat(u32 player, u32 stat) +{ + struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; + + storyteller->gameStatIDs[player] = stat; + StorytellerSetPlayerName(player, gSaveBlock2.playerName); + StorytellerSetRecordedTrainerStat(player, StorytellerGetGameStat(stat)); + ConvertIntToDecimalStringN(gStringVar1, StorytellerGetGameStat(stat), 0, 10); + StringCopy(gStringVar2, GetStoryActionByStat(stat)); +} + +static void ScrambleStatList(u8 *arr, s32 count) +{ + s32 i; + + for (i = 0; i < count; i++) + arr[i] = i; + for (i = 0; i < count; i++) + { + u32 a = Random() % count; + u32 b = Random() % count; + u8 temp = arr[a]; + arr[a] = arr[b]; + arr[b] = temp; + } +} + +// What purpose does this struct even serve? Only the length field is used. +static const struct {u32 length; struct MauvilleManStoryteller *unused1; u32 unused2;} sStorytellerStuff = +{ + 36, + &gSaveBlock1.mauvilleMan.storyteller, // unused + 12, // unused +}; + +static bool8 StorytellerInitializeRandomStat(void) +{ + u8 arr[sStorytellerStuff.length]; + s32 i; + s32 j; + + ScrambleStatList(arr, 36); + for (i = 0; i < 36; i++) + { + u8 stat = sStorytellerStories[arr[i]].stat; + u8 minVal = sStorytellerStories[arr[i]].minVal; + struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; + + for (j = 0; j < 4; j++) + { + if (gSaveBlock1.mauvilleMan.storyteller.gameStatIDs[j] == stat) + break; + } + if (j == 4 && StorytellerGetGameStat(stat) >= minVal) + { + storyteller->alreadyRecorded = TRUE; + StorytellerRecordNewStat(GetFreeStorySlot(), stat); + return TRUE; + } + } + return FALSE; +} + +static void StorytellerDisplayStory(u32 player) +{ + struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; + u8 stat = storyteller->gameStatIDs[player]; + + ConvertIntToDecimalStringN(gStringVar1, StorytellerGetRecordedTrainerStat(player), 0, 10); + StringCopy(gStringVar2, GetStoryActionByStat(stat)); + GetStoryByStattellerPlayerName(player, gStringVar3); + ShowFieldMessage(GetStoryTextByStat(stat)); +} + +static void PrintStoryList(void) +{ + s32 i; + + MenuDrawTextWindow(0, 0, 25, 4 + GetFreeStorySlot() * 2); + for (i = 0; i < 4; i++) + { + struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; + u8 stat = storyteller->gameStatIDs[i]; + + if (stat == 0) + break; + MenuPrint(GetStoryTitleByStat(stat), 1, 2 + i * 2); + } + MenuPrint(gPCText_Cancel, 1, 2 + i * 2); +} + +static u8 gUnknown_03000748; + +static void Task_StoryListMenu(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + s32 selection; + + switch (task->data[0]) + { + case 0: + PrintStoryList(); + InitMenu(0, 1, 2, GetFreeStorySlot() + 1, 0, 24); + task->data[0]++; + break; + case 1: + selection = ProcessMenuInput(); + if (selection == -2) + break; + if (selection == -1 || selection == GetFreeStorySlot()) + { + gScriptResult = 0; + } + else + { + gScriptResult = 1; + gUnknown_03000748 = selection; + } + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(0, 0, 25, 12); + DestroyTask(taskId); + EnableBothScriptContexts(); + break; + } +} + +// Sets gScriptResult to TRUE if player selected a story +void ScrSpecial_StorytellerStoryListMenu(void) +{ + CreateTask(Task_StoryListMenu, 0x50); +} + +void ScrSpecial_StorytellerDisplayStory(void) +{ + StorytellerDisplayStory(gUnknown_03000748); +} + +u8 ScrSpecial_StorytellerGetFreeStorySlot(void) +{ + return GetFreeStorySlot(); +} + +// Returns TRUE if stat has increased +bool8 ScrSpecial_StorytellerUpdateStat(void) +{ + struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; + u8 r4 = storyteller->gameStatIDs[gUnknown_03000748]; + + if (HasTrainerStatIncreased(gUnknown_03000748) == TRUE) + { + StorytellerRecordNewStat(gUnknown_03000748, r4); + return TRUE; + } + return FALSE; +} + +bool8 ScrSpecial_HasStorytellerAlreadyRecorded(void) +{ + struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; + + if (storyteller->alreadyRecorded == FALSE) + return FALSE; + else + return TRUE; +} + +bool8 ScrSpecial_StorytellerInitializeRandomStat(void) +{ + return StorytellerInitializeRandomStat(); +} diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c deleted file mode 100644 index d54e017f7..000000000 --- a/src/mauville_old_man.c +++ /dev/null @@ -1,1311 +0,0 @@ -#include "global.h" -#include "bard_music.h" -#include "mauville_old_man.h" -#include "easy_chat.h" -#include "event_data.h" -#include "field_message_box.h" -#include "m4a.h" -#include "menu.h" -#include "rom4.h" -#include "rng.h" -#include "script.h" -#include "songs.h" -#include "sound.h" -#include "string_util.h" -#include "strings.h" -#include "task.h" -#include "trader.h" - -#define MACRO1(a) (((a) % 4) + (((a) / 8) & 1)) - -extern struct MusicPlayerInfo gMPlay_SE2; - -extern u16 gScriptResult; -extern u16 gSpecialVar_0x8004; - -extern const u8 gTextStoryteller_Story1Title[]; -extern const u8 gTextStoryteller_Story1Action[]; -extern const u8 gTextStoryteller_Story1Text[]; -extern const u8 gTextStoryteller_Story2Title[]; -extern const u8 gTextStoryteller_Story2Action[]; -extern const u8 gTextStoryteller_Story2Text[]; -extern const u8 gTextStoryteller_Story3Title[]; -extern const u8 gTextStoryteller_Story3Action[]; -extern const u8 gTextStoryteller_Story3Text[]; -extern const u8 gTextStoryteller_Story4Title[]; -extern const u8 gTextStoryteller_Story4Action[]; -extern const u8 gTextStoryteller_Story4Text[]; -extern const u8 gTextStoryteller_Story5Title[]; -extern const u8 gTextStoryteller_Story5Action[]; -extern const u8 gTextStoryteller_Story5Text[]; -extern const u8 gTextStoryteller_Story6Title[]; -extern const u8 gTextStoryteller_Story6Action[]; -extern const u8 gTextStoryteller_Story6Text[]; -extern const u8 gTextStoryteller_Story7Title[]; -extern const u8 gTextStoryteller_Story7Action[]; -extern const u8 gTextStoryteller_Story7Text[]; -extern const u8 gTextStoryteller_Story8Title[]; -extern const u8 gTextStoryteller_Story8Action[]; -extern const u8 gTextStoryteller_Story8Text[]; -extern const u8 gTextStoryteller_Story9Title[]; -extern const u8 gTextStoryteller_Story9Action[]; -extern const u8 gTextStoryteller_Story9Text[]; -extern const u8 gTextStoryteller_Story10Title[]; -extern const u8 gTextStoryteller_Story10Action[]; -extern const u8 gTextStoryteller_Story10Text[]; -extern const u8 gTextStoryteller_Story11Title[]; -extern const u8 gTextStoryteller_Story11Action[]; -extern const u8 gTextStoryteller_Story11Text[]; -extern const u8 gTextStoryteller_Story12Title[]; -extern const u8 gTextStoryteller_Story12Action[]; -extern const u8 gTextStoryteller_Story12Text[]; -extern const u8 gTextStoryteller_Story13Title[]; -extern const u8 gTextStoryteller_Story13Action[]; -extern const u8 gTextStoryteller_Story13Text[]; -extern const u8 gTextStoryteller_Story14Title[]; -extern const u8 gTextStoryteller_Story14Action[]; -extern const u8 gTextStoryteller_Story14Text[]; -extern const u8 gTextStoryteller_Story15Title[]; -extern const u8 gTextStoryteller_Story15Action[]; -extern const u8 gTextStoryteller_Story15Text[]; -extern const u8 gTextStoryteller_Story16Title[]; -extern const u8 gTextStoryteller_Story16Action[]; -extern const u8 gTextStoryteller_Story16Text[]; -extern const u8 gTextStoryteller_Story17Title[]; -extern const u8 gTextStoryteller_Story17Action[]; -extern const u8 gTextStoryteller_Story17Text[]; -extern const u8 gTextStoryteller_Story18Title[]; -extern const u8 gTextStoryteller_Story18Action[]; -extern const u8 gTextStoryteller_Story18Text[]; -extern const u8 gTextStoryteller_Story19Title[]; -extern const u8 gTextStoryteller_Story19Action[]; -extern const u8 gTextStoryteller_Story19Text[]; -extern const u8 gTextStoryteller_Story20Title[]; -extern const u8 gTextStoryteller_Story20Action[]; -extern const u8 gTextStoryteller_Story20Text[]; -extern const u8 gTextStoryteller_Story21Title[]; -extern const u8 gTextStoryteller_Story21Action[]; -extern const u8 gTextStoryteller_Story21Text[]; -extern const u8 gTextStoryteller_Story22Title[]; -extern const u8 gTextStoryteller_Story22Action[]; -extern const u8 gTextStoryteller_Story22Text[]; -extern const u8 gTextStoryteller_Story23Title[]; -extern const u8 gTextStoryteller_Story23Action[]; -extern const u8 gTextStoryteller_Story23Text[]; -extern const u8 gTextStoryteller_Story24Title[]; -extern const u8 gTextStoryteller_Story24Action[]; -extern const u8 gTextStoryteller_Story24Text[]; -extern const u8 gTextStoryteller_Story25Title[]; -extern const u8 gTextStoryteller_Story25Action[]; -extern const u8 gTextStoryteller_Story25Text[]; -extern const u8 gTextStoryteller_Story26Title[]; -extern const u8 gTextStoryteller_Story26Action[]; -extern const u8 gTextStoryteller_Story26Text[]; -extern const u8 gTextStoryteller_Story27Title[]; -extern const u8 gTextStoryteller_Story27Action[]; -extern const u8 gTextStoryteller_Story27Text[]; -extern const u8 gTextStoryteller_Story28Title[]; -extern const u8 gTextStoryteller_Story28Action[]; -extern const u8 gTextStoryteller_Story28Text[]; -extern const u8 gTextStoryteller_Story29Title[]; -extern const u8 gTextStoryteller_Story29Action[]; -extern const u8 gTextStoryteller_Story29Text[]; -extern const u8 gTextStoryteller_Story30Title[]; -extern const u8 gTextStoryteller_Story30Action[]; -extern const u8 gTextStoryteller_Story30Text[]; -extern const u8 gTextStoryteller_Story31Title[]; -extern const u8 gTextStoryteller_Story31Action[]; -extern const u8 gTextStoryteller_Story31Text[]; -extern const u8 gTextStoryteller_Story32Title[]; -extern const u8 gTextStoryteller_Story32Action[]; -extern const u8 gTextStoryteller_Story32Text[]; -extern const u8 gTextStoryteller_Story33Title[]; -extern const u8 gTextStoryteller_Story33Action[]; -extern const u8 gTextStoryteller_Story33Text[]; -extern const u8 gTextStoryteller_Story34Title[]; -extern const u8 gTextStoryteller_Story34Action[]; -extern const u8 gTextStoryteller_Story34Text[]; -extern const u8 gTextStoryteller_Story35Title[]; -extern const u8 gTextStoryteller_Story35Action[]; -extern const u8 gTextStoryteller_Story35Text[]; -extern const u8 gTextStoryteller_Story36Title[]; -extern const u8 gTextStoryteller_Story36Action[]; -extern const u8 gTextStoryteller_Story36Text[]; - -extern struct BardSong gUnknown_03005DA0; - -EWRAM_DATA static u16 gUnknown_020388BC = 0; // set but not used? - -static const u16 sDefaultBardSongLyrics[] = -{ -#ifdef ENGLISH - EC_WORD_SISTER, - EC_WORD_EATS, - EC_WORD_SWEETS, - EC_WORD_VORACIOUS, - EC_WORD_AND, - EC_WORD_DROOLING, -#else - EC_WORD_SISTER, - EC_WORD_MUST_BE, - EC_WORD_SWEETS, - EC_WORD_VORACIOUS, - EC_WORD_DROOLING, - EC_WORD_THICK, -#endif -}; - -static const u8 *const sGiddyAdjectives[] = -{ - OtherText_SoPretty, - OtherText_SoDarling, - OtherText_SoRelaxed, - OtherText_SoSunny, - OtherText_SoDesirable, - OtherText_SoExciting, - OtherText_SoAmusing, - OtherText_SoMagical, -}; - -static const u8 *const sGiddyQuestions[] = -{ - OtherText_WantVacationNicePlace, - OtherText_BoughtCrayonsIsNice, - OtherText_IfWeCouldFloat, - OtherText_SandWashesAwayMakeSad, - OtherText_WhatsBottomSeaLike, - OtherText_SeeSettingSun, - OtherText_LyingInGreenGrass, - OtherText_SecretBasesWonderful, -}; - -static void sub_80F7DC0(void); -static void Task_BardSong(u8); -static void StartBardSong(u8); -static void StorytellerSetup(void); -static void sub_80F8428(void); - -static void SetupBard(void) -{ - u16 i; - struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard; - - bard->id = MAUVILLE_MAN_BARD; - bard->hasChangedSong = FALSE; - for (i = 0; i < 6; i++) - bard->songLyrics[i] = sDefaultBardSongLyrics[i]; -} - -static void SetupHipster(void) -{ - struct MauvilleManHipster *hipster = &gSaveBlock1.mauvilleMan.hipster; - - hipster->id = MAUVILLE_MAN_HIPSTER; - hipster->alreadySpoken = FALSE; -} - -static void SetupStoryteller(void) -{ - StorytellerSetup(); -} - -static void SetupGiddy(void) -{ - struct MauvilleManGiddy *giddy = &gSaveBlock1.mauvilleMan.giddy; - - giddy->id = MAUVILLE_MAN_GIDDY; - giddy->taleCounter = 0; -} - -static void SetupTrader(void) -{ - TraderSetup(); -} - -void SetupMauvilleOldMan(void) -{ - u16 trainerId = (gSaveBlock2.playerTrainerId[1] << 8) | gSaveBlock2.playerTrainerId[0]; - - // Determine man based on the last digit of the player's trainer ID. - switch ((trainerId % 10) / 2) - { - case MAUVILLE_MAN_BARD: - SetupBard(); - break; - case MAUVILLE_MAN_HIPSTER: - SetupHipster(); - break; - case MAUVILLE_MAN_TRADER: - SetupTrader(); - break; - case MAUVILLE_MAN_STORYTELLER: - SetupStoryteller(); - break; - case MAUVILLE_MAN_GIDDY: - SetupGiddy(); - break; - } - sub_80F83D0(); -} - -static u8 GetCurrentMauvilleOldMan(void) -{ - struct MauvilleManCommon *common = &gSaveBlock1.mauvilleMan.common; - - return common->id; -} - -void ScrSpecial_GetCurrentMauvilleMan(void) -{ - gScriptResult = GetCurrentMauvilleOldMan(); -} - -void ScrSpecial_HasBardSongBeenChanged(void) -{ - u16 *scriptResult = &gScriptResult; // why?? - struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard; - - *scriptResult = bard->hasChangedSong; -} - -void ScrSpecial_SaveBardSongLyrics(void) -{ - u16 i; - struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard; - - StringCopy(bard->playerName, gSaveBlock2.playerName); - - for (i = 0; i < 4; i++) - bard->playerTrainerId[i] = gSaveBlock2.playerTrainerId[i]; - - for (i = 0; i < 6; i++) - bard->songLyrics[i] = bard->temporaryLyrics[i]; - - bard->hasChangedSong = TRUE; -} - -// Copies lyrics into gStringVar4 -void PrepareSongText(void) -{ - struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard; - u16 specialVar = gSpecialVar_0x8004; // It's a bit odd to use this temp variable, but it seems needed to match. - u16 *lyrics; - u16 lineNum; - u8 *wordEnd; - u8 *str; - - lyrics = bard->temporaryLyrics; - if (specialVar == 0) - lyrics = bard->songLyrics; - wordEnd = gStringVar4; - str = wordEnd; - // Put three words on each line - for (lineNum = 0; lineNum < 2; lineNum++) - { - wordEnd = EasyChat_GetWordText(wordEnd, *(lyrics++)); - while (wordEnd != str) - { - if (*str == CHAR_SPACE) - *str = CHAR_SONG_WORD_SEPARATOR; - str++; - } - - str++; - *(wordEnd++) = CHAR_SPACE; - - wordEnd = EasyChat_GetWordText(wordEnd, *(lyrics++)); - while (wordEnd != str) - { - if (*str == CHAR_SPACE) - *str = CHAR_SONG_WORD_SEPARATOR; - str++; - } - - str++; - *(wordEnd++) = CHAR_NEWLINE; - - wordEnd = EasyChat_GetWordText(wordEnd, *(lyrics++)); - while (wordEnd != str) - { - if (*str == CHAR_SPACE) - *str = CHAR_SONG_WORD_SEPARATOR; - str++; - } - - if (lineNum == 0) - { - *(wordEnd++) = EXT_CTRL_CODE_BEGIN; - *(wordEnd++) = 15; - } - } -} - -void ScrSpecial_PlayBardSong(void) -{ - StartBardSong(gSpecialVar_0x8004); - MenuDisplayMessageBox(); - ScriptContext1_Stop(); -} - -void ScrSpecial_GetHipsterSpokenFlag(void) -{ - u16 *scriptResult = &gScriptResult; // again?? - struct MauvilleManHipster *hipster = &gSaveBlock1.mauvilleMan.hipster; - - *scriptResult = hipster->alreadySpoken; -} - -void ScrSpecial_SetHipsterSpokenFlag(void) -{ - struct MauvilleManHipster *hipster = &gSaveBlock1.mauvilleMan.hipster; - - hipster->alreadySpoken = TRUE; -} - -void ScrSpecial_HipsterTeachWord(void) -{ - u16 var = sub_80EB8EC(); - - if (var == 0xFFFF) - { - gScriptResult = FALSE; - } - else - { - EasyChat_GetWordText(gStringVar1, var); - gScriptResult = TRUE; - } -} - -void ScrSpecial_GiddyShouldTellAnotherTale(void) -{ - struct MauvilleManGiddy *giddy = &gSaveBlock1.mauvilleMan.giddy; - - if (giddy->taleCounter == 10) - { - gScriptResult = FALSE; - giddy->taleCounter = 0; - } - else - { - gScriptResult = TRUE; - } -} - -void ScrSpecial_GenerateGiddyLine(void) -{ - struct MauvilleManGiddy *giddy = &gSaveBlock1.mauvilleMan.giddy; - - if (giddy->taleCounter == 0) - sub_80F7DC0(); - - if (giddy->randomWords[giddy->taleCounter] != 0xFFFF) // is not the last element of the array? - { - u8 *stringPtr; - u32 adjective = Random(); - - adjective %= 8; - stringPtr = EasyChat_GetWordText(gStringVar4, giddy->randomWords[giddy->taleCounter]); - stringPtr = StringCopy(stringPtr, gOtherText_Is); - stringPtr = StringCopy(stringPtr, sGiddyAdjectives[adjective]); - StringCopy(stringPtr, gOtherText_DontYouAgree); - } - else - { - StringCopy(gStringVar4, sGiddyQuestions[giddy->questionList[giddy->questionNum++]]); - } - - if (!(Random() % 10)) - giddy->taleCounter = 10; - else - giddy->taleCounter++; - - gScriptResult = TRUE; -} - -#ifdef NONMATCHING -static void sub_80F7DC0(void) -{ - u16 arr[][2] = - { - { 0x0, 0}, - { 0xC, 0}, - { 0xD, 0}, - {0x12, 0}, - {0x13, 0}, - {0x15, 0}, - }; - u16 i; - u16 r10; - u16 r7; - - for (i = 0; i < 8; i++) - { - struct MauvilleManGiddy *giddy = &gSaveBlock1.mauvilleMan.giddy; - - //gSaveBlock1.mauvilleMan.giddy.questionList[i] = i; - giddy->questionList[i] = i; - } - - // Scramble questions - for (i = 0; i < 8; i++) - { - struct MauvilleManGiddy *giddy = &gSaveBlock1.mauvilleMan.giddy; - - /* - u16 r1 = Random() % (i + 1); - u8 r7 = gSaveBlock1.mauvilleMan.giddy.questionList[i]; - gSaveBlock1.mauvilleMan.giddy.questionList[i] = gSaveBlock1.mauvilleMan.giddy.questionList[r1]; - gSaveBlock1.mauvilleMan.giddy.questionList[r1] = r7; - */ - u16 r1 = Random() % (i + 1); - u8 r7 = giddy->questionList[i]; - giddy->questionList[i] = giddy->questionList[r1]; - giddy->questionList[r1] = r7; - } - - r10 = 0; - for (i = 0; i < 6; i++) - { - arr[i][1] = sub_80EAE88(arr[i][0]); - r10 += arr[i][1]; - } - - { - struct MauvilleManGiddy *giddy = &gSaveBlock1.mauvilleMan.giddy; - giddy->questionNum = 0; - } - //gSaveBlock1.mauvilleMan.giddy.questionNum = 0; - - r7 = 0; - for (i = 0; i < 10; i++) - { - struct MauvilleManGiddy *giddy = &gSaveBlock1.mauvilleMan.giddy; - - u16 var = Random() % 10; - if (var < 3 && r7 < 8) - { - //gSaveBlock1.mauvilleMan.giddy.randomWords[i] = 0xFFFF; - giddy->randomWords[i] = 0xFFFF; - r7++; - } - //_080F7E90 - else - { - s16 r2 = Random() % r10; - - u16 r1 = 0; - - while (i < 6) // comparing the wrong variable - { - r2 = arr[r1][1] - r2; - if (r2 <= 0) - break; - r1++; - } - - if (r1 == 6) - r1 = 0; - //gSaveBlock1.mauvilleMan.giddy.randomWords[i] = sub_80EB784(arr[r1][0]); - giddy->randomWords[i] = sub_80EB784(arr[r1][0]); - } - } -} -#else - -static const u16 gUnknown_083E53C8[][2] = -{ - { 0x0, 0}, - { 0xC, 0}, - { 0xD, 0}, - {0x12, 0}, - {0x13, 0}, - {0x15, 0}, -}; - -__attribute__((naked)) -static void sub_80F7DC0(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\ - sub sp, 0x18\n\ - ldr r1, _080F7E84 @ =gUnknown_083E53C8\n\ - mov r0, sp\n\ - movs r2, 0x18\n\ - bl memcpy\n\ - movs r5, 0\n\ - movs r0, 0x2\n\ - add r0, sp\n\ - mov r8, r0\n\ - ldr r1, _080F7E88 @ =gSaveBlock1 + 0x2D94\n\ - adds r1, 0x18\n\ - adds r3, r1, 0\n\ -_080F7DE4:\n\ - adds r0, r3, r5\n\ - strb r5, [r0]\n\ - adds r0, r5, 0x1\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - cmp r5, 0x7\n\ - bls _080F7DE4\n\ - movs r5, 0\n\ - ldr r2, _080F7E88 @ =gSaveBlock1 + 0x2D94\n\ - adds r2, 0x4\n\ - mov r9, r2\n\ - adds r6, r1, 0\n\ -_080F7DFC:\n\ - bl Random\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - adds r4, r5, 0x1\n\ - adds r1, r4, 0\n\ - bl __modsi3\n\ - lsls r0, 16\n\ - lsrs r1, r0, 16\n\ - adds r2, r6, r5\n\ - ldrb r7, [r2]\n\ - adds r1, r6, r1\n\ - ldrb r0, [r1]\n\ - strb r0, [r2]\n\ - strb r7, [r1]\n\ - lsls r4, 16\n\ - lsrs r5, r4, 16\n\ - cmp r5, 0x7\n\ - bls _080F7DFC\n\ - movs r3, 0\n\ - mov r10, r3\n\ - movs r5, 0\n\ -_080F7E2A:\n\ - lsls r4, r5, 2\n\ - mov r1, sp\n\ - adds r0, r1, r4\n\ - ldrb r0, [r0]\n\ - bl sub_80EAE88\n\ - add r4, r8\n\ - strh r0, [r4]\n\ - add r0, r10\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - mov r10, r0\n\ - adds r0, r5, 0x1\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - cmp r5, 0x5\n\ - bls _080F7E2A\n\ - movs r0, 0\n\ - ldr r2, _080F7E88 @ =gSaveBlock1 + 0x2D94\n\ - strb r0, [r2, 0x2]\n\ - movs r7, 0\n\ - movs r5, 0\n\ -_080F7E56:\n\ - bl Random\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - movs r1, 0xA\n\ - bl __umodsi3\n\ - lsls r0, 16\n\ - lsrs r1, r0, 16\n\ - cmp r1, 0x2\n\ - bhi _080F7E90\n\ - cmp r7, 0x7\n\ - bhi _080F7E90\n\ - lsls r0, r5, 1\n\ - add r0, r9\n\ - ldr r1, _080F7E8C @ =0x0000ffff\n\ - strh r1, [r0]\n\ - adds r0, r7, 0x1\n\ - lsls r0, 16\n\ - lsrs r7, r0, 16\n\ - adds r4, r5, 0x1\n\ - b _080F7EE2\n\ - .align 2, 0\n\ -_080F7E84: .4byte gUnknown_083E53C8\n\ -_080F7E88: .4byte gSaveBlock1 + 0x2D94\n\ -_080F7E8C: .4byte 0x0000ffff\n\ -_080F7E90:\n\ - bl Random\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - mov r1, r10\n\ - bl __umodsi3\n\ - lsls r0, 16\n\ - lsrs r2, r0, 16\n\ - movs r1, 0\n\ - adds r4, r5, 0x1\n\ - lsls r6, r5, 1\n\ - cmp r5, 0x5\n\ - bhi _080F7ECC\n\ - mov r3, r8\n\ - ldrh r0, [r3]\n\ - b _080F7EC2\n\ -_080F7EB2:\n\ - adds r0, r1, 0x1\n\ - lsls r0, 16\n\ - lsrs r1, r0, 16\n\ - cmp r5, 0x5\n\ - bhi _080F7ECC\n\ - lsls r0, r1, 2\n\ - adds r0, r3, r0\n\ - ldrh r0, [r0]\n\ -_080F7EC2:\n\ - subs r0, r2, r0\n\ - lsls r0, 16\n\ - lsrs r2, r0, 16\n\ - cmp r0, 0\n\ - bgt _080F7EB2\n\ -_080F7ECC:\n\ - cmp r1, 0x6\n\ - bne _080F7ED2\n\ - movs r1, 0\n\ -_080F7ED2:\n\ - lsls r0, r1, 2\n\ - add r0, sp\n\ - ldrh r0, [r0]\n\ - bl sub_80EB784\n\ - mov r2, r9\n\ - adds r1, r2, r6\n\ - strh r0, [r1]\n\ -_080F7EE2:\n\ - lsls r0, r4, 16\n\ - lsrs r5, r0, 16\n\ - cmp r5, 0x9\n\ - bls _080F7E56\n\ - add sp, 0x18\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\ - .syntax divided\n"); -} -#endif - -static void sub_80F7EFC(void) -{ - struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard; - - bard->hasChangedSong = FALSE; -} - -static void sub_80F7F0C(void) -{ - struct MauvilleManHipster *hipster = &gSaveBlock1.mauvilleMan.hipster; - - hipster->alreadySpoken = FALSE; -} - -static void sub_80F7F18(void) -{ - sub_8109A20(); -} - -static void sub_80F7F24(void) -{ - sub_80F8428(); -} - -void sub_80F7F30(void) -{ - switch (GetCurrentMauvilleOldMan()) - { - case MAUVILLE_MAN_BARD: - sub_80F7EFC(); - break; - case MAUVILLE_MAN_HIPSTER: - sub_80F7F0C(); - break; - case MAUVILLE_MAN_STORYTELLER: - sub_80F7F24(); - break; - case MAUVILLE_MAN_TRADER: - sub_80F7F18(); - break; - case MAUVILLE_MAN_GIDDY: - break; - } - sub_80F83D0(); -} - -#define tState data[0] -#define tCharIndex data[3] -#define tCurrWord data[4] -#define tUseTemporaryLyrics data[5] - -static void StartBardSong(bool8 useTemporaryLyrics) -{ - u8 taskId = CreateTask(Task_BardSong, 0x50); - - gTasks[taskId].tUseTemporaryLyrics = useTemporaryLyrics; -} - -static void BardSing(struct Task *task, struct BardSong *song) -{ - switch (task->tState) - { - case 0: // Initialize song - { - struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard; - u16 *lyrics; - s32 i; - - // Copy lyrics - if (gSpecialVar_0x8004 == 0) - lyrics = bard->songLyrics; - else - lyrics = bard->temporaryLyrics; - for (i = 0; i < 6; i++) - song->lyrics[i] = lyrics[i]; - - // Clear phonemes - for (i = 0; i < 6; i++) - { - song->phonemes[i].sound = 0xFFFF; - song->phonemes[i].length = 0; - song->phonemes[i].pitch = 0; - song->phonemes[i].volume = 0; - } - song->currWord = 0; - song->currPhoneme = 0; - song->var04 = 0; - } - break; - case 1: // Wait for BGM to end - break; - case 2: // Initialize word - { - u16 word = song->lyrics[song->currWord]; - const struct BardSound *sounds = GetWordSounds(EC_GROUP(word), EC_INDEX(word)); - - song->var04 = 0; - GetWordPhonemes(song, sounds, MACRO1(word)); - } - break; - case 3: - case 4: - { - struct BardPhoneme *phoneme = &song->phonemes[song->currPhoneme]; - - switch (song->state) - { - case 0: - if (song->phonemeTimer == 0) // Timer has expired. Move to next phoneme - { - if (song->currPhoneme == 6 || phoneme->sound == 0xFF) - { - song->state = 0xFE; - break; - } - song->phonemeTimer = phoneme->length; - if (phoneme->sound <= 50) - { - u16 num = phoneme->sound / 3; - - m4aSongNumStart(249 + num * 3); - } - song->state = 1; - } - else - { - if (song->voiceInflection > 10) - song->volume -= 2; - if (song->voiceInflection & 1) - song->pitch += 64; - else - song->pitch -= 64; - m4aMPlayVolumeControl(&gMPlay_SE2, 0xFFFF, song->volume); - m4aMPlayPitchControl(&gMPlay_SE2, 0xFFFF, song->pitch); - song->voiceInflection++; - } - song->phonemeTimer--; - break; - case 1: - song->currPhoneme++; - song->state = 0; - if (phoneme->sound <= 50) - { - song->volume = 0x100 + phoneme->volume * 16; - m4aMPlayVolumeControl(&gMPlay_SE2, 0xFFFF, song->volume); - song->pitch = 0x200 + phoneme->pitch; - m4aMPlayPitchControl(&gMPlay_SE2, 0xFFFF, song->pitch); - } - break; - case 0xFE: - m4aMPlayStop(&gMPlay_SE2); - song->state = 0xFF; - break; - } - } - break; - case 5: - break; - } -} - -static void Task_BardSong(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; // r5 - - BardSing(task, &gUnknown_03005DA0); - switch (task->tState) - { - case 0: // Initialize song - PrepareSongText(); - InitWindowFromConfig(gMenuWindowPtr, &gWindowConfig_81E6CE4); - sub_8002EB0(gMenuWindowPtr, gStringVar4, 2, 4, 15); - task->data[1] = 0; - task->data[2] = 0; - task->tCharIndex = 0; - task->tCurrWord = 0; - FadeOutBGMTemporarily(4); - task->tState = 1; - break; - case 1: // Wait for BGM to end - if (IsBGMPausedOrStopped()) - task->tState = 2; - break; - case 2: // Initialize word - { - struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard; - u8 *str = gStringVar4 + task->tCharIndex; - u16 wordLen = 0; - // Can't get it to match without hacking - u32 temp; - register s16 zero asm("r1"); - - while (*str != CHAR_SPACE - && *str != CHAR_NEWLINE - && *str != EXT_CTRL_CODE_BEGIN - && *str != EOS) - { - str++; - wordLen++; - } - if (!task->tUseTemporaryLyrics) - gUnknown_020388BC = MACRO1(bard->songLyrics[task->tCurrWord]); - else - gUnknown_020388BC = MACRO1(bard->temporaryLyrics[task->tCurrWord]); - temp = gUnknown_03005DA0.var04 / wordLen; - zero = 0; - gUnknown_03005DA0.var04 = temp; - if (gUnknown_03005DA0.var04 <= 0) - gUnknown_03005DA0.var04 = 1; - task->tCurrWord++; - if (task->data[2] == 0) - task->tState = 3; - else - task->tState = 5; - task->data[1] = zero; - } - break; - case 5: - if (task->data[2] == 0) - task->tState = 3; - else - task->data[2]--; - break; - case 3: - if (gStringVar4[task->tCharIndex] == EOS) - { - FadeInNewBGM(BGM_POKECEN, 6); - m4aMPlayFadeOutTemporarily(&gMPlay_SE2, 2); - EnableBothScriptContexts(); - DestroyTask(taskId); - } - else if (gStringVar4[task->tCharIndex] == CHAR_SPACE) - { - sub_8003418(gMenuWindowPtr); - task->tCharIndex++; - task->tState = 2; - task->data[2] = 0; - } - else if (gStringVar4[task->tCharIndex] == CHAR_NEWLINE) - { - task->tCharIndex++; - task->tState = 2; - task->data[2] = 0; - } - else if (gStringVar4[task->tCharIndex] == EXT_CTRL_CODE_BEGIN) - { - task->tCharIndex += 2; // skip over control codes - task->tState = 2; - task->data[2] = 8; - } - else if (gStringVar4[task->tCharIndex] == CHAR_SONG_WORD_SEPARATOR) - { - gStringVar4[task->tCharIndex] = CHAR_SPACE; // restore it back to a space - sub_8003418(gMenuWindowPtr); - task->tCharIndex++; - task->data[2] = 0; - } - else - { - switch (task->data[1]) - { - case 0: - sub_8003418(gMenuWindowPtr); - task->data[1]++; - break; - case 1: - task->data[1]++; - break; - case 2: - task->tCharIndex++; - task->data[1] = 0; - task->data[2] = gUnknown_03005DA0.var04; - task->tState = 4; - break; - } - } - break; - case 4: - task->data[2]--; - if (task->data[2] == 0) - task->tState = 3; - break; - } -} - -void sub_80F83D0(void) -{ - VarSet(0x4010, 0x45 + GetCurrentMauvilleOldMan()); -} - -struct Story -{ - u8 stat; - u8 minVal; - const u8 *title; - const u8 *action; - const u8 *fullText; -}; - -static const struct Story sStorytellerStories[] = -{ - {0x32, 1, gTextStoryteller_Story1Title, gTextStoryteller_Story1Action, gTextStoryteller_Story1Text}, - {0x02, 1, gTextStoryteller_Story2Title, gTextStoryteller_Story2Action, gTextStoryteller_Story2Text}, - {0x03, 1, gTextStoryteller_Story3Title, gTextStoryteller_Story3Action, gTextStoryteller_Story3Text}, - {0x04, 1, gTextStoryteller_Story4Title, gTextStoryteller_Story4Action, gTextStoryteller_Story4Text}, - {0x06, 1, gTextStoryteller_Story5Title, gTextStoryteller_Story5Action, gTextStoryteller_Story5Text}, - {0x09, 1, gTextStoryteller_Story6Title, gTextStoryteller_Story6Action, gTextStoryteller_Story6Text}, - {0x0B, 1, gTextStoryteller_Story7Title, gTextStoryteller_Story7Action, gTextStoryteller_Story7Text}, - {0x0C, 1, gTextStoryteller_Story8Title, gTextStoryteller_Story8Action, gTextStoryteller_Story8Text}, - {0x0D, 1, gTextStoryteller_Story9Title, gTextStoryteller_Story9Action, gTextStoryteller_Story9Text}, - {0x0E, 1, gTextStoryteller_Story10Title, gTextStoryteller_Story10Action, gTextStoryteller_Story10Text}, - {0x0F, 1, gTextStoryteller_Story11Title, gTextStoryteller_Story11Action, gTextStoryteller_Story11Text}, - {0x10, 1, gTextStoryteller_Story12Title, gTextStoryteller_Story12Action, gTextStoryteller_Story12Text}, - {0x11, 1, gTextStoryteller_Story13Title, gTextStoryteller_Story13Action, gTextStoryteller_Story13Text}, - {0x12, 1, gTextStoryteller_Story14Title, gTextStoryteller_Story14Action, gTextStoryteller_Story14Text}, - {0x13, 1, gTextStoryteller_Story15Title, gTextStoryteller_Story15Action, gTextStoryteller_Story15Text}, - {0x14, 1, gTextStoryteller_Story16Title, gTextStoryteller_Story16Action, gTextStoryteller_Story16Text}, - {0x1A, 1, gTextStoryteller_Story17Title, gTextStoryteller_Story17Action, gTextStoryteller_Story17Text}, - {0x1B, 1, gTextStoryteller_Story18Title, gTextStoryteller_Story18Action, gTextStoryteller_Story18Text}, - {0x1C, 1, gTextStoryteller_Story19Title, gTextStoryteller_Story19Action, gTextStoryteller_Story19Text}, - {0x1D, 2, gTextStoryteller_Story20Title, gTextStoryteller_Story20Action, gTextStoryteller_Story20Text}, - {0x1E, 1, gTextStoryteller_Story21Title, gTextStoryteller_Story21Action, gTextStoryteller_Story21Text}, - {0x21, 1, gTextStoryteller_Story22Title, gTextStoryteller_Story22Action, gTextStoryteller_Story22Text}, - {0x24, 1, gTextStoryteller_Story23Title, gTextStoryteller_Story23Action, gTextStoryteller_Story23Text}, - {0x25, 1, gTextStoryteller_Story24Title, gTextStoryteller_Story24Action, gTextStoryteller_Story24Text}, - {0x26, 1, gTextStoryteller_Story25Title, gTextStoryteller_Story25Action, gTextStoryteller_Story25Text}, - {0x27, 1, gTextStoryteller_Story26Title, gTextStoryteller_Story26Action, gTextStoryteller_Story26Text}, - {0x28, 1, gTextStoryteller_Story27Title, gTextStoryteller_Story27Action, gTextStoryteller_Story27Text}, - {0x29, 1, gTextStoryteller_Story28Title, gTextStoryteller_Story28Action, gTextStoryteller_Story28Text}, - {0x2A, 1, gTextStoryteller_Story29Title, gTextStoryteller_Story29Action, gTextStoryteller_Story29Text}, - {0x2B, 1, gTextStoryteller_Story30Title, gTextStoryteller_Story30Action, gTextStoryteller_Story30Text}, - {0x2C, 1, gTextStoryteller_Story31Title, gTextStoryteller_Story31Action, gTextStoryteller_Story31Text}, - {0x2D, 1, gTextStoryteller_Story32Title, gTextStoryteller_Story32Action, gTextStoryteller_Story32Text}, - {0x2E, 1, gTextStoryteller_Story33Title, gTextStoryteller_Story33Action, gTextStoryteller_Story33Text}, - {0x2F, 1, gTextStoryteller_Story34Title, gTextStoryteller_Story34Action, gTextStoryteller_Story34Text}, - {0x30, 1, gTextStoryteller_Story35Title, gTextStoryteller_Story35Action, gTextStoryteller_Story35Text}, - {0x31, 1, gTextStoryteller_Story36Title, gTextStoryteller_Story36Action, gTextStoryteller_Story36Text}, -}; - -static void StorytellerSetup(void) -{ - struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; - s32 i; - - storyteller->id = MAUVILLE_MAN_STORYTELLER; - storyteller->alreadyRecorded = FALSE; - for (i = 0; i < 4; i++) - { - storyteller->gameStatIDs[i] = 0; - storyteller->trainerNames[0][i] = EOS; // Maybe they meant storyteller->trainerNames[i][0] instead? - } -} - -static void sub_80F8428(void) -{ - struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; - - storyteller->id = MAUVILLE_MAN_STORYTELLER; - storyteller->alreadyRecorded = FALSE; -} - -static u32 StorytellerGetGameStat(u8 stat) -{ - if (stat == NUM_GAME_STATS) - stat = 0; - return GetGameStat(stat); -} - -static const struct Story *GetStoryByStat(u32 stat) -{ - s32 i; - - for (i = 0; i < 36; i++) - { - if (sStorytellerStories[i].stat == stat) - return &sStorytellerStories[i]; - } - return &sStorytellerStories[35]; -} - -static const u8 *GetStoryTitleByStat(u32 stat) -{ - return GetStoryByStat(stat)->title; -} - -static const u8 *GetStoryTextByStat(u32 stat) -{ - return GetStoryByStat(stat)->fullText; -} - -static const u8 *GetStoryActionByStat(u32 stat) -{ - return GetStoryByStat(stat)->action; -} - -static u8 GetFreeStorySlot(void) -{ - u8 i; - - for (i = 0; i < 4; i++) - { - struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; - - if (storyteller->gameStatIDs[i] == 0) - break; - } - return i; -} - -static u32 StorytellerGetRecordedTrainerStat(u32 trainer) -{ - u8 *ptr = gSaveBlock1.mauvilleMan.storyteller.statValues[trainer]; - - return ptr[0] | (ptr[1] << 8) | (ptr[2] << 16) | (ptr[3] << 24); -} - -static void StorytellerSetRecordedTrainerStat(u32 trainer, u32 val) -{ - u8 *ptr = gSaveBlock1.mauvilleMan.storyteller.statValues[trainer]; - - ptr[0] = val; - ptr[1] = val >> 8; - ptr[2] = val >> 16; - ptr[3] = val >> 24; -} - -static bool32 HasTrainerStatIncreased(u32 trainer) -{ - struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; - - if (StorytellerGetGameStat(storyteller->gameStatIDs[trainer]) > StorytellerGetRecordedTrainerStat(trainer)) - return TRUE; - else - return FALSE; -} - -static void GetStoryByStattellerPlayerName(u32 player, void *dst) -{ - u8 *name = gSaveBlock1.mauvilleMan.storyteller.trainerNames[player]; - - memset(dst, EOS, 8); - memcpy(dst, name, 7); -} - -static void StorytellerSetPlayerName(u32 player, const u8 *src) -{ - u8 *name = gSaveBlock1.mauvilleMan.storyteller.trainerNames[player]; - u8 len = StringLength(src); - - memset(name, EOS, 7); - StringCopyN(name, src, len); -} - -static void StorytellerRecordNewStat(u32 player, u32 stat) -{ - struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; - - storyteller->gameStatIDs[player] = stat; - StorytellerSetPlayerName(player, gSaveBlock2.playerName); - StorytellerSetRecordedTrainerStat(player, StorytellerGetGameStat(stat)); - ConvertIntToDecimalStringN(gStringVar1, StorytellerGetGameStat(stat), 0, 10); - StringCopy(gStringVar2, GetStoryActionByStat(stat)); -} - -static void ScrambleStatList(u8 *arr, s32 count) -{ - s32 i; - - for (i = 0; i < count; i++) - arr[i] = i; - for (i = 0; i < count; i++) - { - u32 a = Random() % count; - u32 b = Random() % count; - u8 temp = arr[a]; - arr[a] = arr[b]; - arr[b] = temp; - } -} - -// What purpose does this struct even serve? Only the length field is used. -static const struct {u32 length; struct MauvilleManStoryteller *unused1; u32 unused2;} sStorytellerStuff = -{ - 36, - &gSaveBlock1.mauvilleMan.storyteller, // unused - 12, // unused -}; - -static bool8 StorytellerInitializeRandomStat(void) -{ - u8 arr[sStorytellerStuff.length]; - s32 i; - s32 j; - - ScrambleStatList(arr, 36); - for (i = 0; i < 36; i++) - { - u8 stat = sStorytellerStories[arr[i]].stat; - u8 minVal = sStorytellerStories[arr[i]].minVal; - struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; - - for (j = 0; j < 4; j++) - { - if (gSaveBlock1.mauvilleMan.storyteller.gameStatIDs[j] == stat) - break; - } - if (j == 4 && StorytellerGetGameStat(stat) >= minVal) - { - storyteller->alreadyRecorded = TRUE; - StorytellerRecordNewStat(GetFreeStorySlot(), stat); - return TRUE; - } - } - return FALSE; -} - -static void StorytellerDisplayStory(u32 player) -{ - struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; - u8 stat = storyteller->gameStatIDs[player]; - - ConvertIntToDecimalStringN(gStringVar1, StorytellerGetRecordedTrainerStat(player), 0, 10); - StringCopy(gStringVar2, GetStoryActionByStat(stat)); - GetStoryByStattellerPlayerName(player, gStringVar3); - ShowFieldMessage(GetStoryTextByStat(stat)); -} - -static void PrintStoryList(void) -{ - s32 i; - - MenuDrawTextWindow(0, 0, 25, 4 + GetFreeStorySlot() * 2); - for (i = 0; i < 4; i++) - { - struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; - u8 stat = storyteller->gameStatIDs[i]; - - if (stat == 0) - break; - MenuPrint(GetStoryTitleByStat(stat), 1, 2 + i * 2); - } - MenuPrint(gPCText_Cancel, 1, 2 + i * 2); -} - -extern u8 gUnknown_03000748; - -static void Task_StoryListMenu(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - s32 selection; - - switch (task->data[0]) - { - case 0: - PrintStoryList(); - InitMenu(0, 1, 2, GetFreeStorySlot() + 1, 0, 24); - task->data[0]++; - break; - case 1: - selection = ProcessMenuInput(); - if (selection == -2) - break; - if (selection == -1 || selection == GetFreeStorySlot()) - { - gScriptResult = 0; - } - else - { - gScriptResult = 1; - gUnknown_03000748 = selection; - } - HandleDestroyMenuCursors(); - MenuZeroFillWindowRect(0, 0, 25, 12); - DestroyTask(taskId); - EnableBothScriptContexts(); - break; - } -} - -// Sets gScriptResult to TRUE if player selected a story -void ScrSpecial_StorytellerStoryListMenu(void) -{ - CreateTask(Task_StoryListMenu, 0x50); -} - -void ScrSpecial_StorytellerDisplayStory(void) -{ - StorytellerDisplayStory(gUnknown_03000748); -} - -u8 ScrSpecial_StorytellerGetFreeStorySlot(void) -{ - return GetFreeStorySlot(); -} - -// Returns TRUE if stat has increased -bool8 ScrSpecial_StorytellerUpdateStat(void) -{ - struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; - u8 r4 = storyteller->gameStatIDs[gUnknown_03000748]; - - if (HasTrainerStatIncreased(gUnknown_03000748) == TRUE) - { - StorytellerRecordNewStat(gUnknown_03000748, r4); - return TRUE; - } - return FALSE; -} - -bool8 ScrSpecial_HasStorytellerAlreadyRecorded(void) -{ - struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller; - - if (storyteller->alreadyRecorded == FALSE) - return FALSE; - else - return TRUE; -} - -bool8 ScrSpecial_StorytellerInitializeRandomStat(void) -{ - return StorytellerInitializeRandomStat(); -} diff --git a/src/new_game.c b/src/new_game.c index 1ef19bd00..46df14acd 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -11,7 +11,7 @@ #include "item_menu.h" #include "lottery_corner.h" #include "mail_data.h" -#include "mauville_old_man.h" +#include "mauville_man.h" #include "play_time.h" #include "player_pc.h" #include "pokeblock.h" diff --git a/src/record_mixing.c b/src/record_mixing.c index e5f892d20..30bcb29d1 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -10,7 +10,7 @@ #include "items.h" #include "load_save.h" #include "link.h" -#include "mauville_old_man.h" +#include "mauville_man.h" #include "menu.h" #include "mystery_event_script.h" #include "rng.h" diff --git a/src/strings.c b/src/strings.c index 219c5bec1..6c8dce9d6 100644 --- a/src/strings.c +++ b/src/strings.c @@ -861,7 +861,7 @@ const u8 gOtherText_AtBattleStart[] = _("At the battle’s start."); const u8 gOtherText_UponWinningBattle[] = _("Upon winning a battle."); const u8 gOtherText_UponLosingBattle[] = _("Upon losing a battle."); -// mauville_old_man? +// mauville_man? const u8 gOtherText_TheBardsSong[] = _("The BARD’s Song"); const u8 gOtherText_WhatsHipHappening[] = _("What’s hip and happening?"); const u8 gOtherText_Interview[] = _("Interview"); @@ -1781,7 +1781,7 @@ const u8 gOtherText_AtBattleStart[] = _("Zum Kampfbeginn"); const u8 gOtherText_UponWinningBattle[] = _("Über den Sieg"); const u8 gOtherText_UponLosingBattle[] = _("Über die Niederlage"); -// mauville_old_man? +// mauville_man? const u8 gOtherText_TheBardsSong[] = _("Das BARDEN-Lied"); const u8 gOtherText_WhatsHipHappening[] = _("Was ist hip? Was ist top?"); const u8 gOtherText_Interview[] = _("Interview"); diff --git a/src/trader.c b/src/trader.c index 4274d38de..61f48fad8 100644 --- a/src/trader.c +++ b/src/trader.c @@ -3,7 +3,7 @@ #include "decoration_inventory.h" #include "event_data.h" #include "main.h" -#include "mauville_old_man.h" +#include "mauville_man.h" #include "menu.h" #include "menu_helpers.h" #include "script.h" diff --git a/sym_bss.txt b/sym_bss.txt index a6eaeefe1..fc3837739 100644 --- a/sym_bss.txt +++ b/sym_bss.txt @@ -109,11 +109,7 @@ gUnknown_03000740: @ 3000740 gUnknown_03000744: @ 3000744 .space 0x4 -@ mauville_old_man - -gUnknown_03000748: @ 3000748 - .space 0x4 - + .include "src/mauville_man.o" .include "src/menu_helpers.o" .include "src/contest_painting.o" .include "src/pokeblock.o" diff --git a/sym_ewram.txt b/sym_ewram.txt index 24be56da3..06c554ac7 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -589,7 +589,7 @@ gUnknown_020388B4: @ 20388B4 .space 0x4 .include "src/mon_markings.o" - .include "src/mauville_old_man.o" + .include "src/mauville_man.o" .include "src/menu_helpers.o" .include "src/region_map.o" .include "src/decoration.o" -- cgit v1.2.3 From febd011808289c9ec1dbf7331c7cc6fbe1ad2167 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 9 Sep 2017 00:29:12 -0500 Subject: finish decompiling linkopponent battle controller --- asm/battle_controller_linkopponent1.s | 1421 --------------------------------- ld_script.txt | 1 - src/battle_controller_linkopponent2.c | 333 ++++++++ 3 files changed, 333 insertions(+), 1422 deletions(-) delete mode 100644 asm/battle_controller_linkopponent1.s diff --git a/asm/battle_controller_linkopponent1.s b/asm/battle_controller_linkopponent1.s deleted file mode 100644 index 4fa523c83..000000000 --- a/asm/battle_controller_linkopponent1.s +++ /dev/null @@ -1,1421 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - - - thumb_func_start nullsub_47 -nullsub_47: @ 803750C - bx lr - thumb_func_end nullsub_47 - - thumb_func_start SetBankFuncToLinkOpponentBufferRunCommand -SetBankFuncToLinkOpponentBufferRunCommand: @ 8037510 - ldr r1, _08037520 @ =gBattleBankFunc - ldr r0, _08037524 @ =gActiveBank - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r1, _08037528 @ =sub_803752C - str r1, [r0] - bx lr - .align 2, 0 -_08037520: .4byte gBattleBankFunc -_08037524: .4byte gActiveBank -_08037528: .4byte sub_803752C - thumb_func_end SetBankFuncToLinkOpponentBufferRunCommand - - thumb_func_start sub_803752C -sub_803752C: @ 803752C - push {lr} - ldr r2, _08037560 @ =gBattleExecBuffer - ldr r1, _08037564 @ =gBitTable - ldr r0, _08037568 @ =gActiveBank - ldrb r3, [r0] - lsls r0, r3, 2 - adds r0, r1 - ldr r1, [r2] - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - beq _08037578 - ldr r0, _0803756C @ =gBattleBufferA - lsls r1, r3, 9 - adds r1, r0 - ldrb r0, [r1] - cmp r0, 0x38 - bhi _08037574 - ldr r0, _08037570 @ =gLinkOpponentBufferCommands - ldrb r1, [r1] - lsls r1, 2 - adds r1, r0 - ldr r0, [r1] - bl _call_via_r0 - b _08037578 - .align 2, 0 -_08037560: .4byte gBattleExecBuffer -_08037564: .4byte gBitTable -_08037568: .4byte gActiveBank -_0803756C: .4byte gBattleBufferA -_08037570: .4byte gLinkOpponentBufferCommands -_08037574: - bl LinkOpponentBufferExecCompleted -_08037578: - pop {r0} - bx r0 - thumb_func_end sub_803752C - - thumb_func_start sub_803757C -sub_803757C: @ 803757C - push {lr} - ldr r2, _080375A4 @ =gSprites - ldr r1, _080375A8 @ =gObjectBankIDs - ldr r0, _080375AC @ =gActiveBank - ldrb r0, [r0] - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r1, [r0] - ldr r0, _080375B0 @ =SpriteCallbackDummy - cmp r1, r0 - bne _080375A0 - bl LinkOpponentBufferExecCompleted -_080375A0: - pop {r0} - bx r0 - .align 2, 0 -_080375A4: .4byte gSprites -_080375A8: .4byte gObjectBankIDs -_080375AC: .4byte gActiveBank -_080375B0: .4byte SpriteCallbackDummy - thumb_func_end sub_803757C - - thumb_func_start sub_80375B4 -sub_80375B4: @ 80375B4 - push {r4-r6,lr} - ldr r4, _0803762C @ =gSprites - ldr r6, _08037630 @ =gObjectBankIDs - ldr r5, _08037634 @ =gActiveBank - ldrb r0, [r5] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r2, r0, 2 - adds r0, r4, 0 - adds r0, 0x1C - adds r0, r2, r0 - ldr r1, [r0] - ldr r0, _08037638 @ =SpriteCallbackDummy - cmp r1, r0 - bne _08037624 - adds r0, r2, r4 - ldrh r0, [r0, 0x6] - bl sub_8031B74 - ldrb r0, [r5] - adds r0, r6 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - ldrh r0, [r1, 0x38] - ldr r2, _0803763C @ =0x000003ff - ands r2, r0 - ldrh r3, [r1, 0x4] - ldr r0, _08037640 @ =0xfffffc00 - ands r0, r3 - orrs r0, r2 - strh r0, [r1, 0x4] - ldrb r0, [r5] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl FreeSpriteOamMatrix - ldrb r0, [r5] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite - bl LinkOpponentBufferExecCompleted -_08037624: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0803762C: .4byte gSprites -_08037630: .4byte gObjectBankIDs -_08037634: .4byte gActiveBank -_08037638: .4byte SpriteCallbackDummy -_0803763C: .4byte 0x000003ff -_08037640: .4byte 0xfffffc00 - thumb_func_end sub_80375B4 - - thumb_func_start sub_8037644 -sub_8037644: @ 8037644 - push {lr} - ldr r3, _08037678 @ =gActiveBank - ldrb r0, [r3] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - ldr r2, _0803767C @ =0x02017810 - adds r1, r2 - ldrb r0, [r1, 0x9] - subs r0, 0x1 - strb r0, [r1, 0x9] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - bne _08037674 - ldrb r0, [r3] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - movs r0, 0 - strb r0, [r1, 0x9] - bl LinkOpponentBufferExecCompleted -_08037674: - pop {r0} - bx r0 - .align 2, 0 -_08037678: .4byte gActiveBank -_0803767C: .4byte 0x02017810 - thumb_func_end sub_8037644 - - thumb_func_start sub_8037680 -sub_8037680: @ 8037680 - push {r4-r7,lr} - movs r6, 0 - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - beq _080376A4 - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - beq _080376D8 - ldr r0, _080376C4 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _080376D8 -_080376A4: - ldr r2, _080376C8 @ =gSprites - ldr r1, _080376CC @ =gHealthboxIDs - ldr r0, _080376D0 @ =gActiveBank - ldrb r0, [r0] - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r1, [r0] - ldr r0, _080376D4 @ =SpriteCallbackDummy - cmp r1, r0 - bne _0803770E - b _0803770C - .align 2, 0 -_080376C4: .4byte gBattleTypeFlags -_080376C8: .4byte gSprites -_080376CC: .4byte gHealthboxIDs -_080376D0: .4byte gActiveBank -_080376D4: .4byte SpriteCallbackDummy -_080376D8: - ldr r2, _080377D8 @ =gSprites - ldr r5, _080377DC @ =gHealthboxIDs - ldr r0, _080377E0 @ =gActiveBank - ldrb r3, [r0] - adds r0, r3, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r4, [r0] - ldr r0, _080377E4 @ =SpriteCallbackDummy - cmp r4, r0 - bne _0803770E - movs r0, 0x2 - eors r3, r0 - adds r0, r3, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldr r0, [r0] - cmp r0, r4 - bne _0803770E -_0803770C: - movs r6, 0x1 -_0803770E: - bl IsCryPlayingOrClearCrySongs - lsls r0, 24 - cmp r0, 0 - beq _0803771A - movs r6, 0 -_0803771A: - cmp r6, 0 - bne _08037720 - b _08037822 -_08037720: - ldr r7, _080377E0 @ =gActiveBank - ldrb r0, [r7] - bl GetBankIdentity - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x1 - bne _080377B4 - ldrb r2, [r7] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - ldr r5, _080377E8 @ =0x02017810 - adds r4, r0, r5 - ldrb r1, [r4, 0x1] - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _08037822 - movs r6, 0x2 - adds r1, r6, 0 - eors r1, r2 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrb r1, [r0, 0x1] - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _08037822 - ldrb r1, [r4] - movs r3, 0x7F - adds r0, r3, 0 - ands r0, r1 - strb r0, [r4] - ldrb r0, [r7] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - ldrb r2, [r1, 0x1] - movs r4, 0x2 - negs r4, r4 - adds r0, r4, 0 - ands r0, r2 - strb r0, [r1, 0x1] - ldrb r0, [r7] - adds r1, r6, 0 - eors r1, r0 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrb r1, [r0] - ands r3, r1 - strb r3, [r0] - ldrb r0, [r7] - adds r1, r6, 0 - eors r1, r0 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrb r1, [r0, 0x1] - ands r4, r1 - strb r4, [r0, 0x1] - ldr r4, _080377EC @ =0x000027f9 - adds r0, r4, 0 - bl FreeSpriteTilesByTag - adds r0, r4, 0 - bl FreeSpritePaletteByTag -_080377B4: - ldr r0, _080377F0 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _080377F8 - ldrb r0, [r7] - bl GetBankIdentity - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08037804 - ldr r0, _080377F4 @ =gMPlay_BGM - bl m4aMPlayContinue - b _08037804 - .align 2, 0 -_080377D8: .4byte gSprites -_080377DC: .4byte gHealthboxIDs -_080377E0: .4byte gActiveBank -_080377E4: .4byte SpriteCallbackDummy -_080377E8: .4byte 0x02017810 -_080377EC: .4byte 0x000027f9 -_080377F0: .4byte gBattleTypeFlags -_080377F4: .4byte gMPlay_BGM -_080377F8: - ldr r0, _08037828 @ =gMPlay_BGM - ldr r1, _0803782C @ =0x0000ffff - movs r2, 0x80 - lsls r2, 1 - bl m4aMPlayVolumeControl -_08037804: - ldr r2, _08037830 @ =gActiveBank - ldrb r1, [r2] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - ldr r1, _08037834 @ =0x02017810 - adds r0, r1 - movs r1, 0x3 - strb r1, [r0, 0x9] - ldr r1, _08037838 @ =gBattleBankFunc - ldrb r0, [r2] - lsls r0, 2 - adds r0, r1 - ldr r1, _0803783C @ =sub_8037644 - str r1, [r0] -_08037822: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08037828: .4byte gMPlay_BGM -_0803782C: .4byte 0x0000ffff -_08037830: .4byte gActiveBank -_08037834: .4byte 0x02017810 -_08037838: .4byte gBattleBankFunc -_0803783C: .4byte sub_8037644 - thumb_func_end sub_8037680 - - thumb_func_start sub_8037840 -sub_8037840: @ 8037840 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r6, _08037A48 @ =gActiveBank - ldrb r2, [r6] - lsls r3, r2, 1 - adds r0, r3, r2 - lsls r0, 2 - ldr r5, _08037A4C @ =0x02017810 - adds r0, r5 - ldrb r1, [r0] - movs r4, 0x88 - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - bne _08037878 - ldr r0, _08037A50 @ =gBattlePartyID - adds r0, r3, r0 - ldrh r1, [r0] - movs r0, 0x64 - muls r1, r0 - ldr r0, _08037A54 @ =gEnemyParty - adds r1, r0 - adds r0, r2, 0 - bl sub_8141828 -_08037878: - ldrb r0, [r6] - movs r7, 0x2 - adds r2, r7, 0 - eors r2, r0 - lsls r3, r2, 1 - adds r0, r3, r2 - lsls r0, 2 - adds r0, r5 - ldrb r1, [r0] - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - bne _080378A6 - ldr r0, _08037A50 @ =gBattlePartyID - adds r0, r3, r0 - ldrh r1, [r0] - movs r0, 0x64 - muls r1, r0 - ldr r0, _08037A54 @ =gEnemyParty - adds r1, r0 - adds r0, r2, 0 - bl sub_8141828 -_080378A6: - ldrb r2, [r6] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - adds r0, r5 - ldrb r1, [r0] - movs r3, 0x8 - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _080378BE - b _08037A3A -_080378BE: - adds r1, r2, 0 - eors r1, r7 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrb r1, [r0] - adds r0, r3, 0 - ands r0, r1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - beq _080378DA - b _08037A3A -_080378DA: - ldr r0, _08037A58 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0803791A - adds r0, r2, 0 - bl GetBankIdentity - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - bne _0803791A - ldrb r0, [r6] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - ldrb r0, [r1, 0x9] - adds r0, 0x1 - strb r0, [r1, 0x9] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0803790E - b _08037A3A -_0803790E: - ldrb r1, [r6] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - strb r4, [r0, 0x9] -_0803791A: - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - beq _080379B2 - ldr r0, _08037A58 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - bne _080379B2 - ldr r1, _08037A5C @ =gUnknown_0300434C - ldr r5, _08037A48 @ =gActiveBank - ldrb r0, [r5] - movs r4, 0x2 - eors r0, r4 - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08037A60 @ =gSprites - adds r0, r1 - bl DestroySprite - ldr r0, _08037A64 @ =gHealthboxIDs - mov r8, r0 - ldrb r0, [r5] - adds r1, r4, 0 - eors r1, r0 - mov r2, r8 - adds r0, r1, r2 - ldrb r0, [r0] - ldr r2, _08037A50 @ =gBattlePartyID - mov r10, r2 - lsls r1, 1 - add r1, r10 - ldrh r1, [r1] - movs r2, 0x64 - mov r9, r2 - mov r2, r9 - muls r2, r1 - adds r1, r2, 0 - ldr r6, _08037A54 @ =gEnemyParty - adds r1, r6 - movs r2, 0 - bl sub_8045A5C - ldrb r0, [r5] - eors r0, r4 - bl sub_804777C - ldrb r0, [r5] - eors r0, r4 - add r0, r8 - ldrb r0, [r0] - bl sub_8043DFC - ldrb r0, [r5] - eors r4, r0 - lsls r0, r4, 1 - add r0, r10 - ldrh r0, [r0] - mov r1, r9 - muls r1, r0 - adds r0, r1, 0 - adds r0, r6 - movs r1, 0xB - bl GetMonData - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - adds r0, r4, 0 - bl sub_8032984 -_080379B2: - ldr r1, _08037A5C @ =gUnknown_0300434C - ldr r4, _08037A48 @ =gActiveBank - ldrb r0, [r4] - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08037A60 @ =gSprites - adds r0, r1 - bl DestroySprite - ldr r5, _08037A64 @ =gHealthboxIDs - ldrb r1, [r4] - adds r0, r1, r5 - ldrb r0, [r0] - ldr r2, _08037A50 @ =gBattlePartyID - mov r9, r2 - lsls r1, 1 - add r1, r9 - ldrh r1, [r1] - movs r2, 0x64 - mov r8, r2 - mov r2, r8 - muls r2, r1 - adds r1, r2, 0 - ldr r6, _08037A54 @ =gEnemyParty - adds r1, r6 - movs r2, 0 - bl sub_8045A5C - ldrb r0, [r4] - bl sub_804777C - ldrb r0, [r4] - adds r0, r5 - ldrb r0, [r0] - bl sub_8043DFC - ldrb r5, [r4] - lsls r0, r5, 1 - add r0, r9 - ldrh r0, [r0] - mov r1, r8 - muls r1, r0 - adds r0, r1, 0 - adds r0, r6 - movs r1, 0xB - bl GetMonData - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - adds r0, r5, 0 - bl sub_8032984 - ldr r2, _08037A68 @ =0x02017840 - ldrb r1, [r2, 0x9] - movs r0, 0x2 - negs r0, r0 - ands r0, r1 - strb r0, [r2, 0x9] - ldr r1, _08037A6C @ =gBattleBankFunc - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, _08037A70 @ =sub_8037680 - str r1, [r0] -_08037A3A: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08037A48: .4byte gActiveBank -_08037A4C: .4byte 0x02017810 -_08037A50: .4byte gBattlePartyID -_08037A54: .4byte gEnemyParty -_08037A58: .4byte gBattleTypeFlags -_08037A5C: .4byte gUnknown_0300434C -_08037A60: .4byte gSprites -_08037A64: .4byte gHealthboxIDs -_08037A68: .4byte 0x02017840 -_08037A6C: .4byte gBattleBankFunc -_08037A70: .4byte sub_8037680 - thumb_func_end sub_8037840 - - thumb_func_start sub_8037A74 -sub_8037A74: @ 8037A74 - push {r4-r7,lr} - ldr r2, _08037ACC @ =gSprites - ldr r0, _08037AD0 @ =gObjectBankIDs - ldr r7, _08037AD4 @ =gActiveBank - ldrb r3, [r7] - adds r0, r3, r0 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r0, r2 - adds r0, r1, 0 - adds r0, 0x3F - ldrb r0, [r0] - lsls r0, 27 - lsrs r2, r0, 31 - cmp r2, 0x1 - bne _08037B18 - movs r4, 0x24 - ldrsh r0, [r1, r4] - cmp r0, 0 - bne _08037B18 - lsls r4, r3, 1 - adds r0, r4, r3 - lsls r0, 2 - ldr r6, _08037AD8 @ =0x02017810 - adds r1, r0, r6 - ldrb r5, [r1] - movs r0, 0x80 - ands r0, r5 - cmp r0, 0 - bne _08037AE4 - ldr r0, _08037ADC @ =gBattlePartyID - adds r0, r4, r0 - ldrh r1, [r0] - movs r0, 0x64 - muls r1, r0 - ldr r0, _08037AE0 @ =gEnemyParty - adds r1, r0 - adds r0, r3, 0 - bl sub_8141828 - b _08037B18 - .align 2, 0 -_08037ACC: .4byte gSprites -_08037AD0: .4byte gObjectBankIDs -_08037AD4: .4byte gActiveBank -_08037AD8: .4byte 0x02017810 -_08037ADC: .4byte gBattlePartyID -_08037AE0: .4byte gEnemyParty -_08037AE4: - ldrb r0, [r1, 0x1] - ands r2, r0 - cmp r2, 0 - beq _08037B18 - movs r0, 0x7F - ands r0, r5 - strb r0, [r1] - ldrb r0, [r7] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - ldrb r2, [r1, 0x1] - movs r0, 0x2 - negs r0, r0 - ands r0, r2 - strb r0, [r1, 0x1] - ldr r4, _08037B20 @ =0x000027f9 - adds r0, r4, 0 - bl FreeSpriteTilesByTag - adds r0, r4, 0 - bl FreeSpritePaletteByTag - bl LinkOpponentBufferExecCompleted -_08037B18: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08037B20: .4byte 0x000027f9 - thumb_func_end sub_8037A74 - - thumb_func_start sub_8037B24 -sub_8037B24: @ 8037B24 - push {r4-r6,lr} - ldr r6, _08037B64 @ =gActiveBank - ldrb r0, [r6] - ldr r5, _08037B68 @ =gHealthboxIDs - adds r1, r0, r5 - ldrb r1, [r1] - movs r2, 0 - movs r3, 0 - bl sub_8045C78 - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - ldrb r0, [r6] - adds r0, r5 - ldrb r0, [r0] - bl sub_8043DFC - lsls r4, 16 - asrs r1, r4, 16 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _08037B6C - ldrb r0, [r6] - adds r0, r5 - ldrb r0, [r0] - movs r2, 0 - bl sub_80440EC - b _08037B70 - .align 2, 0 -_08037B64: .4byte gActiveBank -_08037B68: .4byte gHealthboxIDs -_08037B6C: - bl LinkOpponentBufferExecCompleted -_08037B70: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8037B24 - - thumb_func_start sub_8037B78 -sub_8037B78: @ 8037B78 - push {lr} - ldr r2, _08037BAC @ =gSprites - ldr r0, _08037BB0 @ =gObjectBankIDs - ldr r1, _08037BB4 @ =gActiveBank - ldrb r3, [r1] - adds r0, r3, r0 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - adds r0, 0x3E - ldrb r0, [r0] - lsls r0, 31 - cmp r0, 0 - bne _08037BA6 - ldr r0, _08037BB8 @ =gHealthboxIDs - adds r0, r3, r0 - ldrb r0, [r0] - bl sub_8043DB0 - bl LinkOpponentBufferExecCompleted -_08037BA6: - pop {r0} - bx r0 - .align 2, 0 -_08037BAC: .4byte gSprites -_08037BB0: .4byte gObjectBankIDs -_08037BB4: .4byte gActiveBank -_08037BB8: .4byte gHealthboxIDs - thumb_func_end sub_8037B78 - - thumb_func_start sub_8037BBC -sub_8037BBC: @ 8037BBC - push {r4-r6,lr} - ldr r6, _08037C18 @ =gActiveBank - ldrb r2, [r6] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - ldr r1, _08037C1C @ =0x02017810 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - bne _08037C12 - ldr r5, _08037C20 @ =gObjectBankIDs - adds r0, r2, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, _08037C24 @ =gSprites - adds r0, r4 - bl FreeSpriteOamMatrix - ldrb r0, [r6] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite - ldrb r0, [r6] - bl sub_8032A08 - ldr r1, _08037C28 @ =gHealthboxIDs - ldrb r0, [r6] - adds r0, r1 - ldrb r0, [r0] - bl sub_8043DB0 - bl LinkOpponentBufferExecCompleted -_08037C12: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08037C18: .4byte gActiveBank -_08037C1C: .4byte 0x02017810 -_08037C20: .4byte gObjectBankIDs -_08037C24: .4byte gSprites -_08037C28: .4byte gHealthboxIDs - thumb_func_end sub_8037BBC - - thumb_func_start sub_8037C2C -sub_8037C2C: @ 8037C2C - push {lr} - ldr r0, _08037C40 @ =gUnknown_03004210 - ldrh r0, [r0, 0x16] - cmp r0, 0 - bne _08037C3A - bl LinkOpponentBufferExecCompleted -_08037C3A: - pop {r0} - bx r0 - .align 2, 0 -_08037C40: .4byte gUnknown_03004210 - thumb_func_end sub_8037C2C - - thumb_func_start dp01t_0F_4_move_anim -dp01t_0F_4_move_anim: @ 8037C44 - push {r4,lr} - ldr r1, _08037C80 @ =gObjectBankIDs - ldr r0, _08037C84 @ =gActiveBank - ldrb r0, [r0] - adds r0, r1 - ldrb r1, [r0] - ldr r2, _08037C88 @ =gSprites - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r4, r0, r2 - movs r1, 0x30 - ldrsh r0, [r4, r1] - cmp r0, 0x20 - bne _08037C90 - movs r3, 0 - movs r0, 0 - strh r0, [r4, 0x30] - adds r2, r4, 0 - adds r2, 0x3E - ldrb r1, [r2] - subs r0, 0x5 - ands r0, r1 - strb r0, [r2] - ldr r0, _08037C8C @ =gDoingBattleAnim - strb r3, [r0] - bl LinkOpponentBufferExecCompleted - b _08037CBA - .align 2, 0 -_08037C80: .4byte gObjectBankIDs -_08037C84: .4byte gActiveBank -_08037C88: .4byte gSprites -_08037C8C: .4byte gDoingBattleAnim -_08037C90: - ldrh r0, [r4, 0x30] - movs r1, 0x3 - ands r0, r1 - cmp r0, 0 - bne _08037CB4 - adds r3, r4, 0 - adds r3, 0x3E - ldrb r2, [r3] - lsls r0, r2, 29 - lsrs r0, 31 - movs r1, 0x1 - eors r1, r0 - lsls r1, 2 - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] -_08037CB4: - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] -_08037CBA: - pop {r4} - pop {r0} - bx r0 - thumb_func_end dp01t_0F_4_move_anim - - thumb_func_start sub_8037CC0 -sub_8037CC0: @ 8037CC0 - push {r4,lr} - ldr r2, _08037D10 @ =gSprites - ldr r0, _08037D14 @ =gHealthboxIDs - ldr r4, _08037D18 @ =gActiveBank - ldrb r3, [r4] - adds r0, r3, r0 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r1, [r0] - ldr r0, _08037D1C @ =SpriteCallbackDummy - cmp r1, r0 - bne _08037D08 - lsls r0, r3, 2 - ldr r1, _08037D20 @ =0x02017800 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _08037CFC - adds r0, r3, 0 - adds r1, r3, 0 - adds r2, r3, 0 - movs r3, 0x6 - bl move_anim_start_t4 -_08037CFC: - ldr r0, _08037D24 @ =gBattleBankFunc - ldrb r1, [r4] - lsls r1, 2 - adds r1, r0 - ldr r0, _08037D28 @ =sub_8037D2C - str r0, [r1] -_08037D08: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08037D10: .4byte gSprites -_08037D14: .4byte gHealthboxIDs -_08037D18: .4byte gActiveBank -_08037D1C: .4byte SpriteCallbackDummy -_08037D20: .4byte 0x02017800 -_08037D24: .4byte gBattleBankFunc -_08037D28: .4byte sub_8037D2C - thumb_func_end sub_8037CC0 - - thumb_func_start sub_8037D2C -sub_8037D2C: @ 8037D2C - push {lr} - ldr r0, _08037D58 @ =gActiveBank - ldrb r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - ldr r1, _08037D5C @ =0x02017810 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - bne _08037D52 - ldr r0, _08037D60 @ =c3_0802FDF4 - movs r1, 0xA - bl CreateTask - bl LinkOpponentBufferExecCompleted -_08037D52: - pop {r0} - bx r0 - .align 2, 0 -_08037D58: .4byte gActiveBank -_08037D5C: .4byte 0x02017810 -_08037D60: .4byte c3_0802FDF4 - thumb_func_end sub_8037D2C - - thumb_func_start sub_8037D64 -sub_8037D64: @ 8037D64 - push {r4,r5,lr} - ldr r5, _08037E08 @ =gActiveBank - ldrb r1, [r5] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - ldr r3, _08037E0C @ =0x02017810 - adds r2, r0, r3 - ldrb r1, [r2, 0x1] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08037E00 - ldrb r1, [r2] - movs r0, 0x7F - ands r0, r1 - strb r0, [r2] - ldrb r0, [r5] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r3 - ldrb r2, [r1, 0x1] - movs r0, 0x2 - negs r0, r0 - ands r0, r2 - strb r0, [r1, 0x1] - ldr r4, _08037E10 @ =0x000027f9 - adds r0, r4, 0 - bl FreeSpriteTilesByTag - adds r0, r4, 0 - bl FreeSpritePaletteByTag - ldr r1, _08037E14 @ =gObjectBankIDs - ldrb r0, [r5] - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08037E18 @ =gSprites - adds r0, r1 - movs r1, 0 - bl StartSpriteAnim - ldr r4, _08037E1C @ =gHealthboxIDs - ldrb r1, [r5] - adds r0, r1, r4 - ldrb r0, [r0] - ldr r2, _08037E20 @ =gBattlePartyID - lsls r1, 1 - adds r1, r2 - ldrh r2, [r1] - movs r1, 0x64 - muls r1, r2 - ldr r2, _08037E24 @ =gEnemyParty - adds r1, r2 - movs r2, 0 - bl sub_8045A5C - ldrb r0, [r5] - bl sub_804777C - ldrb r0, [r5] - adds r0, r4 - ldrb r0, [r0] - bl sub_8043DFC - ldrb r0, [r5] - bl sub_8031F88 - ldr r1, _08037E28 @ =gBattleBankFunc - ldrb r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r1, _08037E2C @ =sub_8037CC0 - str r1, [r0] -_08037E00: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08037E08: .4byte gActiveBank -_08037E0C: .4byte 0x02017810 -_08037E10: .4byte 0x000027f9 -_08037E14: .4byte gObjectBankIDs -_08037E18: .4byte gSprites -_08037E1C: .4byte gHealthboxIDs -_08037E20: .4byte gBattlePartyID -_08037E24: .4byte gEnemyParty -_08037E28: .4byte gBattleBankFunc -_08037E2C: .4byte sub_8037CC0 - thumb_func_end sub_8037D64 - - thumb_func_start sub_8037E30 -sub_8037E30: @ 8037E30 - push {r4-r6,lr} - ldr r5, _08037ECC @ =gActiveBank - ldrb r2, [r5] - lsls r3, r2, 1 - adds r0, r3, r2 - lsls r0, 2 - ldr r6, _08037ED0 @ =0x02017810 - adds r0, r6 - ldrb r1, [r0] - movs r0, 0x88 - ands r0, r1 - cmp r0, 0 - bne _08037E5E - ldr r0, _08037ED4 @ =gBattlePartyID - adds r0, r3, r0 - ldrh r1, [r0] - movs r0, 0x64 - muls r1, r0 - ldr r0, _08037ED8 @ =gEnemyParty - adds r1, r0 - adds r0, r2, 0 - bl sub_8141828 -_08037E5E: - ldr r4, _08037EDC @ =gSprites - ldr r0, _08037EE0 @ =gUnknown_0300434C - ldrb r2, [r5] - adds r0, r2, r0 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r3, r0, 2 - adds r0, r4, 0 - adds r0, 0x1C - adds r0, r3, r0 - ldr r1, [r0] - ldr r0, _08037EE4 @ =SpriteCallbackDummy - cmp r1, r0 - bne _08037EC4 - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - adds r0, r6 - ldrb r1, [r0] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - bne _08037EC4 - adds r0, r3, r4 - bl DestroySprite - ldrb r4, [r5] - ldr r1, _08037ED4 @ =gBattlePartyID - lsls r0, r4, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08037ED8 @ =gEnemyParty - adds r0, r1 - movs r1, 0xB - bl GetMonData - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - adds r0, r4, 0 - bl sub_8032984 - ldr r1, _08037EE8 @ =gBattleBankFunc - ldrb r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r1, _08037EEC @ =sub_8037D64 - str r1, [r0] -_08037EC4: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08037ECC: .4byte gActiveBank -_08037ED0: .4byte 0x02017810 -_08037ED4: .4byte gBattlePartyID -_08037ED8: .4byte gEnemyParty -_08037EDC: .4byte gSprites -_08037EE0: .4byte gUnknown_0300434C -_08037EE4: .4byte SpriteCallbackDummy -_08037EE8: .4byte gBattleBankFunc -_08037EEC: .4byte sub_8037D64 - thumb_func_end sub_8037E30 - - thumb_func_start sub_8037EF0 -sub_8037EF0: @ 8037EF0 - push {lr} - ldr r0, _08037F20 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _08037F1C - movs r0, 0x5A - bl m4aSongNumStop - ldr r3, _08037F24 @ =gMain - ldr r0, _08037F28 @ =0x0000043d - adds r2, r3, r0 - ldrb r1, [r2] - movs r0, 0x3 - negs r0, r0 - ands r0, r1 - strb r0, [r2] - ldr r0, _08037F2C @ =gPreBattleCallback1 - ldr r0, [r0] - str r0, [r3] - ldr r0, _08037F30 @ =c2_8011A1C - bl SetMainCallback2 -_08037F1C: - pop {r0} - bx r0 - .align 2, 0 -_08037F20: .4byte gReceivedRemoteLinkPlayers -_08037F24: .4byte gMain -_08037F28: .4byte 0x0000043d -_08037F2C: .4byte gPreBattleCallback1 -_08037F30: .4byte c2_8011A1C - thumb_func_end sub_8037EF0 - - thumb_func_start sub_8037F34 -sub_8037F34: @ 8037F34 - push {lr} - ldr r0, _08037F64 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08037F9A - ldr r0, _08037F68 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08037F78 - bl sub_800832C - ldr r1, _08037F6C @ =gBattleBankFunc - ldr r0, _08037F70 @ =gActiveBank - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r1, _08037F74 @ =sub_8037EF0 - str r1, [r0] - b _08037F9A - .align 2, 0 -_08037F64: .4byte gPaletteFade -_08037F68: .4byte gBattleTypeFlags -_08037F6C: .4byte gBattleBankFunc -_08037F70: .4byte gActiveBank -_08037F74: .4byte sub_8037EF0 -_08037F78: - movs r0, 0x5A - bl m4aSongNumStop - ldr r2, _08037FA0 @ =gMain - ldr r0, _08037FA4 @ =0x0000043d - adds r3, r2, r0 - ldrb r1, [r3] - movs r0, 0x3 - negs r0, r0 - ands r0, r1 - strb r0, [r3] - ldr r0, _08037FA8 @ =gPreBattleCallback1 - ldr r0, [r0] - str r0, [r2] - ldr r0, [r2, 0x8] - bl SetMainCallback2 -_08037F9A: - pop {r0} - bx r0 - .align 2, 0 -_08037FA0: .4byte gMain -_08037FA4: .4byte 0x0000043d -_08037FA8: .4byte gPreBattleCallback1 - thumb_func_end sub_8037F34 - - thumb_func_start sub_8037FAC -sub_8037FAC: @ 8037FAC - push {lr} - ldr r0, _08037FD0 @ =gActiveBank - ldrb r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - ldr r1, _08037FD4 @ =0x02017810 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _08037FCA - bl LinkOpponentBufferExecCompleted -_08037FCA: - pop {r0} - bx r0 - .align 2, 0 -_08037FD0: .4byte gActiveBank -_08037FD4: .4byte 0x02017810 - thumb_func_end sub_8037FAC - - thumb_func_start sub_8037FD8 -sub_8037FD8: @ 8037FD8 - push {lr} - ldr r0, _08037FFC @ =gActiveBank - ldrb r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - ldr r1, _08038000 @ =0x02017810 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - bne _08037FF6 - bl LinkOpponentBufferExecCompleted -_08037FF6: - pop {r0} - bx r0 - .align 2, 0 -_08037FFC: .4byte gActiveBank -_08038000: .4byte 0x02017810 - thumb_func_end sub_8037FD8 - - thumb_func_start LinkOpponentBufferExecCompleted -LinkOpponentBufferExecCompleted: @ 8038004 - push {r4,lr} - sub sp, 0x4 - ldr r1, _08038044 @ =gBattleBankFunc - ldr r4, _08038048 @ =gActiveBank - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, _0803804C @ =sub_803752C - str r1, [r0] - ldr r0, _08038050 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08038058 - bl GetMultiplayerId - mov r1, sp - strb r0, [r1] - movs r0, 0x2 - movs r1, 0x4 - mov r2, sp - bl PrepareBufferDataTransferLink - ldr r1, _08038054 @ =gBattleBufferA - ldrb r0, [r4] - lsls r0, 9 - adds r0, r1 - movs r1, 0x38 - strb r1, [r0] - b _0803806A - .align 2, 0 -_08038044: .4byte gBattleBankFunc -_08038048: .4byte gActiveBank -_0803804C: .4byte sub_803752C -_08038050: .4byte gBattleTypeFlags -_08038054: .4byte gBattleBufferA -_08038058: - ldr r2, _08038074 @ =gBattleExecBuffer - ldr r1, _08038078 @ =gBitTable - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - ldr r0, [r2] - bics r0, r1 - str r0, [r2] -_0803806A: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08038074: .4byte gBattleExecBuffer -_08038078: .4byte gBitTable - thumb_func_end LinkOpponentBufferExecCompleted - - .align 2, 0 @ Don't pad with nop. diff --git a/ld_script.txt b/ld_script.txt index 05ce91cee..467e00b37 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -59,7 +59,6 @@ SECTIONS { src/battle_7.o(.text); src/battle_controller_opponent.o(.text); asm/battle_9.o(.text); - asm/battle_controller_linkopponent1.o(.text); src/battle_controller_linkopponent2.o(.text); src/pokemon_1.o(.text); src/calculate_base_damage.o(.text); diff --git a/src/battle_controller_linkopponent2.c b/src/battle_controller_linkopponent2.c index 59030cd6e..93c6671e5 100644 --- a/src/battle_controller_linkopponent2.c +++ b/src/battle_controller_linkopponent2.c @@ -3,6 +3,8 @@ #include "battle_interface.h" #include "data2.h" #include "link.h" +#include "m4a.h" +#include "main.h" #include "palette.h" #include "rom_8077ABC.h" #include "rom3.h" @@ -48,6 +50,9 @@ extern struct Window gUnknown_03004210; extern u16 gUnknown_030042A0; extern u16 gUnknown_030042A4; extern u8 gUnknown_0300434C[]; +extern u32 gBattleExecBuffer; +extern MainCallback gPreBattleCallback1; +extern struct MusicPlayerInfo gMPlay_BGM; extern u8 sub_8077F68(); extern u8 sub_8079E90(); @@ -99,10 +104,14 @@ extern u8 move_anim_start_t3(); extern void sub_8037FD8(void); extern void sub_8037F34(void); extern void LinkOpponentBufferExecCompleted(void); +extern void sub_8141828(); +extern void sub_804777C(); // this file's functions u32 dp01_getattr_by_ch1_for_player_pokemon__(u8, u8 *); +void sub_803752C(void); +void sub_8037D2C(void); void sub_8038900(u8); void sub_8039430(u8, u8); void sub_8039648(void); @@ -234,6 +243,330 @@ const BattleBufferCmd gLinkOpponentBufferCommands[] = // code +void nullsub_47(void) +{ +} + +void SetBankFuncToLinkOpponentBufferRunCommand(void) +{ + gBattleBankFunc[gActiveBank] = sub_803752C; +} + +void sub_803752C(void) +{ + if (gBattleExecBuffer & gBitTable[gActiveBank]) + { + if (gBattleBufferA[gActiveBank][0] <= 0x38) + gLinkOpponentBufferCommands[gBattleBufferA[gActiveBank][0]](); + else + LinkOpponentBufferExecCompleted(); + } +} + +void sub_803757C(void) +{ + if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy) + LinkOpponentBufferExecCompleted(); +} + +void sub_80375B4(void) +{ + if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy) + { + sub_8031B74(gSprites[gObjectBankIDs[gActiveBank]].oam.affineParam); + gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum = gSprites[gObjectBankIDs[gActiveBank]].data5; + FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); + DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); + LinkOpponentBufferExecCompleted(); + } +} + +void sub_8037644(void) +{ + if ((--ewram17810[gActiveBank].unk9) == 0xFF) + { + ewram17810[gActiveBank].unk9 = 0; + LinkOpponentBufferExecCompleted(); + } +} + +void sub_8037680(void) +{ + bool8 r6 = FALSE; + + if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI))) + { + if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy) + r6 = TRUE; + } + else + { + if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy + && gSprites[gHealthboxIDs[gActiveBank ^ 2]].callback == SpriteCallbackDummy) + r6 = TRUE; + } + if (IsCryPlayingOrClearCrySongs()) + r6 = FALSE; + + if (r6) + { + if (GetBankIdentity(gActiveBank) == 1) + { + if (!ewram17810[gActiveBank].unk1_0 || !ewram17810[gActiveBank ^ 2].unk1_0) + return; + ewram17810[gActiveBank].unk0_7 = 0; + ewram17810[gActiveBank].unk1_0 = 0; + ewram17810[gActiveBank ^ 2].unk0_7 = 0; + ewram17810[gActiveBank ^ 2].unk1_0 = 0; + FreeSpriteTilesByTag(0x27F9); + FreeSpritePaletteByTag(0x27F9); + } + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + if (GetBankIdentity(gActiveBank) == 1) + m4aMPlayContinue(&gMPlay_BGM); + } + else + { + m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 256); + } + ewram17810[gActiveBank].unk9 = 3; + gBattleBankFunc[gActiveBank] = sub_8037644; + } +} + +void sub_8037840(void) +{ + if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7) + sub_8141828(gActiveBank, &gEnemyParty[gBattlePartyID[gActiveBank]]); + if (!ewram17810[gActiveBank ^ 2].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_7) + sub_8141828(gActiveBank ^ 2, &gEnemyParty[gBattlePartyID[gActiveBank ^ 2]]); + if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_3) + { + if ((gBattleTypeFlags & BATTLE_TYPE_MULTI) && GetBankIdentity(gActiveBank) == 3) + { + if (++ewram17810[gActiveBank].unk9 == 1) + return; + ewram17810[gActiveBank].unk9 = 0; + } + if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) + { + DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank ^ 2]]); + sub_8045A5C( + gHealthboxIDs[gActiveBank ^ 2], + &gEnemyParty[gBattlePartyID[gActiveBank ^ 2]], + 0); + sub_804777C(gActiveBank ^ 2); + sub_8043DFC(gHealthboxIDs[gActiveBank ^ 2]); + sub_8032984( + gActiveBank ^ 2, + GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank ^ 2]], MON_DATA_SPECIES)); + } + DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]); + sub_8045A5C( + gHealthboxIDs[gActiveBank], + &gEnemyParty[gBattlePartyID[gActiveBank]], + 0); + sub_804777C(gActiveBank); + sub_8043DFC(gHealthboxIDs[gActiveBank]); + sub_8032984( + gActiveBank, + GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES)); + + ewram17840.unk9_0 = 0; + gBattleBankFunc[gActiveBank] = sub_8037680; + } +} + +void sub_8037A74(void) +{ + if (gSprites[gObjectBankIDs[gActiveBank]].animEnded == TRUE + && gSprites[gObjectBankIDs[gActiveBank]].pos2.x == 0) + { + if (!ewram17810[gActiveBank].unk0_7) + { + sub_8141828(gActiveBank, &gEnemyParty[gBattlePartyID[gActiveBank]]); + return; + } + if (ewram17810[gActiveBank].unk1_0) + { + ewram17810[gActiveBank].unk0_7 = 0; + ewram17810[gActiveBank].unk1_0 = 0; + FreeSpriteTilesByTag(0x27F9); + FreeSpritePaletteByTag(0x27F9); + LinkOpponentBufferExecCompleted(); + return; + } + } +} + +void sub_8037B24(void) +{ + s16 r4 = sub_8045C78(gActiveBank, gHealthboxIDs[gActiveBank], 0, 0); + + sub_8043DFC(gHealthboxIDs[gActiveBank]); + if (r4 != -1) + sub_80440EC(gHealthboxIDs[gActiveBank], r4, 0); + else + LinkOpponentBufferExecCompleted(); +} + +void sub_8037B78(void) +{ + if (!gSprites[gObjectBankIDs[gActiveBank]].inUse) + { + sub_8043DB0(gHealthboxIDs[gActiveBank]); + LinkOpponentBufferExecCompleted(); + } +} + +void sub_8037BBC(void) +{ + if (!ewram17810[gActiveBank].unk0_6) + { + FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); + DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); + sub_8032A08(gActiveBank); + sub_8043DB0(gHealthboxIDs[gActiveBank]); + LinkOpponentBufferExecCompleted(); + } +} + +void sub_8037C2C(void) +{ + if (gUnknown_03004210.state == 0) + LinkOpponentBufferExecCompleted(); +} + +void dp01t_0F_4_move_anim(void) +{ + u8 spriteId = gObjectBankIDs[gActiveBank]; + + if (gSprites[spriteId].data1 == 32) + { + gSprites[spriteId].data1 = 0; + gSprites[spriteId].invisible = FALSE; + gDoingBattleAnim = 0; + LinkOpponentBufferExecCompleted(); + } + else + { + if (((u16)gSprites[spriteId].data1 % 4) == 0) + gSprites[spriteId].invisible ^= 1; + gSprites[spriteId].data1++; + } +} + +void sub_8037CC0(void) +{ + if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy) + { + if (ewram17800[gActiveBank].substituteSprite) + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); + gBattleBankFunc[gActiveBank] = sub_8037D2C; + } +} + +void sub_8037D2C(void) +{ + if (!ewram17810[gActiveBank].unk0_6) + { + CreateTask(c3_0802FDF4, 10); + LinkOpponentBufferExecCompleted(); + } +} + +void sub_8037D64(void) +{ + if (ewram17810[gActiveBank].unk1_0) + { + ewram17810[gActiveBank].unk0_7 = 0; + ewram17810[gActiveBank].unk1_0 = 0; + FreeSpriteTilesByTag(0x27F9); + FreeSpritePaletteByTag(0x27F9); + StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 0); + sub_8045A5C( + gHealthboxIDs[gActiveBank], + &gEnemyParty[gBattlePartyID[gActiveBank]], + 0); + sub_804777C(gActiveBank); + sub_8043DFC(gHealthboxIDs[gActiveBank]); + sub_8031F88(gActiveBank); + gBattleBankFunc[gActiveBank] = sub_8037CC0; + } +} + +void sub_8037E30(void) +{ + if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7) + sub_8141828(gActiveBank, &gEnemyParty[gBattlePartyID[gActiveBank]]); + if (gSprites[gUnknown_0300434C[gActiveBank]].callback == SpriteCallbackDummy + && !ewram17810[gActiveBank].unk0_3) + { + DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]); + sub_8032984(gActiveBank, GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES)); + gBattleBankFunc[gActiveBank] = sub_8037D64; + } +} + +void sub_8037EF0(void) +{ + if (gReceivedRemoteLinkPlayers == 0) + { + m4aSongNumStop(SE_HINSI); + gMain.inBattle = FALSE; + gMain.callback1 = gPreBattleCallback1; + SetMainCallback2(c2_8011A1C); + } +} + +void sub_8037F34(void) +{ + if (!gPaletteFade.active) + { + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + sub_800832C(); + gBattleBankFunc[gActiveBank] = sub_8037EF0; + } + else + { + m4aSongNumStop(SE_HINSI); + gMain.inBattle = FALSE; + gMain.callback1 = gPreBattleCallback1; + SetMainCallback2(gMain.savedCallback); + } + } +} + +void sub_8037FAC(void) +{ + if (!ewram17810[gActiveBank].unk0_4) + LinkOpponentBufferExecCompleted(); +} + +void sub_8037FD8(void) +{ + if (!ewram17810[gActiveBank].unk0_5) + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentBufferExecCompleted(void) +{ + gBattleBankFunc[gActiveBank] = sub_803752C; + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + u8 playerId = GetMultiplayerId(); + + PrepareBufferDataTransferLink(2, 4, &playerId); + gBattleBufferA[gActiveBank][0] = 0x38; + } + else + { + gBattleExecBuffer &= ~gBitTable[gActiveBank]; + } +} + void LinkOpponentHandleGetAttributes(void) { u8 buffer[0x100]; -- cgit v1.2.3 From 0c611fb2c9c2f62c8855d9337a45cb3890d19cb3 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Sep 2017 12:01:30 -0400 Subject: SetUpReflection --- asm/field_effect_helpers.s | 96 ---------------------------------------------- include/field_map_obj.h | 3 ++ ld_script.txt | 1 + src/field_effect_helpers.c | 46 ++++++++++++++++++++++ 4 files changed, 50 insertions(+), 96 deletions(-) create mode 100644 src/field_effect_helpers.c diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 9df9dfd8d..7dfe61f03 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,102 +6,6 @@ .text - thumb_func_start SetUpReflection -SetUpReflection: @ 812680C - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r6, r0, 0 - adds r4, r1, 0 - lsls r5, r2, 24 - lsrs r5, 24 - movs r0, 0x20 - ldrsh r1, [r4, r0] - movs r0, 0x22 - ldrsh r2, [r4, r0] - adds r0, r4, 0 - movs r3, 0x98 - bl obj_unfreeze - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _081268BC @ =gSprites - adds r7, r1, r0 - ldr r0, _081268C0 @ =sub_81269E0 - str r0, [r7, 0x1C] - ldrb r1, [r7, 0x5] - movs r0, 0xC - orrs r1, r0 - strb r1, [r7, 0x5] - ldr r2, _081268C4 @ =gUnknown_0830FD14 - lsrs r0, r1, 4 - adds r0, r2 - ldrb r0, [r0] - lsls r0, 4 - movs r2, 0xF - ands r1, r2 - orrs r1, r0 - strb r1, [r7, 0x5] - movs r1, 0x3F - adds r1, r7 - mov r8, r1 - ldrb r0, [r1] - movs r1, 0x40 - orrs r0, r1 - mov r1, r8 - strb r0, [r1] - ldr r0, _081268C8 @ =gDummySpriteAnimTable - str r0, [r7, 0x8] - adds r0, r7, 0 - movs r1, 0 - bl StartSpriteAnim - ldr r0, _081268CC @ =gDummySpriteAffineAnimTable - str r0, [r7, 0x10] - mov r1, r8 - ldrb r0, [r1] - movs r1, 0x8 - orrs r0, r1 - mov r1, r8 - strb r0, [r1] - adds r2, r7, 0 - adds r2, 0x42 - ldrb r1, [r2] - movs r0, 0x3F - ands r0, r1 - strb r0, [r2] - ldrh r0, [r4, 0x2E] - strh r0, [r7, 0x2E] - ldrb r0, [r6, 0x8] - strh r0, [r7, 0x30] - strh r5, [r7, 0x3C] - adds r0, r6, 0 - adds r1, r7, 0 - bl npc_pal_op - cmp r5, 0 - bne _081268B2 - ldrb r0, [r7, 0x1] - movs r1, 0x4 - negs r1, r1 - ands r1, r0 - movs r0, 0x1 - orrs r1, r0 - strb r1, [r7, 0x1] -_081268B2: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081268BC: .4byte gSprites -_081268C0: .4byte sub_81269E0 -_081268C4: .4byte gUnknown_0830FD14 -_081268C8: .4byte gDummySpriteAnimTable -_081268CC: .4byte gDummySpriteAffineAnimTable - thumb_func_end SetUpReflection - thumb_func_start sub_81268D0 sub_81268D0: @ 81268D0 push {lr} diff --git a/include/field_map_obj.h b/include/field_map_obj.h index d2a1a9b1f..23763aa1a 100644 --- a/include/field_map_obj.h +++ b/include/field_map_obj.h @@ -3,6 +3,8 @@ #include "sprite.h" +const u8 gUnknown_0830FD14[16]; + #define fieldmap_object_cb(setup, callback, table) \ static u8 callback(struct MapObject *, struct Sprite *);\ void setup(struct Sprite *sprite)\ @@ -427,5 +429,6 @@ void sub_80634D0(struct MapObject *, struct Sprite *); u8 SpawnSpecialFieldObjectParametrized(u8, u8, u8, s16, s16, u8); void CameraObjectSetFollowedObjectId(u8); u8 sub_805ADDC(u8); +u8 obj_unfreeze(struct Sprite *, s16, s16, u8); #endif // GUARD_FIELD_MAP_OBJ_H diff --git a/ld_script.txt b/ld_script.txt index 05ce91cee..c8f29c5db 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -232,6 +232,7 @@ SECTIONS { src/unused_8124F94.o(.text); src/save.o(.text); src/mystery_event_script.o(.text); + src/field_effect_helpers.o(.text); asm/field_effect_helpers.o(.text); asm/contest_ai.o(.text); asm/battle_anim_81258BC.o(.text); diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c new file mode 100644 index 000000000..6b068a1b7 --- /dev/null +++ b/src/field_effect_helpers.c @@ -0,0 +1,46 @@ +// +// Created by scott on 9/9/2017. +// + + +// Includes +#include "global.h" +#include "sprite.h" +#include "field_map_obj.h" +#include "field_effect_helpers.h" + +// Static type declarations + +// Static RAM declarations + +// Static ROM declarations +/*static*/ void sub_81269E0(struct Sprite *); +/*static*/ void npc_pal_op(struct MapObject *mapObject, struct Sprite *sprite); + +// .rodata + +// .text + +void SetUpReflection(struct MapObject *mapObject, struct Sprite *sprite, bool8 flag) +{ + struct Sprite *newSprite; + + newSprite = &gSprites[obj_unfreeze(sprite, sprite->pos1.x, sprite->pos1.y, 0x98)]; + newSprite->callback = sub_81269E0; + newSprite->oam.priority = 3; + newSprite->oam.paletteNum = gUnknown_0830FD14[newSprite->oam.paletteNum]; + newSprite->usingSheet = TRUE; + newSprite->anims = gDummySpriteAnimTable; + StartSpriteAnim(newSprite, 0); + newSprite->affineAnims = gDummySpriteAffineAnimTable; + newSprite->affineAnimBeginning = TRUE; + newSprite->subspriteMode = 0; + newSprite->data0 = sprite->data0; + newSprite->data1 = mapObject->localId; + newSprite->data7 = flag; + npc_pal_op(mapObject, newSprite); + if (!flag) + { + newSprite->oam.affineMode = 1; + } +} -- cgit v1.2.3 From add1b59b63bd00bd481333f6e68940cbc30208fc Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Sep 2017 14:59:57 -0400 Subject: npc_pal_op and all data --- asm/field_effect_helpers.s | 69 --------------------------------------- data/field_effect_helpers.s | 37 --------------------- ld_script.txt | 2 +- src/field_effect_helpers.c | 79 ++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 79 insertions(+), 108 deletions(-) delete mode 100644 data/field_effect_helpers.s diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 7dfe61f03..c76f846b9 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,75 +6,6 @@ .text - thumb_func_start sub_81268D0 -sub_81268D0: @ 81268D0 - push {lr} - ldrb r0, [r0, 0x5] - bl GetFieldObjectGraphicsInfo - ldrh r0, [r0, 0xA] - subs r0, 0x2 - lsls r0, 16 - asrs r0, 16 - pop {r1} - bx r1 - thumb_func_end sub_81268D0 - - thumb_func_start npc_pal_op -npc_pal_op: @ 81268E4 - push {r4,r5,lr} - sub sp, 0x8 - adds r5, r0, 0 - adds r4, r1, 0 - ldr r1, _0812693C @ =gUnknown_08401E2C - mov r0, sp - movs r2, 0x6 - bl memcpy - movs r0, 0 - strh r0, [r4, 0x32] - ldrb r0, [r5, 0x5] - bl GetFieldObjectGraphicsInfo - ldrb r1, [r0, 0xC] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08126940 - ldrb r0, [r5, 0x1F] - bl sub_8057450 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - bne _08126926 - ldrb r0, [r5, 0x1E] - bl sub_8057450 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _08126940 -_08126926: - subs r0, 0x1 - lsls r0, 1 - add r0, sp - ldrh r0, [r0] - strh r0, [r4, 0x32] - ldrb r1, [r4, 0x5] - lsrs r1, 4 - adds r0, r5, 0 - bl npc_pal_op_A - b _0812694A - .align 2, 0 -_0812693C: .4byte gUnknown_08401E2C -_08126940: - ldrb r1, [r4, 0x5] - lsrs r1, 4 - adds r0, r5, 0 - bl npc_pal_op_B -_0812694A: - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end npc_pal_op - thumb_func_start npc_pal_op_B npc_pal_op_B: @ 8126954 push {r4,lr} diff --git a/data/field_effect_helpers.s b/data/field_effect_helpers.s deleted file mode 100644 index d22bd8dde..000000000 --- a/data/field_effect_helpers.s +++ /dev/null @@ -1,37 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - -@ XXX: Unused? Probably aligned because it's at the beginning of an object file. - .align 2 - .string "タマゴ$" - - .align 1 -gUnknown_08401E2C:: @ 8401E2C - .2byte 0xC, 0x1C, 0x2C - -gUnknown_08401E32:: @ 8401E32 - .byte 0, 1, 2, 3 - - .align 1 -gUnknown_08401E36:: @ 8401E36 - .2byte 4, 4, 4, 16 - - .align 2 -gUnknown_08401E40:: @ 8401E40 - .4byte sub_81275A0 - .4byte sub_81275C4 - - .align 2 -gUnknown_08401E48:: @ 8401E48 - .4byte sub_8127DA0 - .4byte sub_8127DD0 - .4byte sub_8127E30 - -gUnknown_08401E54:: @ 8401E54 - .byte 0, 0, 1, 2, 3 - - .align 1 -gUnknown_08401E5A:: @ 8401E5A - .2byte 3, 7 diff --git a/ld_script.txt b/ld_script.txt index c8f29c5db..7f407a270 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -450,7 +450,7 @@ SECTIONS { src/choose_party.o(.rodata); data/cable_car.o(.rodata); src/save.o(.rodata); - data/field_effect_helpers.o(.rodata); + src/field_effect_helpers.o(.rodata); data/contest_ai.o(.rodata); src/battle_controller_safari.o(.rodata); data/battle_anim_812C144.o(.rodata); diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 6b068a1b7..ea3d21710 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -7,6 +7,7 @@ #include "global.h" #include "sprite.h" #include "field_map_obj.h" +#include "metatile_behavior.h" #include "field_effect_helpers.h" // Static type declarations @@ -15,10 +16,63 @@ // Static ROM declarations /*static*/ void sub_81269E0(struct Sprite *); -/*static*/ void npc_pal_op(struct MapObject *mapObject, struct Sprite *sprite); +static void npc_pal_op(struct MapObject *mapObject, struct Sprite *sprite); +/*static*/ void npc_pal_op_A(struct MapObject *, u8); +/*static*/ void npc_pal_op_B(struct MapObject *, u8); +/*static*/ void sub_81275A0(struct Sprite *); +/*static*/ void sub_81275C4(struct Sprite *); +/*static*/ void sub_8127DA0(struct Sprite *); +/*static*/ void sub_8127DD0(struct Sprite *); +/*static*/ void sub_8127E30(struct Sprite *); // .rodata +const u8 UnusedEggString_8401E28[] = _("タマゴ"); + +const u16 gUnknown_08401E2C[] = { + 0x0c, + 0x1c, + 0x2c +}; + +const u8 gUnknown_08401E32[] = { + 0, + 1, + 2, + 3 +}; + +const u16 gUnknown_08401E36[] = { + 4, + 4, + 4, + 16 +}; + +void (*const gUnknown_08401E40[])(struct Sprite *) = { + sub_81275A0, + sub_81275C4 +}; + +void (*const gUnknown_08401E48[])(struct Sprite *) = { + sub_8127DA0, + sub_8127DD0, + sub_8127E30 +}; + +const u8 gUnknown_08401E54[] = { + 0, + 0, + 1, + 2, + 3 +}; + +const u16 gUnknown_08401E5A[] = { + 3, + 7 +}; + // .text void SetUpReflection(struct MapObject *mapObject, struct Sprite *sprite, bool8 flag) @@ -44,3 +98,26 @@ void SetUpReflection(struct MapObject *mapObject, struct Sprite *sprite, bool8 f newSprite->oam.affineMode = 1; } } + +s16 sub_81268D0(struct MapObject *mapObject) +{ + return GetFieldObjectGraphicsInfo(mapObject->graphicsId)->height - 2; +} + +static void npc_pal_op(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 whichElement; + u16 unk_8041e2c[3]; + + memcpy(unk_8041e2c, gUnknown_08401E2C, sizeof gUnknown_08401E2C); + sprite->data2 = 0; + if (!GetFieldObjectGraphicsInfo(mapObject->graphicsId)->disableReflectionPaletteLoad && ((whichElement = sub_8057450(mapObject->mapobj_unk_1F)) || (whichElement = sub_8057450(mapObject->mapobj_unk_1E)))) + { + sprite->data2 = unk_8041e2c[whichElement - 1]; + npc_pal_op_A(mapObject, sprite->oam.paletteNum); + } + else + { + npc_pal_op_B(mapObject, sprite->oam.paletteNum); + } +} -- cgit v1.2.3 From dd714a763a2c8c6f6fc07743ad16d099fef2037e Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Sep 2017 15:05:48 -0400 Subject: npc_pal_op_B --- asm/field_effect_helpers.s | 46 ---------------------------------------------- include/field_map_obj.h | 1 + src/field_effect_helpers.c | 26 +++++++++++++++++++++++++- 3 files changed, 26 insertions(+), 47 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index c76f846b9..5b58e7aff 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,52 +6,6 @@ .text - thumb_func_start npc_pal_op_B -npc_pal_op_B: @ 8126954 - push {r4,lr} - lsls r1, 24 - lsrs r4, r1, 24 - ldrb r0, [r0, 0x5] - bl GetFieldObjectGraphicsInfo - adds r2, r0, 0 - ldrh r1, [r2, 0x4] - ldr r0, _08126980 @ =0x000011ff - cmp r1, r0 - beq _081269A8 - ldrb r0, [r2, 0xC] - movs r1, 0xF - ands r1, r0 - cmp r1, 0 - bne _08126984 - ldrh r0, [r2, 0x2] - adds r1, r4, 0 - bl npc_load_two_palettes__no_record - b _081269A2 - .align 2, 0 -_08126980: .4byte 0x000011ff -_08126984: - cmp r1, 0xA - bne _08126992 - ldrh r0, [r2, 0x2] - adds r1, r4, 0 - bl npc_load_two_palettes__and_record - b _081269A2 -_08126992: - adds r0, r4, 0 - bl npc_paltag_by_palslot - lsls r0, 16 - lsrs r0, 16 - adds r1, r4, 0 - bl pal_patch_for_npc -_081269A2: - adds r0, r4, 0 - bl sub_807D78C -_081269A8: - pop {r4} - pop {r0} - bx r0 - thumb_func_end npc_pal_op_B - thumb_func_start npc_pal_op_A npc_pal_op_A: @ 81269B0 push {r4,lr} diff --git a/include/field_map_obj.h b/include/field_map_obj.h index 23763aa1a..78cf2c146 100644 --- a/include/field_map_obj.h +++ b/include/field_map_obj.h @@ -430,5 +430,6 @@ u8 SpawnSpecialFieldObjectParametrized(u8, u8, u8, s16, s16, u8); void CameraObjectSetFollowedObjectId(u8); u8 sub_805ADDC(u8); u8 obj_unfreeze(struct Sprite *, s16, s16, u8); +u16 npc_paltag_by_palslot(u8); #endif // GUARD_FIELD_MAP_OBJ_H diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index ea3d21710..44403eef8 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -7,6 +7,7 @@ #include "global.h" #include "sprite.h" #include "field_map_obj.h" +#include "field_weather.h" #include "metatile_behavior.h" #include "field_effect_helpers.h" @@ -18,7 +19,7 @@ /*static*/ void sub_81269E0(struct Sprite *); static void npc_pal_op(struct MapObject *mapObject, struct Sprite *sprite); /*static*/ void npc_pal_op_A(struct MapObject *, u8); -/*static*/ void npc_pal_op_B(struct MapObject *, u8); +static void npc_pal_op_B(struct MapObject *, u8); /*static*/ void sub_81275A0(struct Sprite *); /*static*/ void sub_81275C4(struct Sprite *); /*static*/ void sub_8127DA0(struct Sprite *); @@ -121,3 +122,26 @@ static void npc_pal_op(struct MapObject *mapObject, struct Sprite *sprite) npc_pal_op_B(mapObject, sprite->oam.paletteNum); } } + +static void npc_pal_op_B(struct MapObject *mapObject, u8 paletteNum) +{ + const struct MapObjectGraphicsInfo *graphicsInfo; + + graphicsInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId); + if (graphicsInfo->paletteTag2 != 0x11ff) + { + if (graphicsInfo->paletteSlot == 0) + { + npc_load_two_palettes__no_record(graphicsInfo->paletteTag1, paletteNum); + } + else if (graphicsInfo->paletteSlot == 10) + { + npc_load_two_palettes__and_record(graphicsInfo->paletteTag1, paletteNum); + } + else + { + pal_patch_for_npc(npc_paltag_by_palslot(paletteNum), paletteNum); + } + sub_807D78C(paletteNum); + } +} -- cgit v1.2.3 From 791f5a4451033421bdcf81543c744cf2ca981348 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Sep 2017 15:09:09 -0400 Subject: npc_pal_op_A --- asm/field_effect_helpers.s | 25 ------------------------- src/field_effect_helpers.c | 14 +++++++++++++- 2 files changed, 13 insertions(+), 26 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 5b58e7aff..062287cbb 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,31 +6,6 @@ .text - thumb_func_start npc_pal_op_A -npc_pal_op_A: @ 81269B0 - push {r4,lr} - lsls r1, 24 - lsrs r4, r1, 24 - ldrb r0, [r0, 0x5] - bl GetFieldObjectGraphicsInfo - adds r2, r0, 0 - ldrh r1, [r2, 0x4] - ldr r0, _081269DC @ =0x000011ff - cmp r1, r0 - beq _081269D4 - adds r0, r1, 0 - adds r1, r4, 0 - bl pal_patch_for_npc - adds r0, r4, 0 - bl sub_807D78C -_081269D4: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081269DC: .4byte 0x000011ff - thumb_func_end npc_pal_op_A - thumb_func_start sub_81269E0 sub_81269E0: @ 81269E0 push {r4-r7,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 44403eef8..3771d24e4 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -18,7 +18,7 @@ // Static ROM declarations /*static*/ void sub_81269E0(struct Sprite *); static void npc_pal_op(struct MapObject *mapObject, struct Sprite *sprite); -/*static*/ void npc_pal_op_A(struct MapObject *, u8); +static void npc_pal_op_A(struct MapObject *, u8); static void npc_pal_op_B(struct MapObject *, u8); /*static*/ void sub_81275A0(struct Sprite *); /*static*/ void sub_81275C4(struct Sprite *); @@ -145,3 +145,15 @@ static void npc_pal_op_B(struct MapObject *mapObject, u8 paletteNum) sub_807D78C(paletteNum); } } + +static void npc_pal_op_A(struct MapObject *mapObject, u8 paletteNum) +{ + const struct MapObjectGraphicsInfo *graphicsInfo; + + graphicsInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId); + if (graphicsInfo->paletteTag2 != 0x11ff) + { + pal_patch_for_npc(graphicsInfo->paletteTag2, paletteNum); + sub_807D78C(paletteNum); + } +} -- cgit v1.2.3 From 0ab00afabb9b494432306267e6af2520a89cdffa Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Sep 2017 15:30:11 -0400 Subject: sub_81269E0 --- asm/field_effect_helpers.s | 188 --------------------------------------------- src/field_effect_helpers.c | 41 +++++++++- 2 files changed, 40 insertions(+), 189 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 062287cbb..776e2bda6 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,194 +6,6 @@ .text - thumb_func_start sub_81269E0 -sub_81269E0: @ 81269E0 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r4, r0, 0 - movs r0, 0x2E - ldrsh r1, [r4, r0] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08126A28 @ =gMapObjects - adds r7, r0, r1 - ldrb r1, [r7, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08126A2C @ =gSprites - adds r5, r0, r1 - ldr r0, [r7] - ldr r1, _08126A30 @ =0x00020001 - ands r0, r1 - cmp r0, r1 - bne _08126A18 - ldrb r1, [r7, 0x8] - movs r2, 0x30 - ldrsh r0, [r4, r2] - cmp r1, r0 - beq _08126A34 -_08126A18: - adds r2, r4, 0 - adds r2, 0x3E - ldrb r1, [r2] - movs r0, 0x2 - negs r0, r0 - ands r0, r1 - strb r0, [r2] - b _08126B3E - .align 2, 0 -_08126A28: .4byte gMapObjects -_08126A2C: .4byte gSprites -_08126A30: .4byte 0x00020001 -_08126A34: - ldr r1, _08126B4C @ =gUnknown_0830FD14 - ldrb r0, [r5, 0x5] - lsrs r0, 4 - adds r0, r1 - ldrb r1, [r0] - lsls r1, 4 - ldrb r2, [r4, 0x5] - movs r0, 0xF - ands r0, r2 - orrs r0, r1 - strb r0, [r4, 0x5] - ldrb r1, [r5, 0x1] - lsrs r1, 6 - lsls r1, 6 - ldrb r2, [r4, 0x1] - movs r3, 0x3F - adds r0, r3, 0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, 0x1] - ldrb r0, [r5, 0x3] - lsrs r0, 6 - lsls r0, 6 - ldrb r2, [r4, 0x3] - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - strb r1, [r4, 0x3] - ldrb r0, [r5, 0x3] - lsls r0, 26 - lsrs r0, 27 - movs r2, 0x10 - orrs r0, r2 - lsls r0, 1 - subs r2, 0x4F - mov r9, r2 - ands r1, r2 - orrs r1, r0 - strb r1, [r4, 0x3] - ldrh r1, [r5, 0x4] - lsls r1, 22 - lsrs r1, 22 - ldrh r2, [r4, 0x4] - ldr r0, _08126B50 @ =0xfffffc00 - ands r0, r2 - orrs r0, r1 - strh r0, [r4, 0x4] - ldr r0, [r5, 0x18] - str r0, [r4, 0x18] - adds r0, r5, 0 - adds r0, 0x42 - ldrb r0, [r0] - lsls r0, 26 - lsrs r0, 26 - adds r2, r4, 0 - adds r2, 0x42 - ands r3, r0 - ldrb r1, [r2] - movs r0, 0x40 - negs r0, r0 - ands r0, r1 - orrs r0, r3 - strb r0, [r2] - movs r0, 0x3E - adds r0, r5 - mov r8, r0 - ldrb r0, [r0] - adds r6, r4, 0 - adds r6, 0x3E - movs r1, 0x4 - ands r1, r0 - ldrb r2, [r6] - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r6] - ldrh r0, [r5, 0x20] - strh r0, [r4, 0x20] - adds r0, r7, 0 - bl sub_81268D0 - ldrh r1, [r5, 0x22] - adds r0, r1 - ldrh r1, [r4, 0x32] - adds r1, r0 - strh r1, [r4, 0x22] - adds r0, r5, 0 - adds r0, 0x28 - ldrb r1, [r0] - adds r0, r4, 0 - adds r0, 0x28 - strb r1, [r0] - adds r0, r5, 0 - adds r0, 0x29 - ldrb r0, [r0] - adds r1, r4, 0 - adds r1, 0x29 - strb r0, [r1] - ldrh r0, [r5, 0x24] - strh r0, [r4, 0x24] - ldrh r0, [r5, 0x26] - negs r0, r0 - strh r0, [r4, 0x26] - mov r2, r8 - ldrb r0, [r2] - movs r1, 0x2 - ands r1, r0 - ldrb r2, [r6] - movs r0, 0x3 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r6] - movs r1, 0x3C - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _08126B3E - ldrb r0, [r4, 0x3] - mov r2, r9 - ands r2, r0 - strb r2, [r4, 0x3] - ldrb r0, [r5, 0x3] - lsls r0, 26 - lsrs r0, 27 - movs r1, 0x8 - ands r0, r1 - cmp r0, 0 - beq _08126B3E - movs r1, 0x2 - adds r0, r2, 0 - orrs r0, r1 - strb r0, [r4, 0x3] -_08126B3E: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08126B4C: .4byte gUnknown_0830FD14 -_08126B50: .4byte 0xfffffc00 - thumb_func_end sub_81269E0 - thumb_func_start sub_8126B54 sub_8126B54: @ 8126B54 push {r4,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 3771d24e4..63f3caa91 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -16,7 +16,7 @@ // Static RAM declarations // Static ROM declarations -/*static*/ void sub_81269E0(struct Sprite *); +static void sub_81269E0(struct Sprite *); static void npc_pal_op(struct MapObject *mapObject, struct Sprite *sprite); static void npc_pal_op_A(struct MapObject *, u8); static void npc_pal_op_B(struct MapObject *, u8); @@ -157,3 +157,42 @@ static void npc_pal_op_A(struct MapObject *mapObject, u8 paletteNum) sub_807D78C(paletteNum); } } + +static void sub_81269E0(struct Sprite *sprite) +{ + struct MapObject *mapObject; + struct Sprite *oldSprite; + + mapObject = &gMapObjects[sprite->data0]; + oldSprite = &gSprites[mapObject->spriteId]; + if (!mapObject->active || !mapObject->mapobj_bit_17 || mapObject->localId != sprite->data1) + { + sprite->inUse = FALSE; + } + else + { + sprite->oam.paletteNum = gUnknown_0830FD14[oldSprite->oam.paletteNum]; + sprite->oam.shape = oldSprite->oam.shape; + sprite->oam.size = oldSprite->oam.size; + sprite->oam.matrixNum = oldSprite->oam.matrixNum | 0x10; + sprite->oam.tileNum = oldSprite->oam.tileNum; + sprite->subspriteTables = oldSprite->subspriteTables; + sprite->subspriteTableNum = oldSprite->subspriteTableNum; + sprite->invisible = oldSprite->invisible; + sprite->pos1.x = oldSprite->pos1.x; + sprite->pos1.y = oldSprite->pos1.y + sub_81268D0(mapObject) + sprite->data2; + sprite->centerToCornerVecX = oldSprite->centerToCornerVecX; + sprite->centerToCornerVecY = oldSprite->centerToCornerVecY; + sprite->pos2.x = oldSprite->pos2.x; + sprite->pos2.y = -oldSprite->pos2.y; + sprite->coordOffsetEnabled = oldSprite->coordOffsetEnabled; + if (sprite->data7 == FALSE) + { + sprite->oam.matrixNum = 0; + if (oldSprite->oam.matrixNum & 0x8) + { + sprite->oam.matrixNum = 1; + } + } + } +} -- cgit v1.2.3 From b7843adeef78892090e8a2599aec30dc659120f1 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Sep 2017 15:36:45 -0400 Subject: sub_8126B54 --- asm/field_effect_helpers.s | 42 ------------------------------------------ include/field_effect_helpers.h | 2 ++ src/field_effect_helpers.c | 16 ++++++++++++++++ 3 files changed, 18 insertions(+), 42 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 776e2bda6..38abfb718 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,48 +6,6 @@ .text - thumb_func_start sub_8126B54 -sub_8126B54: @ 8126B54 - push {r4,lr} - ldr r0, _08126B9C @ =gFieldEffectObjectTemplatePointers - ldr r0, [r0, 0x20] - movs r1, 0 - movs r2, 0 - movs r3, 0x52 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r0, 24 - adds r4, r0, 0 - cmp r0, 0x40 - beq _08126B92 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _08126BA0 @ =gSprites - adds r1, r0 - ldrb r2, [r1, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - movs r3, 0x4 - orrs r0, r3 - strb r0, [r1, 0x5] - adds r1, 0x3E - ldrb r0, [r1] - movs r2, 0x2 - orrs r0, r2 - orrs r0, r3 - strb r0, [r1] -_08126B92: - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08126B9C: .4byte gFieldEffectObjectTemplatePointers -_08126BA0: .4byte gSprites - thumb_func_end sub_8126B54 - thumb_func_start objid_set_invisible objid_set_invisible: @ 8126BA4 lsls r0, 24 diff --git a/include/field_effect_helpers.h b/include/field_effect_helpers.h index 11e96254d..bd0acbff6 100644 --- a/include/field_effect_helpers.h +++ b/include/field_effect_helpers.h @@ -1,6 +1,8 @@ #ifndef GUARD_FIELD_EFFECT_HELPERS_H #define GUARD_FIELD_EFFECT_HELPERS_H +extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[]; + void sub_812869C(struct MapObject *); bool8 sub_81286C4(struct MapObject *); void oamc_shadow(struct Sprite *); diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 63f3caa91..3607be0e4 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -196,3 +196,19 @@ static void sub_81269E0(struct Sprite *sprite) } } } + +u8 sub_8126B54(void) +{ + u8 spriteId; + struct Sprite *sprite; + + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[8], 0, 0, 0x52); + if (spriteId != MAX_SPRITES) + { + sprite = &gSprites[spriteId]; + sprite->oam.priority = 1; + sprite->coordOffsetEnabled = TRUE; + sprite->invisible = TRUE; + } + return spriteId; +} -- cgit v1.2.3 From efbe634e4ad9f9997aa864deeba0434ce7620927 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Sep 2017 15:46:53 -0400 Subject: sub_8126BC4 --- asm/field_effect_helpers.s | 106 --------------------------------------------- src/field_effect_helpers.c | 27 +++++++++++- 2 files changed, 26 insertions(+), 107 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 38abfb718..3c8502ddb 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,112 +6,6 @@ .text - thumb_func_start objid_set_invisible -objid_set_invisible: @ 8126BA4 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08126BC0 @ =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - adds r1, 0x3E - ldrb r0, [r1] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r1] - bx lr - .align 2, 0 -_08126BC0: .4byte gSprites - thumb_func_end objid_set_invisible - - thumb_func_start sub_8126BC4 -sub_8126BC4: @ 8126BC4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, 24 - lsrs r1, 24 - mov r8, r1 - lsls r2, 16 - lsrs r7, r2, 16 - lsls r3, 16 - lsrs r6, r3, 16 - lsls r0, r5, 4 - adds r0, r5 - lsls r0, 2 - ldr r1, _08126C68 @ =gSprites - adds r2, r0, r1 - adds r0, r2, 0 - adds r0, 0x3E - ldrb r1, [r0] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - bne _08126C0E - movs r0, 0x2E - ldrsh r1, [r2, r0] - lsls r0, r7, 16 - asrs r0, 16 - cmp r1, r0 - bne _08126C0E - movs r0, 0x30 - ldrsh r1, [r2, r0] - lsls r0, r6, 16 - asrs r0, 16 - cmp r1, r0 - beq _08126C5A -_08126C0E: - lsls r0, r7, 16 - asrs r0, 16 - lsls r1, r6, 16 - asrs r1, 16 - mov r4, sp - adds r4, 0x2 - mov r2, sp - adds r3, r4, 0 - bl sub_80603CC - lsls r0, r5, 4 - adds r0, r5 - lsls r0, 2 - ldr r1, _08126C68 @ =gSprites - adds r2, r0, r1 - mov r0, sp - ldrh r0, [r0] - adds r0, 0x8 - strh r0, [r2, 0x20] - ldrh r0, [r4] - adds r0, 0x8 - strh r0, [r2, 0x22] - adds r3, r2, 0 - adds r3, 0x3E - ldrb r1, [r3] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r3] - strh r7, [r2, 0x2E] - strh r6, [r2, 0x30] - mov r1, r8 - subs r1, 0x1 - lsls r1, 24 - lsrs r1, 24 - adds r0, r2, 0 - bl StartSpriteAnim -_08126C5A: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08126C68: .4byte gSprites - thumb_func_end sub_8126BC4 - thumb_func_start FldEff_Shadow FldEff_Shadow: @ 8126C6C push {r4,r5,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 3607be0e4..e77665eee 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -202,7 +202,7 @@ u8 sub_8126B54(void) u8 spriteId; struct Sprite *sprite; - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[8], 0, 0, 0x52); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[8] /*gFieldEffectSpriteTemplate_Arrow*/, 0, 0, 0x52); if (spriteId != MAX_SPRITES) { sprite = &gSprites[spriteId]; @@ -212,3 +212,28 @@ u8 sub_8126B54(void) } return spriteId; } + +void objid_set_invisible(u8 spriteId) +{ + gSprites[spriteId].invisible = TRUE; +} + +void sub_8126BC4(u8 spriteId, u8 animNum, s16 x, s16 y) +{ + s16 x2; + s16 y2; + struct Sprite *sprite; + + sprite = &gSprites[spriteId]; + if (sprite->invisible || sprite->data0 != x || sprite->data1 != y) + { + sub_80603CC(x, y, &x2, &y2); + sprite = &gSprites[spriteId]; + sprite->pos1.x = x2 + 8; + sprite->pos1.y = y2 + 8; + sprite->invisible = FALSE; + sprite->data0 = x; + sprite->data1 = y; + StartSpriteAnim(sprite, animNum - 1); + } +} -- cgit v1.2.3 From e0a25bc2c0f5917dcfd3048e87e2d434ceab6188 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Sep 2017 15:57:52 -0400 Subject: FldEff_Shadow --- asm/field_effect_helpers.s | 79 ---------------------------------------------- src/field_effect_helpers.c | 23 +++++++++++++- 2 files changed, 22 insertions(+), 80 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 3c8502ddb..5a2c0c4fb 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,85 +6,6 @@ .text - thumb_func_start FldEff_Shadow -FldEff_Shadow: @ 8126C6C - push {r4,r5,lr} - ldr r5, _08126CF8 @ =gUnknown_0202FF84 - ldrb r0, [r5] - ldrb r1, [r5, 0x4] - ldrb r2, [r5, 0x8] - bl GetFieldObjectIdByLocalIdAndMap - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08126CFC @ =gMapObjects - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldrb r0, [r1, 0x5] - bl GetFieldObjectGraphicsInfo - adds r4, r0, 0 - ldr r2, _08126D00 @ =gFieldEffectObjectTemplatePointers - ldr r1, _08126D04 @ =gUnknown_08401E32 - ldrb r0, [r4, 0xC] - lsls r0, 26 - lsrs r0, 30 - adds r0, r1 - ldrb r0, [r0] - lsls r0, 2 - adds r0, r2 - ldr r0, [r0] - movs r1, 0 - movs r2, 0 - movs r3, 0x94 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x40 - beq _08126CF0 - ldr r0, _08126D08 @ =gSprites - lsls r2, r1, 4 - adds r2, r1 - lsls r2, 2 - adds r2, r0 - adds r3, r2, 0 - adds r3, 0x3E - ldrb r0, [r3] - movs r1, 0x2 - orrs r0, r1 - strb r0, [r3] - ldr r0, [r5] - strh r0, [r2, 0x2E] - ldr r0, [r5, 0x4] - strh r0, [r2, 0x30] - ldr r0, [r5, 0x8] - strh r0, [r2, 0x32] - ldrh r1, [r4, 0xA] - lsls r1, 16 - asrs r1, 17 - ldr r3, _08126D0C @ =gUnknown_08401E36 - ldrb r0, [r4, 0xC] - lsls r0, 26 - lsrs r0, 30 - lsls r0, 1 - adds r0, r3 - ldrh r0, [r0] - subs r1, r0 - strh r1, [r2, 0x34] -_08126CF0: - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08126CF8: .4byte gUnknown_0202FF84 -_08126CFC: .4byte gMapObjects -_08126D00: .4byte gFieldEffectObjectTemplatePointers -_08126D04: .4byte gUnknown_08401E32 -_08126D08: .4byte gSprites -_08126D0C: .4byte gUnknown_08401E36 - thumb_func_end FldEff_Shadow - thumb_func_start oamc_shadow oamc_shadow: @ 8126D10 push {r4,r5,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index e77665eee..b7dded198 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -6,9 +6,10 @@ // Includes #include "global.h" #include "sprite.h" +#include "metatile_behavior.h" #include "field_map_obj.h" #include "field_weather.h" -#include "metatile_behavior.h" +#include "field_effect.h" #include "field_effect_helpers.h" // Static type declarations @@ -237,3 +238,23 @@ void sub_8126BC4(u8 spriteId, u8 animNum, s16 x, s16 y) StartSpriteAnim(sprite, animNum - 1); } } + +bool8 FldEff_Shadow(void) +{ + u8 mapObjectId; + const struct MapObjectGraphicsInfo *graphicsInfo; + u8 spriteId; + + mapObjectId = GetFieldObjectIdByLocalIdAndMap(gUnknown_0202FF84[0], gUnknown_0202FF84[1], gUnknown_0202FF84[2]); + graphicsInfo = GetFieldObjectGraphicsInfo(gMapObjects[mapObjectId].graphicsId); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[gUnknown_08401E32[graphicsInfo->shadowSize]], 0, 0, 0x94); + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].coordOffsetEnabled = TRUE; + gSprites[spriteId].data0 = gUnknown_0202FF84[0]; + gSprites[spriteId].data1 = gUnknown_0202FF84[1]; + gSprites[spriteId].data2 = gUnknown_0202FF84[2]; + gSprites[spriteId].data3 = (graphicsInfo->height >> 1) - gUnknown_08401E36[graphicsInfo->shadowSize]; + } + return FALSE; +} -- cgit v1.2.3 From 994618e494365cfbaeef9f220ba99996c43d5fe8 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Sep 2017 16:05:11 -0400 Subject: oamc_shadow --- asm/field_effect_helpers.s | 97 ---------------------------------------------- src/field_effect_helpers.c | 24 ++++++++++++ 2 files changed, 24 insertions(+), 97 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 5a2c0c4fb..3e82ba573 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,103 +6,6 @@ .text - thumb_func_start oamc_shadow -oamc_shadow: @ 8126D10 - push {r4,r5,lr} - sub sp, 0x4 - adds r5, r0, 0 - ldrh r0, [r5, 0x2E] - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r5, 0x30] - lsls r1, 24 - lsrs r1, 24 - ldrh r2, [r5, 0x32] - lsls r2, 24 - lsrs r2, 24 - mov r3, sp - bl TryGetFieldObjectIdByLocalIdAndMap - lsls r0, 24 - cmp r0, 0 - beq _08126D3E - adds r0, r5, 0 - movs r1, 0x3 - bl FieldEffectStop - b _08126DC4 -_08126D3E: - mov r0, sp - ldrb r1, [r0] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08126DCC @ =gMapObjects - adds r4, r0, r1 - ldrb r0, [r4, 0x4] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _08126DD0 @ =gSprites - adds r1, r0 - ldrb r0, [r1, 0x5] - movs r2, 0xC - ands r2, r0 - ldrb r3, [r5, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r3 - orrs r0, r2 - strb r0, [r5, 0x5] - ldrh r0, [r1, 0x20] - strh r0, [r5, 0x20] - ldrh r0, [r5, 0x34] - ldrh r1, [r1, 0x22] - adds r0, r1 - strh r0, [r5, 0x22] - ldr r0, [r4] - ldr r1, _08126DD4 @ =0x00400001 - ands r0, r1 - cmp r0, r1 - bne _08126DBC - ldrb r0, [r4, 0x1E] - bl MetatileBehavior_IsPokeGrass - lsls r0, 24 - cmp r0, 0 - bne _08126DBC - ldrb r0, [r4, 0x1E] - bl MetatileBehavior_IsSurfableWaterOrUnderwater - lsls r0, 24 - cmp r0, 0 - bne _08126DBC - ldrb r0, [r4, 0x1F] - bl MetatileBehavior_IsSurfableWaterOrUnderwater - lsls r0, 24 - cmp r0, 0 - bne _08126DBC - ldrb r0, [r4, 0x1E] - bl MetatileBehavior_IsReflective - lsls r0, 24 - cmp r0, 0 - bne _08126DBC - ldrb r0, [r4, 0x1F] - bl MetatileBehavior_IsReflective - lsls r0, 24 - cmp r0, 0 - beq _08126DC4 -_08126DBC: - adds r0, r5, 0 - movs r1, 0x3 - bl FieldEffectStop -_08126DC4: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08126DCC: .4byte gMapObjects -_08126DD0: .4byte gSprites -_08126DD4: .4byte 0x00400001 - thumb_func_end oamc_shadow - thumb_func_start FldEff_TallGrass FldEff_TallGrass: @ 8126DD8 push {r4,r5,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index b7dded198..e10eeca52 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -258,3 +258,27 @@ bool8 FldEff_Shadow(void) } return FALSE; } + +void oamc_shadow(struct Sprite *sprite) +{ + u8 mapObjectId; + struct MapObject *mapObject; + struct Sprite *linkedSprite; + + if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjectId)) + { + FieldEffectStop(sprite, 3); + } + else + { + mapObject = &gMapObjects[mapObjectId]; + linkedSprite = &gSprites[mapObject->spriteId]; + sprite->oam.priority = linkedSprite->oam.priority; + sprite->pos1.x = linkedSprite->pos1.x; + sprite->pos1.y = linkedSprite->pos1.y + sprite->data3; + if (!mapObject->active || !mapObject->mapobj_bit_22 || MetatileBehavior_IsPokeGrass(mapObject->mapobj_unk_1E) || MetatileBehavior_IsSurfableWaterOrUnderwater(mapObject->mapobj_unk_1E) || MetatileBehavior_IsSurfableWaterOrUnderwater(mapObject->mapobj_unk_1F) || MetatileBehavior_IsReflective(mapObject->mapobj_unk_1E) || MetatileBehavior_IsReflective(mapObject->mapobj_unk_1F)) + { + FieldEffectStop(sprite, 3); + } + } +} -- cgit v1.2.3 From 1c93f4c4de65f16d1a4dc9ace20dd808ce4290db Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Sep 2017 16:14:01 -0400 Subject: FldEff_TallGrass --- asm/field_effect_helpers.s | 81 ---------------------------------------------- include/field_map_obj.h | 1 + src/field_effect_helpers.c | 30 +++++++++++++++++ 3 files changed, 31 insertions(+), 81 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 3e82ba573..4d88413bf 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,87 +6,6 @@ .text - thumb_func_start FldEff_TallGrass -FldEff_TallGrass: @ 8126DD8 - push {r4,r5,lr} - sub sp, 0x4 - ldr r5, _08126E70 @ =gUnknown_0202FF84 - ldrh r1, [r5] - mov r0, sp - strh r1, [r0] - ldrh r0, [r5, 0x4] - mov r4, sp - adds r4, 0x2 - strh r0, [r4] - mov r0, sp - adds r1, r4, 0 - movs r2, 0x8 - movs r3, 0x8 - bl sub_8060470 - ldr r0, _08126E74 @ =gFieldEffectObjectTemplatePointers - ldr r0, [r0, 0x10] - mov r1, sp - movs r2, 0 - ldrsh r1, [r1, r2] - movs r3, 0 - ldrsh r2, [r4, r3] - movs r3, 0 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x40 - beq _08126E64 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08126E78 @ =gSprites - adds r3, r0, r1 - adds r2, r3, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x2 - orrs r0, r1 - strb r0, [r2] - movs r0, 0x3 - ldrb r1, [r5, 0xC] - ands r1, r0 - lsls r1, 2 - ldrb r2, [r3, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3, 0x5] - ldr r0, [r5, 0x8] - strh r0, [r3, 0x2E] - ldr r0, [r5] - strh r0, [r3, 0x30] - ldr r0, [r5, 0x4] - strh r0, [r3, 0x32] - ldr r0, [r5, 0x10] - strh r0, [r3, 0x34] - ldr r0, [r5, 0x14] - strh r0, [r3, 0x36] - ldr r0, [r5, 0x18] - strh r0, [r3, 0x38] - ldr r0, [r5, 0x1C] - cmp r0, 0 - beq _08126E64 - adds r0, r3, 0 - movs r1, 0x4 - bl SeekSpriteAnim -_08126E64: - movs r0, 0 - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08126E70: .4byte gUnknown_0202FF84 -_08126E74: .4byte gFieldEffectObjectTemplatePointers -_08126E78: .4byte gSprites - thumb_func_end FldEff_TallGrass - thumb_func_start unc_grass_normal unc_grass_normal: @ 8126E7C push {r4-r7,lr} diff --git a/include/field_map_obj.h b/include/field_map_obj.h index 78cf2c146..9263604fb 100644 --- a/include/field_map_obj.h +++ b/include/field_map_obj.h @@ -431,5 +431,6 @@ void CameraObjectSetFollowedObjectId(u8); u8 sub_805ADDC(u8); u8 obj_unfreeze(struct Sprite *, s16, s16, u8); u16 npc_paltag_by_palslot(u8); +void sub_8060470(s16 *, s16 *, s16, s16); #endif // GUARD_FIELD_MAP_OBJ_H diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index e10eeca52..72fd0d554 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -282,3 +282,33 @@ void oamc_shadow(struct Sprite *sprite) } } } + +bool8 FldEff_TallGrass(void) +{ + s16 x; + s16 y; + u8 spriteId; + struct Sprite *sprite; + + x = gUnknown_0202FF84[0]; + y = gUnknown_0202FF84[1]; + sub_8060470(&x, &y, 8, 8); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[4], x, y, 0); + if (spriteId != MAX_SPRITES) + { + sprite = &gSprites[spriteId]; + sprite->coordOffsetEnabled = TRUE; + sprite->oam.priority = gUnknown_0202FF84[3]; + sprite->data0 = gUnknown_0202FF84[2]; + sprite->data1 = gUnknown_0202FF84[0]; + sprite->data2 = gUnknown_0202FF84[1]; + sprite->data3 = gUnknown_0202FF84[4]; + sprite->data4 = gUnknown_0202FF84[5]; + sprite->data5 = gUnknown_0202FF84[6]; + if (gUnknown_0202FF84[7]) + { + SeekSpriteAnim(sprite, 4); + } + } + return FALSE; +} -- cgit v1.2.3 From 32a762db4c2a7a0da5fea8a7302385414fb81e23 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Sep 2017 16:43:04 -0400 Subject: unc_grass_normal --- asm/field_effect_helpers.s | 134 --------------------------------------------- src/field_effect_helpers.c | 46 ++++++++++++++++ 2 files changed, 46 insertions(+), 134 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 4d88413bf..4b26537a9 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,140 +6,6 @@ .text - thumb_func_start unc_grass_normal -unc_grass_normal: @ 8126E7C - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - adds r5, r0, 0 - ldrh r0, [r5, 0x38] - lsrs r4, r0, 8 - lsls r0, 24 - lsrs r7, r0, 24 - ldr r3, _08126F24 @ =gUnknown_0202E844 - ldrb r1, [r3] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08126EC6 - ldr r2, _08126F28 @ =gSaveBlock1 - movs r0, 0x5 - ldrsb r0, [r2, r0] - cmp r0, r4 - bne _08126EAC - movs r0, 0x4 - ldrsb r0, [r2, r0] - cmp r0, r7 - beq _08126EC6 -_08126EAC: - ldr r1, [r3, 0x4] - ldrh r0, [r5, 0x30] - subs r0, r1 - strh r0, [r5, 0x30] - ldr r1, [r3, 0x8] - ldrh r0, [r5, 0x32] - subs r0, r1 - strh r0, [r5, 0x32] - ldrb r1, [r2, 0x5] - lsls r1, 8 - ldrb r0, [r2, 0x4] - orrs r0, r1 - strh r0, [r5, 0x38] -_08126EC6: - ldrh r0, [r5, 0x34] - lsrs r1, r0, 8 - mov r8, r1 - lsls r0, 24 - lsrs r4, r0, 24 - ldrh r0, [r5, 0x36] - lsls r0, 24 - lsrs r7, r0, 24 - movs r2, 0x30 - ldrsh r0, [r5, r2] - movs r2, 0x32 - ldrsh r1, [r5, r2] - bl MapGridGetMetatileBehaviorAt - lsls r0, 24 - lsrs r6, r0, 24 - mov r0, r8 - adds r1, r4, 0 - adds r2, r7, 0 - mov r3, sp - bl TryGetFieldObjectIdByLocalIdAndMap - lsls r0, 24 - cmp r0, 0 - bne _08126F1A - adds r0, r6, 0 - bl MetatileBehavior_IsTallGrass - lsls r0, 24 - cmp r0, 0 - beq _08126F1A - movs r1, 0x3C - ldrsh r0, [r5, r1] - cmp r0, 0 - beq _08126F2C - adds r0, r5, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _08126F2C -_08126F1A: - adds r0, r5, 0 - movs r1, 0x4 - bl FieldEffectStop - b _08126F70 - .align 2, 0 -_08126F24: .4byte gUnknown_0202E844 -_08126F28: .4byte gSaveBlock1 -_08126F2C: - mov r0, sp - ldrb r1, [r0] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08126F7C @ =gMapObjects - adds r2, r0, r1 - ldr r0, [r2, 0x10] - ldr r1, [r5, 0x30] - cmp r0, r1 - beq _08126F4C - ldr r0, [r2, 0x14] - cmp r0, r1 - beq _08126F4C - movs r0, 0x1 - strh r0, [r5, 0x3C] -_08126F4C: - movs r6, 0 - adds r0, r5, 0 - adds r0, 0x2B - ldrb r0, [r0] - cmp r0, 0 - bne _08126F5A - movs r6, 0x4 -_08126F5A: - adds r0, r5, 0 - movs r1, 0 - bl sub_806487C - ldrh r1, [r5, 0x2E] - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - adds r2, r6, 0 - bl sub_812882C -_08126F70: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08126F7C: .4byte gMapObjects - thumb_func_end unc_grass_normal - thumb_func_start FldEff_JumpTallGrass FldEff_JumpTallGrass: @ 8126F80 push {r4,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 72fd0d554..98e8242aa 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -6,8 +6,11 @@ // Includes #include "global.h" #include "sprite.h" +#include "fieldmap.h" #include "metatile_behavior.h" #include "field_map_obj.h" +#include "field_camera.h" +#include "field_map_obj_helpers.h" #include "field_weather.h" #include "field_effect.h" #include "field_effect_helpers.h" @@ -26,6 +29,7 @@ static void npc_pal_op_B(struct MapObject *, u8); /*static*/ void sub_8127DA0(struct Sprite *); /*static*/ void sub_8127DD0(struct Sprite *); /*static*/ void sub_8127E30(struct Sprite *); +/*static*/ void sub_812882C(struct Sprite *, u8, u8); // .rodata @@ -312,3 +316,45 @@ bool8 FldEff_TallGrass(void) } return FALSE; } + +void unc_grass_normal(struct Sprite *sprite) +{ + u8 mapNum; + u8 mapGroup; + u8 metatileBehavior; + u8 localId; + u8 mapObjectId; + struct MapObject *mapObject; + + mapNum = sprite->data5 >> 8; + mapGroup = sprite->data5; + if (gUnknown_0202E844.field_0 && (gSaveBlock1.location.mapNum != mapNum || gSaveBlock1.location.mapGroup != mapGroup)) + { + sprite->data1 -= gUnknown_0202E844.x; + sprite->data2 -= gUnknown_0202E844.y; + sprite->data5 = ((u8)gSaveBlock1.location.mapNum << 8) | (u8)gSaveBlock1.location.mapGroup; + } + localId = sprite->data3 >> 8; + mapNum = sprite->data3; + mapGroup = sprite->data4; + metatileBehavior = MapGridGetMetatileBehaviorAt(sprite->data1, sprite->data2); + if (TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId) || !MetatileBehavior_IsTallGrass(metatileBehavior) || (sprite->data7 && sprite->animEnded)) + { + FieldEffectStop(sprite, 4); + } + else + { + mapObject = &gMapObjects[mapObjectId]; + if ((mapObject->coords2.x != sprite->data1 || mapObject->coords2.y != sprite->data2) && (mapObject->coords3.x != sprite->data1 || mapObject->coords3.y != sprite->data2)) + { + sprite->data7 = TRUE; + } + metatileBehavior = 0; + if (sprite->animCmdIndex == 0) + { + metatileBehavior = 4; + } + sub_806487C(sprite, 0); + sub_812882C(sprite, sprite->data0, metatileBehavior); + } +} -- cgit v1.2.3 From 35644564a58c0d4299016e7ed18a2419accbb832 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 9 Sep 2017 16:28:33 -0500 Subject: finish decompiling battle_controller_safari --- asm/battle_controller_safari.s | 1402 ---------------------------------------- ld_script.txt | 2 - src/battle_controller_safari.c | 542 +++++++++++++++- 3 files changed, 539 insertions(+), 1407 deletions(-) delete mode 100644 asm/battle_controller_safari.s diff --git a/asm/battle_controller_safari.s b/asm/battle_controller_safari.s deleted file mode 100644 index e98d4ccd0..000000000 --- a/asm/battle_controller_safari.s +++ /dev/null @@ -1,1402 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start unref_sub_812B464 -unref_sub_812B464: @ 812B464 - bx lr - thumb_func_end unref_sub_812B464 - - thumb_func_start SetBankFuncToSafariBufferRunCommand -SetBankFuncToSafariBufferRunCommand: @ 812B468 - ldr r1, _0812B478 @ =gBattleBankFunc - ldr r0, _0812B47C @ =gActiveBank - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r1, _0812B480 @ =SafariBufferRunCommand - str r1, [r0] - bx lr - .align 2, 0 -_0812B478: .4byte gBattleBankFunc -_0812B47C: .4byte gActiveBank -_0812B480: .4byte SafariBufferRunCommand - thumb_func_end SetBankFuncToSafariBufferRunCommand - - thumb_func_start SafariBufferRunCommand -SafariBufferRunCommand: @ 812B484 - push {lr} - ldr r2, _0812B4B8 @ =gBattleExecBuffer - ldr r1, _0812B4BC @ =gBitTable - ldr r0, _0812B4C0 @ =gActiveBank - ldrb r3, [r0] - lsls r0, r3, 2 - adds r0, r1 - ldr r1, [r2] - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - beq _0812B4D0 - ldr r0, _0812B4C4 @ =gBattleBufferA - lsls r1, r3, 9 - adds r1, r0 - ldrb r0, [r1] - cmp r0, 0x38 - bhi _0812B4CC - ldr r0, _0812B4C8 @ =gSafariBufferCommands - ldrb r1, [r1] - lsls r1, 2 - adds r1, r0 - ldr r0, [r1] - bl _call_via_r0 - b _0812B4D0 - .align 2, 0 -_0812B4B8: .4byte gBattleExecBuffer -_0812B4BC: .4byte gBitTable -_0812B4C0: .4byte gActiveBank -_0812B4C4: .4byte gBattleBufferA -_0812B4C8: .4byte gSafariBufferCommands -_0812B4CC: - bl SafariBufferExecCompleted -_0812B4D0: - pop {r0} - bx r0 - thumb_func_end SafariBufferRunCommand - - thumb_func_start bx_battle_menu_t6_2 -bx_battle_menu_t6_2: @ 812B4D4 - push {r4,r5,lr} - ldr r0, _0812B508 @ =gMain - ldrh r1, [r0, 0x2E] - movs r2, 0x1 - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - beq _0812B546 - movs r0, 0x5 - bl PlaySE - bl DestroyMenuCursor - ldr r1, _0812B50C @ =gActionSelectionCursor - ldr r0, _0812B510 @ =gActiveBank - ldrb r0, [r0] - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x1 - beq _0812B524 - cmp r0, 0x1 - bgt _0812B514 - cmp r0, 0 - beq _0812B51E - b _0812B540 - .align 2, 0 -_0812B508: .4byte gMain -_0812B50C: .4byte gActionSelectionCursor -_0812B510: .4byte gActiveBank -_0812B514: - cmp r0, 0x2 - beq _0812B52A - cmp r0, 0x3 - beq _0812B536 - b _0812B540 -_0812B51E: - movs r0, 0x1 - movs r1, 0x5 - b _0812B52E -_0812B524: - movs r0, 0x1 - movs r1, 0x6 - b _0812B52E -_0812B52A: - movs r0, 0x1 - movs r1, 0x7 -_0812B52E: - movs r2, 0 - bl Emitcmd33 - b _0812B540 -_0812B536: - movs r0, 0x1 - movs r1, 0x8 - movs r2, 0 - bl Emitcmd33 -_0812B540: - bl SafariBufferExecCompleted - b _0812B64E -_0812B546: - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _0812B584 - ldr r5, _0812B57C @ =gActionSelectionCursor - ldr r4, _0812B580 @ =gActiveBank - ldrb r0, [r4] - adds r0, r5 - ldrb r1, [r0] - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - beq _0812B64E - movs r0, 0x5 - bl PlaySE - ldrb r0, [r4] - adds r0, r5 - ldrb r0, [r0] - bl nullsub_8 - ldrb r1, [r4] - adds r1, r5 - ldrb r0, [r1] - movs r2, 0x1 - b _0812B5F2 - .align 2, 0 -_0812B57C: .4byte gActionSelectionCursor -_0812B580: .4byte gActiveBank -_0812B584: - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0812B5C0 - ldr r5, _0812B5B8 @ =gActionSelectionCursor - ldr r4, _0812B5BC @ =gActiveBank - ldrb r0, [r4] - adds r0, r5 - ldrb r1, [r0] - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - bne _0812B64E - movs r0, 0x5 - bl PlaySE - ldrb r0, [r4] - adds r0, r5 - ldrb r0, [r0] - bl nullsub_8 - ldrb r1, [r4] - adds r1, r5 - ldrb r0, [r1] - movs r2, 0x1 - b _0812B5F2 - .align 2, 0 -_0812B5B8: .4byte gActionSelectionCursor -_0812B5BC: .4byte gActiveBank -_0812B5C0: - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0812B60C - ldr r5, _0812B604 @ =gActionSelectionCursor - ldr r4, _0812B608 @ =gActiveBank - ldrb r0, [r4] - adds r0, r5 - ldrb r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0812B64E - movs r0, 0x5 - bl PlaySE - ldrb r0, [r4] - adds r0, r5 - ldrb r0, [r0] - bl nullsub_8 - ldrb r1, [r4] - adds r1, r5 - ldrb r0, [r1] - movs r2, 0x2 -_0812B5F2: - eors r0, r2 - strb r0, [r1] - ldrb r0, [r4] - adds r0, r5 - ldrb r0, [r0] - movs r1, 0 - bl sub_802E3E4 - b _0812B64E - .align 2, 0 -_0812B604: .4byte gActionSelectionCursor -_0812B608: .4byte gActiveBank -_0812B60C: - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0812B64E - ldr r5, _0812B654 @ =gActionSelectionCursor - ldr r4, _0812B658 @ =gActiveBank - ldrb r0, [r4] - adds r0, r5 - ldrb r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _0812B64E - movs r0, 0x5 - bl PlaySE - ldrb r0, [r4] - adds r0, r5 - ldrb r0, [r0] - bl nullsub_8 - ldrb r1, [r4] - adds r1, r5 - ldrb r0, [r1] - movs r2, 0x2 - eors r0, r2 - strb r0, [r1] - ldrb r0, [r4] - adds r0, r5 - ldrb r0, [r0] - movs r1, 0 - bl sub_802E3E4 -_0812B64E: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0812B654: .4byte gActionSelectionCursor -_0812B658: .4byte gActiveBank - thumb_func_end bx_battle_menu_t6_2 - - thumb_func_start sub_812B65C -sub_812B65C: @ 812B65C - push {lr} - ldr r2, _0812B684 @ =gSprites - ldr r1, _0812B688 @ =gObjectBankIDs - ldr r0, _0812B68C @ =gActiveBank - ldrb r0, [r0] - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r1, [r0] - ldr r0, _0812B690 @ =SpriteCallbackDummy - cmp r1, r0 - bne _0812B680 - bl SafariBufferExecCompleted -_0812B680: - pop {r0} - bx r0 - .align 2, 0 -_0812B684: .4byte gSprites -_0812B688: .4byte gObjectBankIDs -_0812B68C: .4byte gActiveBank -_0812B690: .4byte SpriteCallbackDummy - thumb_func_end sub_812B65C - - thumb_func_start sub_812B694 -sub_812B694: @ 812B694 - push {lr} - ldr r0, _0812B6A8 @ =gUnknown_03004210 - ldrh r0, [r0, 0x16] - cmp r0, 0 - bne _0812B6A2 - bl SafariBufferExecCompleted -_0812B6A2: - pop {r0} - bx r0 - .align 2, 0 -_0812B6A8: .4byte gUnknown_03004210 - thumb_func_end sub_812B694 - - thumb_func_start sub_812B6AC -sub_812B6AC: @ 812B6AC - push {lr} - ldr r0, _0812B6DC @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0812B6D6 - ldr r2, _0812B6E0 @ =gMain - ldr r0, _0812B6E4 @ =0x0000043d - adds r3, r2, r0 - ldrb r1, [r3] - movs r0, 0x3 - negs r0, r0 - ands r0, r1 - strb r0, [r3] - ldr r0, _0812B6E8 @ =gPreBattleCallback1 - ldr r0, [r0] - str r0, [r2] - ldr r0, [r2, 0x8] - bl SetMainCallback2 -_0812B6D6: - pop {r0} - bx r0 - .align 2, 0 -_0812B6DC: .4byte gPaletteFade -_0812B6E0: .4byte gMain -_0812B6E4: .4byte 0x0000043d -_0812B6E8: .4byte gPreBattleCallback1 - thumb_func_end sub_812B6AC - - thumb_func_start bx_wait_t6 -bx_wait_t6: @ 812B6EC - push {lr} - ldr r0, _0812B718 @ =gDoingBattleAnim - ldrb r0, [r0] - cmp r0, 0 - beq _0812B70E - ldr r0, _0812B71C @ =gActiveBank - ldrb r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - ldr r1, _0812B720 @ =0x02017810 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - bne _0812B712 -_0812B70E: - bl SafariBufferExecCompleted -_0812B712: - pop {r0} - bx r0 - .align 2, 0 -_0812B718: .4byte gDoingBattleAnim -_0812B71C: .4byte gActiveBank -_0812B720: .4byte 0x02017810 - thumb_func_end bx_wait_t6 - - thumb_func_start sub_812B724 -sub_812B724: @ 812B724 - push {lr} - ldr r0, _0812B748 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0812B744 - ldr r1, _0812B74C @ =gBattleBankFunc - ldr r0, _0812B750 @ =gActiveBank - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r1, _0812B754 @ =sub_812B758 - str r1, [r0] - bl sub_810BADC -_0812B744: - pop {r0} - bx r0 - .align 2, 0 -_0812B748: .4byte gPaletteFade -_0812B74C: .4byte gBattleBankFunc -_0812B750: .4byte gActiveBank -_0812B754: .4byte sub_812B758 - thumb_func_end sub_812B724 - - thumb_func_start sub_812B758 -sub_812B758: @ 812B758 - push {lr} - ldr r0, _0812B784 @ =gMain - ldr r1, [r0, 0x4] - ldr r0, _0812B788 @ =sub_800F808 - cmp r1, r0 - bne _0812B77E - ldr r0, _0812B78C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0812B77E - ldr r0, _0812B790 @ =gScriptItemId - ldrh r1, [r0] - movs r0, 0x1 - bl Emitcmd35 - bl SafariBufferExecCompleted -_0812B77E: - pop {r0} - bx r0 - .align 2, 0 -_0812B784: .4byte gMain -_0812B788: .4byte sub_800F808 -_0812B78C: .4byte gPaletteFade -_0812B790: .4byte gScriptItemId - thumb_func_end sub_812B758 - - thumb_func_start sub_812B794 -sub_812B794: @ 812B794 - push {lr} - ldr r0, _0812B7B8 @ =gActiveBank - ldrb r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - ldr r1, _0812B7BC @ =0x02017810 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - bne _0812B7B2 - bl SafariBufferExecCompleted -_0812B7B2: - pop {r0} - bx r0 - .align 2, 0 -_0812B7B8: .4byte gActiveBank -_0812B7BC: .4byte 0x02017810 - thumb_func_end sub_812B794 - - thumb_func_start SafariBufferExecCompleted -SafariBufferExecCompleted: @ 812B7C0 - push {r4,lr} - sub sp, 0x4 - ldr r1, _0812B800 @ =gBattleBankFunc - ldr r4, _0812B804 @ =gActiveBank - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, _0812B808 @ =SafariBufferRunCommand - str r1, [r0] - ldr r0, _0812B80C @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0812B814 - bl GetMultiplayerId - mov r1, sp - strb r0, [r1] - movs r0, 0x2 - movs r1, 0x4 - mov r2, sp - bl PrepareBufferDataTransferLink - ldr r1, _0812B810 @ =gBattleBufferA - ldrb r0, [r4] - lsls r0, 9 - adds r0, r1 - movs r1, 0x38 - strb r1, [r0] - b _0812B826 - .align 2, 0 -_0812B800: .4byte gBattleBankFunc -_0812B804: .4byte gActiveBank -_0812B808: .4byte SafariBufferRunCommand -_0812B80C: .4byte gBattleTypeFlags -_0812B810: .4byte gBattleBufferA -_0812B814: - ldr r2, _0812B830 @ =gBattleExecBuffer - ldr r1, _0812B834 @ =gBitTable - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - ldr r0, [r2] - bics r0, r1 - str r0, [r2] -_0812B826: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812B830: .4byte gBattleExecBuffer -_0812B834: .4byte gBitTable - thumb_func_end SafariBufferExecCompleted - - thumb_func_start unref_sub_812B838 -unref_sub_812B838: @ 812B838 - push {lr} - ldr r0, _0812B85C @ =gActiveBank - ldrb r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - ldr r1, _0812B860 @ =0x02017810 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _0812B856 - bl SafariBufferExecCompleted -_0812B856: - pop {r0} - bx r0 - .align 2, 0 -_0812B85C: .4byte gActiveBank -_0812B860: .4byte 0x02017810 - thumb_func_end unref_sub_812B838 - - thumb_func_start SafariHandleGetAttributes -SafariHandleGetAttributes: @ 812B864 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandleGetAttributes - - thumb_func_start SafariHandlecmd1 -SafariHandlecmd1: @ 812B870 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandlecmd1 - - thumb_func_start SafariHandleSetAttributes -SafariHandleSetAttributes: @ 812B87C - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandleSetAttributes - - thumb_func_start SafariHandlecmd3 -SafariHandlecmd3: @ 812B888 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandlecmd3 - - thumb_func_start SafariHandleLoadPokeSprite -SafariHandleLoadPokeSprite: @ 812B894 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandleLoadPokeSprite - - thumb_func_start SafariHandleSendOutPoke -SafariHandleSendOutPoke: @ 812B8A0 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandleSendOutPoke - - thumb_func_start SafariHandleReturnPokeToBall -SafariHandleReturnPokeToBall: @ 812B8AC - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandleReturnPokeToBall - - thumb_func_start SafariHandleTrainerThrow -SafariHandleTrainerThrow: @ 812B8B8 - push {r4-r6,lr} - ldr r4, _0812B96C @ =gSaveBlock2 - ldrb r0, [r4, 0x8] - ldr r5, _0812B970 @ =gActiveBank - ldrb r1, [r5] - bl LoadPlayerTrainerBankSprite - ldrb r6, [r4, 0x8] - ldrb r0, [r5] - bl GetBankIdentity - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r6, 0 - bl GetMonSpriteTemplate_803C5A0 - ldr r0, _0812B974 @ =gUnknown_02024E8C - ldr r2, _0812B978 @ =gTrainerBackPicCoords - ldrb r1, [r4, 0x8] - lsls r1, 2 - adds r1, r2 - ldrb r1, [r1] - movs r2, 0x8 - subs r2, r1 - lsls r2, 18 - movs r1, 0xA0 - lsls r1, 15 - adds r2, r1 - asrs r2, 16 - movs r1, 0x50 - movs r3, 0x1E - bl CreateSprite - ldr r6, _0812B97C @ =gObjectBankIDs - ldrb r1, [r5] - adds r1, r6 - strb r0, [r1] - ldr r4, _0812B980 @ =gSprites - ldrb r3, [r5] - adds r0, r3, r6 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - lsls r3, 4 - ldrb r2, [r1, 0x5] - movs r0, 0xF - ands r0, r2 - orrs r0, r3 - strb r0, [r1, 0x5] - ldrb r0, [r5] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0xF0 - strh r1, [r0, 0x24] - ldrb r0, [r5] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldr r1, _0812B984 @ =0x0000fffe - strh r1, [r0, 0x2E] - ldrb r0, [r5] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r4, 0x1C - adds r0, r4 - ldr r1, _0812B988 @ =sub_80313A0 - str r1, [r0] - ldr r1, _0812B98C @ =gBattleBankFunc - ldrb r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r1, _0812B990 @ =sub_812B65C - str r1, [r0] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0812B96C: .4byte gSaveBlock2 -_0812B970: .4byte gActiveBank -_0812B974: .4byte gUnknown_02024E8C -_0812B978: .4byte gTrainerBackPicCoords -_0812B97C: .4byte gObjectBankIDs -_0812B980: .4byte gSprites -_0812B984: .4byte 0x0000fffe -_0812B988: .4byte sub_80313A0 -_0812B98C: .4byte gBattleBankFunc -_0812B990: .4byte sub_812B65C - thumb_func_end SafariHandleTrainerThrow - - thumb_func_start SafariHandleTrainerSlide -SafariHandleTrainerSlide: @ 812B994 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandleTrainerSlide - - thumb_func_start SafariHandleTrainerSlideBack -SafariHandleTrainerSlideBack: @ 812B9A0 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandleTrainerSlideBack - - thumb_func_start SafariHandlecmd10 -SafariHandlecmd10: @ 812B9AC - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandlecmd10 - - thumb_func_start SafariHandlecmd11 -SafariHandlecmd11: @ 812B9B8 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandlecmd11 - - thumb_func_start SafariHandlecmd12 -SafariHandlecmd12: @ 812B9C4 - push {r4,r5,lr} - ldr r1, _0812BA00 @ =0x02017840 - movs r0, 0x4 - strb r0, [r1, 0x8] - ldr r1, _0812BA04 @ =gDoingBattleAnim - movs r0, 0x1 - strb r0, [r1] - ldr r5, _0812BA08 @ =gActiveBank - ldrb r4, [r5] - movs r0, 0x1 - bl GetBankByPlayerAI - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - adds r0, r4, 0 - adds r1, r4, 0 - movs r3, 0x4 - bl move_anim_start_t4 - ldr r1, _0812BA0C @ =gBattleBankFunc - ldrb r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r1, _0812BA10 @ =bx_wait_t6 - str r1, [r0] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0812BA00: .4byte 0x02017840 -_0812BA04: .4byte gDoingBattleAnim -_0812BA08: .4byte gActiveBank -_0812BA0C: .4byte gBattleBankFunc -_0812BA10: .4byte bx_wait_t6 - thumb_func_end SafariHandlecmd12 - - thumb_func_start SafariHandleBallThrow -SafariHandleBallThrow: @ 812BA14 - push {r4,r5,lr} - ldr r1, _0812BA58 @ =gBattleBufferA - ldr r5, _0812BA5C @ =gActiveBank - ldrb r0, [r5] - lsls r0, 9 - adds r1, 0x1 - adds r0, r1 - ldrb r1, [r0] - ldr r0, _0812BA60 @ =0x02017840 - strb r1, [r0, 0x8] - ldr r1, _0812BA64 @ =gDoingBattleAnim - movs r0, 0x1 - strb r0, [r1] - ldrb r4, [r5] - movs r0, 0x1 - bl GetBankByPlayerAI - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - adds r0, r4, 0 - adds r1, r4, 0 - movs r3, 0x4 - bl move_anim_start_t4 - ldr r1, _0812BA68 @ =gBattleBankFunc - ldrb r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r1, _0812BA6C @ =bx_wait_t6 - str r1, [r0] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0812BA58: .4byte gBattleBufferA -_0812BA5C: .4byte gActiveBank -_0812BA60: .4byte 0x02017840 -_0812BA64: .4byte gDoingBattleAnim -_0812BA68: .4byte gBattleBankFunc -_0812BA6C: .4byte bx_wait_t6 - thumb_func_end SafariHandleBallThrow - - thumb_func_start SafariHandlePuase -SafariHandlePuase: @ 812BA70 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandlePuase - - thumb_func_start SafariHandleMoveAnimation -SafariHandleMoveAnimation: @ 812BA7C - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandleMoveAnimation - - thumb_func_start SafariHandlePrintString -SafariHandlePrintString: @ 812BA88 - push {r4,lr} - sub sp, 0x4 - ldr r0, _0812BACC @ =gUnknown_030042A4 - movs r1, 0 - strh r1, [r0] - ldr r0, _0812BAD0 @ =gUnknown_030042A0 - strh r1, [r0] - ldr r4, _0812BAD4 @ =gActiveBank - ldrb r0, [r4] - lsls r0, 9 - ldr r1, _0812BAD8 @ =gUnknown_02023A62 - adds r0, r1 - ldrh r0, [r0] - bl BufferStringBattle - ldr r0, _0812BADC @ =gUnknown_03004210 - ldr r1, _0812BAE0 @ =gDisplayedStringBattle - movs r2, 0xF - str r2, [sp] - movs r2, 0x90 - movs r3, 0x2 - bl sub_8002EB0 - ldr r1, _0812BAE4 @ =gBattleBankFunc - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, _0812BAE8 @ =sub_812B694 - str r1, [r0] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812BACC: .4byte gUnknown_030042A4 -_0812BAD0: .4byte gUnknown_030042A0 -_0812BAD4: .4byte gActiveBank -_0812BAD8: .4byte gUnknown_02023A62 -_0812BADC: .4byte gUnknown_03004210 -_0812BAE0: .4byte gDisplayedStringBattle -_0812BAE4: .4byte gBattleBankFunc -_0812BAE8: .4byte sub_812B694 - thumb_func_end SafariHandlePrintString - - thumb_func_start SafariHandlePrintStringPlayerOnly -SafariHandlePrintStringPlayerOnly: @ 812BAEC - push {lr} - ldr r0, _0812BB04 @ =gActiveBank - ldrb r0, [r0] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _0812BB08 - bl SafariHandlePrintString - b _0812BB0C - .align 2, 0 -_0812BB04: .4byte gActiveBank -_0812BB08: - bl SafariBufferExecCompleted -_0812BB0C: - pop {r0} - bx r0 - thumb_func_end SafariHandlePrintStringPlayerOnly - -.section .text_812BBFC - - thumb_func_start SafariHandlecmd19 -SafariHandlecmd19: @ 812BBFC - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandlecmd19 - - thumb_func_start SafariHandlecmd20 -SafariHandlecmd20: @ 812BC08 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandlecmd20 - - thumb_func_start SafariHandleOpenBag -SafariHandleOpenBag: @ 812BC14 - push {lr} - sub sp, 0x4 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r1, _0812BC44 @ =gBattleBankFunc - ldr r2, _0812BC48 @ =gActiveBank - ldrb r0, [r2] - lsls r0, 2 - adds r0, r1 - ldr r1, _0812BC4C @ =sub_812B724 - str r1, [r0] - ldr r1, _0812BC50 @ =gBankInMenu - ldrb r0, [r2] - strb r0, [r1] - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_0812BC44: .4byte gBattleBankFunc -_0812BC48: .4byte gActiveBank -_0812BC4C: .4byte sub_812B724 -_0812BC50: .4byte gBankInMenu - thumb_func_end SafariHandleOpenBag - - thumb_func_start SafariHandlecmd22 -SafariHandlecmd22: @ 812BC54 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandlecmd22 - - thumb_func_start SafariHandlecmd23 -SafariHandlecmd23: @ 812BC60 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandlecmd23 - - thumb_func_start SafariHandleHealthBarUpdate -SafariHandleHealthBarUpdate: @ 812BC6C - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandleHealthBarUpdate - - thumb_func_start SafariHandleExpBarUpdate -SafariHandleExpBarUpdate: @ 812BC78 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandleExpBarUpdate - - thumb_func_start SafariHandleStatusIconUpdate -SafariHandleStatusIconUpdate: @ 812BC84 - push {lr} - ldr r0, _0812BCB0 @ =gHealthboxIDs - ldr r1, _0812BCB4 @ =gActiveBank - ldrb r1, [r1] - adds r0, r1, r0 - ldrb r0, [r0] - ldr r2, _0812BCB8 @ =gBattlePartyID - lsls r1, 1 - adds r1, r2 - ldrh r2, [r1] - movs r1, 0x64 - muls r1, r2 - ldr r2, _0812BCBC @ =gPlayerParty - adds r1, r2 - movs r2, 0xB - bl sub_8045A5C - bl SafariBufferExecCompleted - pop {r0} - bx r0 - .align 2, 0 -_0812BCB0: .4byte gHealthboxIDs -_0812BCB4: .4byte gActiveBank -_0812BCB8: .4byte gBattlePartyID -_0812BCBC: .4byte gPlayerParty - thumb_func_end SafariHandleStatusIconUpdate - - thumb_func_start SafariHandleStatusAnimation -SafariHandleStatusAnimation: @ 812BCC0 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandleStatusAnimation - - thumb_func_start SafariHandleStatusXor -SafariHandleStatusXor: @ 812BCCC - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandleStatusXor - - thumb_func_start SafariHandlecmd29 -SafariHandlecmd29: @ 812BCD8 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandlecmd29 - - thumb_func_start SafariHandleDMATransfer -SafariHandleDMATransfer: @ 812BCE4 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandleDMATransfer - - thumb_func_start SafariHandlecmd31 -SafariHandlecmd31: @ 812BCF0 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandlecmd31 - - thumb_func_start SafariHandlecmd32 -SafariHandlecmd32: @ 812BCFC - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandlecmd32 - - thumb_func_start SafariHandlecmd33 -SafariHandlecmd33: @ 812BD08 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandlecmd33 - - thumb_func_start SafariHandlecmd34 -SafariHandlecmd34: @ 812BD14 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandlecmd34 - - thumb_func_start SafariHandlecmd35 -SafariHandlecmd35: @ 812BD20 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandlecmd35 - - thumb_func_start SafariHandlecmd36 -SafariHandlecmd36: @ 812BD2C - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandlecmd36 - - thumb_func_start SafariHandlecmd37 -SafariHandlecmd37: @ 812BD38 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandlecmd37 - - thumb_func_start SafariHandlecmd38 -SafariHandlecmd38: @ 812BD44 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandlecmd38 - - thumb_func_start SafariHandlecmd39 -SafariHandlecmd39: @ 812BD50 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandlecmd39 - - thumb_func_start SafariHandlecmd40 -SafariHandlecmd40: @ 812BD5C - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandlecmd40 - - thumb_func_start SafariHandleHitAnimation -SafariHandleHitAnimation: @ 812BD68 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandleHitAnimation - - thumb_func_start SafariHandlecmd42 -SafariHandlecmd42: @ 812BD74 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandlecmd42 - - thumb_func_start SafariHandleEffectivenessSound -SafariHandleEffectivenessSound: @ 812BD80 - push {r4,lr} - ldr r4, _0812BDBC @ =gActiveBank - ldrb r0, [r4] - bl GetBankSide - lsls r0, 24 - movs r3, 0x3F - cmp r0, 0 - bne _0812BD94 - movs r3, 0xC0 -_0812BD94: - ldr r2, _0812BDC0 @ =gBattleBufferA - ldrb r1, [r4] - lsls r1, 9 - adds r0, r2, 0x1 - adds r0, r1, r0 - ldrb r0, [r0] - adds r2, 0x2 - adds r1, r2 - ldrb r1, [r1] - lsls r1, 8 - orrs r0, r1 - lsls r1, r3, 24 - asrs r1, 24 - bl PlaySE12WithPanning - bl SafariBufferExecCompleted - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812BDBC: .4byte gActiveBank -_0812BDC0: .4byte gBattleBufferA - thumb_func_end SafariHandleEffectivenessSound - - thumb_func_start SafariHandlecmd44 -SafariHandlecmd44: @ 812BDC4 - push {lr} - ldr r2, _0812BDEC @ =gBattleBufferA - ldr r0, _0812BDF0 @ =gActiveBank - ldrb r1, [r0] - lsls r1, 9 - adds r0, r2, 0x1 - adds r0, r1, r0 - ldrb r0, [r0] - adds r2, 0x2 - adds r1, r2 - ldrb r1, [r1] - lsls r1, 8 - orrs r0, r1 - bl PlayFanfare - bl SafariBufferExecCompleted - pop {r0} - bx r0 - .align 2, 0 -_0812BDEC: .4byte gBattleBufferA -_0812BDF0: .4byte gActiveBank - thumb_func_end SafariHandlecmd44 - - thumb_func_start SafariHandleFaintingCry -SafariHandleFaintingCry: @ 812BDF4 - push {lr} - ldr r1, _0812BE24 @ =gBattlePartyID - ldr r0, _0812BE28 @ =gActiveBank - ldrb r0, [r0] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0812BE2C @ =gPlayerParty - adds r0, r1 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x19 - bl PlayCry1 - bl SafariBufferExecCompleted - pop {r0} - bx r0 - .align 2, 0 -_0812BE24: .4byte gBattlePartyID -_0812BE28: .4byte gActiveBank -_0812BE2C: .4byte gPlayerParty - thumb_func_end SafariHandleFaintingCry - - thumb_func_start SafariHandleIntroSlide -SafariHandleIntroSlide: @ 812BE30 - push {lr} - ldr r1, _0812BE58 @ =gBattleBufferA - ldr r0, _0812BE5C @ =gActiveBank - ldrb r0, [r0] - lsls r0, 9 - adds r1, 0x1 - adds r0, r1 - ldrb r0, [r0] - bl sub_80E43C0 - ldr r2, _0812BE60 @ =gUnknown_02024DE8 - ldrh r0, [r2] - movs r1, 0x1 - orrs r0, r1 - strh r0, [r2] - bl SafariBufferExecCompleted - pop {r0} - bx r0 - .align 2, 0 -_0812BE58: .4byte gBattleBufferA -_0812BE5C: .4byte gActiveBank -_0812BE60: .4byte gUnknown_02024DE8 - thumb_func_end SafariHandleIntroSlide - - thumb_func_start SafariHandleTrainerBallThrow -SafariHandleTrainerBallThrow: @ 812BE64 - push {r4,r5,lr} - ldr r5, _0812BEA0 @ =gHealthboxIDs - ldr r4, _0812BEA4 @ =gActiveBank - ldrb r1, [r4] - adds r0, r1, r5 - ldrb r0, [r0] - ldr r2, _0812BEA8 @ =gBattlePartyID - lsls r1, 1 - adds r1, r2 - ldrh r2, [r1] - movs r1, 0x64 - muls r1, r2 - ldr r2, _0812BEAC @ =gPlayerParty - adds r1, r2 - movs r2, 0xA - bl sub_8045A5C - ldrb r0, [r4] - bl sub_804777C - ldrb r0, [r4] - adds r0, r5 - ldrb r0, [r0] - bl sub_8043DFC - bl SafariBufferExecCompleted - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0812BEA0: .4byte gHealthboxIDs -_0812BEA4: .4byte gActiveBank -_0812BEA8: .4byte gBattlePartyID -_0812BEAC: .4byte gPlayerParty - thumb_func_end SafariHandleTrainerBallThrow - - thumb_func_start SafariHandlecmd48 -SafariHandlecmd48: @ 812BEB0 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandlecmd48 - - thumb_func_start SafariHandlecmd49 -SafariHandlecmd49: @ 812BEBC - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandlecmd49 - - thumb_func_start SafariHandlecmd50 -SafariHandlecmd50: @ 812BEC8 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandlecmd50 - - thumb_func_start SafariHandleSpriteInvisibility -SafariHandleSpriteInvisibility: @ 812BED4 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandleSpriteInvisibility - - thumb_func_start SafariHandleBattleAnimation -SafariHandleBattleAnimation: @ 812BEE0 - push {r4-r6,lr} - sub sp, 0x4 - ldr r5, _0812BF18 @ =gBattleBufferA - ldr r6, _0812BF1C @ =gActiveBank - ldrb r2, [r6] - lsls r1, r2, 9 - adds r0, r5, 0x1 - adds r0, r1, r0 - ldrb r3, [r0] - adds r0, r5, 0x2 - adds r0, r1, r0 - ldrb r4, [r0] - adds r5, 0x3 - adds r1, r5 - ldrb r0, [r1] - lsls r0, 8 - orrs r4, r0 - str r4, [sp] - adds r0, r2, 0 - adds r1, r2, 0 - bl move_anim_start_t3 - lsls r0, 24 - cmp r0, 0 - beq _0812BF20 - bl SafariBufferExecCompleted - b _0812BF2C - .align 2, 0 -_0812BF18: .4byte gBattleBufferA -_0812BF1C: .4byte gActiveBank -_0812BF20: - ldr r0, _0812BF34 @ =gBattleBankFunc - ldrb r1, [r6] - lsls r1, 2 - adds r1, r0 - ldr r0, _0812BF38 @ =sub_812B794 - str r0, [r1] -_0812BF2C: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0812BF34: .4byte gBattleBankFunc -_0812BF38: .4byte sub_812B794 - thumb_func_end SafariHandleBattleAnimation - - thumb_func_start SafariHandleLinkStandbyMsg -SafariHandleLinkStandbyMsg: @ 812BF3C - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandleLinkStandbyMsg - - thumb_func_start SafariHandleResetActionMoveSelection -SafariHandleResetActionMoveSelection: @ 812BF48 - push {lr} - bl SafariBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end SafariHandleResetActionMoveSelection - - thumb_func_start SafariHandlecmd55 -SafariHandlecmd55: @ 812BF54 - push {r4,lr} - ldr r2, _0812BF98 @ =gBattleOutcome - ldr r1, _0812BF9C @ =gBattleBufferA - ldr r4, _0812BFA0 @ =gActiveBank - ldrb r0, [r4] - lsls r0, 9 - adds r1, 0x1 - adds r0, r1 - ldrb r0, [r0] - strb r0, [r2] - movs r0, 0x5 - bl FadeOutMapMusic - movs r0, 0x3 - bl BeginFastPaletteFade - bl SafariBufferExecCompleted - ldr r0, _0812BFA4 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x6 - ands r0, r1 - cmp r0, 0x2 - bne _0812BF90 - ldr r0, _0812BFA8 @ =gBattleBankFunc - ldrb r1, [r4] - lsls r1, 2 - adds r1, r0 - ldr r0, _0812BFAC @ =sub_812B6AC - str r0, [r1] -_0812BF90: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812BF98: .4byte gBattleOutcome -_0812BF9C: .4byte gBattleBufferA -_0812BFA0: .4byte gActiveBank -_0812BFA4: .4byte gBattleTypeFlags -_0812BFA8: .4byte gBattleBankFunc -_0812BFAC: .4byte sub_812B6AC - thumb_func_end SafariHandlecmd55 - - thumb_func_start SafariHandlecmd56 -SafariHandlecmd56: @ 812BFB0 - bx lr - thumb_func_end SafariHandlecmd56 - - .align 2, 0 @ Don't pad with nop. diff --git a/ld_script.txt b/ld_script.txt index 467e00b37..755a5b855 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -234,9 +234,7 @@ SECTIONS { asm/field_effect_helpers.o(.text); asm/contest_ai.o(.text); asm/battle_anim_81258BC.o(.text); - asm/battle_controller_safari.o(.text); src/battle_controller_safari.o(.text); - asm/battle_controller_safari.o(.text_812BBFC); src/fldeff_sweetscent.o(.text); asm/battle_anim_812C144.o(.text); src/learn_move.o(.text); diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c index e84969b4f..e05578c31 100644 --- a/src/battle_controller_safari.c +++ b/src/battle_controller_safari.c @@ -2,8 +2,16 @@ #include "battle_anim_81258BC.h" #include "battle.h" #include "battle_message.h" +#include "data2.h" +#include "link.h" +#include "main.h" #include "menu_cursor.h" +#include "palette.h" +#include "rom3.h" +#include "songs.h" +#include "sound.h" #include "text.h" +#include "util.h" extern struct Window gUnknown_03004210; extern u8 gDisplayedStringBattle[]; @@ -16,6 +24,32 @@ extern const u8 gUnknown_08400D15[]; extern void *gBattleBankFunc[]; extern u16 gUnknown_030042A0; extern u16 gUnknown_030042A4; +extern u8 gBattleBufferA[][0x200]; +extern bool8 gDoingBattleAnim; +extern u8 gObjectBankIDs[]; +extern struct SpriteTemplate gUnknown_02024E8C; +extern u16 gBattleTypeFlags; +extern u32 gBattleExecBuffer; +extern u16 gScriptItemId; +extern MainCallback gPreBattleCallback1; +extern u8 gBankInMenu; +extern u8 gHealthboxIDs[]; +extern u16 gBattlePartyID[]; +extern u16 gUnknown_02024DE8; +extern u8 gBattleOutcome; + +extern u8 GetBankSide(u8); +extern u8 GetBankByPlayerAI(u8); +extern u8 GetBankIdentity(u8); +extern void LoadPlayerTrainerBankSprite(); +extern u8 sub_8079E90(); +extern void sub_80313A0(struct Sprite *); +extern void sub_810BADC(void); +extern void sub_8045A5C(); +extern void sub_80E43C0(); +extern void sub_804777C(); +extern void sub_8043DFC(); +extern bool8 move_anim_start_t3(); #if ENGLISH #define SUB_812BB10_TILE_DATA_OFFSET 440 @@ -146,7 +180,292 @@ const BattleBufferCmd gSafariBufferCommands[] = }; // code -void SafariHandlecmd18(void) { +void SafariBufferExecCompleted(void); +void bx_wait_t6(void); +void sub_812B65C(void); +void SafariBufferRunCommand(void); +void sub_812B758(void); + +void unref_sub_812B464(void) +{ +} + +void SetBankFuncToSafariBufferRunCommand(void) +{ + gBattleBankFunc[gActiveBank] = SafariBufferRunCommand; +} + +void SafariBufferRunCommand(void) +{ + if (gBattleExecBuffer & gBitTable[gActiveBank]) + { + if (gBattleBufferA[gActiveBank][0] < 0x39) + gSafariBufferCommands[gBattleBufferA[gActiveBank][0]](); + else + SafariBufferExecCompleted(); + } +} + +void bx_battle_menu_t6_2(void) +{ + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + DestroyMenuCursor(); + + // Useless switch statement. + switch (gActionSelectionCursor[gActiveBank]) + { + case 0: + Emitcmd33(1, 5, 0); + break; + case 1: + Emitcmd33(1, 6, 0); + break; + case 2: + Emitcmd33(1, 7, 0); + break; + case 3: + Emitcmd33(1, 8, 0); + break; + } + SafariBufferExecCompleted(); + } + else if (gMain.newKeys & DPAD_LEFT) + { + if (gActionSelectionCursor[gActiveBank] & 1) + { + PlaySE(SE_SELECT); + nullsub_8(gActionSelectionCursor[gActiveBank]); + gActionSelectionCursor[gActiveBank] ^= 1; + sub_802E3E4(gActionSelectionCursor[gActiveBank], 0); + } + } + else if (gMain.newKeys & DPAD_RIGHT) + { + if (!(gActionSelectionCursor[gActiveBank] & 1)) + { + PlaySE(SE_SELECT); + nullsub_8(gActionSelectionCursor[gActiveBank]); + gActionSelectionCursor[gActiveBank] ^= 1; + sub_802E3E4(gActionSelectionCursor[gActiveBank], 0); + } + } + else if (gMain.newKeys & DPAD_UP) + { + if (gActionSelectionCursor[gActiveBank] & 2) + { + PlaySE(SE_SELECT); + nullsub_8(gActionSelectionCursor[gActiveBank]); + gActionSelectionCursor[gActiveBank] ^= 2; + sub_802E3E4(gActionSelectionCursor[gActiveBank], 0); + } + } + else if (gMain.newKeys & DPAD_DOWN) + { + if (!(gActionSelectionCursor[gActiveBank] & 2)) + { + PlaySE(SE_SELECT); + nullsub_8(gActionSelectionCursor[gActiveBank]); + gActionSelectionCursor[gActiveBank] ^= 2; + sub_802E3E4(gActionSelectionCursor[gActiveBank], 0); + } + } +} + +void sub_812B65C(void) +{ + if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy) + SafariBufferExecCompleted(); +} + +void sub_812B694(void) +{ + if (gUnknown_03004210.state == 0) + SafariBufferExecCompleted(); +} + +void sub_812B6AC(void) +{ + if (!gPaletteFade.active) + { + gMain.inBattle = FALSE; + gMain.callback1 = gPreBattleCallback1; + SetMainCallback2(gMain.savedCallback); + } +} + +void bx_wait_t6(void) +{ + if (!gDoingBattleAnim || !ewram17810[gActiveBank].unk0_6) + SafariBufferExecCompleted(); +} + +void sub_812B724(void) +{ + if (!gPaletteFade.active) + { + gBattleBankFunc[gActiveBank] = sub_812B758; + sub_810BADC(); + } +} + +void sub_812B758(void) +{ + if (gMain.callback2 == sub_800F808 && !gPaletteFade.active) + { + Emitcmd35(1, gScriptItemId); + SafariBufferExecCompleted(); + } +} + +void sub_812B794(void) +{ + if (!ewram17810[gActiveBank].unk0_5) + SafariBufferExecCompleted(); +} + +void SafariBufferExecCompleted(void) +{ + gBattleBankFunc[gActiveBank] = SafariBufferRunCommand; + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + u8 playerId = GetMultiplayerId(); + + PrepareBufferDataTransferLink(2, 4, &playerId); + gBattleBufferA[gActiveBank][0] = 0x38; + } + else + { + gBattleExecBuffer &= ~gBitTable[gActiveBank]; + } +} + +void unref_sub_812B838(void) +{ + if (!ewram17810[gActiveBank].unk0_4) + SafariBufferExecCompleted(); +} + +void SafariHandleGetAttributes(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd1(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandleSetAttributes(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd3(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandleLoadPokeSprite(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandleSendOutPoke(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandleReturnPokeToBall(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandleTrainerThrow(void) +{ + LoadPlayerTrainerBankSprite(gSaveBlock2.playerGender, gActiveBank); + GetMonSpriteTemplate_803C5A0(gSaveBlock2.playerGender, GetBankIdentity(gActiveBank)); + gObjectBankIDs[gActiveBank] = CreateSprite( + &gUnknown_02024E8C, + 80, + (8 - gTrainerBackPicCoords[gSaveBlock2.playerGender].coords) * 4 + 80, + 30); + gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank; + gSprites[gObjectBankIDs[gActiveBank]].pos2.x = 240; + gSprites[gObjectBankIDs[gActiveBank]].data0 = -2; + gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0; + gBattleBankFunc[gActiveBank] = sub_812B65C; +} + +void SafariHandleTrainerSlide(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandleTrainerSlideBack(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd10(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd11(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd12(void) +{ + ewram17840.unk8 = 4; + gDoingBattleAnim = 1; + move_anim_start_t4(gActiveBank, gActiveBank, GetBankByPlayerAI(1), 4); + gBattleBankFunc[gActiveBank] = bx_wait_t6; +} + +void SafariHandleBallThrow(void) +{ + u8 var = gBattleBufferA[gActiveBank][1]; + + ewram17840.unk8 = var; + gDoingBattleAnim = 1; + move_anim_start_t4(gActiveBank, gActiveBank, GetBankByPlayerAI(1), 4); + gBattleBankFunc[gActiveBank] = bx_wait_t6; +} + +// TODO: spell Pause correctly +void SafariHandlePuase(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandleMoveAnimation(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlePrintString(void) +{ + gUnknown_030042A4 = 0; + gUnknown_030042A0 = 0; + BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]); + sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + gBattleBankFunc[gActiveBank] = sub_812B694; +} + +void SafariHandlePrintStringPlayerOnly(void) +{ + if (GetBankSide(gActiveBank) == 0) + SafariHandlePrintString(); + else + SafariBufferExecCompleted(); +} + +void SafariHandlecmd18(void) +{ int i; gUnknown_030042A4 = 0; @@ -161,9 +480,7 @@ void SafariHandlecmd18(void) { sub_814A5C0(0, 0xFFFF, 12, 11679, 0); for (i = 0; i < 4; i++) - { nullsub_8(i); - } sub_802E3E4(gActionSelectionCursor[gActiveBank], 0); StrCpyDecodeToDisplayedStringBattle((u8 *) gUnknown_08400CBB); @@ -171,3 +488,222 @@ void SafariHandlecmd18(void) { InitWindow(&gUnknown_03004210, gDisplayedStringBattle, SUB_812BB10_TILE_DATA_OFFSET, 2, 35); sub_8002F44(&gUnknown_03004210); } + +void SafariHandlecmd19(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd20(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandleOpenBag(void) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gBattleBankFunc[gActiveBank] = sub_812B724; + gBankInMenu = gActiveBank; +} + +void SafariHandlecmd22(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd23(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandleHealthBarUpdate(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandleExpBarUpdate(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandleStatusIconUpdate(void) +{ + sub_8045A5C(gHealthboxIDs[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], 11); + SafariBufferExecCompleted(); +} + +void SafariHandleStatusAnimation(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandleStatusXor(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd29(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandleDMATransfer(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd31(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd32(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd33(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd34(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd35(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd36(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd37(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd38(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd39(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd40(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandleHitAnimation(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd42(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandleEffectivenessSound(void) +{ + s8 pan; + + if (GetBankSide(gActiveBank) == 0) + pan = -64; + else + pan = 63; + PlaySE12WithPanning(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8), pan); + SafariBufferExecCompleted(); +} + +void SafariHandlecmd44(void) +{ + PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8)); + SafariBufferExecCompleted(); +} + +void SafariHandleFaintingCry(void) +{ + u16 species = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES); + + PlayCry1(species, 25); + SafariBufferExecCompleted(); +} + +void SafariHandleIntroSlide(void) +{ + sub_80E43C0(gBattleBufferA[gActiveBank][1]); + gUnknown_02024DE8 |= 1; + SafariBufferExecCompleted(); +} + +void SafariHandleTrainerBallThrow(void) +{ + sub_8045A5C(gHealthboxIDs[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], 10); + sub_804777C(gActiveBank); + sub_8043DFC(gHealthboxIDs[gActiveBank]); + SafariBufferExecCompleted(); +} + +void SafariHandlecmd48(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd49(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd50(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandleSpriteInvisibility(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandleBattleAnimation(void) +{ + u8 r3 = gBattleBufferA[gActiveBank][1]; + u16 r4 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); + + if (move_anim_start_t3(gActiveBank, gActiveBank, gActiveBank, r3, r4) != 0) + SafariBufferExecCompleted(); + else + gBattleBankFunc[gActiveBank] = sub_812B794; +} + +void SafariHandleLinkStandbyMsg(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandleResetActionMoveSelection(void) +{ + SafariBufferExecCompleted(); +} + +void SafariHandlecmd55(void) +{ + gBattleOutcome = gBattleBufferA[gActiveBank][1]; + FadeOutMapMusic(5); + BeginFastPaletteFade(3); + SafariBufferExecCompleted(); + if ((gBattleTypeFlags & BATTLE_TYPE_LINK) && !(gBattleTypeFlags & BATTLE_TYPE_WILD)) + gBattleBankFunc[gActiveBank] = sub_812B6AC; +} + +void SafariHandlecmd56(void) +{ +} -- cgit v1.2.3 From 3496dbb224c72797557367709eb8a017abeb890a Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 9 Sep 2017 16:30:15 -0500 Subject: battle_controller_linkopponent2 -> battle_controller_linkopponent --- ld_script.txt | 4 +- src/battle_controller_linkopponent.c | 1782 +++++++++++++++++++++++++++++++++ src/battle_controller_linkopponent2.c | 1782 --------------------------------- 3 files changed, 1784 insertions(+), 1784 deletions(-) create mode 100644 src/battle_controller_linkopponent.c delete mode 100644 src/battle_controller_linkopponent2.c diff --git a/ld_script.txt b/ld_script.txt index 755a5b855..87f8030cb 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -59,7 +59,7 @@ SECTIONS { src/battle_7.o(.text); src/battle_controller_opponent.o(.text); asm/battle_9.o(.text); - src/battle_controller_linkopponent2.o(.text); + src/battle_controller_linkopponent.o(.text); src/pokemon_1.o(.text); src/calculate_base_damage.o(.text); src/pokemon_2.o(.text); @@ -327,7 +327,7 @@ SECTIONS { src/battle_controller_player.o(.rodata); data/data2b.o(.rodata); src/battle_controller_opponent.o(.rodata); - src/battle_controller_linkopponent2.o(.rodata); + src/battle_controller_linkopponent.o(.rodata); data/battle_moves.o(.rodata); src/battle_3.o(.rodata); src/pokemon_data.o(.rodata); diff --git a/src/battle_controller_linkopponent.c b/src/battle_controller_linkopponent.c new file mode 100644 index 000000000..93c6671e5 --- /dev/null +++ b/src/battle_controller_linkopponent.c @@ -0,0 +1,1782 @@ +#include "global.h" +#include "battle.h" +#include "battle_interface.h" +#include "data2.h" +#include "link.h" +#include "m4a.h" +#include "main.h" +#include "palette.h" +#include "rom_8077ABC.h" +#include "rom3.h" +#include "songs.h" +#include "sound.h" +#include "sprite.h" +#include "string_util.h" +#include "task.h" +#include "text.h" +#include "util.h" + +struct UnknownStruct3 +{ + u16 moves[4]; + u8 pp[4]; + u8 ppBonuses; +}; + +extern u8 gActiveBank; +extern u8 gBattleBufferA[][0x200]; +extern u8 gObjectBankIDs[]; +extern u16 gBattlePartyID[]; +extern u8 gHealthboxIDs[]; +extern u16 gBattleTypeFlags; +extern u8 gBattleMonForms[]; +extern void (*gBattleBankFunc[])(void); +extern u32 *gDisableStructMoveAnim; +extern u32 gMoveDmgMoveAnim; +extern u16 gMovePowerMoveAnim; +extern u8 gHappinessMoveAnim; +extern u16 gWeatherMoveAnim; +extern u32 gPID_perBank[]; +extern u8 gAnimScriptActive; +extern void (*gAnimScriptCallback)(void); +extern u8 gDisplayedStringBattle[]; +extern bool8 gDoingBattleAnim; +extern u8 gBattleOutcome; +extern u16 gUnknown_02024DE8; +extern u8 gUnknown_02024E68[]; +extern struct SpriteTemplate gUnknown_02024E8C; +extern u8 gUnknown_0202F7C4; +extern struct Window gUnknown_03004210; +extern u16 gUnknown_030042A0; +extern u16 gUnknown_030042A4; +extern u8 gUnknown_0300434C[]; +extern u32 gBattleExecBuffer; +extern MainCallback gPreBattleCallback1; +extern struct MusicPlayerInfo gMPlay_BGM; + +extern u8 sub_8077F68(); +extern u8 sub_8079E90(); +extern u8 GetBankIdentity(u8); +extern void BattleLoadOpponentMonSprite(struct Pokemon *, u8); +extern void sub_8037A74(void); +extern void sub_8032984(u8, u16); +extern void sub_8037E30(void); +extern void sub_80312F0(struct Sprite *); +extern u8 sub_8046400(); +extern void sub_8032A08(); +extern void sub_8043DB0(); +extern void sub_8037BBC(void); +extern s32 sub_803FC34(u16); +extern void sub_8031A6C(u16, u8); +extern void sub_80313A0(struct Sprite *); +extern void sub_803757C(void); +extern void oamt_add_pos2_onto_pos1(); +extern void oamt_set_x3A_32(); +extern void sub_8078B34(struct Sprite *); +extern void sub_80375B4(void); +extern void sub_8010384(struct Sprite *); +extern void sub_8037B78(void); +extern u8 sub_8031720(); +extern bool8 mplay_80342A4(u8); +extern void ExecuteMoveAnim(); +extern void sub_80326EC(); +extern void sub_8031F24(void); +extern void sub_80324BC(); +extern void BufferStringBattle(); +extern void sub_8037C2C(void); +extern void sub_8043D84(); +extern void sub_8037B24(void); +extern void sub_8045A5C(); +extern void sub_8037FAC(void); +extern void move_anim_start_t2_for_situation(); +extern void dp01t_0F_4_move_anim(void); +extern void sub_8047858(); +extern u8 GetBankSide(u8); +extern void sub_80E43C0(); +extern void sub_803A3A8(struct Sprite *); +extern void sub_8044CA0(u8); +extern void nullsub_47(void); +extern bool8 IsDoubleBattle(void); +extern void sub_8037840(void); +extern void sub_8031B74(); +extern u8 sub_8078874(); +extern u8 move_anim_start_t3(); +extern void sub_8037FD8(void); +extern void sub_8037F34(void); +extern void LinkOpponentBufferExecCompleted(void); +extern void sub_8141828(); +extern void sub_804777C(); + +// this file's functions + +u32 dp01_getattr_by_ch1_for_player_pokemon__(u8, u8 *); +void sub_803752C(void); +void sub_8037D2C(void); +void sub_8038900(u8); +void sub_8039430(u8, u8); +void sub_8039648(void); +void sub_8039B64(void); +void sub_803A2C4(u8); +void sub_803A4E0(void); + +void LinkOpponentHandleGetAttributes(void); +void LinkOpponentHandlecmd1(void); +void LinkOpponentHandleSetAttributes(void); +void LinkOpponentHandlecmd3(void); +void LinkOpponentHandleLoadPokeSprite(void); +void LinkOpponentHandleSendOutPoke(void); +void LinkOpponentHandleReturnPokeToBall(void); +void LinkOpponentHandleTrainerThrow(void); +void LinkOpponentHandleTrainerSlide(void); +void LinkOpponentHandleTrainerSlideBack(void); +void LinkOpponentHandlecmd10(void); +void LinkOpponentHandlecmd11(void); +void LinkOpponentHandlecmd12(void); +void LinkOpponentHandleBallThrow(void); +void LinkOpponentHandlePuase(void); +void LinkOpponentHandleMoveAnimation(void); +void LinkOpponentHandlePrintString(void); +void LinkOpponentHandlePrintStringPlayerOnly(void); +void LinkOpponentHandlecmd18(void); +void LinkOpponentHandlecmd19(void); +void LinkOpponentHandlecmd20(void); +void LinkOpponentHandleOpenBag(void); +void LinkOpponentHandlecmd22(void); +void LinkOpponentHandlecmd23(void); +void LinkOpponentHandleHealthBarUpdate(void); +void LinkOpponentHandleExpBarUpdate(void); +void LinkOpponentHandleStatusIconUpdate(void); +void LinkOpponentHandleStatusAnimation(void); +void LinkOpponentHandleStatusXor(void); +void LinkOpponentHandlecmd29(void); +void LinkOpponentHandleDMATransfer(void); +void LinkOpponentHandlecmd31(void); +void LinkOpponentHandlecmd32(void); +void LinkOpponentHandlecmd33(void); +void LinkOpponentHandlecmd34(void); +void LinkOpponentHandlecmd35(void); +void LinkOpponentHandlecmd36(void); +void LinkOpponentHandlecmd37(void); +void LinkOpponentHandlecmd38(void); +void LinkOpponentHandlecmd39(void); +void LinkOpponentHandlecmd40(void); +void LinkOpponentHandleHitAnimation(void); +void LinkOpponentHandlecmd42(void); +void LinkOpponentHandleEffectivenessSound(void); +void LinkOpponentHandlecmd44(void); +void LinkOpponentHandleFaintingCry(void); +void LinkOpponentHandleIntroSlide(void); +void LinkOpponentHandleTrainerBallThrow(void); +void LinkOpponentHandlecmd48(void); +void LinkOpponentHandlecmd49(void); +void LinkOpponentHandlecmd50(void); +void LinkOpponentHandleSpriteInvisibility(void); +void LinkOpponentHandleBattleAnimation(void); +void LinkOpponentHandleLinkStandbyMsg(void); +void LinkOpponentHandleResetActionMoveSelection(void); +void LinkOpponentHandlecmd55(void); +void LinkOpponentHandlecmd56(void); + +// const data + +typedef void (*BattleBufferCmd) (void); +const BattleBufferCmd gLinkOpponentBufferCommands[] = +{ + LinkOpponentHandleGetAttributes, + LinkOpponentHandlecmd1, + LinkOpponentHandleSetAttributes, + LinkOpponentHandlecmd3, + LinkOpponentHandleLoadPokeSprite, + LinkOpponentHandleSendOutPoke, + LinkOpponentHandleReturnPokeToBall, + LinkOpponentHandleTrainerThrow, + LinkOpponentHandleTrainerSlide, + LinkOpponentHandleTrainerSlideBack, + LinkOpponentHandlecmd10, + LinkOpponentHandlecmd11, + LinkOpponentHandlecmd12, + LinkOpponentHandleBallThrow, + LinkOpponentHandlePuase, + LinkOpponentHandleMoveAnimation, + LinkOpponentHandlePrintString, + LinkOpponentHandlePrintStringPlayerOnly, + LinkOpponentHandlecmd18, + LinkOpponentHandlecmd19, + LinkOpponentHandlecmd20, + LinkOpponentHandleOpenBag, + LinkOpponentHandlecmd22, + LinkOpponentHandlecmd23, + LinkOpponentHandleHealthBarUpdate, + LinkOpponentHandleExpBarUpdate, + LinkOpponentHandleStatusIconUpdate, + LinkOpponentHandleStatusAnimation, + LinkOpponentHandleStatusXor, + LinkOpponentHandlecmd29, + LinkOpponentHandleDMATransfer, + LinkOpponentHandlecmd31, + LinkOpponentHandlecmd32, + LinkOpponentHandlecmd33, + LinkOpponentHandlecmd34, + LinkOpponentHandlecmd35, + LinkOpponentHandlecmd36, + LinkOpponentHandlecmd37, + LinkOpponentHandlecmd38, + LinkOpponentHandlecmd39, + LinkOpponentHandlecmd40, + LinkOpponentHandleHitAnimation, + LinkOpponentHandlecmd42, + LinkOpponentHandleEffectivenessSound, + LinkOpponentHandlecmd44, + LinkOpponentHandleFaintingCry, + LinkOpponentHandleIntroSlide, + LinkOpponentHandleTrainerBallThrow, + LinkOpponentHandlecmd48, + LinkOpponentHandlecmd49, + LinkOpponentHandlecmd50, + LinkOpponentHandleSpriteInvisibility, + LinkOpponentHandleBattleAnimation, + LinkOpponentHandleLinkStandbyMsg, + LinkOpponentHandleResetActionMoveSelection, + LinkOpponentHandlecmd55, + LinkOpponentHandlecmd56 +}; + +// code + +void nullsub_47(void) +{ +} + +void SetBankFuncToLinkOpponentBufferRunCommand(void) +{ + gBattleBankFunc[gActiveBank] = sub_803752C; +} + +void sub_803752C(void) +{ + if (gBattleExecBuffer & gBitTable[gActiveBank]) + { + if (gBattleBufferA[gActiveBank][0] <= 0x38) + gLinkOpponentBufferCommands[gBattleBufferA[gActiveBank][0]](); + else + LinkOpponentBufferExecCompleted(); + } +} + +void sub_803757C(void) +{ + if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy) + LinkOpponentBufferExecCompleted(); +} + +void sub_80375B4(void) +{ + if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy) + { + sub_8031B74(gSprites[gObjectBankIDs[gActiveBank]].oam.affineParam); + gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum = gSprites[gObjectBankIDs[gActiveBank]].data5; + FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); + DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); + LinkOpponentBufferExecCompleted(); + } +} + +void sub_8037644(void) +{ + if ((--ewram17810[gActiveBank].unk9) == 0xFF) + { + ewram17810[gActiveBank].unk9 = 0; + LinkOpponentBufferExecCompleted(); + } +} + +void sub_8037680(void) +{ + bool8 r6 = FALSE; + + if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI))) + { + if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy) + r6 = TRUE; + } + else + { + if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy + && gSprites[gHealthboxIDs[gActiveBank ^ 2]].callback == SpriteCallbackDummy) + r6 = TRUE; + } + if (IsCryPlayingOrClearCrySongs()) + r6 = FALSE; + + if (r6) + { + if (GetBankIdentity(gActiveBank) == 1) + { + if (!ewram17810[gActiveBank].unk1_0 || !ewram17810[gActiveBank ^ 2].unk1_0) + return; + ewram17810[gActiveBank].unk0_7 = 0; + ewram17810[gActiveBank].unk1_0 = 0; + ewram17810[gActiveBank ^ 2].unk0_7 = 0; + ewram17810[gActiveBank ^ 2].unk1_0 = 0; + FreeSpriteTilesByTag(0x27F9); + FreeSpritePaletteByTag(0x27F9); + } + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + if (GetBankIdentity(gActiveBank) == 1) + m4aMPlayContinue(&gMPlay_BGM); + } + else + { + m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 256); + } + ewram17810[gActiveBank].unk9 = 3; + gBattleBankFunc[gActiveBank] = sub_8037644; + } +} + +void sub_8037840(void) +{ + if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7) + sub_8141828(gActiveBank, &gEnemyParty[gBattlePartyID[gActiveBank]]); + if (!ewram17810[gActiveBank ^ 2].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_7) + sub_8141828(gActiveBank ^ 2, &gEnemyParty[gBattlePartyID[gActiveBank ^ 2]]); + if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_3) + { + if ((gBattleTypeFlags & BATTLE_TYPE_MULTI) && GetBankIdentity(gActiveBank) == 3) + { + if (++ewram17810[gActiveBank].unk9 == 1) + return; + ewram17810[gActiveBank].unk9 = 0; + } + if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) + { + DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank ^ 2]]); + sub_8045A5C( + gHealthboxIDs[gActiveBank ^ 2], + &gEnemyParty[gBattlePartyID[gActiveBank ^ 2]], + 0); + sub_804777C(gActiveBank ^ 2); + sub_8043DFC(gHealthboxIDs[gActiveBank ^ 2]); + sub_8032984( + gActiveBank ^ 2, + GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank ^ 2]], MON_DATA_SPECIES)); + } + DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]); + sub_8045A5C( + gHealthboxIDs[gActiveBank], + &gEnemyParty[gBattlePartyID[gActiveBank]], + 0); + sub_804777C(gActiveBank); + sub_8043DFC(gHealthboxIDs[gActiveBank]); + sub_8032984( + gActiveBank, + GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES)); + + ewram17840.unk9_0 = 0; + gBattleBankFunc[gActiveBank] = sub_8037680; + } +} + +void sub_8037A74(void) +{ + if (gSprites[gObjectBankIDs[gActiveBank]].animEnded == TRUE + && gSprites[gObjectBankIDs[gActiveBank]].pos2.x == 0) + { + if (!ewram17810[gActiveBank].unk0_7) + { + sub_8141828(gActiveBank, &gEnemyParty[gBattlePartyID[gActiveBank]]); + return; + } + if (ewram17810[gActiveBank].unk1_0) + { + ewram17810[gActiveBank].unk0_7 = 0; + ewram17810[gActiveBank].unk1_0 = 0; + FreeSpriteTilesByTag(0x27F9); + FreeSpritePaletteByTag(0x27F9); + LinkOpponentBufferExecCompleted(); + return; + } + } +} + +void sub_8037B24(void) +{ + s16 r4 = sub_8045C78(gActiveBank, gHealthboxIDs[gActiveBank], 0, 0); + + sub_8043DFC(gHealthboxIDs[gActiveBank]); + if (r4 != -1) + sub_80440EC(gHealthboxIDs[gActiveBank], r4, 0); + else + LinkOpponentBufferExecCompleted(); +} + +void sub_8037B78(void) +{ + if (!gSprites[gObjectBankIDs[gActiveBank]].inUse) + { + sub_8043DB0(gHealthboxIDs[gActiveBank]); + LinkOpponentBufferExecCompleted(); + } +} + +void sub_8037BBC(void) +{ + if (!ewram17810[gActiveBank].unk0_6) + { + FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); + DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); + sub_8032A08(gActiveBank); + sub_8043DB0(gHealthboxIDs[gActiveBank]); + LinkOpponentBufferExecCompleted(); + } +} + +void sub_8037C2C(void) +{ + if (gUnknown_03004210.state == 0) + LinkOpponentBufferExecCompleted(); +} + +void dp01t_0F_4_move_anim(void) +{ + u8 spriteId = gObjectBankIDs[gActiveBank]; + + if (gSprites[spriteId].data1 == 32) + { + gSprites[spriteId].data1 = 0; + gSprites[spriteId].invisible = FALSE; + gDoingBattleAnim = 0; + LinkOpponentBufferExecCompleted(); + } + else + { + if (((u16)gSprites[spriteId].data1 % 4) == 0) + gSprites[spriteId].invisible ^= 1; + gSprites[spriteId].data1++; + } +} + +void sub_8037CC0(void) +{ + if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy) + { + if (ewram17800[gActiveBank].substituteSprite) + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); + gBattleBankFunc[gActiveBank] = sub_8037D2C; + } +} + +void sub_8037D2C(void) +{ + if (!ewram17810[gActiveBank].unk0_6) + { + CreateTask(c3_0802FDF4, 10); + LinkOpponentBufferExecCompleted(); + } +} + +void sub_8037D64(void) +{ + if (ewram17810[gActiveBank].unk1_0) + { + ewram17810[gActiveBank].unk0_7 = 0; + ewram17810[gActiveBank].unk1_0 = 0; + FreeSpriteTilesByTag(0x27F9); + FreeSpritePaletteByTag(0x27F9); + StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 0); + sub_8045A5C( + gHealthboxIDs[gActiveBank], + &gEnemyParty[gBattlePartyID[gActiveBank]], + 0); + sub_804777C(gActiveBank); + sub_8043DFC(gHealthboxIDs[gActiveBank]); + sub_8031F88(gActiveBank); + gBattleBankFunc[gActiveBank] = sub_8037CC0; + } +} + +void sub_8037E30(void) +{ + if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7) + sub_8141828(gActiveBank, &gEnemyParty[gBattlePartyID[gActiveBank]]); + if (gSprites[gUnknown_0300434C[gActiveBank]].callback == SpriteCallbackDummy + && !ewram17810[gActiveBank].unk0_3) + { + DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]); + sub_8032984(gActiveBank, GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES)); + gBattleBankFunc[gActiveBank] = sub_8037D64; + } +} + +void sub_8037EF0(void) +{ + if (gReceivedRemoteLinkPlayers == 0) + { + m4aSongNumStop(SE_HINSI); + gMain.inBattle = FALSE; + gMain.callback1 = gPreBattleCallback1; + SetMainCallback2(c2_8011A1C); + } +} + +void sub_8037F34(void) +{ + if (!gPaletteFade.active) + { + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + sub_800832C(); + gBattleBankFunc[gActiveBank] = sub_8037EF0; + } + else + { + m4aSongNumStop(SE_HINSI); + gMain.inBattle = FALSE; + gMain.callback1 = gPreBattleCallback1; + SetMainCallback2(gMain.savedCallback); + } + } +} + +void sub_8037FAC(void) +{ + if (!ewram17810[gActiveBank].unk0_4) + LinkOpponentBufferExecCompleted(); +} + +void sub_8037FD8(void) +{ + if (!ewram17810[gActiveBank].unk0_5) + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentBufferExecCompleted(void) +{ + gBattleBankFunc[gActiveBank] = sub_803752C; + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + u8 playerId = GetMultiplayerId(); + + PrepareBufferDataTransferLink(2, 4, &playerId); + gBattleBufferA[gActiveBank][0] = 0x38; + } + else + { + gBattleExecBuffer &= ~gBitTable[gActiveBank]; + } +} + +void LinkOpponentHandleGetAttributes(void) +{ + u8 buffer[0x100]; + u32 r6 = 0; + u8 r4; + s32 i; + + if (gBattleBufferA[gActiveBank][2] == 0) + { + r6 = dp01_getattr_by_ch1_for_player_pokemon__(gBattlePartyID[gActiveBank], buffer); + } + else + { + r4 = gBattleBufferA[gActiveBank][2]; + for (i = 0; i < 6; i++) + { + if (r4 & 1) + r6 += dp01_getattr_by_ch1_for_player_pokemon__(i, buffer + r6); + r4 >>= 1; + } + } + Emitcmd29(1, r6, buffer); + LinkOpponentBufferExecCompleted(); +} + +u32 dp01_getattr_by_ch1_for_player_pokemon__(u8 a, u8 *buffer) +{ + struct BattlePokemon battlePokemon; + struct UnknownStruct3 moveData; + u8 nickname[20]; + u8 *src; + s16 data16; + u32 data32; + s32 size = 0; + + switch (gBattleBufferA[gActiveBank][1]) + { + case 0: + battlePokemon.species = GetMonData(&gEnemyParty[a], MON_DATA_SPECIES); + battlePokemon.item = GetMonData(&gEnemyParty[a], MON_DATA_HELD_ITEM); + for (size = 0; size < 4; size++) + { + battlePokemon.moves[size] = GetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + size); + battlePokemon.pp[size] = GetMonData(&gEnemyParty[a], MON_DATA_PP1 + size); + } + battlePokemon.ppBonuses = GetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES); + battlePokemon.friendship = GetMonData(&gEnemyParty[a], MON_DATA_FRIENDSHIP); + battlePokemon.experience = GetMonData(&gEnemyParty[a], MON_DATA_EXP); + battlePokemon.hpIV = GetMonData(&gEnemyParty[a], MON_DATA_HP_IV); + battlePokemon.attackIV = GetMonData(&gEnemyParty[a], MON_DATA_ATK_IV); + battlePokemon.defenseIV = GetMonData(&gEnemyParty[a], MON_DATA_DEF_IV); + battlePokemon.speedIV = GetMonData(&gEnemyParty[a], MON_DATA_SPD_IV); + battlePokemon.spAttackIV = GetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV); + battlePokemon.spDefenseIV = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV); + battlePokemon.personality = GetMonData(&gEnemyParty[a], MON_DATA_PERSONALITY); + battlePokemon.status1 = GetMonData(&gEnemyParty[a], MON_DATA_STATUS); + battlePokemon.level = GetMonData(&gEnemyParty[a], MON_DATA_LEVEL); + battlePokemon.hp = GetMonData(&gEnemyParty[a], MON_DATA_HP); + battlePokemon.maxHP = GetMonData(&gEnemyParty[a], MON_DATA_MAX_HP); + battlePokemon.attack = GetMonData(&gEnemyParty[a], MON_DATA_ATK); + battlePokemon.defense = GetMonData(&gEnemyParty[a], MON_DATA_DEF); + battlePokemon.speed = GetMonData(&gEnemyParty[a], MON_DATA_SPD); + battlePokemon.spAttack = GetMonData(&gEnemyParty[a], MON_DATA_SPATK); + battlePokemon.spDefense = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF); + battlePokemon.isEgg = GetMonData(&gEnemyParty[a], MON_DATA_IS_EGG); + battlePokemon.altAbility = GetMonData(&gEnemyParty[a], MON_DATA_ALT_ABILITY); + battlePokemon.otId = GetMonData(&gEnemyParty[a], MON_DATA_OT_ID); + GetMonData(&gEnemyParty[a], MON_DATA_NICKNAME, nickname); + StringCopy10(battlePokemon.nickname, nickname); + GetMonData(&gEnemyParty[a], MON_DATA_OT_NAME, battlePokemon.otName); + src = (u8 *)&battlePokemon; + for (size = 0; size < sizeof(battlePokemon); size++) + buffer[size] = src[size]; + break; + case 1: + data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPECIES); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 2: + data16 = GetMonData(&gEnemyParty[a], MON_DATA_HELD_ITEM); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 3: + for (size = 0; size < 4; size++) + { + moveData.moves[size] = GetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + size); + moveData.pp[size] = GetMonData(&gEnemyParty[a], MON_DATA_PP1 + size); + } + moveData.ppBonuses = GetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES); + src = (u8 *)&moveData; + for (size = 0; size < sizeof(moveData); size++) + buffer[size] = src[size]; + break; + case 4: + case 5: + case 6: + case 7: + data16 = GetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - 4); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 8: + for (size = 0; size < 4; size++) + buffer[size] = GetMonData(&gEnemyParty[a], MON_DATA_PP1 + size); + buffer[size] = GetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES); + size++; + break; + case 9: + case 10: + case 11: + case 12: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - 9); + size = 1; + break; + case 17: + data32 = GetMonData(&gEnemyParty[a], MON_DATA_OT_ID); + buffer[0] = (data32 & 0x000000FF); + buffer[1] = (data32 & 0x0000FF00) >> 8; + buffer[2] = (data32 & 0x00FF0000) >> 16; + size = 3; + break; + case 18: + data32 = GetMonData(&gEnemyParty[a], MON_DATA_EXP); + buffer[0] = (data32 & 0x000000FF); + buffer[1] = (data32 & 0x0000FF00) >> 8; + buffer[2] = (data32 & 0x00FF0000) >> 16; + size = 3; + break; + case 19: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_HP_EV); + size = 1; + break; + case 20: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_ATK_EV); + size = 1; + break; + case 21: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_DEF_EV); + size = 1; + break; + case 22: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPD_EV); + size = 1; + break; + case 23: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPATK_EV); + size = 1; + break; + case 24: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF_EV); + size = 1; + break; + case 25: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_FRIENDSHIP); + size = 1; + break; + case 26: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_POKERUS); + size = 1; + break; + case 27: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_MET_LOCATION); + size = 1; + break; + case 28: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_MET_LEVEL); + size = 1; + break; + case 29: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_MET_GAME); + size = 1; + break; + case 30: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_POKEBALL); + size = 1; + break; + case 31: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_HP_IV); + buffer[1] = GetMonData(&gEnemyParty[a], MON_DATA_ATK_IV); + buffer[2] = GetMonData(&gEnemyParty[a], MON_DATA_DEF_IV); + buffer[3] = GetMonData(&gEnemyParty[a], MON_DATA_SPD_IV); + buffer[4] = GetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV); + buffer[5] = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV); + size = 6; + break; + case 32: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_HP_IV); + size = 1; + break; + case 33: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_ATK_IV); + size = 1; + break; + case 34: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_DEF_IV); + size = 1; + break; + case 35: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPD_IV); + size = 1; + break; + case 36: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV); + size = 1; + break; + case 37: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV); + size = 1; + break; + case 38: + data32 = GetMonData(&gEnemyParty[a], MON_DATA_PERSONALITY); + buffer[0] = (data32 & 0x000000FF); + buffer[1] = (data32 & 0x0000FF00) >> 8; + buffer[2] = (data32 & 0x00FF0000) >> 16; + buffer[3] = (data32 & 0xFF000000) >> 24; + size = 4; + break; + case 39: + data16 = GetMonData(&gEnemyParty[a], MON_DATA_CHECKSUM); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 40: + data32 = GetMonData(&gEnemyParty[a], MON_DATA_STATUS); + buffer[0] = (data32 & 0x000000FF); + buffer[1] = (data32 & 0x0000FF00) >> 8; + buffer[2] = (data32 & 0x00FF0000) >> 16; + buffer[3] = (data32 & 0xFF000000) >> 24; + size = 4; + break; + case 41: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_LEVEL); + size = 1; + break; + case 42: + data16 = GetMonData(&gEnemyParty[a], MON_DATA_HP); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 43: + data16 = GetMonData(&gEnemyParty[a], MON_DATA_MAX_HP); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 44: + data16 = GetMonData(&gEnemyParty[a], MON_DATA_ATK); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 45: + data16 = GetMonData(&gEnemyParty[a], MON_DATA_DEF); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 46: + data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPD); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 47: + data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPATK); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 48: + data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 49: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_COOL); + size = 1; + break; + case 50: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_BEAUTY); + size = 1; + break; + case 51: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_CUTE); + size = 1; + break; + case 52: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SMART); + size = 1; + break; + case 53: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_TOUGH); + size = 1; + break; + case 54: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SHEEN); + size = 1; + break; + case 55: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_COOL_RIBBON); + size = 1; + break; + case 56: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_BEAUTY_RIBBON); + size = 1; + break; + case 57: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_CUTE_RIBBON); + size = 1; + break; + case 58: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SMART_RIBBON); + size = 1; + break; + case 59: + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_TOUGH_RIBBON); + size = 1; + break; + } + return size; +} + +void LinkOpponentHandlecmd1(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandleSetAttributes(void) +{ + u8 i; + u8 r4; + + if (gBattleBufferA[gActiveBank][2] == 0) + { + sub_8038900(gBattlePartyID[gActiveBank]); + } + else + { + r4 = gBattleBufferA[gActiveBank][2]; + for (i = 0; i < 6; i++) + { + if (r4 & 1) + sub_8038900(i); + r4 >>= 1; + } + } + LinkOpponentBufferExecCompleted(); +} + +void sub_8038900(u8 a) +{ + struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBank][3]; + struct UnknownStruct3 *moveData = (struct UnknownStruct3 *)&gBattleBufferA[gActiveBank][3]; + s32 i; + + switch (gBattleBufferA[gActiveBank][1]) + { + case 0: + { + u8 iv; + + SetMonData(&gEnemyParty[a], MON_DATA_SPECIES, (u8 *)&battlePokemon->species); + SetMonData(&gEnemyParty[a], MON_DATA_HELD_ITEM, (u8 *)&battlePokemon->item); + for (i = 0; i < 4; i++) + { + SetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + i, (u8 *)&battlePokemon->moves[i]); + SetMonData(&gEnemyParty[a], MON_DATA_PP1 + i, (u8 *)&battlePokemon->pp[i]); + } + SetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES, (u8 *)&battlePokemon->ppBonuses); + SetMonData(&gEnemyParty[a], MON_DATA_FRIENDSHIP, (u8 *)&battlePokemon->friendship); + SetMonData(&gEnemyParty[a], MON_DATA_EXP, (u8 *)&battlePokemon->experience); + iv = battlePokemon->hpIV; + SetMonData(&gEnemyParty[a], MON_DATA_HP_IV, (u8 *)&iv); + iv = battlePokemon->attackIV; + SetMonData(&gEnemyParty[a], MON_DATA_ATK_IV, (u8 *)&iv); + iv = battlePokemon->defenseIV; + SetMonData(&gEnemyParty[a], MON_DATA_DEF_IV, (u8 *)&iv); + iv = battlePokemon->speedIV; + SetMonData(&gEnemyParty[a], MON_DATA_SPD_IV, (u8 *)&iv); + iv = battlePokemon->spAttackIV; + SetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV, (u8 *)&iv); + iv = battlePokemon->spDefenseIV; + SetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV, (u8 *)&iv); + SetMonData(&gEnemyParty[a], MON_DATA_PERSONALITY, (u8 *)&battlePokemon->personality); + SetMonData(&gEnemyParty[a], MON_DATA_STATUS, (u8 *)&battlePokemon->status1); + SetMonData(&gEnemyParty[a], MON_DATA_LEVEL, (u8 *)&battlePokemon->level); + SetMonData(&gEnemyParty[a], MON_DATA_HP, (u8 *)&battlePokemon->hp); + SetMonData(&gEnemyParty[a], MON_DATA_MAX_HP, (u8 *)&battlePokemon->maxHP); + SetMonData(&gEnemyParty[a], MON_DATA_ATK, (u8 *)&battlePokemon->attack); + SetMonData(&gEnemyParty[a], MON_DATA_DEF, (u8 *)&battlePokemon->defense); + SetMonData(&gEnemyParty[a], MON_DATA_SPD, (u8 *)&battlePokemon->speed); + SetMonData(&gEnemyParty[a], MON_DATA_SPATK, (u8 *)&battlePokemon->spAttack); + SetMonData(&gEnemyParty[a], MON_DATA_SPDEF, (u8 *)&battlePokemon->spDefense); + } + break; + case 1: + SetMonData(&gEnemyParty[a], MON_DATA_SPECIES, &gBattleBufferA[gActiveBank][3]); + break; + case 2: + SetMonData(&gEnemyParty[a], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBank][3]); + break; + case 3: + for (i = 0; i < 4; i++) + { + SetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + i, (u8 *)&moveData->moves[i]); + SetMonData(&gEnemyParty[a], MON_DATA_PP1 + i, (u8 *)&moveData->pp[i]); + } + SetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES, &moveData->ppBonuses); + break; + case 4: + case 5: + case 6: + case 7: + SetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - 4, &gBattleBufferA[gActiveBank][3]); + break; + case 8: + SetMonData(&gEnemyParty[a], MON_DATA_PP1, &gBattleBufferA[gActiveBank][3]); + SetMonData(&gEnemyParty[a], MON_DATA_PP2, &gBattleBufferA[gActiveBank][4]); + SetMonData(&gEnemyParty[a], MON_DATA_PP3, &gBattleBufferA[gActiveBank][5]); + SetMonData(&gEnemyParty[a], MON_DATA_PP4, &gBattleBufferA[gActiveBank][6]); + SetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBank][7]); + break; + case 9: + case 10: + case 11: + case 12: + SetMonData(&gEnemyParty[a], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - 9, &gBattleBufferA[gActiveBank][3]); + break; + case 17: + SetMonData(&gEnemyParty[a], MON_DATA_OT_ID, &gBattleBufferA[gActiveBank][3]); + break; + case 18: + SetMonData(&gEnemyParty[a], MON_DATA_EXP, &gBattleBufferA[gActiveBank][3]); + break; + case 19: + SetMonData(&gEnemyParty[a], MON_DATA_HP_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 20: + SetMonData(&gEnemyParty[a], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 21: + SetMonData(&gEnemyParty[a], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 22: + SetMonData(&gEnemyParty[a], MON_DATA_SPD_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 23: + SetMonData(&gEnemyParty[a], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 24: + SetMonData(&gEnemyParty[a], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 25: + SetMonData(&gEnemyParty[a], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBank][3]); + break; + case 26: + SetMonData(&gEnemyParty[a], MON_DATA_POKERUS, &gBattleBufferA[gActiveBank][3]); + break; + case 27: + SetMonData(&gEnemyParty[a], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBank][3]); + break; + case 28: + SetMonData(&gEnemyParty[a], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBank][3]); + break; + case 29: + SetMonData(&gEnemyParty[a], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBank][3]); + break; + case 30: + SetMonData(&gEnemyParty[a], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBank][3]); + break; + case 31: + SetMonData(&gEnemyParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]); + SetMonData(&gEnemyParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][4]); + SetMonData(&gEnemyParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][5]); + SetMonData(&gEnemyParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][6]); + SetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][7]); + SetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][8]); + break; + case 32: + SetMonData(&gEnemyParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 33: + SetMonData(&gEnemyParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 34: + SetMonData(&gEnemyParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 35: + SetMonData(&gEnemyParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 36: + SetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 37: + SetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 38: + SetMonData(&gEnemyParty[a], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBank][3]); + break; + case 39: + SetMonData(&gEnemyParty[a], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBank][3]); + break; + case 40: + SetMonData(&gEnemyParty[a], MON_DATA_STATUS, &gBattleBufferA[gActiveBank][3]); + break; + case 41: + SetMonData(&gEnemyParty[a], MON_DATA_LEVEL, &gBattleBufferA[gActiveBank][3]); + break; + case 42: + SetMonData(&gEnemyParty[a], MON_DATA_HP, &gBattleBufferA[gActiveBank][3]); + break; + case 43: + SetMonData(&gEnemyParty[a], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBank][3]); + break; + case 44: + SetMonData(&gEnemyParty[a], MON_DATA_ATK, &gBattleBufferA[gActiveBank][3]); + break; + case 45: + SetMonData(&gEnemyParty[a], MON_DATA_DEF, &gBattleBufferA[gActiveBank][3]); + break; + case 46: + SetMonData(&gEnemyParty[a], MON_DATA_SPD, &gBattleBufferA[gActiveBank][3]); + break; + case 47: + SetMonData(&gEnemyParty[a], MON_DATA_SPATK, &gBattleBufferA[gActiveBank][3]); + break; + case 48: + SetMonData(&gEnemyParty[a], MON_DATA_SPDEF, &gBattleBufferA[gActiveBank][3]); + break; + case 49: + SetMonData(&gEnemyParty[a], MON_DATA_COOL, &gBattleBufferA[gActiveBank][3]); + break; + case 50: + SetMonData(&gEnemyParty[a], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBank][3]); + break; + case 51: + SetMonData(&gEnemyParty[a], MON_DATA_CUTE, &gBattleBufferA[gActiveBank][3]); + break; + case 52: + SetMonData(&gEnemyParty[a], MON_DATA_SMART, &gBattleBufferA[gActiveBank][3]); + break; + case 53: + SetMonData(&gEnemyParty[a], MON_DATA_TOUGH, &gBattleBufferA[gActiveBank][3]); + break; + case 54: + SetMonData(&gEnemyParty[a], MON_DATA_SHEEN, &gBattleBufferA[gActiveBank][3]); + break; + case 55: + SetMonData(&gEnemyParty[a], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBank][3]); + break; + case 56: + SetMonData(&gEnemyParty[a], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBank][3]); + break; + case 57: + SetMonData(&gEnemyParty[a], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBank][3]); + break; + case 58: + SetMonData(&gEnemyParty[a], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBank][3]); + break; + case 59: + SetMonData(&gEnemyParty[a], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBank][3]); + break; + } +} + +void LinkOpponentHandlecmd3(void) +{ + u8 *dst; + u8 i; + + dst = (u8 *)&gEnemyParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1]; + for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++) + dst[i] = gBattleBufferA[gActiveBank][3 + i]; + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandleLoadPokeSprite(void) +{ + u16 species = GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES); + + BattleLoadOpponentMonSprite(&gEnemyParty[gBattlePartyID[gActiveBank]], gActiveBank); + GetMonSpriteTemplate_803C56C(species, GetBankIdentity(gActiveBank)); + gObjectBankIDs[gActiveBank] = CreateSprite( + &gUnknown_02024E8C, + sub_8077ABC(gActiveBank, 2), + sub_8077F68(gActiveBank), + sub_8079E90(gActiveBank)); + gSprites[gObjectBankIDs[gActiveBank]].pos2.x = -240; + gSprites[gObjectBankIDs[gActiveBank]].data0 = gActiveBank; + gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank; + StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], gBattleMonForms[gActiveBank]); + sub_8032984(gActiveBank, GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES)); + gBattleBankFunc[gActiveBank] = sub_8037A74; +} + +void LinkOpponentHandleSendOutPoke(void) +{ + gBattlePartyID[gActiveBank] = gBattleBufferA[gActiveBank][1]; + sub_8039430(gActiveBank, gBattleBufferA[gActiveBank][2]); + gBattleBankFunc[gActiveBank] = sub_8037E30; +} + +void sub_8039430(u8 a, u8 b) +{ + u16 species; + + sub_8032AA8(a, b); + gBattlePartyID[a] = gBattleBufferA[a][1]; + species = GetMonData(&gEnemyParty[gBattlePartyID[a]], MON_DATA_SPECIES); + gUnknown_0300434C[a] = CreateInvisibleSpriteWithCallback(sub_80312F0); + BattleLoadOpponentMonSprite(&gEnemyParty[gBattlePartyID[a]], a); + GetMonSpriteTemplate_803C56C(species, GetBankIdentity(a)); + gObjectBankIDs[a] = CreateSprite( + &gUnknown_02024E8C, + sub_8077ABC(a, 2), + sub_8077F68(a), + sub_8079E90(a)); + gSprites[gUnknown_0300434C[a]].data1 = gObjectBankIDs[a]; + gSprites[gObjectBankIDs[a]].data0 = a; + gSprites[gObjectBankIDs[a]].data2 = species; + gSprites[gObjectBankIDs[a]].oam.paletteNum = a; + StartSpriteAnim(&gSprites[gObjectBankIDs[a]], gBattleMonForms[a]); + gSprites[gObjectBankIDs[a]].invisible = TRUE; + gSprites[gObjectBankIDs[a]].callback = SpriteCallbackDummy; + gSprites[gUnknown_0300434C[a]].data0 = sub_8046400(0, 0xFE); +} + +void LinkOpponentHandleReturnPokeToBall(void) +{ + if (gBattleBufferA[gActiveBank][1] == 0) + { + ewram17810[gActiveBank].unk4 = 0; + gBattleBankFunc[gActiveBank] = sub_8039648; + } + else + { + FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); + DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); + sub_8032A08(gActiveBank); + sub_8043DB0(gHealthboxIDs[gActiveBank]); + LinkOpponentBufferExecCompleted(); + } +} + +void sub_8039648(void) +{ + switch (ewram17810[gActiveBank].unk4) + { + case 0: + if (ewram17800[gActiveBank].substituteSprite) + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); + ewram17810[gActiveBank].unk4 = 1; + break; + case 1: + if (!ewram17810[gActiveBank].unk0_6) + { + ewram17810[gActiveBank].unk4 = 0; + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 2); + gBattleBankFunc[gActiveBank] = sub_8037BBC; + } + break; + } +} + +void LinkOpponentHandleTrainerThrow(void) +{ + s16 xOffset; + u32 gender; + + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + if (GetBankIdentity(gActiveBank) & 2) + xOffset = -16; + else + xOffset = 16; + gender = gLinkPlayers[sub_803FC34(gActiveBank)].gender; + } + else + { + xOffset = 0; + gender = gLinkPlayers[GetMultiplayerId() ^ 1].gender; + } + sub_8031A6C(gender, gActiveBank); + GetMonSpriteTemplate_803C5A0(gender, GetBankIdentity(gActiveBank)); + gObjectBankIDs[gActiveBank] = CreateSprite( + &gUnknown_02024E8C, + 176 + xOffset, 40 + 4 * (8 - gTrainerFrontPicCoords[gender].coords), + sub_8079E90(gActiveBank)); + gSprites[gObjectBankIDs[gActiveBank]].pos2.x = -240; + gSprites[gObjectBankIDs[gActiveBank]].data0 = 2; + gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[gender].tag); + gSprites[gObjectBankIDs[gActiveBank]].data5 = gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum; + gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[gender].tag); + gSprites[gObjectBankIDs[gActiveBank]].oam.affineParam = gender; + gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0; + gBattleBankFunc[gActiveBank] = sub_803757C; +} + +void LinkOpponentHandleTrainerSlide(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandleTrainerSlideBack(void) +{ + oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]); + gSprites[gObjectBankIDs[gActiveBank]].data0 = 35; + gSprites[gObjectBankIDs[gActiveBank]].data2 = 280; + gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; + gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34; + oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], SpriteCallbackDummy); + gBattleBankFunc[gActiveBank] = sub_80375B4; +} + +void LinkOpponentHandlecmd10(void) +{ + if (ewram17810[gActiveBank].unk4 == 0) + { + if (ewram17800[gActiveBank].substituteSprite) + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); + ewram17810[gActiveBank].unk4++; + } + else if (!ewram17810[gActiveBank].unk0_6) + { + ewram17810[gActiveBank].unk4 = 0; + PlaySE12WithPanning(SE_POKE_DEAD, 63); + gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8010384; + gBattleBankFunc[gActiveBank] = sub_8037B78; + } +} + +void LinkOpponentHandlecmd11(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd12(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandleBallThrow(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlePuase(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandleMoveAnimation(void) +{ + if (!mplay_80342A4(gActiveBank)) + { + u32 r0 = gBattleBufferA[gActiveBank][1] + | (gBattleBufferA[gActiveBank][2] << 8); + + gUnknown_0202F7C4 = gBattleBufferA[gActiveBank][3]; + gMovePowerMoveAnim = gBattleBufferA[gActiveBank][4] + | (gBattleBufferA[gActiveBank][5] << 8); + gMoveDmgMoveAnim = gBattleBufferA[gActiveBank][6] + | (gBattleBufferA[gActiveBank][7] << 8) + | (gBattleBufferA[gActiveBank][8] << 16) + | (gBattleBufferA[gActiveBank][9] << 24); + gHappinessMoveAnim = gBattleBufferA[gActiveBank][10]; + gWeatherMoveAnim = gBattleBufferA[gActiveBank][12] + | (gBattleBufferA[gActiveBank][13] << 8); + gDisableStructMoveAnim = (u32 *)&gBattleBufferA[gActiveBank][16]; + gPID_perBank[gActiveBank] = *gDisableStructMoveAnim; + + // Dead code. sub_8031720 always returns 0. + if (sub_8031720(r0, gUnknown_0202F7C4) != 0) + { + LinkOpponentBufferExecCompleted(); + } + else + { + ewram17810[gActiveBank].unk4 = 0; + gBattleBankFunc[gActiveBank] = sub_8039B64; + } + } +} + +void sub_8039B64(void) +{ + u16 r4 = gBattleBufferA[gActiveBank][1] + | (gBattleBufferA[gActiveBank][2] << 8); + u8 r7 = gBattleBufferA[gActiveBank][11]; + + switch (ewram17810[gActiveBank].unk4) + { + case 0: + if (ewram17800[gActiveBank].substituteSprite && !ewram17800[gActiveBank].unk0_3) + { + ewram17800[gActiveBank].unk0_3 = 1; + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); + } + ewram17810[gActiveBank].unk4 = 1; + break; + case 1: + if (!ewram17810[gActiveBank].unk0_6) + { + sub_80326EC(0); + ExecuteMoveAnim(r4); + ewram17810[gActiveBank].unk4 = 2; + } + break; + case 2: + gAnimScriptCallback(); + if (!gAnimScriptActive) + { + sub_80326EC(1); + if ((ewram17800[gActiveBank].substituteSprite) && r7 <= 1) + { + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); + ewram17800[gActiveBank].unk0_3 = 0; + } + ewram17810[gActiveBank].unk4 = 3; + } + break; + case 3: + if (!ewram17810[gActiveBank].unk0_6) + { + sub_8031F24(); + sub_80324BC( + gActiveBank, + gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8)); + ewram17810[gActiveBank].unk4 = 0; + LinkOpponentBufferExecCompleted(); + } + break; + } +} + +void LinkOpponentHandlePrintString(void) +{ + gUnknown_030042A4 = 0; + gUnknown_030042A0 = 0; + BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]); + sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + gBattleBankFunc[gActiveBank] = sub_8037C2C; +} + +void LinkOpponentHandlePrintStringPlayerOnly(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd18(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd19(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd20(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandleOpenBag(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd22(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd23(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandleHealthBarUpdate(void) +{ + s16 r7; + + load_gfxc_health_bar(0); + r7 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); + if (r7 != 0x7FFF) + { + u32 maxHP = GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP); + u32 hp = GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_HP); + + sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, hp, r7); + } + else + { + u32 maxHP = GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP); + + sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, 0, r7); + } + gBattleBankFunc[gActiveBank] = sub_8037B24; +} + +void LinkOpponentHandleExpBarUpdate(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandleStatusIconUpdate(void) +{ + if (mplay_80342A4(gActiveBank) == 0) + { + sub_8045A5C(gHealthboxIDs[gActiveBank], &gEnemyParty[gBattlePartyID[gActiveBank]], 9); + ewram17810[gActiveBank].unk0_4 = 0; + gBattleBankFunc[gActiveBank] = sub_8037FAC; + } +} + +void LinkOpponentHandleStatusAnimation(void) +{ + if (mplay_80342A4(gActiveBank) == 0) + { + move_anim_start_t2_for_situation( + gBattleBufferA[gActiveBank][1], + gBattleBufferA[gActiveBank][2] + | (gBattleBufferA[gActiveBank][3] << 8) + | (gBattleBufferA[gActiveBank][4] << 16) + | (gBattleBufferA[gActiveBank][5] << 24)); + gBattleBankFunc[gActiveBank] = sub_8037FAC; + } +} + +void LinkOpponentHandleStatusXor(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd29(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandleDMATransfer(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd31(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd32(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd33(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd34(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd35(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd36(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd37(void) +{ + gUnknown_020238C8.unk0_0 = 0; + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd38(void) +{ + gUnknown_020238C8.unk0_0 = gBattleBufferA[gActiveBank][1]; + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd39(void) +{ + gUnknown_020238C8.unk0_7 = 0; + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd40(void) +{ + gUnknown_020238C8.unk0_7 ^= 1; + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandleHitAnimation(void) +{ + if (gSprites[gObjectBankIDs[gActiveBank]].invisible == TRUE) + { + LinkOpponentBufferExecCompleted(); + } + else + { + gDoingBattleAnim = TRUE; + gSprites[gObjectBankIDs[gActiveBank]].data1 = 0; + sub_8047858(gActiveBank); + gBattleBankFunc[gActiveBank] = dp01t_0F_4_move_anim; + } +} + +void LinkOpponentHandlecmd42(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandleEffectivenessSound(void) +{ + s8 pan; + + if (GetBankSide(gActiveBank) == 0) + pan = -64; + else + pan = 63; + PlaySE12WithPanning(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8), pan); + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd44(void) +{ + PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8)); + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandleFaintingCry(void) +{ + PlayCry3( + GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES), + 25, 5); + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandleIntroSlide(void) +{ + sub_80E43C0(gBattleBufferA[gActiveBank][1]); + gUnknown_02024DE8 |= 1; + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandleTrainerBallThrow(void) +{ + u8 taskId; + + oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]); + gSprites[gObjectBankIDs[gActiveBank]].data0 = 35; + gSprites[gObjectBankIDs[gActiveBank]].data2 = 280; + gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; + gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34; + oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], sub_803A3A8); + taskId = CreateTask(sub_803A2C4, 5); + gTasks[taskId].data[0] = gActiveBank; + if (ewram17810[gActiveBank].unk0_0) + gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0; + ewram17840.unk9_0 = 1; + gBattleBankFunc[gActiveBank] = nullsub_47; +} + +void sub_803A2C4(u8 taskId) +{ + u8 r9; + + r9 = gActiveBank; + gActiveBank = gTasks[taskId].data[0]; + if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI)) + { + gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; + sub_8039430(gActiveBank, 0); + } + else + { + gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; + sub_8039430(gActiveBank, 0); + gActiveBank ^= 2; + gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; + sub_8039430(gActiveBank, 0); + gActiveBank ^= 2; + } + gBattleBankFunc[gActiveBank] = sub_8037840; + gActiveBank = r9; + DestroyTask(taskId); +} + +void sub_803A3A8(struct Sprite *sprite) +{ + sub_8031B74(sprite->oam.affineParam); + sprite->oam.tileNum = sprite->data5; + FreeSpriteOamMatrix(sprite); + DestroySprite(sprite); +} + +void LinkOpponentHandlecmd48(void) +{ + if (gBattleBufferA[gActiveBank][1] != 0 && GetBankSide(gActiveBank) == 0) + { + LinkOpponentBufferExecCompleted(); + return; + } + + ewram17810[gActiveBank].unk0_0 = 1; + if (gBattleBufferA[gActiveBank][2] != 0) + { + if (ewram17810[gActiveBank].unk1_1 < 2) + { + ewram17810[gActiveBank].unk1_1++; + return; + } + else + { + ewram17810[gActiveBank].unk1_1 = 0; + } + } + gUnknown_02024E68[gActiveBank] = sub_8044804( + gActiveBank, + (struct BattleInterfaceStruct2 *)&gBattleBufferA[gActiveBank][4], + gBattleBufferA[gActiveBank][1], + gBattleBufferA[gActiveBank][2]); + ewram17810[gActiveBank].unk5 = 0; + if (gBattleBufferA[gActiveBank][2] != 0) + ewram17810[gActiveBank].unk5 = 0x5D; + gBattleBankFunc[gActiveBank] = sub_803A4E0; +} + +void sub_803A4E0(void) +{ + if (ewram17810[gActiveBank].unk5++ >= 93) + { + ewram17810[gActiveBank].unk5 = 0; + LinkOpponentBufferExecCompleted(); + } +} + +void LinkOpponentHandlecmd49(void) +{ + if (ewram17810[gActiveBank].unk0_0) + gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0; + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd50(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandleSpriteInvisibility(void) +{ + if (sub_8078874(gActiveBank) != 0) + { + gSprites[gObjectBankIDs[gActiveBank]].invisible = gBattleBufferA[gActiveBank][1]; + sub_8031F88(gActiveBank); + } + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandleBattleAnimation(void) +{ + if (mplay_80342A4(gActiveBank) == 0) + { + u8 r3 = gBattleBufferA[gActiveBank][1]; + u16 r4 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); + + if (move_anim_start_t3(gActiveBank, gActiveBank, gActiveBank, r3, r4) != 0) + LinkOpponentBufferExecCompleted(); + else + gBattleBankFunc[gActiveBank] = sub_8037FD8; + } +} + +void LinkOpponentHandleLinkStandbyMsg(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandleResetActionMoveSelection(void) +{ + LinkOpponentBufferExecCompleted(); +} + +void LinkOpponentHandlecmd55(void) +{ + if (gBattleBufferA[gActiveBank][1] == 3) + gBattleOutcome = gBattleBufferA[gActiveBank][1]; + else + gBattleOutcome = gBattleBufferA[gActiveBank][1] ^ 3; + FadeOutMapMusic(5); + BeginFastPaletteFade(3); + LinkOpponentBufferExecCompleted(); + gBattleBankFunc[gActiveBank] = sub_8037F34; +} + +void LinkOpponentHandlecmd56(void) +{ +} diff --git a/src/battle_controller_linkopponent2.c b/src/battle_controller_linkopponent2.c deleted file mode 100644 index 93c6671e5..000000000 --- a/src/battle_controller_linkopponent2.c +++ /dev/null @@ -1,1782 +0,0 @@ -#include "global.h" -#include "battle.h" -#include "battle_interface.h" -#include "data2.h" -#include "link.h" -#include "m4a.h" -#include "main.h" -#include "palette.h" -#include "rom_8077ABC.h" -#include "rom3.h" -#include "songs.h" -#include "sound.h" -#include "sprite.h" -#include "string_util.h" -#include "task.h" -#include "text.h" -#include "util.h" - -struct UnknownStruct3 -{ - u16 moves[4]; - u8 pp[4]; - u8 ppBonuses; -}; - -extern u8 gActiveBank; -extern u8 gBattleBufferA[][0x200]; -extern u8 gObjectBankIDs[]; -extern u16 gBattlePartyID[]; -extern u8 gHealthboxIDs[]; -extern u16 gBattleTypeFlags; -extern u8 gBattleMonForms[]; -extern void (*gBattleBankFunc[])(void); -extern u32 *gDisableStructMoveAnim; -extern u32 gMoveDmgMoveAnim; -extern u16 gMovePowerMoveAnim; -extern u8 gHappinessMoveAnim; -extern u16 gWeatherMoveAnim; -extern u32 gPID_perBank[]; -extern u8 gAnimScriptActive; -extern void (*gAnimScriptCallback)(void); -extern u8 gDisplayedStringBattle[]; -extern bool8 gDoingBattleAnim; -extern u8 gBattleOutcome; -extern u16 gUnknown_02024DE8; -extern u8 gUnknown_02024E68[]; -extern struct SpriteTemplate gUnknown_02024E8C; -extern u8 gUnknown_0202F7C4; -extern struct Window gUnknown_03004210; -extern u16 gUnknown_030042A0; -extern u16 gUnknown_030042A4; -extern u8 gUnknown_0300434C[]; -extern u32 gBattleExecBuffer; -extern MainCallback gPreBattleCallback1; -extern struct MusicPlayerInfo gMPlay_BGM; - -extern u8 sub_8077F68(); -extern u8 sub_8079E90(); -extern u8 GetBankIdentity(u8); -extern void BattleLoadOpponentMonSprite(struct Pokemon *, u8); -extern void sub_8037A74(void); -extern void sub_8032984(u8, u16); -extern void sub_8037E30(void); -extern void sub_80312F0(struct Sprite *); -extern u8 sub_8046400(); -extern void sub_8032A08(); -extern void sub_8043DB0(); -extern void sub_8037BBC(void); -extern s32 sub_803FC34(u16); -extern void sub_8031A6C(u16, u8); -extern void sub_80313A0(struct Sprite *); -extern void sub_803757C(void); -extern void oamt_add_pos2_onto_pos1(); -extern void oamt_set_x3A_32(); -extern void sub_8078B34(struct Sprite *); -extern void sub_80375B4(void); -extern void sub_8010384(struct Sprite *); -extern void sub_8037B78(void); -extern u8 sub_8031720(); -extern bool8 mplay_80342A4(u8); -extern void ExecuteMoveAnim(); -extern void sub_80326EC(); -extern void sub_8031F24(void); -extern void sub_80324BC(); -extern void BufferStringBattle(); -extern void sub_8037C2C(void); -extern void sub_8043D84(); -extern void sub_8037B24(void); -extern void sub_8045A5C(); -extern void sub_8037FAC(void); -extern void move_anim_start_t2_for_situation(); -extern void dp01t_0F_4_move_anim(void); -extern void sub_8047858(); -extern u8 GetBankSide(u8); -extern void sub_80E43C0(); -extern void sub_803A3A8(struct Sprite *); -extern void sub_8044CA0(u8); -extern void nullsub_47(void); -extern bool8 IsDoubleBattle(void); -extern void sub_8037840(void); -extern void sub_8031B74(); -extern u8 sub_8078874(); -extern u8 move_anim_start_t3(); -extern void sub_8037FD8(void); -extern void sub_8037F34(void); -extern void LinkOpponentBufferExecCompleted(void); -extern void sub_8141828(); -extern void sub_804777C(); - -// this file's functions - -u32 dp01_getattr_by_ch1_for_player_pokemon__(u8, u8 *); -void sub_803752C(void); -void sub_8037D2C(void); -void sub_8038900(u8); -void sub_8039430(u8, u8); -void sub_8039648(void); -void sub_8039B64(void); -void sub_803A2C4(u8); -void sub_803A4E0(void); - -void LinkOpponentHandleGetAttributes(void); -void LinkOpponentHandlecmd1(void); -void LinkOpponentHandleSetAttributes(void); -void LinkOpponentHandlecmd3(void); -void LinkOpponentHandleLoadPokeSprite(void); -void LinkOpponentHandleSendOutPoke(void); -void LinkOpponentHandleReturnPokeToBall(void); -void LinkOpponentHandleTrainerThrow(void); -void LinkOpponentHandleTrainerSlide(void); -void LinkOpponentHandleTrainerSlideBack(void); -void LinkOpponentHandlecmd10(void); -void LinkOpponentHandlecmd11(void); -void LinkOpponentHandlecmd12(void); -void LinkOpponentHandleBallThrow(void); -void LinkOpponentHandlePuase(void); -void LinkOpponentHandleMoveAnimation(void); -void LinkOpponentHandlePrintString(void); -void LinkOpponentHandlePrintStringPlayerOnly(void); -void LinkOpponentHandlecmd18(void); -void LinkOpponentHandlecmd19(void); -void LinkOpponentHandlecmd20(void); -void LinkOpponentHandleOpenBag(void); -void LinkOpponentHandlecmd22(void); -void LinkOpponentHandlecmd23(void); -void LinkOpponentHandleHealthBarUpdate(void); -void LinkOpponentHandleExpBarUpdate(void); -void LinkOpponentHandleStatusIconUpdate(void); -void LinkOpponentHandleStatusAnimation(void); -void LinkOpponentHandleStatusXor(void); -void LinkOpponentHandlecmd29(void); -void LinkOpponentHandleDMATransfer(void); -void LinkOpponentHandlecmd31(void); -void LinkOpponentHandlecmd32(void); -void LinkOpponentHandlecmd33(void); -void LinkOpponentHandlecmd34(void); -void LinkOpponentHandlecmd35(void); -void LinkOpponentHandlecmd36(void); -void LinkOpponentHandlecmd37(void); -void LinkOpponentHandlecmd38(void); -void LinkOpponentHandlecmd39(void); -void LinkOpponentHandlecmd40(void); -void LinkOpponentHandleHitAnimation(void); -void LinkOpponentHandlecmd42(void); -void LinkOpponentHandleEffectivenessSound(void); -void LinkOpponentHandlecmd44(void); -void LinkOpponentHandleFaintingCry(void); -void LinkOpponentHandleIntroSlide(void); -void LinkOpponentHandleTrainerBallThrow(void); -void LinkOpponentHandlecmd48(void); -void LinkOpponentHandlecmd49(void); -void LinkOpponentHandlecmd50(void); -void LinkOpponentHandleSpriteInvisibility(void); -void LinkOpponentHandleBattleAnimation(void); -void LinkOpponentHandleLinkStandbyMsg(void); -void LinkOpponentHandleResetActionMoveSelection(void); -void LinkOpponentHandlecmd55(void); -void LinkOpponentHandlecmd56(void); - -// const data - -typedef void (*BattleBufferCmd) (void); -const BattleBufferCmd gLinkOpponentBufferCommands[] = -{ - LinkOpponentHandleGetAttributes, - LinkOpponentHandlecmd1, - LinkOpponentHandleSetAttributes, - LinkOpponentHandlecmd3, - LinkOpponentHandleLoadPokeSprite, - LinkOpponentHandleSendOutPoke, - LinkOpponentHandleReturnPokeToBall, - LinkOpponentHandleTrainerThrow, - LinkOpponentHandleTrainerSlide, - LinkOpponentHandleTrainerSlideBack, - LinkOpponentHandlecmd10, - LinkOpponentHandlecmd11, - LinkOpponentHandlecmd12, - LinkOpponentHandleBallThrow, - LinkOpponentHandlePuase, - LinkOpponentHandleMoveAnimation, - LinkOpponentHandlePrintString, - LinkOpponentHandlePrintStringPlayerOnly, - LinkOpponentHandlecmd18, - LinkOpponentHandlecmd19, - LinkOpponentHandlecmd20, - LinkOpponentHandleOpenBag, - LinkOpponentHandlecmd22, - LinkOpponentHandlecmd23, - LinkOpponentHandleHealthBarUpdate, - LinkOpponentHandleExpBarUpdate, - LinkOpponentHandleStatusIconUpdate, - LinkOpponentHandleStatusAnimation, - LinkOpponentHandleStatusXor, - LinkOpponentHandlecmd29, - LinkOpponentHandleDMATransfer, - LinkOpponentHandlecmd31, - LinkOpponentHandlecmd32, - LinkOpponentHandlecmd33, - LinkOpponentHandlecmd34, - LinkOpponentHandlecmd35, - LinkOpponentHandlecmd36, - LinkOpponentHandlecmd37, - LinkOpponentHandlecmd38, - LinkOpponentHandlecmd39, - LinkOpponentHandlecmd40, - LinkOpponentHandleHitAnimation, - LinkOpponentHandlecmd42, - LinkOpponentHandleEffectivenessSound, - LinkOpponentHandlecmd44, - LinkOpponentHandleFaintingCry, - LinkOpponentHandleIntroSlide, - LinkOpponentHandleTrainerBallThrow, - LinkOpponentHandlecmd48, - LinkOpponentHandlecmd49, - LinkOpponentHandlecmd50, - LinkOpponentHandleSpriteInvisibility, - LinkOpponentHandleBattleAnimation, - LinkOpponentHandleLinkStandbyMsg, - LinkOpponentHandleResetActionMoveSelection, - LinkOpponentHandlecmd55, - LinkOpponentHandlecmd56 -}; - -// code - -void nullsub_47(void) -{ -} - -void SetBankFuncToLinkOpponentBufferRunCommand(void) -{ - gBattleBankFunc[gActiveBank] = sub_803752C; -} - -void sub_803752C(void) -{ - if (gBattleExecBuffer & gBitTable[gActiveBank]) - { - if (gBattleBufferA[gActiveBank][0] <= 0x38) - gLinkOpponentBufferCommands[gBattleBufferA[gActiveBank][0]](); - else - LinkOpponentBufferExecCompleted(); - } -} - -void sub_803757C(void) -{ - if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy) - LinkOpponentBufferExecCompleted(); -} - -void sub_80375B4(void) -{ - if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy) - { - sub_8031B74(gSprites[gObjectBankIDs[gActiveBank]].oam.affineParam); - gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum = gSprites[gObjectBankIDs[gActiveBank]].data5; - FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); - DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); - LinkOpponentBufferExecCompleted(); - } -} - -void sub_8037644(void) -{ - if ((--ewram17810[gActiveBank].unk9) == 0xFF) - { - ewram17810[gActiveBank].unk9 = 0; - LinkOpponentBufferExecCompleted(); - } -} - -void sub_8037680(void) -{ - bool8 r6 = FALSE; - - if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI))) - { - if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy) - r6 = TRUE; - } - else - { - if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy - && gSprites[gHealthboxIDs[gActiveBank ^ 2]].callback == SpriteCallbackDummy) - r6 = TRUE; - } - if (IsCryPlayingOrClearCrySongs()) - r6 = FALSE; - - if (r6) - { - if (GetBankIdentity(gActiveBank) == 1) - { - if (!ewram17810[gActiveBank].unk1_0 || !ewram17810[gActiveBank ^ 2].unk1_0) - return; - ewram17810[gActiveBank].unk0_7 = 0; - ewram17810[gActiveBank].unk1_0 = 0; - ewram17810[gActiveBank ^ 2].unk0_7 = 0; - ewram17810[gActiveBank ^ 2].unk1_0 = 0; - FreeSpriteTilesByTag(0x27F9); - FreeSpritePaletteByTag(0x27F9); - } - if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - { - if (GetBankIdentity(gActiveBank) == 1) - m4aMPlayContinue(&gMPlay_BGM); - } - else - { - m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 256); - } - ewram17810[gActiveBank].unk9 = 3; - gBattleBankFunc[gActiveBank] = sub_8037644; - } -} - -void sub_8037840(void) -{ - if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7) - sub_8141828(gActiveBank, &gEnemyParty[gBattlePartyID[gActiveBank]]); - if (!ewram17810[gActiveBank ^ 2].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_7) - sub_8141828(gActiveBank ^ 2, &gEnemyParty[gBattlePartyID[gActiveBank ^ 2]]); - if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_3) - { - if ((gBattleTypeFlags & BATTLE_TYPE_MULTI) && GetBankIdentity(gActiveBank) == 3) - { - if (++ewram17810[gActiveBank].unk9 == 1) - return; - ewram17810[gActiveBank].unk9 = 0; - } - if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) - { - DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank ^ 2]]); - sub_8045A5C( - gHealthboxIDs[gActiveBank ^ 2], - &gEnemyParty[gBattlePartyID[gActiveBank ^ 2]], - 0); - sub_804777C(gActiveBank ^ 2); - sub_8043DFC(gHealthboxIDs[gActiveBank ^ 2]); - sub_8032984( - gActiveBank ^ 2, - GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank ^ 2]], MON_DATA_SPECIES)); - } - DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]); - sub_8045A5C( - gHealthboxIDs[gActiveBank], - &gEnemyParty[gBattlePartyID[gActiveBank]], - 0); - sub_804777C(gActiveBank); - sub_8043DFC(gHealthboxIDs[gActiveBank]); - sub_8032984( - gActiveBank, - GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES)); - - ewram17840.unk9_0 = 0; - gBattleBankFunc[gActiveBank] = sub_8037680; - } -} - -void sub_8037A74(void) -{ - if (gSprites[gObjectBankIDs[gActiveBank]].animEnded == TRUE - && gSprites[gObjectBankIDs[gActiveBank]].pos2.x == 0) - { - if (!ewram17810[gActiveBank].unk0_7) - { - sub_8141828(gActiveBank, &gEnemyParty[gBattlePartyID[gActiveBank]]); - return; - } - if (ewram17810[gActiveBank].unk1_0) - { - ewram17810[gActiveBank].unk0_7 = 0; - ewram17810[gActiveBank].unk1_0 = 0; - FreeSpriteTilesByTag(0x27F9); - FreeSpritePaletteByTag(0x27F9); - LinkOpponentBufferExecCompleted(); - return; - } - } -} - -void sub_8037B24(void) -{ - s16 r4 = sub_8045C78(gActiveBank, gHealthboxIDs[gActiveBank], 0, 0); - - sub_8043DFC(gHealthboxIDs[gActiveBank]); - if (r4 != -1) - sub_80440EC(gHealthboxIDs[gActiveBank], r4, 0); - else - LinkOpponentBufferExecCompleted(); -} - -void sub_8037B78(void) -{ - if (!gSprites[gObjectBankIDs[gActiveBank]].inUse) - { - sub_8043DB0(gHealthboxIDs[gActiveBank]); - LinkOpponentBufferExecCompleted(); - } -} - -void sub_8037BBC(void) -{ - if (!ewram17810[gActiveBank].unk0_6) - { - FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); - DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); - sub_8032A08(gActiveBank); - sub_8043DB0(gHealthboxIDs[gActiveBank]); - LinkOpponentBufferExecCompleted(); - } -} - -void sub_8037C2C(void) -{ - if (gUnknown_03004210.state == 0) - LinkOpponentBufferExecCompleted(); -} - -void dp01t_0F_4_move_anim(void) -{ - u8 spriteId = gObjectBankIDs[gActiveBank]; - - if (gSprites[spriteId].data1 == 32) - { - gSprites[spriteId].data1 = 0; - gSprites[spriteId].invisible = FALSE; - gDoingBattleAnim = 0; - LinkOpponentBufferExecCompleted(); - } - else - { - if (((u16)gSprites[spriteId].data1 % 4) == 0) - gSprites[spriteId].invisible ^= 1; - gSprites[spriteId].data1++; - } -} - -void sub_8037CC0(void) -{ - if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy) - { - if (ewram17800[gActiveBank].substituteSprite) - move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); - gBattleBankFunc[gActiveBank] = sub_8037D2C; - } -} - -void sub_8037D2C(void) -{ - if (!ewram17810[gActiveBank].unk0_6) - { - CreateTask(c3_0802FDF4, 10); - LinkOpponentBufferExecCompleted(); - } -} - -void sub_8037D64(void) -{ - if (ewram17810[gActiveBank].unk1_0) - { - ewram17810[gActiveBank].unk0_7 = 0; - ewram17810[gActiveBank].unk1_0 = 0; - FreeSpriteTilesByTag(0x27F9); - FreeSpritePaletteByTag(0x27F9); - StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 0); - sub_8045A5C( - gHealthboxIDs[gActiveBank], - &gEnemyParty[gBattlePartyID[gActiveBank]], - 0); - sub_804777C(gActiveBank); - sub_8043DFC(gHealthboxIDs[gActiveBank]); - sub_8031F88(gActiveBank); - gBattleBankFunc[gActiveBank] = sub_8037CC0; - } -} - -void sub_8037E30(void) -{ - if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7) - sub_8141828(gActiveBank, &gEnemyParty[gBattlePartyID[gActiveBank]]); - if (gSprites[gUnknown_0300434C[gActiveBank]].callback == SpriteCallbackDummy - && !ewram17810[gActiveBank].unk0_3) - { - DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]); - sub_8032984(gActiveBank, GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES)); - gBattleBankFunc[gActiveBank] = sub_8037D64; - } -} - -void sub_8037EF0(void) -{ - if (gReceivedRemoteLinkPlayers == 0) - { - m4aSongNumStop(SE_HINSI); - gMain.inBattle = FALSE; - gMain.callback1 = gPreBattleCallback1; - SetMainCallback2(c2_8011A1C); - } -} - -void sub_8037F34(void) -{ - if (!gPaletteFade.active) - { - if (gBattleTypeFlags & BATTLE_TYPE_LINK) - { - sub_800832C(); - gBattleBankFunc[gActiveBank] = sub_8037EF0; - } - else - { - m4aSongNumStop(SE_HINSI); - gMain.inBattle = FALSE; - gMain.callback1 = gPreBattleCallback1; - SetMainCallback2(gMain.savedCallback); - } - } -} - -void sub_8037FAC(void) -{ - if (!ewram17810[gActiveBank].unk0_4) - LinkOpponentBufferExecCompleted(); -} - -void sub_8037FD8(void) -{ - if (!ewram17810[gActiveBank].unk0_5) - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentBufferExecCompleted(void) -{ - gBattleBankFunc[gActiveBank] = sub_803752C; - if (gBattleTypeFlags & BATTLE_TYPE_LINK) - { - u8 playerId = GetMultiplayerId(); - - PrepareBufferDataTransferLink(2, 4, &playerId); - gBattleBufferA[gActiveBank][0] = 0x38; - } - else - { - gBattleExecBuffer &= ~gBitTable[gActiveBank]; - } -} - -void LinkOpponentHandleGetAttributes(void) -{ - u8 buffer[0x100]; - u32 r6 = 0; - u8 r4; - s32 i; - - if (gBattleBufferA[gActiveBank][2] == 0) - { - r6 = dp01_getattr_by_ch1_for_player_pokemon__(gBattlePartyID[gActiveBank], buffer); - } - else - { - r4 = gBattleBufferA[gActiveBank][2]; - for (i = 0; i < 6; i++) - { - if (r4 & 1) - r6 += dp01_getattr_by_ch1_for_player_pokemon__(i, buffer + r6); - r4 >>= 1; - } - } - Emitcmd29(1, r6, buffer); - LinkOpponentBufferExecCompleted(); -} - -u32 dp01_getattr_by_ch1_for_player_pokemon__(u8 a, u8 *buffer) -{ - struct BattlePokemon battlePokemon; - struct UnknownStruct3 moveData; - u8 nickname[20]; - u8 *src; - s16 data16; - u32 data32; - s32 size = 0; - - switch (gBattleBufferA[gActiveBank][1]) - { - case 0: - battlePokemon.species = GetMonData(&gEnemyParty[a], MON_DATA_SPECIES); - battlePokemon.item = GetMonData(&gEnemyParty[a], MON_DATA_HELD_ITEM); - for (size = 0; size < 4; size++) - { - battlePokemon.moves[size] = GetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + size); - battlePokemon.pp[size] = GetMonData(&gEnemyParty[a], MON_DATA_PP1 + size); - } - battlePokemon.ppBonuses = GetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES); - battlePokemon.friendship = GetMonData(&gEnemyParty[a], MON_DATA_FRIENDSHIP); - battlePokemon.experience = GetMonData(&gEnemyParty[a], MON_DATA_EXP); - battlePokemon.hpIV = GetMonData(&gEnemyParty[a], MON_DATA_HP_IV); - battlePokemon.attackIV = GetMonData(&gEnemyParty[a], MON_DATA_ATK_IV); - battlePokemon.defenseIV = GetMonData(&gEnemyParty[a], MON_DATA_DEF_IV); - battlePokemon.speedIV = GetMonData(&gEnemyParty[a], MON_DATA_SPD_IV); - battlePokemon.spAttackIV = GetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV); - battlePokemon.spDefenseIV = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV); - battlePokemon.personality = GetMonData(&gEnemyParty[a], MON_DATA_PERSONALITY); - battlePokemon.status1 = GetMonData(&gEnemyParty[a], MON_DATA_STATUS); - battlePokemon.level = GetMonData(&gEnemyParty[a], MON_DATA_LEVEL); - battlePokemon.hp = GetMonData(&gEnemyParty[a], MON_DATA_HP); - battlePokemon.maxHP = GetMonData(&gEnemyParty[a], MON_DATA_MAX_HP); - battlePokemon.attack = GetMonData(&gEnemyParty[a], MON_DATA_ATK); - battlePokemon.defense = GetMonData(&gEnemyParty[a], MON_DATA_DEF); - battlePokemon.speed = GetMonData(&gEnemyParty[a], MON_DATA_SPD); - battlePokemon.spAttack = GetMonData(&gEnemyParty[a], MON_DATA_SPATK); - battlePokemon.spDefense = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF); - battlePokemon.isEgg = GetMonData(&gEnemyParty[a], MON_DATA_IS_EGG); - battlePokemon.altAbility = GetMonData(&gEnemyParty[a], MON_DATA_ALT_ABILITY); - battlePokemon.otId = GetMonData(&gEnemyParty[a], MON_DATA_OT_ID); - GetMonData(&gEnemyParty[a], MON_DATA_NICKNAME, nickname); - StringCopy10(battlePokemon.nickname, nickname); - GetMonData(&gEnemyParty[a], MON_DATA_OT_NAME, battlePokemon.otName); - src = (u8 *)&battlePokemon; - for (size = 0; size < sizeof(battlePokemon); size++) - buffer[size] = src[size]; - break; - case 1: - data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPECIES); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 2: - data16 = GetMonData(&gEnemyParty[a], MON_DATA_HELD_ITEM); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 3: - for (size = 0; size < 4; size++) - { - moveData.moves[size] = GetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + size); - moveData.pp[size] = GetMonData(&gEnemyParty[a], MON_DATA_PP1 + size); - } - moveData.ppBonuses = GetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES); - src = (u8 *)&moveData; - for (size = 0; size < sizeof(moveData); size++) - buffer[size] = src[size]; - break; - case 4: - case 5: - case 6: - case 7: - data16 = GetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - 4); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 8: - for (size = 0; size < 4; size++) - buffer[size] = GetMonData(&gEnemyParty[a], MON_DATA_PP1 + size); - buffer[size] = GetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES); - size++; - break; - case 9: - case 10: - case 11: - case 12: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - 9); - size = 1; - break; - case 17: - data32 = GetMonData(&gEnemyParty[a], MON_DATA_OT_ID); - buffer[0] = (data32 & 0x000000FF); - buffer[1] = (data32 & 0x0000FF00) >> 8; - buffer[2] = (data32 & 0x00FF0000) >> 16; - size = 3; - break; - case 18: - data32 = GetMonData(&gEnemyParty[a], MON_DATA_EXP); - buffer[0] = (data32 & 0x000000FF); - buffer[1] = (data32 & 0x0000FF00) >> 8; - buffer[2] = (data32 & 0x00FF0000) >> 16; - size = 3; - break; - case 19: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_HP_EV); - size = 1; - break; - case 20: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_ATK_EV); - size = 1; - break; - case 21: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_DEF_EV); - size = 1; - break; - case 22: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPD_EV); - size = 1; - break; - case 23: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPATK_EV); - size = 1; - break; - case 24: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF_EV); - size = 1; - break; - case 25: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_FRIENDSHIP); - size = 1; - break; - case 26: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_POKERUS); - size = 1; - break; - case 27: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_MET_LOCATION); - size = 1; - break; - case 28: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_MET_LEVEL); - size = 1; - break; - case 29: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_MET_GAME); - size = 1; - break; - case 30: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_POKEBALL); - size = 1; - break; - case 31: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_HP_IV); - buffer[1] = GetMonData(&gEnemyParty[a], MON_DATA_ATK_IV); - buffer[2] = GetMonData(&gEnemyParty[a], MON_DATA_DEF_IV); - buffer[3] = GetMonData(&gEnemyParty[a], MON_DATA_SPD_IV); - buffer[4] = GetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV); - buffer[5] = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV); - size = 6; - break; - case 32: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_HP_IV); - size = 1; - break; - case 33: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_ATK_IV); - size = 1; - break; - case 34: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_DEF_IV); - size = 1; - break; - case 35: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPD_IV); - size = 1; - break; - case 36: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV); - size = 1; - break; - case 37: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV); - size = 1; - break; - case 38: - data32 = GetMonData(&gEnemyParty[a], MON_DATA_PERSONALITY); - buffer[0] = (data32 & 0x000000FF); - buffer[1] = (data32 & 0x0000FF00) >> 8; - buffer[2] = (data32 & 0x00FF0000) >> 16; - buffer[3] = (data32 & 0xFF000000) >> 24; - size = 4; - break; - case 39: - data16 = GetMonData(&gEnemyParty[a], MON_DATA_CHECKSUM); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 40: - data32 = GetMonData(&gEnemyParty[a], MON_DATA_STATUS); - buffer[0] = (data32 & 0x000000FF); - buffer[1] = (data32 & 0x0000FF00) >> 8; - buffer[2] = (data32 & 0x00FF0000) >> 16; - buffer[3] = (data32 & 0xFF000000) >> 24; - size = 4; - break; - case 41: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_LEVEL); - size = 1; - break; - case 42: - data16 = GetMonData(&gEnemyParty[a], MON_DATA_HP); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 43: - data16 = GetMonData(&gEnemyParty[a], MON_DATA_MAX_HP); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 44: - data16 = GetMonData(&gEnemyParty[a], MON_DATA_ATK); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 45: - data16 = GetMonData(&gEnemyParty[a], MON_DATA_DEF); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 46: - data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPD); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 47: - data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPATK); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 48: - data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF); - buffer[0] = data16; - buffer[1] = data16 >> 8; - size = 2; - break; - case 49: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_COOL); - size = 1; - break; - case 50: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_BEAUTY); - size = 1; - break; - case 51: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_CUTE); - size = 1; - break; - case 52: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SMART); - size = 1; - break; - case 53: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_TOUGH); - size = 1; - break; - case 54: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SHEEN); - size = 1; - break; - case 55: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_COOL_RIBBON); - size = 1; - break; - case 56: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_BEAUTY_RIBBON); - size = 1; - break; - case 57: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_CUTE_RIBBON); - size = 1; - break; - case 58: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SMART_RIBBON); - size = 1; - break; - case 59: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_TOUGH_RIBBON); - size = 1; - break; - } - return size; -} - -void LinkOpponentHandlecmd1(void) -{ - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandleSetAttributes(void) -{ - u8 i; - u8 r4; - - if (gBattleBufferA[gActiveBank][2] == 0) - { - sub_8038900(gBattlePartyID[gActiveBank]); - } - else - { - r4 = gBattleBufferA[gActiveBank][2]; - for (i = 0; i < 6; i++) - { - if (r4 & 1) - sub_8038900(i); - r4 >>= 1; - } - } - LinkOpponentBufferExecCompleted(); -} - -void sub_8038900(u8 a) -{ - struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBank][3]; - struct UnknownStruct3 *moveData = (struct UnknownStruct3 *)&gBattleBufferA[gActiveBank][3]; - s32 i; - - switch (gBattleBufferA[gActiveBank][1]) - { - case 0: - { - u8 iv; - - SetMonData(&gEnemyParty[a], MON_DATA_SPECIES, (u8 *)&battlePokemon->species); - SetMonData(&gEnemyParty[a], MON_DATA_HELD_ITEM, (u8 *)&battlePokemon->item); - for (i = 0; i < 4; i++) - { - SetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + i, (u8 *)&battlePokemon->moves[i]); - SetMonData(&gEnemyParty[a], MON_DATA_PP1 + i, (u8 *)&battlePokemon->pp[i]); - } - SetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES, (u8 *)&battlePokemon->ppBonuses); - SetMonData(&gEnemyParty[a], MON_DATA_FRIENDSHIP, (u8 *)&battlePokemon->friendship); - SetMonData(&gEnemyParty[a], MON_DATA_EXP, (u8 *)&battlePokemon->experience); - iv = battlePokemon->hpIV; - SetMonData(&gEnemyParty[a], MON_DATA_HP_IV, (u8 *)&iv); - iv = battlePokemon->attackIV; - SetMonData(&gEnemyParty[a], MON_DATA_ATK_IV, (u8 *)&iv); - iv = battlePokemon->defenseIV; - SetMonData(&gEnemyParty[a], MON_DATA_DEF_IV, (u8 *)&iv); - iv = battlePokemon->speedIV; - SetMonData(&gEnemyParty[a], MON_DATA_SPD_IV, (u8 *)&iv); - iv = battlePokemon->spAttackIV; - SetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV, (u8 *)&iv); - iv = battlePokemon->spDefenseIV; - SetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV, (u8 *)&iv); - SetMonData(&gEnemyParty[a], MON_DATA_PERSONALITY, (u8 *)&battlePokemon->personality); - SetMonData(&gEnemyParty[a], MON_DATA_STATUS, (u8 *)&battlePokemon->status1); - SetMonData(&gEnemyParty[a], MON_DATA_LEVEL, (u8 *)&battlePokemon->level); - SetMonData(&gEnemyParty[a], MON_DATA_HP, (u8 *)&battlePokemon->hp); - SetMonData(&gEnemyParty[a], MON_DATA_MAX_HP, (u8 *)&battlePokemon->maxHP); - SetMonData(&gEnemyParty[a], MON_DATA_ATK, (u8 *)&battlePokemon->attack); - SetMonData(&gEnemyParty[a], MON_DATA_DEF, (u8 *)&battlePokemon->defense); - SetMonData(&gEnemyParty[a], MON_DATA_SPD, (u8 *)&battlePokemon->speed); - SetMonData(&gEnemyParty[a], MON_DATA_SPATK, (u8 *)&battlePokemon->spAttack); - SetMonData(&gEnemyParty[a], MON_DATA_SPDEF, (u8 *)&battlePokemon->spDefense); - } - break; - case 1: - SetMonData(&gEnemyParty[a], MON_DATA_SPECIES, &gBattleBufferA[gActiveBank][3]); - break; - case 2: - SetMonData(&gEnemyParty[a], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBank][3]); - break; - case 3: - for (i = 0; i < 4; i++) - { - SetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + i, (u8 *)&moveData->moves[i]); - SetMonData(&gEnemyParty[a], MON_DATA_PP1 + i, (u8 *)&moveData->pp[i]); - } - SetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES, &moveData->ppBonuses); - break; - case 4: - case 5: - case 6: - case 7: - SetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - 4, &gBattleBufferA[gActiveBank][3]); - break; - case 8: - SetMonData(&gEnemyParty[a], MON_DATA_PP1, &gBattleBufferA[gActiveBank][3]); - SetMonData(&gEnemyParty[a], MON_DATA_PP2, &gBattleBufferA[gActiveBank][4]); - SetMonData(&gEnemyParty[a], MON_DATA_PP3, &gBattleBufferA[gActiveBank][5]); - SetMonData(&gEnemyParty[a], MON_DATA_PP4, &gBattleBufferA[gActiveBank][6]); - SetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBank][7]); - break; - case 9: - case 10: - case 11: - case 12: - SetMonData(&gEnemyParty[a], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - 9, &gBattleBufferA[gActiveBank][3]); - break; - case 17: - SetMonData(&gEnemyParty[a], MON_DATA_OT_ID, &gBattleBufferA[gActiveBank][3]); - break; - case 18: - SetMonData(&gEnemyParty[a], MON_DATA_EXP, &gBattleBufferA[gActiveBank][3]); - break; - case 19: - SetMonData(&gEnemyParty[a], MON_DATA_HP_EV, &gBattleBufferA[gActiveBank][3]); - break; - case 20: - SetMonData(&gEnemyParty[a], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBank][3]); - break; - case 21: - SetMonData(&gEnemyParty[a], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBank][3]); - break; - case 22: - SetMonData(&gEnemyParty[a], MON_DATA_SPD_EV, &gBattleBufferA[gActiveBank][3]); - break; - case 23: - SetMonData(&gEnemyParty[a], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBank][3]); - break; - case 24: - SetMonData(&gEnemyParty[a], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBank][3]); - break; - case 25: - SetMonData(&gEnemyParty[a], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBank][3]); - break; - case 26: - SetMonData(&gEnemyParty[a], MON_DATA_POKERUS, &gBattleBufferA[gActiveBank][3]); - break; - case 27: - SetMonData(&gEnemyParty[a], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBank][3]); - break; - case 28: - SetMonData(&gEnemyParty[a], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBank][3]); - break; - case 29: - SetMonData(&gEnemyParty[a], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBank][3]); - break; - case 30: - SetMonData(&gEnemyParty[a], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBank][3]); - break; - case 31: - SetMonData(&gEnemyParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]); - SetMonData(&gEnemyParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][4]); - SetMonData(&gEnemyParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][5]); - SetMonData(&gEnemyParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][6]); - SetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][7]); - SetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][8]); - break; - case 32: - SetMonData(&gEnemyParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]); - break; - case 33: - SetMonData(&gEnemyParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][3]); - break; - case 34: - SetMonData(&gEnemyParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][3]); - break; - case 35: - SetMonData(&gEnemyParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][3]); - break; - case 36: - SetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][3]); - break; - case 37: - SetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][3]); - break; - case 38: - SetMonData(&gEnemyParty[a], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBank][3]); - break; - case 39: - SetMonData(&gEnemyParty[a], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBank][3]); - break; - case 40: - SetMonData(&gEnemyParty[a], MON_DATA_STATUS, &gBattleBufferA[gActiveBank][3]); - break; - case 41: - SetMonData(&gEnemyParty[a], MON_DATA_LEVEL, &gBattleBufferA[gActiveBank][3]); - break; - case 42: - SetMonData(&gEnemyParty[a], MON_DATA_HP, &gBattleBufferA[gActiveBank][3]); - break; - case 43: - SetMonData(&gEnemyParty[a], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBank][3]); - break; - case 44: - SetMonData(&gEnemyParty[a], MON_DATA_ATK, &gBattleBufferA[gActiveBank][3]); - break; - case 45: - SetMonData(&gEnemyParty[a], MON_DATA_DEF, &gBattleBufferA[gActiveBank][3]); - break; - case 46: - SetMonData(&gEnemyParty[a], MON_DATA_SPD, &gBattleBufferA[gActiveBank][3]); - break; - case 47: - SetMonData(&gEnemyParty[a], MON_DATA_SPATK, &gBattleBufferA[gActiveBank][3]); - break; - case 48: - SetMonData(&gEnemyParty[a], MON_DATA_SPDEF, &gBattleBufferA[gActiveBank][3]); - break; - case 49: - SetMonData(&gEnemyParty[a], MON_DATA_COOL, &gBattleBufferA[gActiveBank][3]); - break; - case 50: - SetMonData(&gEnemyParty[a], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBank][3]); - break; - case 51: - SetMonData(&gEnemyParty[a], MON_DATA_CUTE, &gBattleBufferA[gActiveBank][3]); - break; - case 52: - SetMonData(&gEnemyParty[a], MON_DATA_SMART, &gBattleBufferA[gActiveBank][3]); - break; - case 53: - SetMonData(&gEnemyParty[a], MON_DATA_TOUGH, &gBattleBufferA[gActiveBank][3]); - break; - case 54: - SetMonData(&gEnemyParty[a], MON_DATA_SHEEN, &gBattleBufferA[gActiveBank][3]); - break; - case 55: - SetMonData(&gEnemyParty[a], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBank][3]); - break; - case 56: - SetMonData(&gEnemyParty[a], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBank][3]); - break; - case 57: - SetMonData(&gEnemyParty[a], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBank][3]); - break; - case 58: - SetMonData(&gEnemyParty[a], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBank][3]); - break; - case 59: - SetMonData(&gEnemyParty[a], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBank][3]); - break; - } -} - -void LinkOpponentHandlecmd3(void) -{ - u8 *dst; - u8 i; - - dst = (u8 *)&gEnemyParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1]; - for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++) - dst[i] = gBattleBufferA[gActiveBank][3 + i]; - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandleLoadPokeSprite(void) -{ - u16 species = GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES); - - BattleLoadOpponentMonSprite(&gEnemyParty[gBattlePartyID[gActiveBank]], gActiveBank); - GetMonSpriteTemplate_803C56C(species, GetBankIdentity(gActiveBank)); - gObjectBankIDs[gActiveBank] = CreateSprite( - &gUnknown_02024E8C, - sub_8077ABC(gActiveBank, 2), - sub_8077F68(gActiveBank), - sub_8079E90(gActiveBank)); - gSprites[gObjectBankIDs[gActiveBank]].pos2.x = -240; - gSprites[gObjectBankIDs[gActiveBank]].data0 = gActiveBank; - gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank; - StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], gBattleMonForms[gActiveBank]); - sub_8032984(gActiveBank, GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES)); - gBattleBankFunc[gActiveBank] = sub_8037A74; -} - -void LinkOpponentHandleSendOutPoke(void) -{ - gBattlePartyID[gActiveBank] = gBattleBufferA[gActiveBank][1]; - sub_8039430(gActiveBank, gBattleBufferA[gActiveBank][2]); - gBattleBankFunc[gActiveBank] = sub_8037E30; -} - -void sub_8039430(u8 a, u8 b) -{ - u16 species; - - sub_8032AA8(a, b); - gBattlePartyID[a] = gBattleBufferA[a][1]; - species = GetMonData(&gEnemyParty[gBattlePartyID[a]], MON_DATA_SPECIES); - gUnknown_0300434C[a] = CreateInvisibleSpriteWithCallback(sub_80312F0); - BattleLoadOpponentMonSprite(&gEnemyParty[gBattlePartyID[a]], a); - GetMonSpriteTemplate_803C56C(species, GetBankIdentity(a)); - gObjectBankIDs[a] = CreateSprite( - &gUnknown_02024E8C, - sub_8077ABC(a, 2), - sub_8077F68(a), - sub_8079E90(a)); - gSprites[gUnknown_0300434C[a]].data1 = gObjectBankIDs[a]; - gSprites[gObjectBankIDs[a]].data0 = a; - gSprites[gObjectBankIDs[a]].data2 = species; - gSprites[gObjectBankIDs[a]].oam.paletteNum = a; - StartSpriteAnim(&gSprites[gObjectBankIDs[a]], gBattleMonForms[a]); - gSprites[gObjectBankIDs[a]].invisible = TRUE; - gSprites[gObjectBankIDs[a]].callback = SpriteCallbackDummy; - gSprites[gUnknown_0300434C[a]].data0 = sub_8046400(0, 0xFE); -} - -void LinkOpponentHandleReturnPokeToBall(void) -{ - if (gBattleBufferA[gActiveBank][1] == 0) - { - ewram17810[gActiveBank].unk4 = 0; - gBattleBankFunc[gActiveBank] = sub_8039648; - } - else - { - FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); - DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); - sub_8032A08(gActiveBank); - sub_8043DB0(gHealthboxIDs[gActiveBank]); - LinkOpponentBufferExecCompleted(); - } -} - -void sub_8039648(void) -{ - switch (ewram17810[gActiveBank].unk4) - { - case 0: - if (ewram17800[gActiveBank].substituteSprite) - move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); - ewram17810[gActiveBank].unk4 = 1; - break; - case 1: - if (!ewram17810[gActiveBank].unk0_6) - { - ewram17810[gActiveBank].unk4 = 0; - move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 2); - gBattleBankFunc[gActiveBank] = sub_8037BBC; - } - break; - } -} - -void LinkOpponentHandleTrainerThrow(void) -{ - s16 xOffset; - u32 gender; - - if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - { - if (GetBankIdentity(gActiveBank) & 2) - xOffset = -16; - else - xOffset = 16; - gender = gLinkPlayers[sub_803FC34(gActiveBank)].gender; - } - else - { - xOffset = 0; - gender = gLinkPlayers[GetMultiplayerId() ^ 1].gender; - } - sub_8031A6C(gender, gActiveBank); - GetMonSpriteTemplate_803C5A0(gender, GetBankIdentity(gActiveBank)); - gObjectBankIDs[gActiveBank] = CreateSprite( - &gUnknown_02024E8C, - 176 + xOffset, 40 + 4 * (8 - gTrainerFrontPicCoords[gender].coords), - sub_8079E90(gActiveBank)); - gSprites[gObjectBankIDs[gActiveBank]].pos2.x = -240; - gSprites[gObjectBankIDs[gActiveBank]].data0 = 2; - gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[gender].tag); - gSprites[gObjectBankIDs[gActiveBank]].data5 = gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum; - gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[gender].tag); - gSprites[gObjectBankIDs[gActiveBank]].oam.affineParam = gender; - gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0; - gBattleBankFunc[gActiveBank] = sub_803757C; -} - -void LinkOpponentHandleTrainerSlide(void) -{ - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandleTrainerSlideBack(void) -{ - oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]); - gSprites[gObjectBankIDs[gActiveBank]].data0 = 35; - gSprites[gObjectBankIDs[gActiveBank]].data2 = 280; - gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; - gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34; - oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], SpriteCallbackDummy); - gBattleBankFunc[gActiveBank] = sub_80375B4; -} - -void LinkOpponentHandlecmd10(void) -{ - if (ewram17810[gActiveBank].unk4 == 0) - { - if (ewram17800[gActiveBank].substituteSprite) - move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); - ewram17810[gActiveBank].unk4++; - } - else if (!ewram17810[gActiveBank].unk0_6) - { - ewram17810[gActiveBank].unk4 = 0; - PlaySE12WithPanning(SE_POKE_DEAD, 63); - gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8010384; - gBattleBankFunc[gActiveBank] = sub_8037B78; - } -} - -void LinkOpponentHandlecmd11(void) -{ - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandlecmd12(void) -{ - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandleBallThrow(void) -{ - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandlePuase(void) -{ - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandleMoveAnimation(void) -{ - if (!mplay_80342A4(gActiveBank)) - { - u32 r0 = gBattleBufferA[gActiveBank][1] - | (gBattleBufferA[gActiveBank][2] << 8); - - gUnknown_0202F7C4 = gBattleBufferA[gActiveBank][3]; - gMovePowerMoveAnim = gBattleBufferA[gActiveBank][4] - | (gBattleBufferA[gActiveBank][5] << 8); - gMoveDmgMoveAnim = gBattleBufferA[gActiveBank][6] - | (gBattleBufferA[gActiveBank][7] << 8) - | (gBattleBufferA[gActiveBank][8] << 16) - | (gBattleBufferA[gActiveBank][9] << 24); - gHappinessMoveAnim = gBattleBufferA[gActiveBank][10]; - gWeatherMoveAnim = gBattleBufferA[gActiveBank][12] - | (gBattleBufferA[gActiveBank][13] << 8); - gDisableStructMoveAnim = (u32 *)&gBattleBufferA[gActiveBank][16]; - gPID_perBank[gActiveBank] = *gDisableStructMoveAnim; - - // Dead code. sub_8031720 always returns 0. - if (sub_8031720(r0, gUnknown_0202F7C4) != 0) - { - LinkOpponentBufferExecCompleted(); - } - else - { - ewram17810[gActiveBank].unk4 = 0; - gBattleBankFunc[gActiveBank] = sub_8039B64; - } - } -} - -void sub_8039B64(void) -{ - u16 r4 = gBattleBufferA[gActiveBank][1] - | (gBattleBufferA[gActiveBank][2] << 8); - u8 r7 = gBattleBufferA[gActiveBank][11]; - - switch (ewram17810[gActiveBank].unk4) - { - case 0: - if (ewram17800[gActiveBank].substituteSprite && !ewram17800[gActiveBank].unk0_3) - { - ewram17800[gActiveBank].unk0_3 = 1; - move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); - } - ewram17810[gActiveBank].unk4 = 1; - break; - case 1: - if (!ewram17810[gActiveBank].unk0_6) - { - sub_80326EC(0); - ExecuteMoveAnim(r4); - ewram17810[gActiveBank].unk4 = 2; - } - break; - case 2: - gAnimScriptCallback(); - if (!gAnimScriptActive) - { - sub_80326EC(1); - if ((ewram17800[gActiveBank].substituteSprite) && r7 <= 1) - { - move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); - ewram17800[gActiveBank].unk0_3 = 0; - } - ewram17810[gActiveBank].unk4 = 3; - } - break; - case 3: - if (!ewram17810[gActiveBank].unk0_6) - { - sub_8031F24(); - sub_80324BC( - gActiveBank, - gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8)); - ewram17810[gActiveBank].unk4 = 0; - LinkOpponentBufferExecCompleted(); - } - break; - } -} - -void LinkOpponentHandlePrintString(void) -{ - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; - BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]); - sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); - gBattleBankFunc[gActiveBank] = sub_8037C2C; -} - -void LinkOpponentHandlePrintStringPlayerOnly(void) -{ - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandlecmd18(void) -{ - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandlecmd19(void) -{ - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandlecmd20(void) -{ - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandleOpenBag(void) -{ - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandlecmd22(void) -{ - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandlecmd23(void) -{ - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandleHealthBarUpdate(void) -{ - s16 r7; - - load_gfxc_health_bar(0); - r7 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); - if (r7 != 0x7FFF) - { - u32 maxHP = GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP); - u32 hp = GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_HP); - - sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, hp, r7); - } - else - { - u32 maxHP = GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP); - - sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, 0, r7); - } - gBattleBankFunc[gActiveBank] = sub_8037B24; -} - -void LinkOpponentHandleExpBarUpdate(void) -{ - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandleStatusIconUpdate(void) -{ - if (mplay_80342A4(gActiveBank) == 0) - { - sub_8045A5C(gHealthboxIDs[gActiveBank], &gEnemyParty[gBattlePartyID[gActiveBank]], 9); - ewram17810[gActiveBank].unk0_4 = 0; - gBattleBankFunc[gActiveBank] = sub_8037FAC; - } -} - -void LinkOpponentHandleStatusAnimation(void) -{ - if (mplay_80342A4(gActiveBank) == 0) - { - move_anim_start_t2_for_situation( - gBattleBufferA[gActiveBank][1], - gBattleBufferA[gActiveBank][2] - | (gBattleBufferA[gActiveBank][3] << 8) - | (gBattleBufferA[gActiveBank][4] << 16) - | (gBattleBufferA[gActiveBank][5] << 24)); - gBattleBankFunc[gActiveBank] = sub_8037FAC; - } -} - -void LinkOpponentHandleStatusXor(void) -{ - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandlecmd29(void) -{ - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandleDMATransfer(void) -{ - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandlecmd31(void) -{ - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandlecmd32(void) -{ - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandlecmd33(void) -{ - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandlecmd34(void) -{ - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandlecmd35(void) -{ - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandlecmd36(void) -{ - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandlecmd37(void) -{ - gUnknown_020238C8.unk0_0 = 0; - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandlecmd38(void) -{ - gUnknown_020238C8.unk0_0 = gBattleBufferA[gActiveBank][1]; - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandlecmd39(void) -{ - gUnknown_020238C8.unk0_7 = 0; - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandlecmd40(void) -{ - gUnknown_020238C8.unk0_7 ^= 1; - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandleHitAnimation(void) -{ - if (gSprites[gObjectBankIDs[gActiveBank]].invisible == TRUE) - { - LinkOpponentBufferExecCompleted(); - } - else - { - gDoingBattleAnim = TRUE; - gSprites[gObjectBankIDs[gActiveBank]].data1 = 0; - sub_8047858(gActiveBank); - gBattleBankFunc[gActiveBank] = dp01t_0F_4_move_anim; - } -} - -void LinkOpponentHandlecmd42(void) -{ - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandleEffectivenessSound(void) -{ - s8 pan; - - if (GetBankSide(gActiveBank) == 0) - pan = -64; - else - pan = 63; - PlaySE12WithPanning(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8), pan); - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandlecmd44(void) -{ - PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8)); - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandleFaintingCry(void) -{ - PlayCry3( - GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES), - 25, 5); - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandleIntroSlide(void) -{ - sub_80E43C0(gBattleBufferA[gActiveBank][1]); - gUnknown_02024DE8 |= 1; - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandleTrainerBallThrow(void) -{ - u8 taskId; - - oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]); - gSprites[gObjectBankIDs[gActiveBank]].data0 = 35; - gSprites[gObjectBankIDs[gActiveBank]].data2 = 280; - gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; - gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34; - oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], sub_803A3A8); - taskId = CreateTask(sub_803A2C4, 5); - gTasks[taskId].data[0] = gActiveBank; - if (ewram17810[gActiveBank].unk0_0) - gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0; - ewram17840.unk9_0 = 1; - gBattleBankFunc[gActiveBank] = nullsub_47; -} - -void sub_803A2C4(u8 taskId) -{ - u8 r9; - - r9 = gActiveBank; - gActiveBank = gTasks[taskId].data[0]; - if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI)) - { - gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; - sub_8039430(gActiveBank, 0); - } - else - { - gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; - sub_8039430(gActiveBank, 0); - gActiveBank ^= 2; - gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; - sub_8039430(gActiveBank, 0); - gActiveBank ^= 2; - } - gBattleBankFunc[gActiveBank] = sub_8037840; - gActiveBank = r9; - DestroyTask(taskId); -} - -void sub_803A3A8(struct Sprite *sprite) -{ - sub_8031B74(sprite->oam.affineParam); - sprite->oam.tileNum = sprite->data5; - FreeSpriteOamMatrix(sprite); - DestroySprite(sprite); -} - -void LinkOpponentHandlecmd48(void) -{ - if (gBattleBufferA[gActiveBank][1] != 0 && GetBankSide(gActiveBank) == 0) - { - LinkOpponentBufferExecCompleted(); - return; - } - - ewram17810[gActiveBank].unk0_0 = 1; - if (gBattleBufferA[gActiveBank][2] != 0) - { - if (ewram17810[gActiveBank].unk1_1 < 2) - { - ewram17810[gActiveBank].unk1_1++; - return; - } - else - { - ewram17810[gActiveBank].unk1_1 = 0; - } - } - gUnknown_02024E68[gActiveBank] = sub_8044804( - gActiveBank, - (struct BattleInterfaceStruct2 *)&gBattleBufferA[gActiveBank][4], - gBattleBufferA[gActiveBank][1], - gBattleBufferA[gActiveBank][2]); - ewram17810[gActiveBank].unk5 = 0; - if (gBattleBufferA[gActiveBank][2] != 0) - ewram17810[gActiveBank].unk5 = 0x5D; - gBattleBankFunc[gActiveBank] = sub_803A4E0; -} - -void sub_803A4E0(void) -{ - if (ewram17810[gActiveBank].unk5++ >= 93) - { - ewram17810[gActiveBank].unk5 = 0; - LinkOpponentBufferExecCompleted(); - } -} - -void LinkOpponentHandlecmd49(void) -{ - if (ewram17810[gActiveBank].unk0_0) - gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0; - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandlecmd50(void) -{ - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandleSpriteInvisibility(void) -{ - if (sub_8078874(gActiveBank) != 0) - { - gSprites[gObjectBankIDs[gActiveBank]].invisible = gBattleBufferA[gActiveBank][1]; - sub_8031F88(gActiveBank); - } - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandleBattleAnimation(void) -{ - if (mplay_80342A4(gActiveBank) == 0) - { - u8 r3 = gBattleBufferA[gActiveBank][1]; - u16 r4 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); - - if (move_anim_start_t3(gActiveBank, gActiveBank, gActiveBank, r3, r4) != 0) - LinkOpponentBufferExecCompleted(); - else - gBattleBankFunc[gActiveBank] = sub_8037FD8; - } -} - -void LinkOpponentHandleLinkStandbyMsg(void) -{ - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandleResetActionMoveSelection(void) -{ - LinkOpponentBufferExecCompleted(); -} - -void LinkOpponentHandlecmd55(void) -{ - if (gBattleBufferA[gActiveBank][1] == 3) - gBattleOutcome = gBattleBufferA[gActiveBank][1]; - else - gBattleOutcome = gBattleBufferA[gActiveBank][1] ^ 3; - FadeOutMapMusic(5); - BeginFastPaletteFade(3); - LinkOpponentBufferExecCompleted(); - gBattleBankFunc[gActiveBank] = sub_8037F34; -} - -void LinkOpponentHandlecmd56(void) -{ -} -- cgit v1.2.3 From 4481e60e09ecc135b260b5f98154bb30f08f241a Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Sep 2017 17:37:50 -0400 Subject: gUnknown_0202E844 -> gCamera; fix internal compiler error --- asm/field_effect_helpers.s | 4 ++-- include/field_camera.h | 2 +- include/field_map_obj.h | 2 +- src/field_effect_helpers.c | 6 +++--- src/field_map_obj.c | 6 +++--- src/field_tasks.c | 6 +++--- src/fieldmap.c | 12 ++++++------ 7 files changed, 19 insertions(+), 19 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 4b26537a9..f8df4a36d 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -232,7 +232,7 @@ unc_grass_tall: @ 8127128 lsrs r7, r0, 8 lsls r0, 24 lsrs r6, r0, 24 - ldr r3, _081271D0 @ =gUnknown_0202E844 + ldr r3, _081271D0 @ =gCamera ldrb r1, [r3] movs r0, 0x1 ands r0, r1 @@ -307,7 +307,7 @@ _081271C6: bl FieldEffectStop b _0812720E .align 2, 0 -_081271D0: .4byte gUnknown_0202E844 +_081271D0: .4byte gCamera _081271D4: .4byte gSaveBlock1 _081271D8: mov r0, sp diff --git a/include/field_camera.h b/include/field_camera.h index 4ce207541..17126d190 100644 --- a/include/field_camera.h +++ b/include/field_camera.h @@ -11,7 +11,7 @@ struct CameraSomething s32 unk14; }; -extern struct Camera gUnknown_0202E844; +extern struct Camera gCamera; void move_tilemap_camera_to_upper_left_corner(void); void sub_8057A58(void); diff --git a/include/field_map_obj.h b/include/field_map_obj.h index 9263604fb..af52591b0 100644 --- a/include/field_map_obj.h +++ b/include/field_map_obj.h @@ -3,7 +3,7 @@ #include "sprite.h" -const u8 gUnknown_0830FD14[16]; +extern const u8 gUnknown_0830FD14[]; #define fieldmap_object_cb(setup, callback, table) \ static u8 callback(struct MapObject *, struct Sprite *);\ diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 98e8242aa..5a71559ba 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -328,10 +328,10 @@ void unc_grass_normal(struct Sprite *sprite) mapNum = sprite->data5 >> 8; mapGroup = sprite->data5; - if (gUnknown_0202E844.field_0 && (gSaveBlock1.location.mapNum != mapNum || gSaveBlock1.location.mapGroup != mapGroup)) + if (gCamera.field_0 && (gSaveBlock1.location.mapNum != mapNum || gSaveBlock1.location.mapGroup != mapGroup)) { - sprite->data1 -= gUnknown_0202E844.x; - sprite->data2 -= gUnknown_0202E844.y; + sprite->data1 -= gCamera.x; + sprite->data2 -= gCamera.y; sprite->data5 = ((u8)gSaveBlock1.location.mapNum << 8) | (u8)gSaveBlock1.location.mapGroup; } localId = sprite->data3 >> 8; diff --git a/src/field_map_obj.c b/src/field_map_obj.c index f60b1b233..1568432f5 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -1901,7 +1901,7 @@ extern void CameraObjectReset1(void); extern struct LinkPlayerMapObject gLinkPlayerMapObjects[]; extern u8 gReservedSpritePaletteCount; -extern struct Camera gUnknown_0202E844; +extern struct Camera gCamera; static u8 gUnknown_030005A4; static u16 gUnknown_030005A6; @@ -2990,9 +2990,9 @@ void UpdateFieldObjectCoordsForCameraUpdate(void) asm(""::"r"(i)); //makes the compiler store i in r3 #endif - if (gUnknown_0202E844.field_0) + if (gCamera.field_0) { - for (i = 0, deltaX = gUnknown_0202E844.x, deltaY = gUnknown_0202E844.y; i < 16; i++) + for (i = 0, deltaX = gCamera.x, deltaY = gCamera.y; i < 16; i++) { struct MapObject *mapObject = &gMapObjects[i]; diff --git a/src/field_tasks.c b/src/field_tasks.c index caf2ce6b9..628ee81de 100644 --- a/src/field_tasks.c +++ b/src/field_tasks.c @@ -836,11 +836,11 @@ void Task_MuddySlope(u8 taskId) } break; } - if (gUnknown_0202E844.field_0 && mapIndices != data[0]) + if (gCamera.field_0 && mapIndices != data[0]) { data[0] = mapIndices; - x2 = gUnknown_0202E844.x; - y2 = gUnknown_0202E844.y; + x2 = gCamera.x; + y2 = gCamera.y; } else { diff --git a/src/fieldmap.c b/src/fieldmap.c index 0e0ec246c..7171e62b7 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -22,7 +22,7 @@ struct Coords32 EWRAM_DATA static u16 gUnknown_02029828[0x2800] = {0}; EWRAM_DATA struct MapHeader gMapHeader = {0}; -EWRAM_DATA struct Camera gUnknown_0202E844 = {0}; +EWRAM_DATA struct Camera gCamera = {0}; EWRAM_DATA static struct ConnectionFlags gUnknown_0202E850 = {0}; struct BackupMapData gUnknown_03004870; @@ -713,7 +713,7 @@ bool8 CameraMove(int x, int y) unsigned int direction; struct MapConnection *connection; int old_x, old_y; - gUnknown_0202E844.field_0 = FALSE; + gCamera.field_0 = FALSE; direction = GetPostCameraMoveMapBorderId(x, y); if (direction + 1 <= 1) { @@ -728,14 +728,14 @@ bool8 CameraMove(int x, int y) connection = sub_8056A64(direction, gSaveBlock1.pos.x, gSaveBlock1.pos.y); sub_8056918(connection, direction, x, y); sub_80538F0(connection->mapGroup, connection->mapNum); - gUnknown_0202E844.field_0 = TRUE; - gUnknown_0202E844.x = old_x - gSaveBlock1.pos.x; - gUnknown_0202E844.y = old_y - gSaveBlock1.pos.y; + gCamera.field_0 = TRUE; + gCamera.x = old_x - gSaveBlock1.pos.x; + gCamera.y = old_y - gSaveBlock1.pos.y; gSaveBlock1.pos.x += x; gSaveBlock1.pos.y += y; sub_80566F0(direction); } - return gUnknown_0202E844.field_0; + return gCamera.field_0; } struct MapConnection *sub_8056A64(u8 direction, int x, int y) -- cgit v1.2.3 From 56578b2197b1db1e215bf6ef466a765bf41830b1 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Sep 2017 17:45:29 -0400 Subject: FldEff_JumpTallGrass; gUnknown_0202FF84 -> gFieldEffectSpawnParams --- asm/field_effect_helpers.s | 157 ++++++++++++++------------------------------ asm/fldeff_80C5CD4.s | 56 ++++++++-------- include/field_effect.h | 2 +- src/battle_transition.c | 16 ++--- src/braille_puzzles.c | 2 +- src/field_effect.c | 84 ++++++++++++------------ src/field_effect_helpers.c | 46 +++++++++---- src/field_ground_effect.c | 128 ++++++++++++++++++------------------ src/field_map_obj.c | 26 ++++---- src/field_map_obj_helpers.c | 10 +-- src/field_player_avatar.c | 14 ++-- src/fldeff_cut.c | 4 +- src/fldeff_flash.c | 2 +- src/fldeff_strength.c | 6 +- src/fldeff_sweetscent.c | 2 +- src/fldeff_teleport.c | 2 +- src/pokemon_menu.c | 14 ++-- src/rom6.c | 24 +++---- src/scrcmd.c | 2 +- src/trainer_see.c | 16 ++--- 20 files changed, 287 insertions(+), 326 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index f8df4a36d..e5875f1f7 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,63 +6,6 @@ .text - thumb_func_start FldEff_JumpTallGrass -FldEff_JumpTallGrass: @ 8126F80 - push {r4,lr} - ldr r4, _08126FE4 @ =gUnknown_0202FF84 - adds r1, r4, 0x4 - adds r0, r4, 0 - movs r2, 0x8 - movs r3, 0xC - bl sub_8060470 - ldr r0, _08126FE8 @ =gFieldEffectObjectTemplatePointers - ldr r0, [r0, 0x28] - movs r2, 0 - ldrsh r1, [r4, r2] - movs r3, 0x4 - ldrsh r2, [r4, r3] - movs r3, 0 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x40 - beq _08126FDC - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - ldr r0, _08126FEC @ =gSprites - adds r2, r0 - adds r3, r2, 0 - adds r3, 0x3E - ldrb r0, [r3] - movs r1, 0x2 - orrs r0, r1 - strb r0, [r3] - movs r0, 0x3 - ldrb r1, [r4, 0xC] - ands r1, r0 - lsls r1, 2 - ldrb r3, [r2, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2, 0x5] - ldr r0, [r4, 0x8] - strh r0, [r2, 0x2E] - movs r0, 0xC - strh r0, [r2, 0x30] -_08126FDC: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08126FE4: .4byte gUnknown_0202FF84 -_08126FE8: .4byte gFieldEffectObjectTemplatePointers -_08126FEC: .4byte gSprites - thumb_func_end FldEff_JumpTallGrass - thumb_func_start sub_8126FF0 sub_8126FF0: @ 8126FF0 push {r4-r7,lr} @@ -143,7 +86,7 @@ _08127074: FldEff_LongGrass: @ 8127080 push {r4,r5,lr} sub sp, 0x4 - ldr r5, _0812711C @ =gUnknown_0202FF84 + ldr r5, _0812711C @ =gFieldEffectSpawnParams ldrh r1, [r5] mov r0, sp strh r1, [r0] @@ -216,7 +159,7 @@ _08127110: pop {r1} bx r1 .align 2, 0 -_0812711C: .4byte gUnknown_0202FF84 +_0812711C: .4byte gFieldEffectSpawnParams _08127120: .4byte gFieldEffectObjectTemplatePointers _08127124: .4byte gSprites thumb_func_end FldEff_LongGrass @@ -350,7 +293,7 @@ _0812721C: .4byte gMapObjects thumb_func_start FldEff_JumpLongGrass FldEff_JumpLongGrass: @ 8127220 push {r4,lr} - ldr r4, _08127284 @ =gUnknown_0202FF84 + ldr r4, _08127284 @ =gFieldEffectSpawnParams adds r1, r4, 0x4 adds r0, r4, 0 movs r2, 0x8 @@ -399,7 +342,7 @@ _0812727C: pop {r1} bx r1 .align 2, 0 -_08127284: .4byte gUnknown_0202FF84 +_08127284: .4byte gFieldEffectSpawnParams _08127288: .4byte gFieldEffectObjectTemplatePointers _0812728C: .4byte gSprites thumb_func_end FldEff_JumpLongGrass @@ -407,7 +350,7 @@ _0812728C: .4byte gSprites thumb_func_start FldEff_ShortGrass FldEff_ShortGrass: @ 8127290 push {r4-r6,lr} - ldr r6, _08127324 @ =gUnknown_0202FF84 + ldr r6, _08127324 @ =gFieldEffectSpawnParams ldrb r0, [r6] ldrb r1, [r6, 0x4] ldrb r2, [r6, 0x8] @@ -480,7 +423,7 @@ _0812731C: pop {r1} bx r1 .align 2, 0 -_08127324: .4byte gUnknown_0202FF84 +_08127324: .4byte gFieldEffectSpawnParams _08127328: .4byte gMapObjects _0812732C: .4byte gFieldEffectObjectTemplatePointers _08127330: .4byte gSprites @@ -614,7 +557,7 @@ _08127424: .4byte gSprites thumb_func_start FldEff_SandFootprints FldEff_SandFootprints: @ 8127428 push {r4,lr} - ldr r4, _08127490 @ =gUnknown_0202FF84 + ldr r4, _08127490 @ =gFieldEffectSpawnParams adds r1, r4, 0x4 adds r0, r4, 0 movs r2, 0x8 @@ -663,7 +606,7 @@ _08127486: pop {r1} bx r1 .align 2, 0 -_08127490: .4byte gUnknown_0202FF84 +_08127490: .4byte gFieldEffectSpawnParams _08127494: .4byte gFieldEffectObjectTemplatePointers _08127498: .4byte gSprites thumb_func_end FldEff_SandFootprints @@ -671,7 +614,7 @@ _08127498: .4byte gSprites thumb_func_start FldEff_DeepSandFootprints FldEff_DeepSandFootprints: @ 812749C push {r4,r5,lr} - ldr r4, _08127504 @ =gUnknown_0202FF84 + ldr r4, _08127504 @ =gFieldEffectSpawnParams adds r1, r4, 0x4 adds r0, r4, 0 movs r2, 0x8 @@ -721,7 +664,7 @@ _081274FC: pop {r1} bx r1 .align 2, 0 -_08127504: .4byte gUnknown_0202FF84 +_08127504: .4byte gFieldEffectSpawnParams _08127508: .4byte gFieldEffectObjectTemplatePointers _0812750C: .4byte gSprites thumb_func_end FldEff_DeepSandFootprints @@ -729,7 +672,7 @@ _0812750C: .4byte gSprites thumb_func_start FldEff_BikeTireTracks FldEff_BikeTireTracks: @ 8127510 push {r4,r5,lr} - ldr r4, _08127578 @ =gUnknown_0202FF84 + ldr r4, _08127578 @ =gFieldEffectSpawnParams adds r1, r4, 0x4 adds r0, r4, 0 movs r2, 0x8 @@ -779,7 +722,7 @@ _08127570: pop {r1} bx r1 .align 2, 0 -_08127578: .4byte gUnknown_0202FF84 +_08127578: .4byte gFieldEffectSpawnParams _0812757C: .4byte gFieldEffectObjectTemplatePointers _08127580: .4byte gSprites thumb_func_end FldEff_BikeTireTracks @@ -864,7 +807,7 @@ _08127608: thumb_func_start FldEff_Splash FldEff_Splash: @ 8127610 push {r4-r6,lr} - ldr r6, _081276A4 @ =gUnknown_0202FF84 + ldr r6, _081276A4 @ =gFieldEffectSpawnParams ldrb r0, [r6] ldrb r1, [r6, 0x4] ldrb r2, [r6, 0x8] @@ -934,7 +877,7 @@ _0812769A: pop {r1} bx r1 .align 2, 0 -_081276A4: .4byte gUnknown_0202FF84 +_081276A4: .4byte gFieldEffectSpawnParams _081276A8: .4byte gMapObjects _081276AC: .4byte gFieldEffectObjectTemplatePointers _081276B0: .4byte gSprites @@ -1015,7 +958,7 @@ _0812773C: .4byte gMapObjects thumb_func_start FldEff_JumpSmallSplash FldEff_JumpSmallSplash: @ 8127740 push {r4,lr} - ldr r4, _081277A4 @ =gUnknown_0202FF84 + ldr r4, _081277A4 @ =gFieldEffectSpawnParams adds r1, r4, 0x4 adds r0, r4, 0 movs r2, 0x8 @@ -1064,7 +1007,7 @@ _0812779C: pop {r1} bx r1 .align 2, 0 -_081277A4: .4byte gUnknown_0202FF84 +_081277A4: .4byte gFieldEffectSpawnParams _081277A8: .4byte gFieldEffectObjectTemplatePointers _081277AC: .4byte gSprites thumb_func_end FldEff_JumpSmallSplash @@ -1072,7 +1015,7 @@ _081277AC: .4byte gSprites thumb_func_start FldEff_JumpBigSplash FldEff_JumpBigSplash: @ 81277B0 push {r4,lr} - ldr r4, _08127814 @ =gUnknown_0202FF84 + ldr r4, _08127814 @ =gFieldEffectSpawnParams adds r1, r4, 0x4 adds r0, r4, 0 movs r2, 0x8 @@ -1121,7 +1064,7 @@ _0812780C: pop {r1} bx r1 .align 2, 0 -_08127814: .4byte gUnknown_0202FF84 +_08127814: .4byte gFieldEffectSpawnParams _08127818: .4byte gFieldEffectObjectTemplatePointers _0812781C: .4byte gSprites thumb_func_end FldEff_JumpBigSplash @@ -1129,7 +1072,7 @@ _0812781C: .4byte gSprites thumb_func_start FldEff_FeetInFlowingWater FldEff_FeetInFlowingWater: @ 8127820 push {r4-r7,lr} - ldr r7, _081278C0 @ =gUnknown_0202FF84 + ldr r7, _081278C0 @ =gFieldEffectSpawnParams ldrb r0, [r7] ldrb r1, [r7, 0x4] ldrb r2, [r7, 0x8] @@ -1205,7 +1148,7 @@ _081278B6: pop {r1} bx r1 .align 2, 0 -_081278C0: .4byte gUnknown_0202FF84 +_081278C0: .4byte gFieldEffectSpawnParams _081278C4: .4byte gMapObjects _081278C8: .4byte gFieldEffectObjectTemplatePointers _081278CC: .4byte gSprites @@ -1300,7 +1243,7 @@ FldEff_Ripple: @ 8127978 push {r4,lr} ldr r0, _081279CC @ =gFieldEffectObjectTemplatePointers ldr r0, [r0, 0x14] - ldr r4, _081279D0 @ =gUnknown_0202FF84 + ldr r4, _081279D0 @ =gFieldEffectSpawnParams movs r2, 0 ldrsh r1, [r4, r2] movs r3, 0x4 @@ -1341,14 +1284,14 @@ _081279C4: bx r1 .align 2, 0 _081279CC: .4byte gFieldEffectObjectTemplatePointers -_081279D0: .4byte gUnknown_0202FF84 +_081279D0: .4byte gFieldEffectSpawnParams _081279D4: .4byte gSprites thumb_func_end FldEff_Ripple thumb_func_start FldEff_HotSpringsWater FldEff_HotSpringsWater: @ 81279D8 push {r4-r6,lr} - ldr r6, _08127A6C @ =gUnknown_0202FF84 + ldr r6, _08127A6C @ =gFieldEffectSpawnParams ldrb r0, [r6] ldrb r1, [r6, 0x4] ldrb r2, [r6, 0x8] @@ -1421,7 +1364,7 @@ _08127A64: pop {r1} bx r1 .align 2, 0 -_08127A6C: .4byte gUnknown_0202FF84 +_08127A6C: .4byte gFieldEffectSpawnParams _08127A70: .4byte gMapObjects _08127A74: .4byte gFieldEffectObjectTemplatePointers _08127A78: .4byte gSprites @@ -1509,7 +1452,7 @@ _08127B10: .4byte gSprites thumb_func_start FldEff_Unknown19 FldEff_Unknown19: @ 8127B14 push {r4,lr} - ldr r4, _08127B74 @ =gUnknown_0202FF84 + ldr r4, _08127B74 @ =gFieldEffectSpawnParams adds r1, r4, 0x4 adds r0, r4, 0 movs r2, 0x8 @@ -1556,7 +1499,7 @@ _08127B6C: pop {r1} bx r1 .align 2, 0 -_08127B74: .4byte gUnknown_0202FF84 +_08127B74: .4byte gFieldEffectSpawnParams _08127B78: .4byte gFieldEffectObjectTemplatePointers _08127B7C: .4byte gSprites thumb_func_end FldEff_Unknown19 @@ -1564,7 +1507,7 @@ _08127B7C: .4byte gSprites thumb_func_start FldEff_Unknown20 FldEff_Unknown20: @ 8127B80 push {r4,lr} - ldr r4, _08127BE0 @ =gUnknown_0202FF84 + ldr r4, _08127BE0 @ =gFieldEffectSpawnParams adds r1, r4, 0x4 adds r0, r4, 0 movs r2, 0x8 @@ -1611,7 +1554,7 @@ _08127BD8: pop {r1} bx r1 .align 2, 0 -_08127BE0: .4byte gUnknown_0202FF84 +_08127BE0: .4byte gFieldEffectSpawnParams _08127BE4: .4byte gFieldEffectObjectTemplatePointers _08127BE8: .4byte gSprites thumb_func_end FldEff_Unknown20 @@ -1619,7 +1562,7 @@ _08127BE8: .4byte gSprites thumb_func_start FldEff_Unknown21 FldEff_Unknown21: @ 8127BEC push {r4,lr} - ldr r4, _08127C4C @ =gUnknown_0202FF84 + ldr r4, _08127C4C @ =gFieldEffectSpawnParams adds r1, r4, 0x4 adds r0, r4, 0 movs r2, 0x8 @@ -1666,7 +1609,7 @@ _08127C44: pop {r1} bx r1 .align 2, 0 -_08127C4C: .4byte gUnknown_0202FF84 +_08127C4C: .4byte gFieldEffectSpawnParams _08127C50: .4byte gFieldEffectObjectTemplatePointers _08127C54: .4byte gSprites thumb_func_end FldEff_Unknown21 @@ -1674,7 +1617,7 @@ _08127C54: .4byte gSprites thumb_func_start FldEff_Unknown22 FldEff_Unknown22: @ 8127C58 push {r4,lr} - ldr r4, _08127CB8 @ =gUnknown_0202FF84 + ldr r4, _08127CB8 @ =gFieldEffectSpawnParams adds r1, r4, 0x4 adds r0, r4, 0 movs r2, 0x8 @@ -1721,7 +1664,7 @@ _08127CB0: pop {r1} bx r1 .align 2, 0 -_08127CB8: .4byte gUnknown_0202FF84 +_08127CB8: .4byte gFieldEffectSpawnParams _08127CBC: .4byte gFieldEffectObjectTemplatePointers _08127CC0: .4byte gSprites thumb_func_end FldEff_Unknown22 @@ -1731,7 +1674,7 @@ ash: @ 8127CC4 push {r4,lr} lsls r2, 16 lsrs r2, 16 - ldr r4, _08127CF4 @ =gUnknown_0202FF84 + ldr r4, _08127CF4 @ =gFieldEffectSpawnParams lsls r0, 16 asrs r0, 16 str r0, [r4] @@ -1752,14 +1695,14 @@ ash: @ 8127CC4 pop {r0} bx r0 .align 2, 0 -_08127CF4: .4byte gUnknown_0202FF84 +_08127CF4: .4byte gFieldEffectSpawnParams thumb_func_end ash thumb_func_start FldEff_Ash FldEff_Ash: @ 8127CF8 push {r4,r5,lr} sub sp, 0x4 - ldr r5, _08127D78 @ =gUnknown_0202FF84 + ldr r5, _08127D78 @ =gFieldEffectSpawnParams ldrh r1, [r5] mov r0, sp strh r1, [r0] @@ -1821,7 +1764,7 @@ _08127D6E: pop {r1} bx r1 .align 2, 0 -_08127D78: .4byte gUnknown_0202FF84 +_08127D78: .4byte gFieldEffectSpawnParams _08127D7C: .4byte gFieldEffectObjectTemplatePointers _08127D80: .4byte gSprites thumb_func_end FldEff_Ash @@ -1944,7 +1887,7 @@ _08127E50: thumb_func_start FldEff_SurfBlob FldEff_SurfBlob: @ 8127E58 push {r4,r5,lr} - ldr r4, _08127EC0 @ =gUnknown_0202FF84 + ldr r4, _08127EC0 @ =gFieldEffectSpawnParams adds r1, r4, 0x4 adds r0, r4, 0 movs r2, 0x8 @@ -1994,7 +1937,7 @@ _08127EB2: pop {r1} bx r1 .align 2, 0 -_08127EC0: .4byte gUnknown_0202FF84 +_08127EC0: .4byte gFieldEffectSpawnParams _08127EC4: .4byte gFieldEffectObjectTemplatePointers _08127EC8: .4byte gSprites _08127ECC: .4byte 0x0000ffff @@ -2412,7 +2355,7 @@ _081281B0: .4byte gSprites thumb_func_start FldEff_Dust FldEff_Dust: @ 81281B4 push {r4,lr} - ldr r4, _08128218 @ =gUnknown_0202FF84 + ldr r4, _08128218 @ =gFieldEffectSpawnParams adds r1, r4, 0x4 adds r0, r4, 0 movs r2, 0x8 @@ -2461,7 +2404,7 @@ _08128210: pop {r1} bx r1 .align 2, 0 -_08128218: .4byte gUnknown_0202FF84 +_08128218: .4byte gFieldEffectSpawnParams _0812821C: .4byte gFieldEffectObjectTemplatePointers _08128220: .4byte gSprites thumb_func_end FldEff_Dust @@ -2469,7 +2412,7 @@ _08128220: .4byte gSprites thumb_func_start FldEff_SandPile FldEff_SandPile: @ 8128224 push {r4-r7,lr} - ldr r7, _081282D0 @ =gUnknown_0202FF84 + ldr r7, _081282D0 @ =gFieldEffectSpawnParams ldrb r0, [r7] ldrb r1, [r7, 0x4] ldrb r2, [r7, 0x8] @@ -2552,7 +2495,7 @@ _081282C8: pop {r1} bx r1 .align 2, 0 -_081282D0: .4byte gUnknown_0202FF84 +_081282D0: .4byte gFieldEffectSpawnParams _081282D4: .4byte gMapObjects _081282D8: .4byte gFieldEffectObjectTemplatePointers _081282DC: .4byte gSprites @@ -2666,7 +2609,7 @@ _081283A8: .4byte gMapObjects thumb_func_start FldEff_Bubbles FldEff_Bubbles: @ 81283AC push {r4,lr} - ldr r4, _08128404 @ =gUnknown_0202FF84 + ldr r4, _08128404 @ =gFieldEffectSpawnParams adds r1, r4, 0x4 adds r0, r4, 0 movs r2, 0x8 @@ -2709,7 +2652,7 @@ _081283FC: pop {r1} bx r1 .align 2, 0 -_08128404: .4byte gUnknown_0202FF84 +_08128404: .4byte gFieldEffectSpawnParams _08128408: .4byte gFieldEffectObjectTemplatePointers _0812840C: .4byte gSprites thumb_func_end FldEff_Bubbles @@ -2751,7 +2694,7 @@ _0812844C: .4byte 0x00001004 thumb_func_start FldEff_BerryTreeGrowthSparkle FldEff_BerryTreeGrowthSparkle: @ 8128450 push {r4,lr} - ldr r4, _081284B8 @ =gUnknown_0202FF84 + ldr r4, _081284B8 @ =gFieldEffectSpawnParams adds r1, r4, 0x4 adds r0, r4, 0 movs r2, 0x8 @@ -2802,7 +2745,7 @@ _081284B0: pop {r1} bx r1 .align 2, 0 -_081284B8: .4byte gUnknown_0202FF84 +_081284B8: .4byte gFieldEffectSpawnParams _081284BC: .4byte gFieldEffectObjectTemplatePointers _081284C0: .4byte gSprites thumb_func_end FldEff_BerryTreeGrowthSparkle @@ -2853,7 +2796,7 @@ ShowDisguiseFieldEffect: @ 81284F4 lsrs r6, r1, 24 lsls r2, 24 lsrs r7, r2, 24 - ldr r5, _08128528 @ =gUnknown_0202FF84 + ldr r5, _08128528 @ =gFieldEffectSpawnParams ldrb r0, [r5] ldrb r1, [r5, 0x4] ldrb r2, [r5, 0x8] @@ -2867,7 +2810,7 @@ ShowDisguiseFieldEffect: @ 81284F4 movs r0, 0x40 b _08128598 .align 2, 0 -_08128528: .4byte gUnknown_0202FF84 +_08128528: .4byte gFieldEffectSpawnParams _0812852C: ldr r1, _081285A4 @ =gFieldEffectObjectTemplatePointers lsls r0, r6, 2 @@ -3121,7 +3064,7 @@ _081286FC: thumb_func_start FldEff_Sparkle FldEff_Sparkle: @ 8128700 push {r4,lr} - ldr r4, _08128768 @ =gUnknown_0202FF84 + ldr r4, _08128768 @ =gFieldEffectSpawnParams ldr r0, [r4] adds r0, 0x7 str r0, [r4] @@ -3172,7 +3115,7 @@ _08128760: pop {r1} bx r1 .align 2, 0 -_08128768: .4byte gUnknown_0202FF84 +_08128768: .4byte gFieldEffectSpawnParams _0812876C: .4byte gFieldEffectObjectTemplatePointers _08128770: .4byte gSprites thumb_func_end FldEff_Sparkle diff --git a/asm/fldeff_80C5CD4.s b/asm/fldeff_80C5CD4.s index 33182fc6a..4fe6c1f89 100644 --- a/asm/fldeff_80C5CD4.s +++ b/asm/fldeff_80C5CD4.s @@ -741,7 +741,7 @@ _080C627C: .4byte gMapHeader thumb_func_start sub_80C6280 sub_80C6280: @ 80C6280 push {lr} - ldr r1, _080C6294 @ =gUnknown_0202FF84 + ldr r1, _080C6294 @ =gFieldEffectSpawnParams ldr r0, [r1, 0x4] cmp r0, 0x2 beq _080C62AA @@ -751,7 +751,7 @@ sub_80C6280: @ 80C6280 beq _080C62A2 b _080C62BE .align 2, 0 -_080C6294: .4byte gUnknown_0202FF84 +_080C6294: .4byte gFieldEffectSpawnParams _080C6298: cmp r0, 0x3 beq _080C62AE @@ -880,7 +880,7 @@ _080C6398: .4byte sub_80C660C thumb_func_start sub_80C639C sub_80C639C: @ 80C639C push {lr} - ldr r1, _080C63B0 @ =gUnknown_0202FF84 + ldr r1, _080C63B0 @ =gFieldEffectSpawnParams ldr r0, _080C63B4 @ =gLastFieldPokeMenuOpened ldrb r0, [r0] str r0, [r1] @@ -889,7 +889,7 @@ sub_80C639C: @ 80C639C pop {r0} bx r0 .align 2, 0 -_080C63B0: .4byte gUnknown_0202FF84 +_080C63B0: .4byte gFieldEffectSpawnParams _080C63B4: .4byte gLastFieldPokeMenuOpened _080C63B8: .4byte gUnknown_081A2CE6 thumb_func_end sub_80C639C @@ -943,7 +943,7 @@ FldEff_SecretPowerCave: @ 80C63FC ldrh r1, [r2, 0x2] lsls r1, 23 lsrs r1, 23 - ldr r4, _080C6448 @ =gUnknown_0202FF84 + ldr r4, _080C6448 @ =gFieldEffectSpawnParams ldr r3, [r4, 0x14] adds r1, r3 lsls r1, 16 @@ -963,7 +963,7 @@ FldEff_SecretPowerCave: @ 80C63FC _080C643C: .4byte gSpriteTemplate_83D2614 _080C6440: .4byte gSprites _080C6444: .4byte gPlayerAvatar -_080C6448: .4byte gUnknown_0202FF84 +_080C6448: .4byte gFieldEffectSpawnParams thumb_func_end FldEff_SecretPowerCave thumb_func_start sub_80C644C @@ -1025,7 +1025,7 @@ sub_80C6498: @ 80C6498 thumb_func_start sub_80C64A8 sub_80C64A8: @ 80C64A8 push {lr} - ldr r1, _080C64BC @ =gUnknown_0202FF84 + ldr r1, _080C64BC @ =gFieldEffectSpawnParams ldr r0, _080C64C0 @ =gLastFieldPokeMenuOpened ldrb r0, [r0] str r0, [r1] @@ -1034,7 +1034,7 @@ sub_80C64A8: @ 80C64A8 pop {r0} bx r0 .align 2, 0 -_080C64BC: .4byte gUnknown_0202FF84 +_080C64BC: .4byte gFieldEffectSpawnParams _080C64C0: .4byte gLastFieldPokeMenuOpened _080C64C4: .4byte gUnknown_081A2D3E thumb_func_end sub_80C64A8 @@ -1088,13 +1088,13 @@ FldEff_SecretPowerTree: @ 80C6508 ands r2, r0 cmp r2, 0x96 bne _080C652A - ldr r1, _080C6588 @ =gUnknown_0202FF84 + ldr r1, _080C6588 @ =gFieldEffectSpawnParams movs r0, 0 str r0, [r1, 0x1C] _080C652A: cmp r2, 0x9C bne _080C6534 - ldr r1, _080C6588 @ =gUnknown_0202FF84 + ldr r1, _080C6588 @ =gFieldEffectSpawnParams movs r0, 0x2 str r0, [r1, 0x1C] _080C6534: @@ -1110,7 +1110,7 @@ _080C6534: ldrh r1, [r2, 0x2] lsls r1, 23 lsrs r1, 23 - ldr r4, _080C6588 @ =gUnknown_0202FF84 + ldr r4, _080C6588 @ =gFieldEffectSpawnParams ldr r3, [r4, 0x14] adds r1, r3 lsls r1, 16 @@ -1137,7 +1137,7 @@ _080C6576: .align 2, 0 _080C6580: .4byte gUnknown_0203923C _080C6584: .4byte 0x00000fff -_080C6588: .4byte gUnknown_0202FF84 +_080C6588: .4byte gFieldEffectSpawnParams _080C658C: .4byte gSpriteTemplate_83D262C _080C6590: .4byte gSprites _080C6594: .4byte gPlayerAvatar @@ -1149,7 +1149,7 @@ sub_80C6598: @ 80C6598 adds r4, r0, 0 movs r0, 0x9B bl PlaySE - ldr r0, _080C65BC @ =gUnknown_0202FF84 + ldr r0, _080C65BC @ =gFieldEffectSpawnParams ldr r1, [r0, 0x1C] adds r2, r4, 0 adds r2, 0x2A @@ -1162,7 +1162,7 @@ sub_80C6598: @ 80C6598 pop {r0} bx r0 .align 2, 0 -_080C65BC: .4byte gUnknown_0202FF84 +_080C65BC: .4byte gFieldEffectSpawnParams _080C65C0: .4byte sub_80C65C4 thumb_func_end sub_80C6598 @@ -1177,7 +1177,7 @@ sub_80C65C4: @ 80C65C4 asrs r0, 16 cmp r0, 0x27 ble _080C65EE - ldr r0, _080C65F4 @ =gUnknown_0202FF84 + ldr r0, _080C65F4 @ =gFieldEffectSpawnParams ldr r0, [r0, 0x1C] cmp r0, 0 beq _080C65E2 @@ -1195,7 +1195,7 @@ _080C65EE: pop {r0} bx r0 .align 2, 0 -_080C65F4: .4byte gUnknown_0202FF84 +_080C65F4: .4byte gFieldEffectSpawnParams _080C65F8: .4byte sub_80C65FC thumb_func_end sub_80C65C4 @@ -1212,7 +1212,7 @@ sub_80C65FC: @ 80C65FC thumb_func_start sub_80C660C sub_80C660C: @ 80C660C push {lr} - ldr r1, _080C6620 @ =gUnknown_0202FF84 + ldr r1, _080C6620 @ =gFieldEffectSpawnParams ldr r0, _080C6624 @ =gLastFieldPokeMenuOpened ldrb r0, [r0] str r0, [r1] @@ -1221,7 +1221,7 @@ sub_80C660C: @ 80C660C pop {r0} bx r0 .align 2, 0 -_080C6620: .4byte gUnknown_0202FF84 +_080C6620: .4byte gFieldEffectSpawnParams _080C6624: .4byte gLastFieldPokeMenuOpened _080C6628: .4byte gUnknown_081A2D96 thumb_func_end sub_80C660C @@ -1275,7 +1275,7 @@ FldEff_SecretPowerShrub: @ 80C666C ldrh r1, [r2, 0x2] lsls r1, 23 lsrs r1, 23 - ldr r4, _080C66B8 @ =gUnknown_0202FF84 + ldr r4, _080C66B8 @ =gFieldEffectSpawnParams ldr r3, [r4, 0x14] adds r1, r3 lsls r1, 16 @@ -1295,7 +1295,7 @@ FldEff_SecretPowerShrub: @ 80C666C _080C66AC: .4byte gSpriteTemplate_83D2644 _080C66B0: .4byte gSprites _080C66B4: .4byte gPlayerAvatar -_080C66B8: .4byte gUnknown_0202FF84 +_080C66B8: .4byte gFieldEffectSpawnParams thumb_func_end FldEff_SecretPowerShrub thumb_func_start sub_80C66BC @@ -2103,7 +2103,7 @@ FldEff_SandPillar: @ 80C6D3C mov r0, sp adds r1, r4, 0 bl GetXYCoordsOneStepInFrontOfPlayer - ldr r1, _080C6D78 @ =gUnknown_0202FF84 + ldr r1, _080C6D78 @ =gFieldEffectSpawnParams mov r0, sp movs r2, 0 ldrsh r0, [r0, r2] @@ -2122,7 +2122,7 @@ FldEff_SandPillar: @ 80C6D3C beq _080C6D86 b _080C6E4C .align 2, 0 -_080C6D78: .4byte gUnknown_0202FF84 +_080C6D78: .4byte gFieldEffectSpawnParams _080C6D7C: cmp r0, 0x3 beq _080C6DEC @@ -2240,7 +2240,7 @@ SpriteCB_SandPillar_0: @ 80C6E64 adds r5, r0, 0 movs r0, 0x83 bl PlaySE - ldr r4, _080C6E90 @ =gUnknown_0202FF84 + ldr r4, _080C6E90 @ =gFieldEffectSpawnParams ldr r0, [r4, 0x14] ldr r1, [r4, 0x18] subs r1, 0x1 @@ -2255,7 +2255,7 @@ SpriteCB_SandPillar_0: @ 80C6E64 bl MapGridSetMetatileIdAt b _080C6EAA .align 2, 0 -_080C6E90: .4byte gUnknown_0202FF84 +_080C6E90: .4byte gFieldEffectSpawnParams _080C6E94: .4byte 0x00000286 _080C6E98: .4byte 0x00000e02 _080C6E9C: @@ -2266,7 +2266,7 @@ _080C6E9C: lsls r2, 2 bl MapGridSetMetatileIdAt _080C6EAA: - ldr r4, _080C6ED8 @ =gUnknown_0202FF84 + ldr r4, _080C6ED8 @ =gFieldEffectSpawnParams ldr r0, [r4, 0x14] ldr r1, [r4, 0x18] ldr r2, _080C6EDC @ =0x0000020a @@ -2286,7 +2286,7 @@ _080C6EAA: pop {r0} bx r0 .align 2, 0 -_080C6ED8: .4byte gUnknown_0202FF84 +_080C6ED8: .4byte gFieldEffectSpawnParams _080C6EDC: .4byte 0x0000020a _080C6EE0: .4byte SpriteCB_SandPillar_1 thumb_func_end SpriteCB_SandPillar_0 @@ -2304,7 +2304,7 @@ SpriteCB_SandPillar_1: @ 80C6EE4 strh r0, [r5, 0x2E] b _080C6F14 _080C6EF8: - ldr r4, _080C6F1C @ =gUnknown_0202FF84 + ldr r4, _080C6F1C @ =gFieldEffectSpawnParams ldr r0, [r4, 0x14] ldr r1, [r4, 0x18] ldr r2, _080C6F20 @ =0x00000e8c @@ -2321,7 +2321,7 @@ _080C6F14: pop {r0} bx r0 .align 2, 0 -_080C6F1C: .4byte gUnknown_0202FF84 +_080C6F1C: .4byte gFieldEffectSpawnParams _080C6F20: .4byte 0x00000e8c _080C6F24: .4byte SpriteCB_SandPillar_2 thumb_func_end SpriteCB_SandPillar_1 diff --git a/include/field_effect.h b/include/field_effect.h index f43b15afb..62e17b53c 100644 --- a/include/field_effect.h +++ b/include/field_effect.h @@ -253,6 +253,6 @@ void MultiplyInvertedPaletteRGBComponents(u16, u8, u8, u8); void sub_80878A8(void); void sub_8087BA8(void); -extern u32 gUnknown_0202FF84[8]; +extern u32 gFieldEffectSpawnParams[8]; #endif // GUARD_FIELD_EFFECT_H diff --git a/src/battle_transition.c b/src/battle_transition.c index 1cacb8857..fd6eab491 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -994,10 +994,10 @@ static bool8 Phase2_Transition_PokeballsTrail_Func2(struct Task* task) rand = Random() & 1; for (i = 0; i <= 4; i++, rand ^= 1) { - gUnknown_0202FF84[0] = arr0[rand]; // x - gUnknown_0202FF84[1] = (i * 32) + 16; // y - gUnknown_0202FF84[2] = rand; - gUnknown_0202FF84[3] = arr1[i]; + gFieldEffectSpawnParams[0] = arr0[rand]; // x + gFieldEffectSpawnParams[1] = (i * 32) + 16; // y + gFieldEffectSpawnParams[2] = rand; + gFieldEffectSpawnParams[3] = arr1[i]; FieldEffectStart(FLDEFF_POKEBALL); } @@ -1017,14 +1017,14 @@ static bool8 Phase2_Transition_PokeballsTrail_Func3(struct Task* task) bool8 FldEff_Pokeball(void) { - u8 spriteID = CreateSpriteAtEnd(&sSpriteTemplate_83FD98C, gUnknown_0202FF84[0], gUnknown_0202FF84[1], 0); + u8 spriteID = CreateSpriteAtEnd(&sSpriteTemplate_83FD98C, gFieldEffectSpawnParams[0], gFieldEffectSpawnParams[1], 0); gSprites[spriteID].oam.priority = 0; gSprites[spriteID].oam.affineMode = 1; - gSprites[spriteID].data0 = gUnknown_0202FF84[2]; - gSprites[spriteID].data1 = gUnknown_0202FF84[3]; + gSprites[spriteID].data0 = gFieldEffectSpawnParams[2]; + gSprites[spriteID].data1 = gFieldEffectSpawnParams[3]; gSprites[spriteID].data2 = -1; InitSpriteAffineAnim(&gSprites[spriteID]); - StartSpriteAffineAnim(&gSprites[spriteID], gUnknown_0202FF84[2]); + StartSpriteAffineAnim(&gSprites[spriteID], gFieldEffectSpawnParams[2]); return FALSE; } diff --git a/src/braille_puzzles.c b/src/braille_puzzles.c index b8d7cd386..f6bd9e056 100644 --- a/src/braille_puzzles.c +++ b/src/braille_puzzles.c @@ -105,7 +105,7 @@ bool8 ShouldDoBrailleFlyEffect(void) void DoBrailleFlyEffect(void) { - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + gFieldEffectSpawnParams[0] = gLastFieldPokeMenuOpened; FieldEffectStart(0x3C); } diff --git a/src/field_effect.c b/src/field_effect.c index cffed2614..164c74657 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -28,7 +28,7 @@ #define subsprite_table(ptr) {.subsprites = ptr, .subspriteCount = (sizeof ptr) / (sizeof(struct Subsprite))} -EWRAM_DATA u32 gUnknown_0202FF84[8] = {0}; +EWRAM_DATA u32 gFieldEffectSpawnParams[8] = {0}; const u32 gSpriteImage_839DC14[] = INCBIN_U32("graphics/birch_speech/birch.4bpp"); const u16 gBirchPalette[16] = INCBIN_U16("graphics/birch_speech/birch.gbapal"); @@ -1203,10 +1203,10 @@ void task00_8084310(u8 taskId) { return; } - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; - if ((int)gUnknown_0202FF84[0] > 5) + gFieldEffectSpawnParams[0] = gLastFieldPokeMenuOpened; + if ((int)gFieldEffectSpawnParams[0] > 5) { - gUnknown_0202FF84[0] = 0; + gFieldEffectSpawnParams[0] = 0; } FieldEffectStart(FLDEFF_USE_FLY); task->data[0]++; @@ -1665,7 +1665,7 @@ bool8 FldEff_UseWaterfall(void) { u8 taskId; taskId = CreateTask(sub_8086F64, 0xff); - gTasks[taskId].data[1] = gUnknown_0202FF84[0]; + gTasks[taskId].data[1] = gFieldEffectSpawnParams[0]; sub_8086F64(taskId); return FALSE; } @@ -1689,7 +1689,7 @@ bool8 waterfall_1_do_anim_probably(struct Task *task, struct MapObject *mapObjec if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject)) { FieldObjectClearAnimIfSpecialAnimFinished(mapObject); - gUnknown_0202FF84[0] = task->data[1]; + gFieldEffectSpawnParams[0] = task->data[1]; FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); task->data[0]++; } @@ -1738,8 +1738,8 @@ bool8 FldEff_UseDive(void) { u8 taskId; taskId = CreateTask(Task_Dive, 0xff); - gTasks[taskId].data[15] = gUnknown_0202FF84[0]; - gTasks[taskId].data[14] = gUnknown_0202FF84[1]; + gTasks[taskId].data[15] = gFieldEffectSpawnParams[0]; + gTasks[taskId].data[14] = gFieldEffectSpawnParams[1]; Task_Dive(taskId); return FALSE; } @@ -1759,7 +1759,7 @@ bool8 sub_8087124(struct Task *task) bool8 dive_2_unknown(struct Task *task) { ScriptContext2_Enable(); - gUnknown_0202FF84[0] = task->data[15]; + gFieldEffectSpawnParams[0] = task->data[15]; FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); task->data[0]++; return FALSE; @@ -1820,10 +1820,10 @@ bool8 sub_8087298(struct Task *task, struct MapObject *mapObject, struct Sprite { sprite->pos2.y = 0; task->data[3] = 1; - gUnknown_0202FF84[0] = mapObject->coords2.x; - gUnknown_0202FF84[1] = mapObject->coords2.y; - gUnknown_0202FF84[2] = sprite->subpriority - 1; - gUnknown_0202FF84[3] = sprite->oam.priority; + gFieldEffectSpawnParams[0] = mapObject->coords2.x; + gFieldEffectSpawnParams[1] = mapObject->coords2.y; + gFieldEffectSpawnParams[2] = sprite->subpriority - 1; + gFieldEffectSpawnParams[3] = sprite->oam.priority; FieldEffectStart(FLDEFF_LAVARIDGE_GYM_WARP); PlaySE(SE_W153); task->data[0]++; @@ -1924,10 +1924,10 @@ bool8 sub_80874FC(struct Task *task, struct MapObject *mapObject, struct Sprite { if (sub_807D770()) { - gUnknown_0202FF84[0] = mapObject->coords2.x; - gUnknown_0202FF84[1] = mapObject->coords2.y; - gUnknown_0202FF84[2] = sprite->subpriority - 1; - gUnknown_0202FF84[3] = sprite->oam.priority; + gFieldEffectSpawnParams[0] = mapObject->coords2.x; + gFieldEffectSpawnParams[1] = mapObject->coords2.y; + gFieldEffectSpawnParams[2] = sprite->subpriority - 1; + gFieldEffectSpawnParams[3] = sprite->oam.priority; task->data[1] = FieldEffectStart(FLDEFF_POP_OUT_OF_ASH); task->data[0]++; } @@ -1966,9 +1966,9 @@ extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[36] u8 FldEff_LavaridgeGymWarp(void) { u8 spriteId; - sub_8060470((s16 *)&gUnknown_0202FF84[0], (s16 *)&gUnknown_0202FF84[1], 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[33], gUnknown_0202FF84[0], gUnknown_0202FF84[1], gUnknown_0202FF84[2]); - gSprites[spriteId].oam.priority = gUnknown_0202FF84[3]; + sub_8060470((s16 *)&gFieldEffectSpawnParams[0], (s16 *)&gFieldEffectSpawnParams[1], 8, 8); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[33], gFieldEffectSpawnParams[0], gFieldEffectSpawnParams[1], gFieldEffectSpawnParams[2]); + gSprites[spriteId].oam.priority = gFieldEffectSpawnParams[3]; gSprites[spriteId].coordOffsetEnabled = 1; return spriteId; } @@ -2009,10 +2009,10 @@ bool8 sub_80876F8(struct Task *task, struct MapObject *mapObject, struct Sprite { if (task->data[1] > 3) { - gUnknown_0202FF84[0] = mapObject->coords2.x; - gUnknown_0202FF84[1] = mapObject->coords2.y; - gUnknown_0202FF84[2] = sprite->subpriority - 1; - gUnknown_0202FF84[3] = sprite->oam.priority; + gFieldEffectSpawnParams[0] = mapObject->coords2.x; + gFieldEffectSpawnParams[1] = mapObject->coords2.y; + gFieldEffectSpawnParams[2] = sprite->subpriority - 1; + gFieldEffectSpawnParams[3] = sprite->oam.priority; task->data[1] = FieldEffectStart(FLDEFF_POP_OUT_OF_ASH); task->data[0]++; } else @@ -2064,9 +2064,9 @@ bool8 sub_80877D4(struct Task *task, struct MapObject *mapObject, struct Sprite u8 FldEff_PopOutOfAsh(void) { u8 spriteId; - sub_8060470((s16 *)&gUnknown_0202FF84[0], (s16 *)&gUnknown_0202FF84[1], 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[32], gUnknown_0202FF84[0], gUnknown_0202FF84[1], gUnknown_0202FF84[2]); - gSprites[spriteId].oam.priority = gUnknown_0202FF84[3]; + sub_8060470((s16 *)&gFieldEffectSpawnParams[0], (s16 *)&gFieldEffectSpawnParams[1], 8, 8); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[32], gFieldEffectSpawnParams[0], gFieldEffectSpawnParams[1], gFieldEffectSpawnParams[2]); + gSprites[spriteId].oam.priority = gFieldEffectSpawnParams[3]; gSprites[spriteId].coordOffsetEnabled = 1; return spriteId; } @@ -2392,19 +2392,19 @@ bool8 FldEff_FieldMoveShowMon(void) { taskId = CreateTask(sub_808847C, 0xff); } - gTasks[taskId].data[15] = sub_8088830(gUnknown_0202FF84[0], gUnknown_0202FF84[1], gUnknown_0202FF84[2]); + gTasks[taskId].data[15] = sub_8088830(gFieldEffectSpawnParams[0], gFieldEffectSpawnParams[1], gFieldEffectSpawnParams[2]); return FALSE; } bool8 FldEff_FieldMoveShowMonInit(void) { struct Pokemon *pokemon; - u32 flag = gUnknown_0202FF84[0] & 0x80000000; - pokemon = &gPlayerParty[(u8)gUnknown_0202FF84[0]]; - gUnknown_0202FF84[0] = GetMonData(pokemon, MON_DATA_SPECIES); - gUnknown_0202FF84[1] = GetMonData(pokemon, MON_DATA_OT_ID); - gUnknown_0202FF84[2] = GetMonData(pokemon, MON_DATA_PERSONALITY); - gUnknown_0202FF84[0] |= flag; + u32 flag = gFieldEffectSpawnParams[0] & 0x80000000; + pokemon = &gPlayerParty[(u8)gFieldEffectSpawnParams[0]]; + gFieldEffectSpawnParams[0] = GetMonData(pokemon, MON_DATA_SPECIES); + gFieldEffectSpawnParams[1] = GetMonData(pokemon, MON_DATA_OT_ID); + gFieldEffectSpawnParams[2] = GetMonData(pokemon, MON_DATA_PERSONALITY); + gFieldEffectSpawnParams[0] |= flag; FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON); FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); return FALSE; @@ -2879,7 +2879,7 @@ u8 FldEff_UseSurf(void) { u8 taskId; taskId = CreateTask(sub_8088954, 0xff); - gTasks[taskId].data[15] = gUnknown_0202FF84[0]; + gTasks[taskId].data[15] = gFieldEffectSpawnParams[0]; sav1_reset_battle_music_maybe(); sub_8053FB0(0x016d); return FALSE; @@ -2919,7 +2919,7 @@ void sub_8088A30(struct Task *task) mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; if (FieldObjectCheckIfSpecialAnimFinishedOrInactive(mapObject)) { - gUnknown_0202FF84[0] = task->data[15] | 0x80000000; + gFieldEffectSpawnParams[0] = task->data[15] | 0x80000000; FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); task->data[0]++; } @@ -2934,9 +2934,9 @@ void sub_8088A78(struct Task *task) sub_805B980(mapObject, GetPlayerAvatarGraphicsIdByStateId(3)); FieldObjectClearAnimIfSpecialAnimFinished(mapObject); FieldObjectSetSpecialAnim(mapObject, sub_80608D0(mapObject->placeholder18)); - gUnknown_0202FF84[0] = task->data[1]; - gUnknown_0202FF84[1] = task->data[2]; - gUnknown_0202FF84[2] = gPlayerAvatar.mapObjectId; + gFieldEffectSpawnParams[0] = task->data[1]; + gFieldEffectSpawnParams[1] = task->data[2]; + gFieldEffectSpawnParams[2] = gPlayerAvatar.mapObjectId; mapObject->mapobj_unk_1A = FieldEffectStart(FLDEFF_SURF_BLOB); task->data[0]++; } @@ -2970,7 +2970,7 @@ u8 FldEff_NPCFlyOut(void) sprite->oam.paletteNum = 0; sprite->oam.priority = 1; sprite->callback = sub_8088BC4; - sprite->data1 = gUnknown_0202FF84[0]; + sprite->data1 = gFieldEffectSpawnParams[0]; PlaySE(SE_W019); return spriteId; } @@ -3009,7 +3009,7 @@ u8 FldEff_UseFly(void) { u8 taskId; taskId = CreateTask(sub_8088C70, 0xfe); - gTasks[taskId].data[1] = gUnknown_0202FF84[0]; + gTasks[taskId].data[1] = gFieldEffectSpawnParams[0]; return 0; } @@ -3040,7 +3040,7 @@ void sub_8088CF8(struct Task *task) if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) { task->data[0]++; - gUnknown_0202FF84[0] = task->data[1]; + gFieldEffectSpawnParams[0] = task->data[1]; FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); } } diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 5a71559ba..d0b659131 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -249,15 +249,15 @@ bool8 FldEff_Shadow(void) const struct MapObjectGraphicsInfo *graphicsInfo; u8 spriteId; - mapObjectId = GetFieldObjectIdByLocalIdAndMap(gUnknown_0202FF84[0], gUnknown_0202FF84[1], gUnknown_0202FF84[2]); + mapObjectId = GetFieldObjectIdByLocalIdAndMap(gFieldEffectSpawnParams[0], gFieldEffectSpawnParams[1], gFieldEffectSpawnParams[2]); graphicsInfo = GetFieldObjectGraphicsInfo(gMapObjects[mapObjectId].graphicsId); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[gUnknown_08401E32[graphicsInfo->shadowSize]], 0, 0, 0x94); if (spriteId != MAX_SPRITES) { gSprites[spriteId].coordOffsetEnabled = TRUE; - gSprites[spriteId].data0 = gUnknown_0202FF84[0]; - gSprites[spriteId].data1 = gUnknown_0202FF84[1]; - gSprites[spriteId].data2 = gUnknown_0202FF84[2]; + gSprites[spriteId].data0 = gFieldEffectSpawnParams[0]; + gSprites[spriteId].data1 = gFieldEffectSpawnParams[1]; + gSprites[spriteId].data2 = gFieldEffectSpawnParams[2]; gSprites[spriteId].data3 = (graphicsInfo->height >> 1) - gUnknown_08401E36[graphicsInfo->shadowSize]; } return FALSE; @@ -294,22 +294,22 @@ bool8 FldEff_TallGrass(void) u8 spriteId; struct Sprite *sprite; - x = gUnknown_0202FF84[0]; - y = gUnknown_0202FF84[1]; + x = gFieldEffectSpawnParams[0]; + y = gFieldEffectSpawnParams[1]; sub_8060470(&x, &y, 8, 8); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[4], x, y, 0); if (spriteId != MAX_SPRITES) { sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; - sprite->oam.priority = gUnknown_0202FF84[3]; - sprite->data0 = gUnknown_0202FF84[2]; - sprite->data1 = gUnknown_0202FF84[0]; - sprite->data2 = gUnknown_0202FF84[1]; - sprite->data3 = gUnknown_0202FF84[4]; - sprite->data4 = gUnknown_0202FF84[5]; - sprite->data5 = gUnknown_0202FF84[6]; - if (gUnknown_0202FF84[7]) + sprite->oam.priority = gFieldEffectSpawnParams[3]; + sprite->data0 = gFieldEffectSpawnParams[2]; + sprite->data1 = gFieldEffectSpawnParams[0]; + sprite->data2 = gFieldEffectSpawnParams[1]; + sprite->data3 = gFieldEffectSpawnParams[4]; + sprite->data4 = gFieldEffectSpawnParams[5]; + sprite->data5 = gFieldEffectSpawnParams[6]; + if (gFieldEffectSpawnParams[7]) { SeekSpriteAnim(sprite, 4); } @@ -358,3 +358,21 @@ void unc_grass_normal(struct Sprite *sprite) sub_812882C(sprite, sprite->data0, metatileBehavior); } } + +bool8 FldEff_JumpTallGrass(void) +{ + u8 spriteId; + struct Sprite *sprite; + + sub_8060470((s16 *)&gFieldEffectSpawnParams[0], (s16 *)&gFieldEffectSpawnParams[1], 8, 12); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[10], gFieldEffectSpawnParams[0], gFieldEffectSpawnParams[1], 0); + if (spriteId != MAX_SPRITES) + { + sprite = &gSprites[spriteId]; + sprite->coordOffsetEnabled = TRUE; + sprite->oam.priority = gFieldEffectSpawnParams[3]; + sprite->data0 = gFieldEffectSpawnParams[2]; + sprite->data1 = 12; + } + return FALSE; +} diff --git a/src/field_ground_effect.c b/src/field_ground_effect.c index b9935463b..e50811a78 100644 --- a/src/field_ground_effect.c +++ b/src/field_ground_effect.c @@ -460,18 +460,18 @@ void GroundEffect_SpawnOnTallGrass(struct MapObject *mapObj, struct Sprite *spri { u8 *ptr; - gUnknown_0202FF84[0] = mapObj->coords2.x; - gUnknown_0202FF84[1] = mapObj->coords2.y; - gUnknown_0202FF84[2] = mapObj->elevation; - gUnknown_0202FF84[3] = 2; - gUnknown_0202FF84[4] = (mapObj->localId << 8) | mapObj->mapNum; - gUnknown_0202FF84[5] = mapObj->mapGroup; + gFieldEffectSpawnParams[0] = mapObj->coords2.x; + gFieldEffectSpawnParams[1] = mapObj->coords2.y; + gFieldEffectSpawnParams[2] = mapObj->elevation; + gFieldEffectSpawnParams[3] = 2; + gFieldEffectSpawnParams[4] = (mapObj->localId << 8) | mapObj->mapNum; + gFieldEffectSpawnParams[5] = mapObj->mapGroup; ptr = (u8 *)&gSaveBlock1; - gUnknown_0202FF84[6] = ((u8)gSaveBlock1.location.mapNum << 8) + gFieldEffectSpawnParams[6] = ((u8)gSaveBlock1.location.mapNum << 8) | (u8)gSaveBlock1.location.mapGroup; - gUnknown_0202FF84[7] = 1; + gFieldEffectSpawnParams[7] = 1; FieldEffectStart(4); } @@ -479,18 +479,18 @@ void sub_8063E94(struct MapObject *mapObj, struct Sprite *sprite) { u8 *ptr; - gUnknown_0202FF84[0] = mapObj->coords2.x; - gUnknown_0202FF84[1] = mapObj->coords2.y; - gUnknown_0202FF84[2] = mapObj->elevation; - gUnknown_0202FF84[3] = 2; - gUnknown_0202FF84[4] = (mapObj->localId << 8) | mapObj->mapNum; - gUnknown_0202FF84[5] = mapObj->mapGroup; + gFieldEffectSpawnParams[0] = mapObj->coords2.x; + gFieldEffectSpawnParams[1] = mapObj->coords2.y; + gFieldEffectSpawnParams[2] = mapObj->elevation; + gFieldEffectSpawnParams[3] = 2; + gFieldEffectSpawnParams[4] = (mapObj->localId << 8) | mapObj->mapNum; + gFieldEffectSpawnParams[5] = mapObj->mapGroup; ptr = (u8 *)&gSaveBlock1; - gUnknown_0202FF84[6] = ((u8)gSaveBlock1.location.mapNum << 8) + gFieldEffectSpawnParams[6] = ((u8)gSaveBlock1.location.mapNum << 8) | (u8)gSaveBlock1.location.mapGroup; - gUnknown_0202FF84[7] = 0; + gFieldEffectSpawnParams[7] = 0; FieldEffectStart(4); } @@ -498,18 +498,18 @@ void sub_8063EE0(struct MapObject *mapObj, struct Sprite *sprite) { u8 *ptr; - gUnknown_0202FF84[0] = mapObj->coords2.x; - gUnknown_0202FF84[1] = mapObj->coords2.y; - gUnknown_0202FF84[2] = mapObj->elevation; - gUnknown_0202FF84[3] = 2; - gUnknown_0202FF84[4] = (mapObj->localId << 8) | mapObj->mapNum; - gUnknown_0202FF84[5] = mapObj->mapGroup; + gFieldEffectSpawnParams[0] = mapObj->coords2.x; + gFieldEffectSpawnParams[1] = mapObj->coords2.y; + gFieldEffectSpawnParams[2] = mapObj->elevation; + gFieldEffectSpawnParams[3] = 2; + gFieldEffectSpawnParams[4] = (mapObj->localId << 8) | mapObj->mapNum; + gFieldEffectSpawnParams[5] = mapObj->mapGroup; ptr = (u8 *)&gSaveBlock1; - gUnknown_0202FF84[6] = ((u8)gSaveBlock1.location.mapNum << 8) + gFieldEffectSpawnParams[6] = ((u8)gSaveBlock1.location.mapNum << 8) | (u8)gSaveBlock1.location.mapGroup; - gUnknown_0202FF84[7] = 1; + gFieldEffectSpawnParams[7] = 1; FieldEffectStart(17); } @@ -517,18 +517,18 @@ void sub_8063F2C(struct MapObject *mapObj, struct Sprite *sprite) { u8 *ptr; - gUnknown_0202FF84[0] = mapObj->coords2.x; - gUnknown_0202FF84[1] = mapObj->coords2.y; - gUnknown_0202FF84[2] = mapObj->elevation; - gUnknown_0202FF84[3] = 2; - gUnknown_0202FF84[4] = (mapObj->localId << 8) | mapObj->mapNum; - gUnknown_0202FF84[5] = mapObj->mapGroup; + gFieldEffectSpawnParams[0] = mapObj->coords2.x; + gFieldEffectSpawnParams[1] = mapObj->coords2.y; + gFieldEffectSpawnParams[2] = mapObj->elevation; + gFieldEffectSpawnParams[3] = 2; + gFieldEffectSpawnParams[4] = (mapObj->localId << 8) | mapObj->mapNum; + gFieldEffectSpawnParams[5] = mapObj->mapGroup; ptr = (u8 *)&gSaveBlock1; - gUnknown_0202FF84[6] = ((u8)gSaveBlock1.location.mapNum << 8) + gFieldEffectSpawnParams[6] = ((u8)gSaveBlock1.location.mapNum << 8) | (u8)gSaveBlock1.location.mapGroup; - gUnknown_0202FF84[7] = 0; + gFieldEffectSpawnParams[7] = 0; FieldEffectStart(17); } @@ -572,11 +572,11 @@ static void DoTracksGroundEffect_Footprints(struct MapObject *mapObj, struct Spr // First half-word is a Field Effect script id. (gFieldEffectScriptPointers) u16 sandFootprints_FieldEffectData[2] = { 0xD, 0x18 }; - gUnknown_0202FF84[0] = mapObj->coords3.x; - gUnknown_0202FF84[1] = mapObj->coords3.y; - gUnknown_0202FF84[2] = 149; - gUnknown_0202FF84[3] = 2; - gUnknown_0202FF84[4] = mapObj->mapobj_unk_18; + gFieldEffectSpawnParams[0] = mapObj->coords3.x; + gFieldEffectSpawnParams[1] = mapObj->coords3.y; + gFieldEffectSpawnParams[2] = 149; + gFieldEffectSpawnParams[3] = 2; + gFieldEffectSpawnParams[4] = mapObj->mapobj_unk_18; FieldEffectStart(sandFootprints_FieldEffectData[a]); } @@ -598,11 +598,11 @@ static void DoTracksGroundEffect_BikeTireTracks( if (mapObj->coords2.x != mapObj->coords3.x || mapObj->coords2.y != mapObj->coords3.y) { - gUnknown_0202FF84[0] = mapObj->coords3.x; - gUnknown_0202FF84[1] = mapObj->coords3.y; - gUnknown_0202FF84[2] = 149; - gUnknown_0202FF84[3] = 2; - gUnknown_0202FF84[4] = + gFieldEffectSpawnParams[0] = mapObj->coords3.x; + gFieldEffectSpawnParams[1] = mapObj->coords3.y; + gFieldEffectSpawnParams[2] = 149; + gFieldEffectSpawnParams[3] = 2; + gFieldEffectSpawnParams[4] = bikeTireTracks_Transitions[mapObj->mapobj_unk_20][mapObj->mapobj_unk_18 - 5]; FieldEffectStart(FLDEFF_BIKE_TIRE_TRACKS); } @@ -627,10 +627,10 @@ void GroundEffect_JumpOnTallGrass(struct MapObject *mapObj, struct Sprite *sprit { u8 spriteId; - gUnknown_0202FF84[0] = mapObj->coords2.x; - gUnknown_0202FF84[1] = mapObj->coords2.y; - gUnknown_0202FF84[2] = mapObj->elevation; - gUnknown_0202FF84[3] = 2; + gFieldEffectSpawnParams[0] = mapObj->coords2.x; + gFieldEffectSpawnParams[1] = mapObj->coords2.y; + gFieldEffectSpawnParams[2] = mapObj->elevation; + gFieldEffectSpawnParams[3] = 2; FieldEffectStart(FLDEFF_JUMP_TALL_GRASS); spriteId = sub_8126FF0( @@ -642,37 +642,37 @@ void GroundEffect_JumpOnTallGrass(struct MapObject *mapObj, struct Sprite *sprit void GroundEffect_JumpOnLongGrass(struct MapObject *mapObj, struct Sprite *sprite) { - gUnknown_0202FF84[0] = mapObj->coords2.x; - gUnknown_0202FF84[1] = mapObj->coords2.y; - gUnknown_0202FF84[2] = mapObj->elevation; - gUnknown_0202FF84[3] = 2; + gFieldEffectSpawnParams[0] = mapObj->coords2.x; + gFieldEffectSpawnParams[1] = mapObj->coords2.y; + gFieldEffectSpawnParams[2] = mapObj->elevation; + gFieldEffectSpawnParams[3] = 2; FieldEffectStart(FLDEFF_JUMP_LONG_GRASS); } void GroundEffect_JumpOnShallowWater(struct MapObject *mapObj, struct Sprite *sprite) { - gUnknown_0202FF84[0] = mapObj->coords2.x; - gUnknown_0202FF84[1] = mapObj->coords2.y; - gUnknown_0202FF84[2] = mapObj->elevation; - gUnknown_0202FF84[3] = sprite->oam.priority; + gFieldEffectSpawnParams[0] = mapObj->coords2.x; + gFieldEffectSpawnParams[1] = mapObj->coords2.y; + gFieldEffectSpawnParams[2] = mapObj->elevation; + gFieldEffectSpawnParams[3] = sprite->oam.priority; FieldEffectStart(FLDEFF_JUMP_SMALL_SPLASH); } void GroundEffect_JumpOnWater(struct MapObject *mapObj, struct Sprite *sprite) { - gUnknown_0202FF84[0] = mapObj->coords2.x; - gUnknown_0202FF84[1] = mapObj->coords2.y; - gUnknown_0202FF84[2] = mapObj->elevation; - gUnknown_0202FF84[3] = sprite->oam.priority; + gFieldEffectSpawnParams[0] = mapObj->coords2.x; + gFieldEffectSpawnParams[1] = mapObj->coords2.y; + gFieldEffectSpawnParams[2] = mapObj->elevation; + gFieldEffectSpawnParams[3] = sprite->oam.priority; FieldEffectStart(FLDEFF_JUMP_BIG_SPLASH); } void GroundEffect_JumpLandingDust(struct MapObject *mapObj, struct Sprite *sprite) { - gUnknown_0202FF84[0] = mapObj->coords2.x; - gUnknown_0202FF84[1] = mapObj->coords2.y; - gUnknown_0202FF84[2] = mapObj->elevation; - gUnknown_0202FF84[3] = sprite->oam.priority; + gFieldEffectSpawnParams[0] = mapObj->coords2.x; + gFieldEffectSpawnParams[1] = mapObj->coords2.y; + gFieldEffectSpawnParams[2] = mapObj->elevation; + gFieldEffectSpawnParams[3] = sprite->oam.priority; FieldEffectStart(FLDEFF_DUST); } @@ -688,8 +688,8 @@ void GroundEffect_HotSprings(struct MapObject *mapObj, struct Sprite *sprite) void GroundEffect_Seaweed(struct MapObject *mapObj, struct Sprite *sprite) { - gUnknown_0202FF84[0] = mapObj->coords2.x; - gUnknown_0202FF84[1] = mapObj->coords2.y; + gFieldEffectSpawnParams[0] = mapObj->coords2.x; + gFieldEffectSpawnParams[1] = mapObj->coords2.y; FieldEffectStart(FLDEFF_BUBBLES); } diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 1568432f5..dc72981bb 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -3895,10 +3895,10 @@ u8 do_berry_tree_growth_sparkle_1(struct MapObject *mapObject, struct Sprite *sp { if (!(sprite->data7 & 4) && sprite->animNum == 4) { - gUnknown_0202FF84[0] = mapObject->coords2.x; - gUnknown_0202FF84[1] = mapObject->coords2.y; - gUnknown_0202FF84[2] = sprite->subpriority - 1; - gUnknown_0202FF84[3] = sprite->oam.priority; + gFieldEffectSpawnParams[0] = mapObject->coords2.x; + gFieldEffectSpawnParams[1] = mapObject->coords2.y; + gFieldEffectSpawnParams[2] = sprite->subpriority - 1; + gFieldEffectSpawnParams[3] = sprite->oam.priority; FieldEffectStart(0x17); sprite->animNum = 0; } @@ -3934,10 +3934,10 @@ u8 do_berry_tree_growth_sparkle_2(struct MapObject *mapObject, struct Sprite *sp sprite->data1 = 3; sprite->data2 = 0; sprite->data7 |= 2; - gUnknown_0202FF84[0] = mapObject->coords2.x; - gUnknown_0202FF84[1] = mapObject->coords2.y; - gUnknown_0202FF84[2] = sprite->subpriority - 1; - gUnknown_0202FF84[3] = sprite->oam.priority; + gFieldEffectSpawnParams[0] = mapObject->coords2.x; + gFieldEffectSpawnParams[1] = mapObject->coords2.y; + gFieldEffectSpawnParams[2] = sprite->subpriority - 1; + gFieldEffectSpawnParams[3] = sprite->oam.priority; FieldEffectStart(0x17); return 1; } @@ -5086,7 +5086,7 @@ void FieldObjectCB_TreeDisguise(struct Sprite *sprite) mapObject = &gMapObjects[sprite->data0]; if (mapObject->mapobj_unk_21 == 0 || (mapObject->mapobj_unk_21 == 1 && sprite->data7 == 0)) { - FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gUnknown_0202FF84[0], (u8 *)&gUnknown_0202FF84[1], (u8 *)&gUnknown_0202FF84[2]); + FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectSpawnParams[0], (u8 *)&gFieldEffectSpawnParams[1], (u8 *)&gFieldEffectSpawnParams[2]); mapObject->mapobj_unk_1A = FieldEffectStart(0x1c); mapObject->mapobj_unk_21 = 1; sprite->data7 ++; @@ -5106,7 +5106,7 @@ void FieldObjectCB_MountainDisguise(struct Sprite *sprite) mapObject = &gMapObjects[sprite->data0]; if (mapObject->mapobj_unk_21 == 0 || (mapObject->mapobj_unk_21 == 1 && sprite->data7 == 0)) { - FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gUnknown_0202FF84[0], (u8 *)&gUnknown_0202FF84[1], (u8 *)&gUnknown_0202FF84[2]); + FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectSpawnParams[0], (u8 *)&gFieldEffectSpawnParams[1], (u8 *)&gFieldEffectSpawnParams[2]); mapObject->mapobj_unk_1A = FieldEffectStart(0x1d); mapObject->mapobj_unk_21 = 1; sprite->data7 ++; @@ -7490,7 +7490,7 @@ bool8 sub_8062644(struct MapObject *mapObject, struct Sprite *sprite) bool8 do_exclamation_mark_bubble_1(struct MapObject *mapObject, struct Sprite *sprite) { - FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gUnknown_0202FF84[0], (u8 *)&gUnknown_0202FF84[1], (u8 *)&gUnknown_0202FF84[2]); + FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectSpawnParams[0], (u8 *)&gFieldEffectSpawnParams[1], (u8 *)&gFieldEffectSpawnParams[2]); FieldEffectStart(0x0); sprite->data2 = 1; return TRUE; @@ -7498,7 +7498,7 @@ bool8 do_exclamation_mark_bubble_1(struct MapObject *mapObject, struct Sprite *s bool8 do_exclamation_mark_bubble_2(struct MapObject *mapObject, struct Sprite *sprite) { - FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gUnknown_0202FF84[0], (u8 *)&gUnknown_0202FF84[1], (u8 *)&gUnknown_0202FF84[2]); + FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectSpawnParams[0], (u8 *)&gFieldEffectSpawnParams[1], (u8 *)&gFieldEffectSpawnParams[2]); FieldEffectStart(0x21); sprite->data2 = 1; return TRUE; @@ -7506,7 +7506,7 @@ bool8 do_exclamation_mark_bubble_2(struct MapObject *mapObject, struct Sprite *s bool8 do_heart_bubble(struct MapObject *mapObject, struct Sprite *sprite) { - FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gUnknown_0202FF84[0], (u8 *)&gUnknown_0202FF84[1], (u8 *)&gUnknown_0202FF84[2]); + FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectSpawnParams[0], (u8 *)&gFieldEffectSpawnParams[1], (u8 *)&gFieldEffectSpawnParams[2]); FieldEffectStart(0x2e); sprite->data2 = 1; return TRUE; diff --git a/src/field_map_obj_helpers.c b/src/field_map_obj_helpers.c index 87be8e011..d8cb33251 100644 --- a/src/field_map_obj_helpers.c +++ b/src/field_map_obj_helpers.c @@ -294,7 +294,7 @@ void sub_8064990(u8 a1, u8 dir) u32 oe_exec_and_other_stuff(u8 fieldEffectId, struct MapObject *mapObject) { - FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gUnknown_0202FF84[0], (u8 *)&gUnknown_0202FF84[1], (u8 *)&gUnknown_0202FF84[2]); + FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectSpawnParams[0], (u8 *)&gFieldEffectSpawnParams[1], (u8 *)&gFieldEffectSpawnParams[2]); return FieldEffectStart(fieldEffectId); } @@ -310,9 +310,9 @@ void DoShadowFieldEffect(struct MapObject *mapObject) void DoRippleFieldEffect(struct MapObject *mapObject, struct Sprite *sprite) { const struct MapObjectGraphicsInfo *gfxInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId); - gUnknown_0202FF84[0] = sprite->pos1.x; - gUnknown_0202FF84[1] = sprite->pos1.y + (gfxInfo->height >> 1) - 2; - gUnknown_0202FF84[2] = 151; - gUnknown_0202FF84[3] = 3; + gFieldEffectSpawnParams[0] = sprite->pos1.x; + gFieldEffectSpawnParams[1] = sprite->pos1.y + (gfxInfo->height >> 1) - 2; + gFieldEffectSpawnParams[2] = 151; + gFieldEffectSpawnParams[3] = 3; FieldEffectStart(5); } diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index 2a7b2f3e0..b055036ea 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -666,9 +666,9 @@ void PlayerAvatarTransition_Surfing(struct MapObject *a) sub_805B980(a, GetPlayerAvatarGraphicsIdByStateId(3)); FieldObjectTurn(a, a->placeholder18); SetPlayerAvatarStateMask(8); - gUnknown_0202FF84[0] = a->coords2.x; - gUnknown_0202FF84[1] = a->coords2.y; - gUnknown_0202FF84[2] = gPlayerAvatar.mapObjectId; + gFieldEffectSpawnParams[0] = a->coords2.x; + gFieldEffectSpawnParams[1] = a->coords2.y; + gFieldEffectSpawnParams[2] = gPlayerAvatar.mapObjectId; unk = FieldEffectStart(8); a->mapobj_unk_1A = unk; sub_8127ED0(unk, 1); @@ -1226,10 +1226,10 @@ u8 sub_8059EA4(struct Task *task, struct MapObject *b, struct MapObject *c) FieldObjectClearAnimIfSpecialAnimFinished(c); FieldObjectSetSpecialAnim(b, GetStepInPlaceDelay16AnimId(task->data[2])); FieldObjectSetSpecialAnim(c, GetSimpleGoAnimId(task->data[2])); - gUnknown_0202FF84[0] = c->coords2.x; - gUnknown_0202FF84[1] = c->coords2.y; - gUnknown_0202FF84[2] = c->elevation; - gUnknown_0202FF84[3] = gSprites[c->spriteId].oam.priority; + gFieldEffectSpawnParams[0] = c->coords2.x; + gFieldEffectSpawnParams[1] = c->coords2.y; + gFieldEffectSpawnParams[2] = c->elevation; + gFieldEffectSpawnParams[3] = gSprites[c->spriteId].oam.priority; FieldEffectStart(10); PlaySE(SE_W070); task->data[0]++; diff --git a/src/fldeff_cut.c b/src/fldeff_cut.c index b394d1e4c..d0fdd5139 100644 --- a/src/fldeff_cut.c +++ b/src/fldeff_cut.c @@ -71,7 +71,7 @@ bool8 SetUpFieldMove_Cut(void) void sub_80A25E8(void) { FieldEffectStart(1); - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + gFieldEffectSpawnParams[0] = gLastFieldPokeMenuOpened; } bool8 FldEff_UseCutOnGrass(void) @@ -86,7 +86,7 @@ bool8 FldEff_UseCutOnGrass(void) void sub_80A2634(void) { - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + gFieldEffectSpawnParams[0] = gLastFieldPokeMenuOpened; ScriptContext1_SetupScript(&UseCutScript); } diff --git a/src/fldeff_flash.c b/src/fldeff_flash.c index 6c2633567..df05de52b 100644 --- a/src/fldeff_flash.c +++ b/src/fldeff_flash.c @@ -62,7 +62,7 @@ bool8 SetUpFieldMove_Flash(void) void sub_810CBFC(void) { u8 taskId = oei_task_add(); - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + gFieldEffectSpawnParams[0] = gLastFieldPokeMenuOpened; gTasks[taskId].data[8] = (uintptr_t)sub_810CC34 >> 16; gTasks[taskId].data[9] = (uintptr_t)sub_810CC34; } diff --git a/src/fldeff_strength.c b/src/fldeff_strength.c index 81f4f63c6..a5033e7b7 100644 --- a/src/fldeff_strength.c +++ b/src/fldeff_strength.c @@ -42,13 +42,13 @@ bool8 SetUpFieldMove_Strength(void) static void sub_811AA18(void) { - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + gFieldEffectSpawnParams[0] = gLastFieldPokeMenuOpened; ScriptContext1_SetupScript(UseStrengthScript); } static void sub_811AA38(void) { - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + gFieldEffectSpawnParams[0] = gLastFieldPokeMenuOpened; FieldEffectStart(40); } @@ -58,7 +58,7 @@ bool8 FldEff_UseStrength(void) gTasks[taskId].data[8] = (u32)sub_811AA9C >> 16; gTasks[taskId].data[9] = (u32)sub_811AA9C; - GetMonNickname(&gPlayerParty[gUnknown_0202FF84[0]], gStringVar1); + GetMonNickname(&gPlayerParty[gFieldEffectSpawnParams[0]], gStringVar1); return FALSE; } diff --git a/src/fldeff_sweetscent.c b/src/fldeff_sweetscent.c index 4c3e6bf4a..66fa3dae2 100644 --- a/src/fldeff_sweetscent.c +++ b/src/fldeff_sweetscent.c @@ -31,7 +31,7 @@ bool8 SetUpFieldMove_SweetScent(void) static void sub_812BFD4(void) { FieldEffectStart(51); - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + gFieldEffectSpawnParams[0] = gLastFieldPokeMenuOpened; } bool8 FldEff_SweetScent() diff --git a/src/fldeff_teleport.c b/src/fldeff_teleport.c index 74e68df06..8f75099dc 100644 --- a/src/fldeff_teleport.c +++ b/src/fldeff_teleport.c @@ -27,7 +27,7 @@ void hm_teleport_run_dp02scr(void) { new_game(); FieldEffectStart(63); - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + gFieldEffectSpawnParams[0] = gLastFieldPokeMenuOpened; } bool8 FldEff_UseTeleport(void) diff --git a/src/pokemon_menu.c b/src/pokemon_menu.c index 821101569..94801f1a2 100644 --- a/src/pokemon_menu.c +++ b/src/pokemon_menu.c @@ -786,7 +786,7 @@ static void sub_808ABA8(u8 taskID) { if (sub_807D770() == TRUE) { - gUnknown_0202FF84[0] = GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_SPECIES); + gFieldEffectSpawnParams[0] = GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_SPECIES); gUnknown_03005CE4(); DestroyTask(taskID); } @@ -803,7 +803,7 @@ static void sub_808ABF4(u8 taskID) static void sub_808AC2C(void) { - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + gFieldEffectSpawnParams[0] = gLastFieldPokeMenuOpened; FieldEffectStart(FLDEFF_USE_SURF); } @@ -821,7 +821,7 @@ static bool8 SetUpFieldMove_Surf(void) static void sub_808AC8C(void) { - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + gFieldEffectSpawnParams[0] = gLastFieldPokeMenuOpened; FieldEffectStart(FLDEFF_USE_FLY); } @@ -872,14 +872,14 @@ u16 unref_sub_808AD88(void) static void sub_808ADAC(void) { - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + gFieldEffectSpawnParams[0] = gLastFieldPokeMenuOpened; FieldEffectStart(FLDEFF_USE_DIVE); } static bool8 SetUpFieldMove_Dive(void) { - gUnknown_0202FF84[1] = sub_8068F18(); - if (gUnknown_0202FF84[1]) + gFieldEffectSpawnParams[1] = sub_8068F18(); + if (gFieldEffectSpawnParams[1]) { gFieldCallback = sub_808AB90; gUnknown_03005CE4 = sub_808ADAC; @@ -891,7 +891,7 @@ static bool8 SetUpFieldMove_Dive(void) static void sub_808AE08(void) { - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + gFieldEffectSpawnParams[0] = gLastFieldPokeMenuOpened; FieldEffectStart(FLDEFF_USE_WATERFALL); } diff --git a/src/rom6.c b/src/rom6.c index ff032b6c2..1f72eba93 100644 --- a/src/rom6.c +++ b/src/rom6.c @@ -91,17 +91,17 @@ static void sub_810B428(u8 taskId) { if (!FieldEffectActiveListContains(6)) { - gUnknown_0202FF84[1] = player_get_direction_lower_nybble(); - if (gUnknown_0202FF84[1] == 1) - gUnknown_0202FF84[2] = 0; - if (gUnknown_0202FF84[1] == 2) - gUnknown_0202FF84[2] = 1; - if (gUnknown_0202FF84[1] == 3) - gUnknown_0202FF84[2] = 2; - if (gUnknown_0202FF84[1] == 4) - gUnknown_0202FF84[2] = 3; + gFieldEffectSpawnParams[1] = player_get_direction_lower_nybble(); + if (gFieldEffectSpawnParams[1] == 1) + gFieldEffectSpawnParams[2] = 0; + if (gFieldEffectSpawnParams[1] == 2) + gFieldEffectSpawnParams[2] = 1; + if (gFieldEffectSpawnParams[1] == 3) + gFieldEffectSpawnParams[2] = 2; + if (gFieldEffectSpawnParams[1] == 4) + gFieldEffectSpawnParams[2] = 3; sub_805B980(&gMapObjects[gPlayerAvatar.mapObjectId], GetPlayerAvatarGraphicsIdByCurrentState()); - StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], gUnknown_0202FF84[2]); + StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], gFieldEffectSpawnParams[2]); FieldEffectActiveListRemove(6); gTasks[taskId].func = sub_810B4CC; } @@ -132,7 +132,7 @@ bool8 SetUpFieldMove_RockSmash(void) static void sub_810B53C(void) { - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + gFieldEffectSpawnParams[0] = gLastFieldPokeMenuOpened; ScriptContext1_SetupScript(UseRockSmashScript); } @@ -171,7 +171,7 @@ static void sub_810B5D8(void) { sub_8053014(); FieldEffectStart(0x26); - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + gFieldEffectSpawnParams[0] = gLastFieldPokeMenuOpened; } int FldEff_UseDig(void) diff --git a/src/scrcmd.c b/src/scrcmd.c index 66578f350..752aafe35 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -1724,7 +1724,7 @@ bool8 ScrCmd_doanimation(struct ScriptContext *ctx) bool8 ScrCmd_setanimation(struct ScriptContext *ctx) { u8 v2 = ScriptReadByte(ctx); - gUnknown_0202FF84[v2] = (s16)VarGet(ScriptReadHalfword(ctx)); + gFieldEffectSpawnParams[v2] = (s16)VarGet(ScriptReadHalfword(ctx)); return FALSE; } diff --git a/src/trainer_see.c b/src/trainer_see.c index feb35c67c..73dba2d60 100644 --- a/src/trainer_see.c +++ b/src/trainer_see.c @@ -201,7 +201,7 @@ s8 sub_8084398(u8 taskId, struct Task *task, struct MapObject *trainerObj) { u8 direction; - FieldObjectGetLocalIdAndMap(trainerObj, (u8 *)&gUnknown_0202FF84[0], (u8 *)&gUnknown_0202FF84[1], (u8 *)&gUnknown_0202FF84[2]); + FieldObjectGetLocalIdAndMap(trainerObj, (u8 *)&gFieldEffectSpawnParams[0], (u8 *)&gFieldEffectSpawnParams[1], (u8 *)&gFieldEffectSpawnParams[2]); FieldEffectStart(0); direction = GetFaceDirectionAnimId(trainerObj->mapobj_unk_18); @@ -311,10 +311,10 @@ s8 sub_80845FC(u8 taskId, struct Task *task, struct MapObject *trainerObj) { if (FieldObjectCheckIfSpecialAnimFinishedOrInactive(trainerObj)) { - gUnknown_0202FF84[0] = trainerObj->coords2.x; - gUnknown_0202FF84[1] = trainerObj->coords2.y; - gUnknown_0202FF84[2] = gSprites[trainerObj->spriteId].subpriority - 1; - gUnknown_0202FF84[3] = 2; + gFieldEffectSpawnParams[0] = trainerObj->coords2.x; + gFieldEffectSpawnParams[1] = trainerObj->coords2.y; + gFieldEffectSpawnParams[2] = gSprites[trainerObj->spriteId].subpriority - 1; + gFieldEffectSpawnParams[3] = 2; task->data[4] = FieldEffectStart(49); task->data[0]++; } @@ -421,9 +421,9 @@ void sub_8084894(struct Sprite *sprite, u16 a2, u8 a3) sprite->oam.priority = 1; sprite->coordOffsetEnabled = 1; - sprite->data0 = gUnknown_0202FF84[0]; - sprite->data1 = gUnknown_0202FF84[1]; - sprite->data2 = gUnknown_0202FF84[2]; + sprite->data0 = gFieldEffectSpawnParams[0]; + sprite->data1 = gFieldEffectSpawnParams[1]; + sprite->data2 = gFieldEffectSpawnParams[2]; sprite->data3 = -5; sprite->data7 = a2; -- cgit v1.2.3 From db5f08aead7b5dcc8253620fd792b72c8de7def6 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Sep 2017 18:05:44 -0400 Subject: sub_8126FF0 --- asm/field_effect_helpers.s | 76 ------------------------------------------ include/field_effect_helpers.h | 2 +- src/field_effect_helpers.c | 19 +++++++++++ 3 files changed, 20 insertions(+), 77 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index e5875f1f7..8b7225604 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,82 +6,6 @@ .text - thumb_func_start sub_8126FF0 -sub_8126FF0: @ 8126FF0 - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r4, [sp, 0x18] - lsls r0, 24 - lsrs r0, 24 - mov r12, r0 - lsls r1, 24 - lsrs r7, r1, 24 - lsls r2, 24 - lsrs r6, r2, 24 - movs r5, 0 - ldr r0, _08127060 @ =gSprites - mov r8, r0 - lsls r3, 16 - asrs r3, 16 - lsls r4, 16 - asrs r4, 16 -_08127014: - lsls r0, r5, 4 - adds r0, r5 - lsls r0, 2 - mov r1, r8 - adds r2, r0, r1 - adds r0, r2, 0 - adds r0, 0x3E - ldrb r0, [r0] - lsls r0, 31 - cmp r0, 0 - beq _08127068 - ldr r1, [r2, 0x1C] - ldr r0, _08127064 @ =unc_grass_normal - cmp r1, r0 - bne _08127068 - movs r1, 0x30 - ldrsh r0, [r2, r1] - cmp r3, r0 - bne _08127068 - movs r1, 0x32 - ldrsh r0, [r2, r1] - cmp r4, r0 - bne _08127068 - ldrh r1, [r2, 0x34] - lsrs r0, r1, 8 - cmp r12, r0 - bne _08127068 - movs r0, 0xFF - ands r0, r1 - cmp r7, r0 - bne _08127068 - movs r1, 0x36 - ldrsh r0, [r2, r1] - cmp r6, r0 - bne _08127068 - adds r0, r5, 0 - b _08127074 - .align 2, 0 -_08127060: .4byte gSprites -_08127064: .4byte unc_grass_normal -_08127068: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x3F - bls _08127014 - movs r0, 0x40 -_08127074: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8126FF0 - thumb_func_start FldEff_LongGrass FldEff_LongGrass: @ 8127080 push {r4,r5,lr} diff --git a/include/field_effect_helpers.h b/include/field_effect_helpers.h index bd0acbff6..482f7e87e 100644 --- a/include/field_effect_helpers.h +++ b/include/field_effect_helpers.h @@ -31,6 +31,6 @@ u8 sub_8128124(u8 id); void ash(s16, s16, u16, u8); void SetUpReflection(struct MapObject *mapObj, struct Sprite *sprite, u8 a); u32 oe_exec_and_other_stuff(u8 fieldEffectId, struct MapObject *mapObject); -u8 sub_8126FF0(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y); +u8 sub_8126FF0(u8, u8, u8, s16, s16); #endif // GUARD_FIELD_EFFECT_HELPERS_H diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index d0b659131..cb4adbb43 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -376,3 +376,22 @@ bool8 FldEff_JumpTallGrass(void) } return FALSE; } + +u8 sub_8126FF0(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y) +{ + struct Sprite *sprite; + u8 i; + + for (i = 0; i < MAX_SPRITES; i ++) + { + if (gSprites[i].inUse) + { + sprite = &gSprites[i]; + if (sprite->callback == unc_grass_normal && (x == sprite->data1 && y == sprite->data2) && (localId == (u8)(sprite->data3 >> 8) && mapNum == (sprite->data3 & 0xFF) && mapGroup == sprite->data4)) + { + return i; + } + } + } + return MAX_SPRITES; +} -- cgit v1.2.3 From 9d2c7a60b0e4860d8d9fbf5a478217f0f88eb454 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Sep 2017 18:20:09 -0400 Subject: FldEff_LongGrass --- asm/field_effect_helpers.s | 82 ---------------------------------------------- src/field_effect_helpers.c | 31 ++++++++++++++++++ 2 files changed, 31 insertions(+), 82 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 8b7225604..5f6b60bbd 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,88 +6,6 @@ .text - thumb_func_start FldEff_LongGrass -FldEff_LongGrass: @ 8127080 - push {r4,r5,lr} - sub sp, 0x4 - ldr r5, _0812711C @ =gFieldEffectSpawnParams - ldrh r1, [r5] - mov r0, sp - strh r1, [r0] - ldrh r0, [r5, 0x4] - mov r4, sp - adds r4, 0x2 - strh r0, [r4] - mov r0, sp - adds r1, r4, 0 - movs r2, 0x8 - movs r3, 0x8 - bl sub_8060470 - ldr r0, _08127120 @ =gFieldEffectObjectTemplatePointers - ldr r0, [r0, 0x3C] - mov r1, sp - movs r2, 0 - ldrsh r1, [r1, r2] - movs r3, 0 - ldrsh r2, [r4, r3] - movs r3, 0 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x40 - beq _08127110 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08127124 @ =gSprites - adds r4, r0, r1 - adds r2, r4, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x2 - orrs r0, r1 - strb r0, [r2] - ldrb r0, [r5, 0x8] - bl ZCoordToPriority - movs r1, 0x3 - ands r1, r0 - lsls r1, 2 - ldrb r2, [r4, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, 0x5] - ldr r0, [r5, 0x8] - strh r0, [r4, 0x2E] - ldr r0, [r5] - strh r0, [r4, 0x30] - ldr r0, [r5, 0x4] - strh r0, [r4, 0x32] - ldr r0, [r5, 0x10] - strh r0, [r4, 0x34] - ldr r0, [r5, 0x14] - strh r0, [r4, 0x36] - ldr r0, [r5, 0x18] - strh r0, [r4, 0x38] - ldr r0, [r5, 0x1C] - cmp r0, 0 - beq _08127110 - adds r0, r4, 0 - movs r1, 0x6 - bl SeekSpriteAnim -_08127110: - movs r0, 0 - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0812711C: .4byte gFieldEffectSpawnParams -_08127120: .4byte gFieldEffectObjectTemplatePointers -_08127124: .4byte gSprites - thumb_func_end FldEff_LongGrass - thumb_func_start unc_grass_tall unc_grass_tall: @ 8127128 push {r4-r7,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index cb4adbb43..b71a36122 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -13,6 +13,7 @@ #include "field_map_obj_helpers.h" #include "field_weather.h" #include "field_effect.h" +#include "field_ground_effect.h" #include "field_effect_helpers.h" // Static type declarations @@ -395,3 +396,33 @@ u8 sub_8126FF0(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y) } return MAX_SPRITES; } + +bool8 FldEff_LongGrass(void) +{ + s16 x; + s16 y; + u8 spriteId; + struct Sprite *sprite; + + x = gFieldEffectSpawnParams[0]; + y = gFieldEffectSpawnParams[1]; + sub_8060470(&x, &y, 8, 8); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[15], x, y, 0); + if (spriteId != MAX_SPRITES) + { + sprite = &gSprites[spriteId]; + sprite->coordOffsetEnabled = TRUE; + sprite->oam.priority = ZCoordToPriority(gFieldEffectSpawnParams[2]); + sprite->data0 = gFieldEffectSpawnParams[2]; + sprite->data1 = gFieldEffectSpawnParams[0]; + sprite->data2 = gFieldEffectSpawnParams[1]; + sprite->data3 = gFieldEffectSpawnParams[4]; + sprite->data4 = gFieldEffectSpawnParams[5]; + sprite->data5 = gFieldEffectSpawnParams[6]; + if (gFieldEffectSpawnParams[7]) + { + SeekSpriteAnim(sprite, 6); + } + } + return FALSE; +} -- cgit v1.2.3 From 82da4b1b50b0f174da47fc5751305bdd48fa3917 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Sep 2017 18:25:28 -0400 Subject: unc_grass_tall --- asm/field_effect_helpers.s | 126 --------------------------------------------- src/field_effect_helpers.c | 43 ++++++++++++++-- 2 files changed, 40 insertions(+), 129 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 5f6b60bbd..74b1343b4 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,132 +6,6 @@ .text - thumb_func_start unc_grass_tall -unc_grass_tall: @ 8127128 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - adds r5, r0, 0 - ldrh r0, [r5, 0x38] - lsrs r7, r0, 8 - lsls r0, 24 - lsrs r6, r0, 24 - ldr r3, _081271D0 @ =gCamera - ldrb r1, [r3] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08127172 - ldr r2, _081271D4 @ =gSaveBlock1 - movs r0, 0x5 - ldrsb r0, [r2, r0] - cmp r0, r7 - bne _08127158 - movs r0, 0x4 - ldrsb r0, [r2, r0] - cmp r0, r6 - beq _08127172 -_08127158: - ldr r1, [r3, 0x4] - ldrh r0, [r5, 0x30] - subs r0, r1 - strh r0, [r5, 0x30] - ldr r1, [r3, 0x8] - ldrh r0, [r5, 0x32] - subs r0, r1 - strh r0, [r5, 0x32] - ldrb r1, [r2, 0x5] - lsls r1, 8 - ldrb r0, [r2, 0x4] - orrs r0, r1 - strh r0, [r5, 0x38] -_08127172: - ldrh r0, [r5, 0x34] - lsrs r1, r0, 8 - mov r8, r1 - lsls r0, 24 - lsrs r7, r0, 24 - ldrh r0, [r5, 0x36] - lsls r0, 24 - lsrs r6, r0, 24 - movs r2, 0x30 - ldrsh r0, [r5, r2] - movs r2, 0x32 - ldrsh r1, [r5, r2] - bl MapGridGetMetatileBehaviorAt - lsls r0, 24 - lsrs r4, r0, 24 - mov r0, r8 - adds r1, r7, 0 - adds r2, r6, 0 - mov r3, sp - bl TryGetFieldObjectIdByLocalIdAndMap - lsls r0, 24 - cmp r0, 0 - bne _081271C6 - adds r0, r4, 0 - bl MetatileBehavior_IsLongGrass - lsls r0, 24 - cmp r0, 0 - beq _081271C6 - movs r1, 0x3C - ldrsh r0, [r5, r1] - cmp r0, 0 - beq _081271D8 - adds r0, r5, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _081271D8 -_081271C6: - adds r0, r5, 0 - movs r1, 0x11 - bl FieldEffectStop - b _0812720E - .align 2, 0 -_081271D0: .4byte gCamera -_081271D4: .4byte gSaveBlock1 -_081271D8: - mov r0, sp - ldrb r1, [r0] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _0812721C @ =gMapObjects - adds r2, r0, r1 - ldr r0, [r2, 0x10] - ldr r1, [r5, 0x30] - cmp r0, r1 - beq _081271F8 - ldr r0, [r2, 0x14] - cmp r0, r1 - beq _081271F8 - movs r0, 0x1 - strh r0, [r5, 0x3C] -_081271F8: - adds r0, r5, 0 - movs r1, 0 - bl sub_806487C - ldrh r1, [r5, 0x2E] - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - movs r2, 0 - bl sub_812882C -_0812720E: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0812721C: .4byte gMapObjects - thumb_func_end unc_grass_tall - thumb_func_start FldEff_JumpLongGrass FldEff_JumpLongGrass: @ 8127220 push {r4,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index b71a36122..599441c3d 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -272,7 +272,7 @@ void oamc_shadow(struct Sprite *sprite) if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjectId)) { - FieldEffectStop(sprite, 3); + FieldEffectStop(sprite, FLDEFF_SHADOW); } else { @@ -283,7 +283,7 @@ void oamc_shadow(struct Sprite *sprite) sprite->pos1.y = linkedSprite->pos1.y + sprite->data3; if (!mapObject->active || !mapObject->mapobj_bit_22 || MetatileBehavior_IsPokeGrass(mapObject->mapobj_unk_1E) || MetatileBehavior_IsSurfableWaterOrUnderwater(mapObject->mapobj_unk_1E) || MetatileBehavior_IsSurfableWaterOrUnderwater(mapObject->mapobj_unk_1F) || MetatileBehavior_IsReflective(mapObject->mapobj_unk_1E) || MetatileBehavior_IsReflective(mapObject->mapobj_unk_1F)) { - FieldEffectStop(sprite, 3); + FieldEffectStop(sprite, FLDEFF_SHADOW); } } } @@ -341,7 +341,7 @@ void unc_grass_normal(struct Sprite *sprite) metatileBehavior = MapGridGetMetatileBehaviorAt(sprite->data1, sprite->data2); if (TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId) || !MetatileBehavior_IsTallGrass(metatileBehavior) || (sprite->data7 && sprite->animEnded)) { - FieldEffectStop(sprite, 4); + FieldEffectStop(sprite, FLDEFF_TALL_GRASS); } else { @@ -426,3 +426,40 @@ bool8 FldEff_LongGrass(void) } return FALSE; } + +void unc_grass_tall(struct Sprite *sprite) +{ + u8 mapNum; + u8 mapGroup; + u8 metatileBehavior; + u8 localId; + u8 mapObjectId; + struct MapObject *mapObject; + + mapNum = sprite->data5 >> 8; + mapGroup = sprite->data5; + if (gCamera.field_0 && (gSaveBlock1.location.mapNum != mapNum || gSaveBlock1.location.mapGroup != mapGroup)) + { + sprite->data1 -= gCamera.x; + sprite->data2 -= gCamera.y; + sprite->data5 = ((u8)gSaveBlock1.location.mapNum << 8) | (u8)gSaveBlock1.location.mapGroup; + } + localId = sprite->data3 >> 8; + mapNum = sprite->data3; + mapGroup = sprite->data4; + metatileBehavior = MapGridGetMetatileBehaviorAt(sprite->data1, sprite->data2); + if (TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId) || !MetatileBehavior_IsLongGrass(metatileBehavior) || (sprite->data7 && sprite->animEnded)) + { + FieldEffectStop(sprite, FLDEFF_LONG_GRASS); + } + else + { + mapObject = &gMapObjects[mapObjectId]; + if ((mapObject->coords2.x != sprite->data1 || mapObject->coords2.y != sprite->data2) && (mapObject->coords3.x != sprite->data1 || mapObject->coords3.y != sprite->data2)) + { + sprite->data7 = TRUE; + } + sub_806487C(sprite, 0); + sub_812882C(sprite, sprite->data0, 0); + } +} -- cgit v1.2.3 From aa659fe8dd0abae6632cb4940d7e56684b84d8be Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 9 Sep 2017 17:28:25 -0500 Subject: clean up script_menu.c --- include/script_menu.h | 20 +- src/scrcmd.c | 26 +- src/script_menu.c | 719 ++++++++++++++++++++++++++------------------------ 3 files changed, 391 insertions(+), 374 deletions(-) diff --git a/include/script_menu.h b/include/script_menu.h index cc5c442ec..e8b45108e 100644 --- a/include/script_menu.h +++ b/include/script_menu.h @@ -1,23 +1,19 @@ #ifndef GUARD_SCRIPTMENU_H #define GUARD_SCRIPTMENU_H -struct MultichoiceListStruct -{ - struct MenuAction *list; - u8 count; -}; +struct MenuAction; extern const u8 *const gUnknown_083CE048[]; -bool8 sub_80B5054(u8 left, u8 top, u8 var3, u8 var4); -bool8 sub_80B50B0(u8 left, u8 top, u8 var3, u8 var4, u8 var5); +bool8 ScriptMenu_Multichoice(u8 left, u8 top, u8 var3, u8 var4); +bool8 ScriptMenu_MultichoiceWithDefault(u8 left, u8 top, u8 var3, u8 var4, u8 var5); u16 GetStringWidthInTilesForScriptMenu(const u8 *str); -void DrawMultichoiceMenu(u8, u8, u8, struct MenuAction *list, u8, u8); -void sub_80B5230(u8, u8, u8, u8, u8, u8); -void sub_80B52B4(u8); +void DrawMultichoiceMenu(u8, u8, u8, const struct MenuAction *list, u8, u8); +void StartScriptMenuTask(u8, u8, u8, u8, u8, u8); +void Task_HandleMenuInput(u8); bool8 Multichoice(u8 var1, u8 var2, u8 var3, u8 var4); -void sub_80B53B4(u8, u8, u8, struct MenuAction *list, u8); -bool8 yes_no_box(u8 var1, u8 var2); +void sub_80B53B4(u8, u8, u8, const struct MenuAction *list, u8); +bool8 ScriptMenu_YesNo(u8 var1, u8 var2); bool8 IsScriptActive(void); // unused void task_yes_no_maybe(u8); bool8 sub_80B5578(u8 left, u8 top, u8 multichoiceId, u8 a4, u8 columnCount); diff --git a/src/scrcmd.c b/src/scrcmd.c index 66578f350..afa34c402 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -1200,7 +1200,7 @@ bool8 ScrCmd_yesnobox(struct ScriptContext *ctx) { u8 v1 = ScriptReadByte(ctx); u8 v2 = ScriptReadByte(ctx); - if (yes_no_box(v1, v2) == 1) + if (ScriptMenu_YesNo(v1, v2) == 1) { ScriptContext1_Stop(); return TRUE; @@ -1213,11 +1213,11 @@ bool8 ScrCmd_yesnobox(struct ScriptContext *ctx) bool8 ScrCmd_multichoice(struct ScriptContext *ctx) { - u8 v1 = ScriptReadByte(ctx); - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - u8 v4 = ScriptReadByte(ctx); - if (sub_80B5054(v1, v2, v3, v4) == 1) + u8 left = ScriptReadByte(ctx); + u8 top = ScriptReadByte(ctx); + u8 multichoiceId = ScriptReadByte(ctx); + u8 ignoreBPress = ScriptReadByte(ctx); + if (ScriptMenu_Multichoice(left, top, multichoiceId, ignoreBPress) == TRUE) { ScriptContext1_Stop(); return TRUE; @@ -1230,12 +1230,12 @@ bool8 ScrCmd_multichoice(struct ScriptContext *ctx) bool8 ScrCmd_multichoicedef(struct ScriptContext *ctx) { - u8 v1 = ScriptReadByte(ctx); - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - u8 v4 = ScriptReadByte(ctx); - u8 v5 = ScriptReadByte(ctx); - if (sub_80B50B0(v1, v2, v3, v5, v4) == 1) + u8 left = ScriptReadByte(ctx); + u8 top = ScriptReadByte(ctx); + u8 multichoiceId = ScriptReadByte(ctx); + u8 defaultChoice = ScriptReadByte(ctx); + u8 ignoreBPress = ScriptReadByte(ctx); + if (ScriptMenu_MultichoiceWithDefault(left, top, multichoiceId, ignoreBPress, defaultChoice) == TRUE) { ScriptContext1_Stop(); return TRUE; @@ -1263,7 +1263,7 @@ bool8 ScrCmd_multichoicerow(struct ScriptContext *ctx) u8 v3 = ScriptReadByte(ctx); u8 v4 = ScriptReadByte(ctx); u8 v5 = ScriptReadByte(ctx); - if (sub_80B5578(v1, v2, v3, v5, v4) == 1) + if (sub_80B5578(v1, v2, v3, v5, v4) == TRUE) { ScriptContext1_Stop(); return TRUE; diff --git a/src/script_menu.c b/src/script_menu.c index 6e1a12a60..4de5cec24 100644 --- a/src/script_menu.c +++ b/src/script_menu.c @@ -5,6 +5,7 @@ #include "menu.h" #include "palette.h" #include "script.h" +#include "songs.h" #include "sound.h" #include "sprite.h" #include "strings.h" @@ -13,538 +14,544 @@ // multichoice lists const struct MenuAction MultichoiceList_00[] = { - {(u8 *)OtherText_Petalburg, 0}, - {(u8 *)OtherText_Slateport, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_Petalburg, NULL}, + {OtherText_Slateport, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_02[] = { - {(u8 *)OtherText_Enter, 0}, - {(u8 *)OtherText_Info3, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_Enter, NULL}, + {OtherText_Info3, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_03[] = { - {(u8 *)OtherText_WhatsAContest, 0}, - {(u8 *)OtherText_TypesOfContest, 0}, - {(u8 *)OtherText_Ranks, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_WhatsAContest, NULL}, + {OtherText_TypesOfContest, NULL}, + {OtherText_Ranks, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_04[] = { - {(u8 *)OtherText_CoolContest, 0}, - {(u8 *)OtherText_BeautyContest, 0}, - {(u8 *)OtherText_CuteContest, 0}, - {(u8 *)OtherText_SmartContest, 0}, - {(u8 *)OtherText_ToughContest, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_CoolContest, NULL}, + {OtherText_BeautyContest, NULL}, + {OtherText_CuteContest, NULL}, + {OtherText_SmartContest, NULL}, + {OtherText_ToughContest, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_06[] = { - {(u8 *)OtherText_Decoration, 0}, - {(u8 *)OtherText_PackUp, 0}, - {(u8 *)OtherText_Registry, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_Decoration, NULL}, + {OtherText_PackUp, NULL}, + {OtherText_Registry, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_05[] = { - {(u8 *)OtherText_Decoration, 0}, - {(u8 *)OtherText_PackUp, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_Decoration, NULL}, + {OtherText_PackUp, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_07[] = { - {(u8 *)OtherText_Register, 0}, - {(u8 *)OtherText_Registry, 0}, - {(u8 *)OtherText_Information, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_Register, NULL}, + {OtherText_Registry, NULL}, + {OtherText_Information, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_12[] = { - {(u8 *)OtherText_Mach, 0}, - {(u8 *)OtherText_Acro, 0}, + {OtherText_Mach, NULL}, + {OtherText_Acro, NULL}, }; const struct MenuAction MultichoiceList_13[] = { - {(u8 *)OtherText_Poison, 0}, - {(u8 *)OtherText_Paralysis, 0}, - {(u8 *)OtherText_Sleep, 0}, - {(u8 *)OtherText_Burn, 0}, - {(u8 *)OtherText_Frozen, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_Poison, NULL}, + {OtherText_Paralysis, NULL}, + {OtherText_Sleep, NULL}, + {OtherText_Burn, NULL}, + {OtherText_Frozen, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_14[] = { - {(u8 *)OtherText_Dewford, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_Dewford, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_16[] = { - {(u8 *)OtherText_SawIt, 0}, - {(u8 *)OtherText_NotYet, 0}, + {OtherText_SawIt, NULL}, + {OtherText_NotYet, NULL}, }; const struct MenuAction MultichoiceList_17[] = { - {(u8 *)OtherText_Yes, 0}, - {(u8 *)OtherText_No, 0}, - {(u8 *)OtherText_Info3, 0}, + {OtherText_Yes, NULL}, + {OtherText_No, NULL}, + {OtherText_Info3, NULL}, }; const struct MenuAction MultichoiceList_18[] = { - {(u8 *)OtherText_SingleBattle, 0}, - {(u8 *)OtherText_DoubleBattle, 0}, - {(u8 *)OtherText_MultiBattle, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_SingleBattle, NULL}, + {OtherText_DoubleBattle, NULL}, + {OtherText_MultiBattle, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_19[] = { - {(u8 *)OtherText_Littleroot, 0}, - {(u8 *)OtherText_Slateport, 0}, - {(u8 *)OtherText_Lilycove, 0}, + {OtherText_Littleroot, NULL}, + {OtherText_Slateport, NULL}, + {OtherText_Lilycove, NULL}, }; const struct MenuAction MultichoiceList_20[] = { - {(u8 *)OtherText_Yes, 0}, - {(u8 *)OtherText_No, 0}, - {(u8 *)OtherText_Info3, 0}, + {OtherText_Yes, NULL}, + {OtherText_No, NULL}, + {OtherText_Info3, NULL}, }; const struct MenuAction MultichoiceList_23[] = { - {(u8 *)OtherText_MakeAChallenge, 0}, - {(u8 *)OtherText_ObtainInformation, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_MakeAChallenge, NULL}, + {OtherText_ObtainInformation, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_24[] = { - {(u8 *)OtherText_Lv50_2, 0}, - {(u8 *)OtherText_Lv100_2, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_Lv50_2, NULL}, + {OtherText_Lv100_2, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_25[] = { - {(u8 *)OtherText_Zigzagoon, 0}, - {(u8 *)OtherText_Nincada, 0}, - {(u8 *)OtherText_Poochyena, 0}, + {OtherText_Zigzagoon, NULL}, + {OtherText_Nincada, NULL}, + {OtherText_Poochyena, NULL}, }; const struct MenuAction MultichoiceList_26[] = { - {(u8 *)OtherText_Nincada2, 0}, - {(u8 *)OtherText_Lotad, 0}, - {(u8 *)OtherText_Roselia, 0}, + {OtherText_Nincada2, NULL}, + {OtherText_Lotad, NULL}, + {OtherText_Roselia, NULL}, }; const struct MenuAction MultichoiceList_27[] = { - {(u8 *)OtherText_Shroomish, 0}, - {(u8 *)OtherText_Nincada3, 0}, - {(u8 *)OtherText_Surskit, 0}, + {OtherText_Shroomish, NULL}, + {OtherText_Nincada3, NULL}, + {OtherText_Surskit, NULL}, }; const struct MenuAction MultichoiceList_28[] = { - {(u8 *)OtherText_Treecko, 0}, - {(u8 *)OtherText_Torchic, 0}, - {(u8 *)OtherText_Mudkip, 0}, + {OtherText_Treecko, NULL}, + {OtherText_Torchic, NULL}, + {OtherText_Mudkip, NULL}, }; const struct MenuAction MultichoiceList_29[] = { - {(u8 *)OtherText_Seedot, 0}, - {(u8 *)OtherText_Shroomish2, 0}, - {(u8 *)OtherText_Spinda, 0}, + {OtherText_Seedot, NULL}, + {OtherText_Shroomish2, NULL}, + {OtherText_Spinda, NULL}, }; const struct MenuAction MultichoiceList_30[] = { - {(u8 *)OtherText_Shroomish3, 0}, - {(u8 *)OtherText_Zigzagoon2, 0}, - {(u8 *)OtherText_Wurmple, 0}, + {OtherText_Shroomish3, NULL}, + {OtherText_Zigzagoon2, NULL}, + {OtherText_Wurmple, NULL}, }; const struct MenuAction MultichoiceList_31[] = { - {(u8 *)OtherText_PokeBall, 0}, - {(u8 *)OtherText_SuperPotion, 0}, - {(u8 *)OtherText_SamePrice, 0}, + {OtherText_PokeBall, NULL}, + {OtherText_SuperPotion, NULL}, + {OtherText_SamePrice, NULL}, }; const struct MenuAction MultichoiceList_32[] = { - {(u8 *)OtherText_Yen135, 0}, - {(u8 *)OtherText_Yen155, 0}, - {(u8 *)OtherText_Yen175, 0}, + {OtherText_Yen135, NULL}, + {OtherText_Yen155, NULL}, + {OtherText_Yen175, NULL}, }; const struct MenuAction MultichoiceList_33[] = { - {(u8 *)OtherText_CostMore, 0}, - {(u8 *)OtherText_CostLess, 0}, - {(u8 *)OtherText_SamePrice2, 0}, + {OtherText_CostMore, NULL}, + {OtherText_CostLess, NULL}, + {OtherText_SamePrice2, NULL}, }; const struct MenuAction MultichoiceList_34[] = { - {(u8 *)OtherText_MaleSymbol, 0}, - {(u8 *)OtherText_FemaleSymbol, 0}, - {(u8 *)OtherText_Neither, 0}, + {OtherText_MaleSymbol, NULL}, + {OtherText_FemaleSymbol, NULL}, + {OtherText_Neither, NULL}, }; const struct MenuAction MultichoiceList_35[] = { - {(u8 *)OtherText_Males, 0}, - {(u8 *)OtherText_Females, 0}, - {(u8 *)OtherText_SameNumber, 0}, + {OtherText_Males, NULL}, + {OtherText_Females, NULL}, + {OtherText_SameNumber, NULL}, }; const struct MenuAction MultichoiceList_36[] = { - {(u8 *)OtherText_Male, 0}, - {(u8 *)OtherText_Female, 0}, - {(u8 *)OtherText_ItDepends, 0}, + {OtherText_Male, NULL}, + {OtherText_Female, NULL}, + {OtherText_ItDepends, NULL}, }; const struct MenuAction MultichoiceList_37[] = { - {(u8 *)OtherText_Six2, 0}, - {(u8 *)OtherText_Eight2, 0}, - {(u8 *)OtherText_Ten, 0}, + {OtherText_Six2, NULL}, + {OtherText_Eight2, NULL}, + {OtherText_Ten, NULL}, }; const struct MenuAction MultichoiceList_38[] = { - {(u8 *)OtherText_One, 0}, - {(u8 *)OtherText_Two, 0}, - {(u8 *)OtherText_Three, 0}, + {OtherText_One, NULL}, + {OtherText_Two, NULL}, + {OtherText_Three, NULL}, }; const struct MenuAction MultichoiceList_39[] = { - {(u8 *)OtherText_Six, 0}, - {(u8 *)OtherText_Seven, 0}, - {(u8 *)OtherText_Eight, 0}, + {OtherText_Six, NULL}, + {OtherText_Seven, NULL}, + {OtherText_Eight, NULL}, }; const struct MenuAction MultichoiceList_42[] = { - {(u8 *)OtherText_FreshWater, 0}, - {(u8 *)OtherText_SodaPop, 0}, - {(u8 *)OtherText_Lemonade, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_FreshWater, NULL}, + {OtherText_SodaPop, NULL}, + {OtherText_Lemonade, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_43[] = { - {(u8 *)OtherText_HowToRide, 0}, - {(u8 *)OtherText_HowToTurn, 0}, - {(u8 *)OtherText_SandySlopes, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_HowToRide, NULL}, + {OtherText_HowToTurn, NULL}, + {OtherText_SandySlopes, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_44[] = { - {(u8 *)OtherText_Wheelies, 0}, - {(u8 *)OtherText_BunnyHops, 0}, - {(u8 *)OtherText_Jumping, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_Wheelies, NULL}, + {OtherText_BunnyHops, NULL}, + {OtherText_Jumping, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_45[] = { - {(u8 *)OtherText_Satisfied, 0}, - {(u8 *)OtherText_Dissatisfied, 0}, + {OtherText_Satisfied, NULL}, + {OtherText_Dissatisfied, NULL}, }; const struct MenuAction MultichoiceList_46[] = { - {(u8 *)OtherText_Deepseatooth, 0}, - {(u8 *)OtherText_Deepseascale, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_Deepseatooth, NULL}, + {OtherText_Deepseascale, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_47[] = { - {(u8 *)OtherText_BlueFlute2, 0}, - {(u8 *)OtherText_YellowFlute2, 0}, - {(u8 *)OtherText_RedFlute2, 0}, - {(u8 *)OtherText_WhiteFlute2, 0}, - {(u8 *)OtherText_BlackFlute2, 0}, - {(u8 *)OtherText_GlassChair, 0}, - {(u8 *)OtherText_GlassDesk, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_BlueFlute2, NULL}, + {OtherText_YellowFlute2, NULL}, + {OtherText_RedFlute2, NULL}, + {OtherText_WhiteFlute2, NULL}, + {OtherText_BlackFlute2, NULL}, + {OtherText_GlassChair, NULL}, + {OtherText_GlassDesk, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_48[] = { - {(u8 *)OtherText_TreeckoDoll, 0}, - {(u8 *)OtherText_TorchicDoll, 0}, - {(u8 *)OtherText_MudkipDoll, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_TreeckoDoll, NULL}, + {OtherText_TorchicDoll, NULL}, + {OtherText_MudkipDoll, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_55[] = { - {(u8 *)OtherText_TM32, 0}, - {(u8 *)OtherText_TM29, 0}, - {(u8 *)OtherText_TM35, 0}, - {(u8 *)OtherText_TM24, 0}, - {(u8 *)OtherText_TM13, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_TM32, NULL}, + {OtherText_TM29, NULL}, + {OtherText_TM35, NULL}, + {OtherText_TM24, NULL}, + {OtherText_TM13, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_49[] = { - {(u8 *)OtherText_50Coins, 0}, - {(u8 *)OtherText_500Coins, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_50Coins, NULL}, + {OtherText_500Coins, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_50[] = { - {(u8 *)OtherText_Excellent, 0}, - {(u8 *)OtherText_NotSoHot, 0}, + {OtherText_Excellent, NULL}, + {OtherText_NotSoHot, NULL}, }; const struct MenuAction MultichoiceList_52[] = { - {(u8 *)OtherText_Lilycove, 0}, - {(u8 *)OtherText_BattleTower, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_Lilycove, NULL}, + {OtherText_BattleTower, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_53[] = { - {(u8 *)OtherText_Slateport, 0}, - {(u8 *)OtherText_Lilycove, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_Slateport, NULL}, + {OtherText_Lilycove, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_54[] = { - {(u8 *)OtherText_Right, 0}, - {(u8 *)OtherText_Left, 0}, + {OtherText_Right, NULL}, + {OtherText_Left, NULL}, }; const struct MenuAction MultichoiceList_56[] = { - {(u8 *)OtherText_Slateport, 0}, - {(u8 *)OtherText_BattleTower, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_Slateport, NULL}, + {OtherText_BattleTower, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_57[] = { - {(u8 *)OtherText_1F_2, 0}, - {(u8 *)OtherText_2F_2, 0}, - {(u8 *)OtherText_3F_2, 0}, - {(u8 *)OtherText_4F_2, 0}, - {(u8 *)OtherText_5F_2, 0}, + {OtherText_1F_2, NULL}, + {OtherText_2F_2, NULL}, + {OtherText_3F_2, NULL}, + {OtherText_4F_2, NULL}, + {OtherText_5F_2, NULL}, }; const struct MenuAction MultichoiceList_58[] = { - {(u8 *)OtherText_RedShard, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_RedShard, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_59[] = { - {(u8 *)OtherText_YellowShard, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_YellowShard, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_60[] = { - {(u8 *)OtherText_RedShard, 0}, - {(u8 *)OtherText_YellowShard, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_RedShard, NULL}, + {OtherText_YellowShard, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_61[] = { - {(u8 *)OtherText_BlueShard, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_BlueShard, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_62[] = { - {(u8 *)OtherText_RedShard, 0}, - {(u8 *)OtherText_BlueShard, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_RedShard, NULL}, + {OtherText_BlueShard, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_63[] = { - {(u8 *)OtherText_YellowShard, 0}, - {(u8 *)OtherText_BlueShard, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_YellowShard, NULL}, + {OtherText_BlueShard, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_64[] = { - {(u8 *)OtherText_RedShard, 0}, - {(u8 *)OtherText_YellowShard, 0}, - {(u8 *)OtherText_BlueShard, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_RedShard, NULL}, + {OtherText_YellowShard, NULL}, + {OtherText_BlueShard, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_65[] = { - {(u8 *)OtherText_GreenShard, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_GreenShard, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_66[] = { - {(u8 *)OtherText_RedShard, 0}, - {(u8 *)OtherText_GreenShard, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_RedShard, NULL}, + {OtherText_GreenShard, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_67[] = { - {(u8 *)OtherText_YellowShard, 0}, - {(u8 *)OtherText_GreenShard, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_YellowShard, NULL}, + {OtherText_GreenShard, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_68[] = { - {(u8 *)OtherText_RedShard, 0}, - {(u8 *)OtherText_YellowShard, 0}, - {(u8 *)OtherText_GreenShard, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_RedShard, NULL}, + {OtherText_YellowShard, NULL}, + {OtherText_GreenShard, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_69[] = { - {(u8 *)OtherText_BlueShard, 0}, - {(u8 *)OtherText_GreenShard, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_BlueShard, NULL}, + {OtherText_GreenShard, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_70[] = { - {(u8 *)OtherText_RedShard, 0}, - {(u8 *)OtherText_BlueShard, 0}, - {(u8 *)OtherText_GreenShard, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_RedShard, NULL}, + {OtherText_BlueShard, NULL}, + {OtherText_GreenShard, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_71[] = { - {(u8 *)OtherText_YellowShard, 0}, - {(u8 *)OtherText_BlueShard, 0}, - {(u8 *)OtherText_GreenShard, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_YellowShard, NULL}, + {OtherText_BlueShard, NULL}, + {OtherText_GreenShard, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_72[] = { - {(u8 *)OtherText_RedShard, 0}, - {(u8 *)OtherText_YellowShard, 0}, - {(u8 *)OtherText_BlueShard, 0}, - {(u8 *)OtherText_GreenShard, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {OtherText_RedShard, NULL}, + {OtherText_YellowShard, NULL}, + {OtherText_BlueShard, NULL}, + {OtherText_GreenShard, NULL}, + {gOtherText_CancelNoTerminator, NULL}, }; const struct MenuAction MultichoiceList_01[] = { - {(u8 *)gOtherText_CancelNoTerminator, 0}, + {gOtherText_CancelNoTerminator, NULL}, +}; + +struct MultichoiceListStruct +{ + const struct MenuAction *list; + u8 count; }; const struct MultichoiceListStruct gMultichoiceLists[] = { - {(struct MenuAction *)MultichoiceList_00, 3}, - {(struct MenuAction *)MultichoiceList_01, 1}, - {(struct MenuAction *)MultichoiceList_02, 3}, - {(struct MenuAction *)MultichoiceList_03, 4}, - {(struct MenuAction *)MultichoiceList_04, 6}, - {(struct MenuAction *)MultichoiceList_05, 3}, - {(struct MenuAction *)MultichoiceList_06, 4}, - {(struct MenuAction *)MultichoiceList_07, 4}, - {(struct MenuAction *)MultichoiceList_01, 1}, - {(struct MenuAction *)MultichoiceList_01, 1}, - {(struct MenuAction *)MultichoiceList_01, 1}, - {(struct MenuAction *)MultichoiceList_01, 1}, - {(struct MenuAction *)MultichoiceList_12, 2}, - {(struct MenuAction *)MultichoiceList_13, 6}, - {(struct MenuAction *)MultichoiceList_14, 2}, - {(struct MenuAction *)MultichoiceList_01, 1}, - {(struct MenuAction *)MultichoiceList_16, 2}, - {(struct MenuAction *)MultichoiceList_17, 3}, - {(struct MenuAction *)MultichoiceList_18, 4}, - {(struct MenuAction *)MultichoiceList_19, 3}, - {(struct MenuAction *)MultichoiceList_20, 3}, - {(struct MenuAction *)MultichoiceList_01, 1}, - {(struct MenuAction *)MultichoiceList_01, 1}, - {(struct MenuAction *)MultichoiceList_23, 3}, - {(struct MenuAction *)MultichoiceList_24, 3}, - {(struct MenuAction *)MultichoiceList_25, 3}, - {(struct MenuAction *)MultichoiceList_26, 3}, - {(struct MenuAction *)MultichoiceList_27, 3}, - {(struct MenuAction *)MultichoiceList_28, 3}, - {(struct MenuAction *)MultichoiceList_29, 3}, - {(struct MenuAction *)MultichoiceList_30, 3}, - {(struct MenuAction *)MultichoiceList_31, 3}, - {(struct MenuAction *)MultichoiceList_32, 3}, - {(struct MenuAction *)MultichoiceList_33, 3}, - {(struct MenuAction *)MultichoiceList_34, 3}, - {(struct MenuAction *)MultichoiceList_35, 3}, - {(struct MenuAction *)MultichoiceList_36, 3}, - {(struct MenuAction *)MultichoiceList_37, 3}, - {(struct MenuAction *)MultichoiceList_38, 3}, - {(struct MenuAction *)MultichoiceList_39, 3}, - {(struct MenuAction *)MultichoiceList_01, 1}, - {(struct MenuAction *)MultichoiceList_01, 1}, - {(struct MenuAction *)MultichoiceList_42, 4}, - {(struct MenuAction *)MultichoiceList_43, 4}, - {(struct MenuAction *)MultichoiceList_44, 4}, - {(struct MenuAction *)MultichoiceList_45, 2}, - {(struct MenuAction *)MultichoiceList_46, 3}, - {(struct MenuAction *)MultichoiceList_47, 8}, - {(struct MenuAction *)MultichoiceList_48, 4}, - {(struct MenuAction *)MultichoiceList_49, 3}, - {(struct MenuAction *)MultichoiceList_50, 2}, - {(struct MenuAction *)MultichoiceList_01, 1}, - {(struct MenuAction *)MultichoiceList_52, 3}, - {(struct MenuAction *)MultichoiceList_53, 3}, - {(struct MenuAction *)MultichoiceList_54, 2}, - {(struct MenuAction *)MultichoiceList_55, 6}, - {(struct MenuAction *)MultichoiceList_56, 3}, - {(struct MenuAction *)MultichoiceList_57, 5}, - {(struct MenuAction *)MultichoiceList_58, 2}, - {(struct MenuAction *)MultichoiceList_59, 2}, - {(struct MenuAction *)MultichoiceList_60, 3}, - {(struct MenuAction *)MultichoiceList_61, 2}, - {(struct MenuAction *)MultichoiceList_62, 3}, - {(struct MenuAction *)MultichoiceList_63, 3}, - {(struct MenuAction *)MultichoiceList_64, 4}, - {(struct MenuAction *)MultichoiceList_65, 2}, - {(struct MenuAction *)MultichoiceList_66, 3}, - {(struct MenuAction *)MultichoiceList_67, 3}, - {(struct MenuAction *)MultichoiceList_68, 4}, - {(struct MenuAction *)MultichoiceList_69, 3}, - {(struct MenuAction *)MultichoiceList_70, 4}, - {(struct MenuAction *)MultichoiceList_71, 4}, - {(struct MenuAction *)MultichoiceList_72, 5} + {MultichoiceList_00, ARRAY_COUNT(MultichoiceList_00)}, + {MultichoiceList_01, ARRAY_COUNT(MultichoiceList_01)}, + {MultichoiceList_02, ARRAY_COUNT(MultichoiceList_02)}, + {MultichoiceList_03, ARRAY_COUNT(MultichoiceList_03)}, + {MultichoiceList_04, ARRAY_COUNT(MultichoiceList_04)}, + {MultichoiceList_05, ARRAY_COUNT(MultichoiceList_05)}, + {MultichoiceList_06, ARRAY_COUNT(MultichoiceList_06)}, + {MultichoiceList_07, ARRAY_COUNT(MultichoiceList_07)}, + {MultichoiceList_01, ARRAY_COUNT(MultichoiceList_01)}, + {MultichoiceList_01, ARRAY_COUNT(MultichoiceList_01)}, + {MultichoiceList_01, ARRAY_COUNT(MultichoiceList_01)}, + {MultichoiceList_01, ARRAY_COUNT(MultichoiceList_01)}, + {MultichoiceList_12, ARRAY_COUNT(MultichoiceList_12)}, + {MultichoiceList_13, ARRAY_COUNT(MultichoiceList_13)}, + {MultichoiceList_14, ARRAY_COUNT(MultichoiceList_14)}, + {MultichoiceList_01, ARRAY_COUNT(MultichoiceList_01)}, + {MultichoiceList_16, ARRAY_COUNT(MultichoiceList_16)}, + {MultichoiceList_17, ARRAY_COUNT(MultichoiceList_17)}, + {MultichoiceList_18, ARRAY_COUNT(MultichoiceList_18)}, + {MultichoiceList_19, ARRAY_COUNT(MultichoiceList_19)}, + {MultichoiceList_20, ARRAY_COUNT(MultichoiceList_20)}, + {MultichoiceList_01, ARRAY_COUNT(MultichoiceList_01)}, + {MultichoiceList_01, ARRAY_COUNT(MultichoiceList_01)}, + {MultichoiceList_23, ARRAY_COUNT(MultichoiceList_23)}, + {MultichoiceList_24, ARRAY_COUNT(MultichoiceList_24)}, + {MultichoiceList_25, ARRAY_COUNT(MultichoiceList_25)}, + {MultichoiceList_26, ARRAY_COUNT(MultichoiceList_26)}, + {MultichoiceList_27, ARRAY_COUNT(MultichoiceList_27)}, + {MultichoiceList_28, ARRAY_COUNT(MultichoiceList_28)}, + {MultichoiceList_29, ARRAY_COUNT(MultichoiceList_29)}, + {MultichoiceList_30, ARRAY_COUNT(MultichoiceList_30)}, + {MultichoiceList_31, ARRAY_COUNT(MultichoiceList_31)}, + {MultichoiceList_32, ARRAY_COUNT(MultichoiceList_32)}, + {MultichoiceList_33, ARRAY_COUNT(MultichoiceList_33)}, + {MultichoiceList_34, ARRAY_COUNT(MultichoiceList_34)}, + {MultichoiceList_35, ARRAY_COUNT(MultichoiceList_35)}, + {MultichoiceList_36, ARRAY_COUNT(MultichoiceList_36)}, + {MultichoiceList_37, ARRAY_COUNT(MultichoiceList_37)}, + {MultichoiceList_38, ARRAY_COUNT(MultichoiceList_38)}, + {MultichoiceList_39, ARRAY_COUNT(MultichoiceList_39)}, + {MultichoiceList_01, ARRAY_COUNT(MultichoiceList_01)}, + {MultichoiceList_01, ARRAY_COUNT(MultichoiceList_01)}, + {MultichoiceList_42, ARRAY_COUNT(MultichoiceList_42)}, + {MultichoiceList_43, ARRAY_COUNT(MultichoiceList_43)}, + {MultichoiceList_44, ARRAY_COUNT(MultichoiceList_44)}, + {MultichoiceList_45, ARRAY_COUNT(MultichoiceList_45)}, + {MultichoiceList_46, ARRAY_COUNT(MultichoiceList_46)}, + {MultichoiceList_47, ARRAY_COUNT(MultichoiceList_47)}, + {MultichoiceList_48, ARRAY_COUNT(MultichoiceList_48)}, + {MultichoiceList_49, ARRAY_COUNT(MultichoiceList_49)}, + {MultichoiceList_50, ARRAY_COUNT(MultichoiceList_50)}, + {MultichoiceList_01, ARRAY_COUNT(MultichoiceList_01)}, + {MultichoiceList_52, ARRAY_COUNT(MultichoiceList_52)}, + {MultichoiceList_53, ARRAY_COUNT(MultichoiceList_53)}, + {MultichoiceList_54, ARRAY_COUNT(MultichoiceList_54)}, + {MultichoiceList_55, ARRAY_COUNT(MultichoiceList_55)}, + {MultichoiceList_56, ARRAY_COUNT(MultichoiceList_56)}, + {MultichoiceList_57, ARRAY_COUNT(MultichoiceList_57)}, + {MultichoiceList_58, ARRAY_COUNT(MultichoiceList_58)}, + {MultichoiceList_59, ARRAY_COUNT(MultichoiceList_59)}, + {MultichoiceList_60, ARRAY_COUNT(MultichoiceList_60)}, + {MultichoiceList_61, ARRAY_COUNT(MultichoiceList_61)}, + {MultichoiceList_62, ARRAY_COUNT(MultichoiceList_62)}, + {MultichoiceList_63, ARRAY_COUNT(MultichoiceList_63)}, + {MultichoiceList_64, ARRAY_COUNT(MultichoiceList_64)}, + {MultichoiceList_65, ARRAY_COUNT(MultichoiceList_65)}, + {MultichoiceList_66, ARRAY_COUNT(MultichoiceList_66)}, + {MultichoiceList_67, ARRAY_COUNT(MultichoiceList_67)}, + {MultichoiceList_68, ARRAY_COUNT(MultichoiceList_68)}, + {MultichoiceList_69, ARRAY_COUNT(MultichoiceList_69)}, + {MultichoiceList_70, ARRAY_COUNT(MultichoiceList_70)}, + {MultichoiceList_71, ARRAY_COUNT(MultichoiceList_71)}, + {MultichoiceList_72, ARRAY_COUNT(MultichoiceList_72)}, }; const u8 *const gUnknown_083CE048[] = @@ -574,26 +581,30 @@ extern u8 gPCText_WhichPCShouldBeAccessed[]; extern u16 gScriptResult; -bool8 sub_80B5054(u8 left, u8 top, u8 var3, u8 var4) +bool8 ScriptMenu_Multichoice(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPress) { - if (FuncIsActiveTask(sub_80B52B4) == 1) + if (FuncIsActiveTask(Task_HandleMenuInput) == TRUE) + { return FALSE; + } else { gScriptResult = 0xFF; - DrawMultichoiceMenu(left, top, gMultichoiceLists[var3].count, gMultichoiceLists[var3].list, var4, 0); + DrawMultichoiceMenu(left, top, gMultichoiceLists[multichoiceId].count, gMultichoiceLists[multichoiceId].list, ignoreBPress, 0); return TRUE; } } -bool8 sub_80B50B0(u8 left, u8 top, u8 var3, u8 var4, u8 var5) +bool8 ScriptMenu_MultichoiceWithDefault(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPress, u8 defaultChoice) { - if (FuncIsActiveTask(sub_80B52B4) == 1) + if (FuncIsActiveTask(Task_HandleMenuInput) == TRUE) + { return FALSE; + } else { gScriptResult = 0xFF; - DrawMultichoiceMenu(left, top, gMultichoiceLists[var3].count, gMultichoiceLists[var3].list, var4, var5); + DrawMultichoiceMenu(left, top, gMultichoiceLists[multichoiceId].count, gMultichoiceLists[multichoiceId].list, ignoreBPress, defaultChoice); return TRUE; } } @@ -604,7 +615,7 @@ u16 GetStringWidthInTilesForScriptMenu(const u8 *str) return (GetStringWidthGivenWindowConfig((struct WindowConfig *)&gWindowConfig_81E6CE4, str) + 7) / 8; } -void DrawMultichoiceMenu(u8 left, u8 top, u8 count, struct MenuAction *list, u8 var4, u8 cursorPos) +void DrawMultichoiceMenu(u8 left, u8 top, u8 count, const struct MenuAction *list, u8 ignoreBPress, u8 cursorPos) { u16 width = GetStringWidthInTilesForScriptMenu(list[0].text); u16 newWidth; @@ -633,75 +644,79 @@ void DrawMultichoiceMenu(u8 left, u8 top, u8 count, struct MenuAction *list, u8 MenuDrawTextWindow(left, top, right, bottom); PrintMenuItems(left + 1, top + 1, count, list); InitMenu(0, left + 1, top + 1, count, cursorPos, right - left - 1); - sub_80B5230(left, top, right, bottom, var4, count); + StartScriptMenuTask(left, top, right, bottom, ignoreBPress, count); } -void sub_80B5230(u8 left, u8 top, u8 right, u8 bottom, u8 unkVar, u8 count) +#define tLeft data[0] +#define tTop data[1] +#define tRight data[2] +#define tBottom data[3] +#define tIgnoreBPress data[4] +#define tDoWrap data[5] + +void StartScriptMenuTask(u8 left, u8 top, u8 right, u8 bottom, u8 ignoreBPress, u8 count) { - u8 taskId = CreateTask(sub_80B52B4, 80); + u8 taskId = CreateTask(Task_HandleMenuInput, 80); - gTasks[taskId].data[0] = left; - gTasks[taskId].data[1] = top; - gTasks[taskId].data[2] = right; - gTasks[taskId].data[3] = bottom; - gTasks[taskId].data[4] = unkVar; + gTasks[taskId].tLeft = left; + gTasks[taskId].tTop = top; + gTasks[taskId].tRight = right; + gTasks[taskId].tBottom = bottom; + gTasks[taskId].tIgnoreBPress = ignoreBPress; if (count > 3) - gTasks[taskId].data[5] = TRUE; + gTasks[taskId].tDoWrap = TRUE; else - gTasks[taskId].data[5] = FALSE; + gTasks[taskId].tDoWrap = FALSE; } -void sub_80B52B4(u8 taskId) +void Task_HandleMenuInput(u8 taskId) { - s8 var; + s8 selection; if (!gPaletteFade.active) { - if (!gTasks[taskId].data[5]) - var = ProcessMenuInputNoWrap(); + if (!gTasks[taskId].tDoWrap) + selection = ProcessMenuInputNoWrap(); else - var = ProcessMenuInput(); + selection = ProcessMenuInput(); - if (var != -2) + if (selection != -2) { - if (var == -1) + if (selection == -1) { - if (!gTasks[taskId].data[4]) - { - PlaySE(5); - gScriptResult = 127; - } - else - { + if (gTasks[taskId].tIgnoreBPress) return; - } + PlaySE(SE_SELECT); + gScriptResult = 127; } else { - gScriptResult = var; + gScriptResult = selection; } HandleDestroyMenuCursors(); - MenuZeroFillWindowRect(gTasks[taskId].data[0], gTasks[taskId].data[1], gTasks[taskId].data[2], gTasks[taskId].data[3]); + MenuZeroFillWindowRect(gTasks[taskId].tLeft, gTasks[taskId].tTop, gTasks[taskId].tRight, gTasks[taskId].tBottom); DestroyTask(taskId); EnableBothScriptContexts(); } } } -bool8 Multichoice(u8 var1, u8 var2, u8 var3, u8 var4) +bool8 Multichoice(u8 var1, u8 var2, u8 multichoiceId, u8 ignoreBPress) { - if (FuncIsActiveTask(sub_80B52B4) == 1) + if (FuncIsActiveTask(Task_HandleMenuInput) == TRUE) + { return FALSE; + } else { gScriptResult = 0xFF; - sub_80B53B4(var1, var2, gMultichoiceLists[var3].count, gMultichoiceLists[var3].list, var4); + sub_80B53B4(var1, var2, gMultichoiceLists[multichoiceId].count, gMultichoiceLists[multichoiceId].list, ignoreBPress); return TRUE; } } -void sub_80B53B4(u8 left, u8 top, u8 count, struct MenuAction *list, u8 var4) +void sub_80B53B4(u8 left, u8 top, u8 count, const struct MenuAction *list, u8 ignoreBPress) { u16 width = GetStringWidthInTilesForScriptMenu(list[0].text); u16 newWidth; @@ -722,22 +737,24 @@ void sub_80B53B4(u8 left, u8 top, u8 count, struct MenuAction *list, u8 var4) PrintMenuItems(left, top, count, list); InitMenu(0, left, top, count, 0, right - left - 1); - sub_80B5230(left, top, right, bottom, var4, count); + StartScriptMenuTask(left, top, right, bottom, ignoreBPress, count); } -bool8 yes_no_box(u8 var1, u8 var2) +bool8 ScriptMenu_YesNo(u8 var1, u8 var2) { u8 taskId; - if (FuncIsActiveTask(task_yes_no_maybe) == 1) + if (FuncIsActiveTask(task_yes_no_maybe) == TRUE) + { return FALSE; + } else { gScriptResult = 0xFF; DisplayYesNoMenu(var1, var2, 1); taskId = CreateTask(task_yes_no_maybe, 0x50); gTasks[taskId].data[0] = var1; - gTasks[taskId].data[1] = var2; + gTasks[taskId].tTop = var2; return TRUE; } } @@ -755,9 +772,9 @@ void task_yes_no_maybe(u8 taskId) { u8 left, top; - if (gTasks[taskId].data[2] < 5) + if (gTasks[taskId].tRight < 5) { - gTasks[taskId].data[2]++; + gTasks[taskId].tRight++; return; } @@ -767,7 +784,7 @@ void task_yes_no_maybe(u8 taskId) return; case -1: case 1: - PlaySE(5); + PlaySE(SE_SELECT); gScriptResult = 0; break; case 0: @@ -775,15 +792,15 @@ void task_yes_no_maybe(u8 taskId) break; } - left = gTasks[taskId].data[0]; - top = gTasks[taskId].data[1]; + left = gTasks[taskId].tLeft; + top = gTasks[taskId].tTop; MenuZeroFillWindowRect(left, top, left + 6, top + 5); DestroyTask(taskId); EnableBothScriptContexts(); } -bool8 sub_80B5578(u8 left, u8 top, u8 multichoiceId, u8 a4, u8 columnCount) +bool8 sub_80B5578(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPress, u8 columnCount) { u8 bottom = 0; @@ -813,48 +830,52 @@ bool8 sub_80B5578(u8 left, u8 top, u8 multichoiceId, u8 a4, u8 columnCount) } width = sub_807288C(columnCount); - gTasks[taskId].data[0] = left; - gTasks[taskId].data[1] = top; - gTasks[taskId].data[2] = width + left + 2; - gTasks[taskId].data[3] = bottom; - gTasks[taskId].data[4] = a4; + gTasks[taskId].tLeft = left; + gTasks[taskId].tTop = top; + gTasks[taskId].tRight = width + left + 2; + gTasks[taskId].tBottom = bottom; + gTasks[taskId].tIgnoreBPress = ignoreBPress; return TRUE; } } void sub_80B5684(u8 taskId) { - s8 var = sub_80727CC(); + s8 selection = sub_80727CC(); - if (var != -2) + if (selection != -2) { - if (var == -1) + if (selection == -1) { - if (!gTasks[taskId].data[4]) - { - PlaySE(5); - gScriptResult = 127; - } - else - { + if (gTasks[taskId].tIgnoreBPress) return; - } + PlaySE(SE_SELECT); + gScriptResult = 127; } else { - gScriptResult = var; + gScriptResult = selection; } HandleDestroyMenuCursors(); - MenuZeroFillWindowRect(gTasks[taskId].data[0], gTasks[taskId].data[1], gTasks[taskId].data[2], gTasks[taskId].data[3]); + MenuZeroFillWindowRect(gTasks[taskId].tLeft, gTasks[taskId].tTop, gTasks[taskId].tRight, gTasks[taskId].tBottom); DestroyTask(taskId); EnableBothScriptContexts(); } } +#undef tLeft +#undef tTop +#undef tRight +#undef tBottom +#undef tIgnoreBPress +#undef tDoWrap + bool8 TryCreatePCMenu(void) { - if (FuncIsActiveTask(sub_80B52B4) == 1) + if (FuncIsActiveTask(Task_HandleMenuInput) == TRUE) + { return FALSE; + } else { gScriptResult = 0xFF; @@ -896,7 +917,7 @@ void CreatePCMenu(void) MenuPrint(gPCText_PlayersPC, 1, 3); InitMenu(0, 1, 1, numChoices, 0, width + 1); - sub_80B5230(0, 0, width + 2, 2 * numChoices + 1, 0, numChoices); + StartScriptMenuTask(0, 0, width + 2, 2 * numChoices + 1, 0, numChoices); } #elif GERMAN __attribute__((naked)) @@ -1051,7 +1072,7 @@ _080B584A:\n\ str r7, [sp, 0x4]\n\ movs r0, 0\n\ movs r1, 0\n\ - bl sub_80B5230\n\ + bl StartScriptMenuTask\n\ add sp, 0x18\n\ pop {r4-r7}\n\ pop {r0}\n\ -- cgit v1.2.3 From e1ce9a1122fdb173006f57c9a3b2a4b6ebae3629 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Sep 2017 18:29:09 -0400 Subject: FldEff_JumpLongGrass --- asm/field_effect_helpers.s | 57 ---------------------------------------------- src/field_effect_helpers.c | 18 +++++++++++++++ 2 files changed, 18 insertions(+), 57 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 74b1343b4..57fb84368 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,63 +6,6 @@ .text - thumb_func_start FldEff_JumpLongGrass -FldEff_JumpLongGrass: @ 8127220 - push {r4,lr} - ldr r4, _08127284 @ =gFieldEffectSpawnParams - adds r1, r4, 0x4 - adds r0, r4, 0 - movs r2, 0x8 - movs r3, 0x8 - bl sub_8060470 - ldr r0, _08127288 @ =gFieldEffectObjectTemplatePointers - ldr r0, [r0, 0x40] - movs r2, 0 - ldrsh r1, [r4, r2] - movs r3, 0x4 - ldrsh r2, [r4, r3] - movs r3, 0 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x40 - beq _0812727C - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - ldr r0, _0812728C @ =gSprites - adds r2, r0 - adds r3, r2, 0 - adds r3, 0x3E - ldrb r0, [r3] - movs r1, 0x2 - orrs r0, r1 - strb r0, [r3] - movs r0, 0x3 - ldrb r1, [r4, 0xC] - ands r1, r0 - lsls r1, 2 - ldrb r3, [r2, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2, 0x5] - ldr r0, [r4, 0x8] - strh r0, [r2, 0x2E] - movs r0, 0x12 - strh r0, [r2, 0x30] -_0812727C: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08127284: .4byte gFieldEffectSpawnParams -_08127288: .4byte gFieldEffectObjectTemplatePointers -_0812728C: .4byte gSprites - thumb_func_end FldEff_JumpLongGrass - thumb_func_start FldEff_ShortGrass FldEff_ShortGrass: @ 8127290 push {r4-r6,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 599441c3d..87cf29b4c 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -463,3 +463,21 @@ void unc_grass_tall(struct Sprite *sprite) sub_812882C(sprite, sprite->data0, 0); } } + +bool8 FldEff_JumpLongGrass(void) +{ + u8 spriteId; + struct Sprite *sprite; + + sub_8060470((s16 *)&gFieldEffectSpawnParams[0], (s16 *)&gFieldEffectSpawnParams[1], 8, 8); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[16], gFieldEffectSpawnParams[0], gFieldEffectSpawnParams[1], 0); + if (spriteId != MAX_SPRITES) + { + sprite = &gSprites[spriteId]; + sprite->coordOffsetEnabled = TRUE; + sprite->oam.priority = gFieldEffectSpawnParams[3]; + sprite->data0 = gFieldEffectSpawnParams[2]; + sprite->data1 = 18; + } + return FALSE; +} -- cgit v1.2.3 From e01228611b9662c1bfa57c98975f9120d0e8211e Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Sep 2017 18:35:01 -0400 Subject: FldEff_ShortGrass --- asm/field_effect_helpers.s | 82 ---------------------------------------------- src/field_effect_helpers.c | 24 ++++++++++++++ 2 files changed, 24 insertions(+), 82 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 57fb84368..b21e8db51 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,88 +6,6 @@ .text - thumb_func_start FldEff_ShortGrass -FldEff_ShortGrass: @ 8127290 - push {r4-r6,lr} - ldr r6, _08127324 @ =gFieldEffectSpawnParams - ldrb r0, [r6] - ldrb r1, [r6, 0x4] - ldrb r2, [r6, 0x8] - bl GetFieldObjectIdByLocalIdAndMap - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - ldr r0, _08127328 @ =gMapObjects - adds r5, r1, r0 - ldr r0, _0812732C @ =gFieldEffectObjectTemplatePointers - ldr r0, [r0, 0x78] - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x40 - beq _0812731C - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - ldr r4, _08127330 @ =gSprites - adds r2, r4 - adds r3, r2, 0 - adds r3, 0x3E - ldrb r0, [r3] - movs r1, 0x2 - orrs r0, r1 - strb r0, [r3] - ldrb r1, [r5, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r0, [r0, 0x5] - movs r1, 0xC - ands r1, r0 - ldrb r3, [r2, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2, 0x5] - ldr r0, [r6] - strh r0, [r2, 0x2E] - ldr r0, [r6, 0x4] - strh r0, [r2, 0x30] - ldr r0, [r6, 0x8] - strh r0, [r2, 0x32] - ldrb r1, [r5, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrh r0, [r0, 0x20] - strh r0, [r2, 0x34] - ldrb r1, [r5, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrh r0, [r0, 0x22] - strh r0, [r2, 0x36] -_0812731C: - movs r0, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08127324: .4byte gFieldEffectSpawnParams -_08127328: .4byte gMapObjects -_0812732C: .4byte gFieldEffectObjectTemplatePointers -_08127330: .4byte gSprites - thumb_func_end FldEff_ShortGrass - thumb_func_start sub_8127334 sub_8127334: @ 8127334 push {r4-r7,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 87cf29b4c..c2cc19a71 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -481,3 +481,27 @@ bool8 FldEff_JumpLongGrass(void) } return FALSE; } + +bool8 FldEff_ShortGrass(void) +{ + u8 mapObjectId; + struct MapObject *mapObject; + u8 spriteId; + struct Sprite *sprite; + + mapObjectId = GetFieldObjectIdByLocalIdAndMap(gFieldEffectSpawnParams[0], gFieldEffectSpawnParams[1], gFieldEffectSpawnParams[2]); + mapObject = &gMapObjects[mapObjectId]; + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[30], 0, 0, 0); + if (spriteId != MAX_SPRITES) + { + sprite = &(gSprites[spriteId]); + sprite->coordOffsetEnabled = TRUE; + sprite->oam.priority = gSprites[mapObject->spriteId].oam.priority; + sprite->data0 = gFieldEffectSpawnParams[0]; + sprite->data1 = gFieldEffectSpawnParams[1]; + sprite->data2 = gFieldEffectSpawnParams[2]; + sprite->data3 = gSprites[mapObject->spriteId].pos1.x; + sprite->data4 = gSprites[mapObject->spriteId].pos1.y; + } + return FALSE; +} -- cgit v1.2.3 From 95f856c39e81e2b723065e757b4dcf577441c558 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 9 Sep 2017 18:17:09 -0500 Subject: more script_menu refactoring --- data/event_scripts.s | 2 +- data/specials.inc | 2 +- include/script.h | 5 +- include/script_menu.h | 22 +++------ src/hof_pc.c | 4 +- src/menu.c | 4 +- src/scrcmd.c | 59 +++++++++++----------- src/script.c | 4 +- src/script_menu.c | 133 +++++++++++++++++++++++++++++--------------------- 9 files changed, 125 insertions(+), 110 deletions(-) diff --git a/data/event_scripts.s b/data/event_scripts.s index 33bb39308..6a95dd4a1 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -1688,7 +1688,7 @@ gUnknown_081A0009:: @ 81A0009 EventScript_1A0023: message gPCText_WhichPCShouldBeAccessed waittext - special TryCreatePCMenu + special ScriptMenu_TryCreatePCMenu waitstate jump EventScript_1A0033 end diff --git a/data/specials.inc b/data/specials.inc index a17bc943a..051a84bdb 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -269,7 +269,7 @@ gSpecials:: def_special ShowBerryBlenderRecordWindow def_special ResetTrickHouseEndRoomFlag def_special SetTrickHouseEndRoomFlag - def_special TryCreatePCMenu + def_special ScriptMenu_TryCreatePCMenu def_special AccessHallOfFamePC def_special sub_810D6A4 def_special CheckLeadMonCool diff --git a/include/script.h b/include/script.h index 2a738698c..74f22584e 100644 --- a/include/script.h +++ b/include/script.h @@ -3,6 +3,7 @@ struct ScriptContext; +typedef bool8 (*NativeScriptFunc)(void); typedef bool8 (*ScrCmdFunc)(struct ScriptContext *); typedef u8 Script[]; @@ -11,7 +12,7 @@ struct ScriptContext u8 stackDepth; u8 mode; u8 comparisonResult; - u8 (*nativePtr)(void); + NativeScriptFunc nativePtr; const u8 *scriptPtr; const u8 *stack[20]; ScrCmdFunc *cmdTable; @@ -23,7 +24,7 @@ struct ScriptContext void InitScriptContext(struct ScriptContext *ctx, void *cmdTable, void *cmdTableEnd); u8 SetupBytecodeScript(struct ScriptContext *ctx, const u8 *ptr); -void SetupNativeScript(struct ScriptContext *ctx, void *ptr); +void SetupNativeScript(struct ScriptContext *ctx, NativeScriptFunc ptr); void StopScript(struct ScriptContext *ctx); u8 RunScriptCommand(struct ScriptContext *ctx); u8 ScriptPush(struct ScriptContext *ctx, const u8 *ptr); diff --git a/include/script_menu.h b/include/script_menu.h index e8b45108e..8e88877f6 100644 --- a/include/script_menu.h +++ b/include/script_menu.h @@ -7,23 +7,13 @@ extern const u8 *const gUnknown_083CE048[]; bool8 ScriptMenu_Multichoice(u8 left, u8 top, u8 var3, u8 var4); bool8 ScriptMenu_MultichoiceWithDefault(u8 left, u8 top, u8 var3, u8 var4, u8 var5); -u16 GetStringWidthInTilesForScriptMenu(const u8 *str); -void DrawMultichoiceMenu(u8, u8, u8, const struct MenuAction *list, u8, u8); -void StartScriptMenuTask(u8, u8, u8, u8, u8, u8); -void Task_HandleMenuInput(u8); bool8 Multichoice(u8 var1, u8 var2, u8 var3, u8 var4); -void sub_80B53B4(u8, u8, u8, const struct MenuAction *list, u8); bool8 ScriptMenu_YesNo(u8 var1, u8 var2); -bool8 IsScriptActive(void); // unused -void task_yes_no_maybe(u8); -bool8 sub_80B5578(u8 left, u8 top, u8 multichoiceId, u8 a4, u8 columnCount); -void sub_80B5684(u8); -bool8 TryCreatePCMenu(void); -void CreatePCMenu(void); -void sub_80B5838(void); -void task_picbox(u8 taskId); -bool8 sub_80B58C4(u16 var1, u8 var2, u8 var3); -void *picbox_close(void); -bool8 sub_80B59AC(void); +bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, u8 a4, u8 columnCount); +bool8 ScriptMenu_TryCreatePCMenu(void); +void ScriptMenu_CreatePCMenu(void); +void ScriptMenu_DisplayPCStartupPrompt(void); +bool8 ScriptMenu_ShowPokemonPic(u16 var1, u8 var2, u8 var3); +NativeScriptFunc ScriptMenu_GetPicboxWaitFunc(void); #endif diff --git a/src/hof_pc.c b/src/hof_pc.c index 4646d171c..06da38a71 100644 --- a/src/hof_pc.c +++ b/src/hof_pc.c @@ -30,8 +30,8 @@ static void ReshowPCMenuAfterHallOfFamePC(void) ScriptContext2_Enable(); sub_8053E90(); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); - TryCreatePCMenu(); - sub_80B5838(); + ScriptMenu_TryCreatePCMenu(); + ScriptMenu_DisplayPCStartupPrompt(); CreateTask(Task_WaitForPaletteFade, 10); } diff --git a/src/menu.c b/src/menu.c index 1096fa0bd..c2909f82f 100644 --- a/src/menu.c +++ b/src/menu.c @@ -154,9 +154,9 @@ void MenuPrint(const u8 *str, u8 left, u8 top) sub_8003460(gMenuWindowPtr, str, gMenuTextTileOffset, left, top); } -void MenuZeroFillWindowRect(u8 a1, u8 a2, u8 a3, u8 a4) +void MenuZeroFillWindowRect(u8 left, u8 top, u8 right, u8 bottom) { - ZeroFillWindowRect(gMenuWindowPtr, a1, a2, a3, a4); + ZeroFillWindowRect(gMenuWindowPtr, left, top, right, bottom); } void MenuFillWindowRectWithBlankTile(u8 left, u8 top, u8 right, u8 bottom) diff --git a/src/scrcmd.c b/src/scrcmd.c index afa34c402..ace15c056 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -1198,9 +1198,9 @@ bool8 ScrCmd_waitbutton(struct ScriptContext *ctx) bool8 ScrCmd_yesnobox(struct ScriptContext *ctx) { - u8 v1 = ScriptReadByte(ctx); - u8 v2 = ScriptReadByte(ctx); - if (ScriptMenu_YesNo(v1, v2) == 1) + u8 left = ScriptReadByte(ctx); + u8 top = ScriptReadByte(ctx); + if (ScriptMenu_YesNo(left, top) == TRUE) { ScriptContext1_Stop(); return TRUE; @@ -1248,22 +1248,22 @@ bool8 ScrCmd_multichoicedef(struct ScriptContext *ctx) bool8 ScrCmd_showbox(struct ScriptContext *ctx) { - u8 v1 = ScriptReadByte(ctx); - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - u8 v4 = ScriptReadByte(ctx); - MenuDrawTextWindow(v1, v2, v3, v4); + u8 left = ScriptReadByte(ctx); + u8 top = ScriptReadByte(ctx); + u8 right = ScriptReadByte(ctx); + u8 bottom = ScriptReadByte(ctx); + MenuDrawTextWindow(left, top, right, bottom); return FALSE; } bool8 ScrCmd_multichoicerow(struct ScriptContext *ctx) { - u8 v1 = ScriptReadByte(ctx); - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - u8 v4 = ScriptReadByte(ctx); - u8 v5 = ScriptReadByte(ctx); - if (sub_80B5578(v1, v2, v3, v5, v4) == TRUE) + u8 left = ScriptReadByte(ctx); + u8 top = ScriptReadByte(ctx); + u8 multichoiceId = ScriptReadByte(ctx); + u8 numColumns = ScriptReadByte(ctx); + u8 ignoreBPress = ScriptReadByte(ctx); + if (ScriptMenu_MultichoiceGrid(left, top, multichoiceId, ignoreBPress, numColumns) == TRUE) { ScriptContext1_Stop(); return TRUE; @@ -1276,21 +1276,22 @@ bool8 ScrCmd_multichoicerow(struct ScriptContext *ctx) bool8 ScrCmd_hidebox(struct ScriptContext *ctx) { - u8 v1 = ScriptReadByte(ctx); - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - u8 v4 = ScriptReadByte(ctx); - MenuZeroFillWindowRect(v1, v2, v3, v4); + u8 left = ScriptReadByte(ctx); + u8 top = ScriptReadByte(ctx); + u8 right = ScriptReadByte(ctx); + u8 bottom = ScriptReadByte(ctx); + MenuZeroFillWindowRect(left, top, right, bottom); return FALSE; } +// unused bool8 ScrCmd_clearbox(struct ScriptContext *ctx) { - u8 v1 = ScriptReadByte(ctx); - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - u8 v4 = ScriptReadByte(ctx); - if (Multichoice(v1, v2, v3, v4) == 1) + u8 left = ScriptReadByte(ctx); + u8 top = ScriptReadByte(ctx); + u8 multichoiceId = ScriptReadByte(ctx); + u8 ignoreBPress = ScriptReadByte(ctx); + if (Multichoice(left, top, multichoiceId, ignoreBPress) == TRUE) { ScriptContext1_Stop(); return TRUE; @@ -1303,16 +1304,16 @@ bool8 ScrCmd_clearbox(struct ScriptContext *ctx) bool8 ScrCmd_showpokepic(struct ScriptContext *ctx) { - u16 v1 = VarGet(ScriptReadHalfword(ctx)); - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - sub_80B58C4(v1, v2, v3); + u16 species = VarGet(ScriptReadHalfword(ctx)); + u8 x = ScriptReadByte(ctx); + u8 y = ScriptReadByte(ctx); + ScriptMenu_ShowPokemonPic(species, x, y); return FALSE; } bool8 ScrCmd_hidepokepic(struct ScriptContext *ctx) { - void *func = picbox_close(); + void *func = ScriptMenu_GetPicboxWaitFunc(); if (!func) return FALSE; diff --git a/src/script.c b/src/script.c index 8f12da437..18abb6e84 100644 --- a/src/script.c +++ b/src/script.c @@ -40,7 +40,7 @@ u8 SetupBytecodeScript(struct ScriptContext *ctx, const u8 *ptr) return 1; } -void SetupNativeScript(struct ScriptContext *ctx, void *ptr) +void SetupNativeScript(struct ScriptContext *ctx, NativeScriptFunc ptr) { ctx->mode = 2; ctx->nativePtr = ptr; @@ -64,7 +64,7 @@ u8 RunScriptCommand(struct ScriptContext *ctx) case 2: if (ctx->nativePtr) { - if (ctx->nativePtr() == 1) + if (ctx->nativePtr() == TRUE) ctx->mode = 1; return 1; } diff --git a/src/script_menu.c b/src/script_menu.c index 4de5cec24..dc63f9f4a 100644 --- a/src/script_menu.c +++ b/src/script_menu.c @@ -1,4 +1,5 @@ #include "global.h" +#include "script.h" #include "script_menu.h" #include "event_data.h" #include "field_effect.h" @@ -581,9 +582,18 @@ extern u8 gPCText_WhichPCShouldBeAccessed[]; extern u16 gScriptResult; +static void Task_HandleMultichoiceInput(u8); +static void Task_HandleYesNoInput(u8); +static void Task_HandleMultichoiceGridInput(u8); +static u16 GetStringWidthInTilesForScriptMenu(const u8 *str); +static void DrawMultichoiceMenu(u8, u8, u8, const struct MenuAction *list, u8, u8); +static void StartScriptMenuTask(u8, u8, u8, u8, u8, u8); +static void sub_80B53B4(u8, u8, u8, const struct MenuAction *list, u8); +static bool8 IsPicboxClosed(void); + bool8 ScriptMenu_Multichoice(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPress) { - if (FuncIsActiveTask(Task_HandleMenuInput) == TRUE) + if (FuncIsActiveTask(Task_HandleMultichoiceInput) == TRUE) { return FALSE; } @@ -597,7 +607,7 @@ bool8 ScriptMenu_Multichoice(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPress) bool8 ScriptMenu_MultichoiceWithDefault(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPress, u8 defaultChoice) { - if (FuncIsActiveTask(Task_HandleMenuInput) == TRUE) + if (FuncIsActiveTask(Task_HandleMultichoiceInput) == TRUE) { return FALSE; } @@ -609,13 +619,13 @@ bool8 ScriptMenu_MultichoiceWithDefault(u8 left, u8 top, u8 multichoiceId, u8 ig } } -u16 GetStringWidthInTilesForScriptMenu(const u8 *str) +static u16 GetStringWidthInTilesForScriptMenu(const u8 *str) { // each tile on screen is 8x8, so it needs the number of tiles and not pixels, hence the division by 8. return (GetStringWidthGivenWindowConfig((struct WindowConfig *)&gWindowConfig_81E6CE4, str) + 7) / 8; } -void DrawMultichoiceMenu(u8 left, u8 top, u8 count, const struct MenuAction *list, u8 ignoreBPress, u8 cursorPos) +static void DrawMultichoiceMenu(u8 left, u8 top, u8 count, const struct MenuAction *list, u8 ignoreBPress, u8 cursorPos) { u16 width = GetStringWidthInTilesForScriptMenu(list[0].text); u16 newWidth; @@ -654,9 +664,9 @@ void DrawMultichoiceMenu(u8 left, u8 top, u8 count, const struct MenuAction *lis #define tIgnoreBPress data[4] #define tDoWrap data[5] -void StartScriptMenuTask(u8 left, u8 top, u8 right, u8 bottom, u8 ignoreBPress, u8 count) +static void StartScriptMenuTask(u8 left, u8 top, u8 right, u8 bottom, u8 ignoreBPress, u8 count) { - u8 taskId = CreateTask(Task_HandleMenuInput, 80); + u8 taskId = CreateTask(Task_HandleMultichoiceInput, 80); gTasks[taskId].tLeft = left; gTasks[taskId].tTop = top; @@ -670,7 +680,7 @@ void StartScriptMenuTask(u8 left, u8 top, u8 right, u8 bottom, u8 ignoreBPress, gTasks[taskId].tDoWrap = FALSE; } -void Task_HandleMenuInput(u8 taskId) +static void Task_HandleMultichoiceInput(u8 taskId) { s8 selection; @@ -702,21 +712,21 @@ void Task_HandleMenuInput(u8 taskId) } } -bool8 Multichoice(u8 var1, u8 var2, u8 multichoiceId, u8 ignoreBPress) +bool8 Multichoice(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPress) { - if (FuncIsActiveTask(Task_HandleMenuInput) == TRUE) + if (FuncIsActiveTask(Task_HandleMultichoiceInput) == TRUE) { return FALSE; } else { gScriptResult = 0xFF; - sub_80B53B4(var1, var2, gMultichoiceLists[multichoiceId].count, gMultichoiceLists[multichoiceId].list, ignoreBPress); + sub_80B53B4(left, top, gMultichoiceLists[multichoiceId].count, gMultichoiceLists[multichoiceId].list, ignoreBPress); return TRUE; } } -void sub_80B53B4(u8 left, u8 top, u8 count, const struct MenuAction *list, u8 ignoreBPress) +static void sub_80B53B4(u8 left, u8 top, u8 count, const struct MenuAction *list, u8 ignoreBPress) { u16 width = GetStringWidthInTilesForScriptMenu(list[0].text); u16 newWidth; @@ -740,21 +750,21 @@ void sub_80B53B4(u8 left, u8 top, u8 count, const struct MenuAction *list, u8 ig StartScriptMenuTask(left, top, right, bottom, ignoreBPress, count); } -bool8 ScriptMenu_YesNo(u8 var1, u8 var2) +bool8 ScriptMenu_YesNo(u8 left, u8 top) { u8 taskId; - if (FuncIsActiveTask(task_yes_no_maybe) == TRUE) + if (FuncIsActiveTask(Task_HandleYesNoInput) == TRUE) { return FALSE; } else { gScriptResult = 0xFF; - DisplayYesNoMenu(var1, var2, 1); - taskId = CreateTask(task_yes_no_maybe, 0x50); - gTasks[taskId].data[0] = var1; - gTasks[taskId].tTop = var2; + DisplayYesNoMenu(left, top, 1); + taskId = CreateTask(Task_HandleYesNoInput, 0x50); + gTasks[taskId].tLeft = left; + gTasks[taskId].tTop = top; return TRUE; } } @@ -768,7 +778,7 @@ bool8 IsScriptActive(void) return TRUE; } -void task_yes_no_maybe(u8 taskId) +static void Task_HandleYesNoInput(u8 taskId) { u8 left, top; @@ -800,11 +810,11 @@ void task_yes_no_maybe(u8 taskId) EnableBothScriptContexts(); } -bool8 sub_80B5578(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPress, u8 columnCount) +bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPress, u8 columnCount) { u8 bottom = 0; - if (FuncIsActiveTask(sub_80B5684) == TRUE) + if (FuncIsActiveTask(Task_HandleMultichoiceGridInput) == TRUE) { return FALSE; } @@ -817,7 +827,7 @@ bool8 sub_80B5578(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPress, u8 columnC sub_807274C(left, top, gMultichoiceLists[multichoiceId].count, 0, gMultichoiceLists[multichoiceId].list, columnCount, 0); - taskId = CreateTask(sub_80B5684, 80); + taskId = CreateTask(Task_HandleMultichoiceGridInput, 80); if (!((gMultichoiceLists[multichoiceId].count >> 1) < columnCount || (gMultichoiceLists[multichoiceId].count & 1)) || columnCount == 1 || gMultichoiceLists[multichoiceId].count == columnCount) @@ -839,7 +849,7 @@ bool8 sub_80B5578(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPress, u8 columnC } } -void sub_80B5684(u8 taskId) +static void Task_HandleMultichoiceGridInput(u8 taskId) { s8 selection = sub_80727CC(); @@ -870,22 +880,22 @@ void sub_80B5684(u8 taskId) #undef tIgnoreBPress #undef tDoWrap -bool8 TryCreatePCMenu(void) +bool8 ScriptMenu_TryCreatePCMenu(void) { - if (FuncIsActiveTask(Task_HandleMenuInput) == TRUE) + if (FuncIsActiveTask(Task_HandleMultichoiceInput) == TRUE) { return FALSE; } else { gScriptResult = 0xFF; - CreatePCMenu(); + ScriptMenu_CreatePCMenu(); return TRUE; } } #if ENGLISH -void CreatePCMenu(void) +void ScriptMenu_CreatePCMenu(void) { u16 playersPCWidth = GetStringWidthInTilesForScriptMenu(gPCText_PlayersPC); u8 width; @@ -921,7 +931,7 @@ void CreatePCMenu(void) } #elif GERMAN __attribute__((naked)) -void CreatePCMenu(void) { +void ScriptMenu_CreatePCMenu(void) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ sub sp, 0x18\n\ @@ -1084,72 +1094,85 @@ _080B588C: .4byte gPCText_PlayersPC\n\ } #endif -void sub_80B5838(void) +void ScriptMenu_DisplayPCStartupPrompt(void) { MenuDisplayMessageBox(); MenuPrint(gPCText_WhichPCShouldBeAccessed, 2, 15); } -void task_picbox(u8 taskId) +#define tState data[0] +#define tMonSpecies data[1] +#define tMonSpriteId data[2] +#define tWindowX data[3] +#define tWindowY data[4] + +static void Task_PokemonPicWindow(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch (task->data[0]) + switch (task->tState) { case 0: - task->data[0]++; + task->tState++; break; case 1: break; case 2: - FreeResourcesAndDestroySprite(&gSprites[task->data[2]]); - task->data[0]++; + FreeResourcesAndDestroySprite(&gSprites[task->tMonSpriteId]); + task->tState++; break; case 3: - MenuZeroFillWindowRect(task->data[3], task->data[4], task->data[3] + 9, task->data[4] + 10); + MenuZeroFillWindowRect(task->tWindowX, task->tWindowY, task->tWindowX + 9, task->tWindowY + 10); DestroyTask(taskId); break; } } -bool8 sub_80B58C4(u16 var1, u8 var2, u8 var3) +bool8 ScriptMenu_ShowPokemonPic(u16 species, u8 x, u8 y) { u8 taskId; - u8 var; + u8 spriteId; - if (FindTaskIdByFunc(task_picbox) != 0xFF) + if (FindTaskIdByFunc(Task_PokemonPicWindow) != 0xFF) + { return FALSE; + } else { - MenuDrawTextWindow(var2, var3, var2 + 9, var3 + 10); - taskId = CreateTask(task_picbox, 0x50); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = var1; - var = CreateMonSprite_PicBox(var1, var2 * 8 + 40, var3 * 8 + 40, 0); - gTasks[taskId].data[2] = var; - gTasks[taskId].data[3] = var2; - gTasks[taskId].data[4] = var3; - gSprites[var].callback = SpriteCallbackDummy; - gSprites[var].oam.priority = 0; + MenuDrawTextWindow(x, y, x + 9, y + 10); + taskId = CreateTask(Task_PokemonPicWindow, 0x50); + gTasks[taskId].tState = 0; + gTasks[taskId].tMonSpecies = species; + spriteId = CreateMonSprite_PicBox(species, x * 8 + 40, y * 8 + 40, 0); + gTasks[taskId].tMonSpriteId = spriteId; + gTasks[taskId].tWindowX = x; + gTasks[taskId].tWindowY = y; + gSprites[spriteId].callback = SpriteCallbackDummy; + gSprites[spriteId].oam.priority = 0; return TRUE; } -} +} -void *picbox_close(void) +NativeScriptFunc ScriptMenu_GetPicboxWaitFunc(void) { - u8 taskId = FindTaskIdByFunc(task_picbox); + u8 taskId = FindTaskIdByFunc(Task_PokemonPicWindow); if (taskId == 0xFF) return NULL; - - gTasks[taskId].data[0]++; - return (void *)sub_80B59AC; + gTasks[taskId].tState++; + return IsPicboxClosed; } -bool8 sub_80B59AC(void) +static bool8 IsPicboxClosed(void) { - if (FindTaskIdByFunc(task_picbox) == 0xFF) + if (FindTaskIdByFunc(Task_PokemonPicWindow) == 0xFF) return TRUE; else return FALSE; } + +#undef tState +#undef tMonSpecies +#undef tMonSpriteId +#undef tWindowX +#undef tWindowY -- cgit v1.2.3 From 66a148af9fea2a7029f5aae362e80b440686064e Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 9 Sep 2017 18:33:29 -0500 Subject: let's not mess around with typedefs now --- include/script.h | 5 ++--- include/script_menu.h | 2 +- src/scrcmd.c | 10 +++++----- src/script.c | 2 +- src/script_menu.c | 2 +- 5 files changed, 10 insertions(+), 11 deletions(-) diff --git a/include/script.h b/include/script.h index 74f22584e..25c7649b4 100644 --- a/include/script.h +++ b/include/script.h @@ -3,7 +3,6 @@ struct ScriptContext; -typedef bool8 (*NativeScriptFunc)(void); typedef bool8 (*ScrCmdFunc)(struct ScriptContext *); typedef u8 Script[]; @@ -12,7 +11,7 @@ struct ScriptContext u8 stackDepth; u8 mode; u8 comparisonResult; - NativeScriptFunc nativePtr; + bool8 (*nativePtr)(void); const u8 *scriptPtr; const u8 *stack[20]; ScrCmdFunc *cmdTable; @@ -24,7 +23,7 @@ struct ScriptContext void InitScriptContext(struct ScriptContext *ctx, void *cmdTable, void *cmdTableEnd); u8 SetupBytecodeScript(struct ScriptContext *ctx, const u8 *ptr); -void SetupNativeScript(struct ScriptContext *ctx, NativeScriptFunc ptr); +void SetupNativeScript(struct ScriptContext *ctx, bool8 (*ptr)(void)); void StopScript(struct ScriptContext *ctx); u8 RunScriptCommand(struct ScriptContext *ctx); u8 ScriptPush(struct ScriptContext *ctx, const u8 *ptr); diff --git a/include/script_menu.h b/include/script_menu.h index 8e88877f6..e621b32a4 100644 --- a/include/script_menu.h +++ b/include/script_menu.h @@ -14,6 +14,6 @@ bool8 ScriptMenu_TryCreatePCMenu(void); void ScriptMenu_CreatePCMenu(void); void ScriptMenu_DisplayPCStartupPrompt(void); bool8 ScriptMenu_ShowPokemonPic(u16 var1, u8 var2, u8 var3); -NativeScriptFunc ScriptMenu_GetPicboxWaitFunc(void); +bool8 (*ScriptMenu_GetPicboxWaitFunc(void))(void); #endif diff --git a/src/scrcmd.c b/src/scrcmd.c index ace15c056..28379d2f2 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -109,8 +109,8 @@ bool8 ScrCmd_end(struct ScriptContext *ctx) bool8 ScrCmd_jumpasm(struct ScriptContext *ctx) { - u32 addr = ScriptReadWord(ctx); - SetupNativeScript(ctx, (void *)addr); + bool8 (*addr)(void) = (bool8 (*)(void))ScriptReadWord(ctx); + SetupNativeScript(ctx, addr); return TRUE; } @@ -1313,10 +1313,10 @@ bool8 ScrCmd_showpokepic(struct ScriptContext *ctx) bool8 ScrCmd_hidepokepic(struct ScriptContext *ctx) { - void *func = ScriptMenu_GetPicboxWaitFunc(); - if (!func) - return FALSE; + bool8 (*func)(void) = ScriptMenu_GetPicboxWaitFunc(); + if (func == NULL) + return FALSE; SetupNativeScript(ctx, func); return TRUE; } diff --git a/src/script.c b/src/script.c index 18abb6e84..394085d4a 100644 --- a/src/script.c +++ b/src/script.c @@ -40,7 +40,7 @@ u8 SetupBytecodeScript(struct ScriptContext *ctx, const u8 *ptr) return 1; } -void SetupNativeScript(struct ScriptContext *ctx, NativeScriptFunc ptr) +void SetupNativeScript(struct ScriptContext *ctx, bool8 (*ptr)(void)) { ctx->mode = 2; ctx->nativePtr = ptr; diff --git a/src/script_menu.c b/src/script_menu.c index dc63f9f4a..253157b47 100644 --- a/src/script_menu.c +++ b/src/script_menu.c @@ -1153,7 +1153,7 @@ bool8 ScriptMenu_ShowPokemonPic(u16 species, u8 x, u8 y) } } -NativeScriptFunc ScriptMenu_GetPicboxWaitFunc(void) +bool8 (*ScriptMenu_GetPicboxWaitFunc(void))(void) { u8 taskId = FindTaskIdByFunc(Task_PokemonPicWindow); -- cgit v1.2.3 From 61d38ca54027b9d5d69216beadcd8644a9818c1f Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Sep 2017 19:45:36 -0400 Subject: sub_8127334 --- asm/field_effect_helpers.s | 125 --------------------------------------------- src/field_effect_helpers.c | 36 +++++++++++++ 2 files changed, 36 insertions(+), 125 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index b21e8db51..e90d6e8bb 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,131 +6,6 @@ .text - thumb_func_start sub_8127334 -sub_8127334: @ 8127334 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - adds r4, r0, 0 - ldrh r0, [r4, 0x2E] - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r4, 0x30] - lsls r1, 24 - lsrs r1, 24 - ldrh r2, [r4, 0x32] - lsls r2, 24 - lsrs r2, 24 - mov r3, sp - bl TryGetFieldObjectIdByLocalIdAndMap - lsls r0, 24 - cmp r0, 0 - bne _08127372 - ldr r5, _0812737C @ =gMapObjects - mov r0, sp - ldrb r1, [r0] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r1, r0, r5 - ldrb r0, [r1, 0x2] - lsls r0, 29 - cmp r0, 0 - blt _08127380 -_08127372: - adds r0, r4, 0 - movs r1, 0x29 - bl FieldEffectStop - b _08127416 - .align 2, 0 -_0812737C: .4byte gMapObjects -_08127380: - ldrb r0, [r1, 0x5] - bl GetFieldObjectGraphicsInfo - mov r8, r0 - mov r0, sp - ldrb r1, [r0] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrb r1, [r0, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08127424 @ =gSprites - adds r6, r0, r1 - ldrh r5, [r6, 0x22] - ldrh r7, [r6, 0x20] - movs r0, 0x20 - ldrsh r1, [r6, r0] - movs r2, 0x34 - ldrsh r0, [r4, r2] - cmp r1, r0 - bne _081273BC - lsls r0, r5, 16 - asrs r0, 16 - movs r2, 0x36 - ldrsh r1, [r4, r2] - cmp r0, r1 - beq _081273D6 -_081273BC: - strh r7, [r4, 0x34] - strh r5, [r4, 0x36] - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _081273D6 - adds r0, r4, 0 - movs r1, 0 - bl StartSpriteAnim -_081273D6: - strh r7, [r4, 0x20] - strh r5, [r4, 0x22] - mov r1, r8 - ldrh r0, [r1, 0xA] - lsls r0, 16 - asrs r0, 17 - subs r0, 0x8 - strh r0, [r4, 0x26] - adds r0, r6, 0 - adds r0, 0x43 - ldrb r0, [r0] - subs r0, 0x1 - adds r1, r4, 0 - adds r1, 0x43 - strb r0, [r1] - ldrb r0, [r6, 0x5] - movs r1, 0xC - ands r1, r0 - ldrb r2, [r4, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, 0x5] - adds r0, r6, 0 - adds r0, 0x3E - ldrb r1, [r0] - lsls r1, 29 - lsrs r1, 31 - adds r0, r4, 0 - bl sub_806487C -_08127416: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08127424: .4byte gSprites - thumb_func_end sub_8127334 - thumb_func_start FldEff_SandFootprints FldEff_SandFootprints: @ 8127428 push {r4,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index c2cc19a71..5fcaf7caf 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -505,3 +505,39 @@ bool8 FldEff_ShortGrass(void) } return FALSE; } + +void sub_8127334(struct Sprite *sprite) +{ + u8 mapObjectId; + s16 x; + s16 y; + const struct MapObjectGraphicsInfo *graphicsInfo; + struct Sprite *linkedSprite; + + if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjectId) || !gMapObjects[mapObjectId].mapobj_bit_18) + { + FieldEffectStop(sprite, FLDEFF_SHORT_GRASS); + } + else + { + graphicsInfo = GetFieldObjectGraphicsInfo(gMapObjects[mapObjectId].graphicsId); + linkedSprite = &gSprites[gMapObjects[mapObjectId].spriteId]; + y = linkedSprite->pos1.y; + x = linkedSprite->pos1.x; + if (x != sprite->data3 || y != sprite->data4) + { + sprite->data3 = x; + sprite->data4 = y; + if (sprite->animEnded) + { + StartSpriteAnim(sprite, 0); + } + } + sprite->pos1.x = x; + sprite->pos1.y = y; + sprite->pos2.y = (graphicsInfo->height >> 1) - 8; + sprite->subpriority = linkedSprite->subpriority - 1; + sprite->oam.priority = linkedSprite->oam.priority; + sub_806487C(sprite, linkedSprite->invisible); + } +} -- cgit v1.2.3 From 7edcec9a78710e29922e472358f82d546f6ea592 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 9 Sep 2017 18:52:41 -0500 Subject: name some money and battle_setup functions --- include/battle_setup.h | 2 +- include/money.h | 14 +++++++------- src/battle_4.c | 8 ++++---- src/battle_setup.c | 2 +- src/item_menu.c | 10 +++++----- src/money.c | 52 +++++++++++++++++++------------------------------- src/scrcmd.c | 20 +++++++++---------- src/shop.c | 14 +++++++------- 8 files changed, 55 insertions(+), 67 deletions(-) diff --git a/include/battle_setup.h b/include/battle_setup.h index c8c463f6d..1aa195d92 100644 --- a/include/battle_setup.h +++ b/include/battle_setup.h @@ -98,7 +98,7 @@ bool32 GetTrainerFlagFromScriptPointer(u8 *data); u8 trainer_flag_check(u16); void trainer_flag_set(u16); void trainer_flag_clear(u16); -void sub_80825E4(void); +void BattleSetup_StartTrainerBattle(void); void sub_808260C(void); void do_choose_name_or_words_screen(void); //void sub_80826B0(void); diff --git a/include/money.h b/include/money.h index 06ac00e92..5a0acd482 100644 --- a/include/money.h +++ b/include/money.h @@ -2,15 +2,15 @@ #define GUARD_MONEY_H bool8 IsEnoughMoney(u32, u32); -void sub_80B79B8(u32 *, u32); -void sub_80B79E0(u32 *, u32); -void sub_80B79F8(u8 *buffer, u32 arg1, u8 arg2); -void sub_80B7A94(u32 arg0, u8 arg1, u8 x, u8 y); +void AddMoney(u32 *, u32); +void RemoveMoney(u32 *, u32); +void GetMoneyAmountText(u8 *buffer, u32 arg1, u8 arg2); +void PrintMoneyAmount(u32 arg0, u8 arg1, u8 x, u8 y); void sub_80B7AEC(u32, u8 left, u8 top); void sub_80B7B34(u8, u8, int); -void sub_80B7BEC(u32, u8, u8); -void sub_80B7C14(u32, u8, u8); -void RemoveMoneyLabelObject(u8, u8); +void UpdateMoneyWindow(u32, u8, u8); +void OpenMoneyWindow(u32, u8, u8); +void CloseMoneyWindow(u8, u8); bool8 sub_80B7CE8(void); void sub_80B7D0C(void); diff --git a/src/battle_4.c b/src/battle_4.c index d8141bad1..ef8307da2 100644 --- a/src/battle_4.c +++ b/src/battle_4.c @@ -144,7 +144,7 @@ void sub_802BBD4(u8 r0, u8 r1, u8 r2, u8 r3, u8 sp0); void nullsub_6(void); void ReshowBattleScreenAfterMenu(void); void sub_800F808(void); -void sub_80B79B8(u32* moneySaveblock, u32 to_give); +void AddMoney(u32* moneySaveblock, u32 to_give); void sub_80156DC(void); //set sentpokes value bool8 sub_8014AB8(u8 bank); //can run from battle u8 CountAliveMons(u8 caseID); @@ -11717,7 +11717,7 @@ static void atk5D_getmoneyreward(void) money_to_give = 1 * gTrainerMoney[i * 4 + 1] * money_to_give; } - sub_80B79B8(&gSaveBlock1.money, money_to_give); + AddMoney(&gSaveBlock1.money, money_to_give); gBattleTextBuff1[0] = 0xFD; gBattleTextBuff1[1] = 1; gBattleTextBuff1[2] = 4; @@ -11889,7 +11889,7 @@ _0802413C:\n\ _08024140:\n\ mov r0, r8\n\ adds r1, r4, 0\n\ - bl sub_80B79B8\n\ + bl AddMoney\n\ ldr r1, _0802418C @ =gBattleTextBuff1\n\ movs r0, 0xFD\n\ strb r0, [r1]\n\ @@ -14186,7 +14186,7 @@ static void atk91_givepaydaymoney(void) { if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) && gPaydayMoney) { - sub_80B79B8(&gSaveBlock1.money, gPaydayMoney * BATTLE_STRUCT->moneyMultiplier); + AddMoney(&gSaveBlock1.money, gPaydayMoney * BATTLE_STRUCT->moneyMultiplier); gBattleTextBuff1[0] = 0xFD; gBattleTextBuff1[1] = 1; gBattleTextBuff1[2] = 2; diff --git a/src/battle_setup.c b/src/battle_setup.c index 31c127416..453bd1e6f 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -1037,7 +1037,7 @@ void trainer_flag_clear(u16 flag) FlagReset(TRAINER_FLAG_START + flag); } -void sub_80825E4(void) +void BattleSetup_StartTrainerBattle(void) { gBattleTypeFlags = BATTLE_TYPE_TRAINER; gMain.savedCallback = sub_808260C; diff --git a/src/item_menu.c b/src/item_menu.c index 4436bdfbe..6c7c643ab 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -3115,7 +3115,7 @@ static void sub_80A6760(u8 taskId) static void BuyMenuPrintItemQuantityAndPrice(u8 taskId) { sub_80A36B8(gBGTilemapBuffers[1], 0, 0, 31, 31); - RemoveMoneyLabelObject(0, 0); + CloseMoneyWindow(0, 0); MenuZeroFillWindowRect(0, 4, 13, 13); MenuZeroFillWindowRect(0, 14, 29, 19); gTasks[taskId].func = sub_80A6760; @@ -3123,20 +3123,20 @@ static void BuyMenuPrintItemQuantityAndPrice(u8 taskId) static void BuyMenuDisplayMessage(u16 itemId, u16 quantity) { - sub_80B7A94(ItemId_GetPrice(itemId) / 2 * quantity, 6, 6, 11); + PrintMoneyAmount(ItemId_GetPrice(itemId) / 2 * quantity, 6, 6, 11); ConvertIntToDecimalStringN(gStringVar1, ItemId_GetPrice(itemId) / 2 * quantity, STR_CONV_MODE_LEFT_ALIGN, 6); } static void sub_80A683C(void) { - sub_80B7C14(gSaveBlock1.money, 0, 0); + OpenMoneyWindow(gSaveBlock1.money, 0, 0); sub_80A4008(gBGTilemapBuffers[1], 1, 1, 12, 2); } static void sub_80A6870(u16 itemId, u8 quantity) { - sub_80B79B8(&gSaveBlock1.money, ItemId_GetPrice(itemId) / 2 * quantity); - sub_80B7BEC(gSaveBlock1.money, 0, 0); + AddMoney(&gSaveBlock1.money, ItemId_GetPrice(itemId) / 2 * quantity); + UpdateMoneyWindow(gSaveBlock1.money, 0, 0); } static void sub_80A68A4(void) diff --git a/src/money.c b/src/money.c index 67b7eb03f..5d0f0ae8d 100644 --- a/src/money.c +++ b/src/money.c @@ -25,7 +25,7 @@ bool8 IsEnoughMoney(u32 budget, u32 cost) return FALSE; } -void sub_80B79B8(u32 *arg0, u32 arg1) +void AddMoney(u32 *arg0, u32 arg1) { if (*arg0 > *arg0 + arg1) { @@ -40,7 +40,7 @@ void sub_80B79B8(u32 *arg0, u32 arg1) } } -void sub_80B79E0(u32 *arg0, u32 arg1) +void RemoveMoney(u32 *arg0, u32 arg1) { if (*arg0 < arg1) { @@ -52,39 +52,25 @@ void sub_80B79E0(u32 *arg0, u32 arg1) } } -void sub_80B79F8(u8 *buffer, u32 arg1, u8 arg2) +void GetMoneyAmountText(u8 *buffer, u32 amount, u8 arg2) { u8 width; u8 i; - if (arg1 > 999999) - { + if (amount > 999999) width = 7; - } - else if (arg1 > 99999) - { + else if (amount > 99999) width = 6; - } - else if (arg1 > 10000) - { + else if (amount > 10000) width = 5; - } - else if (arg1 > 999) - { + else if (amount > 999) width = 4; - } - else if (arg1 > 99) - { + else if (amount > 99) width = 3; - } - else if (arg1 > 9) - { + else if (amount > 9) width = 2; - } else - { width = 1; - } buffer[0] = EXT_CTRL_CODE_BEGIN; buffer[1] = 0x14; @@ -100,7 +86,7 @@ void sub_80B79F8(u8 *buffer, u32 arg1, u8 arg2) buffer[0] = CHAR_CURRENCY; buffer += 1; - buffer = ConvertIntToDecimalString(buffer, arg1); + buffer = ConvertIntToDecimalString(buffer, amount); buffer[0] = EXT_CTRL_CODE_BEGIN; buffer[1] = 0x14; @@ -108,16 +94,18 @@ void sub_80B79F8(u8 *buffer, u32 arg1, u8 arg2) buffer[3] = EOS; } -void sub_80B7A94(u32 arg0, u8 size, u8 x, u8 y) +void PrintMoneyAmount(u32 amount, u8 size, u8 x, u8 y) { u8 buffer[16]; u8 stringWidth; - sub_80B79F8(buffer, arg0, size); + GetMoneyAmountText(buffer, amount, size); stringWidth = sub_8072CA4(buffer); if (stringWidth >= (size + 1) * 8) + { MenuPrint(buffer, x, y); + } else { int xPlusOne = x + 1; @@ -241,15 +229,15 @@ _080B7BE8: .4byte 0x0600f840\n\ .syntax divided\n"); } -void sub_80B7BEC(u32 arg0, u8 x, u8 y) +void UpdateMoneyWindow(u32 amount, u8 x, u8 y) { - sub_80B7A94(arg0, 6, x + 6, y + 1); + PrintMoneyAmount(amount, 6, x + 6, y + 1); } -void sub_80B7C14(u32 arg0, u8 x, u8 y) +void OpenMoneyWindow(u32 amount, u8 x, u8 y) { MenuDrawTextWindow(x, y, x + 13, y + 3); - sub_80B7BEC(arg0, x, y); + UpdateMoneyWindow(amount, x, y); LoadCompressedObjectPic(&gUnknown_083CF584); LoadCompressedObjectPalette(&gUnknown_083CF58C); @@ -257,7 +245,7 @@ void sub_80B7C14(u32 arg0, u8 x, u8 y) gUnknown_02038734 = CreateSprite(&gSpriteTemplate_83CF56C, x * 8 + 19, y * 8 + 11, 0); } -void RemoveMoneyLabelObject(u8 x, u8 y) +void CloseMoneyWindow(u8 x, u8 y) { DestroySpriteAndFreeResources(&gSprites[gUnknown_02038734]); FreeSpritePaletteByTag(SPRITE_TAG_MONEY); @@ -271,5 +259,5 @@ bool8 sub_80B7CE8(void) void sub_80B7D0C(void) { - sub_80B79E0(&gSaveBlock1.money, gSpecialVar_0x8005); + RemoveMoney(&gSaveBlock1.money, gSpecialVar_0x8005); } diff --git a/src/scrcmd.c b/src/scrcmd.c index 28379d2f2..3cf4b9533 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -1500,7 +1500,7 @@ bool8 ScrCmd_givemoney(struct ScriptContext *ctx) u32 amount = ScriptReadWord(ctx); u8 ignore = ScriptReadByte(ctx); if (!ignore) - sub_80B79B8(&gSaveBlock1.money, amount); + AddMoney(&gSaveBlock1.money, amount); return FALSE; } @@ -1509,7 +1509,7 @@ bool8 ScrCmd_paymoney(struct ScriptContext *ctx) u32 amount = ScriptReadWord(ctx); u8 ignore = ScriptReadByte(ctx); if (!ignore) - sub_80B79E0(&gSaveBlock1.money, amount); + RemoveMoney(&gSaveBlock1.money, amount); return FALSE; } @@ -1524,19 +1524,19 @@ bool8 ScrCmd_checkmoney(struct ScriptContext *ctx) bool8 ScrCmd_showmoney(struct ScriptContext *ctx) { - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); + u8 x = ScriptReadByte(ctx); + u8 y = ScriptReadByte(ctx); u8 ignore = ScriptReadByte(ctx); if (!ignore) - sub_80B7C14(gSaveBlock1.money, v2, v3); + OpenMoneyWindow(gSaveBlock1.money, x, y); return FALSE; } bool8 ScrCmd_hidemoney(struct ScriptContext *ctx) { - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - RemoveMoneyLabelObject(v2, v3); + u8 x = ScriptReadByte(ctx); + u8 y = ScriptReadByte(ctx); + CloseMoneyWindow(x, y); return FALSE; } @@ -1546,7 +1546,7 @@ bool8 ScrCmd_updatemoney(struct ScriptContext *ctx) u8 v3 = ScriptReadByte(ctx); u8 ignore = ScriptReadByte(ctx); if (!ignore) - sub_80B7BEC(gSaveBlock1.money, v2, v3); + UpdateMoneyWindow(gSaveBlock1.money, v2, v3); return FALSE; } @@ -1582,7 +1582,7 @@ bool8 ScrCmd_trainerbattle(struct ScriptContext *ctx) bool8 ScrCmd_reptrainerbattle(struct ScriptContext *ctx) { - sub_80825E4(); + BattleSetup_StartTrainerBattle(); return TRUE; } diff --git a/src/shop.c b/src/shop.c index 6a88f1394..9ec79aef6 100644 --- a/src/shop.c +++ b/src/shop.c @@ -294,7 +294,7 @@ void BuyMenuDrawGraphics(void) gMartInfo.cursor = zero; gMartInfo.choicesAbove = zero2; MenuZeroFillWindowRect(0, 0, 0x20, 0x20); - sub_80B7C14(gSaveBlock1.money, 0, 0); + OpenMoneyWindow(gSaveBlock1.money, 0, 0); sub_80B3764(0, 7); sub_80B37EC(); sub_80B3270(); @@ -530,7 +530,7 @@ void sub_80B37F8(u8 taskId) u16 itemId = gMartInfo.itemList[itemListIndex]; u32 price = (ItemId_GetPrice(itemId) >> GetPriceReduction(1)); - sub_80B7A94(gTasks[taskId].data[1] * price, 6, 6, 11); + PrintMoneyAmount(gTasks[taskId].data[1] * price, 6, 6, 11); gStringVar1[0] = EXT_CTRL_CODE_BEGIN; gStringVar1[1] = 0x14; gStringVar1[2] = 0x6; @@ -559,7 +559,7 @@ void sub_80B389C(u16 itemId, u8 var2, bool32 hasControlCode) if (hasControlCode != FALSE) stringPtr = &gStringVar1[3]; - sub_80B79F8(stringPtr, (ItemId_GetPrice(itemId) >> GetPriceReduction(1)), 0x4); + GetMoneyAmountText(stringPtr, (ItemId_GetPrice(itemId) >> GetPriceReduction(1)), 0x4); MenuPrint_PixelCoords(&gStringVar1[0], 0xCA, var2 << 3, 1); } @@ -588,7 +588,7 @@ void sub_80B3930(u16 itemId, u8 var2, bool32 hasControlCode) } else { - sub_80B79F8(stringPtr, gDecorations[itemId].price, 0x4); + GetMoneyAmountText(stringPtr, gDecorations[itemId].price, 0x4); MenuPrint_PixelCoords(&gStringVar1[0], 0xCA, var2 << 3, 0x1); } } @@ -648,9 +648,9 @@ void sub_80B3AEC(u8 taskId) void sub_80B3B80(u8 taskId) { IncrementGameStat(0x26); - sub_80B79E0(&gSaveBlock1.money, gMartTotalCost); + RemoveMoney(&gSaveBlock1.money, gMartTotalCost); PlaySE(SE_REGI); - sub_80B7BEC(gSaveBlock1.money, 0, 0); + UpdateMoneyWindow(gSaveBlock1.money, 0, 0); gTasks[taskId].func = sub_80B3AEC; } @@ -1165,7 +1165,7 @@ void Task_ExitBuyMenu(u8 taskId) { if (!gPaletteFade.active) { - RemoveMoneyLabelObject(0, 0); + CloseMoneyWindow(0, 0); BuyMenuFreeMemory(); SetMainCallback2(c2_exit_to_overworld_2_switch); DestroyTask(taskId); -- cgit v1.2.3 From 261efc84820de61132aeaaff8901f412f0572d62 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Sep 2017 19:54:34 -0400 Subject: FldEff_SandFootprints --- asm/field_effect_helpers.s | 57 ---------------------------------------------- src/field_effect_helpers.c | 18 +++++++++++++++ 2 files changed, 18 insertions(+), 57 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index e90d6e8bb..20fafd213 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,63 +6,6 @@ .text - thumb_func_start FldEff_SandFootprints -FldEff_SandFootprints: @ 8127428 - push {r4,lr} - ldr r4, _08127490 @ =gFieldEffectSpawnParams - adds r1, r4, 0x4 - adds r0, r4, 0 - movs r2, 0x8 - movs r3, 0x8 - bl sub_8060470 - ldr r0, _08127494 @ =gFieldEffectObjectTemplatePointers - ldr r0, [r0, 0x2C] - movs r2, 0 - ldrsh r1, [r4, r2] - movs r3, 0x4 - ldrsh r2, [r4, r3] - ldrb r3, [r4, 0x8] - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x40 - beq _08127486 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08127498 @ =gSprites - adds r0, r1 - adds r3, r0, 0 - adds r3, 0x3E - ldrb r1, [r3] - movs r2, 0x2 - orrs r1, r2 - strb r1, [r3] - movs r1, 0x3 - ldrb r2, [r4, 0xC] - ands r2, r1 - lsls r2, 2 - ldrb r3, [r0, 0x5] - movs r1, 0xD - negs r1, r1 - ands r1, r3 - orrs r1, r2 - strb r1, [r0, 0x5] - movs r1, 0xD - strh r1, [r0, 0x3C] - ldrb r1, [r4, 0x10] - bl StartSpriteAnim -_08127486: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08127490: .4byte gFieldEffectSpawnParams -_08127494: .4byte gFieldEffectObjectTemplatePointers -_08127498: .4byte gSprites - thumb_func_end FldEff_SandFootprints - thumb_func_start FldEff_DeepSandFootprints FldEff_DeepSandFootprints: @ 812749C push {r4,r5,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 5fcaf7caf..d9055f262 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -541,3 +541,21 @@ void sub_8127334(struct Sprite *sprite) sub_806487C(sprite, linkedSprite->invisible); } } + +bool8 FldEff_SandFootprints(void) +{ + u8 spriteId; + struct Sprite *sprite; + + sub_8060470((s16 *)&gFieldEffectSpawnParams[0], (s16 *)&gFieldEffectSpawnParams[1], 8, 8); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[11], gFieldEffectSpawnParams[0], gFieldEffectSpawnParams[1], gFieldEffectSpawnParams[2]); + if (spriteId != MAX_SPRITES) + { + sprite = &gSprites[spriteId]; + sprite->coordOffsetEnabled = TRUE; + sprite->oam.priority = gFieldEffectSpawnParams[3]; + sprite->data7 = 13; + StartSpriteAnim(sprite, gFieldEffectSpawnParams[4]); + } + return FALSE; +} -- cgit v1.2.3 From e9ff33791bf99e1671dcd94830b814aec2fa733d Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Sep 2017 19:57:48 -0400 Subject: FldEff_DeepSandFootprints --- asm/field_effect_helpers.s | 58 ---------------------------------------------- src/field_effect_helpers.c | 46 +++++++++++++++++++++++++----------- 2 files changed, 32 insertions(+), 72 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 20fafd213..ffc7b3e9f 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,64 +6,6 @@ .text - thumb_func_start FldEff_DeepSandFootprints -FldEff_DeepSandFootprints: @ 812749C - push {r4,r5,lr} - ldr r4, _08127504 @ =gFieldEffectSpawnParams - adds r1, r4, 0x4 - adds r0, r4, 0 - movs r2, 0x8 - movs r3, 0x8 - bl sub_8060470 - ldr r0, _08127508 @ =gFieldEffectObjectTemplatePointers - ldr r0, [r0, 0x5C] - movs r2, 0 - ldrsh r1, [r4, r2] - movs r3, 0x4 - ldrsh r2, [r4, r3] - ldrb r3, [r4, 0x8] - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r1, r0, 24 - adds r5, r1, 0 - cmp r1, 0x40 - beq _081274FC - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0812750C @ =gSprites - adds r0, r1 - adds r3, r0, 0 - adds r3, 0x3E - ldrb r1, [r3] - movs r2, 0x2 - orrs r1, r2 - strb r1, [r3] - movs r1, 0x3 - ldrb r2, [r4, 0xC] - ands r2, r1 - lsls r2, 2 - ldrb r3, [r0, 0x5] - movs r1, 0xD - negs r1, r1 - ands r1, r3 - orrs r1, r2 - strb r1, [r0, 0x5] - movs r1, 0x18 - strh r1, [r0, 0x3C] - ldrb r1, [r4, 0x10] - bl StartSpriteAnim -_081274FC: - adds r0, r5, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08127504: .4byte gFieldEffectSpawnParams -_08127508: .4byte gFieldEffectObjectTemplatePointers -_0812750C: .4byte gSprites - thumb_func_end FldEff_DeepSandFootprints - thumb_func_start FldEff_BikeTireTracks FldEff_BikeTireTracks: @ 8127510 push {r4,r5,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index d9055f262..82b3ad25e 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -244,7 +244,7 @@ void sub_8126BC4(u8 spriteId, u8 animNum, s16 x, s16 y) } } -bool8 FldEff_Shadow(void) +u8 FldEff_Shadow(void) { u8 mapObjectId; const struct MapObjectGraphicsInfo *graphicsInfo; @@ -261,7 +261,7 @@ bool8 FldEff_Shadow(void) gSprites[spriteId].data2 = gFieldEffectSpawnParams[2]; gSprites[spriteId].data3 = (graphicsInfo->height >> 1) - gUnknown_08401E36[graphicsInfo->shadowSize]; } - return FALSE; + return 0; } void oamc_shadow(struct Sprite *sprite) @@ -288,7 +288,7 @@ void oamc_shadow(struct Sprite *sprite) } } -bool8 FldEff_TallGrass(void) +u8 FldEff_TallGrass(void) { s16 x; s16 y; @@ -315,7 +315,7 @@ bool8 FldEff_TallGrass(void) SeekSpriteAnim(sprite, 4); } } - return FALSE; + return 0; } void unc_grass_normal(struct Sprite *sprite) @@ -360,7 +360,7 @@ void unc_grass_normal(struct Sprite *sprite) } } -bool8 FldEff_JumpTallGrass(void) +u8 FldEff_JumpTallGrass(void) { u8 spriteId; struct Sprite *sprite; @@ -375,7 +375,7 @@ bool8 FldEff_JumpTallGrass(void) sprite->data0 = gFieldEffectSpawnParams[2]; sprite->data1 = 12; } - return FALSE; + return 0; } u8 sub_8126FF0(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y) @@ -397,7 +397,7 @@ u8 sub_8126FF0(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y) return MAX_SPRITES; } -bool8 FldEff_LongGrass(void) +u8 FldEff_LongGrass(void) { s16 x; s16 y; @@ -424,7 +424,7 @@ bool8 FldEff_LongGrass(void) SeekSpriteAnim(sprite, 6); } } - return FALSE; + return 0; } void unc_grass_tall(struct Sprite *sprite) @@ -464,7 +464,7 @@ void unc_grass_tall(struct Sprite *sprite) } } -bool8 FldEff_JumpLongGrass(void) +u8 FldEff_JumpLongGrass(void) { u8 spriteId; struct Sprite *sprite; @@ -479,10 +479,10 @@ bool8 FldEff_JumpLongGrass(void) sprite->data0 = gFieldEffectSpawnParams[2]; sprite->data1 = 18; } - return FALSE; + return 0; } -bool8 FldEff_ShortGrass(void) +u8 FldEff_ShortGrass(void) { u8 mapObjectId; struct MapObject *mapObject; @@ -503,7 +503,7 @@ bool8 FldEff_ShortGrass(void) sprite->data3 = gSprites[mapObject->spriteId].pos1.x; sprite->data4 = gSprites[mapObject->spriteId].pos1.y; } - return FALSE; + return 0; } void sub_8127334(struct Sprite *sprite) @@ -542,7 +542,7 @@ void sub_8127334(struct Sprite *sprite) } } -bool8 FldEff_SandFootprints(void) +u8 FldEff_SandFootprints(void) { u8 spriteId; struct Sprite *sprite; @@ -557,5 +557,23 @@ bool8 FldEff_SandFootprints(void) sprite->data7 = 13; StartSpriteAnim(sprite, gFieldEffectSpawnParams[4]); } - return FALSE; + return 0; +} + +u8 FldEff_DeepSandFootprints(void) +{ + u8 spriteId; + struct Sprite *sprite; + + sub_8060470((s16 *)&gFieldEffectSpawnParams[0], (s16 *)&gFieldEffectSpawnParams[1], 8, 8); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[23], gFieldEffectSpawnParams[0], gFieldEffectSpawnParams[1], gFieldEffectSpawnParams[2]); + if (spriteId != MAX_SPRITES) + { + sprite = &gSprites[spriteId]; + sprite->coordOffsetEnabled = TRUE; + sprite->oam.priority = gFieldEffectSpawnParams[3]; + sprite->data7 = 24; + StartSpriteAnim(sprite, gFieldEffectSpawnParams[4]); + } + return spriteId; } -- cgit v1.2.3 From 59f75daeb9c363957661c64bf509cf4f5e31c61c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Sep 2017 19:59:10 -0400 Subject: FldEff_BikeTireTracks --- asm/field_effect_helpers.s | 58 ---------------------------------------------- src/field_effect_helpers.c | 18 ++++++++++++++ 2 files changed, 18 insertions(+), 58 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index ffc7b3e9f..493c69c51 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,64 +6,6 @@ .text - thumb_func_start FldEff_BikeTireTracks -FldEff_BikeTireTracks: @ 8127510 - push {r4,r5,lr} - ldr r4, _08127578 @ =gFieldEffectSpawnParams - adds r1, r4, 0x4 - adds r0, r4, 0 - movs r2, 0x8 - movs r3, 0x8 - bl sub_8060470 - ldr r0, _0812757C @ =gFieldEffectObjectTemplatePointers - ldr r0, [r0, 0x6C] - movs r2, 0 - ldrsh r1, [r4, r2] - movs r3, 0x4 - ldrsh r2, [r4, r3] - ldrb r3, [r4, 0x8] - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r1, r0, 24 - adds r5, r1, 0 - cmp r1, 0x40 - beq _08127570 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08127580 @ =gSprites - adds r0, r1 - adds r3, r0, 0 - adds r3, 0x3E - ldrb r1, [r3] - movs r2, 0x2 - orrs r1, r2 - strb r1, [r3] - movs r1, 0x3 - ldrb r2, [r4, 0xC] - ands r2, r1 - lsls r2, 2 - ldrb r3, [r0, 0x5] - movs r1, 0xD - negs r1, r1 - ands r1, r3 - orrs r1, r2 - strb r1, [r0, 0x5] - movs r1, 0x23 - strh r1, [r0, 0x3C] - ldrb r1, [r4, 0x10] - bl StartSpriteAnim -_08127570: - adds r0, r5, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08127578: .4byte gFieldEffectSpawnParams -_0812757C: .4byte gFieldEffectObjectTemplatePointers -_08127580: .4byte gSprites - thumb_func_end FldEff_BikeTireTracks - thumb_func_start sub_8127584 sub_8127584: @ 8127584 push {lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 82b3ad25e..832a5b170 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -577,3 +577,21 @@ u8 FldEff_DeepSandFootprints(void) } return spriteId; } + +u8 FldEff_BikeTireTracks(void) +{ + u8 spriteId; + struct Sprite *sprite; + + sub_8060470((s16 *)&gFieldEffectSpawnParams[0], (s16 *)&gFieldEffectSpawnParams[1], 8, 8); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[27], gFieldEffectSpawnParams[0], gFieldEffectSpawnParams[1], gFieldEffectSpawnParams[2]); + if (spriteId != MAX_SPRITES) + { + sprite = &gSprites[spriteId]; + sprite->coordOffsetEnabled = TRUE; + sprite->oam.priority = gFieldEffectSpawnParams[3]; + sprite->data7 = 35; + StartSpriteAnim(sprite, gFieldEffectSpawnParams[4]); + } + return spriteId; +} -- cgit v1.2.3 From a3cd86b2ddd622dae3703a30280823174173a93d Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Sep 2017 20:05:02 -0400 Subject: sub_8127584 --- asm/field_effect_helpers.s | 77 ---------------------------------------------- src/field_effect_helpers.c | 35 ++++++++++++++++++--- 2 files changed, 30 insertions(+), 82 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 493c69c51..25c4f205c 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,83 +6,6 @@ .text - thumb_func_start sub_8127584 -sub_8127584: @ 8127584 - push {lr} - ldr r2, _0812759C @ =gUnknown_08401E40 - movs r3, 0x2E - ldrsh r1, [r0, r3] - lsls r1, 2 - adds r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {r0} - bx r0 - .align 2, 0 -_0812759C: .4byte gUnknown_08401E40 - thumb_func_end sub_8127584 - - thumb_func_start sub_81275A0 -sub_81275A0: @ 81275A0 - push {lr} - adds r1, r0, 0 - ldrh r0, [r1, 0x30] - adds r0, 0x1 - strh r0, [r1, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x28 - ble _081275B6 - movs r0, 0x1 - strh r0, [r1, 0x2E] -_081275B6: - adds r0, r1, 0 - movs r1, 0 - bl sub_806487C - pop {r0} - bx r0 - thumb_func_end sub_81275A0 - - thumb_func_start sub_81275C4 -sub_81275C4: @ 81275C4 - push {r4,lr} - adds r4, r0, 0 - adds r3, r4, 0 - adds r3, 0x3E - ldrb r2, [r3] - lsls r0, r2, 29 - lsrs r0, 31 - movs r1, 0x1 - eors r1, r0 - lsls r1, 2 - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - ldrb r1, [r3] - lsls r1, 29 - lsrs r1, 31 - adds r0, r4, 0 - bl sub_806487C - movs r1, 0x30 - ldrsh r0, [r4, r1] - cmp r0, 0x38 - ble _08127608 - ldrh r1, [r4, 0x3C] - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl FieldEffectStop -_08127608: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_81275C4 - thumb_func_start FldEff_Splash FldEff_Splash: @ 8127610 push {r4-r6,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 832a5b170..927d86538 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -25,8 +25,8 @@ static void sub_81269E0(struct Sprite *); static void npc_pal_op(struct MapObject *mapObject, struct Sprite *sprite); static void npc_pal_op_A(struct MapObject *, u8); static void npc_pal_op_B(struct MapObject *, u8); -/*static*/ void sub_81275A0(struct Sprite *); -/*static*/ void sub_81275C4(struct Sprite *); +static void sub_81275A0(struct Sprite *); +static void sub_81275C4(struct Sprite *); /*static*/ void sub_8127DA0(struct Sprite *); /*static*/ void sub_8127DD0(struct Sprite *); /*static*/ void sub_8127E30(struct Sprite *); @@ -554,7 +554,7 @@ u8 FldEff_SandFootprints(void) sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectSpawnParams[3]; - sprite->data7 = 13; + sprite->data7 = FLDEFF_SAND_FOOTPRINTS; StartSpriteAnim(sprite, gFieldEffectSpawnParams[4]); } return 0; @@ -572,7 +572,7 @@ u8 FldEff_DeepSandFootprints(void) sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectSpawnParams[3]; - sprite->data7 = 24; + sprite->data7 = FLDEFF_DEEP_SAND_FOOTPRINTS; StartSpriteAnim(sprite, gFieldEffectSpawnParams[4]); } return spriteId; @@ -590,8 +590,33 @@ u8 FldEff_BikeTireTracks(void) sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectSpawnParams[3]; - sprite->data7 = 35; + sprite->data7 = FLDEFF_BIKE_TIRE_TRACKS; StartSpriteAnim(sprite, gFieldEffectSpawnParams[4]); } return spriteId; } + +void sub_8127584(struct Sprite *sprite) +{ + gUnknown_08401E40[sprite->data0](sprite); +} + +static void sub_81275A0(struct Sprite *sprite) +{ + if (++sprite->data1 > 40) + { + sprite->data0 = 1; + } + sub_806487C(sprite, FALSE); +} + +static void sub_81275C4(struct Sprite *sprite) +{ + sprite->invisible ^= 1; + sprite->data1 ++; + sub_806487C(sprite, sprite->invisible); + if (sprite->data1 > 56) + { + FieldEffectStop(sprite, sprite->data7); + } +} -- cgit v1.2.3 From dbe959e0b6a467e8b68746f11e72b16e7bd23dd4 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Sep 2017 20:12:21 -0400 Subject: FldEff_Splash --- asm/field_effect_helpers.s | 79 ---------------------------------------------- src/field_effect_helpers.c | 30 ++++++++++++++++++ 2 files changed, 30 insertions(+), 79 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 25c4f205c..e0aff9804 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,85 +6,6 @@ .text - thumb_func_start FldEff_Splash -FldEff_Splash: @ 8127610 - push {r4-r6,lr} - ldr r6, _081276A4 @ =gFieldEffectSpawnParams - ldrb r0, [r6] - ldrb r1, [r6, 0x4] - ldrb r2, [r6, 0x8] - bl GetFieldObjectIdByLocalIdAndMap - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - ldr r0, _081276A8 @ =gMapObjects - adds r5, r1, r0 - ldr r0, _081276AC @ =gFieldEffectObjectTemplatePointers - ldr r0, [r0, 0x34] - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x40 - beq _0812769A - ldrb r0, [r5, 0x5] - bl GetFieldObjectGraphicsInfo - lsls r3, r4, 4 - adds r3, r4 - lsls r3, 2 - ldr r4, _081276B0 @ =gSprites - adds r3, r4 - movs r1, 0x3E - adds r1, r3 - mov r12, r1 - ldrb r1, [r1] - movs r2, 0x2 - orrs r1, r2 - mov r2, r12 - strb r1, [r2] - ldrb r2, [r5, 0x4] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r4 - ldrb r1, [r1, 0x5] - movs r2, 0xC - ands r2, r1 - ldrb r4, [r3, 0x5] - movs r1, 0xD - negs r1, r1 - ands r1, r4 - orrs r1, r2 - strb r1, [r3, 0x5] - ldr r1, [r6] - strh r1, [r3, 0x2E] - ldr r1, [r6, 0x4] - strh r1, [r3, 0x30] - ldr r1, [r6, 0x8] - strh r1, [r3, 0x32] - ldrh r0, [r0, 0xA] - lsls r0, 16 - asrs r0, 17 - subs r0, 0x4 - strh r0, [r3, 0x26] - movs r0, 0x46 - bl PlaySE -_0812769A: - movs r0, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_081276A4: .4byte gFieldEffectSpawnParams -_081276A8: .4byte gMapObjects -_081276AC: .4byte gFieldEffectObjectTemplatePointers -_081276B0: .4byte gSprites - thumb_func_end FldEff_Splash - thumb_func_start sub_81276B4 sub_81276B4: @ 81276B4 push {r4,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 927d86538..713cda7ae 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -8,6 +8,8 @@ #include "sprite.h" #include "fieldmap.h" #include "metatile_behavior.h" +#include "songs.h" +#include "sound.h" #include "field_map_obj.h" #include "field_camera.h" #include "field_map_obj_helpers.h" @@ -620,3 +622,31 @@ static void sub_81275C4(struct Sprite *sprite) FieldEffectStop(sprite, sprite->data7); } } + +u8 FldEff_Splash(void) +{ + u8 mapObjectId; + struct MapObject *mapObject; + u8 spriteId; + struct Sprite *sprite; + const struct MapObjectGraphicsInfo *graphicsInfo; + struct Sprite *linkedSprite; + + mapObjectId = GetFieldObjectIdByLocalIdAndMap(gFieldEffectSpawnParams[0], gFieldEffectSpawnParams[1], gFieldEffectSpawnParams[2]); + mapObject = &gMapObjects[mapObjectId]; + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[13], 0, 0, 0); + if (spriteId != MAX_SPRITES) + { + graphicsInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId); + sprite = &gSprites[spriteId]; + sprite->coordOffsetEnabled = TRUE; + linkedSprite = &gSprites[mapObject->spriteId]; + sprite->oam.priority = linkedSprite->oam.priority; + sprite->data0 = gFieldEffectSpawnParams[0]; + sprite->data1 = gFieldEffectSpawnParams[1]; + sprite->data2 = gFieldEffectSpawnParams[2]; + sprite->pos2.y = (graphicsInfo->height >> 1) - 4; + PlaySE(SE_MIZU); + } + return 0; +} -- cgit v1.2.3 From 7309b13cb34400e0256c09fd54664a3f918b4e3d Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 9 Sep 2017 19:29:05 -0500 Subject: fix German build --- data-de/event_scripts.s | 2 +- data/event_scripts.s | 2 +- data/specials.inc | 2 +- include/script_menu.h | 2 +- src/hof_pc.c | 2 +- src/script_menu.c | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/data-de/event_scripts.s b/data-de/event_scripts.s index a6bb9e015..9f6b77e5a 100644 --- a/data-de/event_scripts.s +++ b/data-de/event_scripts.s @@ -1689,7 +1689,7 @@ gUnknown_081A0009:: @ 81A0009 EventScript_1A0023: message gPCText_WhichPCShouldBeAccessed waittext - special TryCreatePCMenu + special ScrSpecial_CreatePCMenu waitstate jump EventScript_1A0033 end diff --git a/data/event_scripts.s b/data/event_scripts.s index 6a95dd4a1..5e2763653 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -1688,7 +1688,7 @@ gUnknown_081A0009:: @ 81A0009 EventScript_1A0023: message gPCText_WhichPCShouldBeAccessed waittext - special ScriptMenu_TryCreatePCMenu + special ScrSpecial_CreatePCMenu waitstate jump EventScript_1A0033 end diff --git a/data/specials.inc b/data/specials.inc index 051a84bdb..61670a867 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -269,7 +269,7 @@ gSpecials:: def_special ShowBerryBlenderRecordWindow def_special ResetTrickHouseEndRoomFlag def_special SetTrickHouseEndRoomFlag - def_special ScriptMenu_TryCreatePCMenu + def_special ScrSpecial_CreatePCMenu def_special AccessHallOfFamePC def_special sub_810D6A4 def_special CheckLeadMonCool diff --git a/include/script_menu.h b/include/script_menu.h index e621b32a4..dca8c26a7 100644 --- a/include/script_menu.h +++ b/include/script_menu.h @@ -10,7 +10,7 @@ bool8 ScriptMenu_MultichoiceWithDefault(u8 left, u8 top, u8 var3, u8 var4, u8 va bool8 Multichoice(u8 var1, u8 var2, u8 var3, u8 var4); bool8 ScriptMenu_YesNo(u8 var1, u8 var2); bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, u8 a4, u8 columnCount); -bool8 ScriptMenu_TryCreatePCMenu(void); +bool8 ScrSpecial_CreatePCMenu(void); void ScriptMenu_CreatePCMenu(void); void ScriptMenu_DisplayPCStartupPrompt(void); bool8 ScriptMenu_ShowPokemonPic(u16 var1, u8 var2, u8 var3); diff --git a/src/hof_pc.c b/src/hof_pc.c index 06da38a71..83d39a9b5 100644 --- a/src/hof_pc.c +++ b/src/hof_pc.c @@ -30,7 +30,7 @@ static void ReshowPCMenuAfterHallOfFamePC(void) ScriptContext2_Enable(); sub_8053E90(); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); - ScriptMenu_TryCreatePCMenu(); + ScrSpecial_CreatePCMenu(); ScriptMenu_DisplayPCStartupPrompt(); CreateTask(Task_WaitForPaletteFade, 10); } diff --git a/src/script_menu.c b/src/script_menu.c index 253157b47..e25e74d8c 100644 --- a/src/script_menu.c +++ b/src/script_menu.c @@ -880,7 +880,7 @@ static void Task_HandleMultichoiceGridInput(u8 taskId) #undef tIgnoreBPress #undef tDoWrap -bool8 ScriptMenu_TryCreatePCMenu(void) +bool8 ScrSpecial_CreatePCMenu(void) { if (FuncIsActiveTask(Task_HandleMultichoiceInput) == TRUE) { -- cgit v1.2.3 From ac82616dc933de99a50d7a131b18cb38c79c7f77 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Sep 2017 20:42:51 -0400 Subject: sub_81276B4 --- asm/field_effect_helpers.s | 72 ---------------------------------------------- src/field_effect_helpers.c | 16 +++++++++++ 2 files changed, 16 insertions(+), 72 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index e0aff9804..5f2523de4 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,78 +6,6 @@ .text - thumb_func_start sub_81276B4 -sub_81276B4: @ 81276B4 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _081276E4 - ldrh r0, [r4, 0x2E] - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r4, 0x30] - lsls r1, 24 - lsrs r1, 24 - ldrh r2, [r4, 0x32] - lsls r2, 24 - lsrs r2, 24 - mov r3, sp - bl TryGetFieldObjectIdByLocalIdAndMap - lsls r0, 24 - cmp r0, 0 - beq _081276EE -_081276E4: - adds r0, r4, 0 - movs r1, 0xF - bl FieldEffectStop - b _0812772E -_081276EE: - ldr r3, _08127738 @ =gSprites - ldr r2, _0812773C @ =gMapObjects - mov r0, sp - ldrb r1, [r0] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldrh r0, [r0, 0x20] - strh r0, [r4, 0x20] - mov r0, sp - ldrb r1, [r0] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldrh r0, [r0, 0x22] - strh r0, [r4, 0x22] - adds r0, r4, 0 - movs r1, 0 - bl sub_806487C -_0812772E: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08127738: .4byte gSprites -_0812773C: .4byte gMapObjects - thumb_func_end sub_81276B4 - thumb_func_start FldEff_JumpSmallSplash FldEff_JumpSmallSplash: @ 8127740 push {r4,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 713cda7ae..53c18c158 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -650,3 +650,19 @@ u8 FldEff_Splash(void) } return 0; } + +void sub_81276B4(struct Sprite *sprite) +{ + u8 mapObjectId; + + if (sprite->animEnded || TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjectId)) + { + FieldEffectStop(sprite, FLDEFF_SPLASH); + } + else + { + sprite->pos1.x = gSprites[gMapObjects[mapObjectId].spriteId].pos1.x; + sprite->pos1.y = gSprites[gMapObjects[mapObjectId].spriteId].pos1.y; + sub_806487C(sprite, FALSE); + } +} -- cgit v1.2.3 From 2b48a1396cbe5adbf6755502e96e66392b6bd8a1 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Sep 2017 20:46:58 -0400 Subject: FldEff_JumpSmallSplash --- asm/field_effect_helpers.s | 57 ---------------------------------------------- src/field_effect_helpers.c | 18 +++++++++++++++ 2 files changed, 18 insertions(+), 57 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 5f2523de4..7cfd69ea6 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,63 +6,6 @@ .text - thumb_func_start FldEff_JumpSmallSplash -FldEff_JumpSmallSplash: @ 8127740 - push {r4,lr} - ldr r4, _081277A4 @ =gFieldEffectSpawnParams - adds r1, r4, 0x4 - adds r0, r4, 0 - movs r2, 0x8 - movs r3, 0xC - bl sub_8060470 - ldr r0, _081277A8 @ =gFieldEffectObjectTemplatePointers - ldr r0, [r0, 0x38] - movs r2, 0 - ldrsh r1, [r4, r2] - movs r3, 0x4 - ldrsh r2, [r4, r3] - movs r3, 0 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x40 - beq _0812779C - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - ldr r0, _081277AC @ =gSprites - adds r2, r0 - adds r3, r2, 0 - adds r3, 0x3E - ldrb r0, [r3] - movs r1, 0x2 - orrs r0, r1 - strb r0, [r3] - movs r0, 0x3 - ldrb r1, [r4, 0xC] - ands r1, r0 - lsls r1, 2 - ldrb r3, [r2, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2, 0x5] - ldr r0, [r4, 0x8] - strh r0, [r2, 0x2E] - movs r0, 0x10 - strh r0, [r2, 0x30] -_0812779C: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_081277A4: .4byte gFieldEffectSpawnParams -_081277A8: .4byte gFieldEffectObjectTemplatePointers -_081277AC: .4byte gSprites - thumb_func_end FldEff_JumpSmallSplash - thumb_func_start FldEff_JumpBigSplash FldEff_JumpBigSplash: @ 81277B0 push {r4,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 53c18c158..0f91605c0 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -666,3 +666,21 @@ void sub_81276B4(struct Sprite *sprite) sub_806487C(sprite, FALSE); } } + +u8 FldEff_JumpSmallSplash(void) +{ + u8 spriteId; + struct Sprite *sprite; + + sub_8060470((s16 *)&gFieldEffectSpawnParams[0], (s16 *)&gFieldEffectSpawnParams[1], 8, 12); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[14], gFieldEffectSpawnParams[0], gFieldEffectSpawnParams[1], 0); + if (spriteId != MAX_SPRITES) + { + sprite = &gSprites[spriteId]; + sprite->coordOffsetEnabled = TRUE; + sprite->oam.priority = gFieldEffectSpawnParams[3]; + sprite->data0 = gFieldEffectSpawnParams[2]; + sprite->data1 = FLDEFF_JUMP_SMALL_SPLASH; + } + return 0; +} -- cgit v1.2.3 From c72d74d953517902d67ae71be40f5653a105a7c6 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Sep 2017 20:49:18 -0400 Subject: FldEff_JumpBigSplash --- asm/field_effect_helpers.s | 57 ---------------------------------------------- src/field_effect_helpers.c | 18 +++++++++++++++ 2 files changed, 18 insertions(+), 57 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 7cfd69ea6..b57ce0db4 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,63 +6,6 @@ .text - thumb_func_start FldEff_JumpBigSplash -FldEff_JumpBigSplash: @ 81277B0 - push {r4,lr} - ldr r4, _08127814 @ =gFieldEffectSpawnParams - adds r1, r4, 0x4 - adds r0, r4, 0 - movs r2, 0x8 - movs r3, 0x8 - bl sub_8060470 - ldr r0, _08127818 @ =gFieldEffectObjectTemplatePointers - ldr r0, [r0, 0x30] - movs r2, 0 - ldrsh r1, [r4, r2] - movs r3, 0x4 - ldrsh r2, [r4, r3] - movs r3, 0 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x40 - beq _0812780C - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - ldr r0, _0812781C @ =gSprites - adds r2, r0 - adds r3, r2, 0 - adds r3, 0x3E - ldrb r0, [r3] - movs r1, 0x2 - orrs r0, r1 - strb r0, [r3] - movs r0, 0x3 - ldrb r1, [r4, 0xC] - ands r1, r0 - lsls r1, 2 - ldrb r3, [r2, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2, 0x5] - ldr r0, [r4, 0x8] - strh r0, [r2, 0x2E] - movs r0, 0xE - strh r0, [r2, 0x30] -_0812780C: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08127814: .4byte gFieldEffectSpawnParams -_08127818: .4byte gFieldEffectObjectTemplatePointers -_0812781C: .4byte gSprites - thumb_func_end FldEff_JumpBigSplash - thumb_func_start FldEff_FeetInFlowingWater FldEff_FeetInFlowingWater: @ 8127820 push {r4-r7,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 0f91605c0..14634e2b4 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -684,3 +684,21 @@ u8 FldEff_JumpSmallSplash(void) } return 0; } + +u8 FldEff_JumpBigSplash(void) +{ + u8 spriteId; + struct Sprite *sprite; + + sub_8060470((s16 *)&gFieldEffectSpawnParams[0], (s16 *)&gFieldEffectSpawnParams[1], 8, 8); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[12], gFieldEffectSpawnParams[0], gFieldEffectSpawnParams[1], 0); + if (spriteId != MAX_SPRITES) + { + sprite = &gSprites[spriteId]; + sprite->coordOffsetEnabled = TRUE; + sprite->oam.priority = gFieldEffectSpawnParams[3]; + sprite->data0 = gFieldEffectSpawnParams[2]; + sprite->data1 = FLDEFF_JUMP_BIG_SPLASH; + } + return 0; +} -- cgit v1.2.3 From 8618a4be87b3cb92a45a7fbe4559385e5d2c4346 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Sep 2017 20:58:05 -0400 Subject: FldEff_FeetInFlowingWater --- asm/field_effect_helpers.s | 87 ---------------------------------------------- src/field_effect_helpers.c | 30 ++++++++++++++++ 2 files changed, 30 insertions(+), 87 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index b57ce0db4..a5db46c36 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,93 +6,6 @@ .text - thumb_func_start FldEff_FeetInFlowingWater -FldEff_FeetInFlowingWater: @ 8127820 - push {r4-r7,lr} - ldr r7, _081278C0 @ =gFieldEffectSpawnParams - ldrb r0, [r7] - ldrb r1, [r7, 0x4] - ldrb r2, [r7, 0x8] - bl GetFieldObjectIdByLocalIdAndMap - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - ldr r0, _081278C4 @ =gMapObjects - adds r6, r1, r0 - ldr r0, _081278C8 @ =gFieldEffectObjectTemplatePointers - ldr r0, [r0, 0x34] - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x40 - beq _081278B6 - ldrb r0, [r6, 0x5] - bl GetFieldObjectGraphicsInfo - adds r4, r0, 0 - lsls r0, r5, 4 - adds r0, r5 - lsls r0, 2 - ldr r3, _081278CC @ =gSprites - adds r0, r3 - ldr r1, _081278D0 @ =sub_81278D8 - str r1, [r0, 0x1C] - adds r5, r0, 0 - adds r5, 0x3E - ldrb r1, [r5] - movs r2, 0x2 - orrs r1, r2 - strb r1, [r5] - ldrb r2, [r6, 0x4] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r3 - ldrb r1, [r1, 0x5] - movs r2, 0xC - ands r2, r1 - ldrb r3, [r0, 0x5] - movs r1, 0xD - negs r1, r1 - ands r1, r3 - orrs r1, r2 - strb r1, [r0, 0x5] - ldr r1, [r7] - strh r1, [r0, 0x2E] - ldr r1, [r7, 0x4] - strh r1, [r0, 0x30] - ldr r1, [r7, 0x8] - strh r1, [r0, 0x32] - ldr r1, _081278D4 @ =0x0000ffff - strh r1, [r0, 0x34] - movs r1, 0x1 - negs r1, r1 - strh r1, [r0, 0x36] - ldrh r1, [r4, 0xA] - lsls r1, 16 - asrs r1, 17 - subs r1, 0x4 - strh r1, [r0, 0x26] - movs r1, 0x1 - bl StartSpriteAnim -_081278B6: - movs r0, 0 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_081278C0: .4byte gFieldEffectSpawnParams -_081278C4: .4byte gMapObjects -_081278C8: .4byte gFieldEffectObjectTemplatePointers -_081278CC: .4byte gSprites -_081278D0: .4byte sub_81278D8 -_081278D4: .4byte 0x0000ffff - thumb_func_end FldEff_FeetInFlowingWater - thumb_func_start sub_81278D8 sub_81278D8: @ 81278D8 push {r4,r5,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 14634e2b4..2c4685bf4 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -33,6 +33,7 @@ static void sub_81275C4(struct Sprite *); /*static*/ void sub_8127DD0(struct Sprite *); /*static*/ void sub_8127E30(struct Sprite *); /*static*/ void sub_812882C(struct Sprite *, u8, u8); +/*static*/ void sub_81278D8(struct Sprite *); // .rodata @@ -702,3 +703,32 @@ u8 FldEff_JumpBigSplash(void) } return 0; } + +u8 FldEff_FeetInFlowingWater(void) +{ + u8 mapObjectId; + struct MapObject *mapObject; + u8 spriteId; + struct Sprite *sprite; + const struct MapObjectGraphicsInfo *graphicsInfo; + + mapObjectId = GetFieldObjectIdByLocalIdAndMap(gFieldEffectSpawnParams[0], gFieldEffectSpawnParams[1], gFieldEffectSpawnParams[2]); + mapObject = &gMapObjects[mapObjectId]; + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[13], 0, 0, 0); + if (spriteId != MAX_SPRITES) + { + graphicsInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId); + sprite = &gSprites[spriteId]; + sprite->callback = sub_81278D8; + sprite->coordOffsetEnabled = TRUE; + sprite->oam.priority = gSprites[mapObject->spriteId].oam.priority; + sprite->data0 = gFieldEffectSpawnParams[0]; + sprite->data1 = gFieldEffectSpawnParams[1]; + sprite->data2 = gFieldEffectSpawnParams[2]; + sprite->data3 = -1; + sprite->data4 = -1; + sprite->pos2.y = (graphicsInfo->height >> 1) - 4; + StartSpriteAnim(sprite, 1); + } + return 0; +} -- cgit v1.2.3 From 6e57ac34492ec11017b8e741b8e7008f0e844e9b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Sep 2017 21:04:46 -0400 Subject: sub_81278D8 --- asm/field_effect_helpers.s | 82 ---------------------------------------------- src/field_effect_helpers.c | 32 +++++++++++++++++- 2 files changed, 31 insertions(+), 83 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index a5db46c36..fbc1d5a50 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,88 +6,6 @@ .text - thumb_func_start sub_81278D8 -sub_81278D8: @ 81278D8 - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - ldrh r0, [r4, 0x2E] - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r4, 0x30] - lsls r1, 24 - lsrs r1, 24 - ldrh r2, [r4, 0x32] - lsls r2, 24 - lsrs r2, 24 - mov r3, sp - bl TryGetFieldObjectIdByLocalIdAndMap - lsls r0, 24 - cmp r0, 0 - bne _08127912 - ldr r2, _0812791C @ =gMapObjects - mov r0, sp - ldrb r1, [r0] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r5, r0, r2 - ldrb r0, [r5, 0x2] - lsls r0, 28 - cmp r0, 0 - blt _08127920 -_08127912: - adds r0, r4, 0 - movs r1, 0x22 - bl FieldEffectStop - b _0812796A - .align 2, 0 -_0812791C: .4byte gMapObjects -_08127920: - ldrb r1, [r5, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08127974 @ =gSprites - adds r0, r1 - ldrh r1, [r0, 0x20] - strh r1, [r4, 0x20] - ldrh r1, [r0, 0x22] - strh r1, [r4, 0x22] - adds r0, 0x43 - ldrb r0, [r0] - adds r1, r4, 0 - adds r1, 0x43 - strb r0, [r1] - adds r0, r4, 0 - movs r1, 0 - bl sub_806487C - ldr r1, [r5, 0x10] - ldr r0, [r4, 0x34] - cmp r1, r0 - beq _0812796A - ldrh r0, [r5, 0x10] - strh r0, [r4, 0x34] - ldrh r0, [r5, 0x12] - strh r0, [r4, 0x36] - adds r0, r4, 0 - adds r0, 0x3E - ldrb r1, [r0] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - bne _0812796A - movs r0, 0x46 - bl PlaySE -_0812796A: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08127974: .4byte gSprites - thumb_func_end sub_81278D8 - thumb_func_start FldEff_Ripple FldEff_Ripple: @ 8127978 push {r4,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 2c4685bf4..9f12fd6a4 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -33,7 +33,7 @@ static void sub_81275C4(struct Sprite *); /*static*/ void sub_8127DD0(struct Sprite *); /*static*/ void sub_8127E30(struct Sprite *); /*static*/ void sub_812882C(struct Sprite *, u8, u8); -/*static*/ void sub_81278D8(struct Sprite *); +static void sub_81278D8(struct Sprite *); // .rodata @@ -732,3 +732,33 @@ u8 FldEff_FeetInFlowingWater(void) } return 0; } + +static void sub_81278D8(struct Sprite *sprite) +{ + u8 mapObjectId; + struct Sprite *linkedSprite; + struct MapObject *mapObject; + + if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjectId) || !gMapObjects[mapObjectId].mapobj_bit_19) + { + FieldEffectStop(sprite, FLDEFF_FEET_IN_FLOWING_WATER); + } + else + { + mapObject = &gMapObjects[mapObjectId]; + linkedSprite = &gSprites[mapObject->spriteId]; + sprite->pos1.x = linkedSprite->pos1.x; + sprite->pos1.y = linkedSprite->pos1.y; + sprite->subpriority = linkedSprite->subpriority; + sub_806487C(sprite, FALSE); + if (mapObject->coords2.x != sprite->data3 || mapObject->coords2.y != sprite->data4) + { + sprite->data3 = mapObject->coords2.x; + sprite->data4 = mapObject->coords2.y; + if (!sprite->invisible) + { + PlaySE(SE_MIZU); + } + } + } +} -- cgit v1.2.3 From 959858eac27cc30382a2d309180a282d8144903b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Sep 2017 21:17:35 -0400 Subject: FldEff_Ripple --- asm/field_effect_helpers.s | 50 ---------------------------------------------- src/field_effect_helpers.c | 16 +++++++++++++++ 2 files changed, 16 insertions(+), 50 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index fbc1d5a50..0ea1593e3 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,56 +6,6 @@ .text - thumb_func_start FldEff_Ripple -FldEff_Ripple: @ 8127978 - push {r4,lr} - ldr r0, _081279CC @ =gFieldEffectObjectTemplatePointers - ldr r0, [r0, 0x14] - ldr r4, _081279D0 @ =gFieldEffectSpawnParams - movs r2, 0 - ldrsh r1, [r4, r2] - movs r3, 0x4 - ldrsh r2, [r4, r3] - ldrb r3, [r4, 0x8] - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x40 - beq _081279C4 - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - ldr r0, _081279D4 @ =gSprites - adds r2, r0 - adds r3, r2, 0 - adds r3, 0x3E - ldrb r0, [r3] - movs r1, 0x2 - orrs r0, r1 - strb r0, [r3] - movs r0, 0x3 - ldrb r1, [r4, 0xC] - ands r1, r0 - lsls r1, 2 - ldrb r3, [r2, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2, 0x5] - movs r0, 0x5 - strh r0, [r2, 0x2E] -_081279C4: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_081279CC: .4byte gFieldEffectObjectTemplatePointers -_081279D0: .4byte gFieldEffectSpawnParams -_081279D4: .4byte gSprites - thumb_func_end FldEff_Ripple - thumb_func_start FldEff_HotSpringsWater FldEff_HotSpringsWater: @ 81279D8 push {r4-r6,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 9f12fd6a4..2df247600 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -762,3 +762,19 @@ static void sub_81278D8(struct Sprite *sprite) } } } + +u8 FldEff_Ripple(void) +{ + u8 spriteId; + struct Sprite *sprite; + + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[5], gFieldEffectSpawnParams[0], gFieldEffectSpawnParams[1], gFieldEffectSpawnParams[2]); + if (spriteId != MAX_SPRITES) + { + sprite = &gSprites[spriteId]; + sprite->coordOffsetEnabled = TRUE; + sprite->oam.priority = gFieldEffectSpawnParams[3]; + sprite->data0 = FLDEFF_RIPPLE; + } + return 0; +} -- cgit v1.2.3 From 885d0fa2877b69f52ef58ce62ce828ef550c67ed Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Sep 2017 21:24:04 -0400 Subject: FldEff_HotSpringsWater --- asm/field_effect_helpers.s | 82 ---------------------------------------------- src/field_effect_helpers.c | 24 ++++++++++++++ 2 files changed, 24 insertions(+), 82 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 0ea1593e3..7431acb8a 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,88 +6,6 @@ .text - thumb_func_start FldEff_HotSpringsWater -FldEff_HotSpringsWater: @ 81279D8 - push {r4-r6,lr} - ldr r6, _08127A6C @ =gFieldEffectSpawnParams - ldrb r0, [r6] - ldrb r1, [r6, 0x4] - ldrb r2, [r6, 0x8] - bl GetFieldObjectIdByLocalIdAndMap - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - ldr r0, _08127A70 @ =gMapObjects - adds r5, r1, r0 - ldr r0, _08127A74 @ =gFieldEffectObjectTemplatePointers - ldr r0, [r0, 0x7C] - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x40 - beq _08127A64 - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - ldr r4, _08127A78 @ =gSprites - adds r2, r4 - adds r3, r2, 0 - adds r3, 0x3E - ldrb r0, [r3] - movs r1, 0x2 - orrs r0, r1 - strb r0, [r3] - ldrb r1, [r5, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r0, [r0, 0x5] - movs r1, 0xC - ands r1, r0 - ldrb r3, [r2, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2, 0x5] - ldr r0, [r6] - strh r0, [r2, 0x2E] - ldr r0, [r6, 0x4] - strh r0, [r2, 0x30] - ldr r0, [r6, 0x8] - strh r0, [r2, 0x32] - ldrb r1, [r5, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrh r0, [r0, 0x20] - strh r0, [r2, 0x34] - ldrb r1, [r5, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrh r0, [r0, 0x22] - strh r0, [r2, 0x36] -_08127A64: - movs r0, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08127A6C: .4byte gFieldEffectSpawnParams -_08127A70: .4byte gMapObjects -_08127A74: .4byte gFieldEffectObjectTemplatePointers -_08127A78: .4byte gSprites - thumb_func_end FldEff_HotSpringsWater - thumb_func_start sub_8127A7C sub_8127A7C: @ 8127A7C push {r4,r5,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 2df247600..3f821e0b7 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -778,3 +778,27 @@ u8 FldEff_Ripple(void) } return 0; } + +u8 FldEff_HotSpringsWater(void) +{ + u8 mapObjectId; + struct MapObject *mapObject; + u8 spriteId; + struct Sprite *sprite; + + mapObjectId = GetFieldObjectIdByLocalIdAndMap(gFieldEffectSpawnParams[0], gFieldEffectSpawnParams[1], gFieldEffectSpawnParams[2]); + mapObject = &gMapObjects[mapObjectId]; + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[31], 0, 0, 0); + if (spriteId != MAX_SPRITES) + { + sprite = &gSprites[spriteId]; + sprite->coordOffsetEnabled = TRUE; + sprite->oam.priority = gSprites[mapObject->spriteId].oam.priority; + sprite->data0 = gFieldEffectSpawnParams[0]; + sprite->data1 = gFieldEffectSpawnParams[1]; + sprite->data2 = gFieldEffectSpawnParams[2]; + sprite->data3 = gSprites[mapObject->spriteId].pos1.x; + sprite->data4 = gSprites[mapObject->spriteId].pos1.y; + } + return 0; +} -- cgit v1.2.3 From 7980e39efb2eda587e41452b47d2503f17346368 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Sep 2017 21:31:32 -0400 Subject: sub_8127A7C --- asm/field_effect_helpers.s | 79 ---------------------------------------------- src/field_effect_helpers.c | 21 ++++++++++++ 2 files changed, 21 insertions(+), 79 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 7431acb8a..36d9ce69e 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,85 +6,6 @@ .text - thumb_func_start sub_8127A7C -sub_8127A7C: @ 8127A7C - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - ldrh r0, [r4, 0x2E] - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r4, 0x30] - lsls r1, 24 - lsrs r1, 24 - ldrh r2, [r4, 0x32] - lsls r2, 24 - lsrs r2, 24 - mov r3, sp - bl TryGetFieldObjectIdByLocalIdAndMap - lsls r0, 24 - cmp r0, 0 - bne _08127AB6 - ldr r5, _08127AC0 @ =gMapObjects - mov r0, sp - ldrb r1, [r0] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r1, r0, r5 - ldrb r0, [r1, 0x2] - lsls r0, 26 - cmp r0, 0 - blt _08127AC4 -_08127AB6: - adds r0, r4, 0 - movs r1, 0x2A - bl FieldEffectStop - b _08127B08 - .align 2, 0 -_08127AC0: .4byte gMapObjects -_08127AC4: - ldrb r0, [r1, 0x5] - bl GetFieldObjectGraphicsInfo - mov r1, sp - ldrb r2, [r1] - lsls r1, r2, 3 - adds r1, r2 - lsls r1, 2 - adds r1, r5 - ldrb r2, [r1, 0x4] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - ldr r2, _08127B10 @ =gSprites - adds r1, r2 - ldrh r2, [r1, 0x20] - strh r2, [r4, 0x20] - ldrh r0, [r0, 0xA] - lsls r0, 16 - asrs r0, 17 - ldrh r2, [r1, 0x22] - adds r0, r2 - subs r0, 0x8 - strh r0, [r4, 0x22] - adds r1, 0x43 - ldrb r0, [r1] - subs r0, 0x1 - adds r1, r4, 0 - adds r1, 0x43 - strb r0, [r1] - adds r0, r4, 0 - movs r1, 0 - bl sub_806487C -_08127B08: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08127B10: .4byte gSprites - thumb_func_end sub_8127A7C - thumb_func_start FldEff_Unknown19 FldEff_Unknown19: @ 8127B14 push {r4,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 3f821e0b7..2113a79d7 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -802,3 +802,24 @@ u8 FldEff_HotSpringsWater(void) } return 0; } + +void sub_8127A7C(struct Sprite *sprite) +{ + u8 mapObjectId; + const struct MapObjectGraphicsInfo *graphicsInfo; + struct Sprite *linkedSprite; + + if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjectId) || !gMapObjects[mapObjectId].mapobj_bit_21) + { + FieldEffectStop(sprite, FLDEFF_HOT_SPRINGS_WATER); + } + else + { + graphicsInfo = GetFieldObjectGraphicsInfo(gMapObjects[mapObjectId].graphicsId); + linkedSprite = &gSprites[gMapObjects[mapObjectId].spriteId]; + sprite->pos1.x = linkedSprite->pos1.x; + sprite->pos1.y = (graphicsInfo->height >> 1) + linkedSprite->pos1.y - 8; + sprite->subpriority = linkedSprite->subpriority - 1; + sub_806487C(sprite, FALSE); + } +} -- cgit v1.2.3 From 5e9e52e3a95f4d7301565ad86084907f2d8a94e6 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 9 Sep 2017 22:04:01 -0500 Subject: more renaming/refactoring --- asm/battle_tower.s | 4 +- asm/field_effect_helpers.s | 112 ++++++------ asm/fldeff_80C5CD4.s | 56 +++--- data/scripts/maps/Route101.inc | 2 +- data/specials.inc | 2 +- include/battle_setup.h | 12 +- include/battle_transition.h | 4 +- include/field_door.h | 2 +- include/field_effect.h | 2 +- include/rom4.h | 4 +- src/battle_setup.c | 351 ++++++++++++++++++++------------------ src/battle_transition.c | 22 +-- src/braille_puzzles.c | 2 +- src/field_door.c | 7 +- src/field_effect.c | 84 ++++----- src/field_fadetransition.c | 2 +- src/field_ground_effect.c | 128 +++++++------- src/field_map_obj.c | 26 +-- src/field_map_obj_helpers.c | 10 +- src/field_player_avatar.c | 14 +- src/fldeff_cut.c | 4 +- src/fldeff_flash.c | 2 +- src/fldeff_strength.c | 6 +- src/fldeff_sweetscent.c | 2 +- src/fldeff_teleport.c | 2 +- src/pokemon_menu.c | 14 +- src/rom4.c | 8 +- src/rom6.c | 24 +-- src/scrcmd.c | 131 +++++++------- src/script_movement.c | 34 ++-- src/script_pokemon_util_80C4BF0.c | 40 +++-- src/trainer_see.c | 16 +- 32 files changed, 572 insertions(+), 557 deletions(-) diff --git a/asm/battle_tower.s b/asm/battle_tower.s index 3f019e1ea..a9d52d597 100644 --- a/asm/battle_tower.s +++ b/asm/battle_tower.s @@ -2166,7 +2166,7 @@ _081355D6: bl GetBattleTowerBattleTransition lsls r0, 24 lsrs r0, 24 - bl sub_811AABC + bl BattleTransition_StartOnField b _08135648 .align 2, 0 _081355F4: .4byte gPlayerParty @@ -2203,7 +2203,7 @@ _08135606: bl GetBattleTowerBattleTransition lsls r0, 24 lsrs r0, 24 - bl sub_811AABC + bl BattleTransition_StartOnField _08135648: add sp, 0x4 pop {r4,r5} diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 9df9dfd8d..5e54550e3 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -581,7 +581,7 @@ _08126C68: .4byte gSprites thumb_func_start FldEff_Shadow FldEff_Shadow: @ 8126C6C push {r4,r5,lr} - ldr r5, _08126CF8 @ =gUnknown_0202FF84 + ldr r5, _08126CF8 @ =gFieldEffectArguments ldrb r0, [r5] ldrb r1, [r5, 0x4] ldrb r2, [r5, 0x8] @@ -649,7 +649,7 @@ _08126CF0: pop {r1} bx r1 .align 2, 0 -_08126CF8: .4byte gUnknown_0202FF84 +_08126CF8: .4byte gFieldEffectArguments _08126CFC: .4byte gMapObjects _08126D00: .4byte gFieldEffectObjectTemplatePointers _08126D04: .4byte gUnknown_08401E32 @@ -758,7 +758,7 @@ _08126DD4: .4byte 0x00400001 FldEff_TallGrass: @ 8126DD8 push {r4,r5,lr} sub sp, 0x4 - ldr r5, _08126E70 @ =gUnknown_0202FF84 + ldr r5, _08126E70 @ =gFieldEffectArguments ldrh r1, [r5] mov r0, sp strh r1, [r0] @@ -830,7 +830,7 @@ _08126E64: pop {r1} bx r1 .align 2, 0 -_08126E70: .4byte gUnknown_0202FF84 +_08126E70: .4byte gFieldEffectArguments _08126E74: .4byte gFieldEffectObjectTemplatePointers _08126E78: .4byte gSprites thumb_func_end FldEff_TallGrass @@ -972,7 +972,7 @@ _08126F7C: .4byte gMapObjects thumb_func_start FldEff_JumpTallGrass FldEff_JumpTallGrass: @ 8126F80 push {r4,lr} - ldr r4, _08126FE4 @ =gUnknown_0202FF84 + ldr r4, _08126FE4 @ =gFieldEffectArguments adds r1, r4, 0x4 adds r0, r4, 0 movs r2, 0x8 @@ -1021,7 +1021,7 @@ _08126FDC: pop {r1} bx r1 .align 2, 0 -_08126FE4: .4byte gUnknown_0202FF84 +_08126FE4: .4byte gFieldEffectArguments _08126FE8: .4byte gFieldEffectObjectTemplatePointers _08126FEC: .4byte gSprites thumb_func_end FldEff_JumpTallGrass @@ -1106,7 +1106,7 @@ _08127074: FldEff_LongGrass: @ 8127080 push {r4,r5,lr} sub sp, 0x4 - ldr r5, _0812711C @ =gUnknown_0202FF84 + ldr r5, _0812711C @ =gFieldEffectArguments ldrh r1, [r5] mov r0, sp strh r1, [r0] @@ -1179,7 +1179,7 @@ _08127110: pop {r1} bx r1 .align 2, 0 -_0812711C: .4byte gUnknown_0202FF84 +_0812711C: .4byte gFieldEffectArguments _08127120: .4byte gFieldEffectObjectTemplatePointers _08127124: .4byte gSprites thumb_func_end FldEff_LongGrass @@ -1313,7 +1313,7 @@ _0812721C: .4byte gMapObjects thumb_func_start FldEff_JumpLongGrass FldEff_JumpLongGrass: @ 8127220 push {r4,lr} - ldr r4, _08127284 @ =gUnknown_0202FF84 + ldr r4, _08127284 @ =gFieldEffectArguments adds r1, r4, 0x4 adds r0, r4, 0 movs r2, 0x8 @@ -1362,7 +1362,7 @@ _0812727C: pop {r1} bx r1 .align 2, 0 -_08127284: .4byte gUnknown_0202FF84 +_08127284: .4byte gFieldEffectArguments _08127288: .4byte gFieldEffectObjectTemplatePointers _0812728C: .4byte gSprites thumb_func_end FldEff_JumpLongGrass @@ -1370,7 +1370,7 @@ _0812728C: .4byte gSprites thumb_func_start FldEff_ShortGrass FldEff_ShortGrass: @ 8127290 push {r4-r6,lr} - ldr r6, _08127324 @ =gUnknown_0202FF84 + ldr r6, _08127324 @ =gFieldEffectArguments ldrb r0, [r6] ldrb r1, [r6, 0x4] ldrb r2, [r6, 0x8] @@ -1443,7 +1443,7 @@ _0812731C: pop {r1} bx r1 .align 2, 0 -_08127324: .4byte gUnknown_0202FF84 +_08127324: .4byte gFieldEffectArguments _08127328: .4byte gMapObjects _0812732C: .4byte gFieldEffectObjectTemplatePointers _08127330: .4byte gSprites @@ -1577,7 +1577,7 @@ _08127424: .4byte gSprites thumb_func_start FldEff_SandFootprints FldEff_SandFootprints: @ 8127428 push {r4,lr} - ldr r4, _08127490 @ =gUnknown_0202FF84 + ldr r4, _08127490 @ =gFieldEffectArguments adds r1, r4, 0x4 adds r0, r4, 0 movs r2, 0x8 @@ -1626,7 +1626,7 @@ _08127486: pop {r1} bx r1 .align 2, 0 -_08127490: .4byte gUnknown_0202FF84 +_08127490: .4byte gFieldEffectArguments _08127494: .4byte gFieldEffectObjectTemplatePointers _08127498: .4byte gSprites thumb_func_end FldEff_SandFootprints @@ -1634,7 +1634,7 @@ _08127498: .4byte gSprites thumb_func_start FldEff_DeepSandFootprints FldEff_DeepSandFootprints: @ 812749C push {r4,r5,lr} - ldr r4, _08127504 @ =gUnknown_0202FF84 + ldr r4, _08127504 @ =gFieldEffectArguments adds r1, r4, 0x4 adds r0, r4, 0 movs r2, 0x8 @@ -1684,7 +1684,7 @@ _081274FC: pop {r1} bx r1 .align 2, 0 -_08127504: .4byte gUnknown_0202FF84 +_08127504: .4byte gFieldEffectArguments _08127508: .4byte gFieldEffectObjectTemplatePointers _0812750C: .4byte gSprites thumb_func_end FldEff_DeepSandFootprints @@ -1692,7 +1692,7 @@ _0812750C: .4byte gSprites thumb_func_start FldEff_BikeTireTracks FldEff_BikeTireTracks: @ 8127510 push {r4,r5,lr} - ldr r4, _08127578 @ =gUnknown_0202FF84 + ldr r4, _08127578 @ =gFieldEffectArguments adds r1, r4, 0x4 adds r0, r4, 0 movs r2, 0x8 @@ -1742,7 +1742,7 @@ _08127570: pop {r1} bx r1 .align 2, 0 -_08127578: .4byte gUnknown_0202FF84 +_08127578: .4byte gFieldEffectArguments _0812757C: .4byte gFieldEffectObjectTemplatePointers _08127580: .4byte gSprites thumb_func_end FldEff_BikeTireTracks @@ -1827,7 +1827,7 @@ _08127608: thumb_func_start FldEff_Splash FldEff_Splash: @ 8127610 push {r4-r6,lr} - ldr r6, _081276A4 @ =gUnknown_0202FF84 + ldr r6, _081276A4 @ =gFieldEffectArguments ldrb r0, [r6] ldrb r1, [r6, 0x4] ldrb r2, [r6, 0x8] @@ -1897,7 +1897,7 @@ _0812769A: pop {r1} bx r1 .align 2, 0 -_081276A4: .4byte gUnknown_0202FF84 +_081276A4: .4byte gFieldEffectArguments _081276A8: .4byte gMapObjects _081276AC: .4byte gFieldEffectObjectTemplatePointers _081276B0: .4byte gSprites @@ -1978,7 +1978,7 @@ _0812773C: .4byte gMapObjects thumb_func_start FldEff_JumpSmallSplash FldEff_JumpSmallSplash: @ 8127740 push {r4,lr} - ldr r4, _081277A4 @ =gUnknown_0202FF84 + ldr r4, _081277A4 @ =gFieldEffectArguments adds r1, r4, 0x4 adds r0, r4, 0 movs r2, 0x8 @@ -2027,7 +2027,7 @@ _0812779C: pop {r1} bx r1 .align 2, 0 -_081277A4: .4byte gUnknown_0202FF84 +_081277A4: .4byte gFieldEffectArguments _081277A8: .4byte gFieldEffectObjectTemplatePointers _081277AC: .4byte gSprites thumb_func_end FldEff_JumpSmallSplash @@ -2035,7 +2035,7 @@ _081277AC: .4byte gSprites thumb_func_start FldEff_JumpBigSplash FldEff_JumpBigSplash: @ 81277B0 push {r4,lr} - ldr r4, _08127814 @ =gUnknown_0202FF84 + ldr r4, _08127814 @ =gFieldEffectArguments adds r1, r4, 0x4 adds r0, r4, 0 movs r2, 0x8 @@ -2084,7 +2084,7 @@ _0812780C: pop {r1} bx r1 .align 2, 0 -_08127814: .4byte gUnknown_0202FF84 +_08127814: .4byte gFieldEffectArguments _08127818: .4byte gFieldEffectObjectTemplatePointers _0812781C: .4byte gSprites thumb_func_end FldEff_JumpBigSplash @@ -2092,7 +2092,7 @@ _0812781C: .4byte gSprites thumb_func_start FldEff_FeetInFlowingWater FldEff_FeetInFlowingWater: @ 8127820 push {r4-r7,lr} - ldr r7, _081278C0 @ =gUnknown_0202FF84 + ldr r7, _081278C0 @ =gFieldEffectArguments ldrb r0, [r7] ldrb r1, [r7, 0x4] ldrb r2, [r7, 0x8] @@ -2168,7 +2168,7 @@ _081278B6: pop {r1} bx r1 .align 2, 0 -_081278C0: .4byte gUnknown_0202FF84 +_081278C0: .4byte gFieldEffectArguments _081278C4: .4byte gMapObjects _081278C8: .4byte gFieldEffectObjectTemplatePointers _081278CC: .4byte gSprites @@ -2263,7 +2263,7 @@ FldEff_Ripple: @ 8127978 push {r4,lr} ldr r0, _081279CC @ =gFieldEffectObjectTemplatePointers ldr r0, [r0, 0x14] - ldr r4, _081279D0 @ =gUnknown_0202FF84 + ldr r4, _081279D0 @ =gFieldEffectArguments movs r2, 0 ldrsh r1, [r4, r2] movs r3, 0x4 @@ -2304,14 +2304,14 @@ _081279C4: bx r1 .align 2, 0 _081279CC: .4byte gFieldEffectObjectTemplatePointers -_081279D0: .4byte gUnknown_0202FF84 +_081279D0: .4byte gFieldEffectArguments _081279D4: .4byte gSprites thumb_func_end FldEff_Ripple thumb_func_start FldEff_HotSpringsWater FldEff_HotSpringsWater: @ 81279D8 push {r4-r6,lr} - ldr r6, _08127A6C @ =gUnknown_0202FF84 + ldr r6, _08127A6C @ =gFieldEffectArguments ldrb r0, [r6] ldrb r1, [r6, 0x4] ldrb r2, [r6, 0x8] @@ -2384,7 +2384,7 @@ _08127A64: pop {r1} bx r1 .align 2, 0 -_08127A6C: .4byte gUnknown_0202FF84 +_08127A6C: .4byte gFieldEffectArguments _08127A70: .4byte gMapObjects _08127A74: .4byte gFieldEffectObjectTemplatePointers _08127A78: .4byte gSprites @@ -2472,7 +2472,7 @@ _08127B10: .4byte gSprites thumb_func_start FldEff_Unknown19 FldEff_Unknown19: @ 8127B14 push {r4,lr} - ldr r4, _08127B74 @ =gUnknown_0202FF84 + ldr r4, _08127B74 @ =gFieldEffectArguments adds r1, r4, 0x4 adds r0, r4, 0 movs r2, 0x8 @@ -2519,7 +2519,7 @@ _08127B6C: pop {r1} bx r1 .align 2, 0 -_08127B74: .4byte gUnknown_0202FF84 +_08127B74: .4byte gFieldEffectArguments _08127B78: .4byte gFieldEffectObjectTemplatePointers _08127B7C: .4byte gSprites thumb_func_end FldEff_Unknown19 @@ -2527,7 +2527,7 @@ _08127B7C: .4byte gSprites thumb_func_start FldEff_Unknown20 FldEff_Unknown20: @ 8127B80 push {r4,lr} - ldr r4, _08127BE0 @ =gUnknown_0202FF84 + ldr r4, _08127BE0 @ =gFieldEffectArguments adds r1, r4, 0x4 adds r0, r4, 0 movs r2, 0x8 @@ -2574,7 +2574,7 @@ _08127BD8: pop {r1} bx r1 .align 2, 0 -_08127BE0: .4byte gUnknown_0202FF84 +_08127BE0: .4byte gFieldEffectArguments _08127BE4: .4byte gFieldEffectObjectTemplatePointers _08127BE8: .4byte gSprites thumb_func_end FldEff_Unknown20 @@ -2582,7 +2582,7 @@ _08127BE8: .4byte gSprites thumb_func_start FldEff_Unknown21 FldEff_Unknown21: @ 8127BEC push {r4,lr} - ldr r4, _08127C4C @ =gUnknown_0202FF84 + ldr r4, _08127C4C @ =gFieldEffectArguments adds r1, r4, 0x4 adds r0, r4, 0 movs r2, 0x8 @@ -2629,7 +2629,7 @@ _08127C44: pop {r1} bx r1 .align 2, 0 -_08127C4C: .4byte gUnknown_0202FF84 +_08127C4C: .4byte gFieldEffectArguments _08127C50: .4byte gFieldEffectObjectTemplatePointers _08127C54: .4byte gSprites thumb_func_end FldEff_Unknown21 @@ -2637,7 +2637,7 @@ _08127C54: .4byte gSprites thumb_func_start FldEff_Unknown22 FldEff_Unknown22: @ 8127C58 push {r4,lr} - ldr r4, _08127CB8 @ =gUnknown_0202FF84 + ldr r4, _08127CB8 @ =gFieldEffectArguments adds r1, r4, 0x4 adds r0, r4, 0 movs r2, 0x8 @@ -2684,7 +2684,7 @@ _08127CB0: pop {r1} bx r1 .align 2, 0 -_08127CB8: .4byte gUnknown_0202FF84 +_08127CB8: .4byte gFieldEffectArguments _08127CBC: .4byte gFieldEffectObjectTemplatePointers _08127CC0: .4byte gSprites thumb_func_end FldEff_Unknown22 @@ -2694,7 +2694,7 @@ ash: @ 8127CC4 push {r4,lr} lsls r2, 16 lsrs r2, 16 - ldr r4, _08127CF4 @ =gUnknown_0202FF84 + ldr r4, _08127CF4 @ =gFieldEffectArguments lsls r0, 16 asrs r0, 16 str r0, [r4] @@ -2715,14 +2715,14 @@ ash: @ 8127CC4 pop {r0} bx r0 .align 2, 0 -_08127CF4: .4byte gUnknown_0202FF84 +_08127CF4: .4byte gFieldEffectArguments thumb_func_end ash thumb_func_start FldEff_Ash FldEff_Ash: @ 8127CF8 push {r4,r5,lr} sub sp, 0x4 - ldr r5, _08127D78 @ =gUnknown_0202FF84 + ldr r5, _08127D78 @ =gFieldEffectArguments ldrh r1, [r5] mov r0, sp strh r1, [r0] @@ -2784,7 +2784,7 @@ _08127D6E: pop {r1} bx r1 .align 2, 0 -_08127D78: .4byte gUnknown_0202FF84 +_08127D78: .4byte gFieldEffectArguments _08127D7C: .4byte gFieldEffectObjectTemplatePointers _08127D80: .4byte gSprites thumb_func_end FldEff_Ash @@ -2907,7 +2907,7 @@ _08127E50: thumb_func_start FldEff_SurfBlob FldEff_SurfBlob: @ 8127E58 push {r4,r5,lr} - ldr r4, _08127EC0 @ =gUnknown_0202FF84 + ldr r4, _08127EC0 @ =gFieldEffectArguments adds r1, r4, 0x4 adds r0, r4, 0 movs r2, 0x8 @@ -2957,7 +2957,7 @@ _08127EB2: pop {r1} bx r1 .align 2, 0 -_08127EC0: .4byte gUnknown_0202FF84 +_08127EC0: .4byte gFieldEffectArguments _08127EC4: .4byte gFieldEffectObjectTemplatePointers _08127EC8: .4byte gSprites _08127ECC: .4byte 0x0000ffff @@ -3375,7 +3375,7 @@ _081281B0: .4byte gSprites thumb_func_start FldEff_Dust FldEff_Dust: @ 81281B4 push {r4,lr} - ldr r4, _08128218 @ =gUnknown_0202FF84 + ldr r4, _08128218 @ =gFieldEffectArguments adds r1, r4, 0x4 adds r0, r4, 0 movs r2, 0x8 @@ -3424,7 +3424,7 @@ _08128210: pop {r1} bx r1 .align 2, 0 -_08128218: .4byte gUnknown_0202FF84 +_08128218: .4byte gFieldEffectArguments _0812821C: .4byte gFieldEffectObjectTemplatePointers _08128220: .4byte gSprites thumb_func_end FldEff_Dust @@ -3432,7 +3432,7 @@ _08128220: .4byte gSprites thumb_func_start FldEff_SandPile FldEff_SandPile: @ 8128224 push {r4-r7,lr} - ldr r7, _081282D0 @ =gUnknown_0202FF84 + ldr r7, _081282D0 @ =gFieldEffectArguments ldrb r0, [r7] ldrb r1, [r7, 0x4] ldrb r2, [r7, 0x8] @@ -3515,7 +3515,7 @@ _081282C8: pop {r1} bx r1 .align 2, 0 -_081282D0: .4byte gUnknown_0202FF84 +_081282D0: .4byte gFieldEffectArguments _081282D4: .4byte gMapObjects _081282D8: .4byte gFieldEffectObjectTemplatePointers _081282DC: .4byte gSprites @@ -3629,7 +3629,7 @@ _081283A8: .4byte gMapObjects thumb_func_start FldEff_Bubbles FldEff_Bubbles: @ 81283AC push {r4,lr} - ldr r4, _08128404 @ =gUnknown_0202FF84 + ldr r4, _08128404 @ =gFieldEffectArguments adds r1, r4, 0x4 adds r0, r4, 0 movs r2, 0x8 @@ -3672,7 +3672,7 @@ _081283FC: pop {r1} bx r1 .align 2, 0 -_08128404: .4byte gUnknown_0202FF84 +_08128404: .4byte gFieldEffectArguments _08128408: .4byte gFieldEffectObjectTemplatePointers _0812840C: .4byte gSprites thumb_func_end FldEff_Bubbles @@ -3714,7 +3714,7 @@ _0812844C: .4byte 0x00001004 thumb_func_start FldEff_BerryTreeGrowthSparkle FldEff_BerryTreeGrowthSparkle: @ 8128450 push {r4,lr} - ldr r4, _081284B8 @ =gUnknown_0202FF84 + ldr r4, _081284B8 @ =gFieldEffectArguments adds r1, r4, 0x4 adds r0, r4, 0 movs r2, 0x8 @@ -3765,7 +3765,7 @@ _081284B0: pop {r1} bx r1 .align 2, 0 -_081284B8: .4byte gUnknown_0202FF84 +_081284B8: .4byte gFieldEffectArguments _081284BC: .4byte gFieldEffectObjectTemplatePointers _081284C0: .4byte gSprites thumb_func_end FldEff_BerryTreeGrowthSparkle @@ -3816,7 +3816,7 @@ ShowDisguiseFieldEffect: @ 81284F4 lsrs r6, r1, 24 lsls r2, 24 lsrs r7, r2, 24 - ldr r5, _08128528 @ =gUnknown_0202FF84 + ldr r5, _08128528 @ =gFieldEffectArguments ldrb r0, [r5] ldrb r1, [r5, 0x4] ldrb r2, [r5, 0x8] @@ -3830,7 +3830,7 @@ ShowDisguiseFieldEffect: @ 81284F4 movs r0, 0x40 b _08128598 .align 2, 0 -_08128528: .4byte gUnknown_0202FF84 +_08128528: .4byte gFieldEffectArguments _0812852C: ldr r1, _081285A4 @ =gFieldEffectObjectTemplatePointers lsls r0, r6, 2 @@ -4084,7 +4084,7 @@ _081286FC: thumb_func_start FldEff_Sparkle FldEff_Sparkle: @ 8128700 push {r4,lr} - ldr r4, _08128768 @ =gUnknown_0202FF84 + ldr r4, _08128768 @ =gFieldEffectArguments ldr r0, [r4] adds r0, 0x7 str r0, [r4] @@ -4135,7 +4135,7 @@ _08128760: pop {r1} bx r1 .align 2, 0 -_08128768: .4byte gUnknown_0202FF84 +_08128768: .4byte gFieldEffectArguments _0812876C: .4byte gFieldEffectObjectTemplatePointers _08128770: .4byte gSprites thumb_func_end FldEff_Sparkle diff --git a/asm/fldeff_80C5CD4.s b/asm/fldeff_80C5CD4.s index 33182fc6a..e049db56a 100644 --- a/asm/fldeff_80C5CD4.s +++ b/asm/fldeff_80C5CD4.s @@ -741,7 +741,7 @@ _080C627C: .4byte gMapHeader thumb_func_start sub_80C6280 sub_80C6280: @ 80C6280 push {lr} - ldr r1, _080C6294 @ =gUnknown_0202FF84 + ldr r1, _080C6294 @ =gFieldEffectArguments ldr r0, [r1, 0x4] cmp r0, 0x2 beq _080C62AA @@ -751,7 +751,7 @@ sub_80C6280: @ 80C6280 beq _080C62A2 b _080C62BE .align 2, 0 -_080C6294: .4byte gUnknown_0202FF84 +_080C6294: .4byte gFieldEffectArguments _080C6298: cmp r0, 0x3 beq _080C62AE @@ -880,7 +880,7 @@ _080C6398: .4byte sub_80C660C thumb_func_start sub_80C639C sub_80C639C: @ 80C639C push {lr} - ldr r1, _080C63B0 @ =gUnknown_0202FF84 + ldr r1, _080C63B0 @ =gFieldEffectArguments ldr r0, _080C63B4 @ =gLastFieldPokeMenuOpened ldrb r0, [r0] str r0, [r1] @@ -889,7 +889,7 @@ sub_80C639C: @ 80C639C pop {r0} bx r0 .align 2, 0 -_080C63B0: .4byte gUnknown_0202FF84 +_080C63B0: .4byte gFieldEffectArguments _080C63B4: .4byte gLastFieldPokeMenuOpened _080C63B8: .4byte gUnknown_081A2CE6 thumb_func_end sub_80C639C @@ -943,7 +943,7 @@ FldEff_SecretPowerCave: @ 80C63FC ldrh r1, [r2, 0x2] lsls r1, 23 lsrs r1, 23 - ldr r4, _080C6448 @ =gUnknown_0202FF84 + ldr r4, _080C6448 @ =gFieldEffectArguments ldr r3, [r4, 0x14] adds r1, r3 lsls r1, 16 @@ -963,7 +963,7 @@ FldEff_SecretPowerCave: @ 80C63FC _080C643C: .4byte gSpriteTemplate_83D2614 _080C6440: .4byte gSprites _080C6444: .4byte gPlayerAvatar -_080C6448: .4byte gUnknown_0202FF84 +_080C6448: .4byte gFieldEffectArguments thumb_func_end FldEff_SecretPowerCave thumb_func_start sub_80C644C @@ -1025,7 +1025,7 @@ sub_80C6498: @ 80C6498 thumb_func_start sub_80C64A8 sub_80C64A8: @ 80C64A8 push {lr} - ldr r1, _080C64BC @ =gUnknown_0202FF84 + ldr r1, _080C64BC @ =gFieldEffectArguments ldr r0, _080C64C0 @ =gLastFieldPokeMenuOpened ldrb r0, [r0] str r0, [r1] @@ -1034,7 +1034,7 @@ sub_80C64A8: @ 80C64A8 pop {r0} bx r0 .align 2, 0 -_080C64BC: .4byte gUnknown_0202FF84 +_080C64BC: .4byte gFieldEffectArguments _080C64C0: .4byte gLastFieldPokeMenuOpened _080C64C4: .4byte gUnknown_081A2D3E thumb_func_end sub_80C64A8 @@ -1088,13 +1088,13 @@ FldEff_SecretPowerTree: @ 80C6508 ands r2, r0 cmp r2, 0x96 bne _080C652A - ldr r1, _080C6588 @ =gUnknown_0202FF84 + ldr r1, _080C6588 @ =gFieldEffectArguments movs r0, 0 str r0, [r1, 0x1C] _080C652A: cmp r2, 0x9C bne _080C6534 - ldr r1, _080C6588 @ =gUnknown_0202FF84 + ldr r1, _080C6588 @ =gFieldEffectArguments movs r0, 0x2 str r0, [r1, 0x1C] _080C6534: @@ -1110,7 +1110,7 @@ _080C6534: ldrh r1, [r2, 0x2] lsls r1, 23 lsrs r1, 23 - ldr r4, _080C6588 @ =gUnknown_0202FF84 + ldr r4, _080C6588 @ =gFieldEffectArguments ldr r3, [r4, 0x14] adds r1, r3 lsls r1, 16 @@ -1137,7 +1137,7 @@ _080C6576: .align 2, 0 _080C6580: .4byte gUnknown_0203923C _080C6584: .4byte 0x00000fff -_080C6588: .4byte gUnknown_0202FF84 +_080C6588: .4byte gFieldEffectArguments _080C658C: .4byte gSpriteTemplate_83D262C _080C6590: .4byte gSprites _080C6594: .4byte gPlayerAvatar @@ -1149,7 +1149,7 @@ sub_80C6598: @ 80C6598 adds r4, r0, 0 movs r0, 0x9B bl PlaySE - ldr r0, _080C65BC @ =gUnknown_0202FF84 + ldr r0, _080C65BC @ =gFieldEffectArguments ldr r1, [r0, 0x1C] adds r2, r4, 0 adds r2, 0x2A @@ -1162,7 +1162,7 @@ sub_80C6598: @ 80C6598 pop {r0} bx r0 .align 2, 0 -_080C65BC: .4byte gUnknown_0202FF84 +_080C65BC: .4byte gFieldEffectArguments _080C65C0: .4byte sub_80C65C4 thumb_func_end sub_80C6598 @@ -1177,7 +1177,7 @@ sub_80C65C4: @ 80C65C4 asrs r0, 16 cmp r0, 0x27 ble _080C65EE - ldr r0, _080C65F4 @ =gUnknown_0202FF84 + ldr r0, _080C65F4 @ =gFieldEffectArguments ldr r0, [r0, 0x1C] cmp r0, 0 beq _080C65E2 @@ -1195,7 +1195,7 @@ _080C65EE: pop {r0} bx r0 .align 2, 0 -_080C65F4: .4byte gUnknown_0202FF84 +_080C65F4: .4byte gFieldEffectArguments _080C65F8: .4byte sub_80C65FC thumb_func_end sub_80C65C4 @@ -1212,7 +1212,7 @@ sub_80C65FC: @ 80C65FC thumb_func_start sub_80C660C sub_80C660C: @ 80C660C push {lr} - ldr r1, _080C6620 @ =gUnknown_0202FF84 + ldr r1, _080C6620 @ =gFieldEffectArguments ldr r0, _080C6624 @ =gLastFieldPokeMenuOpened ldrb r0, [r0] str r0, [r1] @@ -1221,7 +1221,7 @@ sub_80C660C: @ 80C660C pop {r0} bx r0 .align 2, 0 -_080C6620: .4byte gUnknown_0202FF84 +_080C6620: .4byte gFieldEffectArguments _080C6624: .4byte gLastFieldPokeMenuOpened _080C6628: .4byte gUnknown_081A2D96 thumb_func_end sub_80C660C @@ -1275,7 +1275,7 @@ FldEff_SecretPowerShrub: @ 80C666C ldrh r1, [r2, 0x2] lsls r1, 23 lsrs r1, 23 - ldr r4, _080C66B8 @ =gUnknown_0202FF84 + ldr r4, _080C66B8 @ =gFieldEffectArguments ldr r3, [r4, 0x14] adds r1, r3 lsls r1, 16 @@ -1295,7 +1295,7 @@ FldEff_SecretPowerShrub: @ 80C666C _080C66AC: .4byte gSpriteTemplate_83D2644 _080C66B0: .4byte gSprites _080C66B4: .4byte gPlayerAvatar -_080C66B8: .4byte gUnknown_0202FF84 +_080C66B8: .4byte gFieldEffectArguments thumb_func_end FldEff_SecretPowerShrub thumb_func_start sub_80C66BC @@ -2103,7 +2103,7 @@ FldEff_SandPillar: @ 80C6D3C mov r0, sp adds r1, r4, 0 bl GetXYCoordsOneStepInFrontOfPlayer - ldr r1, _080C6D78 @ =gUnknown_0202FF84 + ldr r1, _080C6D78 @ =gFieldEffectArguments mov r0, sp movs r2, 0 ldrsh r0, [r0, r2] @@ -2122,7 +2122,7 @@ FldEff_SandPillar: @ 80C6D3C beq _080C6D86 b _080C6E4C .align 2, 0 -_080C6D78: .4byte gUnknown_0202FF84 +_080C6D78: .4byte gFieldEffectArguments _080C6D7C: cmp r0, 0x3 beq _080C6DEC @@ -2240,7 +2240,7 @@ SpriteCB_SandPillar_0: @ 80C6E64 adds r5, r0, 0 movs r0, 0x83 bl PlaySE - ldr r4, _080C6E90 @ =gUnknown_0202FF84 + ldr r4, _080C6E90 @ =gFieldEffectArguments ldr r0, [r4, 0x14] ldr r1, [r4, 0x18] subs r1, 0x1 @@ -2255,7 +2255,7 @@ SpriteCB_SandPillar_0: @ 80C6E64 bl MapGridSetMetatileIdAt b _080C6EAA .align 2, 0 -_080C6E90: .4byte gUnknown_0202FF84 +_080C6E90: .4byte gFieldEffectArguments _080C6E94: .4byte 0x00000286 _080C6E98: .4byte 0x00000e02 _080C6E9C: @@ -2266,7 +2266,7 @@ _080C6E9C: lsls r2, 2 bl MapGridSetMetatileIdAt _080C6EAA: - ldr r4, _080C6ED8 @ =gUnknown_0202FF84 + ldr r4, _080C6ED8 @ =gFieldEffectArguments ldr r0, [r4, 0x14] ldr r1, [r4, 0x18] ldr r2, _080C6EDC @ =0x0000020a @@ -2286,7 +2286,7 @@ _080C6EAA: pop {r0} bx r0 .align 2, 0 -_080C6ED8: .4byte gUnknown_0202FF84 +_080C6ED8: .4byte gFieldEffectArguments _080C6EDC: .4byte 0x0000020a _080C6EE0: .4byte SpriteCB_SandPillar_1 thumb_func_end SpriteCB_SandPillar_0 @@ -2304,7 +2304,7 @@ SpriteCB_SandPillar_1: @ 80C6EE4 strh r0, [r5, 0x2E] b _080C6F14 _080C6EF8: - ldr r4, _080C6F1C @ =gUnknown_0202FF84 + ldr r4, _080C6F1C @ =gFieldEffectArguments ldr r0, [r4, 0x14] ldr r1, [r4, 0x18] ldr r2, _080C6F20 @ =0x00000e8c @@ -2321,7 +2321,7 @@ _080C6F14: pop {r0} bx r0 .align 2, 0 -_080C6F1C: .4byte gUnknown_0202FF84 +_080C6F1C: .4byte gFieldEffectArguments _080C6F20: .4byte 0x00000e8c _080C6F24: .4byte SpriteCB_SandPillar_2 thumb_func_end SpriteCB_SandPillar_1 diff --git a/data/scripts/maps/Route101.inc b/data/scripts/maps/Route101.inc index 8462603a6..1acd4b598 100644 --- a/data/scripts/maps/Route101.inc +++ b/data/scripts/maps/Route101.inc @@ -224,7 +224,7 @@ Route101_EventScript_14EA7F:: @ 814EA7F movesprite 255, 6, 13 move 255, Route101_Movement_1A083F waitmove 0 - special ChooseStarter + special ScrSpecial_ChooseStarter waitstate move 2, Route101_Movement_14EAD7 waitmove 0 diff --git a/data/specials.inc b/data/specials.inc index 61670a867..891d2cfd7 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -163,7 +163,7 @@ gSpecials:: def_special sub_8053E90 def_special StartWallClock def_special sub_810D6B8 - def_special ChooseStarter + def_special ScrSpecial_ChooseStarter def_special StartBattle_WallyTutorial def_special sub_80BF9F8 def_special sub_80F9A0C diff --git a/include/battle_setup.h b/include/battle_setup.h index 1aa195d92..e3fa3bb88 100644 --- a/include/battle_setup.h +++ b/include/battle_setup.h @@ -40,12 +40,6 @@ struct TrainerPartyMember3 u16 moves[4]; }; -struct TrainerBattleSpec -{ - void *ptr; - u8 ptrType; -}; - struct TrainerEyeTrainer { u16 trainerNums[5]; @@ -75,7 +69,7 @@ s8 GetBattleTerrain(void); u8 GetWildBattleTransition(void); u8 GetTrainerBattleTransition(void); u8 GetBattleTowerBattleTransition(void); -//void ChooseStarter(void); +//void ScrSpecial_ChooseStarter(void); void CB2_GiveStarter(void); void CB2_StartFirstBattle(void); void HandleFirstBattleEnd(void); @@ -103,8 +97,8 @@ void sub_808260C(void); void do_choose_name_or_words_screen(void); //void sub_80826B0(void); //void sub_80826D8(void); -u8 *sub_80826E8(void); -u8 *sub_8082700(void); +u8 *BattleSetup_GetScriptAddrAfterBattle(void); +u8 *BattleSetup_GetTrainerPostBattleScript(void); //void sub_8082718(void); //void PlayTrainerEncounterMusic(void); //u8 *SanitizeString(u8 *str); diff --git a/include/battle_transition.h b/include/battle_transition.h index ca6869c93..0b8766e87 100644 --- a/include/battle_transition.h +++ b/include/battle_transition.h @@ -1,8 +1,8 @@ #ifndef GUARD_BATTLE_TRANSITION_H #define GUARD_BATTLE_TRANSITION_H -void sub_811AABC(u8 transitionID); -void sub_811AAD8(u8 transitionID); +void BattleTransition_StartOnField(u8 transitionID); +void BattleTransition_Start(u8 transitionID); bool8 IsBattleTransitionDone(void); #define TRANSITIONS_NO 17 diff --git a/include/field_door.h b/include/field_door.h index 1759e0dc1..31fdd154b 100644 --- a/include/field_door.h +++ b/include/field_door.h @@ -20,6 +20,6 @@ void FieldSetDoorClosed(u32, u32); s8 FieldAnimateDoorClose(u32, u32); s8 FieldAnimateDoorOpen(u32, u32); bool8 FieldIsDoorAnimationRunning(void); -u32 sub_8058790(u32 x, u32 y); +u32 GetDoorSoundEffect(u32 x, u32 y); #endif diff --git a/include/field_effect.h b/include/field_effect.h index f43b15afb..a509697e4 100644 --- a/include/field_effect.h +++ b/include/field_effect.h @@ -253,6 +253,6 @@ void MultiplyInvertedPaletteRGBComponents(u16, u8, u8, u8); void sub_80878A8(void); void sub_8087BA8(void); -extern u32 gUnknown_0202FF84[8]; +extern u32 gFieldEffectArguments[8]; #endif // GUARD_FIELD_EFFECT_H diff --git a/include/rom4.h b/include/rom4.h index daccad7e9..74b83fa65 100644 --- a/include/rom4.h +++ b/include/rom4.h @@ -119,8 +119,8 @@ u8 sav1_map_get_name(); bool32 is_c1_link_related_active(void); // c1_overworld_normal // c1_overworld -// c2_overworld_basic -void sub_8054398(void); +// OverworldBasic +void CB2_OverworldBasic(void); void c2_overworld(void); // set_callback1 // sub_80543DC diff --git a/src/battle_setup.c b/src/battle_setup.c index 453bd1e6f..4618095d3 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -37,15 +37,15 @@ extern u16 gScriptResult; extern void (*gFieldCallback)(void); -EWRAM_DATA u16 gTrainerBattleMode = 0; +EWRAM_DATA static u16 sTrainerBattleMode = 0; EWRAM_DATA u16 gTrainerBattleOpponent = 0; -EWRAM_DATA u16 gTrainerMapObjectLocalId = 0; -EWRAM_DATA u8 *gTrainerIntroSpeech = NULL; -EWRAM_DATA u8 *gTrainerDefeatSpeech = NULL; -EWRAM_DATA u8 *gTrainerVictorySpeech = NULL; -EWRAM_DATA u8 *gTrainerCannotBattleSpeech = NULL; -EWRAM_DATA u8 *gTrainerBattleScriptReturnAddress = NULL; -EWRAM_DATA u8 *gTrainerBattleEndScript = NULL; +EWRAM_DATA static u16 sTrainerMapObjectLocalId = 0; +EWRAM_DATA static u8 *sTrainerIntroSpeech = NULL; +EWRAM_DATA static u8 *sTrainerDefeatSpeech = NULL; +EWRAM_DATA static u8 *sTrainerVictorySpeech = NULL; +EWRAM_DATA static u8 *sTrainerCannotBattleSpeech = NULL; +EWRAM_DATA static u8 *sTrainerBattleScriptRetAddr = NULL; +EWRAM_DATA static u8 *sTrainerBattleEndScript = NULL; extern u16 gBattleTypeFlags; extern u16 gScriptLastTalked; @@ -62,80 +62,99 @@ extern u8 gUnknown_0819F8AE[]; extern u8 gUnknown_0819F80B[]; extern u8 gUnknown_081C6C02[]; - +// The first transition is used if the enemy pokemon are lower level than our pokemon. +// Otherwise, the second transition is used. static const u8 gBattleTransitionTable_Wild[][2] = { - {8, 9}, - {5, 10}, - {0, 10}, - {7, 6}, + {B_TRANSITION_SLICE, B_TRANSITION_WHITEFADE}, // Normal + {B_TRANSITION_CLOCKWISE_BLACKFADE, B_TRANSITION_GRID_SQUARES}, // Cave + {B_TRANSITION_BLUR, B_TRANSITION_GRID_SQUARES}, // Cave with flash used + {B_TRANSITION_WAVE, B_TRANSITION_RIPPLE}, // Water }; static const u8 gBattleTransitionTable_Trainer[][2] = { - {4, 11}, - {2, 3}, - {0, 10}, - {1, 6}, + {B_TRANSITION_POKEBALLS_TRAIL, B_TRANSITION_SHARDS}, // Normal + {B_TRANSITION_SHUFFLE, B_TRANSITION_BIG_POKEBALL}, // Cave + {B_TRANSITION_BLUR, B_TRANSITION_GRID_SQUARES}, // Cave with flash used + {B_TRANSITION_SWIRL, B_TRANSITION_RIPPLE}, // Water +}; + +enum +{ + TRAINER_PARAM_LOAD_VAL_8BIT, + TRAINER_PARAM_LOAD_VAL_16BIT, + TRAINER_PARAM_LOAD_VAL_32BIT, + TRAINER_PARAM_CLEAR_VAL_8BIT, + TRAINER_PARAM_CLEAR_VAL_16BIT, + TRAINER_PARAM_CLEAR_VAL_32BIT, + TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR, }; -static const struct TrainerBattleSpec gTrainerBattleSpecs_0[] = -{ - {&gTrainerBattleMode, 0}, - {&gTrainerBattleOpponent, 1}, - {&gTrainerMapObjectLocalId, 1}, - {&gTrainerIntroSpeech, 2}, - {&gTrainerDefeatSpeech, 2}, - {&gTrainerVictorySpeech, 5}, - {&gTrainerCannotBattleSpeech, 5}, - {&gTrainerBattleEndScript, 5}, - {&gTrainerBattleScriptReturnAddress, 6}, + +struct TrainerBattleParameter +{ + void *varPtr; + u8 ptrType; +}; + +static const struct TrainerBattleParameter gTrainerBattleSpecs_0[] = +{ + {&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT}, + {&gTrainerBattleOpponent, TRAINER_PARAM_LOAD_VAL_16BIT}, + {&sTrainerMapObjectLocalId, TRAINER_PARAM_LOAD_VAL_16BIT}, + {&sTrainerIntroSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, + {&sTrainerDefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, + {&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, + {&sTrainerCannotBattleSpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, + {&sTrainerBattleEndScript, TRAINER_PARAM_CLEAR_VAL_32BIT}, + {&sTrainerBattleScriptRetAddr, TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR}, }; -static const struct TrainerBattleSpec gTrainerBattleSpecs_1[] = -{ - {&gTrainerBattleMode, 0}, - {&gTrainerBattleOpponent, 1}, - {&gTrainerMapObjectLocalId, 1}, - {&gTrainerIntroSpeech, 2}, - {&gTrainerDefeatSpeech, 2}, - {&gTrainerVictorySpeech, 5}, - {&gTrainerCannotBattleSpeech, 5}, - {&gTrainerBattleEndScript, 2}, - {&gTrainerBattleScriptReturnAddress, 6}, +static const struct TrainerBattleParameter gTrainerBattleSpecs_1[] = +{ + {&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT}, + {&gTrainerBattleOpponent, TRAINER_PARAM_LOAD_VAL_16BIT}, + {&sTrainerMapObjectLocalId, TRAINER_PARAM_LOAD_VAL_16BIT}, + {&sTrainerIntroSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, + {&sTrainerDefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, + {&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, + {&sTrainerCannotBattleSpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, + {&sTrainerBattleEndScript, TRAINER_PARAM_LOAD_VAL_32BIT}, + {&sTrainerBattleScriptRetAddr, TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR}, }; -static const struct TrainerBattleSpec gTrainerBattleSpecs_2[] = -{ - {&gTrainerBattleMode, 0}, - {&gTrainerBattleOpponent, 1}, - {&gTrainerMapObjectLocalId, 1}, - {&gTrainerIntroSpeech, 2}, - {&gTrainerDefeatSpeech, 2}, - {&gTrainerVictorySpeech, 5}, - {&gTrainerCannotBattleSpeech, 2}, - {&gTrainerBattleEndScript, 5}, - {&gTrainerBattleScriptReturnAddress, 6}, +static const struct TrainerBattleParameter gTrainerBattleSpecs_2[] = +{ + {&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT}, + {&gTrainerBattleOpponent, TRAINER_PARAM_LOAD_VAL_16BIT}, + {&sTrainerMapObjectLocalId, TRAINER_PARAM_LOAD_VAL_16BIT}, + {&sTrainerIntroSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, + {&sTrainerDefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, + {&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, + {&sTrainerCannotBattleSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, + {&sTrainerBattleEndScript, TRAINER_PARAM_CLEAR_VAL_32BIT}, + {&sTrainerBattleScriptRetAddr, TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR}, }; -static const struct TrainerBattleSpec gTrainerBattleSpecs_3[] = -{ - {&gTrainerBattleMode, 0}, - {&gTrainerBattleOpponent, 1}, - {&gTrainerMapObjectLocalId, 1}, - {&gTrainerIntroSpeech, 5}, - {&gTrainerDefeatSpeech, 2}, - {&gTrainerVictorySpeech, 5}, - {&gTrainerCannotBattleSpeech, 5}, - {&gTrainerBattleEndScript, 5}, - {&gTrainerBattleScriptReturnAddress, 6}, +static const struct TrainerBattleParameter gTrainerBattleSpecs_3[] = +{ + {&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT}, + {&gTrainerBattleOpponent, TRAINER_PARAM_LOAD_VAL_16BIT}, + {&sTrainerMapObjectLocalId, TRAINER_PARAM_LOAD_VAL_16BIT}, + {&sTrainerIntroSpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, + {&sTrainerDefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, + {&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, + {&sTrainerCannotBattleSpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, + {&sTrainerBattleEndScript, TRAINER_PARAM_CLEAR_VAL_32BIT}, + {&sTrainerBattleScriptRetAddr, TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR}, }; -static const struct TrainerBattleSpec gTrainerBattleSpecs_4[] = -{ - {&gTrainerBattleMode, 0}, - {&gTrainerBattleOpponent, 1}, - {&gTrainerMapObjectLocalId, 1}, - {&gTrainerIntroSpeech, 2}, - {&gTrainerDefeatSpeech, 2}, - {&gTrainerVictorySpeech, 5}, - {&gTrainerCannotBattleSpeech, 2}, - {&gTrainerBattleEndScript, 2}, - {&gTrainerBattleScriptReturnAddress, 6}, +static const struct TrainerBattleParameter gTrainerBattleSpecs_4[] = +{ + {&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT}, + {&gTrainerBattleOpponent, TRAINER_PARAM_LOAD_VAL_16BIT}, + {&sTrainerMapObjectLocalId, TRAINER_PARAM_LOAD_VAL_16BIT}, + {&sTrainerIntroSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, + {&sTrainerDefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, + {&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, + {&sTrainerCannotBattleSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, + {&sTrainerBattleEndScript, TRAINER_PARAM_LOAD_VAL_32BIT}, + {&sTrainerBattleScriptRetAddr, TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR}, }; const struct TrainerEyeTrainer gTrainerEyeTrainers[] = @@ -424,17 +443,20 @@ const struct TrainerEyeTrainer gTrainerEyeTrainers[] = static const u16 sBadgeFlags[] = {BADGE01_GET, BADGE02_GET, BADGE03_GET, BADGE04_GET, BADGE05_GET, BADGE06_GET, BADGE07_GET, BADGE08_GET}; -void task01_battle_start(u8 taskId) +#define tState data[0] +#define tTransition data[1] + +static void Task_BattleStart(u8 taskId) { s16 *data = gTasks[taskId].data; - switch (data[0]) + switch (tState) { case 0: if (!FieldPoisonEffectIsRunning()) // is poison not active? { - sub_811AABC(data[1]); - data[0]++; // go to case 1. + BattleTransition_StartOnField(tTransition); + tState++; // go to case 1. } break; case 1: @@ -449,14 +471,17 @@ void task01_battle_start(u8 taskId) } } -void task_add_01_battle_start(u8 transition, u16 song) +void CreateBattleStartTask(u8 transition, u16 song) { - u8 taskId = CreateTask(task01_battle_start, 1); + u8 taskId = CreateTask(Task_BattleStart, 1); - gTasks[taskId].data[1] = transition; + gTasks[taskId].tTransition = transition; current_map_music_set__default_for_battle(song); } +#undef tState +#undef tTransition + void CheckForSafariZoneAndProceed(void) { if (GetSafariZoneFlag()) @@ -472,7 +497,7 @@ void StartBattle_StandardWild(void) sub_80597F4(); gMain.savedCallback = HandleWildBattleEnd; gBattleTypeFlags = 0; - task_add_01_battle_start(GetWildBattleTransition(), 0); + CreateBattleStartTask(GetWildBattleTransition(), 0); IncrementGameStat(7); IncrementGameStat(8); } @@ -484,7 +509,7 @@ void StartBattle_Roamer(void) sub_80597F4(); gMain.savedCallback = HandleWildBattleEnd; gBattleTypeFlags = BATTLE_TYPE_ROAMER; - task_add_01_battle_start(GetWildBattleTransition(), 0); + CreateBattleStartTask(GetWildBattleTransition(), 0); IncrementGameStat(7); IncrementGameStat(8); } @@ -496,12 +521,12 @@ void StartBattle_Safari(void) sub_80597F4(); gMain.savedCallback = sub_80C824C; gBattleTypeFlags = BATTLE_TYPE_SAFARI; - task_add_01_battle_start(GetWildBattleTransition(), 0); + CreateBattleStartTask(GetWildBattleTransition(), 0); } void task_add_01_battle_start_with_music_and_stats(void) { - task_add_01_battle_start(GetTrainerBattleTransition(), 0); + CreateBattleStartTask(GetTrainerBattleTransition(), 0); IncrementGameStat(7); IncrementGameStat(9); } @@ -513,7 +538,7 @@ void StartBattle_WallyTutorial(void) ScriptContext2_Enable(); gMain.savedCallback = c2_exit_to_overworld_1_continue_scripts_restart_music; gBattleTypeFlags = BATTLE_TYPE_WALLY_TUTORIAL; - task_add_01_battle_start(8, 0); + CreateBattleStartTask(B_TRANSITION_SLICE, 0); } void StartBattle_ScriptedWild(void) @@ -521,7 +546,7 @@ void StartBattle_ScriptedWild(void) ScriptContext2_Enable(); gMain.savedCallback = HandleScriptedWildBattleEnd; gBattleTypeFlags = 0; - task_add_01_battle_start(GetWildBattleTransition(), 0); + CreateBattleStartTask(GetWildBattleTransition(), 0); IncrementGameStat(7); IncrementGameStat(8); } @@ -531,7 +556,7 @@ void StartBattle_SouthernIsland(void) ScriptContext2_Enable(); gMain.savedCallback = HandleScriptedWildBattleEnd; gBattleTypeFlags = BATTLE_TYPE_LEGENDARY; - task_add_01_battle_start(GetWildBattleTransition(), 0); + CreateBattleStartTask(GetWildBattleTransition(), 0); IncrementGameStat(7); IncrementGameStat(8); } @@ -541,7 +566,7 @@ void StartBattle_Rayquaza(void) ScriptContext2_Enable(); gMain.savedCallback = HandleScriptedWildBattleEnd; gBattleTypeFlags = BATTLE_TYPE_LEGENDARY; - task_add_01_battle_start(0, BGM_BATTLE34); + CreateBattleStartTask(B_TRANSITION_BLUR, BGM_BATTLE34); IncrementGameStat(7); IncrementGameStat(8); } @@ -551,10 +576,10 @@ void StartBattle_GroudonKyogre(void) ScriptContext2_Enable(); gMain.savedCallback = HandleScriptedWildBattleEnd; gBattleTypeFlags = BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_KYOGRE_GROUDON; - if (gGameVersion == 2) - task_add_01_battle_start(0xB, BGM_BATTLE34); // KYOGRE + if (gGameVersion == VERSION_RUBY) + CreateBattleStartTask(B_TRANSITION_SHARDS, BGM_BATTLE34); // GROUDON else - task_add_01_battle_start(0x6, BGM_BATTLE34); // GROUDON + CreateBattleStartTask(B_TRANSITION_RIPPLE, BGM_BATTLE34); // KYOGRE IncrementGameStat(7); IncrementGameStat(8); } @@ -564,7 +589,7 @@ void StartBattle_Regi(void) ScriptContext2_Enable(); gMain.savedCallback = HandleScriptedWildBattleEnd; gBattleTypeFlags = BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_REGI; - task_add_01_battle_start(0xA, BGM_BATTLE36); + CreateBattleStartTask(B_TRANSITION_GRID_SQUARES, BGM_BATTLE36); IncrementGameStat(7); IncrementGameStat(8); } @@ -654,18 +679,13 @@ s8 GetBattleTerrain(void) s8 GetBattleTransitionTypeByMap(void) { - u8 flashUsed; u16 tileBehavior; s16 x, y; PlayerGetDestCoords(&x, &y); tileBehavior = MapGridGetMetatileBehaviorAt(x, y); - - flashUsed = sav1_get_flash_used_on_map(); - - if (flashUsed) + if (sav1_get_flash_used_on_map()) return 2; - if (!MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior)) { switch (gMapHeader.mapType) @@ -742,68 +762,71 @@ u8 GetSumOfEnemyPartyLevel(u16 trainerNum, u8 numMons) u8 GetWildBattleTransition(void) { - u8 flashVar = GetBattleTransitionTypeByMap(); - u8 level = GetMonData(&gEnemyParty[0], MON_DATA_LEVEL); + u8 transitionType = GetBattleTransitionTypeByMap(); + u8 enemyLevel = GetMonData(&gEnemyParty[0], MON_DATA_LEVEL); + u8 playerLevel = GetSumOfPartyMonLevel(1); - if (level < (u8)GetSumOfPartyMonLevel(1)) // is wild mon level than the player's mon level? - return gBattleTransitionTable_Wild[flashVar][0]; + if (enemyLevel < playerLevel) + return gBattleTransitionTable_Wild[transitionType][0]; else - return gBattleTransitionTable_Wild[flashVar][1]; // use a white fade in instead of normal transition. + return gBattleTransitionTable_Wild[transitionType][1]; } u8 GetTrainerBattleTransition(void) { const struct Trainer *trainer; u8 minPartyCount; - u8 flashVar; - u8 level; + u8 transitionType; + u8 enemyLevel; + u8 playerLevel; if (gTrainerBattleOpponent == 1024) // link battle? - return 16; + return B_TRANSITION_STEVEN; trainer = gTrainers; if (trainer[gTrainerBattleOpponent].trainerClass == 24) // league? { if (gTrainerBattleOpponent == 261) - return 12; + return B_TRANSITION_SYDNEY; if (gTrainerBattleOpponent == 262) - return 13; + return B_TRANSITION_PHOEBE; if (gTrainerBattleOpponent == 263) - return 14; + return B_TRANSITION_GLACIA; if (gTrainerBattleOpponent == 264) - return 15; - return 16; + return B_TRANSITION_DRAKE; + return B_TRANSITION_STEVEN; } if (trainer[gTrainerBattleOpponent].trainerClass == 32) // team leader? - return 16; + return B_TRANSITION_STEVEN; if (trainer[gTrainerBattleOpponent].doubleBattle == TRUE) minPartyCount = 2; // double battles always at least have 2 pokemon. else minPartyCount = 1; - flashVar = GetBattleTransitionTypeByMap(); - level = GetSumOfEnemyPartyLevel(gTrainerBattleOpponent, minPartyCount); - - if (level < (u8)GetSumOfPartyMonLevel(minPartyCount)) // is wild mon level than the player's mon level? - return gBattleTransitionTable_Trainer[flashVar][0]; + transitionType = GetBattleTransitionTypeByMap(); + enemyLevel = GetSumOfEnemyPartyLevel(gTrainerBattleOpponent, minPartyCount); + playerLevel = GetSumOfPartyMonLevel(minPartyCount); + if (enemyLevel < playerLevel) // is wild mon level than the player's mon level? + return gBattleTransitionTable_Trainer[transitionType][0]; else - return gBattleTransitionTable_Trainer[flashVar][1]; + return gBattleTransitionTable_Trainer[transitionType][1]; } u8 GetBattleTowerBattleTransition(void) { - u8 monData = GetMonData(&gEnemyParty[0], MON_DATA_LEVEL); + u8 enemyLevel = GetMonData(&gEnemyParty[0], MON_DATA_LEVEL); + u8 playerLevel = GetSumOfPartyMonLevel(1); - if (monData < (u8)GetSumOfPartyMonLevel(1)) - return 4; + if (enemyLevel < playerLevel) + return B_TRANSITION_POKEBALLS_TRAIL; else - return 3; + return B_TRANSITION_BIG_POKEBALL; } -void ChooseStarter(void) +void ScrSpecial_ChooseStarter(void) { SetMainCallback2(CB2_ChooseStarter); gMain.savedCallback = CB2_GiveStarter; @@ -819,7 +842,7 @@ void CB2_GiveStarter(void) ResetTasks(); sub_80408BC(); SetMainCallback2(CB2_StartFirstBattle); - sub_811AAD8(0); + BattleTransition_Start(0); } void CB2_StartFirstBattle(void) @@ -884,46 +907,46 @@ bool32 battle_exit_is_player_defeat(u32 a1) void sub_80822BC(void) { - gTrainerBattleMode = 0; + sTrainerBattleMode = 0; gTrainerBattleOpponent = 0; - gTrainerMapObjectLocalId = 0; - gTrainerIntroSpeech = 0; - gTrainerDefeatSpeech = 0; - gTrainerVictorySpeech = 0; - gTrainerCannotBattleSpeech = 0; - gTrainerBattleScriptReturnAddress = 0; - gTrainerBattleEndScript = 0; + sTrainerMapObjectLocalId = 0; + sTrainerIntroSpeech = 0; + sTrainerDefeatSpeech = 0; + sTrainerVictorySpeech = 0; + sTrainerCannotBattleSpeech = 0; + sTrainerBattleScriptRetAddr = 0; + sTrainerBattleEndScript = 0; } -void TrainerBattleLoadArgs(const struct TrainerBattleSpec *specs, const u8 *data) +void TrainerBattleLoadArgs(const struct TrainerBattleParameter *specs, const u8 *data) { while (1) { switch (specs->ptrType) { - case 0: - *(u8 *)specs->ptr = TrainerBattleLoadArg8(data); - data++; + case TRAINER_PARAM_LOAD_VAL_8BIT: + *(u8 *)specs->varPtr = TrainerBattleLoadArg8(data); + data += 1; break; - case 1: - *(u16 *)specs->ptr = TrainerBattleLoadArg16(data); + case TRAINER_PARAM_LOAD_VAL_16BIT: + *(u16 *)specs->varPtr = TrainerBattleLoadArg16(data); data += 2; break; - case 2: - *(u32 *)specs->ptr = TrainerBattleLoadArg32(data); + case TRAINER_PARAM_LOAD_VAL_32BIT: + *(u32 *)specs->varPtr = TrainerBattleLoadArg32(data); data += 4; break; - case 3: - *(u8 *)specs->ptr = 0; + case TRAINER_PARAM_CLEAR_VAL_8BIT: + *(u8 *)specs->varPtr = 0; break; - case 4: - *(u16 *)specs->ptr = 0; + case TRAINER_PARAM_CLEAR_VAL_16BIT: + *(u16 *)specs->varPtr = 0; break; - case 5: - *(u32 *)specs->ptr = 0; + case TRAINER_PARAM_CLEAR_VAL_32BIT: + *(u32 *)specs->varPtr = 0; break; - case 6: - *(const u8 **)specs->ptr = data; + case TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR: + *(const u8 **)specs->varPtr = data; return; } specs++; @@ -932,19 +955,19 @@ void TrainerBattleLoadArgs(const struct TrainerBattleSpec *specs, const u8 *data void battle_80801F0(void) { - if (gTrainerMapObjectLocalId) + if (sTrainerMapObjectLocalId) { - gScriptLastTalked = gTrainerMapObjectLocalId; - gSelectedMapObject = GetFieldObjectIdByLocalIdAndMap(gTrainerMapObjectLocalId, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); + gScriptLastTalked = sTrainerMapObjectLocalId; + gSelectedMapObject = GetFieldObjectIdByLocalIdAndMap(sTrainerMapObjectLocalId, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); } } u8 *TrainerBattleConfigure(const u8 *data) { sub_80822BC(); - gTrainerBattleMode = TrainerBattleLoadArg8(data); + sTrainerBattleMode = TrainerBattleLoadArg8(data); - switch (gTrainerBattleMode) + switch (sTrainerBattleMode) { case 3: TrainerBattleLoadArgs(gTrainerBattleSpecs_3, data); @@ -1004,7 +1027,7 @@ void sub_8082524(void) u8 sub_8082558(void) { - return gTrainerBattleMode; + return sTrainerBattleMode; } u8 sub_8082564(void) @@ -1093,18 +1116,18 @@ void sub_80826D8(void) ShowFieldMessage(sub_808281C()); } -u8 *sub_80826E8(void) +u8 *BattleSetup_GetScriptAddrAfterBattle(void) { - if (gTrainerBattleScriptReturnAddress) - return gTrainerBattleScriptReturnAddress; + if (sTrainerBattleScriptRetAddr) + return sTrainerBattleScriptRetAddr; else return gUnknown_081C6C02; } -u8 *sub_8082700(void) +u8 *BattleSetup_GetTrainerPostBattleScript(void) { - if (gTrainerBattleEndScript) - return gTrainerBattleEndScript; + if (sTrainerBattleEndScript) + return sTrainerBattleEndScript; else return gUnknown_081C6C02; } @@ -1118,7 +1141,7 @@ void PlayTrainerEncounterMusic(void) { u16 music; - if (gTrainerBattleMode != 1 && gTrainerBattleMode != 8) + if (sTrainerBattleMode != 1 && sTrainerBattleMode != 8) { switch (sub_803FC58(gTrainerBattleOpponent)) { @@ -1179,7 +1202,7 @@ u8 *SanitizeString(const u8 *str) u8 *sub_808281C(void) { - return SanitizeString(gTrainerIntroSpeech); + return SanitizeString(sTrainerIntroSpeech); } u8 *sub_8082830(void) @@ -1189,7 +1212,7 @@ u8 *sub_8082830(void) if (gTrainerBattleOpponent == 1024) str = sub_80BCCE8(); else - str = gTrainerDefeatSpeech; + str = sTrainerDefeatSpeech; StringExpandPlaceholders(gStringVar4, SanitizeString(str)); return gStringVar4; @@ -1197,12 +1220,12 @@ u8 *sub_8082830(void) u8 *unref_sub_808286C(void) { - return SanitizeString(gTrainerVictorySpeech); + return SanitizeString(sTrainerVictorySpeech); } u8 *sub_8082880(void) { - return SanitizeString(gTrainerCannotBattleSpeech); + return SanitizeString(sTrainerCannotBattleSpeech); } s32 sub_8082894(const struct TrainerEyeTrainer *trainers, u16 trainerNum) diff --git a/src/battle_transition.c b/src/battle_transition.c index 1cacb8857..8c4280838 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -530,13 +530,13 @@ static const u16 sMugshotsTilemap[] = INCBIN_U16("graphics/battle_transitions/el // actual code starts here -void sub_811AABC(u8 transitionID) +void BattleTransition_StartOnField(u8 transitionID) { - gMain.callback2 = sub_8054398; + gMain.callback2 = CB2_OverworldBasic; LaunchBattleTransitionTask(transitionID); } -void sub_811AAD8(u8 transitionID) +void BattleTransition_Start(u8 transitionID) { LaunchBattleTransitionTask(transitionID); } @@ -994,10 +994,10 @@ static bool8 Phase2_Transition_PokeballsTrail_Func2(struct Task* task) rand = Random() & 1; for (i = 0; i <= 4; i++, rand ^= 1) { - gUnknown_0202FF84[0] = arr0[rand]; // x - gUnknown_0202FF84[1] = (i * 32) + 16; // y - gUnknown_0202FF84[2] = rand; - gUnknown_0202FF84[3] = arr1[i]; + gFieldEffectArguments[0] = arr0[rand]; // x + gFieldEffectArguments[1] = (i * 32) + 16; // y + gFieldEffectArguments[2] = rand; + gFieldEffectArguments[3] = arr1[i]; FieldEffectStart(FLDEFF_POKEBALL); } @@ -1017,14 +1017,14 @@ static bool8 Phase2_Transition_PokeballsTrail_Func3(struct Task* task) bool8 FldEff_Pokeball(void) { - u8 spriteID = CreateSpriteAtEnd(&sSpriteTemplate_83FD98C, gUnknown_0202FF84[0], gUnknown_0202FF84[1], 0); + u8 spriteID = CreateSpriteAtEnd(&sSpriteTemplate_83FD98C, gFieldEffectArguments[0], gFieldEffectArguments[1], 0); gSprites[spriteID].oam.priority = 0; gSprites[spriteID].oam.affineMode = 1; - gSprites[spriteID].data0 = gUnknown_0202FF84[2]; - gSprites[spriteID].data1 = gUnknown_0202FF84[3]; + gSprites[spriteID].data0 = gFieldEffectArguments[2]; + gSprites[spriteID].data1 = gFieldEffectArguments[3]; gSprites[spriteID].data2 = -1; InitSpriteAffineAnim(&gSprites[spriteID]); - StartSpriteAffineAnim(&gSprites[spriteID], gUnknown_0202FF84[2]); + StartSpriteAffineAnim(&gSprites[spriteID], gFieldEffectArguments[2]); return FALSE; } diff --git a/src/braille_puzzles.c b/src/braille_puzzles.c index b8d7cd386..63c601acf 100644 --- a/src/braille_puzzles.c +++ b/src/braille_puzzles.c @@ -105,7 +105,7 @@ bool8 ShouldDoBrailleFlyEffect(void) void DoBrailleFlyEffect(void) { - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + gFieldEffectArguments[0] = gLastFieldPokeMenuOpened; FieldEffectStart(0x3C); } diff --git a/src/field_door.c b/src/field_door.c index 791ed4c94..ab46f0696 100644 --- a/src/field_door.c +++ b/src/field_door.c @@ -3,6 +3,7 @@ #include "field_camera.h" #include "fieldmap.h" #include "metatile_behavior.h" +#include "songs.h" #include "task.h" extern struct DoorAnimFrame gDoorOpenAnimFrames[]; @@ -212,10 +213,10 @@ bool8 FieldIsDoorAnimationRunning(void) return FuncIsActiveTask(Task_AnimateDoor); } -u32 sub_8058790(u32 x, u32 y) +u32 GetDoorSoundEffect(u32 x, u32 y) { if (cur_mapdata_get_door_x2_at(gDoorAnimGraphicsTable, x, y) == 0) - return 8; + return SE_DOOR; else - return 18; + return SE_JIDO_DOA; } diff --git a/src/field_effect.c b/src/field_effect.c index cffed2614..2f8200708 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -28,7 +28,7 @@ #define subsprite_table(ptr) {.subsprites = ptr, .subspriteCount = (sizeof ptr) / (sizeof(struct Subsprite))} -EWRAM_DATA u32 gUnknown_0202FF84[8] = {0}; +EWRAM_DATA u32 gFieldEffectArguments[8] = {0}; const u32 gSpriteImage_839DC14[] = INCBIN_U32("graphics/birch_speech/birch.4bpp"); const u16 gBirchPalette[16] = INCBIN_U16("graphics/birch_speech/birch.gbapal"); @@ -1203,10 +1203,10 @@ void task00_8084310(u8 taskId) { return; } - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; - if ((int)gUnknown_0202FF84[0] > 5) + gFieldEffectArguments[0] = gLastFieldPokeMenuOpened; + if ((int)gFieldEffectArguments[0] > 5) { - gUnknown_0202FF84[0] = 0; + gFieldEffectArguments[0] = 0; } FieldEffectStart(FLDEFF_USE_FLY); task->data[0]++; @@ -1665,7 +1665,7 @@ bool8 FldEff_UseWaterfall(void) { u8 taskId; taskId = CreateTask(sub_8086F64, 0xff); - gTasks[taskId].data[1] = gUnknown_0202FF84[0]; + gTasks[taskId].data[1] = gFieldEffectArguments[0]; sub_8086F64(taskId); return FALSE; } @@ -1689,7 +1689,7 @@ bool8 waterfall_1_do_anim_probably(struct Task *task, struct MapObject *mapObjec if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject)) { FieldObjectClearAnimIfSpecialAnimFinished(mapObject); - gUnknown_0202FF84[0] = task->data[1]; + gFieldEffectArguments[0] = task->data[1]; FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); task->data[0]++; } @@ -1738,8 +1738,8 @@ bool8 FldEff_UseDive(void) { u8 taskId; taskId = CreateTask(Task_Dive, 0xff); - gTasks[taskId].data[15] = gUnknown_0202FF84[0]; - gTasks[taskId].data[14] = gUnknown_0202FF84[1]; + gTasks[taskId].data[15] = gFieldEffectArguments[0]; + gTasks[taskId].data[14] = gFieldEffectArguments[1]; Task_Dive(taskId); return FALSE; } @@ -1759,7 +1759,7 @@ bool8 sub_8087124(struct Task *task) bool8 dive_2_unknown(struct Task *task) { ScriptContext2_Enable(); - gUnknown_0202FF84[0] = task->data[15]; + gFieldEffectArguments[0] = task->data[15]; FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); task->data[0]++; return FALSE; @@ -1820,10 +1820,10 @@ bool8 sub_8087298(struct Task *task, struct MapObject *mapObject, struct Sprite { sprite->pos2.y = 0; task->data[3] = 1; - gUnknown_0202FF84[0] = mapObject->coords2.x; - gUnknown_0202FF84[1] = mapObject->coords2.y; - gUnknown_0202FF84[2] = sprite->subpriority - 1; - gUnknown_0202FF84[3] = sprite->oam.priority; + gFieldEffectArguments[0] = mapObject->coords2.x; + gFieldEffectArguments[1] = mapObject->coords2.y; + gFieldEffectArguments[2] = sprite->subpriority - 1; + gFieldEffectArguments[3] = sprite->oam.priority; FieldEffectStart(FLDEFF_LAVARIDGE_GYM_WARP); PlaySE(SE_W153); task->data[0]++; @@ -1924,10 +1924,10 @@ bool8 sub_80874FC(struct Task *task, struct MapObject *mapObject, struct Sprite { if (sub_807D770()) { - gUnknown_0202FF84[0] = mapObject->coords2.x; - gUnknown_0202FF84[1] = mapObject->coords2.y; - gUnknown_0202FF84[2] = sprite->subpriority - 1; - gUnknown_0202FF84[3] = sprite->oam.priority; + gFieldEffectArguments[0] = mapObject->coords2.x; + gFieldEffectArguments[1] = mapObject->coords2.y; + gFieldEffectArguments[2] = sprite->subpriority - 1; + gFieldEffectArguments[3] = sprite->oam.priority; task->data[1] = FieldEffectStart(FLDEFF_POP_OUT_OF_ASH); task->data[0]++; } @@ -1966,9 +1966,9 @@ extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[36] u8 FldEff_LavaridgeGymWarp(void) { u8 spriteId; - sub_8060470((s16 *)&gUnknown_0202FF84[0], (s16 *)&gUnknown_0202FF84[1], 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[33], gUnknown_0202FF84[0], gUnknown_0202FF84[1], gUnknown_0202FF84[2]); - gSprites[spriteId].oam.priority = gUnknown_0202FF84[3]; + sub_8060470((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[33], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + gSprites[spriteId].oam.priority = gFieldEffectArguments[3]; gSprites[spriteId].coordOffsetEnabled = 1; return spriteId; } @@ -2009,10 +2009,10 @@ bool8 sub_80876F8(struct Task *task, struct MapObject *mapObject, struct Sprite { if (task->data[1] > 3) { - gUnknown_0202FF84[0] = mapObject->coords2.x; - gUnknown_0202FF84[1] = mapObject->coords2.y; - gUnknown_0202FF84[2] = sprite->subpriority - 1; - gUnknown_0202FF84[3] = sprite->oam.priority; + gFieldEffectArguments[0] = mapObject->coords2.x; + gFieldEffectArguments[1] = mapObject->coords2.y; + gFieldEffectArguments[2] = sprite->subpriority - 1; + gFieldEffectArguments[3] = sprite->oam.priority; task->data[1] = FieldEffectStart(FLDEFF_POP_OUT_OF_ASH); task->data[0]++; } else @@ -2064,9 +2064,9 @@ bool8 sub_80877D4(struct Task *task, struct MapObject *mapObject, struct Sprite u8 FldEff_PopOutOfAsh(void) { u8 spriteId; - sub_8060470((s16 *)&gUnknown_0202FF84[0], (s16 *)&gUnknown_0202FF84[1], 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[32], gUnknown_0202FF84[0], gUnknown_0202FF84[1], gUnknown_0202FF84[2]); - gSprites[spriteId].oam.priority = gUnknown_0202FF84[3]; + sub_8060470((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[32], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + gSprites[spriteId].oam.priority = gFieldEffectArguments[3]; gSprites[spriteId].coordOffsetEnabled = 1; return spriteId; } @@ -2392,19 +2392,19 @@ bool8 FldEff_FieldMoveShowMon(void) { taskId = CreateTask(sub_808847C, 0xff); } - gTasks[taskId].data[15] = sub_8088830(gUnknown_0202FF84[0], gUnknown_0202FF84[1], gUnknown_0202FF84[2]); + gTasks[taskId].data[15] = sub_8088830(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); return FALSE; } bool8 FldEff_FieldMoveShowMonInit(void) { struct Pokemon *pokemon; - u32 flag = gUnknown_0202FF84[0] & 0x80000000; - pokemon = &gPlayerParty[(u8)gUnknown_0202FF84[0]]; - gUnknown_0202FF84[0] = GetMonData(pokemon, MON_DATA_SPECIES); - gUnknown_0202FF84[1] = GetMonData(pokemon, MON_DATA_OT_ID); - gUnknown_0202FF84[2] = GetMonData(pokemon, MON_DATA_PERSONALITY); - gUnknown_0202FF84[0] |= flag; + u32 flag = gFieldEffectArguments[0] & 0x80000000; + pokemon = &gPlayerParty[(u8)gFieldEffectArguments[0]]; + gFieldEffectArguments[0] = GetMonData(pokemon, MON_DATA_SPECIES); + gFieldEffectArguments[1] = GetMonData(pokemon, MON_DATA_OT_ID); + gFieldEffectArguments[2] = GetMonData(pokemon, MON_DATA_PERSONALITY); + gFieldEffectArguments[0] |= flag; FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON); FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); return FALSE; @@ -2879,7 +2879,7 @@ u8 FldEff_UseSurf(void) { u8 taskId; taskId = CreateTask(sub_8088954, 0xff); - gTasks[taskId].data[15] = gUnknown_0202FF84[0]; + gTasks[taskId].data[15] = gFieldEffectArguments[0]; sav1_reset_battle_music_maybe(); sub_8053FB0(0x016d); return FALSE; @@ -2919,7 +2919,7 @@ void sub_8088A30(struct Task *task) mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; if (FieldObjectCheckIfSpecialAnimFinishedOrInactive(mapObject)) { - gUnknown_0202FF84[0] = task->data[15] | 0x80000000; + gFieldEffectArguments[0] = task->data[15] | 0x80000000; FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); task->data[0]++; } @@ -2934,9 +2934,9 @@ void sub_8088A78(struct Task *task) sub_805B980(mapObject, GetPlayerAvatarGraphicsIdByStateId(3)); FieldObjectClearAnimIfSpecialAnimFinished(mapObject); FieldObjectSetSpecialAnim(mapObject, sub_80608D0(mapObject->placeholder18)); - gUnknown_0202FF84[0] = task->data[1]; - gUnknown_0202FF84[1] = task->data[2]; - gUnknown_0202FF84[2] = gPlayerAvatar.mapObjectId; + gFieldEffectArguments[0] = task->data[1]; + gFieldEffectArguments[1] = task->data[2]; + gFieldEffectArguments[2] = gPlayerAvatar.mapObjectId; mapObject->mapobj_unk_1A = FieldEffectStart(FLDEFF_SURF_BLOB); task->data[0]++; } @@ -2970,7 +2970,7 @@ u8 FldEff_NPCFlyOut(void) sprite->oam.paletteNum = 0; sprite->oam.priority = 1; sprite->callback = sub_8088BC4; - sprite->data1 = gUnknown_0202FF84[0]; + sprite->data1 = gFieldEffectArguments[0]; PlaySE(SE_W019); return spriteId; } @@ -3009,7 +3009,7 @@ u8 FldEff_UseFly(void) { u8 taskId; taskId = CreateTask(sub_8088C70, 0xfe); - gTasks[taskId].data[1] = gUnknown_0202FF84[0]; + gTasks[taskId].data[1] = gFieldEffectArguments[0]; return 0; } @@ -3040,7 +3040,7 @@ void sub_8088CF8(struct Task *task) if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) { task->data[0]++; - gUnknown_0202FF84[0] = task->data[1]; + gFieldEffectArguments[0] = task->data[1]; FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); } } diff --git a/src/field_fadetransition.c b/src/field_fadetransition.c index e614d899a..89051e794 100644 --- a/src/field_fadetransition.c +++ b/src/field_fadetransition.c @@ -547,7 +547,7 @@ void sub_808115C(u8 taskId) case 0: FreezeMapObjects(); PlayerGetDestCoords(x, y); - PlaySE(sub_8058790(*x, *y - 1)); + PlaySE(GetDoorSoundEffect(*x, *y - 1)); task->data[1] = FieldAnimateDoorOpen(*x, *y - 1); task->data[0] = 1; break; diff --git a/src/field_ground_effect.c b/src/field_ground_effect.c index b9935463b..2a398ba22 100644 --- a/src/field_ground_effect.c +++ b/src/field_ground_effect.c @@ -460,18 +460,18 @@ void GroundEffect_SpawnOnTallGrass(struct MapObject *mapObj, struct Sprite *spri { u8 *ptr; - gUnknown_0202FF84[0] = mapObj->coords2.x; - gUnknown_0202FF84[1] = mapObj->coords2.y; - gUnknown_0202FF84[2] = mapObj->elevation; - gUnknown_0202FF84[3] = 2; - gUnknown_0202FF84[4] = (mapObj->localId << 8) | mapObj->mapNum; - gUnknown_0202FF84[5] = mapObj->mapGroup; + gFieldEffectArguments[0] = mapObj->coords2.x; + gFieldEffectArguments[1] = mapObj->coords2.y; + gFieldEffectArguments[2] = mapObj->elevation; + gFieldEffectArguments[3] = 2; + gFieldEffectArguments[4] = (mapObj->localId << 8) | mapObj->mapNum; + gFieldEffectArguments[5] = mapObj->mapGroup; ptr = (u8 *)&gSaveBlock1; - gUnknown_0202FF84[6] = ((u8)gSaveBlock1.location.mapNum << 8) + gFieldEffectArguments[6] = ((u8)gSaveBlock1.location.mapNum << 8) | (u8)gSaveBlock1.location.mapGroup; - gUnknown_0202FF84[7] = 1; + gFieldEffectArguments[7] = 1; FieldEffectStart(4); } @@ -479,18 +479,18 @@ void sub_8063E94(struct MapObject *mapObj, struct Sprite *sprite) { u8 *ptr; - gUnknown_0202FF84[0] = mapObj->coords2.x; - gUnknown_0202FF84[1] = mapObj->coords2.y; - gUnknown_0202FF84[2] = mapObj->elevation; - gUnknown_0202FF84[3] = 2; - gUnknown_0202FF84[4] = (mapObj->localId << 8) | mapObj->mapNum; - gUnknown_0202FF84[5] = mapObj->mapGroup; + gFieldEffectArguments[0] = mapObj->coords2.x; + gFieldEffectArguments[1] = mapObj->coords2.y; + gFieldEffectArguments[2] = mapObj->elevation; + gFieldEffectArguments[3] = 2; + gFieldEffectArguments[4] = (mapObj->localId << 8) | mapObj->mapNum; + gFieldEffectArguments[5] = mapObj->mapGroup; ptr = (u8 *)&gSaveBlock1; - gUnknown_0202FF84[6] = ((u8)gSaveBlock1.location.mapNum << 8) + gFieldEffectArguments[6] = ((u8)gSaveBlock1.location.mapNum << 8) | (u8)gSaveBlock1.location.mapGroup; - gUnknown_0202FF84[7] = 0; + gFieldEffectArguments[7] = 0; FieldEffectStart(4); } @@ -498,18 +498,18 @@ void sub_8063EE0(struct MapObject *mapObj, struct Sprite *sprite) { u8 *ptr; - gUnknown_0202FF84[0] = mapObj->coords2.x; - gUnknown_0202FF84[1] = mapObj->coords2.y; - gUnknown_0202FF84[2] = mapObj->elevation; - gUnknown_0202FF84[3] = 2; - gUnknown_0202FF84[4] = (mapObj->localId << 8) | mapObj->mapNum; - gUnknown_0202FF84[5] = mapObj->mapGroup; + gFieldEffectArguments[0] = mapObj->coords2.x; + gFieldEffectArguments[1] = mapObj->coords2.y; + gFieldEffectArguments[2] = mapObj->elevation; + gFieldEffectArguments[3] = 2; + gFieldEffectArguments[4] = (mapObj->localId << 8) | mapObj->mapNum; + gFieldEffectArguments[5] = mapObj->mapGroup; ptr = (u8 *)&gSaveBlock1; - gUnknown_0202FF84[6] = ((u8)gSaveBlock1.location.mapNum << 8) + gFieldEffectArguments[6] = ((u8)gSaveBlock1.location.mapNum << 8) | (u8)gSaveBlock1.location.mapGroup; - gUnknown_0202FF84[7] = 1; + gFieldEffectArguments[7] = 1; FieldEffectStart(17); } @@ -517,18 +517,18 @@ void sub_8063F2C(struct MapObject *mapObj, struct Sprite *sprite) { u8 *ptr; - gUnknown_0202FF84[0] = mapObj->coords2.x; - gUnknown_0202FF84[1] = mapObj->coords2.y; - gUnknown_0202FF84[2] = mapObj->elevation; - gUnknown_0202FF84[3] = 2; - gUnknown_0202FF84[4] = (mapObj->localId << 8) | mapObj->mapNum; - gUnknown_0202FF84[5] = mapObj->mapGroup; + gFieldEffectArguments[0] = mapObj->coords2.x; + gFieldEffectArguments[1] = mapObj->coords2.y; + gFieldEffectArguments[2] = mapObj->elevation; + gFieldEffectArguments[3] = 2; + gFieldEffectArguments[4] = (mapObj->localId << 8) | mapObj->mapNum; + gFieldEffectArguments[5] = mapObj->mapGroup; ptr = (u8 *)&gSaveBlock1; - gUnknown_0202FF84[6] = ((u8)gSaveBlock1.location.mapNum << 8) + gFieldEffectArguments[6] = ((u8)gSaveBlock1.location.mapNum << 8) | (u8)gSaveBlock1.location.mapGroup; - gUnknown_0202FF84[7] = 0; + gFieldEffectArguments[7] = 0; FieldEffectStart(17); } @@ -572,11 +572,11 @@ static void DoTracksGroundEffect_Footprints(struct MapObject *mapObj, struct Spr // First half-word is a Field Effect script id. (gFieldEffectScriptPointers) u16 sandFootprints_FieldEffectData[2] = { 0xD, 0x18 }; - gUnknown_0202FF84[0] = mapObj->coords3.x; - gUnknown_0202FF84[1] = mapObj->coords3.y; - gUnknown_0202FF84[2] = 149; - gUnknown_0202FF84[3] = 2; - gUnknown_0202FF84[4] = mapObj->mapobj_unk_18; + gFieldEffectArguments[0] = mapObj->coords3.x; + gFieldEffectArguments[1] = mapObj->coords3.y; + gFieldEffectArguments[2] = 149; + gFieldEffectArguments[3] = 2; + gFieldEffectArguments[4] = mapObj->mapobj_unk_18; FieldEffectStart(sandFootprints_FieldEffectData[a]); } @@ -598,11 +598,11 @@ static void DoTracksGroundEffect_BikeTireTracks( if (mapObj->coords2.x != mapObj->coords3.x || mapObj->coords2.y != mapObj->coords3.y) { - gUnknown_0202FF84[0] = mapObj->coords3.x; - gUnknown_0202FF84[1] = mapObj->coords3.y; - gUnknown_0202FF84[2] = 149; - gUnknown_0202FF84[3] = 2; - gUnknown_0202FF84[4] = + gFieldEffectArguments[0] = mapObj->coords3.x; + gFieldEffectArguments[1] = mapObj->coords3.y; + gFieldEffectArguments[2] = 149; + gFieldEffectArguments[3] = 2; + gFieldEffectArguments[4] = bikeTireTracks_Transitions[mapObj->mapobj_unk_20][mapObj->mapobj_unk_18 - 5]; FieldEffectStart(FLDEFF_BIKE_TIRE_TRACKS); } @@ -627,10 +627,10 @@ void GroundEffect_JumpOnTallGrass(struct MapObject *mapObj, struct Sprite *sprit { u8 spriteId; - gUnknown_0202FF84[0] = mapObj->coords2.x; - gUnknown_0202FF84[1] = mapObj->coords2.y; - gUnknown_0202FF84[2] = mapObj->elevation; - gUnknown_0202FF84[3] = 2; + gFieldEffectArguments[0] = mapObj->coords2.x; + gFieldEffectArguments[1] = mapObj->coords2.y; + gFieldEffectArguments[2] = mapObj->elevation; + gFieldEffectArguments[3] = 2; FieldEffectStart(FLDEFF_JUMP_TALL_GRASS); spriteId = sub_8126FF0( @@ -642,37 +642,37 @@ void GroundEffect_JumpOnTallGrass(struct MapObject *mapObj, struct Sprite *sprit void GroundEffect_JumpOnLongGrass(struct MapObject *mapObj, struct Sprite *sprite) { - gUnknown_0202FF84[0] = mapObj->coords2.x; - gUnknown_0202FF84[1] = mapObj->coords2.y; - gUnknown_0202FF84[2] = mapObj->elevation; - gUnknown_0202FF84[3] = 2; + gFieldEffectArguments[0] = mapObj->coords2.x; + gFieldEffectArguments[1] = mapObj->coords2.y; + gFieldEffectArguments[2] = mapObj->elevation; + gFieldEffectArguments[3] = 2; FieldEffectStart(FLDEFF_JUMP_LONG_GRASS); } void GroundEffect_JumpOnShallowWater(struct MapObject *mapObj, struct Sprite *sprite) { - gUnknown_0202FF84[0] = mapObj->coords2.x; - gUnknown_0202FF84[1] = mapObj->coords2.y; - gUnknown_0202FF84[2] = mapObj->elevation; - gUnknown_0202FF84[3] = sprite->oam.priority; + gFieldEffectArguments[0] = mapObj->coords2.x; + gFieldEffectArguments[1] = mapObj->coords2.y; + gFieldEffectArguments[2] = mapObj->elevation; + gFieldEffectArguments[3] = sprite->oam.priority; FieldEffectStart(FLDEFF_JUMP_SMALL_SPLASH); } void GroundEffect_JumpOnWater(struct MapObject *mapObj, struct Sprite *sprite) { - gUnknown_0202FF84[0] = mapObj->coords2.x; - gUnknown_0202FF84[1] = mapObj->coords2.y; - gUnknown_0202FF84[2] = mapObj->elevation; - gUnknown_0202FF84[3] = sprite->oam.priority; + gFieldEffectArguments[0] = mapObj->coords2.x; + gFieldEffectArguments[1] = mapObj->coords2.y; + gFieldEffectArguments[2] = mapObj->elevation; + gFieldEffectArguments[3] = sprite->oam.priority; FieldEffectStart(FLDEFF_JUMP_BIG_SPLASH); } void GroundEffect_JumpLandingDust(struct MapObject *mapObj, struct Sprite *sprite) { - gUnknown_0202FF84[0] = mapObj->coords2.x; - gUnknown_0202FF84[1] = mapObj->coords2.y; - gUnknown_0202FF84[2] = mapObj->elevation; - gUnknown_0202FF84[3] = sprite->oam.priority; + gFieldEffectArguments[0] = mapObj->coords2.x; + gFieldEffectArguments[1] = mapObj->coords2.y; + gFieldEffectArguments[2] = mapObj->elevation; + gFieldEffectArguments[3] = sprite->oam.priority; FieldEffectStart(FLDEFF_DUST); } @@ -688,8 +688,8 @@ void GroundEffect_HotSprings(struct MapObject *mapObj, struct Sprite *sprite) void GroundEffect_Seaweed(struct MapObject *mapObj, struct Sprite *sprite) { - gUnknown_0202FF84[0] = mapObj->coords2.x; - gUnknown_0202FF84[1] = mapObj->coords2.y; + gFieldEffectArguments[0] = mapObj->coords2.x; + gFieldEffectArguments[1] = mapObj->coords2.y; FieldEffectStart(FLDEFF_BUBBLES); } diff --git a/src/field_map_obj.c b/src/field_map_obj.c index f60b1b233..e29e17ae7 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -3895,10 +3895,10 @@ u8 do_berry_tree_growth_sparkle_1(struct MapObject *mapObject, struct Sprite *sp { if (!(sprite->data7 & 4) && sprite->animNum == 4) { - gUnknown_0202FF84[0] = mapObject->coords2.x; - gUnknown_0202FF84[1] = mapObject->coords2.y; - gUnknown_0202FF84[2] = sprite->subpriority - 1; - gUnknown_0202FF84[3] = sprite->oam.priority; + gFieldEffectArguments[0] = mapObject->coords2.x; + gFieldEffectArguments[1] = mapObject->coords2.y; + gFieldEffectArguments[2] = sprite->subpriority - 1; + gFieldEffectArguments[3] = sprite->oam.priority; FieldEffectStart(0x17); sprite->animNum = 0; } @@ -3934,10 +3934,10 @@ u8 do_berry_tree_growth_sparkle_2(struct MapObject *mapObject, struct Sprite *sp sprite->data1 = 3; sprite->data2 = 0; sprite->data7 |= 2; - gUnknown_0202FF84[0] = mapObject->coords2.x; - gUnknown_0202FF84[1] = mapObject->coords2.y; - gUnknown_0202FF84[2] = sprite->subpriority - 1; - gUnknown_0202FF84[3] = sprite->oam.priority; + gFieldEffectArguments[0] = mapObject->coords2.x; + gFieldEffectArguments[1] = mapObject->coords2.y; + gFieldEffectArguments[2] = sprite->subpriority - 1; + gFieldEffectArguments[3] = sprite->oam.priority; FieldEffectStart(0x17); return 1; } @@ -5086,7 +5086,7 @@ void FieldObjectCB_TreeDisguise(struct Sprite *sprite) mapObject = &gMapObjects[sprite->data0]; if (mapObject->mapobj_unk_21 == 0 || (mapObject->mapobj_unk_21 == 1 && sprite->data7 == 0)) { - FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gUnknown_0202FF84[0], (u8 *)&gUnknown_0202FF84[1], (u8 *)&gUnknown_0202FF84[2]); + FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]); mapObject->mapobj_unk_1A = FieldEffectStart(0x1c); mapObject->mapobj_unk_21 = 1; sprite->data7 ++; @@ -5106,7 +5106,7 @@ void FieldObjectCB_MountainDisguise(struct Sprite *sprite) mapObject = &gMapObjects[sprite->data0]; if (mapObject->mapobj_unk_21 == 0 || (mapObject->mapobj_unk_21 == 1 && sprite->data7 == 0)) { - FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gUnknown_0202FF84[0], (u8 *)&gUnknown_0202FF84[1], (u8 *)&gUnknown_0202FF84[2]); + FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]); mapObject->mapobj_unk_1A = FieldEffectStart(0x1d); mapObject->mapobj_unk_21 = 1; sprite->data7 ++; @@ -7490,7 +7490,7 @@ bool8 sub_8062644(struct MapObject *mapObject, struct Sprite *sprite) bool8 do_exclamation_mark_bubble_1(struct MapObject *mapObject, struct Sprite *sprite) { - FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gUnknown_0202FF84[0], (u8 *)&gUnknown_0202FF84[1], (u8 *)&gUnknown_0202FF84[2]); + FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]); FieldEffectStart(0x0); sprite->data2 = 1; return TRUE; @@ -7498,7 +7498,7 @@ bool8 do_exclamation_mark_bubble_1(struct MapObject *mapObject, struct Sprite *s bool8 do_exclamation_mark_bubble_2(struct MapObject *mapObject, struct Sprite *sprite) { - FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gUnknown_0202FF84[0], (u8 *)&gUnknown_0202FF84[1], (u8 *)&gUnknown_0202FF84[2]); + FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]); FieldEffectStart(0x21); sprite->data2 = 1; return TRUE; @@ -7506,7 +7506,7 @@ bool8 do_exclamation_mark_bubble_2(struct MapObject *mapObject, struct Sprite *s bool8 do_heart_bubble(struct MapObject *mapObject, struct Sprite *sprite) { - FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gUnknown_0202FF84[0], (u8 *)&gUnknown_0202FF84[1], (u8 *)&gUnknown_0202FF84[2]); + FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]); FieldEffectStart(0x2e); sprite->data2 = 1; return TRUE; diff --git a/src/field_map_obj_helpers.c b/src/field_map_obj_helpers.c index 87be8e011..b3edd9591 100644 --- a/src/field_map_obj_helpers.c +++ b/src/field_map_obj_helpers.c @@ -294,7 +294,7 @@ void sub_8064990(u8 a1, u8 dir) u32 oe_exec_and_other_stuff(u8 fieldEffectId, struct MapObject *mapObject) { - FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gUnknown_0202FF84[0], (u8 *)&gUnknown_0202FF84[1], (u8 *)&gUnknown_0202FF84[2]); + FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]); return FieldEffectStart(fieldEffectId); } @@ -310,9 +310,9 @@ void DoShadowFieldEffect(struct MapObject *mapObject) void DoRippleFieldEffect(struct MapObject *mapObject, struct Sprite *sprite) { const struct MapObjectGraphicsInfo *gfxInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId); - gUnknown_0202FF84[0] = sprite->pos1.x; - gUnknown_0202FF84[1] = sprite->pos1.y + (gfxInfo->height >> 1) - 2; - gUnknown_0202FF84[2] = 151; - gUnknown_0202FF84[3] = 3; + gFieldEffectArguments[0] = sprite->pos1.x; + gFieldEffectArguments[1] = sprite->pos1.y + (gfxInfo->height >> 1) - 2; + gFieldEffectArguments[2] = 151; + gFieldEffectArguments[3] = 3; FieldEffectStart(5); } diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index 2a7b2f3e0..e7636e57c 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -666,9 +666,9 @@ void PlayerAvatarTransition_Surfing(struct MapObject *a) sub_805B980(a, GetPlayerAvatarGraphicsIdByStateId(3)); FieldObjectTurn(a, a->placeholder18); SetPlayerAvatarStateMask(8); - gUnknown_0202FF84[0] = a->coords2.x; - gUnknown_0202FF84[1] = a->coords2.y; - gUnknown_0202FF84[2] = gPlayerAvatar.mapObjectId; + gFieldEffectArguments[0] = a->coords2.x; + gFieldEffectArguments[1] = a->coords2.y; + gFieldEffectArguments[2] = gPlayerAvatar.mapObjectId; unk = FieldEffectStart(8); a->mapobj_unk_1A = unk; sub_8127ED0(unk, 1); @@ -1226,10 +1226,10 @@ u8 sub_8059EA4(struct Task *task, struct MapObject *b, struct MapObject *c) FieldObjectClearAnimIfSpecialAnimFinished(c); FieldObjectSetSpecialAnim(b, GetStepInPlaceDelay16AnimId(task->data[2])); FieldObjectSetSpecialAnim(c, GetSimpleGoAnimId(task->data[2])); - gUnknown_0202FF84[0] = c->coords2.x; - gUnknown_0202FF84[1] = c->coords2.y; - gUnknown_0202FF84[2] = c->elevation; - gUnknown_0202FF84[3] = gSprites[c->spriteId].oam.priority; + gFieldEffectArguments[0] = c->coords2.x; + gFieldEffectArguments[1] = c->coords2.y; + gFieldEffectArguments[2] = c->elevation; + gFieldEffectArguments[3] = gSprites[c->spriteId].oam.priority; FieldEffectStart(10); PlaySE(SE_W070); task->data[0]++; diff --git a/src/fldeff_cut.c b/src/fldeff_cut.c index b394d1e4c..2691f1a75 100644 --- a/src/fldeff_cut.c +++ b/src/fldeff_cut.c @@ -71,7 +71,7 @@ bool8 SetUpFieldMove_Cut(void) void sub_80A25E8(void) { FieldEffectStart(1); - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + gFieldEffectArguments[0] = gLastFieldPokeMenuOpened; } bool8 FldEff_UseCutOnGrass(void) @@ -86,7 +86,7 @@ bool8 FldEff_UseCutOnGrass(void) void sub_80A2634(void) { - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + gFieldEffectArguments[0] = gLastFieldPokeMenuOpened; ScriptContext1_SetupScript(&UseCutScript); } diff --git a/src/fldeff_flash.c b/src/fldeff_flash.c index 6c2633567..a63cbbbf1 100644 --- a/src/fldeff_flash.c +++ b/src/fldeff_flash.c @@ -62,7 +62,7 @@ bool8 SetUpFieldMove_Flash(void) void sub_810CBFC(void) { u8 taskId = oei_task_add(); - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + gFieldEffectArguments[0] = gLastFieldPokeMenuOpened; gTasks[taskId].data[8] = (uintptr_t)sub_810CC34 >> 16; gTasks[taskId].data[9] = (uintptr_t)sub_810CC34; } diff --git a/src/fldeff_strength.c b/src/fldeff_strength.c index 81f4f63c6..c641945d6 100644 --- a/src/fldeff_strength.c +++ b/src/fldeff_strength.c @@ -42,13 +42,13 @@ bool8 SetUpFieldMove_Strength(void) static void sub_811AA18(void) { - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + gFieldEffectArguments[0] = gLastFieldPokeMenuOpened; ScriptContext1_SetupScript(UseStrengthScript); } static void sub_811AA38(void) { - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + gFieldEffectArguments[0] = gLastFieldPokeMenuOpened; FieldEffectStart(40); } @@ -58,7 +58,7 @@ bool8 FldEff_UseStrength(void) gTasks[taskId].data[8] = (u32)sub_811AA9C >> 16; gTasks[taskId].data[9] = (u32)sub_811AA9C; - GetMonNickname(&gPlayerParty[gUnknown_0202FF84[0]], gStringVar1); + GetMonNickname(&gPlayerParty[gFieldEffectArguments[0]], gStringVar1); return FALSE; } diff --git a/src/fldeff_sweetscent.c b/src/fldeff_sweetscent.c index 4c3e6bf4a..661092ea0 100644 --- a/src/fldeff_sweetscent.c +++ b/src/fldeff_sweetscent.c @@ -31,7 +31,7 @@ bool8 SetUpFieldMove_SweetScent(void) static void sub_812BFD4(void) { FieldEffectStart(51); - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + gFieldEffectArguments[0] = gLastFieldPokeMenuOpened; } bool8 FldEff_SweetScent() diff --git a/src/fldeff_teleport.c b/src/fldeff_teleport.c index 74e68df06..10fdcce6e 100644 --- a/src/fldeff_teleport.c +++ b/src/fldeff_teleport.c @@ -27,7 +27,7 @@ void hm_teleport_run_dp02scr(void) { new_game(); FieldEffectStart(63); - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + gFieldEffectArguments[0] = gLastFieldPokeMenuOpened; } bool8 FldEff_UseTeleport(void) diff --git a/src/pokemon_menu.c b/src/pokemon_menu.c index 821101569..0fc79f711 100644 --- a/src/pokemon_menu.c +++ b/src/pokemon_menu.c @@ -786,7 +786,7 @@ static void sub_808ABA8(u8 taskID) { if (sub_807D770() == TRUE) { - gUnknown_0202FF84[0] = GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_SPECIES); + gFieldEffectArguments[0] = GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_SPECIES); gUnknown_03005CE4(); DestroyTask(taskID); } @@ -803,7 +803,7 @@ static void sub_808ABF4(u8 taskID) static void sub_808AC2C(void) { - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + gFieldEffectArguments[0] = gLastFieldPokeMenuOpened; FieldEffectStart(FLDEFF_USE_SURF); } @@ -821,7 +821,7 @@ static bool8 SetUpFieldMove_Surf(void) static void sub_808AC8C(void) { - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + gFieldEffectArguments[0] = gLastFieldPokeMenuOpened; FieldEffectStart(FLDEFF_USE_FLY); } @@ -872,14 +872,14 @@ u16 unref_sub_808AD88(void) static void sub_808ADAC(void) { - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + gFieldEffectArguments[0] = gLastFieldPokeMenuOpened; FieldEffectStart(FLDEFF_USE_DIVE); } static bool8 SetUpFieldMove_Dive(void) { - gUnknown_0202FF84[1] = sub_8068F18(); - if (gUnknown_0202FF84[1]) + gFieldEffectArguments[1] = sub_8068F18(); + if (gFieldEffectArguments[1]) { gFieldCallback = sub_808AB90; gUnknown_03005CE4 = sub_808ADAC; @@ -891,7 +891,7 @@ static bool8 SetUpFieldMove_Dive(void) static void sub_808AE08(void) { - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + gFieldEffectArguments[0] = gLastFieldPokeMenuOpened; FieldEffectStart(FLDEFF_USE_WATERFALL); } diff --git a/src/rom4.c b/src/rom4.c index f9006efba..fd0cdbcde 100644 --- a/src/rom4.c +++ b/src/rom4.c @@ -1046,7 +1046,7 @@ void c1_overworld(void) c1_overworld_normal(gMain.newKeys, gMain.heldKeys); } -void c2_overworld_basic(void) +void OverworldBasic(void) { ScriptContext2_RunScript(); RunTasks(); @@ -1058,9 +1058,9 @@ void c2_overworld_basic(void) sub_8072EDC(); } -void sub_8054398(void) +void CB2_OverworldBasic(void) { - c2_overworld_basic(); + OverworldBasic(); } void c2_overworld(void) @@ -1068,7 +1068,7 @@ void c2_overworld(void) int fading = (gPaletteFade.active != 0); if (fading) SetVBlankCallback(NULL); - c2_overworld_basic(); + OverworldBasic(); if (fading) SetFieldVBlankCallback(); } diff --git a/src/rom6.c b/src/rom6.c index ff032b6c2..702e48c69 100644 --- a/src/rom6.c +++ b/src/rom6.c @@ -91,17 +91,17 @@ static void sub_810B428(u8 taskId) { if (!FieldEffectActiveListContains(6)) { - gUnknown_0202FF84[1] = player_get_direction_lower_nybble(); - if (gUnknown_0202FF84[1] == 1) - gUnknown_0202FF84[2] = 0; - if (gUnknown_0202FF84[1] == 2) - gUnknown_0202FF84[2] = 1; - if (gUnknown_0202FF84[1] == 3) - gUnknown_0202FF84[2] = 2; - if (gUnknown_0202FF84[1] == 4) - gUnknown_0202FF84[2] = 3; + gFieldEffectArguments[1] = player_get_direction_lower_nybble(); + if (gFieldEffectArguments[1] == 1) + gFieldEffectArguments[2] = 0; + if (gFieldEffectArguments[1] == 2) + gFieldEffectArguments[2] = 1; + if (gFieldEffectArguments[1] == 3) + gFieldEffectArguments[2] = 2; + if (gFieldEffectArguments[1] == 4) + gFieldEffectArguments[2] = 3; sub_805B980(&gMapObjects[gPlayerAvatar.mapObjectId], GetPlayerAvatarGraphicsIdByCurrentState()); - StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], gUnknown_0202FF84[2]); + StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], gFieldEffectArguments[2]); FieldEffectActiveListRemove(6); gTasks[taskId].func = sub_810B4CC; } @@ -132,7 +132,7 @@ bool8 SetUpFieldMove_RockSmash(void) static void sub_810B53C(void) { - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + gFieldEffectArguments[0] = gLastFieldPokeMenuOpened; ScriptContext1_SetupScript(UseRockSmashScript); } @@ -171,7 +171,7 @@ static void sub_810B5D8(void) { sub_8053014(); FieldEffectStart(0x26); - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + gFieldEffectArguments[0] = gLastFieldPokeMenuOpened; } int FldEff_UseDig(void) diff --git a/src/scrcmd.c b/src/scrcmd.c index 3cf4b9533..64ec485ce 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -50,11 +50,11 @@ typedef void (*NativeFunc)(void); extern u32 gUnknown_0202E8AC; static EWRAM_DATA u32 gUnknown_0202E8B0 = 0; -static EWRAM_DATA u16 gUnknown_0202E8B4 = 0; -static EWRAM_DATA u16 gUnknown_0202E8B6 = 0; -static EWRAM_DATA u16 gUnknown_0202E8B8 = 0; -static EWRAM_DATA u16 gUnknown_0202E8BA = 0; -static EWRAM_DATA u16 gUnknown_0202E8BC = 0; +static EWRAM_DATA u16 sPauseCounter = 0; +static EWRAM_DATA u16 sMovingNpcId = 0; +static EWRAM_DATA u16 sMovingNpcMapBank = 0; +static EWRAM_DATA u16 sMovingNpcMapId = 0; +static EWRAM_DATA u16 sFieldEffectScriptId = 0; extern u16 gSpecialVar_0x8000; extern u16 gSpecialVar_0x8001; @@ -598,9 +598,9 @@ bool8 ScrCmd_fadescreendelay(struct ScriptContext *ctx) bool8 s28_pause_asm() { - gUnknown_0202E8B4--; + sPauseCounter--; - if (gUnknown_0202E8B4 == 0) + if (sPauseCounter == 0) return TRUE; else return FALSE; @@ -608,7 +608,7 @@ bool8 s28_pause_asm() bool8 ScrCmd_pause(struct ScriptContext *ctx) { - gUnknown_0202E8B4 = ScriptReadHalfword(ctx); + sPauseCounter = ScriptReadHalfword(ctx); SetupNativeScript(ctx, s28_pause_asm); return TRUE; } @@ -900,7 +900,7 @@ bool8 ScrCmd_move(struct ScriptContext *ctx) u16 v1 = VarGet(ScriptReadHalfword(ctx)); void *v2 = (void *)ScriptReadWord(ctx); exec_movement(v1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, v2); - gUnknown_0202E8B6 = v1; + sMovingNpcId = v1; return FALSE; } @@ -911,22 +911,22 @@ bool8 ScrCmd_movecoords(struct ScriptContext *ctx) u8 v3 = ScriptReadByte(ctx); u8 v4 = ScriptReadByte(ctx); exec_movement(v1, v4, v3, v2); - gUnknown_0202E8B6 = v1; + sMovingNpcId = v1; return FALSE; } bool8 s51a_0806B288(void) { - return sub_80A212C(gUnknown_0202E8B6, gUnknown_0202E8BA, gUnknown_0202E8B8); + return sub_80A212C(sMovingNpcId, sMovingNpcMapId, sMovingNpcMapBank); } bool8 ScrCmd_waitmove(struct ScriptContext *ctx) { u16 v1 = VarGet(ScriptReadHalfword(ctx)); if (v1) - gUnknown_0202E8B6 = v1; - gUnknown_0202E8B8 = gSaveBlock1.location.mapGroup; - gUnknown_0202E8BA = gSaveBlock1.location.mapNum; + sMovingNpcId = v1; + sMovingNpcMapBank = gSaveBlock1.location.mapGroup; + sMovingNpcMapId = gSaveBlock1.location.mapNum; SetupNativeScript(ctx, s51a_0806B288); return TRUE; } @@ -934,16 +934,15 @@ bool8 ScrCmd_waitmove(struct ScriptContext *ctx) bool8 ScrCmd_waitmovexy(struct ScriptContext *ctx) { u16 v1 = VarGet(ScriptReadHalfword(ctx)); - u8 v2; - u8 v3; - - if (v1) - gUnknown_0202E8B6 = v1; - - v2 = ScriptReadByte(ctx); - v3 = ScriptReadByte(ctx); - gUnknown_0202E8B8 = v2; - gUnknown_0202E8BA = v3; + u8 mapBank; + u8 mapId; + + if (v1 != 0) + sMovingNpcId = v1; + mapBank = ScriptReadByte(ctx); + mapId = ScriptReadByte(ctx); + sMovingNpcMapBank = mapBank; + sMovingNpcMapId = mapId; SetupNativeScript(ctx, s51a_0806B288); return TRUE; } @@ -1448,29 +1447,29 @@ bool8 ScrCmd_vbuffer(struct ScriptContext *ctx) bool8 ScrCmd_givepokemon(struct ScriptContext *ctx) { - u16 v3 = VarGet(ScriptReadHalfword(ctx)); - u8 v5 = ScriptReadByte(ctx); - u16 v7 = VarGet(ScriptReadHalfword(ctx)); - u32 v8 = ScriptReadWord(ctx); - u32 v9 = ScriptReadWord(ctx); - u8 v10 = ScriptReadByte(ctx); - gScriptResult = ScriptGiveMon(v3, v5, v7, v8, v9, v10); + u16 species = VarGet(ScriptReadHalfword(ctx)); + u8 level = ScriptReadByte(ctx); + u16 item = VarGet(ScriptReadHalfword(ctx)); + u32 unkParam1 = ScriptReadWord(ctx); + u32 unkParam2 = ScriptReadWord(ctx); + u8 unkParam3 = ScriptReadByte(ctx); + gScriptResult = ScriptGiveMon(species, level, item, unkParam1, unkParam2, unkParam3); return FALSE; } bool8 ScrCmd_giveegg(struct ScriptContext *ctx) { - u16 value = VarGet(ScriptReadHalfword(ctx)); - gScriptResult = ScriptGiveEgg(value); + u16 species = VarGet(ScriptReadHalfword(ctx)); + gScriptResult = ScriptGiveEgg(species); return FALSE; } bool8 ScrCmd_setpokemove(struct ScriptContext *ctx) { - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - u16 v4 = ScriptReadHalfword(ctx); - ScriptSetMonMoveSlot(v2, v4, v3); + u8 partyIndex = ScriptReadByte(ctx); + u8 slot = ScriptReadByte(ctx); + u16 move = ScriptReadHalfword(ctx); + ScriptSetMonMoveSlot(partyIndex, move, slot); return FALSE; } @@ -1588,13 +1587,13 @@ bool8 ScrCmd_reptrainerbattle(struct ScriptContext *ctx) bool8 ScrCmd_endtrainerbattle(struct ScriptContext *ctx) { - ctx->scriptPtr = sub_80826E8(); + ctx->scriptPtr = BattleSetup_GetScriptAddrAfterBattle(); return FALSE; } bool8 ScrCmd_endtrainerbattle2(struct ScriptContext *ctx) { - ctx->scriptPtr = sub_8082700(); + ctx->scriptPtr = BattleSetup_GetTrainerPostBattleScript(); return FALSE; } @@ -1621,10 +1620,10 @@ bool8 ScrCmd_settrainerflag(struct ScriptContext *ctx) bool8 ScrCmd_setwildbattle(struct ScriptContext *ctx) { - u16 v2 = ScriptReadHalfword(ctx); - u8 v4 = ScriptReadByte(ctx); - u16 v5 = ScriptReadHalfword(ctx); - ScriptWildBattle(v2, v4, v5); + u16 species = ScriptReadHalfword(ctx); + u8 level = ScriptReadByte(ctx); + u16 item = ScriptReadHalfword(ctx); + ScriptWildBattle(species, level, item); return FALSE; } @@ -1669,13 +1668,13 @@ bool8 ScrCmd_pokecasino(struct ScriptContext *ctx) bool8 ScrCmd_event_8a(struct ScriptContext *ctx) { - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - u8 v4 = ScriptReadByte(ctx); - if (!v3) - PlantBerryTree(v2, 0, v4, FALSE); + u8 treeId = ScriptReadByte(ctx); + u8 berry = ScriptReadByte(ctx); + u8 growthStage = ScriptReadByte(ctx); + if (berry == 0) + PlantBerryTree(treeId, 0, growthStage, FALSE); else - PlantBerryTree(v2, v3, v4, FALSE); + PlantBerryTree(treeId, berry, growthStage, FALSE); return FALSE; } @@ -1717,21 +1716,21 @@ bool8 ScrCmd_contestlinktransfer(struct ScriptContext *ctx) bool8 ScrCmd_doanimation(struct ScriptContext *ctx) { u16 effectId = VarGet(ScriptReadHalfword(ctx)); - gUnknown_0202E8BC = effectId; - FieldEffectStart(gUnknown_0202E8BC); + sFieldEffectScriptId = effectId; + FieldEffectStart(sFieldEffectScriptId); return FALSE; } bool8 ScrCmd_setanimation(struct ScriptContext *ctx) { - u8 v2 = ScriptReadByte(ctx); - gUnknown_0202FF84[v2] = (s16)VarGet(ScriptReadHalfword(ctx)); + u8 argNum = ScriptReadByte(ctx); + gFieldEffectArguments[argNum] = (s16)VarGet(ScriptReadHalfword(ctx)); return FALSE; } static bool8 sub_8067B48() { - if (!FieldEffectActiveListContains(gUnknown_0202E8BC)) + if (!FieldEffectActiveListContains(sFieldEffectScriptId)) return TRUE; else return FALSE; @@ -1739,7 +1738,7 @@ static bool8 sub_8067B48() bool8 ScrCmd_checkanimation(struct ScriptContext *ctx) { - gUnknown_0202E8BC = VarGet(ScriptReadHalfword(ctx)); + sFieldEffectScriptId = VarGet(ScriptReadHalfword(ctx)); SetupNativeScript(ctx, sub_8067B48); return TRUE; } @@ -1759,9 +1758,9 @@ bool8 ScrCmd_checkgender(struct ScriptContext *ctx) bool8 ScrCmd_pokecry(struct ScriptContext *ctx) { - u16 v3 = VarGet(ScriptReadHalfword(ctx)); - u16 v5 = VarGet(ScriptReadHalfword(ctx)); - PlayCry5(v3, v5); + u16 species = VarGet(ScriptReadHalfword(ctx)); + u16 mode = VarGet(ScriptReadHalfword(ctx)); + PlayCry5(species, mode); return FALSE; } @@ -1773,16 +1772,16 @@ bool8 ScrCmd_waitpokecry(struct ScriptContext *ctx) bool8 ScrCmd_setmaptile(struct ScriptContext *ctx) { - u16 v3 = VarGet(ScriptReadHalfword(ctx)); - u16 v5 = VarGet(ScriptReadHalfword(ctx)); - u16 v7 = VarGet(ScriptReadHalfword(ctx)); + u16 x = VarGet(ScriptReadHalfword(ctx)); + u16 y = VarGet(ScriptReadHalfword(ctx)); + u16 tileId = VarGet(ScriptReadHalfword(ctx)); u16 v8 = VarGet(ScriptReadHalfword(ctx)); - v3 += 7; - v5 += 7; + x += 7; + y += 7; if (!v8) - MapGridSetMetatileIdAt(v3, v5, v7); + MapGridSetMetatileIdAt(x, y, tileId); else - MapGridSetMetatileIdAt(v3, v5, v7 | 0xC00); + MapGridSetMetatileIdAt(x, y, tileId | 0xC00); return FALSE; } @@ -1792,7 +1791,7 @@ bool8 ScrCmd_setdooropened(struct ScriptContext *ctx) u16 y = VarGet(ScriptReadHalfword(ctx)); x += 7; y += 7; - PlaySE(sub_8058790(x, y)); + PlaySE(GetDoorSoundEffect(x, y)); FieldAnimateDoorOpen(x, y); return FALSE; } diff --git a/src/script_movement.c b/src/script_movement.c index e25b60a3c..c4380e73f 100644 --- a/src/script_movement.c +++ b/src/script_movement.c @@ -13,7 +13,7 @@ static bool8 sub_80A21F4(u8, u8, u8 *); static u8 sub_80A2260(u8, u8); static bool8 sub_80A2370(u8, u8); static void sub_80A23C8(u8, u8, u8, u8 *); -static void sub_80A2408(u8); +static void UnfreezeObjects(u8); static void Task_80A244C(u8); static void sub_80A2490(u8, u8, u8, u8 *); @@ -28,18 +28,18 @@ bool8 exec_movement(u8 a, u8 b, u8 c, u8 *d) return sub_80A21F4(sub_80A21E0(), mapObjId, d); } -bool8 sub_80A212C(u8 a, u8 b, u8 c) +bool8 sub_80A212C(u8 localId, u8 mapNum, u8 mapBank) { u8 mapObjId; u8 r4; u8 r1; - if (TryGetFieldObjectIdByLocalIdAndMap(a, b, c, &mapObjId)) - return 1; + if (TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapBank, &mapObjId)) + return TRUE; r4 = sub_80A21E0(); r1 = sub_80A2260(r4, mapObjId); if (r1 == 16) - return 1; + return TRUE; return sub_80A2370(r4, r1); } @@ -50,7 +50,7 @@ void sub_80A2178(void) taskId = sub_80A21E0(); if (taskId != 0xFF) { - sub_80A2408(taskId); + UnfreezeObjects(taskId); DestroyTask(taskId); } } @@ -173,16 +173,16 @@ static void sub_80A23C8(u8 taskId, u8 b, u8 c, u8 *d) sub_80A22D0(taskId, b, c); } -static void sub_80A2408(u8 a) +static void UnfreezeObjects(u8 taskId) { - u8 *ptr; + u8 *pMapObjId; u8 i; - ptr = (u8 *)&gTasks[a].data[1]; - for (i = 0; i < 16; i++, ptr++) + pMapObjId = (u8 *)&gTasks[taskId].data[1]; + for (i = 0; i < 16; i++, pMapObjId++) { - if (*ptr != 0xFF) - UnfreezeMapObject(&gMapObjects[*ptr]); + if (*pMapObjId != 0xFF) + UnfreezeMapObject(&gMapObjects[*pMapObjId]); } } @@ -199,23 +199,23 @@ static void Task_80A244C(u8 taskId) } } -static void sub_80A2490(u8 taskId, u8 b, u8 c, u8 *d) +static void sub_80A2490(u8 taskId, u8 b, u8 mapObjId, u8 *d) { u8 var; - if (FieldObjectIsSpecialAnimActive(&gMapObjects[c]) - && !FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[c])) + if (FieldObjectIsSpecialAnimActive(&gMapObjects[mapObjId]) + && !FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[mapObjId])) return; var = *d; if (var == 0xFE) { sub_80A2348(taskId, b); - FreezeMapObject(&gMapObjects[c]); + FreezeMapObject(&gMapObjects[mapObjId]); } else { - if (!FieldObjectSetSpecialAnim(&gMapObjects[c], var)) + if (!FieldObjectSetSpecialAnim(&gMapObjects[mapObjId], var)) { d++; npc_obj_offscreen_culling_and_flag_update(b, d); diff --git a/src/script_pokemon_util_80C4BF0.c b/src/script_pokemon_util_80C4BF0.c index cbca07011..6a60a5402 100644 --- a/src/script_pokemon_util_80C4BF0.c +++ b/src/script_pokemon_util_80C4BF0.c @@ -542,41 +542,39 @@ void HealPlayerParty(void) } } -u8 ScriptGiveMon(u16 species, u8 var, u16 item, u32 var3, u32 var4, u8 var5) +u8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unused1, u32 unused2, u8 unused3) { - u16 nationalSpecies; + u16 nationalDexNum; int sentToPc; - u8 array[2]; + u8 heldItem[2]; struct Pokemon mon; - CreateMon(&mon, species, var, 32, 0, 0, 0, 0); - array[0] = item; - array[1] = item >> 8; - SetMonData(&mon, MON_DATA_HELD_ITEM, array); + CreateMon(&mon, species, level, 32, 0, 0, 0, 0); + heldItem[0] = item; + heldItem[1] = item >> 8; + SetMonData(&mon, MON_DATA_HELD_ITEM, heldItem); sentToPc = GiveMonToPlayer(&mon); - nationalSpecies = SpeciesToNationalPokedexNum(species); + nationalDexNum = SpeciesToNationalPokedexNum(species); - // nested if check to fool compiler switch(sentToPc) { - case 0: - case 1: - GetNationalPokedexFlag(nationalSpecies, 2); - GetNationalPokedexFlag(nationalSpecies, 3); - return sentToPc; - default: - return sentToPc; + case 0: + case 1: + GetNationalPokedexFlag(nationalDexNum, 2); + GetNationalPokedexFlag(nationalDexNum, 3); + break; } + return sentToPc; } -u8 ScriptGiveEgg(u16 value) +u8 ScriptGiveEgg(u16 species) { struct Pokemon mon; - u8 data; + u8 isEgg; - sub_8042044(&mon, value, 1); - data = 1; - SetMonData(&mon, MON_DATA_IS_EGG, &data); + sub_8042044(&mon, species, 1); + isEgg = TRUE; + SetMonData(&mon, MON_DATA_IS_EGG, &isEgg); return GiveMonToPlayer(&mon); } diff --git a/src/trainer_see.c b/src/trainer_see.c index feb35c67c..18bf0907e 100644 --- a/src/trainer_see.c +++ b/src/trainer_see.c @@ -201,7 +201,7 @@ s8 sub_8084398(u8 taskId, struct Task *task, struct MapObject *trainerObj) { u8 direction; - FieldObjectGetLocalIdAndMap(trainerObj, (u8 *)&gUnknown_0202FF84[0], (u8 *)&gUnknown_0202FF84[1], (u8 *)&gUnknown_0202FF84[2]); + FieldObjectGetLocalIdAndMap(trainerObj, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]); FieldEffectStart(0); direction = GetFaceDirectionAnimId(trainerObj->mapobj_unk_18); @@ -311,10 +311,10 @@ s8 sub_80845FC(u8 taskId, struct Task *task, struct MapObject *trainerObj) { if (FieldObjectCheckIfSpecialAnimFinishedOrInactive(trainerObj)) { - gUnknown_0202FF84[0] = trainerObj->coords2.x; - gUnknown_0202FF84[1] = trainerObj->coords2.y; - gUnknown_0202FF84[2] = gSprites[trainerObj->spriteId].subpriority - 1; - gUnknown_0202FF84[3] = 2; + gFieldEffectArguments[0] = trainerObj->coords2.x; + gFieldEffectArguments[1] = trainerObj->coords2.y; + gFieldEffectArguments[2] = gSprites[trainerObj->spriteId].subpriority - 1; + gFieldEffectArguments[3] = 2; task->data[4] = FieldEffectStart(49); task->data[0]++; } @@ -421,9 +421,9 @@ void sub_8084894(struct Sprite *sprite, u16 a2, u8 a3) sprite->oam.priority = 1; sprite->coordOffsetEnabled = 1; - sprite->data0 = gUnknown_0202FF84[0]; - sprite->data1 = gUnknown_0202FF84[1]; - sprite->data2 = gUnknown_0202FF84[2]; + sprite->data0 = gFieldEffectArguments[0]; + sprite->data1 = gFieldEffectArguments[1]; + sprite->data2 = gFieldEffectArguments[2]; sprite->data3 = -5; sprite->data7 = a2; -- cgit v1.2.3 From 490c4cd644463ce650df8333c1b1e5aeb3821dd0 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 10 Sep 2017 08:57:16 -0400 Subject: FldEff_Unknown19-22 --- asm/field_effect_helpers.s | 220 --------------------------------------------- src/field_effect_helpers.c | 68 ++++++++++++++ 2 files changed, 68 insertions(+), 220 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 36d9ce69e..9c26a1b33 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,226 +6,6 @@ .text - thumb_func_start FldEff_Unknown19 -FldEff_Unknown19: @ 8127B14 - push {r4,lr} - ldr r4, _08127B74 @ =gFieldEffectSpawnParams - adds r1, r4, 0x4 - adds r0, r4, 0 - movs r2, 0x8 - movs r3, 0x8 - bl sub_8060470 - ldr r0, _08127B78 @ =gFieldEffectObjectTemplatePointers - ldr r0, [r0, 0x44] - movs r2, 0 - ldrsh r1, [r4, r2] - movs r3, 0x4 - ldrsh r2, [r4, r3] - ldrb r3, [r4, 0x8] - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x40 - beq _08127B6C - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - ldr r0, _08127B7C @ =gSprites - adds r2, r0 - adds r3, r2, 0 - adds r3, 0x3E - ldrb r0, [r3] - movs r1, 0x2 - orrs r0, r1 - strb r0, [r3] - movs r0, 0x3 - ldrb r1, [r4, 0xC] - ands r1, r0 - lsls r1, 2 - ldrb r3, [r2, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2, 0x5] - movs r0, 0x13 - strh r0, [r2, 0x2E] -_08127B6C: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08127B74: .4byte gFieldEffectSpawnParams -_08127B78: .4byte gFieldEffectObjectTemplatePointers -_08127B7C: .4byte gSprites - thumb_func_end FldEff_Unknown19 - - thumb_func_start FldEff_Unknown20 -FldEff_Unknown20: @ 8127B80 - push {r4,lr} - ldr r4, _08127BE0 @ =gFieldEffectSpawnParams - adds r1, r4, 0x4 - adds r0, r4, 0 - movs r2, 0x8 - movs r3, 0x8 - bl sub_8060470 - ldr r0, _08127BE4 @ =gFieldEffectObjectTemplatePointers - ldr r0, [r0, 0x48] - movs r2, 0 - ldrsh r1, [r4, r2] - movs r3, 0x4 - ldrsh r2, [r4, r3] - ldrb r3, [r4, 0x8] - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x40 - beq _08127BD8 - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - ldr r0, _08127BE8 @ =gSprites - adds r2, r0 - adds r3, r2, 0 - adds r3, 0x3E - ldrb r0, [r3] - movs r1, 0x2 - orrs r0, r1 - strb r0, [r3] - movs r0, 0x3 - ldrb r1, [r4, 0xC] - ands r1, r0 - lsls r1, 2 - ldrb r3, [r2, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2, 0x5] - movs r0, 0x14 - strh r0, [r2, 0x2E] -_08127BD8: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08127BE0: .4byte gFieldEffectSpawnParams -_08127BE4: .4byte gFieldEffectObjectTemplatePointers -_08127BE8: .4byte gSprites - thumb_func_end FldEff_Unknown20 - - thumb_func_start FldEff_Unknown21 -FldEff_Unknown21: @ 8127BEC - push {r4,lr} - ldr r4, _08127C4C @ =gFieldEffectSpawnParams - adds r1, r4, 0x4 - adds r0, r4, 0 - movs r2, 0x8 - movs r3, 0x8 - bl sub_8060470 - ldr r0, _08127C50 @ =gFieldEffectObjectTemplatePointers - ldr r0, [r0, 0x4C] - movs r2, 0 - ldrsh r1, [r4, r2] - movs r3, 0x4 - ldrsh r2, [r4, r3] - ldrb r3, [r4, 0x8] - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x40 - beq _08127C44 - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - ldr r0, _08127C54 @ =gSprites - adds r2, r0 - adds r3, r2, 0 - adds r3, 0x3E - ldrb r0, [r3] - movs r1, 0x2 - orrs r0, r1 - strb r0, [r3] - movs r0, 0x3 - ldrb r1, [r4, 0xC] - ands r1, r0 - lsls r1, 2 - ldrb r3, [r2, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2, 0x5] - movs r0, 0x15 - strh r0, [r2, 0x2E] -_08127C44: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08127C4C: .4byte gFieldEffectSpawnParams -_08127C50: .4byte gFieldEffectObjectTemplatePointers -_08127C54: .4byte gSprites - thumb_func_end FldEff_Unknown21 - - thumb_func_start FldEff_Unknown22 -FldEff_Unknown22: @ 8127C58 - push {r4,lr} - ldr r4, _08127CB8 @ =gFieldEffectSpawnParams - adds r1, r4, 0x4 - adds r0, r4, 0 - movs r2, 0x8 - movs r3, 0x8 - bl sub_8060470 - ldr r0, _08127CBC @ =gFieldEffectObjectTemplatePointers - ldr r0, [r0, 0x50] - movs r2, 0 - ldrsh r1, [r4, r2] - movs r3, 0x4 - ldrsh r2, [r4, r3] - ldrb r3, [r4, 0x8] - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x40 - beq _08127CB0 - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - ldr r0, _08127CC0 @ =gSprites - adds r2, r0 - adds r3, r2, 0 - adds r3, 0x3E - ldrb r0, [r3] - movs r1, 0x2 - orrs r0, r1 - strb r0, [r3] - movs r0, 0x3 - ldrb r1, [r4, 0xC] - ands r1, r0 - lsls r1, 2 - ldrb r3, [r2, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2, 0x5] - movs r0, 0x16 - strh r0, [r2, 0x2E] -_08127CB0: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08127CB8: .4byte gFieldEffectSpawnParams -_08127CBC: .4byte gFieldEffectObjectTemplatePointers -_08127CC0: .4byte gSprites - thumb_func_end FldEff_Unknown22 - thumb_func_start ash ash: @ 8127CC4 push {r4,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 2113a79d7..510ca556f 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -823,3 +823,71 @@ void sub_8127A7C(struct Sprite *sprite) sub_806487C(sprite, FALSE); } } + +u8 FldEff_Unknown19(void) +{ + u8 spriteId; + struct Sprite *sprite; + + sub_8060470((s16 *)&gFieldEffectSpawnParams[0], (s16 *)&gFieldEffectSpawnParams[1], 8, 8); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[17], gFieldEffectSpawnParams[0], gFieldEffectSpawnParams[1], gFieldEffectSpawnParams[2]); + if (spriteId != MAX_SPRITES) + { + sprite = &gSprites[spriteId]; + sprite->coordOffsetEnabled = TRUE; + sprite->oam.priority = gFieldEffectSpawnParams[3]; + sprite->data0 = FLDEFF_UNKNOWN_19; + } + return 0; +} + +u8 FldEff_Unknown20(void) +{ + u8 spriteId; + struct Sprite *sprite; + + sub_8060470((s16 *)&gFieldEffectSpawnParams[0], (s16 *)&gFieldEffectSpawnParams[1], 8, 8); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[18], gFieldEffectSpawnParams[0], gFieldEffectSpawnParams[1], gFieldEffectSpawnParams[2]); + if (spriteId != MAX_SPRITES) + { + sprite = &gSprites[spriteId]; + sprite->coordOffsetEnabled = TRUE; + sprite->oam.priority = gFieldEffectSpawnParams[3]; + sprite->data0 = FLDEFF_UNKNOWN_20; + } + return 0; +} + +u8 FldEff_Unknown21(void) +{ + u8 spriteId; + struct Sprite *sprite; + + sub_8060470((s16 *)&gFieldEffectSpawnParams[0], (s16 *)&gFieldEffectSpawnParams[1], 8, 8); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[19], gFieldEffectSpawnParams[0], gFieldEffectSpawnParams[1], gFieldEffectSpawnParams[2]); + if (spriteId != MAX_SPRITES) + { + sprite = &gSprites[spriteId]; + sprite->coordOffsetEnabled = TRUE; + sprite->oam.priority = gFieldEffectSpawnParams[3]; + sprite->data0 = FLDEFF_UNKNOWN_21; + } + return 0; +} + +u8 FldEff_Unknown22(void) +{ + u8 spriteId; + struct Sprite *sprite; + + sub_8060470((s16 *)&gFieldEffectSpawnParams[0], (s16 *)&gFieldEffectSpawnParams[1], 8, 8); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[20], gFieldEffectSpawnParams[0], gFieldEffectSpawnParams[1], gFieldEffectSpawnParams[2]); + if (spriteId != MAX_SPRITES) + { + sprite = &gSprites[spriteId]; + sprite->coordOffsetEnabled = TRUE; + sprite->oam.priority = gFieldEffectSpawnParams[3]; + sprite->data0 = FLDEFF_UNKNOWN_22; + } + return 0; +} -- cgit v1.2.3 From 1a53367ffbbb40b0f88e7bbca1444e3df6840aba Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 10 Sep 2017 09:14:02 -0400 Subject: ash. just ash. --- asm/field_effect_helpers.s | 29 ----------------------------- include/field_effect_helpers.h | 2 +- src/field_effect_helpers.c | 11 +++++++++++ 3 files changed, 12 insertions(+), 30 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 9c26a1b33..611faa925 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,35 +6,6 @@ .text - thumb_func_start ash -ash: @ 8127CC4 - push {r4,lr} - lsls r2, 16 - lsrs r2, 16 - ldr r4, _08127CF4 @ =gFieldEffectSpawnParams - lsls r0, 16 - asrs r0, 16 - str r0, [r4] - lsls r1, 16 - asrs r1, 16 - str r1, [r4, 0x4] - movs r0, 0x52 - str r0, [r4, 0x8] - movs r0, 0x1 - str r0, [r4, 0xC] - str r2, [r4, 0x10] - lsls r3, 16 - asrs r3, 16 - str r3, [r4, 0x14] - movs r0, 0x7 - bl FieldEffectStart - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08127CF4: .4byte gFieldEffectSpawnParams - thumb_func_end ash - thumb_func_start FldEff_Ash FldEff_Ash: @ 8127CF8 push {r4,r5,lr} diff --git a/include/field_effect_helpers.h b/include/field_effect_helpers.h index 482f7e87e..7bba24fa6 100644 --- a/include/field_effect_helpers.h +++ b/include/field_effect_helpers.h @@ -28,7 +28,7 @@ void sub_8126BC4(u8 unk_1B, u8 r6, s16 x, s16 y); void sub_8127ED0(u8, u8); void sub_8127F28(u8, u8, s16); u8 sub_8128124(u8 id); -void ash(s16, s16, u16, u8); +void ash(s16, s16, u16, s16); void SetUpReflection(struct MapObject *mapObj, struct Sprite *sprite, u8 a); u32 oe_exec_and_other_stuff(u8 fieldEffectId, struct MapObject *mapObject); u8 sub_8126FF0(u8, u8, u8, s16, s16); diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 510ca556f..493189f83 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -891,3 +891,14 @@ u8 FldEff_Unknown22(void) } return 0; } + +void ash(s16 x, s16 y, u16 c, s16 d) +{ + gFieldEffectSpawnParams[0] = x; + gFieldEffectSpawnParams[1] = y; + gFieldEffectSpawnParams[2] = 0x52; + gFieldEffectSpawnParams[3] = 1; + gFieldEffectSpawnParams[4] = c; + gFieldEffectSpawnParams[5] = d; + FieldEffectStart(FLDEFF_ASH); +} -- cgit v1.2.3 From bfa87b839b8561a61f7d01afba5c52e431a12370 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 10 Sep 2017 09:18:23 -0400 Subject: FldEff_Ash --- asm/field_effect_helpers.s | 71 ---------------------------------------------- src/field_effect_helpers.c | 24 ++++++++++++++++ 2 files changed, 24 insertions(+), 71 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 611faa925..f6b7d6c6e 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,77 +6,6 @@ .text - thumb_func_start FldEff_Ash -FldEff_Ash: @ 8127CF8 - push {r4,r5,lr} - sub sp, 0x4 - ldr r5, _08127D78 @ =gFieldEffectSpawnParams - ldrh r1, [r5] - mov r0, sp - strh r1, [r0] - ldrh r0, [r5, 0x4] - mov r4, sp - adds r4, 0x2 - strh r0, [r4] - mov r0, sp - adds r1, r4, 0 - movs r2, 0x8 - movs r3, 0x8 - bl sub_8060470 - ldr r0, _08127D7C @ =gFieldEffectObjectTemplatePointers - ldr r0, [r0, 0x18] - mov r1, sp - movs r2, 0 - ldrsh r1, [r1, r2] - movs r3, 0 - ldrsh r2, [r4, r3] - ldrb r3, [r5, 0x8] - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x40 - beq _08127D6E - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - ldr r0, _08127D80 @ =gSprites - adds r2, r0 - adds r3, r2, 0 - adds r3, 0x3E - ldrb r0, [r3] - movs r1, 0x2 - orrs r0, r1 - strb r0, [r3] - movs r0, 0x3 - ldrb r1, [r5, 0xC] - ands r1, r0 - lsls r1, 2 - ldrb r3, [r2, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2, 0x5] - ldr r0, [r5] - strh r0, [r2, 0x30] - ldr r0, [r5, 0x4] - strh r0, [r2, 0x32] - ldr r0, [r5, 0x10] - strh r0, [r2, 0x34] - ldr r0, [r5, 0x14] - strh r0, [r2, 0x36] -_08127D6E: - movs r0, 0 - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08127D78: .4byte gFieldEffectSpawnParams -_08127D7C: .4byte gFieldEffectObjectTemplatePointers -_08127D80: .4byte gSprites - thumb_func_end FldEff_Ash - thumb_func_start sub_8127D84 sub_8127D84: @ 8127D84 push {lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 493189f83..3d3658b0f 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -902,3 +902,27 @@ void ash(s16 x, s16 y, u16 c, s16 d) gFieldEffectSpawnParams[5] = d; FieldEffectStart(FLDEFF_ASH); } + +u8 FldEff_Ash(void) +{ + s16 x; + s16 y; + u8 spriteId; + struct Sprite *sprite; + + x = gFieldEffectSpawnParams[0]; + y = gFieldEffectSpawnParams[1]; + sub_8060470(&x, &y, 8, 8); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[6], x, y, gFieldEffectSpawnParams[2]); + if (spriteId != MAX_SPRITES) + { + sprite = &gSprites[spriteId]; + sprite->coordOffsetEnabled = TRUE; + sprite->oam.priority = gFieldEffectSpawnParams[3]; + sprite->data1 = gFieldEffectSpawnParams[0]; + sprite->data2 = gFieldEffectSpawnParams[1]; + sprite->data3 = gFieldEffectSpawnParams[4]; + sprite->data4 = gFieldEffectSpawnParams[5]; + } + return 0; +} -- cgit v1.2.3 From ceea25425899494415d0dbac2bb5c9358db48683 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 10 Sep 2017 09:25:30 -0400 Subject: ash field effect callbacks --- asm/field_effect_helpers.s | 115 --------------------------------------------- src/field_effect_helpers.c | 40 ++++++++++++++-- 2 files changed, 37 insertions(+), 118 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index f6b7d6c6e..db7893537 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,121 +6,6 @@ .text - thumb_func_start sub_8127D84 -sub_8127D84: @ 8127D84 - push {lr} - ldr r2, _08127D9C @ =gUnknown_08401E48 - movs r3, 0x2E - ldrsh r1, [r0, r3] - lsls r1, 2 - adds r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {r0} - bx r0 - .align 2, 0 -_08127D9C: .4byte gUnknown_08401E48 - thumb_func_end sub_8127D84 - - thumb_func_start sub_8127DA0 -sub_8127DA0: @ 8127DA0 - push {lr} - adds r3, r0, 0 - adds r2, r3, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - subs r2, 0x12 - ldrb r0, [r2] - movs r1, 0x40 - orrs r0, r1 - strb r0, [r2] - ldrh r0, [r3, 0x36] - subs r0, 0x1 - strh r0, [r3, 0x36] - lsls r0, 16 - cmp r0, 0 - bne _08127DCA - movs r0, 0x1 - strh r0, [r3, 0x2E] -_08127DCA: - pop {r0} - bx r0 - thumb_func_end sub_8127DA0 - - thumb_func_start sub_8127DD0 -sub_8127DD0: @ 8127DD0 - push {r4,lr} - adds r4, r0, 0 - adds r2, r4, 0 - adds r2, 0x3E - ldrb r1, [r2] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r2] - subs r2, 0x12 - ldrb r1, [r2] - movs r0, 0x41 - negs r0, r0 - ands r0, r1 - strb r0, [r2] - movs r1, 0x30 - ldrsh r0, [r4, r1] - movs r2, 0x32 - ldrsh r1, [r4, r2] - ldrh r2, [r4, 0x34] - bl MapGridSetMetatileIdAt - movs r1, 0x30 - ldrsh r0, [r4, r1] - movs r2, 0x32 - ldrsh r1, [r4, r2] - bl CurrentMapDrawMetatileAt - ldr r2, _08127E28 @ =gMapObjects - ldr r0, _08127E2C @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] - movs r0, 0x2 - strh r0, [r4, 0x2E] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08127E28: .4byte gMapObjects -_08127E2C: .4byte gPlayerAvatar - thumb_func_end sub_8127DD0 - - thumb_func_start sub_8127E30 -sub_8127E30: @ 8127E30 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0 - bl sub_806487C - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _08127E50 - adds r0, r4, 0 - movs r1, 0x7 - bl FieldEffectStop -_08127E50: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8127E30 - thumb_func_start FldEff_SurfBlob FldEff_SurfBlob: @ 8127E58 push {r4,r5,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 3d3658b0f..0e8b6e8d3 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -29,9 +29,9 @@ static void npc_pal_op_A(struct MapObject *, u8); static void npc_pal_op_B(struct MapObject *, u8); static void sub_81275A0(struct Sprite *); static void sub_81275C4(struct Sprite *); -/*static*/ void sub_8127DA0(struct Sprite *); -/*static*/ void sub_8127DD0(struct Sprite *); -/*static*/ void sub_8127E30(struct Sprite *); +static void sub_8127DA0(struct Sprite *); +static void sub_8127DD0(struct Sprite *); +static void sub_8127E30(struct Sprite *); /*static*/ void sub_812882C(struct Sprite *, u8, u8); static void sub_81278D8(struct Sprite *); @@ -926,3 +926,37 @@ u8 FldEff_Ash(void) } return 0; } + +void sub_8127D84(struct Sprite *sprite) +{ + gUnknown_08401E48[sprite->data0](sprite); +} + +static void sub_8127DA0(struct Sprite *sprite) +{ + sprite->invisible = TRUE; + sprite->animPaused = TRUE; + if (--sprite->data4 == 0) + { + sprite->data0 = 1; + } +} + +static void sub_8127DD0(struct Sprite *sprite) +{ + sprite->invisible = FALSE; + sprite->animPaused = FALSE; + MapGridSetMetatileIdAt(sprite->data1, sprite->data2, sprite->data3); + CurrentMapDrawMetatileAt(sprite->data1, sprite->data2); + gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_2 = TRUE; + sprite->data0 = 2; +} + +static void sub_8127E30(struct Sprite *sprite) +{ + sub_806487C(sprite, FALSE); + if (sprite->animEnded) + { + FieldEffectStop(sprite, FLDEFF_ASH); + } +} -- cgit v1.2.3 From ef751c02b70f1f81adc69775ba76efaa2374b92a Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 10 Sep 2017 09:30:36 -0400 Subject: FldEff_SurfBlob --- asm/field_effect_helpers.s | 59 ---------------------------------------------- src/field_effect_helpers.c | 21 +++++++++++++++++ 2 files changed, 21 insertions(+), 59 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index db7893537..b6b033461 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,65 +6,6 @@ .text - thumb_func_start FldEff_SurfBlob -FldEff_SurfBlob: @ 8127E58 - push {r4,r5,lr} - ldr r4, _08127EC0 @ =gFieldEffectSpawnParams - adds r1, r4, 0x4 - adds r0, r4, 0 - movs r2, 0x8 - movs r3, 0x8 - bl sub_8060470 - ldr r0, _08127EC4 @ =gFieldEffectObjectTemplatePointers - ldr r0, [r0, 0x1C] - movs r2, 0 - ldrsh r1, [r4, r2] - movs r3, 0x4 - ldrsh r2, [r4, r3] - movs r3, 0x96 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r0, 24 - adds r5, r0, 0 - cmp r0, 0x40 - beq _08127EB2 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _08127EC8 @ =gSprites - adds r1, r0 - adds r3, r1, 0 - adds r3, 0x3E - ldrb r0, [r3] - movs r2, 0x2 - orrs r0, r2 - strb r0, [r3] - ldrb r2, [r1, 0x5] - movs r0, 0xF - ands r0, r2 - strb r0, [r1, 0x5] - ldr r0, [r4, 0x8] - strh r0, [r1, 0x32] - ldr r0, _08127ECC @ =0x0000ffff - strh r0, [r1, 0x34] - movs r0, 0x1 - negs r0, r0 - strh r0, [r1, 0x3A] - strh r0, [r1, 0x3C] -_08127EB2: - movs r0, 0x8 - bl FieldEffectActiveListRemove - adds r0, r5, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08127EC0: .4byte gFieldEffectSpawnParams -_08127EC4: .4byte gFieldEffectObjectTemplatePointers -_08127EC8: .4byte gSprites -_08127ECC: .4byte 0x0000ffff - thumb_func_end FldEff_SurfBlob - thumb_func_start sub_8127ED0 sub_8127ED0: @ 8127ED0 lsls r0, 24 diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 0e8b6e8d3..29d474fb5 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -960,3 +960,24 @@ static void sub_8127E30(struct Sprite *sprite) FieldEffectStop(sprite, FLDEFF_ASH); } } + +u8 FldEff_SurfBlob(void) +{ + u8 spriteId; + struct Sprite *sprite; + + sub_8060470((s16 *)&gFieldEffectSpawnParams[0], (s16 *)&gFieldEffectSpawnParams[1], 8, 8); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[7], gFieldEffectSpawnParams[0], gFieldEffectSpawnParams[1], 0x96); + if (spriteId !=MAX_SPRITES) + { + sprite = &gSprites[spriteId]; + sprite->coordOffsetEnabled = TRUE; + sprite->oam.paletteNum = 0; + sprite->data2 = gFieldEffectSpawnParams[2]; + sprite->data3 = -1; + sprite->data6 = -1; + sprite->data7 = -1; + } + FieldEffectActiveListRemove(FLDEFF_SURF_BLOB); + return spriteId; +} -- cgit v1.2.3 From ab786df511b47bbe4101b3de3fdb3254da249228 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 10 Sep 2017 09:35:24 -0400 Subject: sub_8127ED0, sub_8127EFC --- asm/field_effect_helpers.s | 50 ---------------------------------------------- src/field_effect_helpers.c | 10 ++++++++++ 2 files changed, 10 insertions(+), 50 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index b6b033461..3a26f5928 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,56 +6,6 @@ .text - thumb_func_start sub_8127ED0 -sub_8127ED0: @ 8127ED0 - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - ldr r3, _08127EF8 @ =gSprites - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r3 - ldrh r0, [r2, 0x2E] - movs r3, 0x10 - negs r3, r3 - ands r3, r0 - movs r0, 0xF0 - lsls r0, 20 - ands r0, r1 - lsrs r0, 24 - orrs r0, r3 - strh r0, [r2, 0x2E] - bx lr - .align 2, 0 -_08127EF8: .4byte gSprites - thumb_func_end sub_8127ED0 - - thumb_func_start sub_8127EFC -sub_8127EFC: @ 8127EFC - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - ldr r3, _08127F24 @ =gSprites - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r3 - ldrh r0, [r2, 0x2E] - movs r3, 0xF1 - negs r3, r3 - ands r3, r0 - movs r0, 0xF0 - lsls r0, 20 - ands r0, r1 - lsrs r0, 20 - orrs r3, r0 - strh r3, [r2, 0x2E] - bx lr - .align 2, 0 -_08127F24: .4byte gSprites - thumb_func_end sub_8127EFC - thumb_func_start sub_8127F28 sub_8127F28: @ 8127F28 push {r4,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 29d474fb5..47676b0aa 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -981,3 +981,13 @@ u8 FldEff_SurfBlob(void) FieldEffectActiveListRemove(FLDEFF_SURF_BLOB); return spriteId; } + +void sub_8127ED0(u8 spriteId, u8 value) +{ + gSprites[spriteId].data0 = (gSprites[spriteId].data0 & ~0x0F) | (value & 0x0F); +} + +void sub_8127EFC(u8 spriteId, u8 value) +{ + gSprites[spriteId].data0 = (gSprites[spriteId].data0 & ~0xF0) | ((value & 0xF) << 4); +} -- cgit v1.2.3 From f93301e62ba6e2a83258eeabbf354e666d613f02 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 10 Sep 2017 09:37:17 -0400 Subject: sub_8127F28 --- asm/field_effect_helpers.s | 29 ----------------------------- src/field_effect_helpers.c | 8 +++++++- 2 files changed, 7 insertions(+), 30 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 3a26f5928..bb3f94f22 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,35 +6,6 @@ .text - thumb_func_start sub_8127F28 -sub_8127F28: @ 8127F28 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - ldr r4, _08127F54 @ =gSprites - lsls r3, r0, 4 - adds r3, r0 - lsls r3, 2 - adds r3, r4 - ldrh r0, [r3, 0x2E] - ldr r4, _08127F58 @ =0xfffff0ff - ands r4, r0 - movs r0, 0xF0 - lsls r0, 20 - ands r0, r1 - lsrs r0, 16 - orrs r4, r0 - strh r4, [r3, 0x2E] - strh r2, [r3, 0x30] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08127F54: .4byte gSprites -_08127F58: .4byte 0xfffff0ff - thumb_func_end sub_8127F28 - thumb_func_start sub_8127F5C sub_8127F5C: @ 8127F5C ldrh r1, [r0, 0x2E] diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 47676b0aa..9cd46745b 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -984,10 +984,16 @@ u8 FldEff_SurfBlob(void) void sub_8127ED0(u8 spriteId, u8 value) { - gSprites[spriteId].data0 = (gSprites[spriteId].data0 & ~0x0F) | (value & 0x0F); + gSprites[spriteId].data0 = (gSprites[spriteId].data0 & ~0xF) | (value & 0xF); } void sub_8127EFC(u8 spriteId, u8 value) { gSprites[spriteId].data0 = (gSprites[spriteId].data0 & ~0xF0) | ((value & 0xF) << 4); } + +void sub_8127F28(u8 spriteId, u8 value, s16 data1) +{ + gSprites[spriteId].data0 = (gSprites[spriteId].data0 & ~0xF00) | ((value & 0xF) << 8); + gSprites[spriteId].data1 = data1; +} -- cgit v1.2.3 From 0c5bf5559328562f42e85cad9621a55923b7b50b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 10 Sep 2017 09:39:15 -0400 Subject: sub_8127F5C, sub_8127F64, sub_8127F70 --- asm/field_effect_helpers.s | 27 --------------------------- src/field_effect_helpers.c | 15 +++++++++++++++ 2 files changed, 15 insertions(+), 27 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index bb3f94f22..709c4b4fc 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,33 +6,6 @@ .text - thumb_func_start sub_8127F5C -sub_8127F5C: @ 8127F5C - ldrh r1, [r0, 0x2E] - movs r0, 0xF - ands r0, r1 - bx lr - thumb_func_end sub_8127F5C - - thumb_func_start sub_8127F64 -sub_8127F64: @ 8127F64 - ldrh r1, [r0, 0x2E] - movs r0, 0xF0 - ands r0, r1 - lsrs r0, 4 - bx lr - thumb_func_end sub_8127F64 - - thumb_func_start sub_8127F70 -sub_8127F70: @ 8127F70 - ldrh r1, [r0, 0x2E] - movs r0, 0xF0 - lsls r0, 4 - ands r0, r1 - lsrs r0, 8 - bx lr - thumb_func_end sub_8127F70 - thumb_func_start sub_8127F7C sub_8127F7C: @ 8127F7C push {r4-r6,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 9cd46745b..4a511fad1 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -997,3 +997,18 @@ void sub_8127F28(u8 spriteId, u8 value, s16 data1) gSprites[spriteId].data0 = (gSprites[spriteId].data0 & ~0xF00) | ((value & 0xF) << 8); gSprites[spriteId].data1 = data1; } + +u8 sub_8127F5C(struct Sprite *sprite) +{ + return sprite->data0 & 0xF; +} + +u8 sub_8127F64(struct Sprite *sprite) +{ + return (sprite->data0 & 0xF0) >> 4; +} + +u8 sub_8127F70(struct Sprite *sprite) +{ + return (sprite->data0 & 0xF00) >> 8; +} -- cgit v1.2.3 From 89023e84d6137fe425c8621f5ba914304f37ee7b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 10 Sep 2017 09:43:25 -0400 Subject: sub_8127F7C --- asm/field_effect_helpers.s | 44 -------------------------------------------- src/field_effect_helpers.c | 22 +++++++++++++++++++--- 2 files changed, 19 insertions(+), 47 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 709c4b4fc..5095eb79c 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,50 +6,6 @@ .text - thumb_func_start sub_8127F7C -sub_8127F7C: @ 8127F7C - push {r4-r6,lr} - adds r6, r0, 0 - movs r1, 0x32 - ldrsh r0, [r6, r1] - lsls r4, r0, 3 - adds r4, r0 - lsls r4, 2 - ldr r0, _08127FCC @ =gMapObjects - adds r4, r0 - ldrb r0, [r4, 0x4] - lsls r5, r0, 4 - adds r5, r0 - lsls r5, 2 - ldr r0, _08127FD0 @ =gSprites - adds r5, r0 - adds r0, r4, 0 - adds r1, r6, 0 - bl sub_8127FD4 - adds r0, r4, 0 - adds r1, r6, 0 - bl sub_812800C - adds r0, r4, 0 - adds r1, r5, 0 - adds r2, r6, 0 - bl sub_81280A0 - ldrb r0, [r5, 0x5] - movs r1, 0xC - ands r1, r0 - ldrb r2, [r6, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r6, 0x5] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08127FCC: .4byte gMapObjects -_08127FD0: .4byte gSprites - thumb_func_end sub_8127F7C - thumb_func_start sub_8127FD4 sub_8127FD4: @ 8127FD4 push {r4,r5,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 4a511fad1..474acf939 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -34,6 +34,9 @@ static void sub_8127DD0(struct Sprite *); static void sub_8127E30(struct Sprite *); /*static*/ void sub_812882C(struct Sprite *, u8, u8); static void sub_81278D8(struct Sprite *); +/*static*/ void sub_8127FD4(struct MapObject *, struct Sprite *); +/*static*/ void sub_812800C(struct MapObject *, struct Sprite *); +/*static*/ void sub_81280A0(struct MapObject *, struct Sprite *, struct Sprite *); // .rodata @@ -998,17 +1001,30 @@ void sub_8127F28(u8 spriteId, u8 value, s16 data1) gSprites[spriteId].data1 = data1; } -u8 sub_8127F5C(struct Sprite *sprite) +/*static*/ u8 sub_8127F5C(struct Sprite *sprite) { return sprite->data0 & 0xF; } -u8 sub_8127F64(struct Sprite *sprite) +/*static*/ u8 sub_8127F64(struct Sprite *sprite) { return (sprite->data0 & 0xF0) >> 4; } -u8 sub_8127F70(struct Sprite *sprite) +/*static*/ u8 sub_8127F70(struct Sprite *sprite) { return (sprite->data0 & 0xF00) >> 8; } + +void sub_8127F7C(struct Sprite *sprite) +{ + struct MapObject *mapObject; + struct Sprite *linkedSprite; + + mapObject = &gMapObjects[sprite->data2]; + linkedSprite = &gSprites[mapObject->spriteId]; + sub_8127FD4(mapObject, sprite); + sub_812800C(mapObject, sprite); + sub_81280A0(mapObject, linkedSprite, sprite); + sprite->oam.priority = linkedSprite->oam.priority; +} -- cgit v1.2.3 From faeef7d168212aeb99e6dc119c639b96f1f9e1c0 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 10 Sep 2017 09:48:46 -0400 Subject: sub_8127FD4 --- asm/field_effect_helpers.s | 30 ------------------------------ src/field_effect_helpers.c | 17 ++++++++++++++--- 2 files changed, 14 insertions(+), 33 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 5095eb79c..f97345c05 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,36 +6,6 @@ .text - thumb_func_start sub_8127FD4 -sub_8127FD4: @ 8127FD4 - push {r4,r5,lr} - sub sp, 0x8 - adds r5, r0, 0 - adds r4, r1, 0 - ldr r1, _08128008 @ =gUnknown_08401E54 - mov r0, sp - movs r2, 0x5 - bl memcpy - adds r0, r4, 0 - bl sub_8127F64 - lsls r0, 24 - cmp r0, 0 - bne _08128000 - ldrb r0, [r5, 0x18] - lsrs r0, 4 - add r0, sp - ldrb r1, [r0] - adds r0, r4, 0 - bl StartSpriteAnimIfDifferent -_08128000: - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08128008: .4byte gUnknown_08401E54 - thumb_func_end sub_8127FD4 - thumb_func_start sub_812800C sub_812800C: @ 812800C push {r4-r7,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 474acf939..b764c9f57 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -34,7 +34,7 @@ static void sub_8127DD0(struct Sprite *); static void sub_8127E30(struct Sprite *); /*static*/ void sub_812882C(struct Sprite *, u8, u8); static void sub_81278D8(struct Sprite *); -/*static*/ void sub_8127FD4(struct MapObject *, struct Sprite *); +static void sub_8127FD4(struct MapObject *, struct Sprite *); /*static*/ void sub_812800C(struct MapObject *, struct Sprite *); /*static*/ void sub_81280A0(struct MapObject *, struct Sprite *, struct Sprite *); @@ -120,7 +120,7 @@ s16 sub_81268D0(struct MapObject *mapObject) static void npc_pal_op(struct MapObject *mapObject, struct Sprite *sprite) { u8 whichElement; - u16 unk_8041e2c[3]; + u16 unk_8041e2c[ARRAY_COUNT(gUnknown_08401E2C)]; memcpy(unk_8041e2c, gUnknown_08401E2C, sizeof gUnknown_08401E2C); sprite->data2 = 0; @@ -1006,7 +1006,7 @@ void sub_8127F28(u8 spriteId, u8 value, s16 data1) return sprite->data0 & 0xF; } -/*static*/ u8 sub_8127F64(struct Sprite *sprite) +static u8 sub_8127F64(struct Sprite *sprite) { return (sprite->data0 & 0xF0) >> 4; } @@ -1028,3 +1028,14 @@ void sub_8127F7C(struct Sprite *sprite) sub_81280A0(mapObject, linkedSprite, sprite); sprite->oam.priority = linkedSprite->oam.priority; } + +static void sub_8127FD4(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 unk_8041E54[ARRAY_COUNT(gUnknown_08401E54)]; + + memcpy(unk_8041E54, gUnknown_08401E54, sizeof gUnknown_08401E54); + if (sub_8127F64(sprite) == 0) + { + StartSpriteAnimIfDifferent(sprite, unk_8041E54[mapObject->placeholder18]); + } +} -- cgit v1.2.3 From a7ca32afb7614e73e9d50cec39c3140451ed9788 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 10 Sep 2017 10:12:16 -0400 Subject: sub_812800C --- asm/field_effect_helpers.s | 80 --------------------------------- src/field_effect_helpers.c | 107 ++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 106 insertions(+), 81 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index f97345c05..e9dcd9d89 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,86 +6,6 @@ .text - thumb_func_start sub_812800C -sub_812800C: @ 812800C - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - adds r4, r1, 0 - ldrh r2, [r0, 0x10] - mov r1, sp - strh r2, [r1] - ldrh r1, [r0, 0x12] - mov r0, sp - adds r0, 0x2 - strh r1, [r0] - movs r2, 0x26 - ldrsh r3, [r4, r2] - mov r8, r0 - cmp r3, 0 - bne _08128094 - mov r0, sp - movs r5, 0 - ldrsh r2, [r0, r5] - movs r5, 0x3A - ldrsh r0, [r4, r5] - cmp r2, r0 - bne _08128048 - lsls r0, r1, 16 - asrs r0, 16 - movs r5, 0x3C - ldrsh r1, [r4, r5] - cmp r0, r1 - beq _08128094 -_08128048: - strh r3, [r4, 0x38] - strh r2, [r4, 0x3A] - mov r1, r8 - movs r2, 0 - ldrsh r0, [r1, r2] - strh r0, [r4, 0x3C] - movs r5, 0x1 - mov r7, r8 - mov r6, sp -_0812805A: - adds r0, r5, 0 - mov r1, sp - adds r2, r7, 0 - bl MoveCoords - movs r1, 0 - ldrsh r0, [r6, r1] - movs r2, 0 - ldrsh r1, [r7, r2] - bl MapGridGetZCoordAt - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - bne _08128080 - ldrh r0, [r4, 0x38] - adds r0, 0x1 - strh r0, [r4, 0x38] - b _08128094 -_08128080: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - ldrh r0, [r4, 0x3A] - strh r0, [r6] - ldrh r0, [r4, 0x3C] - mov r1, r8 - strh r0, [r1] - cmp r5, 0x4 - bls _0812805A -_08128094: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_812800C - thumb_func_start sub_81280A0 sub_81280A0: @ 81280A0 push {r4,r5,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index b764c9f57..3d53db9fd 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -35,7 +35,7 @@ static void sub_8127E30(struct Sprite *); /*static*/ void sub_812882C(struct Sprite *, u8, u8); static void sub_81278D8(struct Sprite *); static void sub_8127FD4(struct MapObject *, struct Sprite *); -/*static*/ void sub_812800C(struct MapObject *, struct Sprite *); +static void sub_812800C(struct MapObject *, struct Sprite *); /*static*/ void sub_81280A0(struct MapObject *, struct Sprite *, struct Sprite *); // .rodata @@ -1039,3 +1039,108 @@ static void sub_8127FD4(struct MapObject *mapObject, struct Sprite *sprite) StartSpriteAnimIfDifferent(sprite, unk_8041E54[mapObject->placeholder18]); } } + +#ifdef NONMATCHING +static void sub_812800C(struct MapObject *mapObject, struct Sprite *sprite) +{ + s16 x; + s16 y; + u8 i; + + x = mapObject->coords2.x; + y = mapObject->coords2.y; + if (sprite->pos2.y == 0 && (x != sprite->data6 || y != sprite->data7)) + { + sprite->data5 = sprite->pos2.y; + for (sprite->data6 = x, sprite->data7 = y, i = DIR_SOUTH; i <= DIR_EAST; i ++, x = sprite->data6, y = sprite->data7) + { + MoveCoords(i, &x, &y); + if (MapGridGetZCoordAt(x, y) == 3) + { + sprite->data5 ++; + break; + } + } + } +} +#else +__attribute__((naked)) static void sub_812800C(struct MapObject *mapObject, struct Sprite *sprite) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r8\n" + "\tpush {r7}\n" + "\tsub sp, 0x4\n" + "\tadds r4, r1, 0\n" + "\tldrh r2, [r0, 0x10]\n" + "\tmov r1, sp\n" + "\tstrh r2, [r1]\n" + "\tldrh r1, [r0, 0x12]\n" + "\tmov r0, sp\n" + "\tadds r0, 0x2\n" + "\tstrh r1, [r0]\n" + "\tmovs r2, 0x26\n" + "\tldrsh r3, [r4, r2]\n" + "\tmov r8, r0\n" + "\tcmp r3, 0\n" + "\tbne _08128094\n" + "\tmov r0, sp\n" + "\tmovs r5, 0\n" + "\tldrsh r2, [r0, r5]\n" + "\tmovs r5, 0x3A\n" + "\tldrsh r0, [r4, r5]\n" + "\tcmp r2, r0\n" + "\tbne _08128048\n" + "\tlsls r0, r1, 16\n" + "\tasrs r0, 16\n" + "\tmovs r5, 0x3C\n" + "\tldrsh r1, [r4, r5]\n" + "\tcmp r0, r1\n" + "\tbeq _08128094\n" + "_08128048:\n" + "\tstrh r3, [r4, 0x38]\n" + "\tstrh r2, [r4, 0x3A]\n" + "\tmov r1, r8\n" + "\tmovs r2, 0\n" + "\tldrsh r0, [r1, r2]\n" + "\tstrh r0, [r4, 0x3C]\n" + "\tmovs r5, 0x1\n" + "\tmov r7, r8\n" + "\tmov r6, sp\n" + "_0812805A:\n" + "\tadds r0, r5, 0\n" + "\tmov r1, sp\n" + "\tadds r2, r7, 0\n" + "\tbl MoveCoords\n" + "\tmovs r1, 0\n" + "\tldrsh r0, [r6, r1]\n" + "\tmovs r2, 0\n" + "\tldrsh r1, [r7, r2]\n" + "\tbl MapGridGetZCoordAt\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tcmp r0, 0x3\n" + "\tbne _08128080\n" + "\tldrh r0, [r4, 0x38]\n" + "\tadds r0, 0x1\n" + "\tstrh r0, [r4, 0x38]\n" + "\tb _08128094\n" + "_08128080:\n" + "\tadds r0, r5, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r5, r0, 24\n" + "\tldrh r0, [r4, 0x3A]\n" + "\tstrh r0, [r6]\n" + "\tldrh r0, [r4, 0x3C]\n" + "\tmov r1, r8\n" + "\tstrh r0, [r1]\n" + "\tcmp r5, 0x4\n" + "\tbls _0812805A\n" + "_08128094:\n" + "\tadd sp, 0x4\n" + "\tpop {r3}\n" + "\tmov r8, r3\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0"); +} +#endif -- cgit v1.2.3 From 4645837cc2ce36c9638853552649f182486af8b2 Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 10 Sep 2017 11:17:39 -0400 Subject: sub_81280A0 --- asm/field_effect_helpers.s | 71 ---------------------------------------------- src/field_effect_helpers.c | 35 ++++++++++++++++++++++- 2 files changed, 34 insertions(+), 72 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index e9dcd9d89..af38da6cf 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,77 +6,6 @@ .text - thumb_func_start sub_81280A0 -sub_81280A0: @ 81280A0 - push {r4,r5,lr} - sub sp, 0x4 - adds r5, r1, 0 - adds r4, r2, 0 - ldr r1, _08128104 @ =gUnknown_08401E5A - mov r0, sp - movs r2, 0x4 - bl memcpy - adds r0, r4, 0 - bl sub_8127F5C - lsls r0, 24 - lsrs r0, 24 - adds r2, r0, 0 - cmp r2, 0 - beq _0812811A - ldrh r1, [r4, 0x36] - adds r1, 0x1 - strh r1, [r4, 0x36] - movs r3, 0x38 - ldrsh r0, [r4, r3] - lsls r0, 1 - add r0, sp - ldrh r0, [r0] - ands r1, r0 - cmp r1, 0 - bne _081280E0 - ldrh r0, [r4, 0x34] - ldrh r1, [r4, 0x26] - adds r0, r1 - strh r0, [r4, 0x26] -_081280E0: - ldrh r1, [r4, 0x36] - movs r0, 0xF - ands r0, r1 - cmp r0, 0 - bne _081280F0 - ldrh r0, [r4, 0x34] - negs r0, r0 - strh r0, [r4, 0x34] -_081280F0: - cmp r2, 0x2 - beq _0812811A - adds r0, r4, 0 - bl sub_8127F70 - lsls r0, 24 - cmp r0, 0 - bne _08128108 - ldrh r0, [r4, 0x26] - b _0812810E - .align 2, 0 -_08128104: .4byte gUnknown_08401E5A -_08128108: - ldrh r0, [r4, 0x26] - ldrh r3, [r4, 0x30] - adds r0, r3 -_0812810E: - strh r0, [r5, 0x26] - ldrh r0, [r5, 0x20] - strh r0, [r4, 0x20] - ldrh r0, [r5, 0x22] - adds r0, 0x8 - strh r0, [r4, 0x22] -_0812811A: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_81280A0 - thumb_func_start sub_8128124 sub_8128124: @ 8128124 push {r4,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 3d53db9fd..6bfb7f3fb 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -332,7 +332,7 @@ void unc_grass_normal(struct Sprite *sprite) u8 localId; u8 mapObjectId; struct MapObject *mapObject; - + mapNum = sprite->data5 >> 8; mapGroup = sprite->data5; if (gCamera.field_0 && (gSaveBlock1.location.mapNum != mapNum || gSaveBlock1.location.mapGroup != mapGroup)) @@ -1144,3 +1144,36 @@ __attribute__((naked)) static void sub_812800C(struct MapObject *mapObject, stru "\tbx r0"); } #endif + +void sub_81280A0(struct MapObject *mapObject, struct Sprite *linkedSprite, struct Sprite *sprite) +{ + u16 unk_8401E5A[ARRAY_COUNT(gUnknown_08401E5A)]; + u8 v0; + + memcpy(unk_8401E5A, gUnknown_08401E5A, sizeof gUnknown_08401E5A); + v0 = sub_8127F5C(sprite); + if (v0 != 0) + { + if (((u16)(++ sprite->data4) & unk_8401E5A[sprite->data5]) == 0) + { + sprite->pos2.y += sprite->data3; + } + if ((sprite->data4 & 0x0F) == 0) + { + sprite->data3 = -sprite->data3; + } + if (v0 != 2) + { + if (sub_8127F70(sprite) == 0) + { + linkedSprite->pos2.y = sprite->pos2.y; + } + else + { + linkedSprite->pos2.y = sprite->data1 + sprite->pos2.y; + } + sprite->pos1.x = linkedSprite->pos1.x; + sprite->pos1.y = linkedSprite->pos1.y + 8; + } + } +} -- cgit v1.2.3 From 64dc157df603a6d3c1b59a60ad9f286ebd66fce5 Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 10 Sep 2017 11:21:54 -0400 Subject: sub_8128124 --- asm/field_effect_helpers.s | 40 ---------------------------------------- include/sprite.h | 2 ++ src/field_effect_helpers.c | 19 +++++++++++++++++-- 3 files changed, 19 insertions(+), 42 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index af38da6cf..337eaa4c8 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,46 +6,6 @@ .text - thumb_func_start sub_8128124 -sub_8128124: @ 8128124 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _08128168 @ =gDummySpriteTemplate - movs r1, 0 - movs r2, 0 - movs r3, 0xFF - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r0, 24 - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - ldr r1, _0812816C @ =gSprites - adds r2, r1 - ldr r1, _08128170 @ =sub_8128174 - str r1, [r2, 0x1C] - movs r1, 0x3E - adds r1, r2 - mov r12, r1 - ldrb r1, [r1] - movs r3, 0x4 - orrs r1, r3 - mov r3, r12 - strb r1, [r3] - strh r4, [r2, 0x2E] - movs r1, 0x1 - strh r1, [r2, 0x30] - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08128168: .4byte gDummySpriteTemplate -_0812816C: .4byte gSprites -_08128170: .4byte sub_8128174 - thumb_func_end sub_8128124 - thumb_func_start sub_8128174 sub_8128174: @ 8128174 push {lr} diff --git a/include/sprite.h b/include/sprite.h index 5682a7c1d..0d84c8127 100644 --- a/include/sprite.h +++ b/include/sprite.h @@ -299,4 +299,6 @@ u8 SpriteTileAllocBitmapOp(u16 bit, u8 op); extern const union AffineAnimCmd *const gDummySpriteAffineAnimTable[]; +extern const struct SpriteTemplate gDummySpriteTemplate; + #endif // GUARD_SPRITE_H diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 6bfb7f3fb..e58fb9b31 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -36,7 +36,8 @@ static void sub_8127E30(struct Sprite *); static void sub_81278D8(struct Sprite *); static void sub_8127FD4(struct MapObject *, struct Sprite *); static void sub_812800C(struct MapObject *, struct Sprite *); -/*static*/ void sub_81280A0(struct MapObject *, struct Sprite *, struct Sprite *); +static void sub_81280A0(struct MapObject *, struct Sprite *, struct Sprite *); +/*static*/ void sub_8128174(struct Sprite *); // .rodata @@ -1145,7 +1146,7 @@ __attribute__((naked)) static void sub_812800C(struct MapObject *mapObject, stru } #endif -void sub_81280A0(struct MapObject *mapObject, struct Sprite *linkedSprite, struct Sprite *sprite) +static void sub_81280A0(struct MapObject *mapObject, struct Sprite *linkedSprite, struct Sprite *sprite) { u16 unk_8401E5A[ARRAY_COUNT(gUnknown_08401E5A)]; u8 v0; @@ -1177,3 +1178,17 @@ void sub_81280A0(struct MapObject *mapObject, struct Sprite *linkedSprite, struc } } } + +u8 sub_8128124(u8 oldSpriteId) +{ + u8 spriteId; + struct Sprite *sprite; + + spriteId = CreateSpriteAtEnd(&gDummySpriteTemplate, 0, 0, -1); + sprite = &gSprites[spriteId]; + sprite->callback = sub_8128174; + sprite->invisible = TRUE; + sprite->data0 = oldSpriteId; + sprite->data1 = 1; + return spriteId; +} -- cgit v1.2.3 From dd3edfd0c259f0c6edf481b13b1280cd566bfd31 Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 10 Sep 2017 11:29:02 -0400 Subject: sub_8128174 --- asm/field_effect_helpers.s | 38 -------------------------------------- src/field_effect_helpers.c | 17 ++++++++++++++++- 2 files changed, 16 insertions(+), 39 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 337eaa4c8..f6834e04a 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,44 +6,6 @@ .text - thumb_func_start sub_8128174 -sub_8128174: @ 8128174 - push {lr} - adds r2, r0, 0 - movs r0, 0x2E - ldrsh r1, [r2, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _081281B0 @ =gSprites - adds r3, r0, r1 - ldrh r1, [r2, 0x32] - adds r0, r1, 0x1 - strh r0, [r2, 0x32] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - bne _0812819C - ldrh r0, [r2, 0x30] - ldrh r1, [r3, 0x26] - adds r0, r1 - strh r0, [r3, 0x26] -_0812819C: - ldrh r1, [r2, 0x32] - movs r0, 0xF - ands r0, r1 - cmp r0, 0 - bne _081281AC - ldrh r0, [r2, 0x30] - negs r0, r0 - strh r0, [r2, 0x30] -_081281AC: - pop {r0} - bx r0 - .align 2, 0 -_081281B0: .4byte gSprites - thumb_func_end sub_8128174 - thumb_func_start FldEff_Dust FldEff_Dust: @ 81281B4 push {r4,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index e58fb9b31..95d7ff0b1 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -37,7 +37,7 @@ static void sub_81278D8(struct Sprite *); static void sub_8127FD4(struct MapObject *, struct Sprite *); static void sub_812800C(struct MapObject *, struct Sprite *); static void sub_81280A0(struct MapObject *, struct Sprite *, struct Sprite *); -/*static*/ void sub_8128174(struct Sprite *); +static void sub_8128174(struct Sprite *); // .rodata @@ -1192,3 +1192,18 @@ u8 sub_8128124(u8 oldSpriteId) sprite->data1 = 1; return spriteId; } + +static void sub_8128174(struct Sprite *sprite) +{ + struct Sprite *oldSprite; + + oldSprite = &gSprites[sprite->data0]; + if (((sprite->data2++) & 0x03) == 0) + { + oldSprite->pos2.y += sprite->data1; + } + if ((sprite->data2 & 0x0F) == 0) + { + sprite->data1 = -sprite->data1; + } +} -- cgit v1.2.3 From 14c3e4c2cc30d940584c5cf3de976639317ef0fe Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 10 Sep 2017 11:31:49 -0400 Subject: FldEff_Dust --- asm/field_effect_helpers.s | 57 ---------------------------------------------- src/field_effect_helpers.c | 18 +++++++++++++++ 2 files changed, 18 insertions(+), 57 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index f6834e04a..65cac1551 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,63 +6,6 @@ .text - thumb_func_start FldEff_Dust -FldEff_Dust: @ 81281B4 - push {r4,lr} - ldr r4, _08128218 @ =gFieldEffectSpawnParams - adds r1, r4, 0x4 - adds r0, r4, 0 - movs r2, 0x8 - movs r3, 0xC - bl sub_8060470 - ldr r0, _0812821C @ =gFieldEffectObjectTemplatePointers - ldr r0, [r0, 0x24] - movs r2, 0 - ldrsh r1, [r4, r2] - movs r3, 0x4 - ldrsh r2, [r4, r3] - movs r3, 0 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x40 - beq _08128210 - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - ldr r0, _08128220 @ =gSprites - adds r2, r0 - adds r3, r2, 0 - adds r3, 0x3E - ldrb r0, [r3] - movs r1, 0x2 - orrs r0, r1 - strb r0, [r3] - movs r0, 0x3 - ldrb r1, [r4, 0xC] - ands r1, r0 - lsls r1, 2 - ldrb r3, [r2, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2, 0x5] - ldr r0, [r4, 0x8] - strh r0, [r2, 0x2E] - movs r0, 0xA - strh r0, [r2, 0x30] -_08128210: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08128218: .4byte gFieldEffectSpawnParams -_0812821C: .4byte gFieldEffectObjectTemplatePointers -_08128220: .4byte gSprites - thumb_func_end FldEff_Dust - thumb_func_start FldEff_SandPile FldEff_SandPile: @ 8128224 push {r4-r7,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 95d7ff0b1..3f372b4ee 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -1207,3 +1207,21 @@ static void sub_8128174(struct Sprite *sprite) sprite->data1 = -sprite->data1; } } + +u8 FldEff_Dust(void) +{ + u8 spriteId; + struct Sprite *sprite; + + sub_8060470((s16 *)&gFieldEffectSpawnParams[0], (s16 *)&gFieldEffectSpawnParams[1], 8, 12); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[9], gFieldEffectSpawnParams[0], gFieldEffectSpawnParams[1], 0); + if (spriteId != MAX_SPRITES) + { + sprite = &gSprites[spriteId]; + sprite->coordOffsetEnabled = TRUE; + sprite->oam.priority = gFieldEffectSpawnParams[3]; + sprite->data0 = gFieldEffectSpawnParams[2]; + sprite->data1 = 10; + } + return 0; +} -- cgit v1.2.3 From 25c274e171b6bd9d2de2d1b457329619517e7749 Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 10 Sep 2017 11:36:40 -0400 Subject: FldEff_SandPile --- asm/field_effect_helpers.s | 92 ---------------------------------------------- src/field_effect_helpers.c | 28 ++++++++++++++ 2 files changed, 28 insertions(+), 92 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 65cac1551..1c799bc49 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,98 +6,6 @@ .text - thumb_func_start FldEff_SandPile -FldEff_SandPile: @ 8128224 - push {r4-r7,lr} - ldr r7, _081282D0 @ =gFieldEffectSpawnParams - ldrb r0, [r7] - ldrb r1, [r7, 0x4] - ldrb r2, [r7, 0x8] - bl GetFieldObjectIdByLocalIdAndMap - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - ldr r0, _081282D4 @ =gMapObjects - adds r6, r1, r0 - ldr r0, _081282D8 @ =gFieldEffectObjectTemplatePointers - ldr r0, [r0, 0x74] - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x40 - beq _081282C8 - ldrb r0, [r6, 0x5] - bl GetFieldObjectGraphicsInfo - adds r5, r0, 0 - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - ldr r4, _081282DC @ =gSprites - adds r0, r4 - adds r3, r0, 0 - adds r3, 0x3E - ldrb r1, [r3] - movs r2, 0x2 - orrs r1, r2 - strb r1, [r3] - ldrb r2, [r6, 0x4] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r4 - ldrb r1, [r1, 0x5] - movs r2, 0xC - ands r2, r1 - ldrb r3, [r0, 0x5] - movs r1, 0xD - negs r1, r1 - ands r1, r3 - orrs r1, r2 - strb r1, [r0, 0x5] - ldr r1, [r7] - strh r1, [r0, 0x2E] - ldr r1, [r7, 0x4] - strh r1, [r0, 0x30] - ldr r1, [r7, 0x8] - strh r1, [r0, 0x32] - ldrb r2, [r6, 0x4] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r4 - ldrh r1, [r1, 0x20] - strh r1, [r0, 0x34] - ldrb r2, [r6, 0x4] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r4 - ldrh r1, [r1, 0x22] - strh r1, [r0, 0x36] - ldrh r1, [r5, 0xA] - lsls r1, 16 - asrs r1, 17 - subs r1, 0x2 - strh r1, [r0, 0x26] - movs r1, 0x2 - bl SeekSpriteAnim -_081282C8: - movs r0, 0 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_081282D0: .4byte gFieldEffectSpawnParams -_081282D4: .4byte gMapObjects -_081282D8: .4byte gFieldEffectObjectTemplatePointers -_081282DC: .4byte gSprites - thumb_func_end FldEff_SandPile - thumb_func_start sub_81282E0 sub_81282E0: @ 81282E0 push {r4-r6,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 3f372b4ee..3cb89a7dc 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -1225,3 +1225,31 @@ u8 FldEff_Dust(void) } return 0; } + +u8 FldEff_SandPile(void) +{ + u8 mapObjectId; + struct MapObject *mapObject; + u8 spriteId; + struct Sprite *sprite; + const struct MapObjectGraphicsInfo *graphicsInfo; + + mapObjectId = GetFieldObjectIdByLocalIdAndMap(gFieldEffectSpawnParams[0], gFieldEffectSpawnParams[1], gFieldEffectSpawnParams[2]); + mapObject = &gMapObjects[mapObjectId]; + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[29], 0, 0, 0); + if (spriteId != MAX_SPRITES) + { + graphicsInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId); + sprite = &gSprites[spriteId]; + sprite->coordOffsetEnabled = TRUE; + sprite->oam.priority = gSprites[mapObject->spriteId].oam.priority; + sprite->data0 = gFieldEffectSpawnParams[0]; + sprite->data1 = gFieldEffectSpawnParams[1]; + sprite->data2 = gFieldEffectSpawnParams[2]; + sprite->data3 = gSprites[mapObject->spriteId].pos1.x; + sprite->data4 = gSprites[mapObject->spriteId].pos1.y; + sprite->pos2.y = (graphicsInfo->height >> 1) - 2; + SeekSpriteAnim(sprite, 2); + } + return 0; +} -- cgit v1.2.3 From 477be592a40837c532723be07a5d792e5a6ad703 Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 10 Sep 2017 11:42:24 -0400 Subject: sub_81282E0 --- asm/field_effect_helpers.s | 105 --------------------------------------------- src/field_effect_helpers.c | 30 +++++++++++++ 2 files changed, 30 insertions(+), 105 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 1c799bc49..4630bf6b2 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,111 +6,6 @@ .text - thumb_func_start sub_81282E0 -sub_81282E0: @ 81282E0 - push {r4-r6,lr} - sub sp, 0x4 - adds r4, r0, 0 - ldrh r0, [r4, 0x2E] - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r4, 0x30] - lsls r1, 24 - lsrs r1, 24 - ldrh r2, [r4, 0x32] - lsls r2, 24 - lsrs r2, 24 - mov r3, sp - bl TryGetFieldObjectIdByLocalIdAndMap - lsls r0, 24 - cmp r0, 0 - bne _0812831A - ldr r2, _08128324 @ =gMapObjects - mov r0, sp - ldrb r1, [r0] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r1, r0, r2 - ldrb r0, [r1, 0x2] - lsls r0, 27 - cmp r0, 0 - blt _08128328 -_0812831A: - adds r0, r4, 0 - movs r1, 0x27 - bl FieldEffectStop - b _0812839A - .align 2, 0 -_08128324: .4byte gMapObjects -_08128328: - ldr r2, _081283A4 @ =gSprites - ldrb r1, [r1, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r5, [r0, 0x22] - ldrh r6, [r0, 0x20] - movs r2, 0x20 - ldrsh r1, [r0, r2] - movs r2, 0x34 - ldrsh r0, [r4, r2] - cmp r1, r0 - bne _08128350 - lsls r0, r5, 16 - asrs r0, 16 - movs r2, 0x36 - ldrsh r1, [r4, r2] - cmp r0, r1 - beq _0812836A -_08128350: - strh r6, [r4, 0x34] - strh r5, [r4, 0x36] - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0812836A - adds r0, r4, 0 - movs r1, 0 - bl StartSpriteAnim -_0812836A: - strh r6, [r4, 0x20] - strh r5, [r4, 0x22] - ldr r3, _081283A4 @ =gSprites - ldr r2, _081283A8 @ =gMapObjects - mov r0, sp - ldrb r1, [r0] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - adds r0, 0x43 - ldrb r0, [r0] - adds r1, r4, 0 - adds r1, 0x43 - strb r0, [r1] - adds r0, r4, 0 - movs r1, 0 - bl sub_806487C -_0812839A: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081283A4: .4byte gSprites -_081283A8: .4byte gMapObjects - thumb_func_end sub_81282E0 - thumb_func_start FldEff_Bubbles FldEff_Bubbles: @ 81283AC push {r4,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 3cb89a7dc..367d08cc0 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -1253,3 +1253,33 @@ u8 FldEff_SandPile(void) } return 0; } + +void sub_81282E0(struct Sprite *sprite) +{ + u8 mapObjectId; + s16 x; + s16 y; + + if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjectId) || !gMapObjects[mapObjectId].mapobj_bit_20) + { + FieldEffectStop(sprite, FLDEFF_SAND_PILE); + } + else + { + y = gSprites[gMapObjects[mapObjectId].spriteId].pos1.y; + x = gSprites[gMapObjects[mapObjectId].spriteId].pos1.x; + if (x != sprite->data3 || y != sprite->data4) + { + sprite->data3 = x; + sprite->data4 = y; + if (sprite->animEnded) + { + StartSpriteAnim(sprite, 0); + } + } + sprite->pos1.x = x; + sprite->pos1.y = y; + sprite->subpriority = gSprites[gMapObjects[mapObjectId].spriteId].subpriority; + sub_806487C(sprite, FALSE); + } +} -- cgit v1.2.3 From 7b42ee1259d243cecd4d997c8f784c5e9fecd8dd Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 10 Sep 2017 11:45:03 -0400 Subject: FldEff_Bubbles --- asm/field_effect_helpers.s | 51 ---------------------------------------------- src/field_effect_helpers.c | 16 +++++++++++++++ 2 files changed, 16 insertions(+), 51 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 4630bf6b2..afa84b4fb 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,57 +6,6 @@ .text - thumb_func_start FldEff_Bubbles -FldEff_Bubbles: @ 81283AC - push {r4,lr} - ldr r4, _08128404 @ =gFieldEffectSpawnParams - adds r1, r4, 0x4 - adds r0, r4, 0 - movs r2, 0x8 - movs r3, 0 - bl sub_8060470 - ldr r0, _08128408 @ =gFieldEffectObjectTemplatePointers - adds r0, 0x88 - ldr r0, [r0] - movs r2, 0 - ldrsh r1, [r4, r2] - movs r3, 0x4 - ldrsh r2, [r4, r3] - movs r3, 0x52 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x40 - beq _081283FC - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _0812840C @ =gSprites - adds r1, r0 - adds r3, r1, 0 - adds r3, 0x3E - ldrb r0, [r3] - movs r2, 0x2 - orrs r0, r2 - strb r0, [r3] - ldrb r2, [r1, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - movs r2, 0x4 - orrs r0, r2 - strb r0, [r1, 0x5] -_081283FC: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08128404: .4byte gFieldEffectSpawnParams -_08128408: .4byte gFieldEffectObjectTemplatePointers -_0812840C: .4byte gSprites - thumb_func_end FldEff_Bubbles - thumb_func_start sub_8128410 sub_8128410: @ 8128410 push {r4,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 367d08cc0..9e240578d 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -1283,3 +1283,19 @@ void sub_81282E0(struct Sprite *sprite) sub_806487C(sprite, FALSE); } } + +u8 FldEff_Bubbles(void) +{ + u8 spriteId; + struct Sprite *sprite; + + sub_8060470((s16 *)&gFieldEffectSpawnParams[0], (s16 *)&gFieldEffectSpawnParams[1], 8, 0); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[34], gFieldEffectSpawnParams[0], gFieldEffectSpawnParams[1], 0x52); + if (spriteId != MAX_SPRITES) + { + sprite = &gSprites[spriteId]; + sprite->coordOffsetEnabled = TRUE; + sprite->oam.priority = 1; + } + return 0; +} -- cgit v1.2.3 From 3fc4c1f3ab4abe7e6f1e6cff0cc93b012a65c836 Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 10 Sep 2017 11:52:15 -0400 Subject: sub_8128410 --- asm/field_effect_helpers.s | 34 ---------------------------------- src/field_effect_helpers.c | 12 ++++++++++++ 2 files changed, 12 insertions(+), 34 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index afa84b4fb..7dfc80b10 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,40 +6,6 @@ .text - thumb_func_start sub_8128410 -sub_8128410: @ 8128410 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x2E] - adds r0, 0x80 - movs r1, 0x80 - lsls r1, 1 - ands r0, r1 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 24 - ldrh r1, [r4, 0x22] - subs r1, r0 - strh r1, [r4, 0x22] - adds r0, r4, 0 - movs r1, 0 - bl sub_806487C - ldrh r1, [r4, 0x3E] - ldr r0, _0812844C @ =0x00001004 - ands r0, r1 - cmp r0, 0 - beq _08128444 - adds r0, r4, 0 - movs r1, 0x35 - bl FieldEffectStop -_08128444: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812844C: .4byte 0x00001004 - thumb_func_end sub_8128410 - thumb_func_start FldEff_BerryTreeGrowthSparkle FldEff_BerryTreeGrowthSparkle: @ 8128450 push {r4,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 9e240578d..fab0c43eb 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -1299,3 +1299,15 @@ u8 FldEff_Bubbles(void) } return 0; } + +void sub_8128410(struct Sprite *sprite) +{ + sprite->data0 += 0x80; + sprite->data0 &= 0x100; + sprite->pos1.y -= sprite->data0 >> 8; + sub_806487C(sprite, FALSE); + if (sprite->invisible || sprite->animEnded) + { + FieldEffectStop(sprite, FLDEFF_BUBBLES); + } +} -- cgit v1.2.3 From ad5a3e758fab2a51b1624e51834cd1ef04977cd1 Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 10 Sep 2017 11:57:03 -0400 Subject: FldEff_BerryTreeGrowthSparkle --- asm/field_effect_helpers.s | 59 ---------------------------------------------- src/field_effect_helpers.c | 18 ++++++++++++++ 2 files changed, 18 insertions(+), 59 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 7dfc80b10..c5a2a0308 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,65 +6,6 @@ .text - thumb_func_start FldEff_BerryTreeGrowthSparkle -FldEff_BerryTreeGrowthSparkle: @ 8128450 - push {r4,lr} - ldr r4, _081284B8 @ =gFieldEffectSpawnParams - adds r1, r4, 0x4 - adds r0, r4, 0 - movs r2, 0x8 - movs r3, 0x4 - bl sub_8060470 - ldr r0, _081284BC @ =gFieldEffectObjectTemplatePointers - ldr r0, [r0, 0x58] - movs r2, 0 - ldrsh r1, [r4, r2] - movs r3, 0x4 - ldrsh r2, [r4, r3] - ldrb r3, [r4, 0x8] - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x40 - beq _081284B0 - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - ldr r0, _081284C0 @ =gSprites - adds r2, r0 - adds r3, r2, 0 - adds r3, 0x3E - ldrb r0, [r3] - movs r1, 0x2 - orrs r0, r1 - strb r0, [r3] - movs r0, 0x3 - ldrb r1, [r4, 0xC] - ands r1, r0 - lsls r1, 2 - ldrb r3, [r2, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r3 - orrs r0, r1 - movs r1, 0xF - ands r0, r1 - movs r1, 0x50 - orrs r0, r1 - strb r0, [r2, 0x5] - movs r0, 0x17 - strh r0, [r2, 0x2E] -_081284B0: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_081284B8: .4byte gFieldEffectSpawnParams -_081284BC: .4byte gFieldEffectObjectTemplatePointers -_081284C0: .4byte gSprites - thumb_func_end FldEff_BerryTreeGrowthSparkle - thumb_func_start FldEff_TreeDisguise FldEff_TreeDisguise: @ 81284C4 push {lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index fab0c43eb..347eb18a5 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -1311,3 +1311,21 @@ void sub_8128410(struct Sprite *sprite) FieldEffectStop(sprite, FLDEFF_BUBBLES); } } + +u8 FldEff_BerryTreeGrowthSparkle(void) +{ + u8 spriteId; + struct Sprite *sprite; + + sub_8060470((s16 *)&gFieldEffectSpawnParams[0], (s16 *)&gFieldEffectSpawnParams[1], 8, 4); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[22], gFieldEffectSpawnParams[0], gFieldEffectSpawnParams[1], gFieldEffectSpawnParams[2]); + if (spriteId != MAX_SPRITES) + { + sprite = &gSprites[spriteId]; + sprite->coordOffsetEnabled = TRUE; + sprite->oam.priority = gFieldEffectSpawnParams[3]; + sprite->oam.paletteNum = 5; + sprite->data0 = FLDEFF_BERRY_TREE_GROWTH_SPARKLE; + } + return 0; +} -- cgit v1.2.3 From dc1f3024931e92253f36f0b150fb177e418392ea Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 10 Sep 2017 12:07:57 -0400 Subject: Disguise effects --- asm/field_effect_helpers.s | 128 --------------------------------------------- src/field_effect_helpers.c | 94 ++++++++++++++++++++++++--------- 2 files changed, 69 insertions(+), 153 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index c5a2a0308..adb0e2ec2 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,134 +6,6 @@ .text - thumb_func_start FldEff_TreeDisguise -FldEff_TreeDisguise: @ 81284C4 - push {lr} - movs r0, 0x1C - movs r1, 0x18 - movs r2, 0x4 - bl ShowDisguiseFieldEffect - pop {r1} - bx r1 - thumb_func_end FldEff_TreeDisguise - - thumb_func_start FldEff_MountainDisguise -FldEff_MountainDisguise: @ 81284D4 - push {lr} - movs r0, 0x1D - movs r1, 0x19 - movs r2, 0x3 - bl ShowDisguiseFieldEffect - pop {r1} - bx r1 - thumb_func_end FldEff_MountainDisguise - - thumb_func_start FldEff_SandDisguise -FldEff_SandDisguise: @ 81284E4 - push {lr} - movs r0, 0x24 - movs r1, 0x1C - movs r2, 0x2 - bl ShowDisguiseFieldEffect - pop {r1} - bx r1 - thumb_func_end FldEff_SandDisguise - - thumb_func_start ShowDisguiseFieldEffect -ShowDisguiseFieldEffect: @ 81284F4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r4, r0, 24 - mov r8, r4 - lsls r1, 24 - lsrs r6, r1, 24 - lsls r2, 24 - lsrs r7, r2, 24 - ldr r5, _08128528 @ =gFieldEffectSpawnParams - ldrb r0, [r5] - ldrb r1, [r5, 0x4] - ldrb r2, [r5, 0x8] - mov r3, sp - bl TryGetFieldObjectIdByLocalIdAndMap - lsls r0, 24 - cmp r0, 0 - beq _0812852C - adds r0, r4, 0 - bl FieldEffectActiveListRemove - movs r0, 0x40 - b _08128598 - .align 2, 0 -_08128528: .4byte gFieldEffectSpawnParams -_0812852C: - ldr r1, _081285A4 @ =gFieldEffectObjectTemplatePointers - lsls r0, r6, 2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl CreateSpriteAtEnd - mov r1, sp - strb r0, [r1] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x40 - beq _08128594 - mov r0, sp - ldrb r0, [r0] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - ldr r0, _081285A8 @ =gSprites - adds r2, r0 - movs r0, 0x3E - adds r0, r2 - mov r12, r0 - ldrb r3, [r0] - lsls r1, r3, 30 - lsrs r1, 31 - adds r1, 0x1 - movs r0, 0x1 - ands r1, r0 - lsls r1, 1 - movs r0, 0x3 - negs r0, r0 - ands r0, r3 - orrs r0, r1 - mov r1, r12 - strb r0, [r1] - lsls r3, r7, 4 - ldrb r1, [r2, 0x5] - movs r0, 0xF - ands r0, r1 - orrs r0, r3 - strb r0, [r2, 0x5] - mov r0, r8 - strh r0, [r2, 0x30] - ldr r0, [r5] - strh r0, [r2, 0x32] - ldr r0, [r5, 0x4] - strh r0, [r2, 0x34] - ldr r0, [r5, 0x8] - strh r0, [r2, 0x36] -_08128594: - mov r0, sp - ldrb r0, [r0] -_08128598: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_081285A4: .4byte gFieldEffectObjectTemplatePointers -_081285A8: .4byte gSprites - thumb_func_end ShowDisguiseFieldEffect - thumb_func_start sub_81285AC sub_81285AC: @ 81285AC push {r4,r5,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 347eb18a5..da406daeb 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -38,6 +38,7 @@ static void sub_8127FD4(struct MapObject *, struct Sprite *); static void sub_812800C(struct MapObject *, struct Sprite *); static void sub_81280A0(struct MapObject *, struct Sprite *, struct Sprite *); static void sub_8128174(struct Sprite *); +static u32 ShowDisguiseFieldEffect(u8, u8, u8); // .rodata @@ -251,7 +252,7 @@ void sub_8126BC4(u8 spriteId, u8 animNum, s16 x, s16 y) } } -u8 FldEff_Shadow(void) +u32 FldEff_Shadow(void) { u8 mapObjectId; const struct MapObjectGraphicsInfo *graphicsInfo; @@ -295,7 +296,7 @@ void oamc_shadow(struct Sprite *sprite) } } -u8 FldEff_TallGrass(void) +u32 FldEff_TallGrass(void) { s16 x; s16 y; @@ -367,7 +368,7 @@ void unc_grass_normal(struct Sprite *sprite) } } -u8 FldEff_JumpTallGrass(void) +u32 FldEff_JumpTallGrass(void) { u8 spriteId; struct Sprite *sprite; @@ -404,7 +405,7 @@ u8 sub_8126FF0(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y) return MAX_SPRITES; } -u8 FldEff_LongGrass(void) +u32 FldEff_LongGrass(void) { s16 x; s16 y; @@ -471,7 +472,7 @@ void unc_grass_tall(struct Sprite *sprite) } } -u8 FldEff_JumpLongGrass(void) +u32 FldEff_JumpLongGrass(void) { u8 spriteId; struct Sprite *sprite; @@ -489,7 +490,7 @@ u8 FldEff_JumpLongGrass(void) return 0; } -u8 FldEff_ShortGrass(void) +u32 FldEff_ShortGrass(void) { u8 mapObjectId; struct MapObject *mapObject; @@ -549,7 +550,7 @@ void sub_8127334(struct Sprite *sprite) } } -u8 FldEff_SandFootprints(void) +u32 FldEff_SandFootprints(void) { u8 spriteId; struct Sprite *sprite; @@ -567,7 +568,7 @@ u8 FldEff_SandFootprints(void) return 0; } -u8 FldEff_DeepSandFootprints(void) +u32 FldEff_DeepSandFootprints(void) { u8 spriteId; struct Sprite *sprite; @@ -585,7 +586,7 @@ u8 FldEff_DeepSandFootprints(void) return spriteId; } -u8 FldEff_BikeTireTracks(void) +u32 FldEff_BikeTireTracks(void) { u8 spriteId; struct Sprite *sprite; @@ -628,7 +629,7 @@ static void sub_81275C4(struct Sprite *sprite) } } -u8 FldEff_Splash(void) +u32 FldEff_Splash(void) { u8 mapObjectId; struct MapObject *mapObject; @@ -672,7 +673,7 @@ void sub_81276B4(struct Sprite *sprite) } } -u8 FldEff_JumpSmallSplash(void) +u32 FldEff_JumpSmallSplash(void) { u8 spriteId; struct Sprite *sprite; @@ -690,7 +691,7 @@ u8 FldEff_JumpSmallSplash(void) return 0; } -u8 FldEff_JumpBigSplash(void) +u32 FldEff_JumpBigSplash(void) { u8 spriteId; struct Sprite *sprite; @@ -708,7 +709,7 @@ u8 FldEff_JumpBigSplash(void) return 0; } -u8 FldEff_FeetInFlowingWater(void) +u32 FldEff_FeetInFlowingWater(void) { u8 mapObjectId; struct MapObject *mapObject; @@ -767,7 +768,7 @@ static void sub_81278D8(struct Sprite *sprite) } } -u8 FldEff_Ripple(void) +u32 FldEff_Ripple(void) { u8 spriteId; struct Sprite *sprite; @@ -783,7 +784,7 @@ u8 FldEff_Ripple(void) return 0; } -u8 FldEff_HotSpringsWater(void) +u32 FldEff_HotSpringsWater(void) { u8 mapObjectId; struct MapObject *mapObject; @@ -828,7 +829,7 @@ void sub_8127A7C(struct Sprite *sprite) } } -u8 FldEff_Unknown19(void) +u32 FldEff_Unknown19(void) { u8 spriteId; struct Sprite *sprite; @@ -845,7 +846,7 @@ u8 FldEff_Unknown19(void) return 0; } -u8 FldEff_Unknown20(void) +u32 FldEff_Unknown20(void) { u8 spriteId; struct Sprite *sprite; @@ -862,7 +863,7 @@ u8 FldEff_Unknown20(void) return 0; } -u8 FldEff_Unknown21(void) +u32 FldEff_Unknown21(void) { u8 spriteId; struct Sprite *sprite; @@ -879,7 +880,7 @@ u8 FldEff_Unknown21(void) return 0; } -u8 FldEff_Unknown22(void) +u32 FldEff_Unknown22(void) { u8 spriteId; struct Sprite *sprite; @@ -907,7 +908,7 @@ void ash(s16 x, s16 y, u16 c, s16 d) FieldEffectStart(FLDEFF_ASH); } -u8 FldEff_Ash(void) +u32 FldEff_Ash(void) { s16 x; s16 y; @@ -965,7 +966,7 @@ static void sub_8127E30(struct Sprite *sprite) } } -u8 FldEff_SurfBlob(void) +u32 FldEff_SurfBlob(void) { u8 spriteId; struct Sprite *sprite; @@ -1208,7 +1209,7 @@ static void sub_8128174(struct Sprite *sprite) } } -u8 FldEff_Dust(void) +u32 FldEff_Dust(void) { u8 spriteId; struct Sprite *sprite; @@ -1226,7 +1227,7 @@ u8 FldEff_Dust(void) return 0; } -u8 FldEff_SandPile(void) +u32 FldEff_SandPile(void) { u8 mapObjectId; struct MapObject *mapObject; @@ -1284,7 +1285,7 @@ void sub_81282E0(struct Sprite *sprite) } } -u8 FldEff_Bubbles(void) +u32 FldEff_Bubbles(void) { u8 spriteId; struct Sprite *sprite; @@ -1312,7 +1313,7 @@ void sub_8128410(struct Sprite *sprite) } } -u8 FldEff_BerryTreeGrowthSparkle(void) +u32 FldEff_BerryTreeGrowthSparkle(void) { u8 spriteId; struct Sprite *sprite; @@ -1329,3 +1330,46 @@ u8 FldEff_BerryTreeGrowthSparkle(void) } return 0; } + +u32 FldEff_TreeDisguise(void) +{ + return ShowDisguiseFieldEffect(FLDEFF_TREE_DISGUISE, 0x18, 0x04); +} + + +u32 FldEff_MountainDisguise(void) +{ + return ShowDisguiseFieldEffect(FLDEFF_MOUNTAIN_DISGUISE, 0x19, 0x03); +} + + +u32 FldEff_SandDisguise(void) +{ + return ShowDisguiseFieldEffect(FLDEFF_SAND_DISGUISE, 0x1C, 0x02); +} + +static u32 ShowDisguiseFieldEffect(u8 fldEff, u8 templateIdx, u8 paletteNum) +{ + u8 spriteId; + struct Sprite *sprite; + + if (TryGetFieldObjectIdByLocalIdAndMap(gFieldEffectSpawnParams[0], gFieldEffectSpawnParams[1], gFieldEffectSpawnParams[2], &spriteId)) + { + FieldEffectActiveListRemove(fldEff); + return MAX_SPRITES; + } + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[templateIdx], 0, 0, 0); + if (spriteId != MAX_SPRITES) + { + sprite = &gSprites[spriteId]; + sprite->coordOffsetEnabled ++; + sprite->oam.paletteNum = paletteNum; + sprite->data1 = fldEff; + sprite->data2 = gFieldEffectSpawnParams[0]; + sprite->data3 = gFieldEffectSpawnParams[1]; + sprite->data4 = gFieldEffectSpawnParams[2]; + } + return spriteId; +} + + -- cgit v1.2.3 From e15b0256fe3c2e8713f185c1083629d51bd4cd3a Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 10 Sep 2017 12:15:19 -0400 Subject: sub_81285AC --- asm/field_effect_helpers.s | 122 --------------------------------------------- src/field_effect_helpers.c | 32 ++++++++++++ 2 files changed, 32 insertions(+), 122 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index adb0e2ec2..ffb23afeb 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,128 +6,6 @@ .text - thumb_func_start sub_81285AC -sub_81285AC: @ 81285AC - push {r4,r5,lr} - sub sp, 0x4 - adds r5, r0, 0 - ldrh r0, [r5, 0x32] - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r5, 0x34] - lsls r1, 24 - lsrs r1, 24 - ldrh r2, [r5, 0x36] - lsls r2, 24 - lsrs r2, 24 - mov r3, sp - bl TryGetFieldObjectIdByLocalIdAndMap - lsls r0, 24 - cmp r0, 0 - beq _081285DC - ldrh r1, [r5, 0x30] - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - bl FieldEffectStop -_081285DC: - ldr r4, _08128694 @ =gMapObjects - mov r0, sp - ldrb r1, [r0] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r0, [r0, 0x5] - bl GetFieldObjectGraphicsInfo - mov r1, sp - ldrb r2, [r1] - lsls r1, r2, 3 - adds r1, r2 - lsls r1, 2 - adds r1, r4 - ldrb r1, [r1, 0x4] - lsls r2, r1, 4 - adds r2, r1 - lsls r2, 2 - ldr r1, _08128698 @ =gSprites - adds r2, r1 - adds r1, r2, 0 - adds r1, 0x3E - ldrb r1, [r1] - movs r3, 0x3E - adds r3, r5 - mov r12, r3 - movs r3, 0x4 - ands r3, r1 - mov r1, r12 - ldrb r4, [r1] - movs r1, 0x5 - negs r1, r1 - ands r1, r4 - orrs r1, r3 - mov r3, r12 - strb r1, [r3] - ldrh r1, [r2, 0x20] - strh r1, [r5, 0x20] - ldrh r0, [r0, 0xA] - lsls r0, 16 - asrs r0, 17 - ldrh r1, [r2, 0x22] - adds r0, r1 - subs r0, 0x10 - strh r0, [r5, 0x22] - adds r2, 0x43 - ldrb r0, [r2] - subs r0, 0x1 - adds r1, r5, 0 - adds r1, 0x43 - strb r0, [r1] - ldrh r1, [r5, 0x2E] - movs r2, 0x2E - ldrsh r0, [r5, r2] - cmp r0, 0x1 - bne _0812865C - adds r0, r1, 0x1 - strh r0, [r5, 0x2E] - adds r0, r5, 0 - movs r1, 0x1 - bl StartSpriteAnim -_0812865C: - movs r3, 0x2E - ldrsh r0, [r5, r3] - ldrh r2, [r5, 0x2E] - cmp r0, 0x2 - bne _08128678 - adds r0, r5, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _08128678 - movs r0, 0x1 - strh r0, [r5, 0x3C] -_08128678: - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0x3 - bne _0812868C - ldrh r1, [r5, 0x30] - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - bl FieldEffectStop -_0812868C: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08128694: .4byte gMapObjects -_08128698: .4byte gSprites - thumb_func_end sub_81285AC - thumb_func_start sub_812869C sub_812869C: @ 812869C push {lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index da406daeb..151efd400 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -1372,4 +1372,36 @@ static u32 ShowDisguiseFieldEffect(u8 fldEff, u8 templateIdx, u8 paletteNum) return spriteId; } +void sub_81285AC(struct Sprite *sprite) +{ + u8 mapObjectId; + const struct MapObjectGraphicsInfo *graphicsInfo; + struct Sprite *linkedSprite; + if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data2, sprite->data3, sprite->data4, &mapObjectId)) + { + FieldEffectStop(sprite, sprite->data1); + } + // else { + graphicsInfo = GetFieldObjectGraphicsInfo(gMapObjects[mapObjectId].graphicsId); + linkedSprite = &gSprites[gMapObjects[mapObjectId].spriteId]; + sprite->invisible = linkedSprite->invisible; + sprite->pos1.x = linkedSprite->pos1.x; + sprite->pos1.y = (graphicsInfo->height >> 1) + linkedSprite->pos1.y - 16; + sprite->subpriority = linkedSprite->subpriority - 1; + if (sprite->data0 == 1) + { + sprite->data0 ++; + StartSpriteAnim(sprite, 1); + } + if (sprite->data0 == 2 && sprite->animEnded) + { + sprite->data7 = 1; + } + if (sprite->data0 == 3) + { + FieldEffectStop(sprite, sprite->data1); + } + // } + +} -- cgit v1.2.3 From 88ee7928f6868c8bb167e74193902e8cd8eb7ca2 Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 10 Sep 2017 12:21:28 -0400 Subject: sub_81286C4 --- asm/field_effect_helpers.s | 61 ---------------------------------------------- src/field_effect_helpers.c | 29 ++++++++++++++++++++++ 2 files changed, 29 insertions(+), 61 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index ffb23afeb..9f7999363 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,67 +6,6 @@ .text - thumb_func_start sub_812869C -sub_812869C: @ 812869C - push {lr} - adds r1, r0, 0 - adds r0, 0x21 - ldrb r0, [r0] - cmp r0, 0x1 - bne _081286BA - ldr r2, _081286C0 @ =gSprites - ldrb r1, [r1, 0x1A] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x2E] - adds r1, 0x1 - strh r1, [r0, 0x2E] -_081286BA: - pop {r0} - bx r0 - .align 2, 0 -_081286C0: .4byte gSprites - thumb_func_end sub_812869C - - thumb_func_start sub_81286C4 -sub_81286C4: @ 81286C4 - push {lr} - adds r2, r0, 0 - adds r2, 0x21 - ldrb r1, [r2] - cmp r1, 0x2 - beq _081286FA - cmp r1, 0 - beq _081286FA - ldrb r1, [r0, 0x1A] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _081286EC @ =gSprites - adds r1, r0, r1 - movs r3, 0x3C - ldrsh r0, [r1, r3] - cmp r0, 0 - bne _081286F0 - movs r0, 0 - b _081286FC - .align 2, 0 -_081286EC: .4byte gSprites -_081286F0: - movs r0, 0x2 - strb r0, [r2] - ldrh r0, [r1, 0x2E] - adds r0, 0x1 - strh r0, [r1, 0x2E] -_081286FA: - movs r0, 0x1 -_081286FC: - pop {r1} - bx r1 - thumb_func_end sub_81286C4 - thumb_func_start FldEff_Sparkle FldEff_Sparkle: @ 8128700 push {r4,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 151efd400..de85291f3 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -1403,5 +1403,34 @@ void sub_81285AC(struct Sprite *sprite) FieldEffectStop(sprite, sprite->data1); } // } +} + +void sub_812869C(struct MapObject *mapObject) +{ + if (mapObject->mapobj_unk_21 == 1) + { + gSprites[mapObject->mapobj_unk_1A].data0 ++; + } +} + +bool8 sub_81286C4(struct MapObject *mapObject) +{ + struct Sprite *sprite; + if (mapObject->mapobj_unk_21 == 2) + { + return TRUE; + } + if (mapObject->mapobj_unk_21 == 0) + { + return TRUE; + } + sprite = &gSprites[mapObject->mapobj_unk_1A]; + if (sprite->data7) + { + mapObject->mapobj_unk_21 = 2; + sprite->data0 ++; + return TRUE; + } + return FALSE; } -- cgit v1.2.3 From b3bcd2872414a513b286b627d0b7df86b5962e2f Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 10 Sep 2017 12:24:17 -0400 Subject: FldEff_Sparkle --- asm/field_effect_helpers.s | 59 ---------------------------------------------- src/field_effect_helpers.c | 16 +++++++++++++ 2 files changed, 16 insertions(+), 59 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 9f7999363..297182306 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,65 +6,6 @@ .text - thumb_func_start FldEff_Sparkle -FldEff_Sparkle: @ 8128700 - push {r4,lr} - ldr r4, _08128768 @ =gFieldEffectSpawnParams - ldr r0, [r4] - adds r0, 0x7 - str r0, [r4] - ldr r0, [r4, 0x4] - adds r0, 0x7 - str r0, [r4, 0x4] - adds r1, r4, 0x4 - adds r0, r4, 0 - movs r2, 0x8 - movs r3, 0x8 - bl sub_8060470 - ldr r0, _0812876C @ =gFieldEffectObjectTemplatePointers - adds r0, 0x8C - ldr r0, [r0] - movs r2, 0 - ldrsh r1, [r4, r2] - movs r3, 0x4 - ldrsh r2, [r4, r3] - movs r3, 0x52 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x40 - beq _08128760 - ldr r0, _08128770 @ =gSprites - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r0 - movs r0, 0x3 - ldrb r2, [r4, 0x8] - ands r2, r0 - lsls r2, 2 - ldrb r3, [r1, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r3 - orrs r0, r2 - strb r0, [r1, 0x5] - adds r1, 0x3E - ldrb r0, [r1] - movs r2, 0x2 - orrs r0, r2 - strb r0, [r1] -_08128760: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08128768: .4byte gFieldEffectSpawnParams -_0812876C: .4byte gFieldEffectObjectTemplatePointers -_08128770: .4byte gSprites - thumb_func_end FldEff_Sparkle - thumb_func_start sub_8128774 sub_8128774: @ 8128774 push {lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index de85291f3..c4b48a377 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -1434,3 +1434,19 @@ bool8 sub_81286C4(struct MapObject *mapObject) } return FALSE; } + +u32 FldEff_Sparkle(void) +{ + u8 spriteId; + + gFieldEffectSpawnParams[0] += 7; + gFieldEffectSpawnParams[1] += 7; + sub_8060470((s16 *)&gFieldEffectSpawnParams[0], (s16 *)&gFieldEffectSpawnParams[1], 8, 8); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[35], gFieldEffectSpawnParams[0], gFieldEffectSpawnParams[1], 0x52); + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].oam.priority = gFieldEffectSpawnParams[2]; + gSprites[spriteId].coordOffsetEnabled = TRUE; + } + return 0; +} -- cgit v1.2.3 From 6a848e2f9d014a7460137fa0e3d0b334867ef416 Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 10 Sep 2017 12:27:32 -0400 Subject: sub_8128774 --- asm/field_effect_helpers.s | 45 --------------------------------------------- src/field_effect_helpers.c | 20 ++++++++++++++++++++ 2 files changed, 20 insertions(+), 45 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 297182306..823f80dda 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,51 +6,6 @@ .text - thumb_func_start sub_8128774 -sub_8128774: @ 8128774 - push {lr} - adds r2, r0, 0 - movs r1, 0x2E - ldrsh r0, [r2, r1] - cmp r0, 0 - bne _081287A8 - adds r0, r2, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _081287A0 - adds r3, r2, 0 - adds r3, 0x3E - ldrb r0, [r3] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r3] - ldrh r0, [r2, 0x2E] - adds r0, 0x1 - strh r0, [r2, 0x2E] -_081287A0: - movs r1, 0x2E - ldrsh r0, [r2, r1] - cmp r0, 0 - beq _081287BE -_081287A8: - ldrh r0, [r2, 0x30] - adds r0, 0x1 - strh r0, [r2, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x22 - ble _081287BE - adds r0, r2, 0 - movs r1, 0x36 - bl FieldEffectStop -_081287BE: - pop {r0} - bx r0 - thumb_func_end sub_8128774 - thumb_func_start sub_81287C4 sub_81287C4: @ 81287C4 push {r4,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index c4b48a377..a84746a04 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -1450,3 +1450,23 @@ u32 FldEff_Sparkle(void) } return 0; } + +void sub_8128774(struct Sprite *sprite) +{ + if (sprite->data0 == 0) + { + if (sprite->animEnded) + { + sprite->invisible = TRUE; + sprite->data0 ++; + } + if (sprite->data0 == 0) + { + return; + } + } + if (++ sprite->data1 >= 35) + { + FieldEffectStop(sprite, FLDEFF_SPARKLE); + } +} -- cgit v1.2.3 From 6ca5e691bf555cce48719ce666c087dbc86fd28d Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 10 Sep 2017 12:28:51 -0400 Subject: sub_81287C4 --- asm/field_effect_helpers.s | 32 -------------------------------- src/field_effect_helpers.c | 13 +++++++++++++ 2 files changed, 13 insertions(+), 32 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 823f80dda..df3610f42 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,38 +6,6 @@ .text - thumb_func_start sub_81287C4 -sub_81287C4: @ 81287C4 - push {r4,lr} - adds r4, r0, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _081287E2 - ldrh r1, [r4, 0x30] - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl FieldEffectStop - b _081287F8 -_081287E2: - adds r0, r4, 0 - movs r1, 0 - bl sub_806487C - ldrh r0, [r4, 0x2E] - lsls r0, 24 - lsrs r0, 24 - adds r1, r4, 0 - movs r2, 0 - bl SetObjectSubpriorityByZCoord -_081287F8: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_81287C4 - thumb_func_start sub_8128800 sub_8128800: @ 8128800 push {lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index a84746a04..793bef3e2 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -1470,3 +1470,16 @@ void sub_8128774(struct Sprite *sprite) FieldEffectStop(sprite, FLDEFF_SPARKLE); } } + +void sub_81287C4(struct Sprite *sprite) +{ + if (sprite->animEnded) + { + FieldEffectStop(sprite, sprite->data1); + } + else + { + sub_806487C(sprite, FALSE); + SetObjectSubpriorityByZCoord(sprite->data0, sprite, 0); + } +} -- cgit v1.2.3 From 7a3708b1f3583d235bcbe1b6022de98a79762dca Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 10 Sep 2017 12:29:54 -0400 Subject: sub_8128800 --- asm/field_effect_helpers.s | 25 ------------------------- src/field_effect_helpers.c | 12 ++++++++++++ 2 files changed, 12 insertions(+), 25 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index df3610f42..c2582df74 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -6,31 +6,6 @@ .text - thumb_func_start sub_8128800 -sub_8128800: @ 8128800 - push {lr} - adds r2, r0, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0812881E - ldrh r1, [r2, 0x2E] - lsls r1, 24 - lsrs r1, 24 - adds r0, r2, 0 - bl FieldEffectStop - b _08128826 -_0812881E: - adds r0, r2, 0 - movs r1, 0 - bl sub_806487C -_08128826: - pop {r0} - bx r0 - thumb_func_end sub_8128800 - thumb_func_start sub_812882C sub_812882C: @ 812882C push {r4-r7,lr} diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 793bef3e2..9914defe4 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -1483,3 +1483,15 @@ void sub_81287C4(struct Sprite *sprite) SetObjectSubpriorityByZCoord(sprite->data0, sprite, 0); } } + +void sub_8128800(struct Sprite *sprite) +{ + if (sprite->animEnded) + { + FieldEffectStop(sprite, sprite->data0); + } + else + { + sub_806487C(sprite, FALSE); + } +} -- cgit v1.2.3 From 7c19038c79cf733b3fc85816c8b8500e1068b6d1 Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 10 Sep 2017 13:19:57 -0400 Subject: sub_812882C nonmatching --- asm/field_effect_helpers.s | 113 --------------------------------- ld_script.txt | 1 - src/field_effect_helpers.c | 152 ++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 151 insertions(+), 115 deletions(-) delete mode 100644 asm/field_effect_helpers.s diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s deleted file mode 100644 index c2582df74..000000000 --- a/asm/field_effect_helpers.s +++ /dev/null @@ -1,113 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_812882C -sub_812882C: @ 812882C - push {r4-r7,lr} - adds r6, r0, 0 - adds r0, r1, 0 - lsls r0, 24 - lsrs r0, 24 - lsls r2, 24 - lsrs r2, 24 - adds r1, r6, 0 - bl SetObjectSubpriorityByZCoord - movs r7, 0 -_08128842: - lsls r0, r7, 3 - adds r0, r7 - lsls r0, 2 - ldr r1, _081288DC @ =gMapObjects - adds r4, r0, r1 - ldrb r0, [r4] - lsls r0, 31 - cmp r0, 0 - beq _081288E4 - ldrb r0, [r4, 0x5] - bl GetFieldObjectGraphicsInfo - ldrb r1, [r4, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _081288E0 @ =gSprites - adds r5, r0, r1 - adds r0, r6, 0 - adds r0, 0x28 - movs r2, 0 - ldrsb r2, [r0, r2] - ldrh r0, [r6, 0x20] - adds r1, r0, r2 - subs r0, r2 - lsls r0, 16 - lsrs r4, r0, 16 - lsls r1, 16 - asrs r1, 16 - movs r0, 0x20 - ldrsh r2, [r5, r0] - cmp r1, r2 - bge _081288E4 - lsls r0, r4, 16 - asrs r0, 16 - cmp r0, r2 - ble _081288E4 - adds r0, r5, 0 - adds r0, 0x29 - movs r3, 0 - ldrsb r3, [r0, r3] - ldrh r2, [r5, 0x22] - adds r2, r3 - ldrh r4, [r5, 0x22] - adds r0, r6, 0 - adds r0, 0x29 - movs r1, 0 - ldrsb r1, [r0, r1] - ldrh r0, [r6, 0x22] - subs r0, r1 - lsls r0, 16 - asrs r0, 16 - adds r3, r0, r3 - lsls r2, 16 - asrs r2, 16 - lsls r3, 16 - asrs r3, 16 - cmp r2, r3 - blt _081288BC - cmp r2, r0 - bge _081288E4 -_081288BC: - lsls r0, r4, 16 - asrs r0, 16 - cmp r0, r3 - ble _081288E4 - adds r2, r6, 0 - adds r2, 0x43 - adds r0, r5, 0 - adds r0, 0x43 - ldrb r1, [r0] - ldrb r0, [r2] - cmp r0, r1 - bhi _081288E4 - adds r0, r1, 0x2 - strb r0, [r2] - b _081288EE - .align 2, 0 -_081288DC: .4byte gMapObjects -_081288E0: .4byte gSprites -_081288E4: - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - cmp r7, 0xF - bls _08128842 -_081288EE: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_812882C - - .align 2, 0 @ Don't pad with nop. diff --git a/ld_script.txt b/ld_script.txt index 9576947b2..ab720cdcb 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -232,7 +232,6 @@ SECTIONS { src/save.o(.text); src/mystery_event_script.o(.text); src/field_effect_helpers.o(.text); - asm/field_effect_helpers.o(.text); asm/contest_ai.o(.text); asm/battle_anim_81258BC.o(.text); src/battle_controller_safari.o(.text); diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 9914defe4..3ff5b31db 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -32,7 +32,7 @@ static void sub_81275C4(struct Sprite *); static void sub_8127DA0(struct Sprite *); static void sub_8127DD0(struct Sprite *); static void sub_8127E30(struct Sprite *); -/*static*/ void sub_812882C(struct Sprite *, u8, u8); +static void sub_812882C(struct Sprite *, u8, u8); static void sub_81278D8(struct Sprite *); static void sub_8127FD4(struct MapObject *, struct Sprite *); static void sub_812800C(struct MapObject *, struct Sprite *); @@ -1495,3 +1495,153 @@ void sub_8128800(struct Sprite *sprite) sub_806487C(sprite, FALSE); } } + +#ifdef NONMATCHING +static void sub_812882C(struct Sprite *sprite /*r6*/, u8 z, u8 offset) +{ + u8 i; + s16 xlo; + s16 xhi; + s16 lx; + s16 lyhi; + s16 ly; + s16 ylo; + s16 yhi; + struct MapObject *mapObject; // r4 + const struct MapObjectGraphicsInfo *graphicsInfo; // destroyed + struct Sprite *linkedSprite; // r5 + + SetObjectSubpriorityByZCoord(z, sprite, offset); + for (i = 0; i < 16; i ++) + { + mapObject = &gMapObjects[i]; + if (mapObject->active) + { + graphicsInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId); + linkedSprite = &gSprites[mapObject->spriteId]; + xhi = sprite->pos1.x + sprite->centerToCornerVecX; + xlo = sprite->pos1.x - sprite->centerToCornerVecX; + lx = linkedSprite->pos1.x; + if (xhi < lx && xlo > lx) + { + lyhi = linkedSprite->pos1.y + linkedSprite->centerToCornerVecY; + ly = linkedSprite->pos1.y; + ylo = sprite->pos1.y - sprite->centerToCornerVecY; + yhi = ylo + linkedSprite->centerToCornerVecY; + if ((lyhi < yhi || lyhi < ylo) && ly > yhi) + { + if (sprite->subpriority <= linkedSprite->subpriority) + { + sprite->subpriority = linkedSprite->subpriority + 2; + break; + } + } + } + } + } +} +#else +__attribute__((naked)) static void sub_812882C(struct Sprite *sprite /*r6*/, u8 z, u8 offset) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tadds r6, r0, 0\n" + "\tadds r0, r1, 0\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tlsls r2, 24\n" + "\tlsrs r2, 24\n" + "\tadds r1, r6, 0\n" + "\tbl SetObjectSubpriorityByZCoord\n" + "\tmovs r7, 0\n" + "_08128842:\n" + "\tlsls r0, r7, 3\n" + "\tadds r0, r7\n" + "\tlsls r0, 2\n" + "\tldr r1, _081288DC @ =gMapObjects\n" + "\tadds r4, r0, r1\n" + "\tldrb r0, [r4]\n" + "\tlsls r0, 31\n" + "\tcmp r0, 0\n" + "\tbeq _081288E4\n" + "\tldrb r0, [r4, 0x5]\n" + "\tbl GetFieldObjectGraphicsInfo\n" + "\tldrb r1, [r4, 0x4]\n" + "\tlsls r0, r1, 4\n" + "\tadds r0, r1\n" + "\tlsls r0, 2\n" + "\tldr r1, _081288E0 @ =gSprites\n" + "\tadds r5, r0, r1\n" + "\tadds r0, r6, 0\n" + "\tadds r0, 0x28\n" + "\tmovs r2, 0\n" + "\tldrsb r2, [r0, r2]\n" + "\tldrh r0, [r6, 0x20]\n" + "\tadds r1, r0, r2\n" + "\tsubs r0, r2\n" + "\tlsls r0, 16\n" + "\tlsrs r4, r0, 16\n" + "\tlsls r1, 16\n" + "\tasrs r1, 16\n" + "\tmovs r0, 0x20\n" + "\tldrsh r2, [r5, r0]\n" + "\tcmp r1, r2\n" + "\tbge _081288E4\n" + "\tlsls r0, r4, 16\n" + "\tasrs r0, 16\n" + "\tcmp r0, r2\n" + "\tble _081288E4\n" + "\tadds r0, r5, 0\n" + "\tadds r0, 0x29\n" + "\tmovs r3, 0\n" + "\tldrsb r3, [r0, r3]\n" + "\tldrh r2, [r5, 0x22]\n" + "\tadds r2, r3\n" + "\tldrh r4, [r5, 0x22]\n" + "\tadds r0, r6, 0\n" + "\tadds r0, 0x29\n" + "\tmovs r1, 0\n" + "\tldrsb r1, [r0, r1]\n" + "\tldrh r0, [r6, 0x22]\n" + "\tsubs r0, r1\n" + "\tlsls r0, 16\n" + "\tasrs r0, 16\n" + "\tadds r3, r0, r3\n" + "\tlsls r2, 16\n" + "\tasrs r2, 16\n" + "\tlsls r3, 16\n" + "\tasrs r3, 16\n" + "\tcmp r2, r3\n" + "\tblt _081288BC\n" + "\tcmp r2, r0\n" + "\tbge _081288E4\n" + "_081288BC:\n" + "\tlsls r0, r4, 16\n" + "\tasrs r0, 16\n" + "\tcmp r0, r3\n" + "\tble _081288E4\n" + "\tadds r2, r6, 0\n" + "\tadds r2, 0x43\n" + "\tadds r0, r5, 0\n" + "\tadds r0, 0x43\n" + "\tldrb r1, [r0]\n" + "\tldrb r0, [r2]\n" + "\tcmp r0, r1\n" + "\tbhi _081288E4\n" + "\tadds r0, r1, 0x2\n" + "\tstrb r0, [r2]\n" + "\tb _081288EE\n" + "\t.align 2, 0\n" + "_081288DC: .4byte gMapObjects\n" + "_081288E0: .4byte gSprites\n" + "_081288E4:\n" + "\tadds r0, r7, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r7, r0, 24\n" + "\tcmp r7, 0xF\n" + "\tbls _08128842\n" + "_081288EE:\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0"); +} +#endif -- cgit v1.2.3 From 23d0a78beaeca0bec24c0839c73df6eb8969fb53 Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 10 Sep 2017 13:24:58 -0400 Subject: Cleanup --- src/field_effect_helpers.c | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 3ff5b31db..1152c39bc 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -1,9 +1,3 @@ -// -// Created by scott on 9/9/2017. -// - - -// Includes #include "global.h" #include "sprite.h" #include "fieldmap.h" @@ -18,11 +12,6 @@ #include "field_ground_effect.h" #include "field_effect_helpers.h" -// Static type declarations - -// Static RAM declarations - -// Static ROM declarations static void sub_81269E0(struct Sprite *); static void npc_pal_op(struct MapObject *mapObject, struct Sprite *sprite); static void npc_pal_op_A(struct MapObject *, u8); @@ -40,8 +29,6 @@ static void sub_81280A0(struct MapObject *, struct Sprite *, struct Sprite *); static void sub_8128174(struct Sprite *); static u32 ShowDisguiseFieldEffect(u8, u8, u8); -// .rodata - const u8 UnusedEggString_8401E28[] = _("タマゴ"); const u16 gUnknown_08401E2C[] = { @@ -88,8 +75,6 @@ const u16 gUnknown_08401E5A[] = { 7 }; -// .text - void SetUpReflection(struct MapObject *mapObject, struct Sprite *sprite, bool8 flag) { struct Sprite *newSprite; @@ -114,7 +99,7 @@ void SetUpReflection(struct MapObject *mapObject, struct Sprite *sprite, bool8 f } } -s16 sub_81268D0(struct MapObject *mapObject) +static s16 sub_81268D0(struct MapObject *mapObject) { return GetFieldObjectGraphicsInfo(mapObject->graphicsId)->height - 2; } @@ -1003,7 +988,7 @@ void sub_8127F28(u8 spriteId, u8 value, s16 data1) gSprites[spriteId].data1 = data1; } -/*static*/ u8 sub_8127F5C(struct Sprite *sprite) +static u8 sub_8127F5C(struct Sprite *sprite) { return sprite->data0 & 0xF; } @@ -1013,7 +998,7 @@ static u8 sub_8127F64(struct Sprite *sprite) return (sprite->data0 & 0xF0) >> 4; } -/*static*/ u8 sub_8127F70(struct Sprite *sprite) +static u8 sub_8127F70(struct Sprite *sprite) { return (sprite->data0 & 0xF00) >> 8; } -- cgit v1.2.3 From df71c1a803e49b93dfb19cdac6cf71621d82d89a Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 10 Sep 2017 12:34:41 -0500 Subject: lots more renaming --- data/event_scripts.s | 2 +- data/specials.inc | 2 +- include/battle_setup.h | 2 +- include/map_obj_lock.h | 2 +- include/menu.h | 2 +- include/rom4.h | 8 ++--- include/script_movement.h | 4 +-- src/battle_setup.c | 2 +- src/bike.c | 2 +- src/field_effect.c | 2 +- src/field_map_obj.c | 6 ++-- src/field_special_scene.c | 6 ++-- src/field_tasks.c | 23 +++++++++---- src/map_obj_lock.c | 2 +- src/menu.c | 2 +- src/player_pc.c | 8 ++--- src/pokeblock.c | 2 +- src/pokemon_menu.c | 83 ++++++++++++++++++++++++----------------------- src/rom4.c | 78 ++++++++++++++++++++++---------------------- src/scrcmd.c | 73 +++++++++++++++++++++-------------------- src/script_movement.c | 30 +++++++++-------- src/shop.c | 10 +++--- 22 files changed, 184 insertions(+), 167 deletions(-) diff --git a/data/event_scripts.s b/data/event_scripts.s index 5e2763653..80f3cd40a 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -1040,7 +1040,7 @@ EventScript_19F8F2: waittext waitbutton reptrainerbattle - specialval RESULT, sub_8082558 + specialval RESULT, ScrSpecial_GetTrainerBattleMode compare RESULT, 0 jumpeq EventScript_19F934 compare RESULT, 2 diff --git a/data/specials.inc b/data/specials.inc index 891d2cfd7..ae2a4d8ef 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -58,7 +58,7 @@ gSpecials:: def_special FieldObjectInteractionWaterBerryTree def_special PlayerHasBerries def_special IsEnigmaBerryValid - def_special sub_8082558 + def_special ScrSpecial_GetTrainerBattleMode def_special sub_80826D8 def_special sub_8082718 def_special sub_8082564 diff --git a/include/battle_setup.h b/include/battle_setup.h index e3fa3bb88..9857092c7 100644 --- a/include/battle_setup.h +++ b/include/battle_setup.h @@ -85,7 +85,7 @@ u8 *TrainerBattleConfigure(const u8 *data); void TrainerWantsBattle(u8, u8 *); bool32 GetTrainerFlagFromScriptPointer(u8 *data); //void sub_8082524(void); -//u8 sub_8082558(void); +//u8 ScrSpecial_GetTrainerBattleMode(void); //u8 sub_8082564(void); //void sub_808257C(void); //void unref_sub_8082590(void); // unused diff --git a/include/map_obj_lock.h b/include/map_obj_lock.h index f7352be22..9fb57743e 100644 --- a/include/map_obj_lock.h +++ b/include/map_obj_lock.h @@ -7,7 +7,7 @@ bool8 sub_8064CFC(void); void ScriptFreezeMapObjects(void); void sub_8064D38(u8 taskId); bool8 sub_8064DB4(void); -void sub_8064DD8(void); +void LockSelectedMapObject(void); void sub_8064E2C(void); void unref_sub_8064E5C(void); void sub_8064EAC(void); diff --git a/include/menu.h b/include/menu.h index 24ac39762..bdf59b8f0 100644 --- a/include/menu.h +++ b/include/menu.h @@ -59,7 +59,7 @@ void sub_807274C(u8, u8, u8, u8, const struct MenuAction[], u8, u32); s8 sub_80727CC(void); u8 sub_807288C(u8); void PrintMenuItems(u8, u8, u8, const struct MenuAction[]); -void PrintMenuItemsReordered(u8 left, u8 top, u8 menuItemCount, const struct MenuAction menuItems[], const u8 *order); +void PrintMenuItemsReordered(u8 left, u8 top, u8 menuItemCount, const struct MenuAction2 menuItems[], const u8 *order); void InitYesNoMenu(u8, u8, u8); void DisplayYesNoMenu(u8, u8, u32); s8 ProcessMenuInputNoWrap_(void); diff --git a/include/rom4.h b/include/rom4.h index 74b83fa65..a319c6219 100644 --- a/include/rom4.h +++ b/include/rom4.h @@ -97,14 +97,14 @@ void sav1_set_battle_music_maybe(u16); void sav1_reset_battle_music_maybe(void); void sub_8053F0C(void); void sub_8053F84(void); -void sub_8053FB0(u16); +void ChangeMapMusic(u16); // is_warp1_light_level_8_or_9 void sub_8053FF8(void); bool8 sub_8054034(void); void sub_8054044(void); -// sub_8054050 -void sub_80540D0(s16 *, u16 *); -void sub_8054164(void); +// PlayAmbientCry +void UpdateAmbientCry(s16 *, u16 *); +void ChooseAmbientCrySpecies(void); u8 get_map_light_level_by_bank_and_number(s8 mapGroup, s8 mapNum); // get_map_light_level_from_warp u8 sav1_map_get_light_level(void); diff --git a/include/script_movement.h b/include/script_movement.h index e3cdc25b3..dc6d7e51b 100644 --- a/include/script_movement.h +++ b/include/script_movement.h @@ -1,8 +1,8 @@ #ifndef GUARD_SCRIPT_MOVEMENT_H #define GUARD_SCRIPT_MOVEMENT_H -bool8 exec_movement(u8, u8, u8, u8 *); -bool8 sub_80A212C(u8, u8, u8); +bool8 ScriptMovement_StartObjectMovementScript(u8, u8, u8, u8 *); +bool8 ScriptMovement_IsObjectMovementFinished(u8, u8, u8); void sub_80A2178(void); #endif // GUARD_SCRIPT_MOVEMENT_H diff --git a/src/battle_setup.c b/src/battle_setup.c index 4618095d3..388a08e03 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -1025,7 +1025,7 @@ void sub_8082524(void) npc_set_running_behaviour_etc(mapObject, npc_running_behaviour_by_direction(mapObject->mapobj_unk_18)); } -u8 sub_8082558(void) +u8 ScrSpecial_GetTrainerBattleMode(void) { return sTrainerBattleMode; } diff --git a/src/bike.c b/src/bike.c index 58a4f38f4..eaaf17a71 100644 --- a/src/bike.c +++ b/src/bike.c @@ -944,7 +944,7 @@ void GetOnOffBike(u8 var) { SetPlayerAvatarTransitionFlags(var); sav1_set_battle_music_maybe(BGM_CYCLING); - sub_8053FB0(BGM_CYCLING); + ChangeMapMusic(BGM_CYCLING); } } diff --git a/src/field_effect.c b/src/field_effect.c index 2f8200708..168962ca1 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -2881,7 +2881,7 @@ u8 FldEff_UseSurf(void) taskId = CreateTask(sub_8088954, 0xff); gTasks[taskId].data[15] = gFieldEffectArguments[0]; sav1_reset_battle_music_maybe(); - sub_8053FB0(0x016d); + ChangeMapMusic(0x016d); return FALSE; } diff --git a/src/field_map_obj.c b/src/field_map_obj.c index e29e17ae7..782734abe 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -8303,12 +8303,12 @@ void sub_80634A0(struct MapObject *mapObject, struct Sprite *sprite) } void sub_80634E8(struct MapObject *, struct Sprite *); -void npc_update_obj_anim_flag(struct MapObject *, struct Sprite *); +static void UpdateMapObjSpriteVisibility(struct MapObject *, struct Sprite *); void sub_80634D0(struct MapObject *mapObject, struct Sprite *sprite) { sub_80634E8(mapObject, sprite); - npc_update_obj_anim_flag(mapObject, sprite); + UpdateMapObjSpriteVisibility(mapObject, sprite); } #ifdef NONMATCHING @@ -8464,7 +8464,7 @@ _080635C0:\n\ } #endif -void npc_update_obj_anim_flag(struct MapObject *mapObject, struct Sprite *sprite) +void UpdateMapObjSpriteVisibility(struct MapObject *mapObject, struct Sprite *sprite) { sprite->invisible = 0; if (mapObject->mapobj_bit_13 || mapObject->mapobj_bit_14) diff --git a/src/field_special_scene.c b/src/field_special_scene.c index 82a7a13e3..c9b7ee363 100644 --- a/src/field_special_scene.c +++ b/src/field_special_scene.c @@ -273,7 +273,7 @@ void Task_HandlePorthole(u8 taskId) case IDLE_CHECK: // idle and move. if (gMain.newKeys & A_BUTTON) data[1] = 1; - if (!sub_80A212C(0xFF, location->mapNum, location->mapGroup)) + if (!ScriptMovement_IsObjectMovementFinished(0xFF, location->mapNum, location->mapGroup)) return; if (CountSSTidalStep(1) == TRUE) { @@ -294,12 +294,12 @@ void Task_HandlePorthole(u8 taskId) // run this once. if (*var == 2) // which direction? { - exec_movement(0xFF, location->mapNum, location->mapGroup, gUnknown_083D295F); + ScriptMovement_StartObjectMovementScript(0xFF, location->mapNum, location->mapGroup, gUnknown_083D295F); data[0] = IDLE_CHECK; // run case 1. } else { - exec_movement(0xFF, location->mapNum, location->mapGroup, gUnknown_083D2961); + ScriptMovement_StartObjectMovementScript(0xFF, location->mapNum, location->mapGroup, gUnknown_083D2961); data[0] = IDLE_CHECK; // run case 1. } break; diff --git a/src/field_tasks.c b/src/field_tasks.c index caf2ce6b9..d8c07b67d 100644 --- a/src/field_tasks.c +++ b/src/field_tasks.c @@ -48,21 +48,25 @@ void Task_RunPerStepCallback(u8 taskId) gUnknown_08376364[idx](taskId); } -static void RunTimeBasedEvents(s16 *taskData) +#define tState data[0] +#define tAmbientCryState data[1] +#define tAmbientCryDelay data[2] + +static void RunTimeBasedEvents(s16 *data) { - switch (*taskData) + switch (tState) { case 0: if (gMain.vblankCounter1 & 0x1000) { DoTimeBasedEvents(); - (*taskData)++; + tState++; } break; case 1: if (!(gMain.vblankCounter1 & 0x1000)) { - (*taskData)--; + tState--; } break; } @@ -70,14 +74,19 @@ static void RunTimeBasedEvents(s16 *taskData) void Task_RunTimeBasedEvents(u8 taskId) { - s16 *taskData = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; + if (!ScriptContext2_IsEnabled()) { - RunTimeBasedEvents(taskData); - sub_80540D0(taskData + 1, taskData + 2); + RunTimeBasedEvents(data); + UpdateAmbientCry(&tAmbientCryState, &tAmbientCryDelay); } } +#undef tState +#undef tAmbientCryState +#undef tAmbientCryDelay + void Task_MuddySlope(u8); void SetUpFieldTasks(void) diff --git a/src/map_obj_lock.c b/src/map_obj_lock.c index bd40bcacc..2856320b8 100644 --- a/src/map_obj_lock.c +++ b/src/map_obj_lock.c @@ -75,7 +75,7 @@ bool8 sub_8064DB4(void) } } -void sub_8064DD8(void) +void LockSelectedMapObject(void) { u8 taskId; FreezeMapObjectsExceptOne(gSelectedMapObject); diff --git a/src/menu.c b/src/menu.c index c2909f82f..31bafa509 100644 --- a/src/menu.c +++ b/src/menu.c @@ -571,7 +571,7 @@ void PrintMenuItems(u8 left, u8 top, u8 menuItemCount, const struct MenuAction m MenuPrint(menuItems[i].text, left, top + 2 * i); } -void PrintMenuItemsReordered(u8 left, u8 top, u8 menuItemCount, const struct MenuAction menuItems[], const u8 *order) +void PrintMenuItemsReordered(u8 left, u8 top, u8 menuItemCount, const struct MenuAction2 menuItems[], const u8 *order) { u8 i; diff --git a/src/player_pc.c b/src/player_pc.c index 6d52c560a..64e2734db 100644 --- a/src/player_pc.c +++ b/src/player_pc.c @@ -106,7 +106,7 @@ static const u8 *const gPCText_OptionDescList[] = gMenuText_GoBackToPrev }; -static const struct MenuAction2 gPCText_PlayerPCOptionsText[] = +static const struct MenuAction2 sPlayerPCMenuActions[] = { { SecretBaseText_ItemStorage, PlayerPC_ItemStorage }, { gPCText_Mailbox, PlayerPC_Mailbox }, @@ -226,7 +226,7 @@ void PlayerPC(void) static void InitPlayerPCMenu(u8 taskId) { MenuDrawTextWindow(0, 0, 10, gPcItemMenuOptionsNum * 2 + 1); - PrintMenuItemsReordered(1, 1, gPcItemMenuOptionsNum, (struct MenuAction *)gPCText_PlayerPCOptionsText, gPcItemMenuOptionOrder); + PrintMenuItemsReordered(1, 1, gPcItemMenuOptionsNum, sPlayerPCMenuActions, gPcItemMenuOptionOrder); InitMenu(0, 1, 1, gPcItemMenuOptionsNum, 0, 9); TASK.FUNC = PlayerPCProcessMenuInput; } @@ -247,13 +247,13 @@ static void PlayerPCProcessMenuInput(u8 taskId) { HandleDestroyMenuCursors(); PlaySE(SE_SELECT); - gPCText_PlayerPCOptionsText[gPcItemMenuOptionOrder[GetMenuCursorPos()]].func(taskId); + sPlayerPCMenuActions[gPcItemMenuOptionOrder[GetMenuCursorPos()]].func(taskId); } else if (gMain.newKeys & B_BUTTON) { HandleDestroyMenuCursors(); PlaySE(SE_SELECT); - gPCText_PlayerPCOptionsText[gPcItemMenuOptionsNum[gPcItemMenuOptionOrder - 1]].func(taskId); // run EXIT. + sPlayerPCMenuActions[gPcItemMenuOptionsNum[gPcItemMenuOptionOrder - 1]].func(taskId); // run EXIT. } } diff --git a/src/pokeblock.c b/src/pokeblock.c index 029bb066f..9f74a0cf4 100644 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -816,7 +816,7 @@ static void sub_810C368(u8 taskId) sub_80F98A4(1); BasicInitMenuWindow(&gWindowConfig_81E6E50); MenuDrawTextWindow(7, v0 + 4, 13, 11); - PrintMenuItemsReordered(8, v0 + 5, gUnknown_0203924C, (const struct MenuAction *)gUnknown_083F7EF4, gUnknown_03000758); + PrintMenuItemsReordered(8, v0 + 5, gUnknown_0203924C, gUnknown_083F7EF4, gUnknown_03000758); InitMenu(0, 8, v0 + 5, gUnknown_0203924C, 0, 5); gScriptItemId = gUnknown_02039248.unk0 + gUnknown_02039248.unk1; gTasks[taskId].func = sub_810C40C; diff --git a/src/pokemon_menu.c b/src/pokemon_menu.c index 0fc79f711..36144ae7c 100644 --- a/src/pokemon_menu.c +++ b/src/pokemon_menu.c @@ -121,32 +121,32 @@ void (*gUnknown_03005CE4)(void); // const data -static const struct MenuAction sPokemonMenuActions[] = -{ - {OtherText_Summary, (void*) PokemonMenu_Summary}, - {OtherText_Switch2, (void*) PokemonMenu_Switch}, - {OtherText_Item, (void*) PokemonMenu_Item}, - {gOtherText_CancelNoTerminator, (void*) PokemonMenu_Cancel}, - {OtherText_Give2, (void*) PokemonMenu_GiveItem}, - {OtherText_Take2, (void*) PokemonMenu_TakeItem}, - {OtherText_Take, (void*) PokemonMenu_TakeMail}, - {OtherText_Mail, (void*) PokemonMenu_Mail}, - {OtherText_Read2, (void*) PokemonMenu_ReadMail}, - {gOtherText_CancelNoTerminator, (void*) PokemonMenu_CancelSubmenu}, - {gMoveNames[MOVE_CUT], (void*) PokemonMenu_FieldMove}, - {gMoveNames[MOVE_FLASH], (void*) PokemonMenu_FieldMove}, - {gMoveNames[MOVE_ROCK_SMASH], (void*) PokemonMenu_FieldMove}, - {gMoveNames[MOVE_STRENGTH], (void*) PokemonMenu_FieldMove}, - {gMoveNames[MOVE_SURF], (void*) PokemonMenu_FieldMove}, - {gMoveNames[MOVE_FLY], (void*) PokemonMenu_FieldMove}, - {gMoveNames[MOVE_DIVE], (void*) PokemonMenu_FieldMove}, - {gMoveNames[MOVE_WATERFALL], (void*) PokemonMenu_FieldMove}, - {gMoveNames[MOVE_TELEPORT], (void*) PokemonMenu_FieldMove}, - {gMoveNames[MOVE_DIG], (void*) PokemonMenu_FieldMove}, - {gMoveNames[MOVE_SECRET_POWER], (void*) PokemonMenu_FieldMove}, - {gMoveNames[MOVE_MILK_DRINK], (void*) PokemonMenu_FieldMove}, - {gMoveNames[MOVE_SOFT_BOILED], (void*) PokemonMenu_FieldMove}, - {gMoveNames[MOVE_SWEET_SCENT], (void*) PokemonMenu_FieldMove}, +static const struct MenuAction2 sPokemonMenuActions[] = +{ + {OtherText_Summary, PokemonMenu_Summary}, + {OtherText_Switch2, PokemonMenu_Switch}, + {OtherText_Item, PokemonMenu_Item}, + {gOtherText_CancelNoTerminator, PokemonMenu_Cancel}, + {OtherText_Give2, PokemonMenu_GiveItem}, + {OtherText_Take2, PokemonMenu_TakeItem}, + {OtherText_Take, PokemonMenu_TakeMail}, + {OtherText_Mail, PokemonMenu_Mail}, + {OtherText_Read2, PokemonMenu_ReadMail}, + {gOtherText_CancelNoTerminator, PokemonMenu_CancelSubmenu}, + {gMoveNames[MOVE_CUT], PokemonMenu_FieldMove}, + {gMoveNames[MOVE_FLASH], PokemonMenu_FieldMove}, + {gMoveNames[MOVE_ROCK_SMASH], PokemonMenu_FieldMove}, + {gMoveNames[MOVE_STRENGTH], PokemonMenu_FieldMove}, + {gMoveNames[MOVE_SURF], PokemonMenu_FieldMove}, + {gMoveNames[MOVE_FLY], PokemonMenu_FieldMove}, + {gMoveNames[MOVE_DIVE], PokemonMenu_FieldMove}, + {gMoveNames[MOVE_WATERFALL], PokemonMenu_FieldMove}, + {gMoveNames[MOVE_TELEPORT], PokemonMenu_FieldMove}, + {gMoveNames[MOVE_DIG], PokemonMenu_FieldMove}, + {gMoveNames[MOVE_SECRET_POWER], PokemonMenu_FieldMove}, + {gMoveNames[MOVE_MILK_DRINK], PokemonMenu_FieldMove}, + {gMoveNames[MOVE_SOFT_BOILED], PokemonMenu_FieldMove}, + {gMoveNames[MOVE_SWEET_SCENT], PokemonMenu_FieldMove}, }; static const u16 sPokeMenuFieldMoves[] = @@ -227,14 +227,14 @@ static void sub_8089A8C(void) } } -static void sub_8089BDC(u8 arg0, u8 arg1, u8 arg2, u8 noOfOptions, const struct MenuAction* menuActions, const u8* order, u8 arg6) +static void sub_8089BDC(u8 arg0, u8 arg1, u8 arg2, u8 noOfOptions, const struct MenuAction2 *menuActions, const u8 *order, u8 arg6) { sub_806D538(5, arg6); MenuDrawTextWindow(arg0, arg1, arg0 + arg2, (noOfOptions * 2) + arg1 + 1); PrintMenuItemsReordered(arg0 + 1, arg1 + 1, noOfOptions, menuActions, order); } -void sub_8089C50(u8 arg0, u8 arg1, u8 arg2, u8 noOfOptions, const struct MenuAction* menuActions, const u8* order) +void sub_8089C50(u8 arg0, u8 arg1, u8 arg2, u8 noOfOptions, const struct MenuAction2 *menuActions, const u8 *order) { sub_8089BDC(arg0, arg1, arg2, noOfOptions, menuActions, order, 1); } @@ -390,7 +390,7 @@ static void sub_808A060(u8 taskID) if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); - PartyMenuGetPopupMenuFunc(0, &sUnknown_0839F578, (void*) sPokemonMenuActions, sPokeMenuCursorPos)(taskID); + PartyMenuGetPopupMenuFunc(0, &sUnknown_0839F578, (void *)sPokemonMenuActions, sPokeMenuCursorPos)(taskID); } else if (gMain.newKeys & B_BUTTON) { @@ -706,23 +706,24 @@ static void PokemonMenu_CancelSubmenu(u8 taskID) #define IS_SURF(ID)((ID == (POKEMENU_SURF - POKEMENU_FIRST_FIELD_MOVE_ID))) #define IS_FLY(ID)((ID == (POKEMENU_FLY - POKEMENU_FIRST_FIELD_MOVE_ID))) -#define TASK_FIELD_MOVE_ID 11 +#define tFieldMoveId data[11] static void PokemonMenu_FieldMove(u8 taskID) { - s16* taskData = gTasks[taskID].data; + s16* data = gTasks[taskID].data; + HandleDestroyMenuCursors(); - taskData[TASK_FIELD_MOVE_ID] = sPokeMenuOptionsOrder[sPokeMenuCursorPos] - POKEMENU_FIRST_FIELD_MOVE_ID; + tFieldMoveId = sPokeMenuOptionsOrder[sPokeMenuCursorPos] - POKEMENU_FIRST_FIELD_MOVE_ID; if (sub_80F9344() == TRUE) { MenuZeroFillWindowRect(19, 0, 29, 19); - if (IS_SOFTBOILED_MILKDRINK(taskData[TASK_FIELD_MOVE_ID])) + if (IS_SOFTBOILED_MILKDRINK(tFieldMoveId)) sub_806D538(9, 0); else - sub_806D538(sFieldMoveFuncs[taskData[TASK_FIELD_MOVE_ID]].field_1, 0); + sub_806D538(sFieldMoveFuncs[tFieldMoveId].field_1, 0); gTasks[taskID].func = sub_808ABF4; } - else if (taskData[TASK_FIELD_MOVE_ID] <= 7 && FlagGet(BADGE01_GET + taskData[TASK_FIELD_MOVE_ID]) != TRUE) + else if (tFieldMoveId <= 7 && FlagGet(BADGE01_GET + tFieldMoveId) != TRUE) { // can't use a field HM move without a proper badge MenuZeroFillWindowRect(19, 0, 29, 19); @@ -732,10 +733,10 @@ static void PokemonMenu_FieldMove(u8 taskID) } else { - if (sFieldMoveFuncs[taskData[TASK_FIELD_MOVE_ID]].func() == TRUE) + if (sFieldMoveFuncs[tFieldMoveId].func() == TRUE) { sPokeMenuCursorPos = 0; - if (!IS_SOFTBOILED_MILKDRINK(taskData[TASK_FIELD_MOVE_ID])) + if (!IS_SOFTBOILED_MILKDRINK(tFieldMoveId)) { gTasks[taskID].func = sub_808AB34; BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); @@ -746,10 +747,10 @@ static void PokemonMenu_FieldMove(u8 taskID) else { MenuZeroFillWindowRect(19, 0, 29, 19); - if (IS_SURF(taskData[TASK_FIELD_MOVE_ID]) && TestPlayerAvatarFlags(8)) + if (IS_SURF(tFieldMoveId) && TestPlayerAvatarFlags(8)) sub_806D538(8, 0); else - sub_806D538(sFieldMoveFuncs[taskData[TASK_FIELD_MOVE_ID]].field_1, 0); + sub_806D538(sFieldMoveFuncs[tFieldMoveId].field_1, 0); gTasks[taskID].func = sub_808ABF4; } } @@ -768,7 +769,7 @@ static void sub_808AB34(u8 taskID) { if (!gPaletteFade.active) { - if (!IS_FLY(gTasks[taskID].data[TASK_FIELD_MOVE_ID]) || ShouldDoBrailleFlyEffect()) + if (!IS_FLY(gTasks[taskID].tFieldMoveId) || ShouldDoBrailleFlyEffect()) SetMainCallback2(c2_exit_to_overworld_2_switch); else SetMainCallback2(CB2_InitFlyRegionMap); @@ -776,6 +777,8 @@ static void sub_808AB34(u8 taskID) } } +#undef tFieldMoveId + void sub_808AB90(void) { pal_fill_black(); diff --git a/src/rom4.c b/src/rom4.c index fd0cdbcde..69faec2ca 100644 --- a/src/rom4.c +++ b/src/rom4.c @@ -40,6 +40,7 @@ #include "secret_base.h" #include "songs.h" #include "sound.h" +#include "species.h" #include "start_menu.h" #include "task.h" #include "tileset_anim.h" @@ -65,8 +66,8 @@ EWRAM_DATA struct WarpData gUnknown_020297F8 = {0}; EWRAM_DATA struct WarpData gUnknown_02029800 = {0}; EWRAM_DATA struct WarpData gUnknown_02029808 = {0}; EWRAM_DATA struct UnkPlayerStruct gUnknown_02029810 = {0}; -EWRAM_DATA u16 gUnknown_02029814 = 0; -EWRAM_DATA bool8 gUnknown_02029816 = FALSE; +EWRAM_DATA static u16 sAmbientCrySpecies = 0; +EWRAM_DATA static bool8 sIsAmbientCryWaterMon = FALSE; EWRAM_DATA struct LinkPlayerMapObject gLinkPlayerMapObjects[4] = {0}; static u8 gUnknown_03000580[4]; @@ -132,6 +133,7 @@ void flag_var_implications_of_teleport_(void) FlagReset(SYS_USE_FLASH); } +// not new_game void new_game(void) { player_avatar_init_params_reset(); @@ -166,7 +168,7 @@ void sub_8053050(void) void sub_805308C(void) { FlagReset(SYS_SAFARI_MODE); - sub_8054164(); + ChooseAmbientCrySpecies(); ResetCyclingRoadChallengeData(); UpdateLocationHistoryForRoamer(); RoamerMoveToOtherLocationSet(); @@ -301,31 +303,27 @@ bool32 warp_data_is_not_neg_1(struct WarpData *warp) return TRUE; } -struct MapHeader * const get_mapheader_by_bank_and_number(u16 mapGroup, u16 mapNum) +struct MapHeader *const get_mapheader_by_bank_and_number(u16 mapGroup, u16 mapNum) { return gMapGroups[mapGroup][mapNum]; } -struct MapHeader * const warp1_get_mapheader(void) +struct MapHeader *const warp1_get_mapheader(void) { return get_mapheader_by_bank_and_number(gUnknown_020297F8.mapGroup, gUnknown_020297F8.mapNum); } void set_current_map_header_from_sav1_save_old_name(void) { - struct MapHeader *dest = &gMapHeader; - struct MapHeader *src = get_mapheader_by_bank_and_number(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum); - *dest = *src; - gSaveBlock1.mapDataId = dest->mapDataId; - dest->mapData = get_mapdata_header(); + gMapHeader = *get_mapheader_by_bank_and_number(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum); + gSaveBlock1.mapDataId = gMapHeader.mapDataId; + gMapHeader.mapData = get_mapdata_header(); } void sub_805338C(void) { - struct MapHeader *dest = &gMapHeader; - struct MapHeader *src = get_mapheader_by_bank_and_number(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum); - *dest = *src; - dest->mapData = get_mapdata_header(); + gMapHeader = *get_mapheader_by_bank_and_number(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum); + gMapHeader.mapData = get_mapdata_header(); } void sub_80533CC(void) @@ -523,7 +521,7 @@ void sub_80538F0(u8 mapGroup, u8 mapNum) sub_8082BD0(mapGroup, mapNum); DoTimeBasedEvents(); sub_80806E4(); - sub_8054164(); + ChooseAmbientCrySpecies(); sub_8053C98(); sav1_reset_battle_music_maybe(); mapheader_run_script_with_tag_x3(); @@ -559,7 +557,7 @@ void sub_8053994(u32 a1) if (a1 != 1) DoTimeBasedEvents(); sub_80806E4(); - sub_8054164(); + ChooseAmbientCrySpecies(); if (v2) FlagReset(SYS_USE_FLASH); sub_8053C98(); @@ -854,11 +852,11 @@ void sub_8053F84(void) FadeOutAndPlayNewMapMusic(sav1_map_get_music(), 8); } -void sub_8053FB0(u16 music) +void ChangeMapMusic(u16 newMusic) { u16 currentMusic = GetCurrentMapMusic(); - if (currentMusic != music && currentMusic != LEGENDARY_MUSIC) - FadeOutAndPlayNewMapMusic(music, 8); + if (currentMusic != newMusic && currentMusic != LEGENDARY_MUSIC) + FadeOutAndPlayNewMapMusic(newMusic, 8); } u8 is_warp1_light_level_8_or_9(void) @@ -890,43 +888,43 @@ void sub_8054044(void) FadeOutMapMusic(4); } -void sub_8054050(void) +static void PlayAmbientCry(void) { s16 x, y; - PlayerGetDestCoords((u16 *)&x, (u16 *)&y); - if (gUnknown_02029816 != TRUE + PlayerGetDestCoords(&x, &y); + if (sIsAmbientCryWaterMon != TRUE || MetatileBehavior_IsSurfableWaterOrUnderwater(MapGridGetMetatileBehaviorAt(x, y))) { s8 pan = (Random() % 88) + 212; s8 volume = (Random() % 30) + 50; - PlayCry2(gUnknown_02029814, pan, volume, 1); + PlayCry2(sAmbientCrySpecies, pan, volume, 1); } } -void sub_80540D0(s16 *a1, u16 *a2) +void UpdateAmbientCry(s16 *state, u16 *delayCounter) { - switch (*a1) + switch (*state) { case 0: - if (!gUnknown_02029814) - *a1 = 4; + if (sAmbientCrySpecies == SPECIES_NONE) + *state = 4; else - *a1 = 1; + *state = 1; break; case 1: - *a2 = (Random() % 2400) + 1200; - *a1 = 3; + *delayCounter = (Random() % 2400) + 1200; + *state = 3; break; case 2: - *a2 = (Random() % 1200) + 1200; - *a1 = 3; + *delayCounter = (Random() % 1200) + 1200; + *state = 3; break; case 3: - (*a2)--; - if (*a2 == 0) + (*delayCounter)--; + if (*delayCounter == 0) { - sub_8054050(); - *a1 = 2; + PlayAmbientCry(); + *state = 2; } break; case 4: @@ -934,16 +932,16 @@ void sub_80540D0(s16 *a1, u16 *a2) } } -void sub_8054164(void) +void ChooseAmbientCrySpecies(void) { if ((gSaveBlock1.location.mapGroup == 0 && gSaveBlock1.location.mapNum == 45) && !IsMirageIslandPresent()) { - gUnknown_02029816 = TRUE; - gUnknown_02029814 = GetMirageIslandMon(); + sIsAmbientCryWaterMon = TRUE; + sAmbientCrySpecies = GetMirageIslandMon(); } else { - gUnknown_02029814 = GetLocalWildMon(&gUnknown_02029816); + sAmbientCrySpecies = GetLocalWildMon(&sIsAmbientCryWaterMon); } } diff --git a/src/scrcmd.c b/src/scrcmd.c index 64ec485ce..1cacb7348 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -815,7 +815,7 @@ bool8 ScrCmd_playsfx(struct ScriptContext *ctx) return FALSE; } -bool8 s30_music_check_asm() +static bool8 WaitForSoundEffectFinish() { if (!IsSEPlaying()) return TRUE; @@ -825,7 +825,7 @@ bool8 s30_music_check_asm() bool8 ScrCmd_checksound(struct ScriptContext *ctx) { - SetupNativeScript(ctx, s30_music_check_asm); + SetupNativeScript(ctx, WaitForSoundEffectFinish); return TRUE; } @@ -835,14 +835,14 @@ bool8 ScrCmd_fanfare(struct ScriptContext *ctx) return FALSE; } -bool8 s32_fanfare_wait_asm() +static bool8 WaitForFanfareFinish() { return IsFanfareTaskInactive(); } bool8 ScrCmd_waitfanfare(struct ScriptContext *ctx) { - SetupNativeScript(ctx, s32_fanfare_wait_asm); + SetupNativeScript(ctx, WaitForFanfareFinish); return TRUE; } @@ -870,15 +870,15 @@ bool8 ScrCmd_fadedefault(struct ScriptContext *ctx) bool8 ScrCmd_fademusic(struct ScriptContext *ctx) { - sub_8053FB0(ScriptReadHalfword(ctx)); + ChangeMapMusic(ScriptReadHalfword(ctx)); return FALSE; } bool8 ScrCmd_fadeout(struct ScriptContext *ctx) { - u8 val = ScriptReadByte(ctx); - if (val) - FadeOutBGMTemporarily(4 * val); + u8 speed = ScriptReadByte(ctx); + if (speed != 0) + FadeOutBGMTemporarily(4 * speed); else FadeOutBGMTemporarily(4); SetupNativeScript(ctx, IsBGMPausedOrStopped); @@ -887,9 +887,9 @@ bool8 ScrCmd_fadeout(struct ScriptContext *ctx) bool8 ScrCmd_fadein(struct ScriptContext *ctx) { - u8 val = ScriptReadByte(ctx); - if (val) - FadeInBGM(4 * val); + u8 speed = ScriptReadByte(ctx); + if (speed != 0) + FadeInBGM(4 * speed); else FadeInBGM(4); return FALSE; @@ -897,53 +897,56 @@ bool8 ScrCmd_fadein(struct ScriptContext *ctx) bool8 ScrCmd_move(struct ScriptContext *ctx) { - u16 v1 = VarGet(ScriptReadHalfword(ctx)); - void *v2 = (void *)ScriptReadWord(ctx); - exec_movement(v1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, v2); - sMovingNpcId = v1; + u16 localId = VarGet(ScriptReadHalfword(ctx)); + void *movementScript = (void *)ScriptReadWord(ctx); + + ScriptMovement_StartObjectMovementScript(localId, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, movementScript); + sMovingNpcId = localId; return FALSE; } bool8 ScrCmd_movecoords(struct ScriptContext *ctx) { - u16 v1 = VarGet(ScriptReadHalfword(ctx)); - void *v2 = (void *)ScriptReadWord(ctx); - u8 v3 = ScriptReadByte(ctx); - u8 v4 = ScriptReadByte(ctx); - exec_movement(v1, v4, v3, v2); - sMovingNpcId = v1; + u16 localId = VarGet(ScriptReadHalfword(ctx)); + void *movementScript = (void *)ScriptReadWord(ctx); + u8 mapGroup = ScriptReadByte(ctx); + u8 mapNum = ScriptReadByte(ctx); + + ScriptMovement_StartObjectMovementScript(localId, mapNum, mapGroup, movementScript); + sMovingNpcId = localId; return FALSE; } -bool8 s51a_0806B288(void) +static bool8 WaitForMovementFinish(void) { - return sub_80A212C(sMovingNpcId, sMovingNpcMapId, sMovingNpcMapBank); + return ScriptMovement_IsObjectMovementFinished(sMovingNpcId, sMovingNpcMapId, sMovingNpcMapBank); } bool8 ScrCmd_waitmove(struct ScriptContext *ctx) { - u16 v1 = VarGet(ScriptReadHalfword(ctx)); - if (v1) - sMovingNpcId = v1; + u16 localId = VarGet(ScriptReadHalfword(ctx)); + + if (localId != 0) + sMovingNpcId = localId; sMovingNpcMapBank = gSaveBlock1.location.mapGroup; sMovingNpcMapId = gSaveBlock1.location.mapNum; - SetupNativeScript(ctx, s51a_0806B288); + SetupNativeScript(ctx, WaitForMovementFinish); return TRUE; } bool8 ScrCmd_waitmovexy(struct ScriptContext *ctx) { - u16 v1 = VarGet(ScriptReadHalfword(ctx)); + u16 localId = VarGet(ScriptReadHalfword(ctx)); u8 mapBank; u8 mapId; - if (v1 != 0) - sMovingNpcId = v1; + if (localId != 0) + sMovingNpcId = localId; mapBank = ScriptReadByte(ctx); mapId = ScriptReadByte(ctx); sMovingNpcMapBank = mapBank; sMovingNpcMapId = mapId; - SetupNativeScript(ctx, s51a_0806B288); + SetupNativeScript(ctx, WaitForMovementFinish); return TRUE; } @@ -1053,9 +1056,9 @@ bool8 ScrCmd_faceplayer(struct ScriptContext *ctx) bool8 ScrCmd_spriteface(struct ScriptContext *ctx) { - u16 v1 = VarGet(ScriptReadHalfword(ctx)); - u8 v2 = ScriptReadByte(ctx); - FieldObjectTurnByLocalIdAndMap(v1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, v2); + u16 localId = VarGet(ScriptReadHalfword(ctx)); + u8 direction = ScriptReadByte(ctx); + FieldObjectTurnByLocalIdAndMap(localId, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, direction); return FALSE; } @@ -1111,7 +1114,7 @@ bool8 ScrCmd_lock(struct ScriptContext *ctx) { if (gMapObjects[gSelectedMapObject].active) { - sub_8064DD8(); + LockSelectedMapObject(); SetupNativeScript(ctx, sub_8064DB4); } else diff --git a/src/script_movement.c b/src/script_movement.c index c4380e73f..30e10b451 100644 --- a/src/script_movement.c +++ b/src/script_movement.c @@ -17,18 +17,18 @@ static void UnfreezeObjects(u8); static void Task_80A244C(u8); static void sub_80A2490(u8, u8, u8, u8 *); -bool8 exec_movement(u8 a, u8 b, u8 c, u8 *d) +bool8 ScriptMovement_StartObjectMovementScript(u8 localId, u8 mapNum, u8 mapGroup, u8 *movementScript) { u8 mapObjId; - if (TryGetFieldObjectIdByLocalIdAndMap(a, b, c, &mapObjId)) + if (TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjId)) return TRUE; if (!FuncIsActiveTask(Task_80A244C)) sub_80A2198(50); - return sub_80A21F4(sub_80A21E0(), mapObjId, d); + return sub_80A21F4(sub_80A21E0(), mapObjId, movementScript); } -bool8 sub_80A212C(u8 localId, u8 mapNum, u8 mapBank) +bool8 ScriptMovement_IsObjectMovementFinished(u8 localId, u8 mapNum, u8 mapBank) { u8 mapObjId; u8 r4; @@ -70,27 +70,31 @@ static u8 sub_80A21E0(void) return FindTaskIdByFunc(Task_80A244C); } -static bool8 sub_80A21F4(u8 taskId, u8 b, u8 *c) +static bool8 sub_80A21F4(u8 taskId, u8 mapObjId, u8 *movementScript) { u8 r4; - r4 = sub_80A2260(taskId, b); + r4 = sub_80A2260(taskId, mapObjId); if (r4 != 16) { if (sub_80A2370(taskId, r4) == 0) + { return TRUE; + } else { - sub_80A23C8(taskId, r4, b, c); + sub_80A23C8(taskId, r4, mapObjId, movementScript); return FALSE; } } r4 = sub_80A2260(taskId, 0xFF); if (r4 == 16) + { return TRUE; + } else { - sub_80A23C8(taskId, r4, b, c); + sub_80A23C8(taskId, r4, mapObjId, movementScript); return FALSE; } } @@ -156,9 +160,9 @@ static bool8 sub_80A2370(u8 taskId, u8 b) return FALSE; } -static void npc_obj_offscreen_culling_and_flag_update(u8 a, u8 *b) +static void npc_obj_offscreen_culling_and_flag_update(u8 a, u8 *movementScript) { - gUnknown_020384F8[a] = b; + gUnknown_020384F8[a] = movementScript; } static u8 *sub_80A23B8(u8 a) @@ -166,11 +170,11 @@ static u8 *sub_80A23B8(u8 a) return gUnknown_020384F8[a]; } -static void sub_80A23C8(u8 taskId, u8 b, u8 c, u8 *d) +static void sub_80A23C8(u8 taskId, u8 b, u8 mapObjId, u8 *movementScript) { sub_80A2318(taskId, b); - npc_obj_offscreen_culling_and_flag_update(b, d); - sub_80A22D0(taskId, b, c); + npc_obj_offscreen_culling_and_flag_update(b, movementScript); + sub_80A22D0(taskId, b, mapObjId); } static void UnfreezeObjects(u8 taskId) diff --git a/src/shop.c b/src/shop.c index 9ec79aef6..10c530a45 100644 --- a/src/shop.c +++ b/src/shop.c @@ -60,7 +60,7 @@ EWRAM_DATA u8 gUnknown_02038730 = 0; EWRAM_DATA u8 gUnknown_02038731 = 0; // rodata -static const struct MenuAction2 gUnknown_083CC6D0[] = +static const struct MenuAction2 sBuySellQuitMenuActions[] = { { MartText_Buy, sub_80B2EFC }, { MartText_Sell, sub_80B2F30 }, @@ -88,13 +88,13 @@ u8 CreateShopMenu(u8 martType) { gMartInfo.numChoices = 2; MenuDrawTextWindow(0, 0, 10, 7); - PrintMenuItemsReordered(1, 1, 3, (struct MenuAction *)gUnknown_083CC6D0, (u8 *)gUnknown_083CC6E8); + PrintMenuItemsReordered(1, 1, 3, sBuySellQuitMenuActions, gUnknown_083CC6E8); } else { gMartInfo.numChoices = 1; MenuDrawTextWindow(0, 0, 10, 5); - PrintMenuItemsReordered(1, 1, 2, (struct MenuAction *)gUnknown_083CC6D0, (u8 *)gUnknown_083CC6EB); + PrintMenuItemsReordered(1, 1, 2, sBuySellQuitMenuActions, gUnknown_083CC6EB); } InitMenu(0, 1, 1, gMartInfo.numChoices + 1, 0, 9); // add 1 for cancel @@ -145,11 +145,11 @@ void sub_80B2E38(u8 var) PlaySE(SE_SELECT); if (gMartInfo.martType == MART_TYPE_0) { - gUnknown_083CC6D0[gUnknown_083CC6E8[gMartInfo.cursor]].func(local); + sBuySellQuitMenuActions[gUnknown_083CC6E8[gMartInfo.cursor]].func(local); } else { - gUnknown_083CC6D0[gUnknown_083CC6EB[gMartInfo.cursor]].func(local); + sBuySellQuitMenuActions[gUnknown_083CC6EB[gMartInfo.cursor]].func(local); } } else if (gMain.newKeys & B_BUTTON) -- cgit v1.2.3 From 7d9eef40114229536197afc427212807258e6ebf Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 10 Sep 2017 13:01:17 -0500 Subject: fix German build --- data-de/event_scripts.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data-de/event_scripts.s b/data-de/event_scripts.s index 9f6b77e5a..a418c658d 100644 --- a/data-de/event_scripts.s +++ b/data-de/event_scripts.s @@ -1041,7 +1041,7 @@ EventScript_19F8F2: waittext waitbutton reptrainerbattle - specialval RESULT, sub_8082558 + specialval RESULT, ScrSpecial_GetTrainerBattleMode compare RESULT, 0 jumpeq EventScript_19F934 compare RESULT, 2 -- cgit v1.2.3 From 039934e05e0eff4fda75d51c03b877497fd988da Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 10 Sep 2017 15:39:52 -0400 Subject: Fix nonmatching UpdateFieldObjectCoordsForCameraUpdate --- src/field_map_obj.c | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/src/field_map_obj.c b/src/field_map_obj.c index dc72981bb..479e4bfde 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -2986,24 +2986,21 @@ void UpdateFieldObjectCoordsForCameraUpdate(void) s16 deltaX; s16 deltaY; -#ifndef NONMATCHING - asm(""::"r"(i)); //makes the compiler store i in r3 -#endif - if (gCamera.field_0) { - for (i = 0, deltaX = gCamera.x, deltaY = gCamera.y; i < 16; i++) + deltaX = gCamera.x; + deltaY = gCamera.y; + for (i = 0; i < 16; i++) { - struct MapObject *mapObject = &gMapObjects[i]; - if (mapObject->active) + if (gMapObjects[i].active) { - mapObject->coords1.x -= deltaX; - mapObject->coords1.y -= deltaY; - mapObject->coords2.x -= deltaX; - mapObject->coords2.y -= deltaY; - mapObject->coords3.x -= deltaX; - mapObject->coords3.y -= deltaY; + gMapObjects[i].coords1.x -= deltaX; + gMapObjects[i].coords1.y -= deltaY; + gMapObjects[i].coords2.x -= deltaX; + gMapObjects[i].coords2.y -= deltaY; + gMapObjects[i].coords3.x -= deltaX; + gMapObjects[i].coords3.y -= deltaY; } } } -- cgit v1.2.3 From 6f9ad223a51eab0a2d39296c963486689392d0b5 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 10 Sep 2017 16:21:30 -0500 Subject: stuff --- asm/battle_tower.s | 4 +- asm/pokenav.s | 4 +- data/event_scripts.s | 24 +- data/scripts/maps/AncientTomb.inc | 2 +- data/scripts/maps/CaveOfOrigin_B4F.inc | 2 +- data/scripts/maps/DesertRuins.inc | 2 +- data/scripts/maps/IslandCave.inc | 2 +- data/scripts/maps/PetalburgCity.inc | 2 +- data/scripts/maps/SkyPillar_Top.inc | 2 +- data/scripts/maps/SouthernIsland_Interior.inc | 2 +- data/specials.inc | 22 +- data/trainer_see.s | 41 ---- include/battle_setup.h | 58 ++--- include/trainer_see.h | 20 +- ld_script.txt | 1 + src/battle_2.c | 4 +- src/battle_setup.c | 250 +++++++++++--------- src/field_map_obj.c | 64 ++--- src/scrcmd.c | 6 +- src/trainer_see.c | 322 +++++++++++++++----------- src/wild_encounter.c | 20 +- 21 files changed, 415 insertions(+), 439 deletions(-) diff --git a/asm/battle_tower.s b/asm/battle_tower.s index a9d52d597..65fbd0c05 100644 --- a/asm/battle_tower.s +++ b/asm/battle_tower.s @@ -2163,7 +2163,7 @@ _081355D6: bl CreateTask movs r0, 0 bl current_map_music_set__default_for_battle - bl GetBattleTowerBattleTransition + bl BattleSetup_GetBattleTowerBattleTransition lsls r0, 24 lsrs r0, 24 bl BattleTransition_StartOnField @@ -2200,7 +2200,7 @@ _08135606: bl CreateTask movs r0, 0 bl current_map_music_set__default_for_battle - bl GetBattleTowerBattleTransition + bl BattleSetup_GetBattleTowerBattleTransition lsls r0, 24 lsrs r0, 24 bl BattleTransition_StartOnField diff --git a/asm/pokenav.s b/asm/pokenav.s index cb6a40450..ea8031cd3 100644 --- a/asm/pokenav.s +++ b/asm/pokenav.s @@ -22370,7 +22370,7 @@ _080F6C3A: adds r6, r0, r1 ldrh r7, [r6] adds r0, r7, 0 - bl trainer_flag_check + bl HasTrainerAlreadyBeenFought lsls r0, 24 cmp r0, 0 beq _080F6CA0 @@ -22431,7 +22431,7 @@ _080F6CB4: adds r5, r0, r1 ldrh r4, [r5] adds r0, r4, 0 - bl trainer_flag_check + bl HasTrainerAlreadyBeenFought lsls r0, 24 cmp r0, 0 beq _080F6D0E diff --git a/data/event_scripts.s b/data/event_scripts.s index 80f3cd40a..2d0b1b4fe 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -931,7 +931,7 @@ SecretBase_RedCave1_EventScript_19F806:: @ 819F806 gUnknown_0819F80B:: @ 819F80B lock special PlayTrainerEncounterMusic - special sub_80847C8 + special ScrSpecial_EndTrainerApproach waitstate jump EventScript_19F8F2 @@ -940,7 +940,7 @@ gUnknown_0819F818:: @ 819F818 faceplayer move LAST_TALKED, Movement_19F8F0 waitmove 0 - specialval RESULT, sub_8082564 + specialval RESULT, ScrSpecial_HasTrainerBeenFought compare RESULT, 0 jumpif 5, EventScript_19F83F special PlayTrainerEncounterMusic @@ -954,7 +954,7 @@ gUnknown_0819F840:: @ 819F840 lock faceplayer call EventScript_19F8E5 - specialval RESULT, sub_8082564 + specialval RESULT, ScrSpecial_HasTrainerBeenFought compare RESULT, 0 jumpif 5, EventScript_19F877 special CheckForAlivePartyMons @@ -965,7 +965,7 @@ gUnknown_0819F840:: @ 819F840 jump EventScript_19F8F2 EventScript_19F870: - special sub_8082718 + special ScrSpecial_ShowTrainerNonBattlingSpeech waittext waitbutton release @@ -983,15 +983,15 @@ gUnknown_0819F878:: @ 819F878 gUnknown_0819F887:: @ 819F887 call EventScript_19F8E5 - specialval RESULT, sub_8082C9C + specialval RESULT, ScrSpecial_GetTrainerEyeRematchFlag compare RESULT, 0 jumpeq EventScript_19F8AD special PlayTrainerEncounterMusic special sub_8082524 - special sub_80826D8 + special ScrSpecial_ShowTrainerIntroSpeech waittext waitbutton - special sub_80826B0 + special ScrSpecial_StartTrainerEyeRematch waitstate releaseall end @@ -1000,7 +1000,7 @@ EventScript_19F8AD: endtrainerbattle gUnknown_0819F8AE:: @ 819F8AE - specialval RESULT, sub_8082C9C + specialval RESULT, ScrSpecial_GetTrainerEyeRematchFlag compare RESULT, 0 jumpeq EventScript_19F8DD special CheckForAlivePartyMons @@ -1008,10 +1008,10 @@ gUnknown_0819F8AE:: @ 819F8AE jumpif 5, EventScript_19F8DE special PlayTrainerEncounterMusic special sub_8082524 - special sub_80826D8 + special ScrSpecial_ShowTrainerIntroSpeech waittext waitbutton - special sub_80826B0 + special ScrSpecial_StartTrainerEyeRematch waitstate releaseall end @@ -1020,7 +1020,7 @@ EventScript_19F8DD: endtrainerbattle EventScript_19F8DE: - special sub_8082718 + special ScrSpecial_ShowTrainerNonBattlingSpeech waittext waitbutton release @@ -1036,7 +1036,7 @@ Movement_19F8F0:: step_end EventScript_19F8F2: - special sub_80826D8 + special ScrSpecial_ShowTrainerIntroSpeech waittext waitbutton reptrainerbattle diff --git a/data/scripts/maps/AncientTomb.inc b/data/scripts/maps/AncientTomb.inc index 7ba7540c4..bfc5b6a79 100644 --- a/data/scripts/maps/AncientTomb.inc +++ b/data/scripts/maps/AncientTomb.inc @@ -64,7 +64,7 @@ AncientTomb_EventScript_15F050:: @ 815F050 setwildbattle SPECIES_REGISTEEL, 40, ITEM_NONE setflag 937 setflag 2145 - special StartBattle_Regi + special ScrSpecial_StartRegiBattle waitstate clearflag 2145 release diff --git a/data/scripts/maps/CaveOfOrigin_B4F.inc b/data/scripts/maps/CaveOfOrigin_B4F.inc index 023892d36..5517a9c7e 100644 --- a/data/scripts/maps/CaveOfOrigin_B4F.inc +++ b/data/scripts/maps/CaveOfOrigin_B4F.inc @@ -62,7 +62,7 @@ CaveOfOrigin_B4F_EventScript_15DDD7:: @ 815DDD7 pause 40 waitpokecry setflag 2145 - special StartBattle_GroudonKyogre + special ScrSpecial_StartGroudonKyogreBattle waitstate clearflag 2145 specialval RESULT, sub_810E300 diff --git a/data/scripts/maps/DesertRuins.inc b/data/scripts/maps/DesertRuins.inc index df40fc126..97a22bae3 100644 --- a/data/scripts/maps/DesertRuins.inc +++ b/data/scripts/maps/DesertRuins.inc @@ -64,7 +64,7 @@ DesertRuins_EventScript_15CB85:: @ 815CB85 setwildbattle SPECIES_REGIROCK, 40, ITEM_NONE setflag 935 setflag 2145 - special StartBattle_Regi + special ScrSpecial_StartRegiBattle waitstate clearflag 2145 release diff --git a/data/scripts/maps/IslandCave.inc b/data/scripts/maps/IslandCave.inc index b16f386d8..8f2ce6dc1 100644 --- a/data/scripts/maps/IslandCave.inc +++ b/data/scripts/maps/IslandCave.inc @@ -84,7 +84,7 @@ IslandCave_EventScript_15EF9D:: @ 815EF9D setwildbattle SPECIES_REGICE, 40, ITEM_NONE setflag 936 setflag 2145 - special StartBattle_Regi + special ScrSpecial_StartRegiBattle waitstate clearflag 2145 release diff --git a/data/scripts/maps/PetalburgCity.inc b/data/scripts/maps/PetalburgCity.inc index dc5efe243..123b099fe 100644 --- a/data/scripts/maps/PetalburgCity.inc +++ b/data/scripts/maps/PetalburgCity.inc @@ -32,7 +32,7 @@ PetalburgCity_EventScript_14B747:: @ 814B747 move 255, PetalburgCity_Movement_14B7CC waitmove 0 msgbox PetalburgCity_Text_16D361, 4 - special StartBattle_WallyTutorial + special ScrSpecial_StartWallyTutorialBattle waitstate msgbox PetalburgCity_Text_16D3DE, 4 movecoords 2, PetalburgCity_Movement_1A083F, 0, 0 diff --git a/data/scripts/maps/SkyPillar_Top.inc b/data/scripts/maps/SkyPillar_Top.inc index 23db6a8ea..d659a23c1 100644 --- a/data/scripts/maps/SkyPillar_Top.inc +++ b/data/scripts/maps/SkyPillar_Top.inc @@ -21,7 +21,7 @@ SkyPillar_Top_EventScript_15F316:: @ 815F316 waitpokecry setflag 773 setflag 2145 - special StartBattle_Rayquaza + special ScrSpecial_StartRayquazaBattle waitstate clearflag 2145 release diff --git a/data/scripts/maps/SouthernIsland_Interior.inc b/data/scripts/maps/SouthernIsland_Interior.inc index 3adf3545f..e5eaadab5 100644 --- a/data/scripts/maps/SouthernIsland_Interior.inc +++ b/data/scripts/maps/SouthernIsland_Interior.inc @@ -67,7 +67,7 @@ SouthernIsland_Interior_EventScript_160BA7:: @ 8160BA7 setwildbattle SPECIES_LATIAS_OR_LATIOS, 50, ITEM_SOUL_DEW setflag 911 setflag 2145 - special StartBattle_SouthernIsland + special ScrSpecial_StartSouthernIslandBattle waitstate clearflag 2145 releaseall diff --git a/data/specials.inc b/data/specials.inc index ae2a4d8ef..99a4a218c 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -59,14 +59,14 @@ gSpecials:: def_special PlayerHasBerries def_special IsEnigmaBerryValid def_special ScrSpecial_GetTrainerBattleMode - def_special sub_80826D8 - def_special sub_8082718 - def_special sub_8082564 - def_special sub_80847C8 + def_special ScrSpecial_ShowTrainerIntroSpeech + def_special ScrSpecial_ShowTrainerNonBattlingSpeech + def_special ScrSpecial_HasTrainerBeenFought + def_special ScrSpecial_EndTrainerApproach def_special PlayTrainerEncounterMusic def_special sub_8082C68 - def_special sub_8082C9C - def_special sub_80826B0 + def_special ScrSpecial_GetTrainerEyeRematchFlag + def_special ScrSpecial_StartTrainerEyeRematch def_special ShowPokemonStorageSystem def_special CheckForAlivePartyMons def_special TurnOffTVScreen @@ -164,7 +164,7 @@ gSpecials:: def_special StartWallClock def_special sub_810D6B8 def_special ScrSpecial_ChooseStarter - def_special StartBattle_WallyTutorial + def_special ScrSpecial_StartWallyTutorialBattle def_special sub_80BF9F8 def_special sub_80F9A0C def_special sub_810CA00 @@ -318,9 +318,9 @@ gSpecials:: def_special IsPokerusInParty def_special sub_8069D78 def_special sub_810F758 - def_special StartBattle_GroudonKyogre - def_special StartBattle_Rayquaza - def_special StartBattle_Regi + def_special ScrSpecial_StartGroudonKyogreBattle + def_special ScrSpecial_StartRayquazaBattle + def_special ScrSpecial_StartRegiBattle def_special sub_8082524 def_special DoSealedChamberShakingEffect2 def_special sub_810F828 @@ -330,7 +330,7 @@ gSpecials:: def_special ShowContestEntryMonPic def_special sub_80C5164 def_special sub_8134AB4 - def_special StartBattle_SouthernIsland + def_special ScrSpecial_StartSouthernIslandBattle def_special SetRoute119Weather def_special SetRoute123Weather def_special ScriptGetMultiplayerId diff --git a/data/trainer_see.s b/data/trainer_see.s index 57eeae061..04a787f0c 100644 --- a/data/trainer_see.s +++ b/data/trainer_see.s @@ -3,47 +3,6 @@ .section .rodata - .align 2 -gSpriteImage_839B308:: @ 839B308 - .incbin "graphics/unknown_sprites/839B4E0/0.4bpp" - - .align 2 -gSpriteImage_839B388:: @ 839B388 - .incbin "graphics/unknown_sprites/839B4E0/1.4bpp" - - .align 2 -gSpriteImage_839B408:: @ 839B408 - .incbin "graphics/unknown_sprites/839B408.4bpp" - - .align 2 -gIsTrainerInRange:: @ 839B488 - .4byte IsTrainerInRangeSouth - .4byte IsTrainerInRangeNorth - .4byte IsTrainerInRangeWest - .4byte IsTrainerInRangeEast - - .align 2 -gTrainerSeeFuncList:: @ 839B498 - .4byte sub_8084394 - .4byte sub_8084398 - .4byte sub_80843DC - .4byte sub_808441C - .4byte sub_8084478 - .4byte sub_8084534 - .4byte sub_8084578 - .4byte sub_80845AC - .4byte sub_80845C8 - .4byte sub_80845FC - .4byte sub_8084654 - .4byte sub_80846C8 - - .align 2 -gTrainerSeeFuncList2:: @ 839B4C8 - .4byte sub_80845C8 - .4byte sub_80845FC - .4byte sub_8084654 - .4byte sub_80846C8 - .align 2 gOamData_839B4D8:: @ 839B4D8 .2byte 0x0000 diff --git a/include/battle_setup.h b/include/battle_setup.h index 9857092c7..444ab5467 100644 --- a/include/battle_setup.h +++ b/include/battle_setup.h @@ -42,64 +42,36 @@ struct TrainerPartyMember3 struct TrainerEyeTrainer { - u16 trainerNums[5]; + u16 opponentIDs[5]; // Each of these trainers has 5 increasingly stronger teams. u16 mapGroup; u16 mapNum; }; -//void task01_battle_start(u8 taskId); -//void task_add_01_battle_start(u8 transition, u16 song); -void CheckForSafariZoneAndProceed(void); -void StartBattle_StandardWild(void); -void StartBattle_Roamer(void); -void StartBattle_Safari(void); -//void task_add_01_battle_start_with_music_and_stats(void); -//void StartBattle_WallyTutorial(void); -void StartBattle_ScriptedWild(void); -//void StartBattle_SouthernIsland(void); -//void StartBattle_Rayquaza(void); -//void StartBattle_GroudonKyogre(void); -//void StartBattle_Regi(void); -void HandleWildBattleEnd(void); -void HandleScriptedWildBattleEnd(void); -s8 GetBattleTerrain(void); -//s8 GetBattleTransitionTypeByMap(void); -//u16 GetSumOfPartyMonLevel(u8 numMons); -//u8 GetSumOfEnemyPartyLevel(u16 trainerNum, u8 numMons); -u8 GetWildBattleTransition(void); -u8 GetTrainerBattleTransition(void); -u8 GetBattleTowerBattleTransition(void); -//void ScrSpecial_ChooseStarter(void); -void CB2_GiveStarter(void); -void CB2_StartFirstBattle(void); -void HandleFirstBattleEnd(void); -//u32 TrainerBattleLoadArg32(u8 *ptr); -//u16 TrainerBattleLoadArg16(u8 *ptr); -//u8 TrainerBattleLoadArg8(u8 *ptr); -//u16 trainerflag_opponent(void); -bool32 battle_exit_is_player_defeat(u32 a1); -//void sub_80822BC(void); -//void TrainerBattleLoadArgs(const struct TrainerBattleSpec *specs, u8 *data); -//void battle_80801F0(void); -u8 *TrainerBattleConfigure(const u8 *data); +void BattleSetup_StartWildBattle(void); +void BattleSetup_StartRoamerBattle(void); +void BattleSetup_StartScriptedWildBattle(void); +s8 BattleSetup_GetTerrain(void); +u8 BattleSetup_GetBattleTowerBattleTransition(void); +u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data); void TrainerWantsBattle(u8, u8 *); + bool32 GetTrainerFlagFromScriptPointer(u8 *data); //void sub_8082524(void); //u8 ScrSpecial_GetTrainerBattleMode(void); -//u8 sub_8082564(void); +//u8 ScrSpecial_HasTrainerBeenFought(void); //void sub_808257C(void); //void unref_sub_8082590(void); // unused -u8 trainer_flag_check(u16); +u8 HasTrainerAlreadyBeenFought(u16); void trainer_flag_set(u16); void trainer_flag_clear(u16); void BattleSetup_StartTrainerBattle(void); void sub_808260C(void); void do_choose_name_or_words_screen(void); -//void sub_80826B0(void); -//void sub_80826D8(void); +//void ScrSpecial_StartTrainerEyeRematch(void); +//void ScrSpecial_ShowTrainerIntroSpeech(void); u8 *BattleSetup_GetScriptAddrAfterBattle(void); u8 *BattleSetup_GetTrainerPostBattleScript(void); -//void sub_8082718(void); +//void ScrSpecial_ShowTrainerNonBattlingSpeech(void); //void PlayTrainerEncounterMusic(void); //u8 *SanitizeString(u8 *str); u8 *sub_808281C(void); @@ -112,7 +84,7 @@ u8 *sub_8082880(void); //s32 sub_80829A8(const struct TrainerEyeTrainer *trainers, u16 mapGroup, u16 mapNum); //s32 sub_80829E8(const struct TrainerEyeTrainer *trainers, u16 mapGroup, u16 mapNum); //bool8 sub_8082A18(const struct TrainerEyeTrainer *trainers, u16 trainerNum); -//bool8 sub_8082A54(const struct TrainerEyeTrainer *trainers, u16 trainerNum); +//bool8 DoesTrainerEyeTrainerWantRematch(const struct TrainerEyeTrainer *trainers, u16 trainerNum); //u16 sub_8082A90(const struct TrainerEyeTrainer *trainers, u16 trainerNum); //void sub_8082AE4(const struct TrainerEyeTrainer *trainers, u16 trainerNum); //bool8 sub_8082B10(const struct TrainerEyeTrainer *trainers, u16 trainerNum); @@ -124,7 +96,7 @@ s32 sub_8082C0C(u16 mapGroup, u16 mapNum); s32 unref_sub_8082C2C(u16 mapGroup, u16 mapNum); u16 sub_8082C4C(u16 a1); //s32 sub_8082C68(void); -//u8 sub_8082C9C(void); +//u8 ScrSpecial_GetTrainerEyeRematchFlag(void); void sub_8082CB8(void); #endif // GUARD_BATTLE_SETUP_H diff --git a/include/trainer_see.h b/include/trainer_see.h index b80a41641..de96dcd3a 100644 --- a/include/trainer_see.h +++ b/include/trainer_see.h @@ -7,29 +7,13 @@ bool8 CheckTrainers(void); bool8 CheckTrainer(u8); u8 TrainerCanApproachPlayer(struct MapObject *); -bool8 IsTrainerInRangeSouth(struct MapObject *trainerObj, s16 vision, s16 x, s16 y); -bool8 IsTrainerInRangeNorth(struct MapObject *trainerObj, s16 vision, s16 x, s16 y); -bool8 IsTrainerInRangeWest(struct MapObject *trainerObj, s16 vision, s16 x, s16 y); -bool8 IsTrainerInRangeEast(struct MapObject *trainerObj, s16 vision, s16 x, s16 y); + bool8 CheckPathBetweenTrainerAndPlayer(struct MapObject2 *, u8, u8); void sub_80842C8(struct MapObject *, u8); void sub_80842FC(void (*func)(u8)); void RunTrainerSeeFuncList(u8); -u8 sub_8084394(void); -s8 sub_8084398(u8 taskId, struct Task *task, struct MapObject *trainerObj); -s8 sub_80843DC(u8 taskId, struct Task *task, struct MapObject *trainerObj); -s8 sub_808441C(u8 taskId, struct Task *task, struct MapObject *trainerObj); -s8 sub_8084478(u8 taskId, struct Task *task, struct MapObject *trainerObj); -s8 sub_8084534(u8 taskId, struct Task *task, struct MapObject *trainerObj); -s8 sub_8084578(u8 taskId, struct Task *task, struct MapObject *trainerObj); -s8 sub_80845AC(u8 taskId, struct Task *task, struct MapObject *trainerObj); -s8 sub_80845C8(u8 taskId, struct Task *task, struct MapObject *trainerObj); -s8 sub_80845FC(u8 taskId, struct Task *task, struct MapObject *trainerObj); -s8 sub_8084654(u8 taskId, struct Task *task, struct MapObject *trainerObj); -s8 sub_80846C8(u8 taskId, struct Task *task, struct MapObject *trainerObj); -void sub_80846E4(u8 taskId); void sub_8084794(struct MapObject *var); -void sub_80847C8(void); +void ScrSpecial_EndTrainerApproach(void); void sub_80847D8(u8); void sub_8084894(struct Sprite *sprite, u16 a2, u8 a3); void objc_exclamation_mark_probably(struct Sprite *sprite); diff --git a/ld_script.txt b/ld_script.txt index 87f8030cb..5c37f87ac 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -376,6 +376,7 @@ SECTIONS { src/battle_setup.o(.rodata); data/cable_club.o(.rodata); data/mori_debug_menu.o(.rodata); + src/trainer_see.o(.rodata); data/trainer_see.o(.rodata); src/wild_encounter.o(.rodata); data/wild_encounter.o(.rodata); diff --git a/src/battle_2.c b/src/battle_2.c index 106d3333b..7092a857b 100644 --- a/src/battle_2.c +++ b/src/battle_2.c @@ -181,7 +181,7 @@ extern u8 gHealthboxIDs[]; extern struct UnknownStruct6 gUnknown_03004DE0; //extern u16 gUnknown_03004DE0[][0xA0]; // possibly? extern u16 gBattleTypeFlags; -extern s8 gBattleTerrain; // I'm not sure if this is supposed to be s8 or u8. Regardless, it must have the same type as the return value of GetBattleTerrain. +extern s8 gBattleTerrain; // I'm not sure if this is supposed to be s8 or u8. Regardless, it must have the same type as the return value of BattleSetup_GetTerrain. extern u8 gReservedSpritePaletteCount; extern u16 gTrainerBattleOpponent; extern struct BattleEnigmaBerry gEnigmaBerries[]; @@ -250,7 +250,7 @@ void InitBattle(void) gUnknown_03004280 = 0; gUnknown_030041B0 = 0; gUnknown_030041B8 = 0; - gBattleTerrain = GetBattleTerrain(); + gBattleTerrain = BattleSetup_GetTerrain(); InitWindowFromConfig(&gUnknown_03004210, &gWindowConfig_81E6C58); InitWindowFromConfig(&gUnknown_030041D0, &gWindowConfig_81E71D0); InitWindowFromConfig(&gUnknown_03004250, &gWindowConfig_81E71EC); diff --git a/src/battle_setup.c b/src/battle_setup.c index 388a08e03..b3a7e2189 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -443,6 +443,18 @@ const struct TrainerEyeTrainer gTrainerEyeTrainers[] = static const u16 sBadgeFlags[] = {BADGE01_GET, BADGE02_GET, BADGE03_GET, BADGE04_GET, BADGE05_GET, BADGE06_GET, BADGE07_GET, BADGE08_GET}; +static void DoStandardWildBattle(void); +static void DoSafariBattle(void); +static void SetTrainerFlagsAfterTrainerEyeRematch(void); +static void CB2_EndWildBattle(void); +static void CB2_EndScriptedWildBattle(void); +static u8 GetWildBattleTransition(void); +static u8 GetTrainerBattleTransition(void); +static void CB2_GiveStarter(void); +static void CB2_StartFirstBattle(void); +static void CB2_EndFirstBattle(void); +static bool32 IsPlayerDefeated(u32 a1); + #define tState data[0] #define tTransition data[1] @@ -471,7 +483,7 @@ static void Task_BattleStart(u8 taskId) } } -void CreateBattleStartTask(u8 transition, u16 song) +static void CreateBattleStartTask(u8 transition, u16 song) { u8 taskId = CreateTask(Task_BattleStart, 1); @@ -482,39 +494,39 @@ void CreateBattleStartTask(u8 transition, u16 song) #undef tState #undef tTransition -void CheckForSafariZoneAndProceed(void) +void BattleSetup_StartWildBattle(void) { if (GetSafariZoneFlag()) - StartBattle_Safari(); + DoSafariBattle(); else - StartBattle_StandardWild(); + DoStandardWildBattle(); } -void StartBattle_StandardWild(void) +static void DoStandardWildBattle(void) { ScriptContext2_Enable(); FreezeMapObjects(); sub_80597F4(); - gMain.savedCallback = HandleWildBattleEnd; + gMain.savedCallback = CB2_EndWildBattle; gBattleTypeFlags = 0; CreateBattleStartTask(GetWildBattleTransition(), 0); IncrementGameStat(7); IncrementGameStat(8); } -void StartBattle_Roamer(void) +void BattleSetup_StartRoamerBattle(void) { ScriptContext2_Enable(); FreezeMapObjects(); sub_80597F4(); - gMain.savedCallback = HandleWildBattleEnd; + gMain.savedCallback = CB2_EndWildBattle; gBattleTypeFlags = BATTLE_TYPE_ROAMER; CreateBattleStartTask(GetWildBattleTransition(), 0); IncrementGameStat(7); IncrementGameStat(8); } -void StartBattle_Safari(void) +static void DoSafariBattle(void) { ScriptContext2_Enable(); FreezeMapObjects(); @@ -524,7 +536,7 @@ void StartBattle_Safari(void) CreateBattleStartTask(GetWildBattleTransition(), 0); } -void task_add_01_battle_start_with_music_and_stats(void) +static void StartTheBattle(void) { CreateBattleStartTask(GetTrainerBattleTransition(), 0); IncrementGameStat(7); @@ -532,7 +544,7 @@ void task_add_01_battle_start_with_music_and_stats(void) } //Initiates battle where Wally catches Ralts -void StartBattle_WallyTutorial(void) +void ScrSpecial_StartWallyTutorialBattle(void) { CreateMaleMon(&gEnemyParty[0], SPECIES_RALTS, 5); ScriptContext2_Enable(); @@ -541,40 +553,40 @@ void StartBattle_WallyTutorial(void) CreateBattleStartTask(B_TRANSITION_SLICE, 0); } -void StartBattle_ScriptedWild(void) +void BattleSetup_StartScriptedWildBattle(void) { ScriptContext2_Enable(); - gMain.savedCallback = HandleScriptedWildBattleEnd; + gMain.savedCallback = CB2_EndScriptedWildBattle; gBattleTypeFlags = 0; CreateBattleStartTask(GetWildBattleTransition(), 0); IncrementGameStat(7); IncrementGameStat(8); } -void StartBattle_SouthernIsland(void) +void ScrSpecial_StartSouthernIslandBattle(void) { ScriptContext2_Enable(); - gMain.savedCallback = HandleScriptedWildBattleEnd; + gMain.savedCallback = CB2_EndScriptedWildBattle; gBattleTypeFlags = BATTLE_TYPE_LEGENDARY; CreateBattleStartTask(GetWildBattleTransition(), 0); IncrementGameStat(7); IncrementGameStat(8); } -void StartBattle_Rayquaza(void) +void ScrSpecial_StartRayquazaBattle(void) { ScriptContext2_Enable(); - gMain.savedCallback = HandleScriptedWildBattleEnd; + gMain.savedCallback = CB2_EndScriptedWildBattle; gBattleTypeFlags = BATTLE_TYPE_LEGENDARY; CreateBattleStartTask(B_TRANSITION_BLUR, BGM_BATTLE34); IncrementGameStat(7); IncrementGameStat(8); } -void StartBattle_GroudonKyogre(void) +void ScrSpecial_StartGroudonKyogreBattle(void) { ScriptContext2_Enable(); - gMain.savedCallback = HandleScriptedWildBattleEnd; + gMain.savedCallback = CB2_EndScriptedWildBattle; gBattleTypeFlags = BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_KYOGRE_GROUDON; if (gGameVersion == VERSION_RUBY) CreateBattleStartTask(B_TRANSITION_SHARDS, BGM_BATTLE34); // GROUDON @@ -584,22 +596,22 @@ void StartBattle_GroudonKyogre(void) IncrementGameStat(8); } -void StartBattle_Regi(void) +void ScrSpecial_StartRegiBattle(void) { ScriptContext2_Enable(); - gMain.savedCallback = HandleScriptedWildBattleEnd; + gMain.savedCallback = CB2_EndScriptedWildBattle; gBattleTypeFlags = BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_REGI; CreateBattleStartTask(B_TRANSITION_GRID_SQUARES, BGM_BATTLE36); IncrementGameStat(7); IncrementGameStat(8); } -void HandleWildBattleEnd(void) +static void CB2_EndWildBattle(void) { CpuFill16(0, (void *)BG_PLTT, BG_PLTT_SIZE); ResetOamRange(0, 128); - if (battle_exit_is_player_defeat(gBattleOutcome) == TRUE) + if (IsPlayerDefeated(gBattleOutcome) == TRUE) { SetMainCallback2(CB2_WhiteOut); } @@ -610,18 +622,18 @@ void HandleWildBattleEnd(void) } } -void HandleScriptedWildBattleEnd(void) +void CB2_EndScriptedWildBattle(void) { CpuFill16(0, (void *)BG_PLTT, BG_PLTT_SIZE); ResetOamRange(0, 128); - if (battle_exit_is_player_defeat(gBattleOutcome) == TRUE) + if (IsPlayerDefeated(gBattleOutcome) == TRUE) SetMainCallback2(CB2_WhiteOut); else SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); } -s8 GetBattleTerrain(void) +s8 BattleSetup_GetTerrain(void) { u16 tileBehavior; s16 x, y; @@ -677,7 +689,7 @@ s8 GetBattleTerrain(void) return 9; } -s8 GetBattleTransitionTypeByMap(void) +static s8 GetBattleTransitionTypeByMap(void) { u16 tileBehavior; s16 x, y; @@ -701,7 +713,7 @@ s8 GetBattleTransitionTypeByMap(void) return 3; } -u16 GetSumOfPartyMonLevel(u8 numMons) +static u16 GetSumOfPlayerPartyLevel(u8 numMons) { u8 sum = 0; int i; @@ -721,37 +733,37 @@ u16 GetSumOfPartyMonLevel(u8 numMons) return sum; } -u8 GetSumOfEnemyPartyLevel(u16 trainerNum, u8 numMons) +static u8 GetSumOfEnemyPartyLevel(u16 opponentId, u8 numMons) { u8 i; u8 sum; u32 count = numMons; void *party; - if (gTrainers[trainerNum].partySize < count) - count = gTrainers[trainerNum].partySize; + if (gTrainers[opponentId].partySize < count) + count = gTrainers[opponentId].partySize; sum = 0; - switch (gTrainers[trainerNum].partyFlags) + switch (gTrainers[opponentId].partyFlags) { case 0: - party = gTrainers[trainerNum].party; + party = gTrainers[opponentId].party; for (i = 0; i < count; i++) sum += ((struct TrainerPartyMember0 *)party)[i].level; break; case 1: - party = gTrainers[trainerNum].party; + party = gTrainers[opponentId].party; for (i = 0; i < count; i++) sum += ((struct TrainerPartyMember1 *)party)[i].level; break; case 2: - party = gTrainers[trainerNum].party; + party = gTrainers[opponentId].party; for (i = 0; i < count; i++) sum += ((struct TrainerPartyMember2 *)party)[i].level; break; case 3: - party = gTrainers[trainerNum].party; + party = gTrainers[opponentId].party; for (i = 0; i < count; i++) sum += ((struct TrainerPartyMember3 *)party)[i].level; break; @@ -760,11 +772,11 @@ u8 GetSumOfEnemyPartyLevel(u16 trainerNum, u8 numMons) return sum; } -u8 GetWildBattleTransition(void) +static u8 GetWildBattleTransition(void) { u8 transitionType = GetBattleTransitionTypeByMap(); u8 enemyLevel = GetMonData(&gEnemyParty[0], MON_DATA_LEVEL); - u8 playerLevel = GetSumOfPartyMonLevel(1); + u8 playerLevel = GetSumOfPlayerPartyLevel(1); if (enemyLevel < playerLevel) return gBattleTransitionTable_Wild[transitionType][0]; @@ -772,7 +784,7 @@ u8 GetWildBattleTransition(void) return gBattleTransitionTable_Wild[transitionType][1]; } -u8 GetTrainerBattleTransition(void) +static u8 GetTrainerBattleTransition(void) { const struct Trainer *trainer; u8 minPartyCount; @@ -808,17 +820,17 @@ u8 GetTrainerBattleTransition(void) transitionType = GetBattleTransitionTypeByMap(); enemyLevel = GetSumOfEnemyPartyLevel(gTrainerBattleOpponent, minPartyCount); - playerLevel = GetSumOfPartyMonLevel(minPartyCount); + playerLevel = GetSumOfPlayerPartyLevel(minPartyCount); if (enemyLevel < playerLevel) // is wild mon level than the player's mon level? return gBattleTransitionTable_Trainer[transitionType][0]; else return gBattleTransitionTable_Trainer[transitionType][1]; } -u8 GetBattleTowerBattleTransition(void) +u8 BattleSetup_GetBattleTowerBattleTransition(void) { u8 enemyLevel = GetMonData(&gEnemyParty[0], MON_DATA_LEVEL); - u8 playerLevel = GetSumOfPartyMonLevel(1); + u8 playerLevel = GetSumOfPlayerPartyLevel(1); if (enemyLevel < playerLevel) return B_TRANSITION_POKEBALLS_TRAIL; @@ -832,7 +844,7 @@ void ScrSpecial_ChooseStarter(void) gMain.savedCallback = CB2_GiveStarter; } -void CB2_GiveStarter(void) +static void CB2_GiveStarter(void) { u16 starterPoke; @@ -845,7 +857,7 @@ void CB2_GiveStarter(void) BattleTransition_Start(0); } -void CB2_StartFirstBattle(void) +static void CB2_StartFirstBattle(void) { UpdatePaletteFade(); RunTasks(); @@ -853,7 +865,7 @@ void CB2_StartFirstBattle(void) if (IsBattleTransitionDone() == TRUE) { gBattleTypeFlags = BATTLE_TYPE_FIRST_BATTLE; - gMain.savedCallback = HandleFirstBattleEnd; + gMain.savedCallback = CB2_EndFirstBattle; SetMainCallback2(sub_800E7C4); prev_quest_postbuffer_cursor_backup_reset(); overworld_poison_timer_set(); @@ -862,35 +874,35 @@ void CB2_StartFirstBattle(void) } } -void HandleFirstBattleEnd(void) +static void CB2_EndFirstBattle(void) { sav1_reset_battle_music_maybe(); SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); } -u32 TrainerBattleLoadArg32(const u8 *ptr) +static u32 TrainerBattleLoadArg32(const u8 *ptr) { return ptr[0] | (ptr[1] << 8) | (ptr[2] << 16) | (ptr[3] << 24); } -u16 TrainerBattleLoadArg16(const u8 *ptr) +static u16 TrainerBattleLoadArg16(const u8 *ptr) { return ptr[0] | (ptr[1] << 8); } -u8 TrainerBattleLoadArg8(const u8 *ptr) +static u8 TrainerBattleLoadArg8(const u8 *ptr) { return ptr[0]; } -u16 trainerflag_opponent(void) +static u16 CurrentOpponentTrainerFlag(void) { return TRAINER_FLAG_START + gTrainerBattleOpponent; } -bool32 battle_exit_is_player_defeat(u32 a1) +static bool32 IsPlayerDefeated(u32 battleOutcome) { - switch (a1) + switch (battleOutcome) { case 2: case 3: @@ -905,7 +917,7 @@ bool32 battle_exit_is_player_defeat(u32 a1) return FALSE; } -void sub_80822BC(void) +static void sub_80822BC(void) { sTrainerBattleMode = 0; gTrainerBattleOpponent = 0; @@ -918,7 +930,7 @@ void sub_80822BC(void) sTrainerBattleEndScript = 0; } -void TrainerBattleLoadArgs(const struct TrainerBattleParameter *specs, const u8 *data) +static void TrainerBattleLoadArgs(const struct TrainerBattleParameter *specs, const u8 *data) { while (1) { @@ -953,7 +965,7 @@ void TrainerBattleLoadArgs(const struct TrainerBattleParameter *specs, const u8 } } -void battle_80801F0(void) +static void battle_80801F0(void) { if (sTrainerMapObjectLocalId) { @@ -962,7 +974,7 @@ void battle_80801F0(void) } } -u8 *TrainerBattleConfigure(const u8 *data) +u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data) { sub_80822BC(); sTrainerBattleMode = TrainerBattleLoadArg8(data); @@ -1007,7 +1019,7 @@ void TrainerWantsBattle(u8 trainerMapObjId, u8 *trainerScript) { gSelectedMapObject = trainerMapObjId; gScriptLastTalked = gMapObjects[trainerMapObjId].localId; - TrainerBattleConfigure(trainerScript + 1); + BattleSetup_ConfigureTrainerBattle(trainerScript + 1); ScriptContext1_SetupScript(gUnknown_0819F80B); ScriptContext2_Enable(); } @@ -1030,22 +1042,22 @@ u8 ScrSpecial_GetTrainerBattleMode(void) return sTrainerBattleMode; } -u8 sub_8082564(void) +u8 ScrSpecial_HasTrainerBeenFought(void) { - return FlagGet(trainerflag_opponent()); + return FlagGet(CurrentOpponentTrainerFlag()); } -void sub_808257C(void) +void SetCurrentTrainerBattledFlag(void) { - FlagSet(trainerflag_opponent()); + FlagSet(CurrentOpponentTrainerFlag()); } void unref_sub_8082590(void) { - FlagSet(trainerflag_opponent()); // duplicate function + FlagSet(CurrentOpponentTrainerFlag()); // duplicate function } -u8 trainer_flag_check(u16 flag) +u8 HasTrainerAlreadyBeenFought(u16 flag) { return FlagGet(TRAINER_FLAG_START + flag); } @@ -1064,7 +1076,7 @@ void BattleSetup_StartTrainerBattle(void) { gBattleTypeFlags = BATTLE_TYPE_TRAINER; gMain.savedCallback = sub_808260C; - task_add_01_battle_start_with_music_and_stats(); + StartTheBattle(); ScriptContext1_Stop(); } @@ -1074,46 +1086,49 @@ void sub_808260C(void) { SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); // link battle? } - else if (battle_exit_is_player_defeat(gBattleOutcome) == TRUE) + else if (IsPlayerDefeated(gBattleOutcome) == TRUE) { SetMainCallback2(CB2_WhiteOut); } else { SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); - sub_808257C(); + SetCurrentTrainerBattledFlag(); } } -void do_choose_name_or_words_screen(void) +void CB2_EndTrainerEyeRematchBattle(void) { if (gTrainerBattleOpponent == 1024) { SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); // link battle? } - else if (battle_exit_is_player_defeat(gBattleOutcome) == TRUE) + else if (IsPlayerDefeated(gBattleOutcome) == TRUE) { SetMainCallback2(CB2_WhiteOut); } else { SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); - sub_808257C(); - sub_8082CB8(); + SetCurrentTrainerBattledFlag(); + SetTrainerFlagsAfterTrainerEyeRematch(); } } -void sub_80826B0(void) +void ScrSpecial_StartTrainerEyeRematch(void) { gBattleTypeFlags = BATTLE_TYPE_TRAINER; - gMain.savedCallback = do_choose_name_or_words_screen; - task_add_01_battle_start_with_music_and_stats(); + gMain.savedCallback = CB2_EndTrainerEyeRematchBattle; + StartTheBattle(); ScriptContext1_Stop(); } -void sub_80826D8(void) +static u8 *GetTrainerIntroSpeech(void); +static u8 *GetTrainerNonBattlingSpeech(void); + +void ScrSpecial_ShowTrainerIntroSpeech(void) { - ShowFieldMessage(sub_808281C()); + ShowFieldMessage(GetTrainerIntroSpeech()); } u8 *BattleSetup_GetScriptAddrAfterBattle(void) @@ -1132,9 +1147,9 @@ u8 *BattleSetup_GetTrainerPostBattleScript(void) return gUnknown_081C6C02; } -void sub_8082718(void) +void ScrSpecial_ShowTrainerNonBattlingSpeech(void) { - ShowFieldMessage(sub_8082880()); + ShowFieldMessage(GetTrainerNonBattlingSpeech()); } void PlayTrainerEncounterMusic(void) @@ -1192,7 +1207,7 @@ void PlayTrainerEncounterMusic(void) } //Returns an empty string if a null pointer was passed, otherwise returns str -u8 *SanitizeString(const u8 *str) +static u8 *SanitizeString(const u8 *str) { if (str) return (u8 *) str; @@ -1200,7 +1215,7 @@ u8 *SanitizeString(const u8 *str) return (u8 *) gOtherText_CancelWithTerminator; } -u8 *sub_808281C(void) +static u8 *GetTrainerIntroSpeech(void) { return SanitizeString(sTrainerIntroSpeech); } @@ -1223,40 +1238,40 @@ u8 *unref_sub_808286C(void) return SanitizeString(sTrainerVictorySpeech); } -u8 *sub_8082880(void) +static u8 *GetTrainerNonBattlingSpeech(void) { return SanitizeString(sTrainerCannotBattleSpeech); } -s32 sub_8082894(const struct TrainerEyeTrainer *trainers, u16 trainerNum) +s32 sub_8082894(const struct TrainerEyeTrainer *trainers, u16 opponentId) { s32 i; for (i = 0; i < NUM_TRAINER_EYE_TRAINERS; i++) { - if (trainers[i].trainerNums[0] == trainerNum) + if (trainers[i].opponentIDs[0] == opponentId) return i; } return -1; } -s32 sub_80828B8(const struct TrainerEyeTrainer *trainers, u16 trainerNum) +s32 sub_80828B8(const struct TrainerEyeTrainer *trainers, u16 opponentId) { s32 i; s32 j; for (i = 0; i < NUM_TRAINER_EYE_TRAINERS; i++) { - for (j = 0; j < 5 && trainers[i].trainerNums[j] != 0; j++) + for (j = 0; j < 5 && trainers[i].opponentIDs[j] != 0; j++) { - if (trainers[i].trainerNums[j] == trainerNum) + if (trainers[i].opponentIDs[j] == opponentId) return i; } } return -1; } -bool32 sub_80828FC(const struct TrainerEyeTrainer *trainers, u16 mapGroup, u16 mapNum) +bool32 UpdateRandomTrainerEyeRematches(const struct TrainerEyeTrainer *trainers, u16 mapGroup, u16 mapNum) { int i; bool32 ret = FALSE; @@ -1266,14 +1281,19 @@ bool32 sub_80828FC(const struct TrainerEyeTrainer *trainers, u16 mapGroup, u16 m if (trainers[i].mapGroup == mapGroup && trainers[i].mapNum == mapNum) { if (gSaveBlock1.trainerRematches[i] != 0) + { + // Trainer already wants rematch. Don't bother updating it ret = TRUE; - else if (trainer_flag_check(trainers[i].trainerNums[0]) == TRUE && (Random() % 100) <= 30) + } + else if (HasTrainerAlreadyBeenFought(trainers[i].opponentIDs[0]) == TRUE + && (Random() % 100) <= 30) // 31% chance of getting a rematch { - int j = 1; + int rematches = 1; - while (j < 5 && trainers[i].trainerNums[j] != 0 && trainer_flag_check(trainers[i].trainerNums[j])) - j++; - gSaveBlock1.trainerRematches[i] = j; + while (rematches < 5 && trainers[i].opponentIDs[rematches] != 0 + && HasTrainerAlreadyBeenFought(trainers[i].opponentIDs[rematches])) + rematches++; + gSaveBlock1.trainerRematches[i] = rematches; ret = TRUE; } } @@ -1305,9 +1325,9 @@ s32 sub_80829E8(const struct TrainerEyeTrainer *trainers, u16 mapGroup, u16 mapN return 0; } -bool8 sub_8082A18(const struct TrainerEyeTrainer *trainers, u16 trainerNum) +bool8 sub_8082A18(const struct TrainerEyeTrainer *trainers, u16 opponentId) { - s32 trainerEyeIndex = sub_8082894(trainers, trainerNum); + s32 trainerEyeIndex = sub_8082894(trainers, opponentId); if (trainerEyeIndex != -1 && trainerEyeIndex < 100 && gSaveBlock1.trainerRematches[trainerEyeIndex]) return TRUE; @@ -1315,9 +1335,9 @@ bool8 sub_8082A18(const struct TrainerEyeTrainer *trainers, u16 trainerNum) return FALSE; } -bool8 sub_8082A54(const struct TrainerEyeTrainer *trainers, u16 trainerNum) +bool8 GetTrainerEyeRematchFlag(const struct TrainerEyeTrainer *trainers, u16 opponentId) { - s32 trainerEyeIndex = sub_80828B8(trainers, trainerNum); + s32 trainerEyeIndex = sub_80828B8(trainers, opponentId); if (trainerEyeIndex != -1 && trainerEyeIndex < 100 && gSaveBlock1.trainerRematches[trainerEyeIndex]) return TRUE; @@ -1325,38 +1345,38 @@ bool8 sub_8082A54(const struct TrainerEyeTrainer *trainers, u16 trainerNum) return FALSE; } -u16 sub_8082A90(const struct TrainerEyeTrainer *trainers, u16 trainerNum) +u16 sub_8082A90(const struct TrainerEyeTrainer *trainers, u16 opponentId) { int i; const struct TrainerEyeTrainer *trainer; - s32 trainerEyeIndex = sub_8082894(trainers, trainerNum); + s32 trainerEyeIndex = sub_8082894(trainers, opponentId); if (trainerEyeIndex == -1) return 0; trainer = &trainers[trainerEyeIndex]; for (i = 1; i < 5; i++) { - if (!trainer->trainerNums[i]) - return trainer->trainerNums[i - 1]; - if (!trainer_flag_check(trainer->trainerNums[i])) - return trainer->trainerNums[i]; + if (!trainer->opponentIDs[i]) + return trainer->opponentIDs[i - 1]; + if (!HasTrainerAlreadyBeenFought(trainer->opponentIDs[i])) + return trainer->opponentIDs[i]; } - return trainer->trainerNums[4]; + return trainer->opponentIDs[4]; } -void sub_8082AE4(const struct TrainerEyeTrainer *trainers, u16 trainerNum) +void ClearTrainerEyeRematchFlag(const struct TrainerEyeTrainer *trainers, u16 opponentId) { - s32 trainerEyeIndex = sub_80828B8(trainers, trainerNum); + s32 trainerEyeIndex = sub_80828B8(trainers, opponentId); if (trainerEyeIndex != -1) gSaveBlock1.trainerRematches[trainerEyeIndex] = 0; } -bool8 sub_8082B10(const struct TrainerEyeTrainer *trainers, u16 trainerNum) +bool8 sub_8082B10(const struct TrainerEyeTrainer *trainers, u16 opponentId) { - s32 trainerEyeIndex = sub_8082894(trainers, trainerNum); + s32 trainerEyeIndex = sub_8082894(trainers, opponentId); - if (trainerEyeIndex != -1 && trainer_flag_check(trainers[trainerEyeIndex].trainerNums[1])) + if (trainerEyeIndex != -1 && HasTrainerAlreadyBeenFought(trainers[trainerEyeIndex].opponentIDs[1])) return TRUE; else return FALSE; @@ -1400,7 +1420,7 @@ bool32 sub_8082BA4(void) void sub_8082BD0(u16 mapGroup, u16 mapNum) { - if (sub_8082BA4() && sub_80828FC(gTrainerEyeTrainers, mapGroup, mapNum) == TRUE) + if (sub_8082BA4() && UpdateRandomTrainerEyeRematches(gTrainerEyeTrainers, mapGroup, mapNum) == TRUE) gSaveBlock1.trainerRematchStepCounter = 0; } @@ -1414,9 +1434,9 @@ s32 unref_sub_8082C2C(u16 mapGroup, u16 mapNum) return sub_80829E8(gTrainerEyeTrainers, mapGroup, mapNum); } -u16 sub_8082C4C(u16 trainerNum) +u16 sub_8082C4C(u16 opponentId) { - return sub_8082A90(gTrainerEyeTrainers, trainerNum); + return sub_8082A90(gTrainerEyeTrainers, opponentId); } s32 sub_8082C68(void) @@ -1427,13 +1447,13 @@ s32 sub_8082C68(void) return sub_8082B10(gTrainerEyeTrainers, gTrainerBattleOpponent); } -u8 sub_8082C9C(void) +u8 ScrSpecial_GetTrainerEyeRematchFlag(void) { - return sub_8082A54(gTrainerEyeTrainers, gTrainerBattleOpponent); + return GetTrainerEyeRematchFlag(gTrainerEyeTrainers, gTrainerBattleOpponent); } -void sub_8082CB8(void) +void SetTrainerFlagsAfterTrainerEyeRematch(void) { - sub_8082AE4(gTrainerEyeTrainers, gTrainerBattleOpponent); - sub_808257C(); + ClearTrainerEyeRematchFlag(gTrainerEyeTrainers, gTrainerBattleOpponent); + SetCurrentTrainerBattledFlag(); } diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 782734abe..73bd5508a 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -5364,53 +5364,36 @@ u8 sub_805FF20(struct MapObject *mapObject, u8 direction) } bool8 IsCoordOutsideFieldObjectMovementRect(struct MapObject2 *mapObject, s16 x, s16 y); -bool8 CheckForCollisionBetweenFieldObjects(struct MapObject *mapObject, s16 x, s16 y); +static bool8 DoesObjectCollideWithObjectAt(struct MapObject *mapObject, s16 x, s16 y); bool8 IsMetatileDirectionallyImpassable(struct MapObject *mapObject, s16 x, s16 y, u8 direction); u8 npc_block_way(struct MapObject *mapObject, s16 x, s16 y, u8 direction) { if (IsCoordOutsideFieldObjectMovementRect((struct MapObject2 *)mapObject, x, y)) - { return 1; - } - if (MapGridIsImpassableAt(x, y) || GetMapBorderIdAt(x, y) == -1 || IsMetatileDirectionallyImpassable(mapObject, x, y, direction)) - { + else if (MapGridIsImpassableAt(x, y) || GetMapBorderIdAt(x, y) == -1 || IsMetatileDirectionallyImpassable(mapObject, x, y, direction)) return 2; - } else if (mapObject->mapobj_bit_15 && !CanCameraMoveInDirection(direction)) - { + else if (mapObject->mapobj_bit_15 && !CanCameraMoveInDirection(direction)) return 2; - } - if (IsZCoordMismatchAt(mapObject->mapobj_unk_0B_0, x, y)) - { + else if (IsZCoordMismatchAt(mapObject->mapobj_unk_0B_0, x, y)) return 3; - } - if (CheckForCollisionBetweenFieldObjects(mapObject, x, y)) - { + else if (DoesObjectCollideWithObjectAt(mapObject, x, y)) return 4; - } return 0; } u8 sub_8060024(struct MapObject *mapObject, s16 x, s16 y, u8 direction) { - u8 flags; - flags = 0; + u8 flags = 0; + if (IsCoordOutsideFieldObjectMovementRect((struct MapObject2 *)mapObject, x, y)) - { flags |= 1; - } if (MapGridIsImpassableAt(x, y) || GetMapBorderIdAt(x, y) == -1 || IsMetatileDirectionallyImpassable(mapObject, x, y, direction) || (mapObject->mapobj_bit_15 && !CanCameraMoveInDirection(direction))) - { flags |= 2; - } if (IsZCoordMismatchAt(mapObject->mapobj_unk_0B_0, x, y)) - { flags |= 4; - } - if (CheckForCollisionBetweenFieldObjects(mapObject, x, y)) - { + if (DoesObjectCollideWithObjectAt(mapObject, x, y)) flags |= 8; - } return flags; } @@ -5418,25 +5401,22 @@ bool8 IsCoordOutsideFieldObjectMovementRect(struct MapObject2 *mapObject, s16 x, { s16 minv; s16 maxv; + if (mapObject->mapobj_unk_19 != 0) { minv = mapObject->coords1.x - (mapObject->mapobj_unk_19); maxv = mapObject->coords1.x + (mapObject->mapobj_unk_19); if (minv > x || maxv < x) - { - return 1; - } + return TRUE; } if (mapObject->mapobj_unk_19b != 0) { minv = mapObject->coords1.y - (mapObject->mapobj_unk_19b); maxv = mapObject->coords1.y + (mapObject->mapobj_unk_19b); if (minv > y || maxv < y) - { - return 1; - } + return TRUE; } - return 0; + return FALSE; } bool8 IsMetatileDirectionallyImpassable(struct MapObject *mapObject, s16 x, s16 y, u8 direction) @@ -5448,23 +5428,19 @@ bool8 IsMetatileDirectionallyImpassable(struct MapObject *mapObject, s16 x, s16 return 0; } -bool8 CheckForCollisionBetweenFieldObjects(struct MapObject *mapObject, s16 x, s16 y) +static bool8 DoesObjectCollideWithObjectAt(struct MapObject *mapObject, s16 x, s16 y) { - struct MapObject *mapObject2; u8 i; - for (i=0; i<16; i++) + + for (i = 0; i < 16; i++) { - mapObject2 = &gMapObjects[i]; + struct MapObject *mapObject2 = &gMapObjects[i]; + if (mapObject2->active && mapObject2 != mapObject) { - if ((mapObject2->coords2.x != x || mapObject2->coords2.y != y) && (mapObject2->coords3.x != x || mapObject2->coords3.y != y)) - { - continue; - } - if (AreZCoordsCompatible(mapObject->mapobj_unk_0B_0, mapObject2->mapobj_unk_0B_0)) - { - return 1; - } + if (((mapObject2->coords2.x == x && mapObject2->coords2.y == y) || (mapObject2->coords3.x == x && mapObject2->coords3.y == y)) + && AreZCoordsCompatible(mapObject->mapobj_unk_0B_0, mapObject2->mapobj_unk_0B_0)) + return TRUE; } } return 0; diff --git a/src/scrcmd.c b/src/scrcmd.c index 1cacb7348..813e041e1 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -1578,7 +1578,7 @@ bool8 ScrCmd_updatecoins(struct ScriptContext *ctx) bool8 ScrCmd_trainerbattle(struct ScriptContext *ctx) { - ctx->scriptPtr = TrainerBattleConfigure(ctx->scriptPtr); + ctx->scriptPtr = BattleSetup_ConfigureTrainerBattle(ctx->scriptPtr); return FALSE; } @@ -1603,7 +1603,7 @@ bool8 ScrCmd_endtrainerbattle2(struct ScriptContext *ctx) bool8 ScrCmd_checktrainerflag(struct ScriptContext *ctx) { u16 index = VarGet(ScriptReadHalfword(ctx)); - ctx->comparisonResult = trainer_flag_check(index); + ctx->comparisonResult = HasTrainerAlreadyBeenFought(index); return FALSE; } @@ -1632,7 +1632,7 @@ bool8 ScrCmd_setwildbattle(struct ScriptContext *ctx) bool8 ScrCmd_dowildbattle(struct ScriptContext *ctx) { - StartBattle_ScriptedWild(); + BattleSetup_StartScriptedWildBattle(); ScriptContext1_Stop(); return TRUE; } diff --git a/src/trainer_see.c b/src/trainer_see.c index 18bf0907e..bf8d05768 100644 --- a/src/trainer_see.c +++ b/src/trainer_see.c @@ -9,113 +9,132 @@ #include "task.h" #include "util.h" -extern bool8 (*gIsTrainerInRange[])(struct MapObject *, u16, s16, s16); -extern bool8 (*gTrainerSeeFuncList[])(u8, struct Task *, struct MapObject *); -extern bool8 (*gTrainerSeeFuncList2[])(u8, struct Task *, struct MapObject *); +const u8 gSpriteImage_839B308[] = INCBIN_U8("graphics/unknown_sprites/839B4E0/0.4bpp"); +const u8 gSpriteImage_839B388[] = INCBIN_U8("graphics/unknown_sprites/839B4E0/1.4bpp"); +const u8 gSpriteImage_839B408[] = INCBIN_U8("graphics/unknown_sprites/839B408.4bpp"); + +u8 GetTrainerApproachDistanceSouth(struct MapObject *trainerObj, s16 range, s16 x, s16 y); +u8 GetTrainerApproachDistanceNorth(struct MapObject *trainerObj, s16 range, s16 x, s16 y); +u8 GetTrainerApproachDistanceWest(struct MapObject *trainerObj, s16 range, s16 x, s16 y); +u8 GetTrainerApproachDistanceEast(struct MapObject *trainerObj, s16 range, s16 x, s16 y); + +static u8 (*const sDirectionalApproachDistanceFuncs[])(struct MapObject *, s16, s16, s16) = +{ + GetTrainerApproachDistanceSouth, + GetTrainerApproachDistanceNorth, + GetTrainerApproachDistanceWest, + GetTrainerApproachDistanceEast, +}; extern struct SpriteTemplate gSpriteTemplate_839B510; extern struct SpriteTemplate gSpriteTemplate_839B528; bool8 CheckTrainers(void) { - u8 i; + u8 mapObjId; - for (i = 0; i < 16; i++) + for (mapObjId = 0; mapObjId < 16; mapObjId++) { - if ( gMapObjects[i].active ) - if ( gMapObjects[i].trainerType == 1 || gMapObjects[i].trainerType == 3 ) - if ( CheckTrainer(i) ) - return TRUE; + if (gMapObjects[mapObjId].active + && (gMapObjects[mapObjId].trainerType == 1 || gMapObjects[mapObjId].trainerType == 3) + && CheckTrainer(mapObjId)) + return TRUE; } return FALSE; } -bool8 CheckTrainer(u8 trainer) +bool8 CheckTrainer(u8 mapObjId) { - u8 *scriptPtr = GetFieldObjectScriptPointerByFieldObjectId(trainer); + u8 *scriptPtr = GetFieldObjectScriptPointerByFieldObjectId(mapObjId); - if (GetTrainerFlagFromScriptPointer(scriptPtr)) - return FALSE; - else - { - struct MapObject *trainerObj = &gMapObjects[trainer]; - u8 canApproach = TrainerCanApproachPlayer(trainerObj); + if (GetTrainerFlagFromScriptPointer(scriptPtr)) + { + return FALSE; + } + else + { + struct MapObject *trainerObj = &gMapObjects[mapObjId]; + bool8 canApproach = TrainerCanApproachPlayer(trainerObj); - if (canApproach != 0) + if (canApproach) { - TrainerWantsBattle(trainer, scriptPtr); - sub_80842C8(trainerObj, (canApproach - 1)); - return TRUE; + TrainerWantsBattle(mapObjId, scriptPtr); + sub_80842C8(trainerObj, (canApproach - 1)); + return TRUE; } - else - { - return FALSE; - } - } + else + { + return FALSE; + } + } } bool8 TrainerCanApproachPlayer(struct MapObject *trainerObj) { s16 x, y; u8 i; - u8 playerCoord; + u8 approachDistance; PlayerGetDestCoords(&x, &y); - if ( trainerObj->trainerType == 1 ) // trainers that don't spin + if (trainerObj->trainerType == 1) // can only see in one direction { - playerCoord = gIsTrainerInRange[trainerObj->mapobj_unk_18 - 1](trainerObj, trainerObj->trainerRange_berryTreeId, x, y); - return CheckPathBetweenTrainerAndPlayer((struct MapObject2 *)trainerObj, playerCoord, trainerObj->mapobj_unk_18); + approachDistance = sDirectionalApproachDistanceFuncs[trainerObj->mapobj_unk_18 - 1](trainerObj, trainerObj->trainerRange_berryTreeId, x, y); + return CheckPathBetweenTrainerAndPlayer((struct MapObject2 *)trainerObj, approachDistance, trainerObj->mapobj_unk_18); } - else // spinners + else // can see in all directions { for (i = 0; i < 4; i++) { - playerCoord = gIsTrainerInRange[i](trainerObj, trainerObj->trainerRange_berryTreeId, x, y); - if ( CheckPathBetweenTrainerAndPlayer((struct MapObject2 *)trainerObj, playerCoord, i + 1) ) // directions are 1-4 instead of 0-3. south north west east - return playerCoord; + approachDistance = sDirectionalApproachDistanceFuncs[i](trainerObj, trainerObj->trainerRange_berryTreeId, x, y); + if (CheckPathBetweenTrainerAndPlayer((struct MapObject2 *)trainerObj, approachDistance, i + 1)) // directions are 1-4 instead of 0-3. south north west east + return approachDistance; } - return FALSE; } + return FALSE; } -bool8 IsTrainerInRangeSouth(struct MapObject *trainerObj, s16 vision, s16 x, s16 y) +// Returns how far south the player is from trainer. 0 if out of trainer's sight. +u8 GetTrainerApproachDistanceSouth(struct MapObject *trainerObj, s16 range, s16 x, s16 y) { - if ( trainerObj->coords2.x == x - && y > trainerObj->coords2.y - && y <= trainerObj->coords2.y + vision ) + if (trainerObj->coords2.x == x + && y > trainerObj->coords2.y + && y <= trainerObj->coords2.y + range) return (y - trainerObj->coords2.y); else - return FALSE; + return 0; } -bool8 IsTrainerInRangeNorth(struct MapObject *trainerObj, s16 vision, s16 x, s16 y) +// Returns how far north the player is from trainer. 0 if out of trainer's sight. +u8 GetTrainerApproachDistanceNorth(struct MapObject *trainerObj, s16 range, s16 x, s16 y) { - if ( trainerObj->coords2.x == x - && y < trainerObj->coords2.y - && y >= trainerObj->coords2.y - vision ) + if (trainerObj->coords2.x == x + && y < trainerObj->coords2.y + && y >= trainerObj->coords2.y - range) return (trainerObj->coords2.y - y); else - return FALSE; + return 0; } -bool8 IsTrainerInRangeWest(struct MapObject *trainerObj, s16 vision, s16 x, s16 y) +// Returns how far west the player is from trainer. 0 if out of trainer's sight. +u8 GetTrainerApproachDistanceWest(struct MapObject *trainerObj, s16 range, s16 x, s16 y) { - if ( trainerObj->coords2.y == y - && x < trainerObj->coords2.x - && x >= trainerObj->coords2.x - vision ) + if (trainerObj->coords2.y == y + && x < trainerObj->coords2.x + && x >= trainerObj->coords2.x - range) return (trainerObj->coords2.x - x); else - return FALSE; + return 0; } -bool8 IsTrainerInRangeEast(struct MapObject *trainerObj, s16 vision, s16 x, s16 y) +// Returns how far east the player is from trainer. 0 if out of trainer's sight. +u8 GetTrainerApproachDistanceEast(struct MapObject *trainerObj, s16 range, s16 x, s16 y) { - if ( trainerObj->coords2.y == y - && x > trainerObj->coords2.x - && x <= trainerObj->coords2.x + vision ) + if (trainerObj->coords2.y == y + && x > trainerObj->coords2.x + && x <= trainerObj->coords2.x + range) return (x - trainerObj->coords2.x); else - return FALSE; + return 0; } #ifdef BUGFIX_TRAINERAPPROACH @@ -124,25 +143,24 @@ bool8 IsTrainerInRangeEast(struct MapObject *trainerObj, s16 vision, s16 x, s16 #define COLLISION_MASK 1 #endif -bool8 CheckPathBetweenTrainerAndPlayer(struct MapObject2 *trainerObj, u8 playerCoord, u8 direction) +bool8 CheckPathBetweenTrainerAndPlayer(struct MapObject2 *trainerObj, u8 approachDistance, u8 direction) { s16 x, y; u8 unk19_temp; u8 unk19b_temp; u8 i; - u8 var; + u8 collision; - if (!playerCoord) + if (approachDistance == 0) return FALSE; x = trainerObj->coords2.x; y = trainerObj->coords2.y; - for (i = 0; i <= playerCoord - 1; i++, MoveCoords(direction, &x, &y)) + for (i = 0; i <= approachDistance - 1; i++, MoveCoords(direction, &x, &y)) { - var = sub_8060024((struct MapObject *)trainerObj, x, y, direction); - - if (var && (var & COLLISION_MASK)) + collision = sub_8060024((struct MapObject *)trainerObj, x, y, direction); + if (collision != 0 && (collision & COLLISION_MASK)) return FALSE; } @@ -152,151 +170,187 @@ bool8 CheckPathBetweenTrainerAndPlayer(struct MapObject2 *trainerObj, u8 playerC trainerObj->mapobj_unk_19 = 0; trainerObj->mapobj_unk_19b = 0; - var = npc_block_way((struct MapObject *)trainerObj, x, y, direction); + collision = npc_block_way((struct MapObject *)trainerObj, x, y, direction); trainerObj->mapobj_unk_19 = unk19_temp; trainerObj->mapobj_unk_19b = unk19b_temp; - if (var == 4) - return playerCoord; + if (collision == 4) + return approachDistance; return FALSE; } -void sub_80842C8(struct MapObject *trainerObj, u8 taskId) +#define tTrainerObjHi data[1] +#define tTrainerObjLo data[2] + +void sub_80842C8(struct MapObject *trainerObj, u8 b) { - struct Task *task = &gTasks[CreateTask(RunTrainerSeeFuncList, 0x50)]; + u8 taskId = CreateTask(RunTrainerSeeFuncList, 0x50); + struct Task *task = &gTasks[taskId]; - task->data[1] = (u32)(trainerObj) >> 16; - task->data[2] = (u32)(trainerObj); - task->data[3] = taskId; + task->tTrainerObjHi = (u32)(trainerObj) >> 16; + task->tTrainerObjLo = (u32)(trainerObj); + task->data[3] = b; } -void sub_80842FC(TaskFunc func) +void sub_80842FC(TaskFunc followupFunc) { - TaskFunc func2 = RunTrainerSeeFuncList; - u8 taskId = FindTaskIdByFunc(func2); + TaskFunc taskFunc = RunTrainerSeeFuncList; + u8 taskId = FindTaskIdByFunc(taskFunc); - SetTaskFuncWithFollowupFunc(taskId, RunTrainerSeeFuncList, func); + SetTaskFuncWithFollowupFunc(taskId, taskFunc, followupFunc); gTasks[taskId].data[0] = 1; - func2(taskId); -} + taskFunc(taskId); +} + +static bool8 sub_8084394(u8 taskId, struct Task *task, struct MapObject *trainerObj); +static bool8 sub_8084398(u8 taskId, struct Task *task, struct MapObject *trainerObj); +static bool8 sub_80843DC(u8 taskId, struct Task *task, struct MapObject *trainerObj); +static bool8 sub_808441C(u8 taskId, struct Task *task, struct MapObject *trainerObj); +static bool8 sub_8084478(u8 taskId, struct Task *task, struct MapObject *trainerObj); +static bool8 sub_8084534(u8 taskId, struct Task *task, struct MapObject *trainerObj); +static bool8 sub_8084578(u8 taskId, struct Task *task, struct MapObject *trainerObj); +static bool8 sub_80845AC(u8 taskId, struct Task *task, struct MapObject *trainerObj); +static bool8 sub_80845C8(u8 taskId, struct Task *task, struct MapObject *trainerObj); +static bool8 sub_80845FC(u8 taskId, struct Task *task, struct MapObject *trainerObj); +static bool8 sub_8084654(u8 taskId, struct Task *task, struct MapObject *trainerObj); +static bool8 sub_80846C8(u8 taskId, struct Task *task, struct MapObject *trainerObj); + +static bool8 (*const gTrainerSeeFuncList[])(u8 taskId, struct Task *task, struct MapObject *trainerObj) = +{ + sub_8084394, + sub_8084398, + sub_80843DC, + sub_808441C, + sub_8084478, + sub_8084534, + sub_8084578, + sub_80845AC, + sub_80845C8, + sub_80845FC, + sub_8084654, + sub_80846C8, +}; void RunTrainerSeeFuncList(u8 taskId) { struct Task *task = &gTasks[taskId]; - struct MapObject *trainerObj = (struct MapObject *)((task->data[1] << 16) | (task->data[2])); + struct MapObject *trainerObj = (struct MapObject *)((task->tTrainerObjHi << 16) | (task->tTrainerObjLo)); if (!trainerObj->active) + { SwitchTaskToFollowupFunc(taskId); + } else - while (gTrainerSeeFuncList[task->data[0]](taskId, task, trainerObj)); + { + while (gTrainerSeeFuncList[task->data[0]](taskId, task, trainerObj)) + ; + } } -u8 sub_8084394() // cant be void because it is called with RunTrainerSeeFuncList with arguments. +static bool8 sub_8084394(u8 taskId, struct Task *task, struct MapObject *trainerObj) // cant be void because it is called with RunTrainerSeeFuncList with arguments. { - return 0; + return FALSE; } -s8 sub_8084398(u8 taskId, struct Task *task, struct MapObject *trainerObj) +static bool8 sub_8084398(u8 taskId, struct Task *task, struct MapObject *trainerObj) { u8 direction; FieldObjectGetLocalIdAndMap(trainerObj, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]); FieldEffectStart(0); - direction = GetFaceDirectionAnimId(trainerObj->mapobj_unk_18); - FieldObjectSetSpecialAnim(trainerObj, direction); task->data[0]++; - return 1; + return TRUE; } -s8 sub_80843DC(u8 taskId, struct Task *task, struct MapObject *trainerObj) +static bool8 sub_80843DC(u8 taskId, struct Task *task, struct MapObject *trainerObj) { if (FieldEffectActiveListContains(0)) - return 0; + { + return FALSE; + } else { task->data[0]++; - if ((u8)(trainerObj->animPattern - 57) <= 1) + if (trainerObj->animPattern == 57 || trainerObj->animPattern == 58) task->data[0] = 6; if (trainerObj->animPattern == 63) task->data[0] = 8; - return 1; + return TRUE; } } -s8 sub_808441C(u8 taskId, struct Task *task, struct MapObject *trainerObj) +static bool8 sub_808441C(u8 taskId, struct Task *task, struct MapObject *trainerObj) { if (!(FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(trainerObj)) || FieldObjectClearAnimIfSpecialAnimFinished(trainerObj)) { - if (task->data[3]) - { - FieldObjectSetSpecialAnim(trainerObj, GetGoSpeed0AnimId(trainerObj->mapobj_unk_18)); - task->data[3]--; - } - else - { - FieldObjectSetSpecialAnim(trainerObj, 0x3E); - task->data[0]++; - } + if (task->data[3]) + { + FieldObjectSetSpecialAnim(trainerObj, GetGoSpeed0AnimId(trainerObj->mapobj_unk_18)); + task->data[3]--; + } + else + { + FieldObjectSetSpecialAnim(trainerObj, 0x3E); + task->data[0]++; + } } - return 0; + return FALSE; } -s8 sub_8084478(u8 taskId, struct Task *task, struct MapObject *trainerObj) +static bool8 sub_8084478(u8 taskId, struct Task *task, struct MapObject *trainerObj) { struct MapObject *playerObj; if (FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(trainerObj) && !FieldObjectClearAnimIfSpecialAnimFinished(trainerObj)) - return 0; + return FALSE; npc_set_running_behaviour_etc(trainerObj, npc_running_behaviour_by_direction(trainerObj->mapobj_unk_18)); sub_805C774(trainerObj, npc_running_behaviour_by_direction(trainerObj->mapobj_unk_18)); sub_805C754(trainerObj); playerObj = &gMapObjects[gPlayerAvatar.mapObjectId]; - if (FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(playerObj) - && !FieldObjectClearAnimIfSpecialAnimFinished(playerObj)) - return 0; + if (FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(playerObj) && !FieldObjectClearAnimIfSpecialAnimFinished(playerObj)) + return FALSE; sub_80597E8(); FieldObjectSetSpecialAnim(&gMapObjects[gPlayerAvatar.mapObjectId], GetFaceDirectionAnimId(GetOppositeDirection(trainerObj->mapobj_unk_18))); task->data[0]++; - return 0; + return FALSE; } -s8 sub_8084534(u8 taskId, struct Task *task, struct MapObject *trainerObj) // technically only 1 parameter, but needs all 3 for TrainerSeeFuncList call. +static bool8 sub_8084534(u8 taskId, struct Task *task, struct MapObject *trainerObj) // technically only 1 parameter, but needs all 3 for TrainerSeeFuncList call. { struct MapObject *playerObj = &gMapObjects[gPlayerAvatar.mapObjectId]; - if ( !FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(playerObj) - || FieldObjectClearAnimIfSpecialAnimFinished(playerObj) ) - SwitchTaskToFollowupFunc(taskId); - - return 0; + if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(playerObj) + || FieldObjectClearAnimIfSpecialAnimFinished(playerObj)) + SwitchTaskToFollowupFunc(taskId); + return FALSE; } -s8 sub_8084578(u8 taskId, struct Task *task, struct MapObject *trainerObj) +static bool8 sub_8084578(u8 taskId, struct Task *task, struct MapObject *trainerObj) { if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(trainerObj) - || FieldObjectClearAnimIfSpecialAnimFinished(trainerObj)) + || FieldObjectClearAnimIfSpecialAnimFinished(trainerObj)) { FieldObjectSetSpecialAnim(trainerObj, 0x59); task->data[0]++; } - return 0; + return FALSE; } -s8 sub_80845AC(u8 taskId, struct Task *task, struct MapObject *trainerObj) +static bool8 sub_80845AC(u8 taskId, struct Task *task, struct MapObject *trainerObj) { - if ( FieldObjectClearAnimIfSpecialAnimFinished(trainerObj) ) + if (FieldObjectClearAnimIfSpecialAnimFinished(trainerObj)) task->data[0] = 3; - return 0; + return FALSE; } -s8 sub_80845C8(u8 taskId, struct Task *task, struct MapObject *trainerObj) +static bool8 sub_80845C8(u8 taskId, struct Task *task, struct MapObject *trainerObj) { if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(trainerObj) || FieldObjectClearAnimIfSpecialAnimFinished(trainerObj)) @@ -304,10 +358,10 @@ s8 sub_80845C8(u8 taskId, struct Task *task, struct MapObject *trainerObj) FieldObjectSetSpecialAnim(trainerObj, 0x3E); task->data[0]++; } - return 0; + return FALSE; } -s8 sub_80845FC(u8 taskId, struct Task *task, struct MapObject *trainerObj) +static bool8 sub_80845FC(u8 taskId, struct Task *task, struct MapObject *trainerObj) { if (FieldObjectCheckIfSpecialAnimFinishedOrInactive(trainerObj)) { @@ -318,10 +372,10 @@ s8 sub_80845FC(u8 taskId, struct Task *task, struct MapObject *trainerObj) task->data[4] = FieldEffectStart(49); task->data[0]++; } - return 0; + return FALSE; } -s8 sub_8084654(u8 taskId, struct Task *task, struct MapObject *trainerObj) +static bool8 sub_8084654(u8 taskId, struct Task *task, struct MapObject *trainerObj) { struct Sprite *sprite; @@ -336,17 +390,25 @@ s8 sub_8084654(u8 taskId, struct Task *task, struct MapObject *trainerObj) FieldObjectSetSpecialAnim(trainerObj, sub_806084C(trainerObj->mapobj_unk_18)); task->data[0]++; } - return 0; + return FALSE; } -s8 sub_80846C8(u8 taskId, struct Task *task, struct MapObject *trainerObj) +static bool8 sub_80846C8(u8 taskId, struct Task *task, struct MapObject *trainerObj) { if (!FieldEffectActiveListContains(49)) task->data[0] = 3; - return 0; + return FALSE; } +static bool8 (*const gTrainerSeeFuncList2[])(u8, struct Task *, struct MapObject *) = +{ + sub_80845C8, + sub_80845FC, + sub_8084654, + sub_80846C8, +}; + void sub_80846E4(u8 taskId) { struct Task *task = &gTasks[taskId]; @@ -375,12 +437,14 @@ void sub_8084794(struct MapObject *var) StoreWordInTwoHalfwords(&gTasks[CreateTask(sub_80846E4, 0)].data[1], (u32)var); } -void sub_80847C8(void) +static void Task_DestroyTrainerApproachTask(u8); + +void ScrSpecial_EndTrainerApproach(void) { - sub_80842FC(sub_80847D8); + sub_80842FC(Task_DestroyTrainerApproachTask); } -void sub_80847D8(u8 taskId) +static void Task_DestroyTrainerApproachTask(u8 taskId) { DestroyTask(taskId); EnableBothScriptContexts(); diff --git a/src/wild_encounter.c b/src/wild_encounter.c index 7001c2eaa..23e74561c 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -3304,7 +3304,7 @@ bool8 StandardWildEncounter(u16 a, u16 b) roamer = &gSaveBlock1.roamer; if (RepelCheck(roamer->level)) { - StartBattle_Roamer(); + BattleSetup_StartRoamerBattle(); return 1; } } @@ -3312,7 +3312,7 @@ bool8 StandardWildEncounter(u16 a, u16 b) { if (DoMassOutbreakEncounterTest() == TRUE && SetUpMassOutbreakEncounter(1) == TRUE) { - CheckForSafariZoneAndProceed(); + BattleSetup_StartWildBattle(); return 1; } if (GenerateWildMon(gWildMonHeaders[headerNum].landMonsInfo, 0, TRUE) == TRUE) @@ -3338,7 +3338,7 @@ bool8 StandardWildEncounter(u16 a, u16 b) roamer = &gSaveBlock1.roamer; if (RepelCheck(roamer->level)) { - StartBattle_Roamer(); + BattleSetup_StartRoamerBattle(); return 1; } } @@ -3349,7 +3349,7 @@ bool8 StandardWildEncounter(u16 a, u16 b) { label: //_0808527A - CheckForSafariZoneAndProceed(); + BattleSetup_StartWildBattle(); return 1; } } @@ -3377,7 +3377,7 @@ void RockSmashWildEncounter(void) else if (DoWildEncounterTest(wildPokemonInfo->encounterRate, 1) == TRUE && GenerateWildMon(wildPokemonInfo, 2, TRUE) == TRUE) { - CheckForSafariZoneAndProceed(); + BattleSetup_StartWildBattle(); gScriptResult = 1; return; } @@ -3403,14 +3403,14 @@ bool8 SweetScentWildEncounter(void) return FALSE; if (TryStartRoamerEncounter() == TRUE) { - StartBattle_Roamer(); + BattleSetup_StartRoamerBattle(); return TRUE; } if (DoMassOutbreakEncounterTest() == TRUE) SetUpMassOutbreakEncounter(0); else GenerateWildMon(wildPokemonInfo, 0, FALSE); - CheckForSafariZoneAndProceed(); + BattleSetup_StartWildBattle(); return TRUE; } else if (MetatileBehavior_IsWaterWildEncounter(MapGridGetMetatileBehaviorAt(x, y)) == 1) @@ -3420,11 +3420,11 @@ bool8 SweetScentWildEncounter(void) return FALSE; if (TryStartRoamerEncounter() == TRUE) { - StartBattle_Roamer(); + BattleSetup_StartRoamerBattle(); return TRUE; } GenerateWildMon(wildPokemonInfo, 1, FALSE); - CheckForSafariZoneAndProceed(); + BattleSetup_StartWildBattle(); return TRUE; } } @@ -3460,7 +3460,7 @@ void FishingWildEncounter(u8 rod) } IncrementGameStat(12); sub_80BEA50(species); - CheckForSafariZoneAndProceed(); + BattleSetup_StartWildBattle(); } u16 GetLocalWildMon(bool8 *isWaterMon) -- cgit v1.2.3 From 3b3d1596526ad0b19f7042d5176d92eac4738451 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 10 Sep 2017 16:36:02 -0500 Subject: fix German build --- data-de/event_scripts.s | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/data-de/event_scripts.s b/data-de/event_scripts.s index a418c658d..82b39c849 100644 --- a/data-de/event_scripts.s +++ b/data-de/event_scripts.s @@ -932,7 +932,7 @@ SecretBase_RedCave1_EventScript_19F806:: @ 819F806 gUnknown_0819F80B:: @ 819F80B lock special PlayTrainerEncounterMusic - special sub_80847C8 + special ScrSpecial_EndTrainerApproach waitstate jump EventScript_19F8F2 @@ -941,7 +941,7 @@ gUnknown_0819F818:: @ 819F818 faceplayer move LAST_TALKED, Movement_19F8F0 waitmove 0 - specialval RESULT, sub_8082564 + specialval RESULT, ScrSpecial_HasTrainerBeenFought compare RESULT, 0 jumpif 5, EventScript_19F83F special PlayTrainerEncounterMusic @@ -955,7 +955,7 @@ gUnknown_0819F840:: @ 819F840 lock faceplayer call EventScript_19F8E5 - specialval RESULT, sub_8082564 + specialval RESULT, ScrSpecial_HasTrainerBeenFought compare RESULT, 0 jumpif 5, EventScript_19F877 special CheckForAlivePartyMons @@ -966,7 +966,7 @@ gUnknown_0819F840:: @ 819F840 jump EventScript_19F8F2 EventScript_19F870: - special sub_8082718 + special ScrSpecial_ShowTrainerNonBattlingSpeech waittext waitbutton release @@ -984,15 +984,15 @@ gUnknown_0819F878:: @ 819F878 gUnknown_0819F887:: @ 819F887 call EventScript_19F8E5 - specialval RESULT, sub_8082C9C + specialval RESULT, ScrSpecial_GetTrainerEyeRematchFlag compare RESULT, 0 jumpeq EventScript_19F8AD special PlayTrainerEncounterMusic special sub_8082524 - special sub_80826D8 + special ScrSpecial_ShowTrainerIntroSpeech waittext waitbutton - special sub_80826B0 + special ScrSpecial_StartTrainerEyeRematch waitstate releaseall end @@ -1001,7 +1001,7 @@ EventScript_19F8AD: endtrainerbattle gUnknown_0819F8AE:: @ 819F8AE - specialval RESULT, sub_8082C9C + specialval RESULT, ScrSpecial_GetTrainerEyeRematchFlag compare RESULT, 0 jumpeq EventScript_19F8DD special CheckForAlivePartyMons @@ -1009,10 +1009,10 @@ gUnknown_0819F8AE:: @ 819F8AE jumpif 5, EventScript_19F8DE special PlayTrainerEncounterMusic special sub_8082524 - special sub_80826D8 + special ScrSpecial_ShowTrainerIntroSpeech waittext waitbutton - special sub_80826B0 + special ScrSpecial_StartTrainerEyeRematch waitstate releaseall end @@ -1021,7 +1021,7 @@ EventScript_19F8DD: endtrainerbattle EventScript_19F8DE: - special sub_8082718 + special ScrSpecial_ShowTrainerNonBattlingSpeech waittext waitbutton release @@ -1037,7 +1037,7 @@ Movement_19F8F0:: step_end EventScript_19F8F2: - special sub_80826D8 + special ScrSpecial_ShowTrainerIntroSpeech waittext waitbutton reptrainerbattle -- cgit v1.2.3 From a185f8a26dc5e5a04908c272ab54bede7af8a10c Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Tue, 12 Sep 2017 16:53:04 -0500 Subject: lots more relabeling --- asm/fldeff_80C5CD4.s | 12 +- asm/pokedex_area_screen.s | 6 +- asm/pokenav.s | 2 +- data/event_scripts.s | 2 +- include/battle.h | 14 ++ include/global.fieldmap.h | 20 +-- include/global.h | 2 +- include/pokemon_menu.h | 2 +- include/rom4.h | 40 ++--- include/script.h | 4 - include/vars.h | 1 + include/wild_encounter.h | 2 +- src/battle_4.c | 20 +-- src/battle_setup.c | 40 ++--- src/bike.c | 2 +- src/evolution_scene.c | 4 +- src/field_control_avatar.c | 2 +- src/field_effect.c | 4 +- src/field_fadetransition.c | 6 +- src/field_map_obj.c | 2 +- src/field_screen_effect.c | 6 +- src/field_specials.c | 4 +- src/fieldmap.c | 2 +- src/fldeff_cut.c | 4 +- src/fldeff_flash.c | 6 +- src/fldeff_strength.c | 4 +- src/fldeff_sweetscent.c | 2 +- src/fldeff_teleport.c | 6 +- src/item_use.c | 2 +- src/main_menu.c | 406 ++++++++++++++++++++++++--------------------- src/pokemon_menu.c | 14 +- src/region_map.c | 12 +- src/rom3.c | 4 +- src/rom4.c | 240 ++++++++++++++------------- src/rom6.c | 4 +- src/scrcmd.c | 10 +- src/script.c | 12 +- src/time_events.c | 2 +- src/wild_encounter.c | 6 +- 39 files changed, 495 insertions(+), 438 deletions(-) diff --git a/asm/fldeff_80C5CD4.s b/asm/fldeff_80C5CD4.s index e049db56a..011ce6427 100644 --- a/asm/fldeff_80C5CD4.s +++ b/asm/fldeff_80C5CD4.s @@ -815,7 +815,7 @@ SetUpFieldMove_SecretPower: @ 80C62C4 bne _080C6330 bl sub_80C6264 ldr r1, _080C6320 @ =gFieldCallback - ldr r0, _080C6324 @ =sub_808AB90 + ldr r0, _080C6324 @ =FieldCallback_Teleport str r0, [r1] ldr r1, _080C6328 @ =gUnknown_03005CE4 ldr r0, _080C632C @ =sub_80C639C @@ -824,7 +824,7 @@ SetUpFieldMove_SecretPower: @ 80C62C4 _080C6318: .4byte gScriptResult _080C631C: .4byte gUnknown_0203923C _080C6320: .4byte gFieldCallback -_080C6324: .4byte sub_808AB90 +_080C6324: .4byte FieldCallback_Teleport _080C6328: .4byte gUnknown_03005CE4 _080C632C: .4byte sub_80C639C _080C6330: @@ -836,14 +836,14 @@ _080C6330: bne _080C6360 bl sub_80C6264 ldr r1, _080C6350 @ =gFieldCallback - ldr r0, _080C6354 @ =sub_808AB90 + ldr r0, _080C6354 @ =FieldCallback_Teleport str r0, [r1] ldr r1, _080C6358 @ =gUnknown_03005CE4 ldr r0, _080C635C @ =sub_80C64A8 b _080C6380 .align 2, 0 _080C6350: .4byte gFieldCallback -_080C6354: .4byte sub_808AB90 +_080C6354: .4byte FieldCallback_Teleport _080C6358: .4byte gUnknown_03005CE4 _080C635C: .4byte sub_80C64A8 _080C6360: @@ -859,7 +859,7 @@ _080C636E: _080C6372: bl sub_80C6264 ldr r1, _080C638C @ =gFieldCallback - ldr r0, _080C6390 @ =sub_808AB90 + ldr r0, _080C6390 @ =FieldCallback_Teleport str r0, [r1] ldr r1, _080C6394 @ =gUnknown_03005CE4 ldr r0, _080C6398 @ =sub_80C660C @@ -872,7 +872,7 @@ _080C6384: bx r1 .align 2, 0 _080C638C: .4byte gFieldCallback -_080C6390: .4byte sub_808AB90 +_080C6390: .4byte FieldCallback_Teleport _080C6394: .4byte gUnknown_03005CE4 _080C6398: .4byte sub_80C660C thumb_func_end SetUpFieldMove_SecretPower diff --git a/asm/pokedex_area_screen.s b/asm/pokedex_area_screen.s index 542eed201..9e380f597 100644 --- a/asm/pokedex_area_screen.s +++ b/asm/pokedex_area_screen.s @@ -518,7 +518,7 @@ _08110A44: bl GetRoamerLocation ldrb r0, [r4, 0x10] ldrb r1, [r4, 0x11] - bl get_mapheader_by_bank_and_number + bl Overworld_GetMapHeaderByGroupAndId ldrb r0, [r0, 0x14] strh r0, [r4, 0x12] movs r3, 0x88 @@ -566,7 +566,7 @@ SetAreaHasMon: @ 8110A98 adds r0, r5 strb r1, [r0, 0x11] adds r0, r2, 0 - bl get_mapheader_by_bank_and_number + bl Overworld_GetMapHeaderByGroupAndId ldrb r0, [r0, 0x14] bl sub_80FBA04 ldrh r1, [r4] @@ -599,7 +599,7 @@ SetSpecialMapHasMon: @ 8110AE4 cmp r0, 0x1F bhi _08110B96 adds r0, r2, 0 - bl get_mapheader_by_bank_and_number + bl Overworld_GetMapHeaderByGroupAndId adds r6, r0, 0 ldrb r0, [r6, 0x14] cmp r0, 0x57 diff --git a/asm/pokenav.s b/asm/pokenav.s index ea8031cd3..1062abc48 100644 --- a/asm/pokenav.s +++ b/asm/pokenav.s @@ -22402,7 +22402,7 @@ _080F6C3A: strb r1, [r0] ldrh r0, [r6, 0xA] ldrh r1, [r6, 0xC] - bl get_mapheader_by_bank_and_number + bl Overworld_GetMapHeaderByGroupAndId ldrh r1, [r5] lsls r1, 3 adds r4, r1 diff --git a/data/event_scripts.s b/data/event_scripts.s index 2d0b1b4fe..3ea5cee24 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -1324,7 +1324,7 @@ EverGrandeCity_HallOfFame_EventScript_19FC70:: @ 819FC70 setflag 2141 return -EventScript_LeagueWhiteOut:: @ 819FC74 +S_WhiteOut:: @ 819FC74 call EverGrandeCity_HallOfFame_EventScript_19FD09 call EventScript_19FC84 jump gUnknown_0819FC9F diff --git a/include/battle.h b/include/battle.h index 72211f50f..47cb7cf8e 100644 --- a/include/battle.h +++ b/include/battle.h @@ -173,6 +173,20 @@ #define WEATHER_SUN_ANY ((WEATHER_SUN_TEMPORARY | WEATHER_SUN_PERMANENT)) #define WEATHER_HAIL (1 << 7) +enum +{ + BATTLE_TERRAIN_GRASS, + BATTLE_TERRAIN_LONG_GRASS, + BATTLE_TERRAIN_SAND, + BATTLE_TERRAIN_UNDERWATER, + BATTLE_TERRAIN_WATER, + BATTLE_TERRAIN_POND, + BATTLE_TERRAIN_MOUNTAIN, + BATTLE_TERRAIN_CAVE, + BATTLE_TERRAIN_BUILDING, + BATTLE_TERRAIN_PLAIN, +}; + // needed to match the hack that is get_item, thanks cam, someone else clean this up later. extern u8 unk_2000000[]; diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index 4029132e8..5c93eb8ab 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -14,16 +14,16 @@ enum // map types enum { - MAP_TYPE_0, - MAP_TYPE_TOWN, - MAP_TYPE_CITY, - MAP_TYPE_ROUTE, - MAP_TYPE_UNDERGROUND, - MAP_TYPE_UNDERWATER, - MAP_TYPE_6, - MAP_TYPE_7, - MAP_TYPE_INDOOR, - MAP_TYPE_SECRET_BASE + MAP_TYPE_0, // 0 + MAP_TYPE_TOWN, // 1 + MAP_TYPE_CITY, // 2 + MAP_TYPE_ROUTE, // 3 + MAP_TYPE_UNDERGROUND, // 4 + MAP_TYPE_UNDERWATER, // 5 + MAP_TYPE_6, // 6 + MAP_TYPE_7, // 7 + MAP_TYPE_INDOOR, // 8 + MAP_TYPE_SECRET_BASE // 9 }; // map battle scenes diff --git a/include/global.h b/include/global.h index ab7d43955..79269937f 100644 --- a/include/global.h +++ b/include/global.h @@ -608,7 +608,7 @@ struct SaveBlock1 /* 0x02025734 */ /*0x2C*/ u16 battleMusic; /*0x2E*/ u8 weather; /*0x2F*/ u8 filler_2F; - /*0x30*/ u8 flashUsed; + /*0x30*/ u8 flashLevel; // flash level on current map, 0 being normal and 4 being the darkest /*0x32*/ u16 mapDataId; /*0x34*/ u16 mapView[0x100]; /*0x234*/ u8 playerPartyCount; diff --git a/include/pokemon_menu.h b/include/pokemon_menu.h index 7dfa1c183..06f905577 100644 --- a/include/pokemon_menu.h +++ b/include/pokemon_menu.h @@ -37,7 +37,7 @@ extern void (*gUnknown_03005CE4)(void); void sub_808B5B4(u32 taskID); void sub_8089A70(void); void sub_808A004(u8 taskID); -void sub_808AB90(void); +void FieldCallback_Teleport(void); void sub_808AD58(void); void sub_808B020(void); void sub_808B0C0(u8 taskID); diff --git a/include/rom4.h b/include/rom4.h index a319c6219..81f37ae8b 100644 --- a/include/rom4.h +++ b/include/rom4.h @@ -27,7 +27,7 @@ extern void (*gFieldCallback)(void); // sub_8052F5C void flag_var_implications_of_teleport_(void); -void new_game(void); +void Overworld_ResetStateAfterTeleport(void); void sub_8053014(void); void sub_8053050(void); // sub_805308C @@ -36,18 +36,18 @@ void IncrementGameStat(u8 index); u32 GetGameStat(u8 index); void SetGameStat(u8, u32); // sub_8053154 -// sub_8053198 -void update_saveblock1_field_object_coords(u8, s16, s16); -void update_saveblock1_field_object_movement_behavior(u8, u8); +// LoadSaveblockMapObjScripts +void Overworld_SaveMapObjCoords(u8, s16, s16); +void Overworld_SaveMapObjMovementType(u8, u8); // mapdata_load_assets_to_gpu_and_full_redraw // get_mapdata_header // warp_shift // warp_set // warp_data_is_not_neg_1 -struct MapHeader * const get_mapheader_by_bank_and_number(u16 mapGroup, u16 mapNum); +struct MapHeader * const Overworld_GetMapHeaderByGroupAndId(u16 mapGroup, u16 mapNum); struct MapHeader * const warp1_get_mapheader(void); // set_current_map_header_from_sav1_save_old_name -// sub_805338C +// LoadSaveblockMapHeader // sub_80533CC void warp_in(void); void warp1_set(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y); @@ -81,14 +81,14 @@ void walkrun_find_lowest_active_bit_in_bitfield(void); u8 sub_8053B00(struct UnkPlayerStruct *playerStruct, u16 a2, u8 a3); u8 sub_8053B60(struct UnkPlayerStruct *playerStruct, u8, u16, u8); u16 cur_mapdata_block_role_at_screen_center_acc_to_sav1(void); -bool32 IsBikingAllowedByMap(void); -void sub_8053C98(void); -void sub_8053CE4(s32 a1); -u8 sav1_get_flash_used_on_map(void); +bool32 Overworld_IsBikeAllowedOnCurrentMap(void); +void SetDefaultFlashLevel(void); +void Overworld_SetFlashLevel(s32 a1); +u8 Overworld_GetFlashLevel(void); void sub_8053D14(u16); // sub_8053D30 // sub_8053D6C -// sub_8053D9C +// GetLocationMusic // sav1_map_get_music // warp1_target_get_music // call_map_music_set_to_zero @@ -97,21 +97,21 @@ void sav1_set_battle_music_maybe(u16); void sav1_reset_battle_music_maybe(void); void sub_8053F0C(void); void sub_8053F84(void); -void ChangeMapMusic(u16); -// is_warp1_light_level_8_or_9 +void Overworld_ChangeMusicTo(u16); +// GetMapMusicFadeoutSpeed void sub_8053FF8(void); bool8 sub_8054034(void); void sub_8054044(void); // PlayAmbientCry void UpdateAmbientCry(s16 *, u16 *); void ChooseAmbientCrySpecies(void); -u8 get_map_light_level_by_bank_and_number(s8 mapGroup, s8 mapNum); -// get_map_light_level_from_warp -u8 sav1_map_get_light_level(void); -u8 get_map_light_from_warp0(void); -bool8 is_light_level_1_2_3_5_or_6(u8 a1); -bool8 is_light_level_1_2_3_or_6(u8 a1); -u8 is_light_level_8_or_9(u8); +u8 GetMapTypeByGroupAndId(s8 mapGroup, s8 mapNum); +// GetMapTypeByWarpData +u8 Overworld_GetMapTypeOfSaveblockLocation(void); +u8 get_map_type_from_warp0(void); +bool8 is_map_type_1_2_3_5_or_6(u8 a1); +bool8 Overworld_MapTypeAllowsTeleportAndFly(u8 a1); +u8 Overworld_MapTypeIsIndoors(u8); // unref_sub_8054260 u8 sav1_map_get_name(); // sav1_map_get_battletype diff --git a/include/script.h b/include/script.h index 25c7649b4..5a899cf4a 100644 --- a/include/script.h +++ b/include/script.h @@ -42,16 +42,12 @@ void ScriptContext1_SetupScript(const u8 *ptr); void ScriptContext1_Stop(void); void EnableBothScriptContexts(void); void ScriptContext2_RunNewScript(const u8 *ptr); -u8 *mapheader_get_tagged_pointer(u8 tag); -void mapheader_run_script_by_tag(u8 tag); -u8 *mapheader_get_first_match_from_tagged_ptr_list(u8 tag); void mapheader_run_script_with_tag_x1(void); void mapheader_run_script_with_tag_x3(void); void mapheader_run_script_with_tag_x5(void); void mapheader_run_script_with_tag_x6(void); bool8 mapheader_run_first_tag2_script_list_match(void); void mapheader_run_first_tag4_script_list_match(void); -u32 CalculateRamScriptChecksum(void); void ClearRamScript(void); bool8 InitRamScript(u8 *script, u16 scriptSize, u8 mapGroup, u8 mapNum, u8 objectId); u8 *GetRamScript(u8 objectId, u8 *script); diff --git a/include/vars.h b/include/vars.h index efbb462a4..179fd6f93 100644 --- a/include/vars.h +++ b/include/vars.h @@ -45,6 +45,7 @@ #define VAR_0x4095 0x4095 #define VAR_0x4097 0x4097 #define VAR_0x409a 0x409a +#define VAR_WEATHER_INSTITUTE_CLEARED 0x040B3 #define VAR_PORTHOLE 0x40B4 #define VAR_0x40BC 0x40BC diff --git a/include/wild_encounter.h b/include/wild_encounter.h index a4485b08d..1a0b6982d 100644 --- a/include/wild_encounter.h +++ b/include/wild_encounter.h @@ -33,7 +33,7 @@ bool8 SweetScentWildEncounter(void); bool8 GetFishingWildMonListHeader(void); void FishingWildEncounter(u8 rod); u16 GetLocalWildMon(bool8 *isWaterMon); -u16 GetMirageIslandMon(void); +u16 GetLocalWaterMon(void); bool8 UpdateRepelCounter(void); #endif // GUARD_WILD_ENCOUNTER_H diff --git a/src/battle_4.c b/src/battle_4.c index ef8307da2..65ea765cf 100644 --- a/src/battle_4.c +++ b/src/battle_4.c @@ -154,7 +154,7 @@ u8 GetMoveTarget(u16 move, u8 targetbyte); //get target of move void sub_80153D0(u8 atk); //pressure perish song pp decrement u8 CastformDataTypeChange(u8 bank); void b_push_move_exec(u8* bs_ptr); -u8 sav1_map_get_light_level(void); +u8 Overworld_GetMapTypeOfSaveblockLocation(void); u8 CalculatePlayerPartyCount(void); u16 Sqrt(u32 num); u8 sub_809070C(u16 nationalNum, u32 TiD, u32 PiD); //task prepare poke dex display @@ -17570,28 +17570,28 @@ static void atkE4_getsecretpowereffect(void) { switch (gBattleTerrain) { - case 0: + case BATTLE_TERRAIN_GRASS: gBattleCommunication[MOVE_EFFECT_BYTE] = 2; break; - case 1: + case BATTLE_TERRAIN_LONG_GRASS: gBattleCommunication[MOVE_EFFECT_BYTE] = 1; break; - case 2: + case BATTLE_TERRAIN_SAND: gBattleCommunication[MOVE_EFFECT_BYTE] = 27; break; - case 3: + case BATTLE_TERRAIN_UNDERWATER: gBattleCommunication[MOVE_EFFECT_BYTE] = 23; break; - case 4: + case BATTLE_TERRAIN_WATER: gBattleCommunication[MOVE_EFFECT_BYTE] = 22; break; - case 5: + case BATTLE_TERRAIN_POND: gBattleCommunication[MOVE_EFFECT_BYTE] = 24; break; - case 6: + case BATTLE_TERRAIN_MOUNTAIN: gBattleCommunication[MOVE_EFFECT_BYTE] = 7; break; - case 7: + case BATTLE_TERRAIN_CAVE: gBattleCommunication[MOVE_EFFECT_BYTE] = 8; break; default: @@ -17818,7 +17818,7 @@ void atkEF_pokeball_catch_calculation(void) ball_multiplier = 10; break; case ITEM_DIVE_BALL: - if (sav1_map_get_light_level() == 5) + if (Overworld_GetMapTypeOfSaveblockLocation() == 5) ball_multiplier = 35; else ball_multiplier = 10; diff --git a/src/battle_setup.c b/src/battle_setup.c index b3a7e2189..dba2a6ed4 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -642,11 +642,11 @@ s8 BattleSetup_GetTerrain(void) tileBehavior = MapGridGetMetatileBehaviorAt(x, y); if (MetatileBehavior_IsTallGrass(tileBehavior)) - return 0; + return BATTLE_TERRAIN_GRASS; if (MetatileBehavior_IsLongGrass(tileBehavior)) - return 1; + return BATTLE_TERRAIN_LONG_GRASS; if (MetatileBehavior_IsSandOrDeepSand(tileBehavior)) - return 2; + return BATTLE_TERRAIN_SAND; switch (gMapHeader.mapType) { case MAP_TYPE_TOWN: @@ -655,38 +655,38 @@ s8 BattleSetup_GetTerrain(void) break; case MAP_TYPE_UNDERGROUND: if (sub_80574C4(tileBehavior)) - return 8; + return BATTLE_TERRAIN_BUILDING; if (MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior)) - return 5; - return 7; + return BATTLE_TERRAIN_POND; + return BATTLE_TERRAIN_CAVE; case MAP_TYPE_INDOOR: case MAP_TYPE_SECRET_BASE: - return 8; + return BATTLE_TERRAIN_BUILDING; case MAP_TYPE_UNDERWATER: - return 3; + return BATTLE_TERRAIN_UNDERWATER; case MAP_TYPE_6: if (MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior)) - return 4; - return 9; + return BATTLE_TERRAIN_WATER; + return BATTLE_TERRAIN_PLAIN; } if (sub_8057568(tileBehavior)) - return 4; + return BATTLE_TERRAIN_WATER; if (MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior)) - return 5; + return BATTLE_TERRAIN_POND; if (sub_80574D8(tileBehavior)) - return 6; + return BATTLE_TERRAIN_MOUNTAIN; if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING)) { if (sub_8057450(tileBehavior)) - return 5; + return BATTLE_TERRAIN_POND; if (MetatileBehavior_IsBridge(tileBehavior) == TRUE) - return 4; + return BATTLE_TERRAIN_WATER; } - if (gSaveBlock1.location.mapGroup == 0 && gSaveBlock1.location.mapNum == 28) - return 2; + if (gSaveBlock1.location.mapGroup == MAP_GROUP_ROUTE113 && gSaveBlock1.location.mapNum == MAP_ID_ROUTE113) + return BATTLE_TERRAIN_SAND; if (GetSav1Weather() == 8) - return 2; - return 9; + return BATTLE_TERRAIN_SAND; + return BATTLE_TERRAIN_PLAIN; } static s8 GetBattleTransitionTypeByMap(void) @@ -696,7 +696,7 @@ static s8 GetBattleTransitionTypeByMap(void) PlayerGetDestCoords(&x, &y); tileBehavior = MapGridGetMetatileBehaviorAt(x, y); - if (sav1_get_flash_used_on_map()) + if (Overworld_GetFlashLevel()) return 2; if (!MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior)) { diff --git a/src/bike.c b/src/bike.c index eaaf17a71..cd0324bd5 100644 --- a/src/bike.c +++ b/src/bike.c @@ -944,7 +944,7 @@ void GetOnOffBike(u8 var) { SetPlayerAvatarTransitionFlags(var); sav1_set_battle_music_maybe(BGM_CYCLING); - ChangeMapMusic(BGM_CYCLING); + Overworld_ChangeMusicTo(BGM_CYCLING); } } diff --git a/src/evolution_scene.c b/src/evolution_scene.c index eeeb04f56..d0bd219cd 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -212,7 +212,7 @@ void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, gUnknown_030041B8 = 0; InitWindowFromConfig(&gUnknown_03004210, &gWindowConfig_81E6C58); - gBattleTerrain = 9; + gBattleTerrain = BATTLE_TERRAIN_PLAIN; sub_800D6D4(); sub_800DAB8(); @@ -320,7 +320,7 @@ static void CB2_EvolutionSceneLoadGraphics(void) gUnknown_030041B8 = 0; InitWindowFromConfig(&gUnknown_03004210, &gWindowConfig_81E6C58); - gBattleTerrain = 9; + gBattleTerrain = BATTLE_TERRAIN_PLAIN; sub_800D6D4(); sub_800DAB8(); diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index a8f6b6b9b..80c04652b 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -698,7 +698,7 @@ static void sub_8068C30(struct MapHeader *unused, s8 b, struct MapPosition *posi warp1_set_2(warpEvent->unk7, warpEvent->mapNum, warpEvent->mapGroup); sub_80535C4(position->x, position->y); - mapHeader = get_mapheader_by_bank_and_number(warpEvent->unk7, warpEvent->mapNum); + mapHeader = Overworld_GetMapHeaderByGroupAndId(warpEvent->unk7, warpEvent->mapNum); if (mapHeader->events->warps[warpEvent->mapGroup].mapNum == 0x7F) saved_warp2_set(mapHeader->events->warps[b].mapGroup, gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, b); } diff --git a/src/field_effect.c b/src/field_effect.c index 168962ca1..79c00edff 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -2385,7 +2385,7 @@ void sub_8088890(struct Sprite *); bool8 FldEff_FieldMoveShowMon(void) { u8 taskId; - if (is_light_level_1_2_3_5_or_6(sav1_map_get_light_level()) == TRUE) + if (is_map_type_1_2_3_5_or_6(Overworld_GetMapTypeOfSaveblockLocation()) == TRUE) { taskId = CreateTask(sub_8088120, 0xff); } else @@ -2881,7 +2881,7 @@ u8 FldEff_UseSurf(void) taskId = CreateTask(sub_8088954, 0xff); gTasks[taskId].data[15] = gFieldEffectArguments[0]; sav1_reset_battle_music_maybe(); - ChangeMapMusic(0x016d); + Overworld_ChangeMusicTo(0x016d); return FALSE; } diff --git a/src/field_fadetransition.c b/src/field_fadetransition.c index 89051e794..d1890013a 100644 --- a/src/field_fadetransition.c +++ b/src/field_fadetransition.c @@ -40,8 +40,8 @@ void palette_bg_fill_black(void) void pal_fill_for_map_transition(void) { - u8 map_light = get_map_light_from_warp0(); - switch (fade_type_for_given_maplight_pair(map_light, sav1_map_get_light_level())) + u8 map_light = get_map_type_from_warp0(); + switch (fade_type_for_given_maplight_pair(map_light, Overworld_GetMapTypeOfSaveblockLocation())) { case 0: fade_screen(0, 0); @@ -61,7 +61,7 @@ void pal_fill_black(void) void fade_8080918(void) { - u8 light_level = sav1_map_get_light_level(); + u8 light_level = Overworld_GetMapTypeOfSaveblockLocation(); switch (sub_810CDB8(light_level, warp1_get_mapheader()->mapType)) { case 0: diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 73bd5508a..b8dce3dc2 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -3244,7 +3244,7 @@ struct MapObjectTemplate *GetFieldObjectTemplateByLocalIdAndMap(u8 localId, u8 m return FindFieldObjectTemplateInArrayByLocalId(localId, gSaveBlock1.mapObjectTemplates, gMapHeader.events->mapObjectCount); else { - struct MapHeader *mapHeader = get_mapheader_by_bank_and_number(mapGroup, mapNum); + struct MapHeader *mapHeader = Overworld_GetMapHeaderByGroupAndId(mapGroup, mapNum); return FindFieldObjectTemplateInArrayByLocalId(localId, mapHeader->events->mapObjects, mapHeader->events->mapObjectCount); } diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index 79913e1c5..c6a442f39 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -21,7 +21,7 @@ extern u16 gUnknown_03004DE0[][0x3C0]; const static u16 gUnknown_0839ACDC[] = { 0xC8, 0x48, 0x38, 0x28, 0x18, 0x0 }; -const s32 gUnknown_0839ACE8 = 4; +const s32 gMaxFlashLevel = 4; const static u32 gUnknown_0839ACEC[3] = { @@ -137,11 +137,11 @@ static u8 sub_8081534(s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, u8 a6) void sub_8081594(u8 a1) { - u8 index = sav1_get_flash_used_on_map(); + u8 flashLevel = Overworld_GetFlashLevel(); u8 value = 0; if (!a1) value = 1; - sub_8081534(120, 80, gUnknown_0839ACDC[index], gUnknown_0839ACDC[a1], value, 1); + sub_8081534(120, 80, gUnknown_0839ACDC[flashLevel], gUnknown_0839ACDC[a1], value, 1); sub_8081510(); ScriptContext2_Enable(); } diff --git a/src/field_specials.c b/src/field_specials.c index 454bd8d96..000992ffe 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -2005,7 +2005,7 @@ bool8 sub_810F828(void) void SetRoute119Weather(void) { - if (is_light_level_1_2_3_5_or_6(get_map_light_from_warp0()) != TRUE) + if (is_map_type_1_2_3_5_or_6(get_map_type_from_warp0()) != TRUE) { SetSav1Weather(0x14); } @@ -2013,7 +2013,7 @@ void SetRoute119Weather(void) void SetRoute123Weather(void) { - if (is_light_level_1_2_3_5_or_6(get_map_light_from_warp0()) != TRUE) + if (is_map_type_1_2_3_5_or_6(get_map_type_from_warp0()) != TRUE) { SetSav1Weather(0x15); } diff --git a/src/fieldmap.c b/src/fieldmap.c index 0e0ec246c..af1d5f6b6 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -31,7 +31,7 @@ static const struct ConnectionFlags sDummyConnectionFlags = {0}; struct MapHeader *mapconnection_get_mapheader(struct MapConnection *connection) { - return get_mapheader_by_bank_and_number(connection->mapGroup, connection->mapNum); + return Overworld_GetMapHeaderByGroupAndId(connection->mapGroup, connection->mapNum); } void not_trainer_hill_battle_pyramid(void) diff --git a/src/fldeff_cut.c b/src/fldeff_cut.c index 2691f1a75..edc1b578c 100644 --- a/src/fldeff_cut.c +++ b/src/fldeff_cut.c @@ -38,7 +38,7 @@ bool8 SetUpFieldMove_Cut(void) if(npc_before_player_of_type(0x52) == TRUE) // is in front of tree? { - gFieldCallback = sub_808AB90; + gFieldCallback = FieldCallback_Teleport; gUnknown_03005CE4 = sub_80A2634; return TRUE; } @@ -57,7 +57,7 @@ bool8 SetUpFieldMove_Cut(void) if(MetatileBehavior_IsPokeGrass(tileBehavior) == TRUE || MetatileBehavior_IsAshGrass(tileBehavior) == TRUE) { - gFieldCallback = sub_808AB90; + gFieldCallback = FieldCallback_Teleport; gUnknown_03005CE4 = sub_80A25E8; return TRUE; } diff --git a/src/fldeff_flash.c b/src/fldeff_flash.c index a63cbbbf1..c965d3f64 100644 --- a/src/fldeff_flash.c +++ b/src/fldeff_flash.c @@ -51,7 +51,7 @@ bool8 SetUpFieldMove_Flash(void) { if (gMapHeader.cave == TRUE && !FlagGet(SYS_USE_FLASH)) { - gFieldCallback = sub_808AB90; + gFieldCallback = FieldCallback_Teleport; gUnknown_03005CE4 = sub_810CBFC; return TRUE; } @@ -123,8 +123,8 @@ void sub_810CC80(void) bool8 sub_810CD5C(void) { u8 i; - u8 v0 = get_map_light_from_warp0(); - u8 v1 = sav1_map_get_light_level(); + u8 v0 = get_map_type_from_warp0(); + u8 v1 = Overworld_GetMapTypeOfSaveblockLocation(); for (i = 0; gUnknown_083F7FC4[i].unk0; i++) { diff --git a/src/fldeff_strength.c b/src/fldeff_strength.c index c641945d6..a2572a6cf 100644 --- a/src/fldeff_strength.c +++ b/src/fldeff_strength.c @@ -25,7 +25,7 @@ bool8 SetUpFieldMove_Strength(void) if (ShouldDoBrailleStrengthEffect()) { gScriptResult = gLastFieldPokeMenuOpened; - gFieldCallback = sub_808AB90; + gFieldCallback = FieldCallback_Teleport; gUnknown_03005CE4 = sub_811AA38; } else @@ -33,7 +33,7 @@ bool8 SetUpFieldMove_Strength(void) if (npc_before_player_of_type(87) != TRUE) return 0; gScriptResult = gLastFieldPokeMenuOpened; - gFieldCallback = sub_808AB90; + gFieldCallback = FieldCallback_Teleport; gUnknown_03005CE4 = sub_811AA18; } diff --git a/src/fldeff_sweetscent.c b/src/fldeff_sweetscent.c index 661092ea0..2b36d2fe9 100644 --- a/src/fldeff_sweetscent.c +++ b/src/fldeff_sweetscent.c @@ -23,7 +23,7 @@ extern u8 SweetScentNothingHereScript[]; bool8 SetUpFieldMove_SweetScent(void) { - gFieldCallback = sub_808AB90; + gFieldCallback = FieldCallback_Teleport; gUnknown_03005CE4 = sub_812BFD4; return TRUE; } diff --git a/src/fldeff_teleport.c b/src/fldeff_teleport.c index 10fdcce6e..3835d9eb6 100644 --- a/src/fldeff_teleport.c +++ b/src/fldeff_teleport.c @@ -13,9 +13,9 @@ extern void (*gUnknown_03005CE4)(void); bool8 SetUpFieldMove_Teleport(void) { - if (is_light_level_1_2_3_or_6(gMapHeader.mapType) == TRUE) + if (Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType) == TRUE) { - gFieldCallback = sub_808AB90; + gFieldCallback = FieldCallback_Teleport; gUnknown_03005CE4 = hm_teleport_run_dp02scr; return TRUE; } @@ -25,7 +25,7 @@ bool8 SetUpFieldMove_Teleport(void) void hm_teleport_run_dp02scr(void) { - new_game(); + Overworld_ResetStateAfterTeleport(); FieldEffectStart(63); gFieldEffectArguments[0] = gLastFieldPokeMenuOpened; } diff --git a/src/item_use.c b/src/item_use.c index 1750c1584..c5fd990d2 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -185,7 +185,7 @@ void ItemUseOutOfBattle_Bike(u8 taskId) } else { - if (IsBikingAllowedByMap() == TRUE && IsBikingDisallowedByPlayer() == FALSE) + if (Overworld_IsBikeAllowedOnCurrentMap() == TRUE && IsBikingDisallowedByPlayer() == FALSE) { gUnknown_03005D00 = (void *)ItemUseOnFieldCB_Bike; SetUpItemUseOnFieldCallback(taskId); diff --git a/src/main_menu.c b/src/main_menu.c index 3b616065b..f4e7a3247 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -56,32 +56,14 @@ extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E79AC[]; extern u8 unk_2000000[]; -//Task data -enum { - TD_MENULAYOUT, - TD_SELECTEDMENUITEM, -}; - //Menu layouts -enum { +enum +{ HAS_NO_SAVED_GAME, //NEW GAME, OPTION HAS_SAVED_GAME, //CONTINUE, NEW GAME, OPTION HAS_MYSTERY_GIFT, //CONTINUE, NEW GAME, MYSTERY EVENTS, OPTION }; -//Task data -enum { - TD_TRAINER_SPRITE_ID = 2, //Trainer sprite being displayed during gender menu - TD_BGHOFS = 4, //Used to set REG_BG1HOFS and slide the platform around - TD_SUBTASK_DONE, //Set to true if the spawned task has finished - TD_GENDER_SELECTION, - TD_COUNTER, - TD_BIRCH_SPRITE_ID, - TD_AZURILL_SPRITE_ID, - TD_BRENDAN_SPRITE_ID, - TD_MAY_SPRITE_ID -}; - static void CB2_MainMenu(void); static void VBlankCB_MainMenu(void); static void CB2_InitMainMenuFromOptions(void); @@ -180,6 +162,9 @@ static void CB2_InitMainMenuFromOptions(void) InitMainMenu(TRUE); } +#define tMenuLayout data[0] +#define tMenuSelection data[1] + u32 InitMainMenu(u8 a1) { u16 savedIme; @@ -239,7 +224,7 @@ u32 InitMainMenu(u8 a1) | DISPCNT_WIN0_ON; taskId = CreateTask(Task_MainMenuCheckSave, 0); - gTasks[taskId].data[TD_SELECTEDMENUITEM] = 0; + gTasks[taskId].tMenuSelection = 0; return 0; } @@ -261,9 +246,9 @@ void Task_MainMenuCheckSave(u8 taskId) { case 1: if (IsMysteryGiftEnabled() == TRUE) - gTasks[taskId].data[TD_MENULAYOUT] = HAS_MYSTERY_GIFT; + gTasks[taskId].tMenuLayout = HAS_MYSTERY_GIFT; else - gTasks[taskId].data[TD_MENULAYOUT] = HAS_SAVED_GAME; + gTasks[taskId].tMenuLayout = HAS_SAVED_GAME; gTasks[taskId].func = Task_MainMenuCheckRtc; break; @@ -272,7 +257,7 @@ void Task_MainMenuCheckSave(u8 taskId) MenuPrintMessage(gSaveFileDeletedMessage, 3, 15); REG_WIN0H = WIN_RANGE(17, 223); REG_WIN0V = WIN_RANGE(113, 159); - gTasks[taskId].data[TD_MENULAYOUT] = HAS_NO_SAVED_GAME; + gTasks[taskId].tMenuLayout = HAS_NO_SAVED_GAME; gTasks[taskId].func = Task_MainMenuWaitForSaveErrorAck; break; case 255: @@ -280,17 +265,17 @@ void Task_MainMenuCheckSave(u8 taskId) MenuPrintMessage(gSaveFileCorruptMessage, 3, 15); REG_WIN0H = WIN_RANGE(17, 223); REG_WIN0V = WIN_RANGE(113, 159); - gTasks[taskId].data[TD_MENULAYOUT] = HAS_SAVED_GAME; + gTasks[taskId].tMenuLayout = HAS_SAVED_GAME; gTasks[taskId].func = Task_MainMenuWaitForSaveErrorAck; if (IsMysteryGiftEnabled() == TRUE) - gTasks[taskId].data[TD_MENULAYOUT] = HAS_MYSTERY_GIFT; + gTasks[taskId].tMenuLayout = HAS_MYSTERY_GIFT; else - gTasks[taskId].data[TD_MENULAYOUT] = HAS_SAVED_GAME; + gTasks[taskId].tMenuLayout = HAS_SAVED_GAME; break; case 0: default: - gTasks[taskId].data[TD_MENULAYOUT] = HAS_NO_SAVED_GAME; + gTasks[taskId].tMenuLayout = HAS_NO_SAVED_GAME; gTasks[taskId].func = Task_MainMenuCheckRtc; break; case 4: @@ -298,7 +283,7 @@ void Task_MainMenuCheckSave(u8 taskId) MenuPrintMessage(gBoardNotInstalledMessage, 3, 15); REG_WIN0H = WIN_RANGE(17, 223); REG_WIN0V = WIN_RANGE(113, 159); - gTasks[taskId].data[TD_MENULAYOUT] = HAS_NO_SAVED_GAME; + gTasks[taskId].tMenuLayout = HAS_NO_SAVED_GAME; gTasks[taskId].func = Task_MainMenuWaitForSaveErrorAck; return; } @@ -383,7 +368,7 @@ void Task_MainMenuDraw(u8 taskId) LoadPalette(&palette, 241, 2); } - switch (gTasks[taskId].data[TD_MENULAYOUT]) + switch (gTasks[taskId].tMenuLayout) { case HAS_NO_SAVED_GAME: default: @@ -420,7 +405,7 @@ void Task_MainMenuDraw(u8 taskId) void Task_MainMenuHighlight(u8 taskId) { - HighlightCurrentMenuItem(gTasks[taskId].data[TD_MENULAYOUT], gTasks[taskId].data[TD_SELECTEDMENUITEM]); + HighlightCurrentMenuItem(gTasks[taskId].tMenuLayout, gTasks[taskId].tMenuSelection); gTasks[taskId].func = Task_MainMenuProcessKeyInput; } @@ -444,7 +429,7 @@ bool8 MainMenuProcessKeyInput(u8 taskId) { s32 menuItemCount; - switch (gTasks[taskId].data[TD_MENULAYOUT]) + switch (gTasks[taskId].tMenuLayout) { case HAS_NO_SAVED_GAME: default: @@ -460,17 +445,17 @@ bool8 MainMenuProcessKeyInput(u8 taskId) if (gMain.newKeys & DPAD_UP) { - if (gTasks[taskId].data[TD_SELECTEDMENUITEM] > 0) + if (gTasks[taskId].tMenuSelection > 0) { - gTasks[taskId].data[TD_SELECTEDMENUITEM]--; + gTasks[taskId].tMenuSelection--; return TRUE; } } if (gMain.newKeys & DPAD_DOWN) { - if (gTasks[taskId].data[TD_SELECTEDMENUITEM] < menuItemCount - 1) + if (gTasks[taskId].tMenuSelection < menuItemCount - 1) { - gTasks[taskId].data[TD_SELECTEDMENUITEM]++; + gTasks[taskId].tMenuSelection++; return TRUE; } } @@ -499,11 +484,11 @@ void Task_MainMenuPressedA(u8 taskId) if (gPaletteFade.active) return; - switch (gTasks[taskId].data[TD_MENULAYOUT]) + switch (gTasks[taskId].tMenuLayout) { case HAS_NO_SAVED_GAME: default: - switch (gTasks[taskId].data[TD_SELECTEDMENUITEM]) + switch (gTasks[taskId].tMenuSelection) { case 0: default: @@ -515,7 +500,7 @@ void Task_MainMenuPressedA(u8 taskId) } break; case HAS_SAVED_GAME: - switch (gTasks[taskId].data[TD_SELECTEDMENUITEM]) + switch (gTasks[taskId].tMenuSelection) { case 0: default: @@ -530,7 +515,7 @@ void Task_MainMenuPressedA(u8 taskId) } break; case HAS_MYSTERY_GIFT: - switch (gTasks[taskId].data[TD_SELECTEDMENUITEM]) + switch (gTasks[taskId].tMenuSelection) { case 0: default: @@ -584,6 +569,9 @@ void Task_MainMenuPressedB(u8 taskId) } } +#undef tMenuLayout +#undef tMenuSelection + void HighlightCurrentMenuItem(u8 layout, u8 menuItem) { REG_WIN0H = WIN_RANGE(9, 231); @@ -710,6 +698,16 @@ void PrintBadgeCount(void) MenuPrint_PixelCoords(buffer, 205, 40, 1); } +#define tTrainerSpriteId data[2] +#define tBGhofs data[4] +#define tSubtaskIsDone data[5] +#define tGenderSelection data[6] +#define tFrameCounter data[7] +#define tBirchSpriteId data[8] +#define tAzurillSpriteId data[9] +#define tBrendanSpriteId data[10] +#define tMaySpriteId data[11] + static void Task_NewGameSpeech1(u8 taskId) { SetUpWindowConfig(&gWindowConfig_81E6C3C); @@ -732,25 +730,25 @@ static void Task_NewGameSpeech1(u8 taskId) BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); REG_BG1CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(7) | BGCNT_16COLOR | BGCNT_TXT256x256; REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP; - gTasks[taskId].data[TD_BGHOFS] = 0; + gTasks[taskId].tBGhofs = 0; gTasks[taskId].func = Task_NewGameSpeech2; - gTasks[taskId].data[TD_TRAINER_SPRITE_ID] = 0xFF; + gTasks[taskId].tTrainerSpriteId = 0xFF; gTasks[taskId].data[3] = 0xFF; - gTasks[taskId].data[TD_COUNTER] = 216; //Wait 3.6 seconds (216 frames) before starting speech + gTasks[taskId].tFrameCounter = 216; //Wait 3.6 seconds (216 frames) before starting speech PlayBGM(BGM_DOORO_X4); } static void Task_NewGameSpeech2(u8 taskId) { - if (gTasks[taskId].data[TD_COUNTER] != 0) + if (gTasks[taskId].tFrameCounter != 0) { - gTasks[taskId].data[TD_COUNTER]--; + gTasks[taskId].tFrameCounter--; } else { //Initialize Birch sprite - u8 spriteId = gTasks[taskId].data[TD_BIRCH_SPRITE_ID]; + u8 spriteId = gTasks[taskId].tBirchSpriteId; gSprites[spriteId].pos1.x = 136; gSprites[spriteId].pos1.y = 60; @@ -758,19 +756,19 @@ static void Task_NewGameSpeech2(u8 taskId) gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND; StartSpriteFadeIn(taskId, 10); StartBackgroundFadeIn(taskId, 20); - gTasks[taskId].data[TD_COUNTER] = 80; + gTasks[taskId].tFrameCounter = 80; gTasks[taskId].func = Task_NewGameSpeech3; } } static void Task_NewGameSpeech3(u8 taskId) { - if (gTasks[taskId].data[TD_SUBTASK_DONE] != FALSE) + if (gTasks[taskId].tSubtaskIsDone) { - gSprites[gTasks[taskId].data[TD_BIRCH_SPRITE_ID]].oam.objMode = ST_OAM_OBJ_NORMAL; - if (gTasks[taskId].data[TD_COUNTER]) + gSprites[gTasks[taskId].tBirchSpriteId].oam.objMode = ST_OAM_OBJ_NORMAL; + if (gTasks[taskId].tFrameCounter) { - gTasks[taskId].data[TD_COUNTER]--; + gTasks[taskId].tFrameCounter--; } else { @@ -801,7 +799,7 @@ static void Task_NewGameSpeech5(u8 taskId) static void Task_NewGameSpeech6(u8 taskId) { - u8 spriteId = gTasks[taskId].data[TD_AZURILL_SPRITE_ID]; + u8 spriteId = gTasks[taskId].tAzurillSpriteId; gSprites[spriteId].pos1.x = 104; gSprites[spriteId].pos1.y = 72; @@ -809,7 +807,7 @@ static void Task_NewGameSpeech6(u8 taskId) gSprites[spriteId].data0 = 0; CreatePokeballSprite(spriteId, gSprites[spriteId].oam.paletteNum, 0x70, 0x3A, 0, 0, 0x20, 0x0000FFFF); gTasks[taskId].func = Task_NewGameSpeech7; - gTasks[taskId].data[TD_COUNTER] = 0; + gTasks[taskId].tFrameCounter = 0; } static void Task_NewGameSpeech7(u8 taskId) @@ -817,18 +815,18 @@ static void Task_NewGameSpeech7(u8 taskId) if (IsCryFinished()) { //Go on to next sentence after frame 95 - if (gTasks[taskId].data[TD_COUNTER] > 95) + if (gTasks[taskId].tFrameCounter > 95) { MenuSetText(gSystemText_NewPara); gTasks[taskId].func = Task_NewGameSpeech8; } } - if (gTasks[taskId].data[TD_COUNTER] < 16384) + if (gTasks[taskId].tFrameCounter < 16384) { - gTasks[taskId].data[TD_COUNTER]++; + gTasks[taskId].tFrameCounter++; //Play Azurill cry at frame 32 - if (gTasks[taskId].data[TD_COUNTER] == 32) + if (gTasks[taskId].tFrameCounter == 32) PlayCry1(SPECIES_AZURILL, 0); } } @@ -859,11 +857,11 @@ static void Task_NewGameSpeech10(u8 taskId) { if (BirchSpeechUpdateWindowText()) { - gSprites[gTasks[taskId].data[TD_BIRCH_SPRITE_ID]].oam.objMode = ST_OAM_OBJ_BLEND; - gSprites[gTasks[taskId].data[TD_AZURILL_SPRITE_ID]].oam.objMode = ST_OAM_OBJ_BLEND; + gSprites[gTasks[taskId].tBirchSpriteId].oam.objMode = ST_OAM_OBJ_BLEND; + gSprites[gTasks[taskId].tAzurillSpriteId].oam.objMode = ST_OAM_OBJ_BLEND; StartSpriteFadeOut(taskId, 2); StartBackgroundFadeOut(taskId, 1); - gTasks[taskId].data[TD_COUNTER] = 64; + gTasks[taskId].tFrameCounter = 64; gTasks[taskId].func = Task_NewGameSpeech11; } } @@ -871,41 +869,41 @@ static void Task_NewGameSpeech10(u8 taskId) //Slide platform away to the right static void Task_NewGameSpeech11(u8 taskId) { - if (gTasks[taskId].data[TD_BGHOFS] != -60) + if (gTasks[taskId].tBGhofs != -60) { - gTasks[taskId].data[TD_BGHOFS] -= 2; - REG_BG1HOFS = gTasks[taskId].data[TD_BGHOFS]; + gTasks[taskId].tBGhofs -= 2; + REG_BG1HOFS = gTasks[taskId].tBGhofs; } else { - gTasks[taskId].data[TD_BGHOFS] = -60; + gTasks[taskId].tBGhofs = -60; gTasks[taskId].func = Task_NewGameSpeech12; } } static void Task_NewGameSpeech12(u8 taskId) { - if (gTasks[taskId].data[TD_SUBTASK_DONE]) + if (gTasks[taskId].tSubtaskIsDone) { //Hide Birch and Azurill - gSprites[gTasks[taskId].data[TD_BIRCH_SPRITE_ID]].invisible = TRUE; - gSprites[gTasks[taskId].data[TD_AZURILL_SPRITE_ID]].invisible = TRUE; + gSprites[gTasks[taskId].tBirchSpriteId].invisible = TRUE; + gSprites[gTasks[taskId].tAzurillSpriteId].invisible = TRUE; - if (gTasks[taskId].data[TD_COUNTER]) + if (gTasks[taskId].tFrameCounter) { - gTasks[taskId].data[TD_COUNTER]--; + gTasks[taskId].tFrameCounter--; } else { //Initialize Brendan sprite - u8 spriteId = gTasks[taskId].data[TD_BRENDAN_SPRITE_ID]; + u8 spriteId = gTasks[taskId].tBrendanSpriteId; gSprites[spriteId].pos1.x = 180; gSprites[spriteId].pos1.y = 60; gSprites[spriteId].invisible = FALSE; gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND; - gTasks[taskId].data[TD_TRAINER_SPRITE_ID] = spriteId; - gTasks[taskId].data[TD_GENDER_SELECTION] = 0; + gTasks[taskId].tTrainerSpriteId = spriteId; + gTasks[taskId].tGenderSelection = 0; StartSpriteFadeIn(taskId, 2); StartBackgroundFadeIn(taskId, 1); gTasks[taskId].func = Task_NewGameSpeech13; @@ -915,9 +913,9 @@ static void Task_NewGameSpeech12(u8 taskId) static void Task_NewGameSpeech13(u8 taskId) { - if (gTasks[taskId].data[TD_SUBTASK_DONE]) + if (gTasks[taskId].tSubtaskIsDone) { - gSprites[gTasks[taskId].data[TD_TRAINER_SPRITE_ID]].oam.objMode = ST_OAM_OBJ_NORMAL; + gSprites[gTasks[taskId].tTrainerSpriteId].oam.objMode = ST_OAM_OBJ_NORMAL; gTasks[taskId].func = Task_NewGameSpeech14; } } @@ -964,11 +962,11 @@ static void Task_NewGameSpeech16(u8 taskId) cursorPos = GetMenuCursorPos(); - if (cursorPos != gTasks[taskId].data[TD_GENDER_SELECTION]) + if (cursorPos != gTasks[taskId].tGenderSelection) { //Menu selection changed. Slide Brendan or May out and slide the other in - gTasks[taskId].data[TD_GENDER_SELECTION] = cursorPos; - gSprites[gTasks[taskId].data[TD_TRAINER_SPRITE_ID]].oam.objMode = ST_OAM_OBJ_BLEND; + gTasks[taskId].tGenderSelection = cursorPos; + gSprites[gTasks[taskId].tTrainerSpriteId].oam.objMode = ST_OAM_OBJ_BLEND; StartSpriteFadeOut(taskId, 0); gTasks[taskId].func = Task_NewGameSpeech17; } @@ -977,9 +975,9 @@ static void Task_NewGameSpeech16(u8 taskId) //Slide old trainer sprite off right of screen static void Task_NewGameSpeech17(u8 taskId) { - u8 spriteId = gTasks[taskId].data[TD_TRAINER_SPRITE_ID]; + u8 spriteId = gTasks[taskId].tTrainerSpriteId; - if (gTasks[taskId].data[TD_SUBTASK_DONE] == FALSE) + if (gTasks[taskId].tSubtaskIsDone == FALSE) { gSprites[spriteId].pos1.x += 4; //Move sprite right } @@ -988,14 +986,14 @@ static void Task_NewGameSpeech17(u8 taskId) gSprites[spriteId].invisible = TRUE; //Set up new trainer sprite - if (gTasks[taskId].data[TD_GENDER_SELECTION]) - spriteId = gTasks[taskId].data[TD_MAY_SPRITE_ID]; + if (gTasks[taskId].tGenderSelection) + spriteId = gTasks[taskId].tMaySpriteId; else - spriteId = gTasks[taskId].data[TD_BRENDAN_SPRITE_ID]; + spriteId = gTasks[taskId].tBrendanSpriteId; gSprites[spriteId].pos1.x = 240; gSprites[spriteId].pos1.y = 60; gSprites[spriteId].invisible = FALSE; - gTasks[taskId].data[TD_TRAINER_SPRITE_ID] = spriteId; + gTasks[taskId].tTrainerSpriteId = spriteId; gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND; StartSpriteFadeIn(taskId, 0); gTasks[taskId].func = Task_NewGameSpeech18; @@ -1005,7 +1003,7 @@ static void Task_NewGameSpeech17(u8 taskId) //Slide new trainer sprite from right of screen static void Task_NewGameSpeech18(u8 taskId) { - u8 spriteId = gTasks[taskId].data[TD_TRAINER_SPRITE_ID]; + u8 spriteId = gTasks[taskId].tTrainerSpriteId; if (gSprites[spriteId].pos1.x > 180) { @@ -1014,7 +1012,7 @@ static void Task_NewGameSpeech18(u8 taskId) else { gSprites[spriteId].pos1.x = 180; - if (gTasks[taskId].data[TD_SUBTASK_DONE]) + if (gTasks[taskId].tSubtaskIsDone) { gSprites[spriteId].oam.objMode = ST_OAM_OBJ_NORMAL; gTasks[taskId].func = Task_NewGameSpeech16; //Go back to gender menu @@ -1106,7 +1104,7 @@ static void Task_NewGameSpeech25(u8 taskId) case 0: //YES PlaySE(SE_SELECT); MenuZeroFillWindowRect(2, 1, 8, 7); - gSprites[gTasks[taskId].data[TD_TRAINER_SPRITE_ID]].oam.objMode = ST_OAM_OBJ_BLEND; + gSprites[gTasks[taskId].tTrainerSpriteId].oam.objMode = ST_OAM_OBJ_BLEND; StartSpriteFadeOut(taskId, 2); StartBackgroundFadeOut(taskId, 1); gTasks[taskId].func = Task_NewGameSpeech26; //Continue @@ -1122,10 +1120,10 @@ static void Task_NewGameSpeech25(u8 taskId) static void Task_NewGameSpeech26(u8 taskId) { - if (gTasks[taskId].data[TD_BGHOFS]) + if (gTasks[taskId].tBGhofs) { - gTasks[taskId].data[TD_BGHOFS] += 2; - REG_BG1HOFS = gTasks[taskId].data[TD_BGHOFS]; + gTasks[taskId].tBGhofs += 2; + REG_BG1HOFS = gTasks[taskId].tBGhofs; } else { @@ -1135,23 +1133,23 @@ static void Task_NewGameSpeech26(u8 taskId) static void Task_NewGameSpeech27(u8 taskId) { - if (gTasks[taskId].data[TD_SUBTASK_DONE]) + if (gTasks[taskId].tSubtaskIsDone) { s16 spriteId; //Hide Brendan and May sprites - spriteId = gTasks[taskId].data[TD_BRENDAN_SPRITE_ID]; + spriteId = gTasks[taskId].tBrendanSpriteId; gSprites[spriteId].invisible = TRUE; - spriteId = gTasks[taskId].data[TD_MAY_SPRITE_ID]; + spriteId = gTasks[taskId].tMaySpriteId; gSprites[spriteId].invisible = TRUE; //Fade in Birch and Azurill - spriteId = (u8)gTasks[taskId].data[TD_BIRCH_SPRITE_ID]; + spriteId = (u8)gTasks[taskId].tBirchSpriteId; gSprites[spriteId].pos1.x = 136; gSprites[spriteId].pos1.y = 64; gSprites[spriteId].invisible = FALSE; gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND; - spriteId = (u8)gTasks[taskId].data[TD_AZURILL_SPRITE_ID]; + spriteId = (u8)gTasks[taskId].tAzurillSpriteId; gSprites[spriteId].pos1.x = 104; gSprites[spriteId].pos1.y = 72; gSprites[spriteId].invisible = FALSE; @@ -1170,27 +1168,27 @@ static void Task_NewGameSpeech27(u8 taskId) static void Task_NewGameSpeech28(u8 taskId) { - if (gTasks[taskId].data[TD_SUBTASK_DONE]) + if (gTasks[taskId].tSubtaskIsDone) { s16 spriteId; - spriteId = gTasks[taskId].data[TD_BIRCH_SPRITE_ID]; + spriteId = gTasks[taskId].tBirchSpriteId; gSprites[spriteId].oam.objMode = ST_OAM_OBJ_NORMAL; - spriteId = gTasks[taskId].data[TD_AZURILL_SPRITE_ID]; + spriteId = gTasks[taskId].tAzurillSpriteId; gSprites[spriteId].oam.objMode = ST_OAM_OBJ_NORMAL; if (BirchSpeechUpdateWindowText()) { //Fade out Birch and Azurill - spriteId = gTasks[taskId].data[TD_BIRCH_SPRITE_ID]; + spriteId = gTasks[taskId].tBirchSpriteId; gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND; - spriteId = gTasks[taskId].data[TD_AZURILL_SPRITE_ID]; + spriteId = gTasks[taskId].tAzurillSpriteId; gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND; StartSpriteFadeOut(taskId, 2); StartBackgroundFadeOut(taskId, 1); - gTasks[taskId].data[TD_COUNTER] = 64; + gTasks[taskId].tFrameCounter = 64; gTasks[taskId].func = Task_NewGameSpeech29; } } @@ -1198,19 +1196,19 @@ static void Task_NewGameSpeech28(u8 taskId) static void Task_NewGameSpeech29(u8 taskId) { - if (gTasks[taskId].data[TD_SUBTASK_DONE]) + if (gTasks[taskId].tSubtaskIsDone) { s16 spriteId; //Hide Birch and Azurill - spriteId = gTasks[taskId].data[TD_BIRCH_SPRITE_ID]; + spriteId = gTasks[taskId].tBirchSpriteId; gSprites[spriteId].invisible = TRUE; - spriteId = gTasks[taskId].data[TD_AZURILL_SPRITE_ID]; + spriteId = gTasks[taskId].tAzurillSpriteId; gSprites[spriteId].invisible = TRUE; - if (gTasks[taskId].data[TD_COUNTER]) + if (gTasks[taskId].tFrameCounter) { - gTasks[taskId].data[TD_COUNTER]--; + gTasks[taskId].tFrameCounter--; } else { @@ -1218,14 +1216,14 @@ static void Task_NewGameSpeech29(u8 taskId) //Fade in trainer and background if (gSaveBlock2.playerGender) - spriteId = (u8)gTasks[taskId].data[TD_MAY_SPRITE_ID]; + spriteId = (u8)gTasks[taskId].tMaySpriteId; else - spriteId = (u8)gTasks[taskId].data[TD_BRENDAN_SPRITE_ID]; + spriteId = (u8)gTasks[taskId].tBrendanSpriteId; gSprites[spriteId].pos1.x = 120; gSprites[spriteId].pos1.y = 60; gSprites[spriteId].invisible = FALSE; gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND; - gTasks[taskId].data[TD_TRAINER_SPRITE_ID] = spriteId; + gTasks[taskId].tTrainerSpriteId = spriteId; StartSpriteFadeIn(taskId, 2); StartBackgroundFadeIn(taskId, 1); @@ -1238,18 +1236,18 @@ static void Task_NewGameSpeech29(u8 taskId) static void Task_NewGameSpeech30(u8 taskId) { - if (gTasks[taskId].data[TD_SUBTASK_DONE]) + if (gTasks[taskId].tSubtaskIsDone) { s16 spriteId; - spriteId = gTasks[taskId].data[TD_TRAINER_SPRITE_ID]; + spriteId = gTasks[taskId].tTrainerSpriteId; gSprites[spriteId].oam.objMode = ST_OAM_OBJ_NORMAL; if (BirchSpeechUpdateWindowText()) { u8 spriteId; - spriteId = gTasks[taskId].data[TD_TRAINER_SPRITE_ID]; + spriteId = gTasks[taskId].tTrainerSpriteId; gSprites[spriteId].oam.affineMode = 1; gSprites[spriteId].affineAnims = gSpriteAffineAnimTable_81E79AC; InitSpriteAffineAnim(&gSprites[spriteId]); @@ -1264,7 +1262,7 @@ static void Task_NewGameSpeech30(u8 taskId) static void Task_NewGameSpeech31(u8 taskId) { - u8 spriteId = gTasks[taskId].data[TD_TRAINER_SPRITE_ID]; + u8 spriteId = gTasks[taskId].tTrainerSpriteId; if (gSprites[spriteId].affineAnimEnded) gTasks[taskId].func = Task_NewGameSpeech32; @@ -1274,7 +1272,7 @@ static void Task_NewGameSpeech32(u8 taskId) { if (!gPaletteFade.active) { - u8 spriteId = gTasks[taskId].data[TD_TRAINER_SPRITE_ID]; + u8 spriteId = gTasks[taskId].tTrainerSpriteId; gSprites[spriteId].callback = nullsub_34; REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON; BeginNormalPaletteFade(0xFFFF0000, 0, 0, 0x10, 0xFFFF); @@ -1328,7 +1326,7 @@ void CB_ContinueNewGameSpeechPart2() taskId = CreateTask(Task_NewGameSpeech23, 0); - gTasks[taskId].data[TD_BGHOFS] = -60; + gTasks[taskId].tBGhofs = -60; remove_some_task(); ResetSpriteData(); @@ -1340,20 +1338,20 @@ void CB_ContinueNewGameSpeechPart2() if (gSaveBlock2.playerGender != MALE) { - gTasks[taskId].data[TD_GENDER_SELECTION] = FEMALE; - spriteId = gTasks[taskId].data[TD_MAY_SPRITE_ID]; + gTasks[taskId].tGenderSelection = FEMALE; + spriteId = gTasks[taskId].tMaySpriteId; } else { - gTasks[taskId].data[TD_GENDER_SELECTION] = MALE; - spriteId = gTasks[taskId].data[TD_BRENDAN_SPRITE_ID]; + gTasks[taskId].tGenderSelection = MALE; + spriteId = gTasks[taskId].tBrendanSpriteId; } gSprites[spriteId].pos1.x = 180; gSprites[spriteId].pos1.y = 60; gSprites[spriteId].invisible = FALSE; - gTasks[taskId].data[TD_TRAINER_SPRITE_ID] = spriteId; + gTasks[taskId].tTrainerSpriteId = spriteId; REG_BG1HOFS = -60; @@ -1412,56 +1410,67 @@ void AddBirchSpeechObjects(u8 taskId) gSprites[spriteId].callback = nullsub_34; gSprites[spriteId].oam.priority = 0; gSprites[spriteId].invisible = 1; - gTasks[taskId].data[TD_BIRCH_SPRITE_ID] = spriteId; + gTasks[taskId].tBirchSpriteId = spriteId; spriteId = CreateAzurillSprite(0x68, 0x48); gSprites[spriteId].callback = nullsub_34; gSprites[spriteId].oam.priority = 0; gSprites[spriteId].invisible = 1; - gTasks[taskId].data[TD_AZURILL_SPRITE_ID] = spriteId; + gTasks[taskId].tAzurillSpriteId = spriteId; //Create Brendan sprite spriteId = CreateTrainerSprite(0, 120, 60, 0, unk_2000000); gSprites[spriteId].callback = nullsub_34; gSprites[spriteId].invisible = 1; gSprites[spriteId].oam.priority = 0; - gTasks[taskId].data[TD_BRENDAN_SPRITE_ID] = spriteId; + gTasks[taskId].tBrendanSpriteId = spriteId; //Create May sprite spriteId = CreateTrainerSprite(1, 120, 60, 0, unk_2000000 + 0x800); gSprites[spriteId].callback = nullsub_34; gSprites[spriteId].invisible = 1; gSprites[spriteId].oam.priority = 0; - gTasks[taskId].data[TD_MAY_SPRITE_ID] = spriteId; + gTasks[taskId].tMaySpriteId = spriteId; } -enum { - TD_PARENT_TASK_ID, - TD_EVA, //EVA coefficient of REG_BLDALPHA - TD_EVB, //EVB coefficient of REG_BLDALPHA - TD_INTERVAL, - TD_FRAMECOUNTER -}; +#undef tTrainerSpriteId +#undef tBGhofs +//#undef tSubtaskIsDone +#undef tGenderSelection +#undef tFrameCounter +#undef tBirchSpriteId +#undef tAzurillSpriteId +#undef tBrendanSpriteId +#undef tMaySpriteId + + +// Sprite Fade task + +#define tMainTaskId data[0] +#define tBlendEVA data[1] +#define tBlendEVB data[2] +#define tUpdateInterval data[3] +#define tFrameCounter data[4] static void Task_SpriteFadeOut(u8 taskId) { - if (gTasks[taskId].data[TD_EVA] == 0) + if (gTasks[taskId].tBlendEVA == 0) { - gTasks[gTasks[taskId].data[TD_PARENT_TASK_ID]].data[TD_SUBTASK_DONE] = TRUE; + gTasks[gTasks[taskId].tMainTaskId].tSubtaskIsDone = TRUE; DestroyTask(taskId); } else { - if (gTasks[taskId].data[TD_FRAMECOUNTER]) + if (gTasks[taskId].tFrameCounter) { - gTasks[taskId].data[TD_FRAMECOUNTER]--; + gTasks[taskId].tFrameCounter--; } else { - gTasks[taskId].data[TD_FRAMECOUNTER] = gTasks[taskId].data[TD_INTERVAL]; - gTasks[taskId].data[TD_EVA]--; - gTasks[taskId].data[TD_EVB]++; - REG_BLDALPHA = gTasks[taskId].data[TD_EVA] + (gTasks[taskId].data[TD_EVB] * 256); + gTasks[taskId].tFrameCounter = gTasks[taskId].tUpdateInterval; + gTasks[taskId].tBlendEVA--; + gTasks[taskId].tBlendEVB++; + REG_BLDALPHA = gTasks[taskId].tBlendEVA + (gTasks[taskId].tBlendEVB * 256); } } } @@ -1474,33 +1483,33 @@ static void StartSpriteFadeOut(u8 taskId, u8 interval) REG_BLDCNT = 592; REG_BLDALPHA = 16; REG_BLDY = 0; - gTasks[taskId].data[TD_SUBTASK_DONE] = FALSE; + gTasks[taskId].tSubtaskIsDone = FALSE; newTaskId = CreateTask(Task_SpriteFadeOut, 0); - gTasks[newTaskId].data[TD_PARENT_TASK_ID] = taskId; - gTasks[newTaskId].data[TD_EVA] = 16; - gTasks[newTaskId].data[TD_EVB] = 0; - gTasks[newTaskId].data[TD_INTERVAL] = interval; - gTasks[newTaskId].data[TD_FRAMECOUNTER] = interval; + gTasks[newTaskId].tMainTaskId = taskId; + gTasks[newTaskId].tBlendEVA = 16; + gTasks[newTaskId].tBlendEVB = 0; + gTasks[newTaskId].tUpdateInterval = interval; + gTasks[newTaskId].tFrameCounter = interval; } static void Task_SpriteFadeIn(u8 taskId) { - if (gTasks[taskId].data[TD_EVA] == 16) + if (gTasks[taskId].tBlendEVA == 16) { - gTasks[gTasks[taskId].data[TD_PARENT_TASK_ID]].data[TD_SUBTASK_DONE] = TRUE; + gTasks[gTasks[taskId].tMainTaskId].tSubtaskIsDone = TRUE; DestroyTask(taskId); } - else if (gTasks[taskId].data[TD_FRAMECOUNTER]) + else if (gTasks[taskId].tFrameCounter) { - gTasks[taskId].data[TD_FRAMECOUNTER]--; + gTasks[taskId].tFrameCounter--; } else { - gTasks[taskId].data[TD_FRAMECOUNTER] = gTasks[taskId].data[TD_INTERVAL]; - gTasks[taskId].data[TD_EVA]++; - gTasks[taskId].data[TD_EVB]--; - REG_BLDALPHA = gTasks[taskId].data[TD_EVA] + (gTasks[taskId].data[TD_EVB] * 256); + gTasks[taskId].tFrameCounter = gTasks[taskId].tUpdateInterval; + gTasks[taskId].tBlendEVA++; + gTasks[taskId].tBlendEVB--; + REG_BLDALPHA = gTasks[taskId].tBlendEVA + (gTasks[taskId].tBlendEVB * 256); } } @@ -1512,36 +1521,49 @@ static void StartSpriteFadeIn(u8 taskId, u8 interval) REG_BLDCNT = 592; REG_BLDALPHA = 4096; REG_BLDY = 0; - gTasks[taskId].data[TD_SUBTASK_DONE] = FALSE; + gTasks[taskId].tSubtaskIsDone = FALSE; newTaskId = CreateTask(Task_SpriteFadeIn, 0); - gTasks[newTaskId].data[TD_PARENT_TASK_ID] = taskId; - gTasks[newTaskId].data[TD_EVA] = 0; - gTasks[newTaskId].data[TD_EVB] = 16; - gTasks[newTaskId].data[TD_INTERVAL] = interval; - gTasks[newTaskId].data[TD_FRAMECOUNTER] = interval; + gTasks[newTaskId].tMainTaskId = taskId; + gTasks[newTaskId].tBlendEVA = 0; + gTasks[newTaskId].tBlendEVB = 16; + gTasks[newTaskId].tUpdateInterval = interval; + gTasks[newTaskId].tFrameCounter = interval; } -enum { - TD_FADELEVEL = 1, - TD_DELAY, -}; +#undef tMainTaskId +#undef tBlendEVA +#undef tBlendEVB +#undef tUpdateInterval +#undef tFrameCounter + + +// Background fade task + +#define tMainTaskId data[0] +#define tFadeLevel data[1] +#define tDelay data[2] +#define tUpdateInterval data[3] +#define tFrameCounter data[4] static void HandleFloorShadowFadeOut(u8 taskId) { - if (gTasks[taskId].data[TD_DELAY]) - gTasks[taskId].data[TD_DELAY]--; + if (gTasks[taskId].tDelay) + gTasks[taskId].tDelay--; else { - if (gTasks[taskId].data[TD_FADELEVEL] == 8) + if (gTasks[taskId].tFadeLevel == 8) DestroyTask(taskId); - else if (gTasks[taskId].data[TD_FRAMECOUNTER]) - gTasks[taskId].data[TD_FRAMECOUNTER]--; else { - gTasks[taskId].data[TD_FRAMECOUNTER] = gTasks[taskId].data[TD_INTERVAL]; - gTasks[taskId].data[TD_FADELEVEL]++; - LoadPalette(&gUnknown_081E795C[gTasks[taskId].data[TD_FADELEVEL]], 1, 0x10); + if (gTasks[taskId].tFrameCounter) + gTasks[taskId].tFrameCounter--; + else + { + gTasks[taskId].tFrameCounter = gTasks[taskId].tUpdateInterval; + gTasks[taskId].tFadeLevel++; + LoadPalette(&gUnknown_081E795C[gTasks[taskId].tFadeLevel], 1, 0x10); + } } } } @@ -1550,30 +1572,30 @@ static void HandleFloorShadowFadeOut(u8 taskId) static void StartBackgroundFadeOut(u8 taskId, u8 interval) { u8 newTaskId = CreateTask(HandleFloorShadowFadeOut, 0); - gTasks[newTaskId].data[TD_PARENT_TASK_ID] = taskId; - gTasks[newTaskId].data[TD_FADELEVEL] = 0; - gTasks[newTaskId].data[TD_DELAY] = 8; - gTasks[newTaskId].data[TD_INTERVAL] = interval; - gTasks[newTaskId].data[TD_FRAMECOUNTER] = interval; + gTasks[newTaskId].tMainTaskId = taskId; + gTasks[newTaskId].tFadeLevel = 0; + gTasks[newTaskId].tDelay = 8; + gTasks[newTaskId].tUpdateInterval = interval; + gTasks[newTaskId].tFrameCounter = interval; } static void HandleFloorShadowFadeIn(u8 taskId) { - if (gTasks[taskId].data[TD_DELAY]) - gTasks[taskId].data[TD_DELAY]--; + if (gTasks[taskId].tDelay) + gTasks[taskId].tDelay--; else { - if (gTasks[taskId].data[TD_FADELEVEL] == 0) + if (gTasks[taskId].tFadeLevel == 0) DestroyTask(taskId); else { - if (gTasks[taskId].data[TD_FRAMECOUNTER]) - gTasks[taskId].data[TD_FRAMECOUNTER]--; + if (gTasks[taskId].tFrameCounter) + gTasks[taskId].tFrameCounter--; else { - gTasks[taskId].data[TD_FRAMECOUNTER] = gTasks[taskId].data[TD_INTERVAL]; - gTasks[taskId].data[TD_FADELEVEL]--; - LoadPalette(&gUnknown_081E795C[gTasks[taskId].data[TD_FADELEVEL]], 1, 0x10); + gTasks[taskId].tFrameCounter = gTasks[taskId].tUpdateInterval; + gTasks[taskId].tFadeLevel--; + LoadPalette(&gUnknown_081E795C[gTasks[taskId].tFadeLevel], 1, 0x10); } } } @@ -1583,12 +1605,18 @@ static void HandleFloorShadowFadeIn(u8 taskId) static void StartBackgroundFadeIn(u8 taskId, u8 interval) { u8 newTaskId = CreateTask(HandleFloorShadowFadeIn, 0); - gTasks[newTaskId].data[TD_PARENT_TASK_ID] = taskId; - gTasks[newTaskId].data[TD_FADELEVEL] = 8; - gTasks[newTaskId].data[TD_DELAY] = 8; - gTasks[newTaskId].data[TD_INTERVAL] = interval; - gTasks[newTaskId].data[TD_FRAMECOUNTER] = interval; -} + gTasks[newTaskId].tMainTaskId = taskId; + gTasks[newTaskId].tFadeLevel = 8; + gTasks[newTaskId].tDelay = 8; + gTasks[newTaskId].tUpdateInterval = interval; + gTasks[newTaskId].tFrameCounter = interval; +} + +#undef tMainTaskId +#undef tFadeLevel +#undef tDelay +#undef tUpdateInterval +#undef tFrameCounter static void CreateGenderMenu(u8 left, u8 top) { diff --git a/src/pokemon_menu.c b/src/pokemon_menu.c index 36144ae7c..d460833c3 100644 --- a/src/pokemon_menu.c +++ b/src/pokemon_menu.c @@ -779,7 +779,7 @@ static void sub_808AB34(u8 taskID) #undef tFieldMoveId -void sub_808AB90(void) +void FieldCallback_Teleport(void) { pal_fill_black(); CreateTask(sub_808ABA8, 8); @@ -814,7 +814,7 @@ static bool8 SetUpFieldMove_Surf(void) { if (PartyHasMonWithSurf() == TRUE && IsPlayerFacingSurfableFishableWater() == TRUE) { - gFieldCallback = sub_808AB90; + gFieldCallback = FieldCallback_Teleport; gUnknown_03005CE4 = sub_808AC2C; return TRUE; } @@ -832,13 +832,13 @@ static bool8 SetUpFieldMove_Fly(void) { if (ShouldDoBrailleFlyEffect()) { - gFieldCallback = sub_808AB90; + gFieldCallback = FieldCallback_Teleport; gUnknown_03005CE4 = DoBrailleFlyEffect; return TRUE; } - if (is_light_level_1_2_3_or_6(gMapHeader.mapType) == 1) + if (Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType) == TRUE) { - gFieldCallback = sub_808AB90; + gFieldCallback = FieldCallback_Teleport; gUnknown_03005CE4 = sub_808AC8C; return TRUE; } @@ -884,7 +884,7 @@ static bool8 SetUpFieldMove_Dive(void) gFieldEffectArguments[1] = sub_8068F18(); if (gFieldEffectArguments[1]) { - gFieldCallback = sub_808AB90; + gFieldCallback = FieldCallback_Teleport; gUnknown_03005CE4 = sub_808ADAC; return TRUE; } @@ -905,7 +905,7 @@ static bool8 SetUpFieldMove_Waterfall(void) if (MetatileBehavior_IsWaterfall(MapGridGetMetatileBehaviorAt(x, y)) == TRUE && IsPlayerSurfingNorth() == TRUE) { - gFieldCallback = sub_808AB90; + gFieldCallback = FieldCallback_Teleport; gUnknown_03005CE4 = sub_808AE08; return TRUE; } diff --git a/src/region_map.c b/src/region_map.c index 076dfecec..1d567fcf0 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -714,7 +714,7 @@ static void InitializeCursorPosition(void) return; } - switch (get_map_light_level_by_bank_and_number(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum) - 1) + switch (GetMapTypeByGroupAndId(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum) - 1) { default: case 0: @@ -733,7 +733,7 @@ static void InitializeCursorPosition(void) break; case 3: case 6: - mapHeader = get_mapheader_by_bank_and_number(gSaveBlock1.warp4.mapGroup, gSaveBlock1.warp4.mapNum); + mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.warp4.mapGroup, gSaveBlock1.warp4.mapNum); gRegionMap->mapSecId = mapHeader->regionMapSectionId; gRegionMap->playerIsInCave = TRUE; mapWidth = mapHeader->mapData->width; @@ -742,7 +742,7 @@ static void InitializeCursorPosition(void) y = gSaveBlock1.warp4.y; break; case 8: - mapHeader = get_mapheader_by_bank_and_number(gSaveBlock1.warp2.mapGroup, gSaveBlock1.warp2.mapNum); + mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.warp2.mapGroup, gSaveBlock1.warp2.mapNum); gRegionMap->mapSecId = mapHeader->regionMapSectionId; gRegionMap->playerIsInCave = TRUE; mapWidth = mapHeader->mapData->width; @@ -758,12 +758,12 @@ static void InitializeCursorPosition(void) if (gRegionMap->mapSecId != MAPSEC_UNK_0x57) { r4 = &gSaveBlock1.warp4; - mapHeader = get_mapheader_by_bank_and_number(r4->mapGroup, r4->mapNum); + mapHeader = Overworld_GetMapHeaderByGroupAndId(r4->mapGroup, r4->mapNum); } else { r4 = &gSaveBlock1.warp2; - mapHeader = get_mapheader_by_bank_and_number(r4->mapGroup, r4->mapNum); + mapHeader = Overworld_GetMapHeaderByGroupAndId(r4->mapGroup, r4->mapNum); gRegionMap->mapSecId = mapHeader->regionMapSectionId; } gRegionMap->playerIsInCave = FALSE; @@ -850,7 +850,7 @@ static void sub_80FB600(void) default: case 0: { - struct MapHeader *mapHeader = get_mapheader_by_bank_and_number(mapGroup, mapNum); + struct MapHeader *mapHeader = Overworld_GetMapHeaderByGroupAndId(mapGroup, mapNum); u16 r1; gRegionMap->mapSecId = mapHeader->regionMapSectionId; diff --git a/src/rom3.c b/src/rom3.c index 3b4b6a941..3f4860ecc 100644 --- a/src/rom3.c +++ b/src/rom3.c @@ -1081,10 +1081,10 @@ void EmitFaintingCry(u8 a) PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); } -void EmitIntroSlide(u8 a, u8 b) +void EmitIntroSlide(u8 a, u8 battleTerrain) { gBattleBuffersTransferData[0] = 46; - gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[1] = battleTerrain; PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2); } diff --git a/src/rom4.c b/src/rom4.c index 69faec2ca..e1c8932b8 100644 --- a/src/rom4.c +++ b/src/rom4.c @@ -25,6 +25,7 @@ #include "link.h" #include "load_save.h" #include "main.h" +#include "map_constants.h" #include "map_name_popup.h" #include "menu.h" #include "metatile_behavior.h" @@ -82,7 +83,7 @@ u8 gFieldLinkPlayerCount; extern u16 gUnknown_03004898; extern u16 gUnknown_0300489C; -extern u8 EventScript_LeagueWhiteOut[]; +extern u8 S_WhiteOut[]; extern u8 gUnknown_0819FC9F[]; extern u8 SingleBattleColosseum_EventScript_1A436F[]; extern u8 SingleBattleColosseum_EventScript_1A4379[]; @@ -110,12 +111,12 @@ extern void (*gUnknown_082166D8[])(struct LinkPlayerMapObject *, struct MapObjec extern struct MapData * const gMapAttributes[]; extern struct MapHeader * const * const gMapGroups[]; extern const struct WarpData gDummyWarpData; -extern s32 gUnknown_0839ACE8; +extern s32 gMaxFlashLevel; extern u32 gUnknown_08216694[]; -void DoWhiteOut(void) +static void DoWhiteOut(void) { - ScriptContext2_RunNewScript(EventScript_LeagueWhiteOut); + ScriptContext2_RunNewScript(S_WhiteOut); gSaveBlock1.money /= 2; HealPlayerParty(); sub_8053050(); @@ -133,8 +134,7 @@ void flag_var_implications_of_teleport_(void) FlagReset(SYS_USE_FLASH); } -// not new_game -void new_game(void) +void Overworld_ResetStateAfterTeleport(void) { player_avatar_init_params_reset(); FlagReset(SYS_CYCLING_ROAD); @@ -215,15 +215,16 @@ void sub_8053154(void) gMapHeader.events->mapObjectCount * sizeof(struct MapObjectTemplate)); } -void sub_8053198(void) +static void LoadSaveblockMapObjScripts(void) { struct MapObjectTemplate *mapObjectTemplates = gSaveBlock1.mapObjectTemplates; s32 i; + for (i = 0; i < 64; i++) mapObjectTemplates[i].script = gMapHeader.events->mapObjects[i].script; } -void update_saveblock1_field_object_coords(u8 localId, s16 x, s16 y) +void Overworld_SaveMapObjCoords(u8 localId, s16 x, s16 y) { s32 i; for (i = 0; i < 64; i++) @@ -233,28 +234,26 @@ void update_saveblock1_field_object_coords(u8 localId, s16 x, s16 y) { mapObjectTemplate->x = x; mapObjectTemplate->y = y; - break; + return; } } } -void update_saveblock1_field_object_movement_behavior(u8 localId, u8 movementType) +void Overworld_SaveMapObjMovementType(u8 localId, u8 movementType) { - s32 i = 0; - struct MapObjectTemplate *mapObjectTemplate = gSaveBlock1.mapObjectTemplates; - do + s32 i; + for (i = 0; i < 64; i++) { + struct MapObjectTemplate *mapObjectTemplate = &gSaveBlock1.mapObjectTemplates[i]; if (mapObjectTemplate->localId == localId) { mapObjectTemplate->movementType = movementType; - break; + return; } - mapObjectTemplate++; - i++; - } while (i < 64); + } } -void mapdata_load_assets_to_gpu_and_full_redraw(void) +static void mapdata_load_assets_to_gpu_and_full_redraw(void) { move_tilemap_camera_to_upper_left_corner(); copy_map_tileset1_tileset2_to_vram(gMapHeader.mapData); @@ -263,7 +262,7 @@ void mapdata_load_assets_to_gpu_and_full_redraw(void) cur_mapheader_run_tileset_funcs_after_some_cpuset(); } -struct MapData *get_mapdata_header(void) +static struct MapData *get_mapdata_header(void) { u16 mapDataId = gSaveBlock1.mapDataId; if (mapDataId) @@ -271,7 +270,7 @@ struct MapData *get_mapdata_header(void) return NULL; } -void warp_shift(void) +static void warp_shift(void) { gUnknown_020297F0 = gSaveBlock1.location; gSaveBlock1.location = gUnknown_020297F8; @@ -279,7 +278,7 @@ void warp_shift(void) gUnknown_02029808 = gDummyWarpData; } -void warp_set(struct WarpData *warp, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y) +static void warp_set(struct WarpData *warp, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y) { warp->mapGroup = mapGroup; warp->mapNum = mapNum; @@ -288,7 +287,7 @@ void warp_set(struct WarpData *warp, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 warp->y = y; } -bool32 warp_data_is_not_neg_1(struct WarpData *warp) +static bool32 warp_data_is_not_neg_1(struct WarpData *warp) { if (warp->mapGroup != -1) return FALSE; @@ -303,26 +302,26 @@ bool32 warp_data_is_not_neg_1(struct WarpData *warp) return TRUE; } -struct MapHeader *const get_mapheader_by_bank_and_number(u16 mapGroup, u16 mapNum) +struct MapHeader *const Overworld_GetMapHeaderByGroupAndId(u16 mapGroup, u16 mapNum) { return gMapGroups[mapGroup][mapNum]; } struct MapHeader *const warp1_get_mapheader(void) { - return get_mapheader_by_bank_and_number(gUnknown_020297F8.mapGroup, gUnknown_020297F8.mapNum); + return Overworld_GetMapHeaderByGroupAndId(gUnknown_020297F8.mapGroup, gUnknown_020297F8.mapNum); } -void set_current_map_header_from_sav1_save_old_name(void) +static void set_current_map_header_from_sav1_save_old_name(void) { - gMapHeader = *get_mapheader_by_bank_and_number(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum); + gMapHeader = *Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum); gSaveBlock1.mapDataId = gMapHeader.mapDataId; gMapHeader.mapData = get_mapdata_header(); } -void sub_805338C(void) +static void LoadSaveblockMapHeader(void) { - gMapHeader = *get_mapheader_by_bank_and_number(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum); + gMapHeader = *Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum); gMapHeader.mapData = get_mapdata_header(); } @@ -398,9 +397,9 @@ void sub_8053588(u8 a1) void sub_80535C4(s16 a1, s16 a2) { - u8 v4 = sav1_map_get_light_level(); - u8 v5 = get_map_light_level_by_bank_and_number(gUnknown_020297F8.mapGroup, gUnknown_020297F8.mapNum); - if (is_light_level_1_2_3_5_or_6(v4) && is_light_level_1_2_3_5_or_6(v5) != TRUE) + u8 v4 = Overworld_GetMapTypeOfSaveblockLocation(); + u8 v5 = GetMapTypeByGroupAndId(gUnknown_020297F8.mapGroup, gUnknown_020297F8.mapNum); + if (is_map_type_1_2_3_5_or_6(v4) && is_map_type_1_2_3_5_or_6(v5) != TRUE) sub_805363C(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, -1, a1 - 7, a2 - 6); } @@ -482,7 +481,7 @@ struct MapConnection *sub_8053818(u8 dir) bool8 sub_8053850(u8 dir, u16 x, u16 y) { struct MapConnection *connection = sub_8053818(dir); - if (connection) + if (connection != NULL) { warp1_set(connection->mapGroup, connection->mapNum, -1, x, y); } @@ -522,7 +521,7 @@ void sub_80538F0(u8 mapGroup, u8 mapNum) DoTimeBasedEvents(); sub_80806E4(); ChooseAmbientCrySpecies(); - sub_8053C98(); + SetDefaultFlashLevel(); sav1_reset_battle_music_maybe(); mapheader_run_script_with_tag_x3(); not_trainer_hill_battle_pyramid(); @@ -548,8 +547,8 @@ void sub_8053994(u32 a1) set_current_map_header_from_sav1_save_old_name(); sub_8053154(); - v2 = is_light_level_1_2_3_5_or_6(gMapHeader.mapType); - v3 = is_light_level_8_or_9(gMapHeader.mapType); + v2 = is_map_type_1_2_3_5_or_6(gMapHeader.mapType); + v3 = Overworld_MapTypeIsIndoors(gMapHeader.mapType); ClearTempFieldEventData(); ResetCyclingRoadChallengeData(); prev_quest_postbuffer_cursor_backup_reset(); @@ -560,7 +559,7 @@ void sub_8053994(u32 a1) ChooseAmbientCrySpecies(); if (v2) FlagReset(SYS_USE_FLASH); - sub_8053C98(); + SetDefaultFlashLevel(); sav1_reset_battle_music_maybe(); mapheader_run_script_with_tag_x3(); UpdateLocationHistoryForRoamer(); @@ -598,11 +597,11 @@ void walkrun_find_lowest_active_bit_in_bitfield(void) struct UnkPlayerStruct *sub_8053AA8(void) { struct UnkPlayerStruct playerStruct; - u8 light = sav1_map_get_light_level(); + u8 mapType = Overworld_GetMapTypeOfSaveblockLocation(); u16 v2 = cur_mapdata_block_role_at_screen_center_acc_to_sav1(); - u8 v4 = sub_8053B00(&gUnknown_02029810, v2, light); + u8 v4 = sub_8053B00(&gUnknown_02029810, v2, mapType); playerStruct.player_field_0 = v4; - playerStruct.player_field_1 = sub_8053B60(&gUnknown_02029810, v4, v2, light); + playerStruct.player_field_1 = sub_8053B60(&gUnknown_02029810, v4, v2, mapType); gUnknown_02029810 = playerStruct; return &gUnknown_02029810; } @@ -615,7 +614,7 @@ u8 sub_8053B00(struct UnkPlayerStruct *playerStruct, u16 a2, u8 a3) return 16; if (MetatileBehavior_IsSurfableWaterOrUnderwater(a2) == 1) return 8; - if (IsBikingAllowedByMap() != TRUE) + if (Overworld_IsBikeAllowedOnCurrentMap() != TRUE) return 1; if (playerStruct->player_field_0 == 2) return 2; @@ -653,10 +652,12 @@ u16 cur_mapdata_block_role_at_screen_center_acc_to_sav1(void) return MapGridGetMetatileBehaviorAt(gSaveBlock1.pos.x + 7, gSaveBlock1.pos.y + 7); } -bool32 IsBikingAllowedByMap(void) +bool32 Overworld_IsBikeAllowedOnCurrentMap(void) { // is player in cycling road entrance? - if (gSaveBlock1.location.mapGroup == 29 && (gSaveBlock1.location.mapNum == 11 || gSaveBlock1.location.mapNum == 12)) + if (gSaveBlock1.location.mapGroup == MAP_GROUP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE + && (gSaveBlock1.location.mapNum == MAP_ID_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE + || gSaveBlock1.location.mapNum == MAP_ID_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE)) return TRUE; // is player indoor, in a secret base, or underwater? @@ -667,37 +668,37 @@ bool32 IsBikingAllowedByMap(void) if (gMapHeader.mapType == MAP_TYPE_UNDERWATER) return FALSE; - // is player in SeafloorCavern_Room9? - if (gSaveBlock1.location.mapGroup == 24 && gSaveBlock1.location.mapNum == 36) + // Thou shalt not bike on the sacred resting grounds of Kyogre/Groudon. + if (gSaveBlock1.location.mapGroup == MAP_GROUP_SEAFLOOR_CAVERN_ROOM9 + && gSaveBlock1.location.mapNum == MAP_ID_SEAFLOOR_CAVERN_ROOM9) return FALSE; - - // is player in CaveOfOrigin_B4F? - if (gSaveBlock1.location.mapGroup == 24 && gSaveBlock1.location.mapNum == 42) + if (gSaveBlock1.location.mapGroup == MAP_GROUP_CAVE_OF_ORIGIN_B4F + && gSaveBlock1.location.mapNum == MAP_ID_CAVE_OF_ORIGIN_B4F) return FALSE; return TRUE; } -void sub_8053C98(void) +void SetDefaultFlashLevel(void) { if (!gMapHeader.cave) - gSaveBlock1.flashUsed = 0; + gSaveBlock1.flashLevel = 0; else if (FlagGet(SYS_USE_FLASH)) - gSaveBlock1.flashUsed = 1; + gSaveBlock1.flashLevel = 1; else - gSaveBlock1.flashUsed = gUnknown_0839ACE8; + gSaveBlock1.flashLevel = gMaxFlashLevel; } -void sub_8053CE4(s32 a1) +void Overworld_SetFlashLevel(s32 flashLevel) { - if (a1 < 0 || a1 > gUnknown_0839ACE8) - a1 = 0; - gSaveBlock1.flashUsed = a1; + if (flashLevel < 0 || flashLevel > gMaxFlashLevel) + flashLevel = 0; + gSaveBlock1.flashLevel = flashLevel; } -u8 sav1_get_flash_used_on_map(void) +u8 Overworld_GetFlashLevel(void) { - return gSaveBlock1.flashUsed; + return gSaveBlock1.flashLevel; } void sub_8053D14(u16 mapDataId) @@ -706,60 +707,62 @@ void sub_8053D14(u16 mapDataId) gMapHeader.mapData = get_mapdata_header(); } -bool16 sub_8053D30(struct WarpData *warp) +static bool16 ShouldLegendaryMusicPlayAtLocation(struct WarpData *warp) { if (!FlagGet(SYS_WEATHER_CTRL)) return FALSE; - if (warp->mapGroup != 0) - return FALSE; - switch (warp->mapNum) + if (warp->mapGroup == 0) { - case 5: - case 6: - case 7: - case 8: - return TRUE; - case 39: - case 40: - case 41: - case 42: - case 43: - return TRUE; + switch (warp->mapNum) + { + case MAP_ID_LILYCOVE_CITY: + case MAP_ID_MOSSDEEP_CITY: + case MAP_ID_SOOTOPOLIS_CITY: + case MAP_ID_EVER_GRANDE_CITY: + return TRUE; + case MAP_ID_ROUTE124: + case MAP_ID_ROUTE125: + case MAP_ID_ROUTE126: + case MAP_ID_ROUTE127: + case MAP_ID_ROUTE128: + return TRUE; + } } return FALSE; } -bool16 sub_8053D6C(struct WarpData *warp) +static bool16 IsInfiltratedWeatherInstitute(struct WarpData *warp) { - if (VarGet(0x40B3)) + if (VarGet(VAR_WEATHER_INSTITUTE_CLEARED)) return FALSE; - if (warp->mapGroup != 32) + if (warp->mapGroup != MAP_GROUP_ROUTE119_WEATHER_INSTITUTE_1F) return FALSE; - if (warp->mapNum == 0 || warp->mapNum == 1) + if (warp->mapNum == MAP_ID_ROUTE119_WEATHER_INSTITUTE_1F + || warp->mapNum == MAP_ID_ROUTE119_WEATHER_INSTITUTE_2F) return TRUE; return FALSE; } -u16 sub_8053D9C(struct WarpData *warp) +static u16 GetLocationMusic(struct WarpData *warp) { - if (sub_8053D30(warp) == TRUE) + if (ShouldLegendaryMusicPlayAtLocation(warp) == TRUE) return LEGENDARY_MUSIC; - else if (sub_8053D6C(warp) == TRUE) + else if (IsInfiltratedWeatherInstitute(warp) == TRUE) return BGM_TOZAN; else - return get_mapheader_by_bank_and_number(warp->mapGroup, warp->mapNum)->music; + return Overworld_GetMapHeaderByGroupAndId(warp->mapGroup, warp->mapNum)->music; } u16 sav1_map_get_music(void) { u16 music; - if (gSaveBlock1.location.mapGroup == 0 - && gSaveBlock1.location.mapNum == 26 + if (gSaveBlock1.location.mapGroup == MAP_GROUP_ROUTE111 + && gSaveBlock1.location.mapNum == MAP_ID_ROUTE111 && GetSav1Weather() == 8) return BGM_ASHROAD; - music = sub_8053D9C(&gSaveBlock1.location); + music = GetLocationMusic(&gSaveBlock1.location); if (music != 0x7FFF) { return music; @@ -775,14 +778,15 @@ u16 sav1_map_get_music(void) u16 warp1_target_get_music(void) { - u16 music = sub_8053D9C(&gUnknown_020297F8); + u16 music = GetLocationMusic(&gUnknown_020297F8); if (music != 0x7FFF) { return music; } else { - if (gSaveBlock1.location.mapGroup == 0 && gSaveBlock1.location.mapNum == 2) + if (gSaveBlock1.location.mapGroup == MAP_GROUP_MAUVILLE_CITY + && gSaveBlock1.location.mapNum == MAP_ID_MAUVILLE_CITY) return BGM_DOORO_X1; else return BGM_GRANROAD; @@ -802,7 +806,7 @@ void sub_8053E90(void) { if (gSaveBlock1.battleMusic) music = gSaveBlock1.battleMusic; - else if (sav1_map_get_light_level() == 5) + else if (Overworld_GetMapTypeOfSaveblockLocation() == MAP_TYPE_UNDERWATER) music = BGM_DEEPDEEP; else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING)) music = BGM_NAMINORI; @@ -852,17 +856,17 @@ void sub_8053F84(void) FadeOutAndPlayNewMapMusic(sav1_map_get_music(), 8); } -void ChangeMapMusic(u16 newMusic) +void Overworld_ChangeMusicTo(u16 newMusic) { u16 currentMusic = GetCurrentMapMusic(); if (currentMusic != newMusic && currentMusic != LEGENDARY_MUSIC) FadeOutAndPlayNewMapMusic(newMusic, 8); } -u8 is_warp1_light_level_8_or_9(void) +u8 GetMapMusicFadeoutSpeed(void) { struct MapHeader *mapHeader = warp1_get_mapheader(); - if (is_light_level_8_or_9(mapHeader->mapType) == TRUE) + if (Overworld_MapTypeIsIndoors(mapHeader->mapType) == TRUE) return 2; else return 4; @@ -873,7 +877,7 @@ void sub_8053FF8(void) u16 music = warp1_target_get_music(); if (FlagGet(SPECIAL_FLAG_1) != TRUE && music != GetCurrentMapMusic()) { - u8 speed = is_warp1_light_level_8_or_9(); + u8 speed = GetMapMusicFadeoutSpeed(); FadeOutMapMusic(speed); } } @@ -934,10 +938,14 @@ void UpdateAmbientCry(s16 *state, u16 *delayCounter) void ChooseAmbientCrySpecies(void) { - if ((gSaveBlock1.location.mapGroup == 0 && gSaveBlock1.location.mapNum == 45) && !IsMirageIslandPresent()) + if ((gSaveBlock1.location.mapGroup == MAP_GROUP_ROUTE130 + && gSaveBlock1.location.mapNum == MAP_ID_ROUTE130) + && !IsMirageIslandPresent()) { + // Only play water pokemon cries on this route + // when Mirage Island is not present sIsAmbientCryWaterMon = TRUE; - sAmbientCrySpecies = GetMirageIslandMon(); + sAmbientCrySpecies = GetLocalWaterMon(); } else { @@ -945,45 +953,53 @@ void ChooseAmbientCrySpecies(void) } } -u8 get_map_light_level_by_bank_and_number(s8 mapGroup, s8 mapNum) +u8 GetMapTypeByGroupAndId(s8 mapGroup, s8 mapNum) { - return get_mapheader_by_bank_and_number(mapGroup, mapNum)->mapType; + return Overworld_GetMapHeaderByGroupAndId(mapGroup, mapNum)->mapType; } -u8 get_map_light_level_from_warp(struct WarpData *warp) +u8 GetMapTypeByWarpData(struct WarpData *warp) { - return get_map_light_level_by_bank_and_number(warp->mapGroup, warp->mapNum); + return GetMapTypeByGroupAndId(warp->mapGroup, warp->mapNum); } -u8 sav1_map_get_light_level(void) +u8 Overworld_GetMapTypeOfSaveblockLocation(void) { - return get_map_light_level_from_warp(&gSaveBlock1.location); + return GetMapTypeByWarpData(&gSaveBlock1.location); } -u8 get_map_light_from_warp0(void) +u8 get_map_type_from_warp0(void) { - return get_map_light_level_from_warp(&gUnknown_020297F0); + return GetMapTypeByWarpData(&gUnknown_020297F0); } -bool8 is_light_level_1_2_3_5_or_6(u8 a1) +bool8 is_map_type_1_2_3_5_or_6(u8 mapType) { - if (a1 == 3 || a1 == 1 || a1 == 5 || a1 == 2 || a1 == 6) + if (mapType == MAP_TYPE_ROUTE + || mapType == MAP_TYPE_TOWN + || mapType == MAP_TYPE_UNDERWATER + || mapType == MAP_TYPE_CITY + || mapType == MAP_TYPE_6) return TRUE; else return FALSE; } -bool8 is_light_level_1_2_3_or_6(u8 a1) +bool8 Overworld_MapTypeAllowsTeleportAndFly(u8 mapType) { - if (a1 == 3 || a1 == 1 || a1 == 6 || a1 == 2) + if (mapType == MAP_TYPE_ROUTE + || mapType == MAP_TYPE_TOWN + || mapType == MAP_TYPE_6 + || mapType == MAP_TYPE_CITY) return TRUE; else return FALSE; } -bool8 is_light_level_8_or_9(u8 a1) +bool8 Overworld_MapTypeIsIndoors(u8 mapType) { - if (a1 == 8 || a1 == 9) + if (mapType == MAP_TYPE_INDOOR + || mapType == MAP_TYPE_SECRET_BASE) return TRUE; else return FALSE; @@ -991,17 +1007,17 @@ bool8 is_light_level_8_or_9(u8 a1) u8 unref_sub_8054260(void) { - return get_mapheader_by_bank_and_number(gSaveBlock1.warp2.mapGroup, gSaveBlock1.warp2.mapNum)->regionMapSectionId; + return Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.warp2.mapGroup, gSaveBlock1.warp2.mapNum)->regionMapSectionId; } u8 sav1_map_get_name(void) { - return get_mapheader_by_bank_and_number(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum)->regionMapSectionId; + return Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum)->regionMapSectionId; } u8 sav1_map_get_battletype(void) { - return get_mapheader_by_bank_and_number(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum)->battleType; + return Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum)->battleType; } void ResetSafariZoneFlag_(void) @@ -1263,8 +1279,8 @@ void CB2_ContinueSavedGame(void) FieldClearVBlankHBlankCallbacks(); StopMapMusic(); ResetSafariZoneFlag_(); - sub_805338C(); - sub_8053198(); + LoadSaveblockMapHeader(); + LoadSaveblockMapObjScripts(); UnfreezeMapObjects(); DoTimeBasedEvents(); sub_805308C(); @@ -1315,7 +1331,7 @@ void VBlankCB_Field(void) void sub_8054814(void) { - u8 val = sav1_get_flash_used_on_map(); + u8 val = Overworld_GetFlashLevel(); if (val) { sub_80815E0(val); diff --git a/src/rom6.c b/src/rom6.c index 702e48c69..9308dfe0c 100644 --- a/src/rom6.c +++ b/src/rom6.c @@ -120,7 +120,7 @@ bool8 SetUpFieldMove_RockSmash(void) { if (npc_before_player_of_type(0x56) == TRUE) { - gFieldCallback = sub_808AB90; + gFieldCallback = FieldCallback_Teleport; gUnknown_03005CE4 = sub_810B53C; return TRUE; } @@ -157,7 +157,7 @@ int SetUpFieldMove_Dig(void) { if (sub_80CA1C8() == TRUE) { - gFieldCallback = sub_808AB90; + gFieldCallback = FieldCallback_Teleport; gUnknown_03005CE4 = sub_810B5D8; return TRUE; } diff --git a/src/scrcmd.c b/src/scrcmd.c index 813e041e1..6a746b65d 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -567,8 +567,8 @@ bool8 ScrCmd_lighten(struct ScriptContext *ctx) bool8 ScrCmd_darken(struct ScriptContext *ctx) { - u16 value = VarGet(ScriptReadHalfword(ctx)); - sub_8053CE4(value); + u16 flashLevel = VarGet(ScriptReadHalfword(ctx)); + Overworld_SetFlashLevel(flashLevel); return FALSE; } @@ -870,7 +870,7 @@ bool8 ScrCmd_fadedefault(struct ScriptContext *ctx) bool8 ScrCmd_fademusic(struct ScriptContext *ctx) { - ChangeMapMusic(ScriptReadHalfword(ctx)); + Overworld_ChangeMusicTo(ScriptReadHalfword(ctx)); return FALSE; } @@ -996,7 +996,7 @@ bool8 ScrCmd_movespriteperm(struct ScriptContext *ctx) u16 v1 = VarGet(ScriptReadHalfword(ctx)); u16 v2 = VarGet(ScriptReadHalfword(ctx)); u32 v3 = VarGet(ScriptReadHalfword(ctx)); - update_saveblock1_field_object_coords(v1, v2, v3); + Overworld_SaveMapObjCoords(v1, v2, v3); return FALSE; } @@ -1066,7 +1066,7 @@ bool8 ScrCmd_spritebehave(struct ScriptContext *ctx) { u16 v1 = VarGet(ScriptReadHalfword(ctx)); u8 v2 = ScriptReadByte(ctx); - update_saveblock1_field_object_movement_behavior(v1, v2); + Overworld_SaveMapObjMovementType(v1, v2); return FALSE; } diff --git a/src/script.c b/src/script.c index 394085d4a..f049b96fc 100644 --- a/src/script.c +++ b/src/script.c @@ -228,16 +228,16 @@ void ScriptContext2_RunNewScript(const u8 *ptr) ; } -u8 *mapheader_get_tagged_pointer(u8 tag) +static u8 *mapheader_get_tagged_pointer(u8 tag) { u8 *mapScripts = gMapHeader.mapScripts; - if (!mapScripts) + if (mapScripts == NULL) return NULL; while (1) { - if (!*mapScripts) + if (*mapScripts == 0) return NULL; if (*mapScripts == tag) { @@ -248,14 +248,14 @@ u8 *mapheader_get_tagged_pointer(u8 tag) } } -void mapheader_run_script_by_tag(u8 tag) +static void mapheader_run_script_by_tag(u8 tag) { u8 *ptr = mapheader_get_tagged_pointer(tag); if (ptr) ScriptContext2_RunNewScript(ptr); } -u8 *mapheader_get_first_match_from_tagged_ptr_list(u8 tag) +static u8 *mapheader_get_first_match_from_tagged_ptr_list(u8 tag) { u8 *ptr = mapheader_get_tagged_pointer(tag); @@ -316,7 +316,7 @@ void mapheader_run_first_tag4_script_list_match(void) ScriptContext2_RunNewScript(ptr); } -u32 CalculateRamScriptChecksum(void) +static u32 CalculateRamScriptChecksum(void) { u32 i; u32 sum = 0; diff --git a/src/time_events.c b/src/time_events.c index e1b9a2e9e..ab3d6b9d4 100644 --- a/src/time_events.c +++ b/src/time_events.c @@ -81,7 +81,7 @@ void UpdateShoalTideFlag(void) 1, }; - if (is_light_level_1_2_3_5_or_6(get_map_light_from_warp0())) + if (is_map_type_1_2_3_5_or_6(get_map_type_from_warp0())) { RtcCalcLocalTime(); if (tide[gLocalTime.hours]) diff --git a/src/wild_encounter.c b/src/wild_encounter.c index 23e74561c..f7f005737 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -5,6 +5,7 @@ #include "event_data.h" #include "field_player_avatar.h" #include "fieldmap.h" +#include "map_constants.h" #include "metatile_behavior.h" #include "pokeblock.h" #include "rng.h" @@ -2952,7 +2953,8 @@ static bool8 CheckFeebas(void) u8 route119section = 0; u16 waterTileNum; - if (gSaveBlock1.location.mapGroup == 0 && gSaveBlock1.location.mapNum == 0x22) + if (gSaveBlock1.location.mapGroup == MAP_GROUP_ROUTE119 + && gSaveBlock1.location.mapNum == MAP_ID_ROUTE119) { GetXYCoordsOneStepInFrontOfPlayer(&x, &y); x -= 7; @@ -3497,7 +3499,7 @@ u16 GetLocalWildMon(bool8 *isWaterMon) } } -u16 GetMirageIslandMon(void) +u16 GetLocalWaterMon(void) { u16 headerNum = GetCurrentMapWildMonHeader(); -- cgit v1.2.3 From 637102683c6e4d0535966ab9b213b8c93c97945c Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Tue, 12 Sep 2017 16:59:12 -0500 Subject: rename rom_4.c to overworld.c --- common_syms/overworld.txt | 4 + common_syms/rom4.txt | 4 - include/overworld.h | 237 ++++ include/rom4.h | 237 ---- ld_script.txt | 2 +- src/battle_records.c | 2 +- src/battle_setup.c | 2 +- src/battle_transition.c | 2 +- src/berry_blender.c | 2 +- src/berry_tag_screen.c | 2 +- src/bike.c | 2 +- src/cable_club.c | 2 +- src/choose_party.c | 2 +- src/clock.c | 2 +- src/decoration.c | 2 +- src/diploma.c | 2 +- src/egg_hatch.c | 2 +- src/evolution_scene.c | 2 +- src/field_control_avatar.c | 2 +- src/field_effect.c | 2 +- src/field_fadetransition.c | 2 +- src/field_map_obj.c | 2 +- src/field_player_avatar.c | 2 +- src/field_screen_effect.c | 2 +- src/field_special_scene.c | 2 +- src/field_specials.c | 2 +- src/field_tasks.c | 2 +- src/fieldmap.c | 2 +- src/fldeff_cut.c | 2 +- src/fldeff_flash.c | 2 +- src/fldeff_teleport.c | 2 +- src/hall_of_fame.c | 2 +- src/hof_pc.c | 2 +- src/item_menu.c | 2 +- src/item_use.c | 2 +- src/learn_move.c | 2 +- src/load_save.c | 2 +- src/mail.c | 2 +- src/main.c | 2 +- src/main_menu.c | 2 +- src/matsuda_debug_menu.c | 2 +- src/mauville_man.c | 2 +- src/menu_helpers.c | 2 +- src/new_game.c | 2 +- src/overworld.c | 2587 +++++++++++++++++++++++++++++++++++++ src/player_pc.c | 2 +- src/pokeblock.c | 2 +- src/pokeblock_feed.c | 2 +- src/pokedex.c | 2 +- src/pokemon_1.c | 2 +- src/pokemon_3.c | 2 +- src/pokemon_menu.c | 2 +- src/post_battle_event_funcs.c | 2 +- src/record_mixing.c | 2 +- src/region_map.c | 2 +- src/rom4.c | 2587 ------------------------------------- src/rom6.c | 2 +- src/safari_zone.c | 2 +- src/save.c | 2 +- src/scrcmd.c | 2 +- src/script_pokemon_util_80C4BF0.c | 2 +- src/script_pokemon_util_80F99CC.c | 2 +- src/secret_base.c | 2 +- src/shop.c | 2 +- src/start_menu.c | 2 +- src/time_events.c | 2 +- src/trainer_card.c | 2 +- src/tv.c | 4 +- src/use_pokeblock.c | 2 +- src/wild_encounter.c | 2 +- sym_bss.txt | 2 +- sym_common.txt | 2 +- sym_ewram.txt | 2 +- 73 files changed, 2896 insertions(+), 2896 deletions(-) create mode 100644 common_syms/overworld.txt delete mode 100644 common_syms/rom4.txt create mode 100644 include/overworld.h delete mode 100644 include/rom4.h create mode 100644 src/overworld.c delete mode 100644 src/rom4.c diff --git a/common_syms/overworld.txt b/common_syms/overworld.txt new file mode 100644 index 000000000..ecdb190b2 --- /dev/null +++ b/common_syms/overworld.txt @@ -0,0 +1,4 @@ +word_3004858 +gFieldCallback +gUnknown_03004860 +gFieldLinkPlayerCount diff --git a/common_syms/rom4.txt b/common_syms/rom4.txt deleted file mode 100644 index ecdb190b2..000000000 --- a/common_syms/rom4.txt +++ /dev/null @@ -1,4 +0,0 @@ -word_3004858 -gFieldCallback -gUnknown_03004860 -gFieldLinkPlayerCount diff --git a/include/overworld.h b/include/overworld.h new file mode 100644 index 000000000..81f37ae8b --- /dev/null +++ b/include/overworld.h @@ -0,0 +1,237 @@ +#ifndef GUARD_ROM4_H +#define GUARD_ROM4_H + +#include "sprite.h" + +struct UnkPlayerStruct +{ + u8 player_field_0; + u8 player_field_1; +}; + +struct LinkPlayerMapObject +{ + u8 active; + u8 linkPlayerId; + u8 mapObjId; + u8 mode; +}; + +struct UCoords32 +{ + u32 x, y; +}; + +extern struct UCoords32 gUnknown_0821664C[]; +extern void (*gFieldCallback)(void); + +// sub_8052F5C +void flag_var_implications_of_teleport_(void); +void Overworld_ResetStateAfterTeleport(void); +void sub_8053014(void); +void sub_8053050(void); +// sub_805308C +void ResetGameStats(void); +void IncrementGameStat(u8 index); +u32 GetGameStat(u8 index); +void SetGameStat(u8, u32); +// sub_8053154 +// LoadSaveblockMapObjScripts +void Overworld_SaveMapObjCoords(u8, s16, s16); +void Overworld_SaveMapObjMovementType(u8, u8); +// mapdata_load_assets_to_gpu_and_full_redraw +// get_mapdata_header +// warp_shift +// warp_set +// warp_data_is_not_neg_1 +struct MapHeader * const Overworld_GetMapHeaderByGroupAndId(u16 mapGroup, u16 mapNum); +struct MapHeader * const warp1_get_mapheader(void); +// set_current_map_header_from_sav1_save_old_name +// LoadSaveblockMapHeader +// sub_80533CC +void warp_in(void); +void warp1_set(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y); +void warp1_set_2(s8 mapGroup, s8 mapNum, s8 warpId); +void saved_warp2_set(int unused, s8 mapGroup, s8 mapNum, s8 warpId); +void saved_warp2_set_2(int unused, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y); +void copy_saved_warp2_bank_and_enter_x_to_warp1(u8 unused); +void sub_8053538(u8); +void sub_8053570(void); +void sub_8053588(u8); +void sub_80535C4(s16 a1, s16 a2); +void sub_805363C(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y); +void sub_8053678(void); +void sub_8053690(s8, s8, s8, s8, s8); +// warp1_set_to_warp2 +void sub_80536E4(s8, s8, s8, s8, s8); +void sub_8053720(s16, s16); +// sub_8053778 +// unref_sub_8053790 +void sub_80537CC(u8); +void gpu_sync_bg_hide(); +// sub_8053818 +// sub_8053850 +bool8 sub_80538B0(u16 x, u16 y); +bool8 sub_80538D0(u16 x, u16 y); +void sub_80538F0(u8 mapGroup, u8 mapNum); +// sub_8053994 +void player_avatar_init_params_reset(void); +void walkrun_find_lowest_active_bit_in_bitfield(void); +// sub_8053AA8 +u8 sub_8053B00(struct UnkPlayerStruct *playerStruct, u16 a2, u8 a3); +u8 sub_8053B60(struct UnkPlayerStruct *playerStruct, u8, u16, u8); +u16 cur_mapdata_block_role_at_screen_center_acc_to_sav1(void); +bool32 Overworld_IsBikeAllowedOnCurrentMap(void); +void SetDefaultFlashLevel(void); +void Overworld_SetFlashLevel(s32 a1); +u8 Overworld_GetFlashLevel(void); +void sub_8053D14(u16); +// sub_8053D30 +// sub_8053D6C +// GetLocationMusic +// sav1_map_get_music +// warp1_target_get_music +// call_map_music_set_to_zero +void sub_8053E90(void); +void sav1_set_battle_music_maybe(u16); +void sav1_reset_battle_music_maybe(void); +void sub_8053F0C(void); +void sub_8053F84(void); +void Overworld_ChangeMusicTo(u16); +// GetMapMusicFadeoutSpeed +void sub_8053FF8(void); +bool8 sub_8054034(void); +void sub_8054044(void); +// PlayAmbientCry +void UpdateAmbientCry(s16 *, u16 *); +void ChooseAmbientCrySpecies(void); +u8 GetMapTypeByGroupAndId(s8 mapGroup, s8 mapNum); +// GetMapTypeByWarpData +u8 Overworld_GetMapTypeOfSaveblockLocation(void); +u8 get_map_type_from_warp0(void); +bool8 is_map_type_1_2_3_5_or_6(u8 a1); +bool8 Overworld_MapTypeAllowsTeleportAndFly(u8 a1); +u8 Overworld_MapTypeIsIndoors(u8); +// unref_sub_8054260 +u8 sav1_map_get_name(); +// sav1_map_get_battletype +// ResetSafariZoneFlag_ +bool32 is_c1_link_related_active(void); +// c1_overworld_normal +// c1_overworld +// OverworldBasic +void CB2_OverworldBasic(void); +void c2_overworld(void); +// set_callback1 +// sub_80543DC +// sub_80543E8 +void CB2_NewGame(void); +void CB2_WhiteOut(void); +void CB2_LoadMap(void); +void CB2_LoadMap2(void); +void sub_8054534(void); +void sub_8054588(void); +void c2_80567AC(void); +void c2_exit_to_overworld_2_switch(void); +void c2_exit_to_overworld_2_local(void); +void c2_exit_to_overworld_2_link(void); +// sub_805465C +void sub_805469C(void); +// sub_80546B8 +void c2_exit_to_overworld_1_continue_scripts_restart_music(void); +void sub_80546F0(void); +// sub_805470C +void CB2_ContinueSavedGame(void); +void FieldClearVBlankHBlankCallbacks(void); +void SetFieldVBlankCallback(void); +void VBlankCB_Field(void); +// sub_8054814 +bool32 sub_805483C(u8 *); +bool32 sub_805493C(u8 *, u32); +bool32 sub_8054A4C(u8 *); +bool32 sub_8054A9C(u8 *a1); +void do_load_map_stuff_loop(u8 *a1); +void sub_8054BA8(void); +void sub_8054C2C(void); +void sub_8054C54(void); +void sub_8054D4C(u32 a1); +void sub_8054D90(void); +void mli4_mapscripts_and_other(void); +void sub_8054E20(void); +void sub_8054E34(void); +void sub_8054E60(void); +void sub_8054E7C(void); +void sub_8054E98(void); +void sub_8054EC8(void); +void sub_8054F48(void); +void sub_8054F70(void); +// sub_8054F88 +// sub_8054FC0 +// sub_8054FF8 +// sub_8055218 +// sub_8055280 +// sub_80552B0 +u16 sub_805530C(u16); +void sub_8055340(u16 *); +void sub_8055354(void); +u16 sub_8055390(u32); +// sub_80553E0 +u16 sub_80553E4(u32); +u16 sub_8055408(u32); +u16 sub_8055438(u32); +// sub_8055468 +// sub_805546C +// sub_80554A4 +// sub_80554B8 +// sub_80554BC +// sub_80554E4 +// sub_80554F8 +// unref_sub_8055568 +// sub_8055574 +u16 sub_8055588(void); +// sub_805559C +void sub_80555B0(int linkPlayerId, int a2, struct UnkStruct_8054FF8 *a3); +bool32 sub_8055618(struct UnkStruct_8054FF8 *); +bool32 sub_8055630(struct UnkStruct_8054FF8 *); +u8 *sub_8055648(struct UnkStruct_8054FF8 *); +bool32 sub_8055660(struct UnkStruct_8054FF8 *); +u8 *sub_805568C(struct UnkStruct_8054FF8 *); +u16 sub_8055758(u8 *); +void sub_80557E8(void); +void sub_80557F4(void); +void sub_8055808(u8 *); +void sub_8055824(void); +void sub_8055840(u8 *); +void sub_805585C(void); +bool32 sub_8055870(void); +u32 sub_80558AC(void); +u32 sub_8055910(void); +u32 sub_8055940(void); +// ZeroLinkPlayerMapObject +void strange_npc_table_clear(void); +// ZeroMapObject +void SpawnLinkPlayerMapObject(u8, s16, s16, u8); +void InitLinkPlayerMapObjectPos(struct MapObject *, s16, s16); +// unref_sub_8055A6C +// unref_sub_8055A9C +u8 sub_8055AE8(u8); +void sub_8055B08(u8, u16 *, u16 *); +u8 sub_8055B30(u8); +u8 sub_8055B50(u8); +// unref_sub_8055B74 +u8 GetLinkPlayerIdAt(s16, s16); +void sub_8055BFC(u8, u8); +// sub_8055C68 +// sub_8055C88 +// sub_8055C8C +// sub_8055CAC +// sub_8055CB0 +// sub_8055D18 +// sub_8055D30 +// sub_8055D38 +u8 npc_something3(u8, u8); +u8 LinkPlayerDetectCollision(u8, u8, s16, s16); +void CreateLinkPlayerSprite(u8); +void SpriteCB_LinkPlayer(struct Sprite *); + +#endif // GUARD_ROM4_H diff --git a/include/rom4.h b/include/rom4.h deleted file mode 100644 index 81f37ae8b..000000000 --- a/include/rom4.h +++ /dev/null @@ -1,237 +0,0 @@ -#ifndef GUARD_ROM4_H -#define GUARD_ROM4_H - -#include "sprite.h" - -struct UnkPlayerStruct -{ - u8 player_field_0; - u8 player_field_1; -}; - -struct LinkPlayerMapObject -{ - u8 active; - u8 linkPlayerId; - u8 mapObjId; - u8 mode; -}; - -struct UCoords32 -{ - u32 x, y; -}; - -extern struct UCoords32 gUnknown_0821664C[]; -extern void (*gFieldCallback)(void); - -// sub_8052F5C -void flag_var_implications_of_teleport_(void); -void Overworld_ResetStateAfterTeleport(void); -void sub_8053014(void); -void sub_8053050(void); -// sub_805308C -void ResetGameStats(void); -void IncrementGameStat(u8 index); -u32 GetGameStat(u8 index); -void SetGameStat(u8, u32); -// sub_8053154 -// LoadSaveblockMapObjScripts -void Overworld_SaveMapObjCoords(u8, s16, s16); -void Overworld_SaveMapObjMovementType(u8, u8); -// mapdata_load_assets_to_gpu_and_full_redraw -// get_mapdata_header -// warp_shift -// warp_set -// warp_data_is_not_neg_1 -struct MapHeader * const Overworld_GetMapHeaderByGroupAndId(u16 mapGroup, u16 mapNum); -struct MapHeader * const warp1_get_mapheader(void); -// set_current_map_header_from_sav1_save_old_name -// LoadSaveblockMapHeader -// sub_80533CC -void warp_in(void); -void warp1_set(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y); -void warp1_set_2(s8 mapGroup, s8 mapNum, s8 warpId); -void saved_warp2_set(int unused, s8 mapGroup, s8 mapNum, s8 warpId); -void saved_warp2_set_2(int unused, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y); -void copy_saved_warp2_bank_and_enter_x_to_warp1(u8 unused); -void sub_8053538(u8); -void sub_8053570(void); -void sub_8053588(u8); -void sub_80535C4(s16 a1, s16 a2); -void sub_805363C(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y); -void sub_8053678(void); -void sub_8053690(s8, s8, s8, s8, s8); -// warp1_set_to_warp2 -void sub_80536E4(s8, s8, s8, s8, s8); -void sub_8053720(s16, s16); -// sub_8053778 -// unref_sub_8053790 -void sub_80537CC(u8); -void gpu_sync_bg_hide(); -// sub_8053818 -// sub_8053850 -bool8 sub_80538B0(u16 x, u16 y); -bool8 sub_80538D0(u16 x, u16 y); -void sub_80538F0(u8 mapGroup, u8 mapNum); -// sub_8053994 -void player_avatar_init_params_reset(void); -void walkrun_find_lowest_active_bit_in_bitfield(void); -// sub_8053AA8 -u8 sub_8053B00(struct UnkPlayerStruct *playerStruct, u16 a2, u8 a3); -u8 sub_8053B60(struct UnkPlayerStruct *playerStruct, u8, u16, u8); -u16 cur_mapdata_block_role_at_screen_center_acc_to_sav1(void); -bool32 Overworld_IsBikeAllowedOnCurrentMap(void); -void SetDefaultFlashLevel(void); -void Overworld_SetFlashLevel(s32 a1); -u8 Overworld_GetFlashLevel(void); -void sub_8053D14(u16); -// sub_8053D30 -// sub_8053D6C -// GetLocationMusic -// sav1_map_get_music -// warp1_target_get_music -// call_map_music_set_to_zero -void sub_8053E90(void); -void sav1_set_battle_music_maybe(u16); -void sav1_reset_battle_music_maybe(void); -void sub_8053F0C(void); -void sub_8053F84(void); -void Overworld_ChangeMusicTo(u16); -// GetMapMusicFadeoutSpeed -void sub_8053FF8(void); -bool8 sub_8054034(void); -void sub_8054044(void); -// PlayAmbientCry -void UpdateAmbientCry(s16 *, u16 *); -void ChooseAmbientCrySpecies(void); -u8 GetMapTypeByGroupAndId(s8 mapGroup, s8 mapNum); -// GetMapTypeByWarpData -u8 Overworld_GetMapTypeOfSaveblockLocation(void); -u8 get_map_type_from_warp0(void); -bool8 is_map_type_1_2_3_5_or_6(u8 a1); -bool8 Overworld_MapTypeAllowsTeleportAndFly(u8 a1); -u8 Overworld_MapTypeIsIndoors(u8); -// unref_sub_8054260 -u8 sav1_map_get_name(); -// sav1_map_get_battletype -// ResetSafariZoneFlag_ -bool32 is_c1_link_related_active(void); -// c1_overworld_normal -// c1_overworld -// OverworldBasic -void CB2_OverworldBasic(void); -void c2_overworld(void); -// set_callback1 -// sub_80543DC -// sub_80543E8 -void CB2_NewGame(void); -void CB2_WhiteOut(void); -void CB2_LoadMap(void); -void CB2_LoadMap2(void); -void sub_8054534(void); -void sub_8054588(void); -void c2_80567AC(void); -void c2_exit_to_overworld_2_switch(void); -void c2_exit_to_overworld_2_local(void); -void c2_exit_to_overworld_2_link(void); -// sub_805465C -void sub_805469C(void); -// sub_80546B8 -void c2_exit_to_overworld_1_continue_scripts_restart_music(void); -void sub_80546F0(void); -// sub_805470C -void CB2_ContinueSavedGame(void); -void FieldClearVBlankHBlankCallbacks(void); -void SetFieldVBlankCallback(void); -void VBlankCB_Field(void); -// sub_8054814 -bool32 sub_805483C(u8 *); -bool32 sub_805493C(u8 *, u32); -bool32 sub_8054A4C(u8 *); -bool32 sub_8054A9C(u8 *a1); -void do_load_map_stuff_loop(u8 *a1); -void sub_8054BA8(void); -void sub_8054C2C(void); -void sub_8054C54(void); -void sub_8054D4C(u32 a1); -void sub_8054D90(void); -void mli4_mapscripts_and_other(void); -void sub_8054E20(void); -void sub_8054E34(void); -void sub_8054E60(void); -void sub_8054E7C(void); -void sub_8054E98(void); -void sub_8054EC8(void); -void sub_8054F48(void); -void sub_8054F70(void); -// sub_8054F88 -// sub_8054FC0 -// sub_8054FF8 -// sub_8055218 -// sub_8055280 -// sub_80552B0 -u16 sub_805530C(u16); -void sub_8055340(u16 *); -void sub_8055354(void); -u16 sub_8055390(u32); -// sub_80553E0 -u16 sub_80553E4(u32); -u16 sub_8055408(u32); -u16 sub_8055438(u32); -// sub_8055468 -// sub_805546C -// sub_80554A4 -// sub_80554B8 -// sub_80554BC -// sub_80554E4 -// sub_80554F8 -// unref_sub_8055568 -// sub_8055574 -u16 sub_8055588(void); -// sub_805559C -void sub_80555B0(int linkPlayerId, int a2, struct UnkStruct_8054FF8 *a3); -bool32 sub_8055618(struct UnkStruct_8054FF8 *); -bool32 sub_8055630(struct UnkStruct_8054FF8 *); -u8 *sub_8055648(struct UnkStruct_8054FF8 *); -bool32 sub_8055660(struct UnkStruct_8054FF8 *); -u8 *sub_805568C(struct UnkStruct_8054FF8 *); -u16 sub_8055758(u8 *); -void sub_80557E8(void); -void sub_80557F4(void); -void sub_8055808(u8 *); -void sub_8055824(void); -void sub_8055840(u8 *); -void sub_805585C(void); -bool32 sub_8055870(void); -u32 sub_80558AC(void); -u32 sub_8055910(void); -u32 sub_8055940(void); -// ZeroLinkPlayerMapObject -void strange_npc_table_clear(void); -// ZeroMapObject -void SpawnLinkPlayerMapObject(u8, s16, s16, u8); -void InitLinkPlayerMapObjectPos(struct MapObject *, s16, s16); -// unref_sub_8055A6C -// unref_sub_8055A9C -u8 sub_8055AE8(u8); -void sub_8055B08(u8, u16 *, u16 *); -u8 sub_8055B30(u8); -u8 sub_8055B50(u8); -// unref_sub_8055B74 -u8 GetLinkPlayerIdAt(s16, s16); -void sub_8055BFC(u8, u8); -// sub_8055C68 -// sub_8055C88 -// sub_8055C8C -// sub_8055CAC -// sub_8055CB0 -// sub_8055D18 -// sub_8055D30 -// sub_8055D38 -u8 npc_something3(u8, u8); -u8 LinkPlayerDetectCollision(u8, u8, s16, s16); -void CreateLinkPlayerSprite(u8); -void SpriteCB_LinkPlayer(struct Sprite *); - -#endif // GUARD_ROM4_H diff --git a/ld_script.txt b/ld_script.txt index 5c37f87ac..dc1f4752f 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -85,7 +85,7 @@ SECTIONS { src/berry_blender.o(.text); src/play_time.o(.text); src/new_game.o(.text); - src/rom4.o(.text); + src/overworld.o(.text); src/fieldmap.o(.text); src/metatile_behavior.o(.text); src/field_camera.o(.text); diff --git a/src/battle_records.c b/src/battle_records.c index 61dc09792..d848a10b8 100644 --- a/src/battle_records.c +++ b/src/battle_records.c @@ -3,7 +3,7 @@ #include "game_stat.h" #include "link.h" #include "menu.h" -#include "rom4.h" +#include "overworld.h" #include "string_util.h" #include "strings2.h" #include "trainer_card.h" diff --git a/src/battle_setup.c b/src/battle_setup.c index dba2a6ed4..fcc76a389 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -18,7 +18,7 @@ #include "opponent_constants.h" #include "palette.h" #include "rng.h" -#include "rom4.h" +#include "overworld.h" #include "safari_zone.h" #include "script.h" #include "script_pokemon_80C4.h" diff --git a/src/battle_transition.c b/src/battle_transition.c index 8c4280838..53d32d03a 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -1,7 +1,7 @@ #include "global.h" #include "battle_transition.h" #include "main.h" -#include "rom4.h" +#include "overworld.h" #include "task.h" #include "palette.h" #include "trig.h" diff --git a/src/berry_blender.c b/src/berry_blender.c index 029d352df..455aabc45 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -12,7 +12,7 @@ #include "string_util.h" #include "link.h" #include "task.h" -#include "rom4.h" +#include "overworld.h" #include "item.h" #include "items.h" #include "rng.h" diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c index a965f386c..1413a02ca 100644 --- a/src/berry_tag_screen.c +++ b/src/berry_tag_screen.c @@ -10,7 +10,7 @@ #include "menu.h" #include "menu_helpers.h" #include "palette.h" -#include "rom4.h" +#include "overworld.h" #include "songs.h" #include "sound.h" #include "sprite.h" diff --git a/src/bike.c b/src/bike.c index cd0324bd5..80cab0850 100644 --- a/src/bike.c +++ b/src/bike.c @@ -6,7 +6,7 @@ #include "flags.h" #include "global.fieldmap.h" #include "metatile_behavior.h" -#include "rom4.h" +#include "overworld.h" #include "songs.h" #include "sound.h" diff --git a/src/cable_club.c b/src/cable_club.c index b81905cc5..271bf1e3b 100644 --- a/src/cable_club.c +++ b/src/cable_club.c @@ -11,7 +11,7 @@ #include "menu.h" #include "palette.h" #include "record_mixing.h" -#include "rom4.h" +#include "overworld.h" #include "script.h" #include "script_pokemon_80C4.h" #include "songs.h" diff --git a/src/choose_party.c b/src/choose_party.c index 27181cf74..9cdf63fc8 100644 --- a/src/choose_party.c +++ b/src/choose_party.c @@ -9,7 +9,7 @@ #include "pokemon_menu.h" #include "pokemon.h" #include "pokemon_summary_screen.h" -#include "rom4.h" +#include "overworld.h" #include "script.h" #include "songs.h" #include "sound.h" diff --git a/src/clock.c b/src/clock.c index 1f2aac9fd..9635514d2 100644 --- a/src/clock.c +++ b/src/clock.c @@ -7,7 +7,7 @@ #include "field_weather.h" #include "lottery_corner.h" #include "main.h" -#include "rom4.h" +#include "overworld.h" #include "rtc.h" #include "time_events.h" #include "tv.h" diff --git a/src/decoration.c b/src/decoration.c index da33b3ab7..1b23bb306 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -1,7 +1,7 @@ #include "global.h" #include "main.h" #include "map_object_constants.h" -#include "rom4.h" +#include "overworld.h" #include "sound.h" #include "songs.h" #include "string_util.h" diff --git a/src/diploma.c b/src/diploma.c index ba7de58aa..beb3d3be4 100644 --- a/src/diploma.c +++ b/src/diploma.c @@ -4,7 +4,7 @@ #include "menu.h" #include "palette.h" #include "pokedex.h" -#include "rom4.h" +#include "overworld.h" #include "sprite.h" #include "string_util.h" #include "strings2.h" diff --git a/src/egg_hatch.c b/src/egg_hatch.c index aa3d45250..90d1ee039 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -6,7 +6,7 @@ #include "task.h" #include "script.h" #include "palette.h" -#include "rom4.h" +#include "overworld.h" #include "main.h" #include "event_data.h" #include "sound.h" diff --git a/src/evolution_scene.c b/src/evolution_scene.c index d0bd219cd..e312b081f 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -19,7 +19,7 @@ #include "species.h" #include "sound.h" #include "songs.h" -#include "rom4.h" +#include "overworld.h" #include "battle_message.h" #include "pokemon_summary_screen.h" #include "menu_cursor.h" diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 80c04652b..befa546ad 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -13,7 +13,7 @@ #include "flags.h" #include "item_menu.h" #include "metatile_behavior.h" -#include "rom4.h" +#include "overworld.h" #include "safari_zone.h" #include "script.h" #include "secret_base.h" diff --git a/src/field_effect.c b/src/field_effect.c index 79c00edff..0625e9d18 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -9,7 +9,7 @@ #include "menu.h" #include "palette.h" #include "text.h" -#include "rom4.h" +#include "overworld.h" #include "task.h" #include "sound.h" #include "songs.h" diff --git a/src/field_fadetransition.c b/src/field_fadetransition.c index d1890013a..d95177821 100644 --- a/src/field_fadetransition.c +++ b/src/field_fadetransition.c @@ -15,7 +15,7 @@ #include "map_obj_lock.h" #include "metatile_behavior.h" #include "palette.h" -#include "rom4.h" +#include "overworld.h" #include "script.h" #include "songs.h" #include "sound.h" diff --git a/src/field_map_obj.c b/src/field_map_obj.c index b8dce3dc2..a453fd2c1 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -11,7 +11,7 @@ #include "fieldmap.h" #include "palette.h" #include "rng.h" -#include "rom4.h" +#include "overworld.h" #include "sprite.h" #include "metatile_behavior.h" #include "map_constants.h" diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index e7636e57c..5d06e5fb1 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -14,7 +14,7 @@ #include "metatile_behavior.h" #include "party_menu.h" #include "rng.h" -#include "rom4.h" +#include "overworld.h" #include "rotating_gate.h" #include "script.h" #include "songs.h" diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index c6a442f39..dedd80237 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -3,7 +3,7 @@ #include "field_camera.h" #include "menu.h" #include "palette.h" -#include "rom4.h" +#include "overworld.h" #include "script.h" #include "task.h" #include "text.h" diff --git a/src/field_special_scene.c b/src/field_special_scene.c index c9b7ee363..d118fe2ec 100644 --- a/src/field_special_scene.c +++ b/src/field_special_scene.c @@ -8,7 +8,7 @@ #include "fieldmap.h" #include "main.h" #include "palette.h" -#include "rom4.h" +#include "overworld.h" #include "script.h" #include "script_movement.h" #include "songs.h" diff --git a/src/field_specials.c b/src/field_specials.c index 000992ffe..66f945cf8 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -12,7 +12,7 @@ #include "field_player_avatar.h" #include "main.h" #include "map_constants.h" -#include "rom4.h" +#include "overworld.h" #include "script.h" #include "songs.h" #include "string_util.h" diff --git a/src/field_tasks.c b/src/field_tasks.c index d8c07b67d..2be54f923 100644 --- a/src/field_tasks.c +++ b/src/field_tasks.c @@ -10,7 +10,7 @@ #include "item.h" #include "items.h" #include "event_data.h" -#include "rom4.h" +#include "overworld.h" #include "clock.h" #include "script.h" #include "field_special_scene.h" diff --git a/src/fieldmap.c b/src/fieldmap.c index af1d5f6b6..3ad190a4b 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -1,7 +1,7 @@ #include "global.h" #include "fieldmap.h" #include "palette.h" -#include "rom4.h" +#include "overworld.h" #include "script.h" #include "secret_base.h" #include "tv.h" diff --git a/src/fldeff_cut.c b/src/fldeff_cut.c index edc1b578c..1bcb3843d 100644 --- a/src/fldeff_cut.c +++ b/src/fldeff_cut.c @@ -8,7 +8,7 @@ #include "metatile_behavior.h" #include "metatile_behaviors.h" #include "pokemon_menu.h" -#include "rom4.h" +#include "overworld.h" #include "rom6.h" #include "script.h" #include "songs.h" diff --git a/src/fldeff_flash.c b/src/fldeff_flash.c index c965d3f64..1ee8a8f05 100644 --- a/src/fldeff_flash.c +++ b/src/fldeff_flash.c @@ -4,7 +4,7 @@ #include "main.h" #include "palette.h" #include "pokemon_menu.h" -#include "rom4.h" +#include "overworld.h" #include "rom6.h" #include "script.h" #include "songs.h" diff --git a/src/fldeff_teleport.c b/src/fldeff_teleport.c index 3835d9eb6..e1576c5ef 100644 --- a/src/fldeff_teleport.c +++ b/src/fldeff_teleport.c @@ -3,7 +3,7 @@ #include "field_effect.h" #include "field_player_avatar.h" #include "pokemon_menu.h" -#include "rom4.h" +#include "overworld.h" #include "rom6.h" #include "task.h" diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index 78909e289..10c999ef3 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -11,7 +11,7 @@ #include "menu.h" #include "save.h" #include "species.h" -#include "rom4.h" +#include "overworld.h" #include "m4a.h" #include "data2.h" #include "decompress.h" diff --git a/src/hof_pc.c b/src/hof_pc.c index 83d39a9b5..aeeb7fe17 100644 --- a/src/hof_pc.c +++ b/src/hof_pc.c @@ -2,7 +2,7 @@ #include "hall_of_fame.h" #include "main.h" #include "palette.h" -#include "rom4.h" +#include "overworld.h" #include "script.h" #include "script_menu.h" #include "task.h" diff --git a/src/item_menu.c b/src/item_menu.c index 6c7c643ab..891eb135f 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -23,7 +23,7 @@ #include "party_menu.h" #include "player_pc.h" #include "pokemon_menu.h" -#include "rom4.h" +#include "overworld.h" #include "script.h" #include "songs.h" #include "sound.h" diff --git a/src/item_use.c b/src/item_use.c index c5fd990d2..0d78d8d9a 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -26,7 +26,7 @@ #include "pokeblock.h" #include "pokemon_item_effect.h" #include "pokemon_menu.h" -#include "rom4.h" +#include "overworld.h" #include "rom_8094928.h" #include "script.h" #include "songs.h" diff --git a/src/learn_move.c b/src/learn_move.c index 51de68171..33252c66b 100644 --- a/src/learn_move.c +++ b/src/learn_move.c @@ -6,7 +6,7 @@ #include "menu_cursor.h" #include "palette.h" #include "pokemon.h" -#include "rom4.h" +#include "overworld.h" #include "script.h" #include "songs.h" #include "sound.h" diff --git a/src/load_save.c b/src/load_save.c index 730aea2b8..8424b1121 100644 --- a/src/load_save.c +++ b/src/load_save.c @@ -3,7 +3,7 @@ #include "load_save.h" #include "main.h" #include "pokemon.h" -#include "rom4.h" +#include "overworld.h" extern u8 gPlayerPartyCount; diff --git a/src/mail.c b/src/mail.c index fb9251a5d..c5dd119e3 100644 --- a/src/mail.c +++ b/src/mail.c @@ -8,7 +8,7 @@ #include "name_string_util.h" #include "palette.h" #include "pokemon_icon.h" -#include "rom4.h" +#include "overworld.h" #include "sprite.h" #include "string_util.h" #include "strings2.h" diff --git a/src/main.c b/src/main.c index afaa0e77a..d7c11b6c8 100644 --- a/src/main.c +++ b/src/main.c @@ -9,7 +9,7 @@ #include "play_time.h" #include "rng.h" #include "rom3.h" -#include "rom4.h" +#include "overworld.h" #include "rtc.h" #include "siirtc.h" #include "sound.h" diff --git a/src/main_menu.c b/src/main_menu.c index f4e7a3247..e0af86f3d 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -10,7 +10,7 @@ #include "option_menu.h" #include "palette.h" #include "pokeball.h" -#include "rom4.h" +#include "overworld.h" #include "rtc.h" #include "save_menu_util.h" #include "songs.h" diff --git a/src/matsuda_debug_menu.c b/src/matsuda_debug_menu.c index 3665cabd8..c7d81f502 100644 --- a/src/matsuda_debug_menu.c +++ b/src/matsuda_debug_menu.c @@ -8,7 +8,7 @@ #include "main.h" #include "menu.h" #include "palette.h" -#include "rom4.h" +#include "overworld.h" #include "sprite.h" #include "start_menu.h" #include "string_util.h" diff --git a/src/mauville_man.c b/src/mauville_man.c index 4a77717f1..33bc39648 100644 --- a/src/mauville_man.c +++ b/src/mauville_man.c @@ -6,7 +6,7 @@ #include "field_message_box.h" #include "m4a.h" #include "menu.h" -#include "rom4.h" +#include "overworld.h" #include "rng.h" #include "script.h" #include "songs.h" diff --git a/src/menu_helpers.c b/src/menu_helpers.c index 9915d67ac..eb00e72da 100644 --- a/src/menu_helpers.c +++ b/src/menu_helpers.c @@ -7,7 +7,7 @@ #include "map_constants.h" #include "menu.h" #include "menu_helpers.h" -#include "rom4.h" +#include "overworld.h" #include "songs.h" #include "sound.h" #include "sprite.h" diff --git a/src/new_game.c b/src/new_game.c index 46df14acd..3f9e9f5a1 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -20,7 +20,7 @@ #include "pokemon_storage_system.h" #include "rng.h" #include "roamer.h" -#include "rom4.h" +#include "overworld.h" #include "rtc.h" #include "script.h" #include "secret_base.h" diff --git a/src/overworld.c b/src/overworld.c new file mode 100644 index 000000000..119b25a79 --- /dev/null +++ b/src/overworld.c @@ -0,0 +1,2587 @@ +#include "global.h" +#include "overworld.h" +#include "battle_setup.h" +#include "berry.h" +#include "cable_club.h" +#include "clock.h" +#include "event_data.h" +#include "field_camera.h" +#include "field_control_avatar.h" +#include "field_effect.h" +#include "field_fadetransition.h" +#include "field_ground_effect.h" +#include "field_map_obj.h" +#include "field_map_obj_helpers.h" +#include "field_message_box.h" +#include "field_player_avatar.h" +#include "field_screen_effect.h" +#include "field_special_scene.h" +#include "field_specials.h" +#include "field_tasks.h" +#include "field_weather.h" +#include "fieldmap.h" +#include "fldeff_flash.h" +#include "heal_location.h" +#include "link.h" +#include "load_save.h" +#include "main.h" +#include "map_constants.h" +#include "map_name_popup.h" +#include "menu.h" +#include "metatile_behavior.h" +#include "new_game.h" +#include "palette.h" +#include "play_time.h" +#include "rng.h" +#include "roamer.h" +#include "rotating_gate.h" +#include "safari_zone.h" +#include "script.h" +#include "script_pokemon_80C4.h" +#include "secret_base.h" +#include "songs.h" +#include "sound.h" +#include "species.h" +#include "start_menu.h" +#include "task.h" +#include "tileset_anim.h" +#include "time_events.h" +#include "tv.h" +#include "unknown_task.h" +#include "wild_encounter.h" + +#ifdef SAPPHIRE +#define LEGENDARY_MUSIC BGM_OOAME // Heavy Rain +#else +#define LEGENDARY_MUSIC BGM_HIDERI // Drought +#endif + +struct UnkTVStruct +{ + u32 tv_field_0; + u32 tv_field_4; +}; + +EWRAM_DATA struct WarpData gUnknown_020297F0 = {0}; +EWRAM_DATA struct WarpData gUnknown_020297F8 = {0}; +EWRAM_DATA struct WarpData gUnknown_02029800 = {0}; +EWRAM_DATA struct WarpData gUnknown_02029808 = {0}; +EWRAM_DATA struct UnkPlayerStruct gUnknown_02029810 = {0}; +EWRAM_DATA static u16 sAmbientCrySpecies = 0; +EWRAM_DATA static bool8 sIsAmbientCryWaterMon = FALSE; +EWRAM_DATA struct LinkPlayerMapObject gLinkPlayerMapObjects[4] = {0}; + +static u8 gUnknown_03000580[4]; +static u16 (*gUnknown_03000584)(u32); +static u8 gUnknown_03000588; + +u16 word_3004858; +void (*gFieldCallback)(void); +u8 gUnknown_03004860; +u8 gFieldLinkPlayerCount; + +extern u16 gUnknown_03004898; +extern u16 gUnknown_0300489C; + +extern u8 S_WhiteOut[]; +extern u8 gUnknown_0819FC9F[]; +extern u8 SingleBattleColosseum_EventScript_1A436F[]; +extern u8 SingleBattleColosseum_EventScript_1A4379[]; +extern u8 DoubleBattleColosseum_EventScript_1A4383[]; +extern u8 DoubleBattleColosseum_EventScript_1A439E[]; +extern u8 DoubleBattleColosseum_EventScript_1A43B9[]; +extern u8 DoubleBattleColosseum_EventScript_1A43D4[]; +extern u8 TradeCenter_EventScript_1A43F0[]; +extern u8 TradeCenter_EventScript_1A43FA[]; +extern u8 RecordCorner_EventScript_1A4418[]; +extern u8 RecordCorner_EventScript_1A442D[]; +extern u8 RecordCorner_EventScript_1A4442[]; +extern u8 RecordCorner_EventScript_1A4457[]; +extern u8 TradeRoom_ReadTrainerCard1[]; +extern u8 TradeRoom_ReadTrainerCard2[]; +extern u8 TradeRoom_TooBusyToNotice[]; +extern u8 TradeRoom_PromptToCancelLink[]; +extern u8 TradeRoom_TerminateLink[]; +extern u8 gUnknown_081A4508[]; + +extern u8 (*gUnknown_082166A0[])(struct LinkPlayerMapObject *, struct MapObject *, u8); +extern u8 (*gUnknown_082166AC[])(struct LinkPlayerMapObject *, struct MapObject *, u8); +extern void (*gUnknown_082166D8[])(struct LinkPlayerMapObject *, struct MapObject *); + +extern struct MapData * const gMapAttributes[]; +extern struct MapHeader * const * const gMapGroups[]; +extern const struct WarpData gDummyWarpData; +extern s32 gMaxFlashLevel; +extern u32 gUnknown_08216694[]; + +static void DoWhiteOut(void) +{ + ScriptContext2_RunNewScript(S_WhiteOut); + gSaveBlock1.money /= 2; + HealPlayerParty(); + sub_8053050(); + sub_8053570(); + warp_in(); +} + +void flag_var_implications_of_teleport_(void) +{ + player_avatar_init_params_reset(); + FlagReset(SYS_CYCLING_ROAD); + FlagReset(SYS_CRUISE_MODE); + FlagReset(SYS_SAFARI_MODE); + FlagReset(SYS_USE_STRENGTH); + FlagReset(SYS_USE_FLASH); +} + +void Overworld_ResetStateAfterTeleport(void) +{ + player_avatar_init_params_reset(); + FlagReset(SYS_CYCLING_ROAD); + FlagReset(SYS_CRUISE_MODE); + FlagReset(SYS_SAFARI_MODE); + FlagReset(SYS_USE_STRENGTH); + FlagReset(SYS_USE_FLASH); + ScriptContext2_RunNewScript(gUnknown_0819FC9F); +} + +void sub_8053014(void) +{ + player_avatar_init_params_reset(); + FlagReset(SYS_CYCLING_ROAD); + FlagReset(SYS_CRUISE_MODE); + FlagReset(SYS_SAFARI_MODE); + FlagReset(SYS_USE_STRENGTH); + FlagReset(SYS_USE_FLASH); +} + +void sub_8053050(void) +{ + player_avatar_init_params_reset(); + FlagReset(SYS_CYCLING_ROAD); + FlagReset(SYS_CRUISE_MODE); + FlagReset(SYS_SAFARI_MODE); + FlagReset(SYS_USE_STRENGTH); + FlagReset(SYS_USE_FLASH); +} + +void sub_805308C(void) +{ + FlagReset(SYS_SAFARI_MODE); + ChooseAmbientCrySpecies(); + ResetCyclingRoadChallengeData(); + UpdateLocationHistoryForRoamer(); + RoamerMoveToOtherLocationSet(); +} + +void ResetGameStats(void) +{ + s32 i; + + for (i = 0; i < NUM_GAME_STATS; i++) + gSaveBlock1.gameStats[i] = 0; +} + +void IncrementGameStat(u8 index) +{ + if (index < NUM_GAME_STATS) + { + if (gSaveBlock1.gameStats[index] < 0xFFFFFF) + gSaveBlock1.gameStats[index]++; + else + gSaveBlock1.gameStats[index] = 0xFFFFFF; + } +} + +u32 GetGameStat(u8 index) +{ + if (index >= NUM_GAME_STATS) + return 0; + + return gSaveBlock1.gameStats[index]; +} + +void SetGameStat(u8 index, u32 value) +{ + if (index < NUM_GAME_STATS) + gSaveBlock1.gameStats[index] = value; +} + +void sub_8053154(void) +{ + CpuFill32(0, gSaveBlock1.mapObjectTemplates, sizeof(gSaveBlock1.mapObjectTemplates)); + CpuCopy32(gMapHeader.events->mapObjects, + gSaveBlock1.mapObjectTemplates, + gMapHeader.events->mapObjectCount * sizeof(struct MapObjectTemplate)); +} + +static void LoadSaveblockMapObjScripts(void) +{ + struct MapObjectTemplate *mapObjectTemplates = gSaveBlock1.mapObjectTemplates; + s32 i; + + for (i = 0; i < 64; i++) + mapObjectTemplates[i].script = gMapHeader.events->mapObjects[i].script; +} + +void Overworld_SaveMapObjCoords(u8 localId, s16 x, s16 y) +{ + s32 i; + for (i = 0; i < 64; i++) + { + struct MapObjectTemplate *mapObjectTemplate = &gSaveBlock1.mapObjectTemplates[i]; + if (mapObjectTemplate->localId == localId) + { + mapObjectTemplate->x = x; + mapObjectTemplate->y = y; + return; + } + } +} + +void Overworld_SaveMapObjMovementType(u8 localId, u8 movementType) +{ + s32 i; + for (i = 0; i < 64; i++) + { + struct MapObjectTemplate *mapObjectTemplate = &gSaveBlock1.mapObjectTemplates[i]; + if (mapObjectTemplate->localId == localId) + { + mapObjectTemplate->movementType = movementType; + return; + } + } +} + +static void mapdata_load_assets_to_gpu_and_full_redraw(void) +{ + move_tilemap_camera_to_upper_left_corner(); + copy_map_tileset1_tileset2_to_vram(gMapHeader.mapData); + apply_map_tileset1_tileset2_palette(gMapHeader.mapData); + DrawWholeMapView(); + cur_mapheader_run_tileset_funcs_after_some_cpuset(); +} + +static struct MapData *get_mapdata_header(void) +{ + u16 mapDataId = gSaveBlock1.mapDataId; + if (mapDataId) + return gMapAttributes[mapDataId - 1]; + return NULL; +} + +static void warp_shift(void) +{ + gUnknown_020297F0 = gSaveBlock1.location; + gSaveBlock1.location = gUnknown_020297F8; + gUnknown_02029800 = gDummyWarpData; + gUnknown_02029808 = gDummyWarpData; +} + +static void warp_set(struct WarpData *warp, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y) +{ + warp->mapGroup = mapGroup; + warp->mapNum = mapNum; + warp->warpId = warpId; + warp->x = x; + warp->y = y; +} + +static bool32 warp_data_is_not_neg_1(struct WarpData *warp) +{ + if (warp->mapGroup != -1) + return FALSE; + if (warp->mapNum != -1) + return FALSE; + if (warp->warpId != -1) + return FALSE; + if (warp->x != -1) + return FALSE; + if (warp->y != -1) + return FALSE; + return TRUE; +} + +struct MapHeader *const Overworld_GetMapHeaderByGroupAndId(u16 mapGroup, u16 mapNum) +{ + return gMapGroups[mapGroup][mapNum]; +} + +struct MapHeader *const warp1_get_mapheader(void) +{ + return Overworld_GetMapHeaderByGroupAndId(gUnknown_020297F8.mapGroup, gUnknown_020297F8.mapNum); +} + +static void set_current_map_header_from_sav1_save_old_name(void) +{ + gMapHeader = *Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum); + gSaveBlock1.mapDataId = gMapHeader.mapDataId; + gMapHeader.mapData = get_mapdata_header(); +} + +static void LoadSaveblockMapHeader(void) +{ + gMapHeader = *Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum); + gMapHeader.mapData = get_mapdata_header(); +} + +void sub_80533CC(void) +{ + if (gSaveBlock1.location.warpId >= 0 && gSaveBlock1.location.warpId < gMapHeader.events->warpCount) + { + gSaveBlock1.pos.x = gMapHeader.events->warps[gSaveBlock1.location.warpId].x; + gSaveBlock1.pos.y = gMapHeader.events->warps[gSaveBlock1.location.warpId].y; + } + else if (gSaveBlock1.location.x >= 0 && gSaveBlock1.location.y >= 0) + { + gSaveBlock1.pos.x = gSaveBlock1.location.x; + gSaveBlock1.pos.y = gSaveBlock1.location.y; + } + else + { + gSaveBlock1.pos.x = gMapHeader.mapData->width / 2; + gSaveBlock1.pos.y = gMapHeader.mapData->height / 2; + } +} + +void warp_in(void) +{ + warp_shift(); + set_current_map_header_from_sav1_save_old_name(); + sub_80533CC(); +} + +void warp1_set(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y) +{ + warp_set(&gUnknown_020297F8, mapGroup, mapNum, warpId, x, y); +} + +void warp1_set_2(s8 mapGroup, s8 mapNum, s8 warpId) +{ + warp1_set(mapGroup, mapNum, warpId, -1, -1); +} + +void saved_warp2_set(int unused, s8 mapGroup, s8 mapNum, s8 warpId) +{ + warp_set(&gSaveBlock1.warp2, mapGroup, mapNum, warpId, gSaveBlock1.pos.x, gSaveBlock1.pos.y); +} + +void saved_warp2_set_2(int unused, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y) +{ + warp_set(&gSaveBlock1.warp2, mapGroup, mapNum, warpId, x, y); +} + +void copy_saved_warp2_bank_and_enter_x_to_warp1(u8 unused) +{ + gUnknown_020297F8 = gSaveBlock1.warp2; +} + +void sub_8053538(u8 a1) +{ + const struct HealLocation *warp = GetHealLocation(a1); + if (warp) + warp1_set(warp->group, warp->map, -1, warp->x, warp->y); +} + +void sub_8053570(void) +{ + gUnknown_020297F8 = gSaveBlock1.warp3; +} + +void sub_8053588(u8 a1) +{ + const struct HealLocation *warp = GetHealLocation(a1); + if (warp) + warp_set(&gSaveBlock1.warp3, warp->group, warp->map, -1, warp->x, warp->y); +} + +void sub_80535C4(s16 a1, s16 a2) +{ + u8 v4 = Overworld_GetMapTypeOfSaveblockLocation(); + u8 v5 = GetMapTypeByGroupAndId(gUnknown_020297F8.mapGroup, gUnknown_020297F8.mapNum); + if (is_map_type_1_2_3_5_or_6(v4) && is_map_type_1_2_3_5_or_6(v5) != TRUE) + sub_805363C(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, -1, a1 - 7, a2 - 6); +} + +void sub_805363C(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y) +{ + warp_set(&gSaveBlock1.warp4, mapGroup, mapNum, warpId, x, y); +} + +void sub_8053678(void) +{ + gUnknown_020297F8 = gSaveBlock1.warp4; +} + +void sub_8053690(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y) +{ + warp_set(&gUnknown_02029800, mapGroup, mapNum, warpId, x, y); +} + +void warp1_set_to_warp2(void) +{ + gUnknown_020297F8 = gUnknown_02029800; +} + +void sub_80536E4(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y) +{ + warp_set(&gUnknown_02029808, mapGroup, mapNum, warpId, x, y); +} + +void sub_8053720(s16 x, s16 y) +{ + if (warp_data_is_not_neg_1(&gUnknown_02029808) == TRUE) + { + gUnknown_020297F8 = gUnknown_020297F0; + } + else + { + warp1_set(gUnknown_02029808.mapGroup, gUnknown_02029808.mapNum, -1, x, y); + } +} + +void sub_8053778(void) +{ + gUnknown_020297F8 = gSaveBlock1.warp1; +} + +void unref_sub_8053790(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y) +{ + warp_set(&gSaveBlock1.warp1, mapGroup, mapNum, warpId, x, y); +} + +void sub_80537CC(u8 a1) +{ + const struct HealLocation *warp = GetHealLocation(a1); + if (warp) + warp_set(&gSaveBlock1.warp1, warp->group, warp->map, -1, warp->x, warp->y); +} + +void gpu_sync_bg_hide() +{ + gSaveBlock1.warp1 = gSaveBlock1.warp2; +} + +struct MapConnection *sub_8053818(u8 dir) +{ + s32 i; + s32 count = gMapHeader.connections->count; + struct MapConnection *connection = gMapHeader.connections->connections; + + if (connection == NULL) + return NULL; + + for(i = 0; i < count; i++, connection++) + if (connection->direction == dir) + return connection; + + return NULL; +} + +bool8 sub_8053850(u8 dir, u16 x, u16 y) +{ + struct MapConnection *connection = sub_8053818(dir); + if (connection != NULL) + { + warp1_set(connection->mapGroup, connection->mapNum, -1, x, y); + } + else + { + mapheader_run_script_with_tag_x6(); + if (warp_data_is_not_neg_1(&gUnknown_02029800)) + return FALSE; + warp1_set_to_warp2(); + } + return TRUE; +} + +bool8 sub_80538B0(u16 x, u16 y) +{ + return sub_8053850(CONNECTION_EMERGE, x, y); +} + +bool8 sub_80538D0(u16 x, u16 y) +{ + return sub_8053850(CONNECTION_DIVE, x, y); +} + +void sub_80538F0(u8 mapGroup, u8 mapNum) +{ + s32 i; + + warp1_set(mapGroup, mapNum, -1, -1, -1); + sub_8053F0C(); + warp_shift(); + set_current_map_header_from_sav1_save_old_name(); + sub_8053154(); + ClearTempFieldEventData(); + ResetCyclingRoadChallengeData(); + prev_quest_postbuffer_cursor_backup_reset(); + sub_8082BD0(mapGroup, mapNum); + DoTimeBasedEvents(); + sub_80806E4(); + ChooseAmbientCrySpecies(); + SetDefaultFlashLevel(); + sav1_reset_battle_music_maybe(); + mapheader_run_script_with_tag_x3(); + not_trainer_hill_battle_pyramid(); + sub_8056D38(gMapHeader.mapData); + apply_map_tileset2_palette(gMapHeader.mapData); + + for (i = 6; i < 12; i++) + sub_807D874(i); + + sub_8072ED0(); + UpdateLocationHistoryForRoamer(); + RoamerMove(); + DoCurrentWeather(); + ResetFieldTasksArgs(); + mapheader_run_script_with_tag_x5(); + ShowMapNamePopup(); +} + +void sub_8053994(u32 a1) +{ + bool8 v2; + bool8 v3; + + set_current_map_header_from_sav1_save_old_name(); + sub_8053154(); + v2 = is_map_type_1_2_3_5_or_6(gMapHeader.mapType); + v3 = Overworld_MapTypeIsIndoors(gMapHeader.mapType); + ClearTempFieldEventData(); + ResetCyclingRoadChallengeData(); + prev_quest_postbuffer_cursor_backup_reset(); + sub_8082BD0(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum); + if (a1 != 1) + DoTimeBasedEvents(); + sub_80806E4(); + ChooseAmbientCrySpecies(); + if (v2) + FlagReset(SYS_USE_FLASH); + SetDefaultFlashLevel(); + sav1_reset_battle_music_maybe(); + mapheader_run_script_with_tag_x3(); + UpdateLocationHistoryForRoamer(); + RoamerMoveToOtherLocationSet(); + not_trainer_hill_battle_pyramid(); + if (a1 != 1 && v3) + { + UpdateTVScreensOnMap(gUnknown_03004870.width, gUnknown_03004870.height); + sub_80BBCCC(1); + } +} + +void player_avatar_init_params_reset(void) +{ + gUnknown_02029810.player_field_1 = 1; + gUnknown_02029810.player_field_0 = 1; +} + +void walkrun_find_lowest_active_bit_in_bitfield(void) +{ + gUnknown_02029810.player_field_1 = player_get_direction_lower_nybble(); + + if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE)) + gUnknown_02029810.player_field_0 = 2; + else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_ACRO_BIKE)) + gUnknown_02029810.player_field_0 = 4; + else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING)) + gUnknown_02029810.player_field_0 = 8; + else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_4)) + gUnknown_02029810.player_field_0 = 16; + else + gUnknown_02029810.player_field_0 = 1; +} + +struct UnkPlayerStruct *sub_8053AA8(void) +{ + struct UnkPlayerStruct playerStruct; + u8 mapType = Overworld_GetMapTypeOfSaveblockLocation(); + u16 v2 = cur_mapdata_block_role_at_screen_center_acc_to_sav1(); + u8 v4 = sub_8053B00(&gUnknown_02029810, v2, mapType); + playerStruct.player_field_0 = v4; + playerStruct.player_field_1 = sub_8053B60(&gUnknown_02029810, v4, v2, mapType); + gUnknown_02029810 = playerStruct; + return &gUnknown_02029810; +} + +u8 sub_8053B00(struct UnkPlayerStruct *playerStruct, u16 a2, u8 a3) +{ + if (a3 != 8 && FlagGet(SYS_CRUISE_MODE)) + return 1; + if (a3 == 5) + return 16; + if (MetatileBehavior_IsSurfableWaterOrUnderwater(a2) == 1) + return 8; + if (Overworld_IsBikeAllowedOnCurrentMap() != TRUE) + return 1; + if (playerStruct->player_field_0 == 2) + return 2; + if (playerStruct->player_field_0 != 4) + return 1; + return 4; +} + +u8 sub_8053B60(struct UnkPlayerStruct *playerStruct, u8 a2, u16 a3, u8 a4) +{ + if (FlagGet(SYS_CRUISE_MODE) && a4 == 6) + return 4; + if (MetatileBehavior_IsDeepSouthWarp(a3) == TRUE) + return 2; + if (MetatileBehavior_IsNonAnimDoor(a3) == TRUE || MetatileBehavior_IsDoor(a3) == TRUE) + return 1; + if (MetatileBehavior_IsSouthArrowWarp(a3) == TRUE) + return 2; + if (MetatileBehavior_IsNorthArrowWarp(a3) == TRUE) + return 1; + if (MetatileBehavior_IsWestArrowWarp(a3) == TRUE) + return 4; + if (MetatileBehavior_IsEastArrowWarp(a3) == TRUE) + return 3; + if ((playerStruct->player_field_0 == 16 && a2 == 8) + || (playerStruct->player_field_0 == 8 && a2 == 16)) + return playerStruct->player_field_1; + if (MetatileBehavior_IsLadder(a3) == TRUE) + return playerStruct->player_field_1; + return 1; +} + +u16 cur_mapdata_block_role_at_screen_center_acc_to_sav1(void) +{ + return MapGridGetMetatileBehaviorAt(gSaveBlock1.pos.x + 7, gSaveBlock1.pos.y + 7); +} + +bool32 Overworld_IsBikeAllowedOnCurrentMap(void) +{ + // is player in cycling road entrance? + if (gSaveBlock1.location.mapGroup == MAP_GROUP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE + && (gSaveBlock1.location.mapNum == MAP_ID_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE + || gSaveBlock1.location.mapNum == MAP_ID_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE)) + return TRUE; + + // is player indoor, in a secret base, or underwater? + if (gMapHeader.mapType == MAP_TYPE_INDOOR) + return FALSE; + if (gMapHeader.mapType == MAP_TYPE_SECRET_BASE) + return FALSE; + if (gMapHeader.mapType == MAP_TYPE_UNDERWATER) + return FALSE; + + // Thou shalt not bike on the sacred resting grounds of Kyogre/Groudon. + if (gSaveBlock1.location.mapGroup == MAP_GROUP_SEAFLOOR_CAVERN_ROOM9 + && gSaveBlock1.location.mapNum == MAP_ID_SEAFLOOR_CAVERN_ROOM9) + return FALSE; + if (gSaveBlock1.location.mapGroup == MAP_GROUP_CAVE_OF_ORIGIN_B4F + && gSaveBlock1.location.mapNum == MAP_ID_CAVE_OF_ORIGIN_B4F) + return FALSE; + + return TRUE; +} + +void SetDefaultFlashLevel(void) +{ + if (!gMapHeader.cave) + gSaveBlock1.flashLevel = 0; + else if (FlagGet(SYS_USE_FLASH)) + gSaveBlock1.flashLevel = 1; + else + gSaveBlock1.flashLevel = gMaxFlashLevel; +} + +void Overworld_SetFlashLevel(s32 flashLevel) +{ + if (flashLevel < 0 || flashLevel > gMaxFlashLevel) + flashLevel = 0; + gSaveBlock1.flashLevel = flashLevel; +} + +u8 Overworld_GetFlashLevel(void) +{ + return gSaveBlock1.flashLevel; +} + +void sub_8053D14(u16 mapDataId) +{ + gSaveBlock1.mapDataId = mapDataId; + gMapHeader.mapData = get_mapdata_header(); +} + +static bool16 ShouldLegendaryMusicPlayAtLocation(struct WarpData *warp) +{ + if (!FlagGet(SYS_WEATHER_CTRL)) + return FALSE; + if (warp->mapGroup == 0) + { + switch (warp->mapNum) + { + case MAP_ID_LILYCOVE_CITY: + case MAP_ID_MOSSDEEP_CITY: + case MAP_ID_SOOTOPOLIS_CITY: + case MAP_ID_EVER_GRANDE_CITY: + return TRUE; + case MAP_ID_ROUTE124: + case MAP_ID_ROUTE125: + case MAP_ID_ROUTE126: + case MAP_ID_ROUTE127: + case MAP_ID_ROUTE128: + return TRUE; + } + } + return FALSE; +} + +static bool16 IsInfiltratedWeatherInstitute(struct WarpData *warp) +{ + if (VarGet(VAR_WEATHER_INSTITUTE_CLEARED)) + return FALSE; + if (warp->mapGroup != MAP_GROUP_ROUTE119_WEATHER_INSTITUTE_1F) + return FALSE; + if (warp->mapNum == MAP_ID_ROUTE119_WEATHER_INSTITUTE_1F + || warp->mapNum == MAP_ID_ROUTE119_WEATHER_INSTITUTE_2F) + return TRUE; + return FALSE; +} + +static u16 GetLocationMusic(struct WarpData *warp) +{ + if (ShouldLegendaryMusicPlayAtLocation(warp) == TRUE) + return LEGENDARY_MUSIC; + else if (IsInfiltratedWeatherInstitute(warp) == TRUE) + return BGM_TOZAN; + else + return Overworld_GetMapHeaderByGroupAndId(warp->mapGroup, warp->mapNum)->music; +} + +u16 sav1_map_get_music(void) +{ + u16 music; + + if (gSaveBlock1.location.mapGroup == MAP_GROUP_ROUTE111 + && gSaveBlock1.location.mapNum == MAP_ID_ROUTE111 + && GetSav1Weather() == 8) + return BGM_ASHROAD; + + music = GetLocationMusic(&gSaveBlock1.location); + if (music != 0x7FFF) + { + return music; + } + else + { + if (gSaveBlock1.pos.x < 24) + return BGM_DOORO_X1; + else + return BGM_GRANROAD; + } +} + +u16 warp1_target_get_music(void) +{ + u16 music = GetLocationMusic(&gUnknown_020297F8); + if (music != 0x7FFF) + { + return music; + } + else + { + if (gSaveBlock1.location.mapGroup == MAP_GROUP_MAUVILLE_CITY + && gSaveBlock1.location.mapNum == MAP_ID_MAUVILLE_CITY) + return BGM_DOORO_X1; + else + return BGM_GRANROAD; + } +} + +void call_map_music_set_to_zero(void) +{ + ResetMapMusic(); +} + +void sub_8053E90(void) +{ + u16 music = sav1_map_get_music(); + + if (music != LEGENDARY_MUSIC) + { + if (gSaveBlock1.battleMusic) + music = gSaveBlock1.battleMusic; + else if (Overworld_GetMapTypeOfSaveblockLocation() == MAP_TYPE_UNDERWATER) + music = BGM_DEEPDEEP; + else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING)) + music = BGM_NAMINORI; + } + + if (music != GetCurrentMapMusic()) + PlayNewMapMusic(music); +} + +void sav1_set_battle_music_maybe(u16 songNum) +{ + gSaveBlock1.battleMusic = songNum; +} + +void sav1_reset_battle_music_maybe(void) +{ + gSaveBlock1.battleMusic = 0; +} + +void sub_8053F0C(void) +{ + if (FlagGet(SPECIAL_FLAG_1) != TRUE) + { + u16 newMusic = warp1_target_get_music(); + u16 currentMusic = GetCurrentMapMusic(); + if (newMusic != LEGENDARY_MUSIC) + { + if (currentMusic == BGM_DEEPDEEP || currentMusic == BGM_NAMINORI) + return; + if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING)) + newMusic = BGM_NAMINORI; + } + if (newMusic != currentMusic) + { + if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE)) + FadeOutAndFadeInNewMapMusic(newMusic, 4, 4); + else + FadeOutAndPlayNewMapMusic(newMusic, 8); + } + } +} + +void sub_8053F84(void) +{ + u16 currentMusic = GetCurrentMapMusic(); + if (currentMusic != sav1_map_get_music()) + FadeOutAndPlayNewMapMusic(sav1_map_get_music(), 8); +} + +void Overworld_ChangeMusicTo(u16 newMusic) +{ + u16 currentMusic = GetCurrentMapMusic(); + if (currentMusic != newMusic && currentMusic != LEGENDARY_MUSIC) + FadeOutAndPlayNewMapMusic(newMusic, 8); +} + +u8 GetMapMusicFadeoutSpeed(void) +{ + struct MapHeader *mapHeader = warp1_get_mapheader(); + if (Overworld_MapTypeIsIndoors(mapHeader->mapType) == TRUE) + return 2; + else + return 4; +} + +void sub_8053FF8(void) +{ + u16 music = warp1_target_get_music(); + if (FlagGet(SPECIAL_FLAG_1) != TRUE && music != GetCurrentMapMusic()) + { + u8 speed = GetMapMusicFadeoutSpeed(); + FadeOutMapMusic(speed); + } +} + +bool8 sub_8054034(void) +{ + return IsNotWaitingForBGMStop(); +} + +void sub_8054044(void) +{ + FadeOutMapMusic(4); +} + +static void PlayAmbientCry(void) +{ + s16 x, y; + PlayerGetDestCoords(&x, &y); + if (sIsAmbientCryWaterMon != TRUE + || MetatileBehavior_IsSurfableWaterOrUnderwater(MapGridGetMetatileBehaviorAt(x, y))) + { + s8 pan = (Random() % 88) + 212; + s8 volume = (Random() % 30) + 50; + PlayCry2(sAmbientCrySpecies, pan, volume, 1); + } +} + +void UpdateAmbientCry(s16 *state, u16 *delayCounter) +{ + switch (*state) + { + case 0: + if (sAmbientCrySpecies == SPECIES_NONE) + *state = 4; + else + *state = 1; + break; + case 1: + *delayCounter = (Random() % 2400) + 1200; + *state = 3; + break; + case 2: + *delayCounter = (Random() % 1200) + 1200; + *state = 3; + break; + case 3: + (*delayCounter)--; + if (*delayCounter == 0) + { + PlayAmbientCry(); + *state = 2; + } + break; + case 4: + break; + } +} + +void ChooseAmbientCrySpecies(void) +{ + if ((gSaveBlock1.location.mapGroup == MAP_GROUP_ROUTE130 + && gSaveBlock1.location.mapNum == MAP_ID_ROUTE130) + && !IsMirageIslandPresent()) + { + // Only play water pokemon cries on this route + // when Mirage Island is not present + sIsAmbientCryWaterMon = TRUE; + sAmbientCrySpecies = GetLocalWaterMon(); + } + else + { + sAmbientCrySpecies = GetLocalWildMon(&sIsAmbientCryWaterMon); + } +} + +u8 GetMapTypeByGroupAndId(s8 mapGroup, s8 mapNum) +{ + return Overworld_GetMapHeaderByGroupAndId(mapGroup, mapNum)->mapType; +} + +u8 GetMapTypeByWarpData(struct WarpData *warp) +{ + return GetMapTypeByGroupAndId(warp->mapGroup, warp->mapNum); +} + +u8 Overworld_GetMapTypeOfSaveblockLocation(void) +{ + return GetMapTypeByWarpData(&gSaveBlock1.location); +} + +u8 get_map_type_from_warp0(void) +{ + return GetMapTypeByWarpData(&gUnknown_020297F0); +} + +bool8 is_map_type_1_2_3_5_or_6(u8 mapType) +{ + if (mapType == MAP_TYPE_ROUTE + || mapType == MAP_TYPE_TOWN + || mapType == MAP_TYPE_UNDERWATER + || mapType == MAP_TYPE_CITY + || mapType == MAP_TYPE_6) + return TRUE; + else + return FALSE; +} + +bool8 Overworld_MapTypeAllowsTeleportAndFly(u8 mapType) +{ + if (mapType == MAP_TYPE_ROUTE + || mapType == MAP_TYPE_TOWN + || mapType == MAP_TYPE_6 + || mapType == MAP_TYPE_CITY) + return TRUE; + else + return FALSE; +} + +bool8 Overworld_MapTypeIsIndoors(u8 mapType) +{ + if (mapType == MAP_TYPE_INDOOR + || mapType == MAP_TYPE_SECRET_BASE) + return TRUE; + else + return FALSE; +} + +u8 unref_sub_8054260(void) +{ + return Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.warp2.mapGroup, gSaveBlock1.warp2.mapNum)->regionMapSectionId; +} + +u8 sav1_map_get_name(void) +{ + return Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum)->regionMapSectionId; +} + +u8 sav1_map_get_battletype(void) +{ + return Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum)->battleType; +} + +void ResetSafariZoneFlag_(void) +{ + ResetSafariZoneFlag(); +} + +bool32 is_c1_link_related_active(void) +{ + if (gMain.callback1 == sub_8055354) + return TRUE; + else + return FALSE; +} + +void c1_overworld_normal(u16 newKeys, u16 heldKeys) +{ + struct FieldInput inputStruct; + + sub_8059204(); + FieldClearPlayerInput(&inputStruct); + FieldGetPlayerInput(&inputStruct, newKeys, heldKeys); + if (!ScriptContext2_IsEnabled()) + { + if (sub_8068024(&inputStruct) == 1) + { + ScriptContext2_Enable(); + HideMapNamePopup(); + } + else + { + player_step(inputStruct.dpadDirection, newKeys, heldKeys); + } + } +} + +void c1_overworld(void) +{ + if (gMain.callback2 == c2_overworld) + c1_overworld_normal(gMain.newKeys, gMain.heldKeys); +} + +void OverworldBasic(void) +{ + ScriptContext2_RunScript(); + RunTasks(); + AnimateSprites(); + CameraUpdate(); + UpdateCameraPanning(); + BuildOamBuffer(); + UpdatePaletteFade(); + sub_8072EDC(); +} + +void CB2_OverworldBasic(void) +{ + OverworldBasic(); +} + +void c2_overworld(void) +{ + int fading = (gPaletteFade.active != 0); + if (fading) + SetVBlankCallback(NULL); + OverworldBasic(); + if (fading) + SetFieldVBlankCallback(); +} + +void set_callback1(MainCallback cb) +{ + gMain.callback1 = cb; +} + +void sub_80543DC(u16 (*a1)(u32)) +{ + gUnknown_03000584 = a1; +} + +void sub_80543E8(void) +{ + if (gFieldCallback) + gFieldCallback(); + else + mapldr_default(); + gFieldCallback = NULL; +} + +void CB2_NewGame(void) +{ + FieldClearVBlankHBlankCallbacks(); + StopMapMusic(); + ResetSafariZoneFlag_(); + NewGameInitData(); + player_avatar_init_params_reset(); + PlayTimeCounter_Start(); + ScriptContext1_Init(); + ScriptContext2_Disable(); + gFieldCallback = ExecuteTruckSequence; + do_load_map_stuff_loop(&gMain.state); + SetFieldVBlankCallback(); + set_callback1(c1_overworld); + SetMainCallback2(c2_overworld); +} + +void CB2_WhiteOut(void) +{ + u8 val; + gMain.state++; + if (gMain.state >= 120) + { + FieldClearVBlankHBlankCallbacks(); + StopMapMusic(); + ResetSafariZoneFlag_(); + DoWhiteOut(); + player_avatar_init_params_reset(); + ScriptContext1_Init(); + ScriptContext2_Disable(); + gFieldCallback = sub_8080B60; + val = 0; + do_load_map_stuff_loop(&val); + SetFieldVBlankCallback(); + set_callback1(c1_overworld); + SetMainCallback2(c2_overworld); + } +} + +void CB2_LoadMap(void) +{ + FieldClearVBlankHBlankCallbacks(); + ScriptContext1_Init(); + ScriptContext2_Disable(); + set_callback1(NULL); + SetMainCallback2(sub_810CC80); + gMain.savedCallback = CB2_LoadMap2; +} + +void CB2_LoadMap2(void) +{ + do_load_map_stuff_loop(&gMain.state); + SetFieldVBlankCallback(); + set_callback1(c1_overworld); + SetMainCallback2(c2_overworld); +} + +void sub_8054534(void) +{ + if (!gMain.state) + { + FieldClearVBlankHBlankCallbacks(); + ScriptContext1_Init(); + ScriptContext2_Disable(); + set_callback1(NULL); + } + if (sub_805493C(&gMain.state, 1)) + { + SetFieldVBlankCallback(); + set_callback1(c1_overworld); + SetMainCallback2(c2_overworld); + } +} + +void sub_8054588(void) +{ + FieldClearVBlankHBlankCallbacks(); + gFieldCallback = sub_8080AC4; + SetMainCallback2(c2_80567AC); +} + +void c2_80567AC(void) +{ + if (sub_805483C(&gMain.state)) + { + SetFieldVBlankCallback(); + set_callback1(sub_8055354); + sub_80543DC(sub_8055390); + SetMainCallback2(c2_overworld); + } +} + +void c2_exit_to_overworld_2_switch(void) +{ + if (is_c1_link_related_active() == TRUE) + { + SetMainCallback2(c2_exit_to_overworld_2_link); + } + else + { + FieldClearVBlankHBlankCallbacks(); + SetMainCallback2(c2_exit_to_overworld_2_local); + } +} + +void c2_exit_to_overworld_2_local(void) +{ + if (sub_8054A4C(&gMain.state)) + { + SetFieldVBlankCallback(); + SetMainCallback2(c2_overworld); + } +} + +void c2_exit_to_overworld_2_link(void) +{ + if (!sub_8055870() && sub_8054A9C(&gMain.state)) + SetMainCallback2(c2_overworld); +} + +void sub_805465C(void) +{ + FieldClearVBlankHBlankCallbacks(); + StopMapMusic(); + sub_8054F70(); + set_callback1(sub_8055354); + sub_80543DC(sub_8055390); + gFieldCallback = sub_8080A3C; + ScriptContext1_Init(); + ScriptContext2_Disable(); + c2_exit_to_overworld_2_switch(); +} + +void sub_805469C(void) +{ + FieldClearVBlankHBlankCallbacks(); + gFieldCallback = atk17_seteffectuser; + c2_exit_to_overworld_2_switch(); +} + +void sub_80546B8(void) +{ + FieldClearVBlankHBlankCallbacks(); + gFieldCallback = sub_80809B0; + c2_exit_to_overworld_2_switch(); +} + +void c2_exit_to_overworld_1_continue_scripts_restart_music(void) +{ + FieldClearVBlankHBlankCallbacks(); + gFieldCallback = sub_8080990; + c2_exit_to_overworld_2_switch(); +} + +void sub_80546F0(void) +{ + FieldClearVBlankHBlankCallbacks(); + gFieldCallback = sub_8080B60; + c2_exit_to_overworld_2_switch(); +} + +void sub_805470C(void) +{ + if (gMapHeader.flags == 1 && sub_80BBB24() == 1) + ShowMapNamePopup(); + sub_8080B60(); +} + +void CB2_ContinueSavedGame(void) +{ + FieldClearVBlankHBlankCallbacks(); + StopMapMusic(); + ResetSafariZoneFlag_(); + LoadSaveblockMapHeader(); + LoadSaveblockMapObjScripts(); + UnfreezeMapObjects(); + DoTimeBasedEvents(); + sub_805308C(); + sub_8055FC0(); + PlayTimeCounter_Start(); + ScriptContext1_Init(); + ScriptContext2_Disable(); + if (GetSecretBase2Field_9() == 1) + { + ClearSecretBase2Field_9(); + sub_8053778(); + warp_in(); + SetMainCallback2(CB2_LoadMap); + } + else + { + gFieldCallback = sub_805470C; + set_callback1(c1_overworld); + c2_exit_to_overworld_2_switch(); + } +} + +void FieldClearVBlankHBlankCallbacks(void) +{ + u16 savedIme = REG_IME; + REG_IME = 0; + REG_IE &= ~INTR_FLAG_HBLANK; + REG_IE |= INTR_FLAG_VBLANK; + REG_IME = savedIme; + SetVBlankCallback(NULL); + SetHBlankCallback(NULL); +} + +void SetFieldVBlankCallback(void) +{ + SetVBlankCallback(VBlankCB_Field); +} + +void VBlankCB_Field(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + sub_8089668(); + sub_8057A58(); + TransferPlttBuffer(); + sub_8072E74(); +} + +void sub_8054814(void) +{ + u8 val = Overworld_GetFlashLevel(); + if (val) + { + sub_80815E0(val); + sub_80895F8(gUnknown_08216694[0], gUnknown_08216694[1], gUnknown_08216694[2]); + } +} + +bool32 sub_805483C(u8 *a1) +{ + switch (*a1) + { + case 0: + FieldClearVBlankHBlankCallbacks(); + ScriptContext1_Init(); + ScriptContext2_Disable(); + sub_8054F70(); + sub_8054BA8(); + (*a1)++; + break; + case 1: + sub_8053994(1); + (*a1)++; + break; + case 2: + sub_8054D4C(1); + (*a1)++; + break; + case 3: + sub_8054E98(); + sub_8054D90(); + sub_8054EC8(); + sub_8054E60(); + (*a1)++; + break; + case 4: + sub_8054814(); + sub_8054C54(); + SetUpWindowConfig(&gWindowConfig_81E6C3C); + InitMenuWindow(&gWindowConfig_81E6CE4); + (*a1)++; + break; + case 5: + move_tilemap_camera_to_upper_left_corner(); + (*a1)++; + break; + case 6: + sub_8056D28(gMapHeader.mapData); + (*a1)++; + break; + case 7: + sub_8056D38(gMapHeader.mapData); + (*a1)++; + break; + case 8: + apply_map_tileset1_tileset2_palette(gMapHeader.mapData); + (*a1)++; + break; + case 9: + DrawWholeMapView(); + (*a1)++; + break; + case 10: + cur_mapheader_run_tileset_funcs_after_some_cpuset(); + (*a1)++; + break; + case 12: + sub_80543E8(); + (*a1)++; + break; + case 11: + (*a1)++; + break; + case 13: + return 1; + } + return 0; +} + +bool32 sub_805493C(u8 *a1, u32 a2) +{ + switch (*a1) + { + case 0: + FieldClearVBlankHBlankCallbacks(); + sub_8053994(a2); + (*a1)++; + break; + case 1: + sub_8054BA8(); + (*a1)++; + break; + case 2: + sub_8054D4C(a2); + (*a1)++; + break; + case 3: + mli4_mapscripts_and_other(); + sub_8054E34(); + (*a1)++; + break; + case 4: + sub_8054814(); + sub_8054C54(); + SetUpWindowConfig(&gWindowConfig_81E6C3C); + InitMenuWindow(&gWindowConfig_81E6CE4); + (*a1)++; + break; + case 5: + move_tilemap_camera_to_upper_left_corner(); + (*a1)++; + break; + case 6: + sub_8056D28(gMapHeader.mapData); + (*a1)++; + break; + case 7: + sub_8056D38(gMapHeader.mapData); + (*a1)++; + break; + case 8: + apply_map_tileset1_tileset2_palette(gMapHeader.mapData); + (*a1)++; + break; + case 9: + DrawWholeMapView(); + (*a1)++; + break; + case 10: + cur_mapheader_run_tileset_funcs_after_some_cpuset(); + (*a1)++; + break; + case 11: + if (gMapHeader.flags == 1 && sub_80BBB24() == 1) + ShowMapNamePopup(); + (*a1)++; + break; + case 12: + sub_80543E8(); + (*a1)++; + break; + case 13: + return 1; + } + return 0; +} + +bool32 sub_8054A4C(u8 *a1) +{ + switch (*a1) + { + case 0: + sub_8054BA8(); + sub_8054D4C(0); + sub_8054E20(); + sub_8054E34(); + (*a1)++; + break; + case 1: + sub_8054C2C(); + (*a1)++; + break; + case 2: + sub_80543E8(); + (*a1)++; + break; + case 3: + return 1; + } + return 0; +} + +bool32 sub_8054A9C(u8 *a1) +{ + switch (*a1) + { + case 0: + FieldClearVBlankHBlankCallbacks(); + sub_8054BA8(); + (*a1)++; + break; + case 1: + sub_8054D4C(1); + (*a1)++; + break; + case 2: + sub_8054F48(); + sub_8054E20(); + sub_8054E7C(); + (*a1)++; + break; + case 3: + sub_8054814(); + sub_8054C54(); + SetUpWindowConfig(&gWindowConfig_81E6C3C); + InitMenuWindow(&gWindowConfig_81E6CE4); + (*a1)++; + break; + case 4: + move_tilemap_camera_to_upper_left_corner(); + (*a1)++; + break; + case 5: + sub_8056D28(gMapHeader.mapData); + (*a1)++; + break; + case 6: + sub_8056D38(gMapHeader.mapData); + (*a1)++; + break; + case 7: + apply_map_tileset1_tileset2_palette(gMapHeader.mapData); + (*a1)++; + break; + case 8: + DrawWholeMapView(); + (*a1)++; + break; + case 9: + cur_mapheader_run_tileset_funcs_after_some_cpuset(); + (*a1)++; + break; + case 12: + sub_80543E8(); + (*a1)++; + break; + case 10: + case 11: + (*a1)++; + break; + case 13: + SetFieldVBlankCallback(); + (*a1)++; + return 1; + } + return 0; +} + +void do_load_map_stuff_loop(u8 *a1) +{ + while (!sub_805493C(a1, 0)) + ; +} + +void sub_8054BA8(void) +{ + u8 *addr; + u32 size; + + REG_DISPCNT = 0; + + remove_some_task(); + + DmaClear16(3, PLTT + 2, PLTT_SIZE - 2); + + addr = (void *)VRAM; + size = 0x18000; + while (1) + { + DmaFill16(3, 0, addr, 0x1000); + addr += 0x1000; + size -= 0x1000; + if (size <= 0x1000) + { + DmaFill16(3, 0, addr, size); + break; + } + } + + ResetOamRange(0, 128); + LoadOam(); +} + +void sub_8054C2C(void) +{ + sub_8054814(); + sub_8054C54(); + SetUpWindowConfig(&gWindowConfig_81E6C3C); + InitMenuWindow(&gWindowConfig_81E6CE4); + mapdata_load_assets_to_gpu_and_full_redraw(); +} + +void sub_8054C54(void) +{ + REG_MOSAIC = 0; + REG_WININ = 7967; + REG_WINOUT = 257; + REG_WIN0H = 255; + REG_WIN0V = 255; + REG_WIN1H = -1; + REG_WIN1V = -1; + REG_BLDCNT = gUnknown_081E29E0[1] | gUnknown_081E29E0[2] | gUnknown_081E29E0[3] | 0x1040; + REG_BLDALPHA = 1805; + *gBGHOffsetRegs[0] = 0; + *gBGVOffsetRegs[0] = 0; + *gBGControlRegs[0] = 0; + *gBGHOffsetRegs[1] = 0; + *gBGVOffsetRegs[1] = 0; + *gBGControlRegs[1] = 7489; + *gBGHOffsetRegs[2] = 0; + *gBGVOffsetRegs[2] = 0; + *gBGControlRegs[2] = 7234; + *gBGHOffsetRegs[3] = 0; + *gBGVOffsetRegs[3] = 0; + *gBGControlRegs[3] = 7747; + REG_DISPCNT = gUnknown_081E29D8[1] | 0x7060 | gUnknown_081E29D8[2] | gUnknown_081E29D8[0] | gUnknown_081E29D8[3]; +} + +void sub_8054D4C(u32 a1) +{ + ResetTasks(); + ResetSpriteData(); + ResetPaletteFade(); + dp12_8087EA4(); + ResetCameraUpdateInfo(); + InstallCameraPanAheadCallback(); + sub_805C7C4(0); + FieldEffectActiveListClear(); + InitFieldMessageBox(); + sub_807C828(); + sub_8080750(); + if (!a1) + SetUpFieldTasks(); + mapheader_run_script_with_tag_x5(); +} + +void sub_8054D90(void) +{ + gUnknown_0300489C = 0; + gUnknown_03004898 = 0; + sub_805AA98(); + sub_805B55C(0, 0); + mapheader_run_first_tag4_script_list_match(); +} + +void mli4_mapscripts_and_other(void) +{ + s16 x, y; + struct UnkPlayerStruct *player; + gUnknown_0300489C = 0; + gUnknown_03004898 = 0; + sub_805AA98(); + sav1_camera_get_focus_coords(&x, &y); + player = sub_8053AA8(); + InitPlayerAvatar(x, y, player->player_field_1, gSaveBlock2.playerGender); + SetPlayerAvatarTransitionFlags(player->player_field_0); + player_avatar_init_params_reset(); + sub_805B55C(0, 0); + ResetBerryTreeSparkleFlags(); + mapheader_run_first_tag4_script_list_match(); +} + +void sub_8054E20(void) +{ + sub_805B710(0, 0); + RotatingGate_InitPuzzleAndGraphics(); +} + +void sub_8054E34(void) +{ + gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_15 = 1; + InitCameraUpdateCallback(gPlayerAvatar.spriteId); +} + +void sub_8054E60(void) +{ + InitCameraUpdateCallback(sub_8055AE8(gUnknown_03004860)); +} + +void sub_8054E7C(void) +{ + InitCameraUpdateCallback(sub_8055AE8(gUnknown_03004860)); +} + +void sub_8054E98(void) +{ + u16 x, y; + sav1_camera_get_focus_coords(&x, &y); + sub_8056C50(x + gUnknown_03004860, y); +} + +void sub_8054EC8(void) +{ + u16 i; + u16 x, y; + + sav1_camera_get_focus_coords(&x, &y); + x -= gUnknown_03004860; + + for (i = 0; i < gFieldLinkPlayerCount; i++) + { + SpawnLinkPlayerMapObject(i, i + x, y, gLinkPlayers[i].gender); + CreateLinkPlayerSprite(i); + } + + sub_8055340(word_3002910); +} + +void sub_8054F48(void) +{ + u16 i; + for (i = 0; i < gFieldLinkPlayerCount; i++) + CreateLinkPlayerSprite(i); +} + +void sub_8054F70(void) +{ + int i; + for (i = 0; i < 4; i++) + gUnknown_03000580[i] = 0x80; +} + +bool32 sub_8054F88(u16 a1) +{ + int i; + int count = gFieldLinkPlayerCount; + + for (i = 0; i < count; i++) + if (gUnknown_03000580[i] != a1) + return FALSE; + return TRUE; +} + +bool32 sub_8054FC0(u16 a1) +{ + int i; + int count = gFieldLinkPlayerCount; + + for (i = 0; i < count; i++) + if (gUnknown_03000580[i] == a1) + return TRUE; + return FALSE; +} + +void sub_8054FF8(u32 a1, u16 a2, struct UnkStruct_8054FF8 *a3, u16 *a4) +{ + u8 *script; + + if (gUnknown_03000580[a1] == 0x80) + { + script = sub_8055648(a3); + if (script) + { + *a4 = sub_8055758(script); + gUnknown_03000580[a1] = 0x81; + if (a3->b) + { + sub_80543DC(sub_80553E4); + sub_8055808(script); + } + return; + } + if (sub_8054FC0(0x83) == 1) + { + gUnknown_03000580[a1] = 0x81; + if (a3->b) + { + sub_80543DC(sub_80553E4); + sub_805585C(); + } + return; + } + switch (a2) + { + case 24: + if (sub_8055630(a3)) + { + gUnknown_03000580[a1] = 0x81; + if (a3->b) + { + sub_80543DC(sub_80553E4); + sub_80557F4(); + } + } + break; + case 18: + if (sub_8055660(a3) == 1) + { + gUnknown_03000580[a1] = 0x81; + if (a3->b) + { + sub_80543DC(sub_80553E4); + sub_8055824(); + } + } + break; + case 25: + script = sub_805568C(a3); + if (script) + { + gUnknown_03000580[a1] = 0x81; + if (a3->b) + { + sub_80543DC(sub_80553E4); + sub_8055840(script); + } + } + break; + case 27: + if (sub_8055618(a3)) + { + gUnknown_03000580[a1] = 0x81; + if (a3->b) + { + sub_80543DC(sub_8055408); + sub_80557E8(); + } + } + break; + case 28: + if (sub_8055618(a3)) + { + gUnknown_03000580[a1] = 0x81; + if (a3->b) + { + sub_80543DC(sub_8055438); + sub_80557E8(); + } + } + break; + } + } + + switch (a2) + { + case 23: + gUnknown_03000580[a1] = 0x83; + break; + case 22: + gUnknown_03000580[a1] = 0x82; + break; + case 26: + gUnknown_03000580[a1] = 0x80; + if (a3->b) + sub_80543DC(sub_8055390); + break; + case 29: + if (gUnknown_03000580[a1] == 0x82) + gUnknown_03000580[a1] = 0x81; + break; + } +} + +void sub_8055218(u16 *a1, int a2) +{ + struct UnkStruct_8054FF8 st; + int i; + for (i = 0; i < 4; i++) + { + u16 v5 = a1[i]; + u16 v8 = 0; + sub_80555B0(i, a2, &st); + sub_8054FF8(i, v5, &st, &v8); + if (gUnknown_03000580[i] == 0x80) + v8 = sub_805530C(v5); + sub_8055BFC(i, v8); + } +} + +void sub_8055280(u16 a1) +{ + if (a1 >= 17 && a1 < 30) + word_3004858 = a1; + else + word_3004858 = 17; +} + +u16 sub_80552B0(u32 a1) +{ + if (gMain.heldKeys & 0x40) + { + return 19; + } + else if (gMain.heldKeys & 0x80) + { + return 18; + } + else if (gMain.heldKeys & 0x20) + { + return 20; + } + else if (gMain.heldKeys & 0x10) + { + return 21; + } + else if (gMain.newKeys & 8) + { + return 24; + } + else if (gMain.newKeys & 1) + { + return 25; + } + else + { + return 17; + } +} + +u16 sub_805530C(u16 a1) +{ + switch (a1) + { + case 21: + return 4; + case 20: + return 3; + case 19: + return 1; + case 18: + return 2; + default: + return 0; + } +} + +void sub_8055340(u16 *a1) +{ + int i; + for (i = 0; i < 4; i++) + a1[i] = 17; +} + +void sub_8055354(void) +{ + u8 val = gUnknown_03004860; + sub_8055218(word_3002910, val); + sub_8055280(gUnknown_03000584(val)); + sub_8055340(word_3002910); +} + +u16 sub_8055390(u32 a1) +{ + if (ScriptContext2_IsEnabled() == 1) + return 17; + if (gLink.recvQueue.count > 4) + return 27; + if (gLink.sendQueue.count <= 4) + return sub_80552B0(a1); + return 28; +} + +u16 sub_80553E0(u32 a1) +{ + return 17; +} + +u16 sub_80553E4(u32 a1) +{ + u16 retVal; + if (ScriptContext2_IsEnabled() == 1) + { + retVal = 17; + } + else + { + retVal = 26; + sub_80543DC(sub_80553E0); + } + return retVal; +} + +u16 sub_8055408(u32 a1) +{ + u16 retVal; + if (gLink.recvQueue.count > 2) + { + retVal = 17; + } + else + { + retVal = 26; + ScriptContext2_Disable(); + sub_80543DC(sub_80553E0); + } + return retVal; +} + +u16 sub_8055438(u32 a1) +{ + u16 retVal; + if (gLink.sendQueue.count > 2) + { + retVal = 17; + } + else + { + retVal = 26; + ScriptContext2_Disable(); + sub_80543DC(sub_80553E0); + } + return retVal; +} + +u16 sub_8055468(u32 a1) +{ + return 17; +} + +u16 sub_805546C(u32 linkPlayerId) +{ + if (gUnknown_03000580[linkPlayerId] == 0x82 && (gMain.newKeys & B_BUTTON)) + { + sub_80543DC(sub_8055468); + return 29; + } + else + { + return 17; + } +} + +u16 sub_80554A4(u32 a1) +{ + sub_80543DC(sub_805546C); + return 22; +} + +u16 sub_80554B8(u32 a1) +{ + return 17; +} + +u16 sub_80554BC(u32 a1) +{ + if (sub_8054F88(0x83) == TRUE) + { + ScriptContext1_SetupScript(gUnknown_081A4508); + sub_80543DC(sub_80554B8); + } + return 17; +} + +u16 sub_80554E4(u32 a1) +{ + sub_80543DC(sub_80554BC); + return 23; +} + +u32 sub_80554F8(void) +{ + if (sub_8054FC0(0x83) == TRUE) + return 2; + if (gUnknown_03000584 == sub_805546C && gUnknown_03000580[gUnknown_03004860] != 0x82) + return 0; + if (gUnknown_03000584 == sub_8055468 && gUnknown_03000580[gUnknown_03004860] == 0x81) + return 2; + return sub_8054F88(0x82); +} + +bool32 unref_sub_8055568(void) +{ + return sub_8054FC0(0x83); +} + +u16 sub_8055574(void) +{ + sub_80543DC(sub_80554A4); + return 0; +} + +u16 sub_8055588(void) +{ + sub_80543DC(sub_80553E4); + return 0; +} + +u16 sub_805559C(void) +{ + sub_80543DC(sub_80554E4); + return 0; +} + +void sub_80555B0(int linkPlayerId, int a2, struct UnkStruct_8054FF8 *a3) +{ + s16 x, y; + + a3->a = linkPlayerId; + a3->b = (linkPlayerId == a2) ? 1 : 0; + a3->c = gLinkPlayerMapObjects[linkPlayerId].mode; + a3->d = sub_8055B30(linkPlayerId); + sub_8055B08(linkPlayerId, &x, &y); + a3->sub.x = x; + a3->sub.y = y; + a3->sub.height = sub_8055B50(linkPlayerId); + a3->field_C = MapGridGetMetatileBehaviorAt(x, y); +} + +bool32 sub_8055618(struct UnkStruct_8054FF8 *a1) +{ + u8 v1 = a1->c; + if (v1 == 2 || v1 == 0) + return TRUE; + else + return FALSE; +} + +bool32 sub_8055630(struct UnkStruct_8054FF8 *a1) +{ + u8 v1 = a1->c; + if (v1 == 2 || v1 == 0) + return TRUE; + else + return FALSE; +} + +u8 *sub_8055648(struct UnkStruct_8054FF8 *a1) +{ + if (a1->c != 2) + return 0; + return sub_8068E24(&a1->sub); +} + +bool32 sub_8055660(struct UnkStruct_8054FF8 *a1) +{ + if (a1->c != 2 && a1->c != 0) + return FALSE; + if (!MetatileBehavior_IsSouthArrowWarp(a1->field_C)) + return FALSE; + if (a1->d != 1) + return FALSE; + return TRUE; +} + +u8 *sub_805568C(struct UnkStruct_8054FF8 *a1) +{ + struct MapPosition unkStruct; + u8 linkPlayerId; + + if (a1->c && a1->c != 2) + return 0; + + unkStruct = a1->sub; + unkStruct.x += gUnknown_0821664C[a1->d].x; + unkStruct.y += gUnknown_0821664C[a1->d].y; + unkStruct.height = 0; + linkPlayerId = GetLinkPlayerIdAt(unkStruct.x, unkStruct.y); + + if (linkPlayerId != 4) + { + if (!a1->b) + return TradeRoom_TooBusyToNotice; + if (gUnknown_03000580[linkPlayerId] != 0x80) + return TradeRoom_TooBusyToNotice; + if (!sub_8083BF4(linkPlayerId)) + return TradeRoom_ReadTrainerCard1; + else + return TradeRoom_ReadTrainerCard2; + } + + return sub_80682A8(&unkStruct, a1->field_C, a1->d); +} + +u16 sub_8055758(u8 *script) +{ + if (script == DoubleBattleColosseum_EventScript_1A4383) + return 10; + if (script == DoubleBattleColosseum_EventScript_1A439E) + return 9; + if (script == DoubleBattleColosseum_EventScript_1A43B9) + return 10; + if (script == DoubleBattleColosseum_EventScript_1A43D4) + return 9; + if (script == RecordCorner_EventScript_1A4418) + return 10; + if (script == RecordCorner_EventScript_1A442D) + return 9; + if (script == RecordCorner_EventScript_1A4442) + return 10; + if (script == RecordCorner_EventScript_1A4457) + return 9; + if (script == SingleBattleColosseum_EventScript_1A436F) + return 10; + if (script == SingleBattleColosseum_EventScript_1A4379) + return 9; + if (script == TradeCenter_EventScript_1A43F0) + return 10; + if (script == TradeCenter_EventScript_1A43FA) + return 9; + return 0; +} + +void sub_80557E8(void) +{ + ScriptContext2_Enable(); +} + +void sub_80557F4(void) +{ + PlaySE(SE_WIN_OPEN); + sub_8071310(); + ScriptContext2_Enable(); +} + +void sub_8055808(u8 *script) +{ + PlaySE(SE_SELECT); + ScriptContext1_SetupScript(script); + ScriptContext2_Enable(); +} + +void sub_8055824(void) +{ + PlaySE(SE_WIN_OPEN); + ScriptContext1_SetupScript(TradeRoom_PromptToCancelLink); + ScriptContext2_Enable(); +} + +void sub_8055840(u8 *script) +{ + PlaySE(SE_SELECT); + ScriptContext1_SetupScript(script); + ScriptContext2_Enable(); +} + +void sub_805585C(void) +{ + ScriptContext1_SetupScript(TradeRoom_TerminateLink); + ScriptContext2_Enable(); +} + +bool32 sub_8055870(void) +{ + if (!is_c1_link_related_active()) + return 0; + if (gLink.recvQueue.count >= 3) + gUnknown_03000588 = 1; + else + gUnknown_03000588 = 0; + return gUnknown_03000588; +} + +bool32 sub_80558AC(void) +{ + u8 temp; + + if (is_c1_link_related_active() != TRUE) + return FALSE; + + if (sub_8007B24() != TRUE) + return FALSE; + + if (gUnknown_03000584 == sub_8055408) + return TRUE; + + if (gUnknown_03000584 != sub_80553E4) + return FALSE; + + temp = gUnknown_03000588; + gUnknown_03000588 = 0; + + if (temp == TRUE) + return TRUE; + + if (gPaletteFade.active && gPaletteFade.softwareFadeFinishing) + return TRUE; + + return FALSE; +} + +bool32 sub_8055910(void) +{ + if (is_c1_link_related_active() != TRUE) + return FALSE; + + if (sub_8007B24() != TRUE) + return FALSE; + + if (gUnknown_03000584 == sub_8055438) + return TRUE; + + return FALSE; +} + +bool32 sub_8055940(void) +{ + if (!sub_8007B24()) + return FALSE; + return TRUE; +} + +void ZeroLinkPlayerMapObject(struct LinkPlayerMapObject *linkPlayerMapObj) +{ + memset(linkPlayerMapObj, 0, sizeof(struct LinkPlayerMapObject)); +} + +void strange_npc_table_clear(void) +{ + memset(gLinkPlayerMapObjects, 0, sizeof(gLinkPlayerMapObjects)); +} + +void ZeroMapObject(struct MapObject *mapObj) +{ + memset(mapObj, 0, sizeof(struct MapObject)); +} + +void SpawnLinkPlayerMapObject(u8 linkPlayerId, s16 x, s16 y, u8 a4) +{ + u8 mapObjId = sub_805AB54(); + struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[linkPlayerId]; + struct MapObject *mapObj = &gMapObjects[mapObjId]; + + ZeroLinkPlayerMapObject(linkPlayerMapObj); + ZeroMapObject(mapObj); + + linkPlayerMapObj->active = 1; + linkPlayerMapObj->linkPlayerId = linkPlayerId; + linkPlayerMapObj->mapObjId = mapObjId; + linkPlayerMapObj->mode = 0; + + mapObj->active = 1; + mapObj->mapobj_bit_1 = a4; + mapObj->mapobj_unk_19 = 2; + mapObj->spriteId = 64; + + InitLinkPlayerMapObjectPos(mapObj, x, y); +} + +void InitLinkPlayerMapObjectPos(struct MapObject *mapObj, s16 x, s16 y) +{ + mapObj->coords2.x = x; + mapObj->coords2.y = y; + mapObj->coords3.x = x; + mapObj->coords3.y = y; + sub_80603CC(x, y, &mapObj->coords1.x, &mapObj->coords1.y); + mapObj->coords1.x += 8; + FieldObjectUpdateZCoord(mapObj); +} + +void unref_sub_8055A6C(u8 linkPlayerId, u8 a2) +{ + if (gLinkPlayerMapObjects[linkPlayerId].active) + { + u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId; + struct MapObject *mapObj = &gMapObjects[mapObjId]; + mapObj->mapobj_unk_19 = a2; + } +} + +void unref_sub_8055A9C(u8 linkPlayerId) +{ + struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[linkPlayerId]; + u8 mapObjId = linkPlayerMapObj->mapObjId; + struct MapObject *mapObj = &gMapObjects[mapObjId]; + if (mapObj->spriteId != 64 ) + DestroySprite(&gSprites[mapObj->spriteId]); + linkPlayerMapObj->active = 0; + mapObj->active = 0; +} + +u8 sub_8055AE8(u8 linkPlayerId) +{ + u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId; + struct MapObject *mapObj = &gMapObjects[mapObjId]; + return mapObj->spriteId; +} + +void sub_8055B08(u8 linkPlayerId, u16 *x, u16 *y) +{ + u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId; + struct MapObject *mapObj = &gMapObjects[mapObjId]; + *x = mapObj->coords2.x; + *y = mapObj->coords2.y; +} + +u8 sub_8055B30(u8 linkPlayerId) +{ + u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId; + struct MapObject *mapObj = &gMapObjects[mapObjId]; + return mapObj->mapobj_unk_19; +} + +u8 sub_8055B50(u8 linkPlayerId) +{ + u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId; + struct MapObject *mapObj = &gMapObjects[mapObjId]; + return mapObj->mapobj_unk_0B_0; +} + +s32 unref_sub_8055B74(u8 linkPlayerId) +{ + u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId; + struct MapObject *mapObj = &gMapObjects[mapObjId]; + return 16 - (s8)mapObj->mapobj_unk_21; +} + +u8 GetLinkPlayerIdAt(s16 x, s16 y) +{ + u8 i; + for (i = 0; i < 4; i++) + { + if (gLinkPlayerMapObjects[i].active + && (gLinkPlayerMapObjects[i].mode == 0 || gLinkPlayerMapObjects[i].mode == 2)) + { + struct MapObject *mapObj = &gMapObjects[gLinkPlayerMapObjects[i].mapObjId]; + if (mapObj->coords2.x == x && mapObj->coords2.y == y) + return i; + } + } + return 4; +} + +void sub_8055BFC(u8 linkPlayerId, u8 a2) +{ + struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[linkPlayerId]; + u8 mapObjId = linkPlayerMapObj->mapObjId; + struct MapObject *mapObj = &gMapObjects[mapObjId]; + + if (linkPlayerMapObj->active) + { + if (a2 > 10) + mapObj->mapobj_bit_2 = 1; + else + gUnknown_082166D8[gUnknown_082166A0[linkPlayerMapObj->mode](linkPlayerMapObj, mapObj, a2)](linkPlayerMapObj, mapObj); + } +} + +u8 sub_8055C68(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) +{ + return gUnknown_082166AC[a3](linkPlayerMapObj, mapObj, a3); +} + +u8 sub_8055C88(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) +{ + return 1; +} + +u8 sub_8055C8C(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) +{ + return gUnknown_082166AC[a3](linkPlayerMapObj, mapObj, a3); +} + +u8 sub_8055CAC(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) +{ + return 0; +} + +u8 sub_8055CB0(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) +{ + s16 x, y; + + mapObj->mapobj_unk_19 = npc_something3(a3, mapObj->mapobj_unk_19); + FieldObjectMoveDestCoords(mapObj, mapObj->mapobj_unk_19, &x, &y); + + if (LinkPlayerDetectCollision(linkPlayerMapObj->mapObjId, mapObj->mapobj_unk_19, x, y)) + { + return 0; + } + else + { + mapObj->mapobj_unk_21 = 16; + npc_coords_shift(mapObj, x, y); + FieldObjectUpdateZCoord(mapObj); + return 1; + } +} + +u8 sub_8055D18(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) +{ + mapObj->mapobj_unk_19 = npc_something3(a3, mapObj->mapobj_unk_19); + return 0; +} + +void sub_8055D30(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj) +{ + linkPlayerMapObj->mode = 0; +} + +void sub_8055D38(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj) +{ + mapObj->mapobj_unk_21--; + linkPlayerMapObj->mode = 1; + MoveCoords(mapObj->mapobj_unk_19, &mapObj->coords1.x, &mapObj->coords1.y); + if (!mapObj->mapobj_unk_21) + { + npc_coords_shift_still(mapObj); + linkPlayerMapObj->mode = 2; + } +} + +u8 npc_something3(u8 a1, u8 a2) +{ + switch (a1 - 1) + { + case 0: + case 6: + return 2; + case 1: + case 7: + return 1; + case 2: + case 8: + return 3; + case 3: + case 9: + return 4; + } + return a2; +} + +u8 LinkPlayerDetectCollision(u8 selfMapObjId, u8 a2, s16 x, s16 y) +{ + u8 i; + for (i = 0; i < 16; i++) + { + if (i != selfMapObjId) + { + if ((gMapObjects[i].coords2.x == x && gMapObjects[i].coords2.y == y) + || (gMapObjects[i].coords3.x == x && gMapObjects[i].coords3.y == y)) + { + return 1; + } + } + } + return MapGridIsImpassableAt(x, y); +} + +void CreateLinkPlayerSprite(u8 linkPlayerId) +{ + struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[linkPlayerId]; + u8 mapObjId = linkPlayerMapObj->mapObjId; + struct MapObject *mapObj = &gMapObjects[mapObjId]; + struct Sprite *sprite; + + if (linkPlayerMapObj->active) + { + u8 val = GetRivalAvatarGraphicsIdByStateIdAndGender(0, mapObj->mapobj_bit_1); + mapObj->spriteId = AddPseudoFieldObject(val, SpriteCB_LinkPlayer, 0, 0, 0); + sprite = &gSprites[mapObj->spriteId]; + sprite->coordOffsetEnabled = TRUE; + sprite->data0 = linkPlayerId; + mapObj->mapobj_bit_2 = 0; + } +} + +void SpriteCB_LinkPlayer(struct Sprite *sprite) +{ + struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[sprite->data0]; + struct MapObject *mapObj = &gMapObjects[linkPlayerMapObj->mapObjId]; + sprite->pos1.x = mapObj->coords1.x; + sprite->pos1.y = mapObj->coords1.y; + SetObjectSubpriorityByZCoord(mapObj->elevation, sprite, 1); + sprite->oam.priority = ZCoordToPriority(mapObj->elevation); + if (!linkPlayerMapObj->mode) + StartSpriteAnim(sprite, FieldObjectDirectionToImageAnimId(mapObj->mapobj_unk_19)); + else + StartSpriteAnimIfDifferent(sprite, get_go_image_anim_num(mapObj->mapobj_unk_19)); + sub_806487C(sprite, 0); + if (mapObj->mapobj_bit_2) + { + sprite->invisible = ((sprite->data7 & 4) >> 2); + sprite->data7++; + } +} diff --git a/src/player_pc.c b/src/player_pc.c index 64e2734db..83e6dd221 100644 --- a/src/player_pc.c +++ b/src/player_pc.c @@ -18,7 +18,7 @@ #include "songs.h" #include "name_string_util.h" #include "mail.h" -#include "rom4.h" +#include "overworld.h" #include "player_pc.h" extern void DisplayItemMessageOnField(u8, const u8*, TaskFunc, u16); diff --git a/src/pokeblock.c b/src/pokeblock.c index 9f74a0cf4..d69c41639 100644 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -3,7 +3,7 @@ // #include "global.h" -#include "rom4.h" +#include "overworld.h" #include "sprite.h" #include "script.h" #include "strings.h" diff --git a/src/pokeblock_feed.c b/src/pokeblock_feed.c index db4db55a7..ccbb391af 100644 --- a/src/pokeblock_feed.c +++ b/src/pokeblock_feed.c @@ -6,7 +6,7 @@ #include "text.h" #include "text_window.h" #include "menu.h" -#include "rom4.h" +#include "overworld.h" #include "decompress.h" #include "data2.h" #include "sprite.h" diff --git a/src/pokedex.c b/src/pokedex.c index c132635cb..603b5ae48 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -16,7 +16,7 @@ #include "pokedex_cry_screen.h" #include "pokemon.h" #include "rng.h" -#include "rom4.h" +#include "overworld.h" #include "songs.h" #include "sound.h" #include "species.h" diff --git a/src/pokemon_1.c b/src/pokemon_1.c index 9c46e54d5..5fd74fbec 100644 --- a/src/pokemon_1.c +++ b/src/pokemon_1.c @@ -4,7 +4,7 @@ #include "main.h" #include "pokemon.h" #include "rng.h" -#include "rom4.h" +#include "overworld.h" #include "species.h" #include "sprite.h" #include "string_util.h" diff --git a/src/pokemon_3.c b/src/pokemon_3.c index 4f7655a34..e51d3187b 100644 --- a/src/pokemon_3.c +++ b/src/pokemon_3.c @@ -11,7 +11,7 @@ #include "main.h" #include "pokemon.h" #include "rng.h" -#include "rom4.h" +#include "overworld.h" #include "rom_8077ABC.h" #include "rom_8094928.h" #include "rtc.h" diff --git a/src/pokemon_menu.c b/src/pokemon_menu.c index d460833c3..bc5150a16 100644 --- a/src/pokemon_menu.c +++ b/src/pokemon_menu.c @@ -8,7 +8,7 @@ #include "songs.h" #include "sound.h" #include "main.h" -#include "rom4.h" +#include "overworld.h" #include "menu_helpers.h" #include "pokemon_summary_screen.h" #include "moves.h" diff --git a/src/post_battle_event_funcs.c b/src/post_battle_event_funcs.c index 8d85705c8..58b1197db 100644 --- a/src/post_battle_event_funcs.c +++ b/src/post_battle_event_funcs.c @@ -4,7 +4,7 @@ #include "load_save.h" #include "main.h" #include "pokemon.h" -#include "rom4.h" +#include "overworld.h" #include "script_pokemon_80C4.h" extern u8 gUnknown_02039324; diff --git a/src/record_mixing.c b/src/record_mixing.c index 30bcb29d1..d02d89467 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -14,7 +14,7 @@ #include "menu.h" #include "mystery_event_script.h" #include "rng.h" -#include "rom4.h" +#include "overworld.h" #include "save.h" #include "script.h" #include "secret_base.h" diff --git a/src/region_map.c b/src/region_map.c index 1d567fcf0..900c9ad71 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -9,7 +9,7 @@ #include "palette.h" #include "pokemon_menu.h" #include "region_map.h" -#include "rom4.h" +#include "overworld.h" #include "secret_base.h" #include "songs.h" #include "sprite.h" diff --git a/src/rom4.c b/src/rom4.c deleted file mode 100644 index e1c8932b8..000000000 --- a/src/rom4.c +++ /dev/null @@ -1,2587 +0,0 @@ -#include "global.h" -#include "rom4.h" -#include "battle_setup.h" -#include "berry.h" -#include "cable_club.h" -#include "clock.h" -#include "event_data.h" -#include "field_camera.h" -#include "field_control_avatar.h" -#include "field_effect.h" -#include "field_fadetransition.h" -#include "field_ground_effect.h" -#include "field_map_obj.h" -#include "field_map_obj_helpers.h" -#include "field_message_box.h" -#include "field_player_avatar.h" -#include "field_screen_effect.h" -#include "field_special_scene.h" -#include "field_specials.h" -#include "field_tasks.h" -#include "field_weather.h" -#include "fieldmap.h" -#include "fldeff_flash.h" -#include "heal_location.h" -#include "link.h" -#include "load_save.h" -#include "main.h" -#include "map_constants.h" -#include "map_name_popup.h" -#include "menu.h" -#include "metatile_behavior.h" -#include "new_game.h" -#include "palette.h" -#include "play_time.h" -#include "rng.h" -#include "roamer.h" -#include "rotating_gate.h" -#include "safari_zone.h" -#include "script.h" -#include "script_pokemon_80C4.h" -#include "secret_base.h" -#include "songs.h" -#include "sound.h" -#include "species.h" -#include "start_menu.h" -#include "task.h" -#include "tileset_anim.h" -#include "time_events.h" -#include "tv.h" -#include "unknown_task.h" -#include "wild_encounter.h" - -#ifdef SAPPHIRE -#define LEGENDARY_MUSIC BGM_OOAME // Heavy Rain -#else -#define LEGENDARY_MUSIC BGM_HIDERI // Drought -#endif - -struct UnkTVStruct -{ - u32 tv_field_0; - u32 tv_field_4; -}; - -EWRAM_DATA struct WarpData gUnknown_020297F0 = {0}; -EWRAM_DATA struct WarpData gUnknown_020297F8 = {0}; -EWRAM_DATA struct WarpData gUnknown_02029800 = {0}; -EWRAM_DATA struct WarpData gUnknown_02029808 = {0}; -EWRAM_DATA struct UnkPlayerStruct gUnknown_02029810 = {0}; -EWRAM_DATA static u16 sAmbientCrySpecies = 0; -EWRAM_DATA static bool8 sIsAmbientCryWaterMon = FALSE; -EWRAM_DATA struct LinkPlayerMapObject gLinkPlayerMapObjects[4] = {0}; - -static u8 gUnknown_03000580[4]; -static u16 (*gUnknown_03000584)(u32); -static u8 gUnknown_03000588; - -u16 word_3004858; -void (*gFieldCallback)(void); -u8 gUnknown_03004860; -u8 gFieldLinkPlayerCount; - -extern u16 gUnknown_03004898; -extern u16 gUnknown_0300489C; - -extern u8 S_WhiteOut[]; -extern u8 gUnknown_0819FC9F[]; -extern u8 SingleBattleColosseum_EventScript_1A436F[]; -extern u8 SingleBattleColosseum_EventScript_1A4379[]; -extern u8 DoubleBattleColosseum_EventScript_1A4383[]; -extern u8 DoubleBattleColosseum_EventScript_1A439E[]; -extern u8 DoubleBattleColosseum_EventScript_1A43B9[]; -extern u8 DoubleBattleColosseum_EventScript_1A43D4[]; -extern u8 TradeCenter_EventScript_1A43F0[]; -extern u8 TradeCenter_EventScript_1A43FA[]; -extern u8 RecordCorner_EventScript_1A4418[]; -extern u8 RecordCorner_EventScript_1A442D[]; -extern u8 RecordCorner_EventScript_1A4442[]; -extern u8 RecordCorner_EventScript_1A4457[]; -extern u8 TradeRoom_ReadTrainerCard1[]; -extern u8 TradeRoom_ReadTrainerCard2[]; -extern u8 TradeRoom_TooBusyToNotice[]; -extern u8 TradeRoom_PromptToCancelLink[]; -extern u8 TradeRoom_TerminateLink[]; -extern u8 gUnknown_081A4508[]; - -extern u8 (*gUnknown_082166A0[])(struct LinkPlayerMapObject *, struct MapObject *, u8); -extern u8 (*gUnknown_082166AC[])(struct LinkPlayerMapObject *, struct MapObject *, u8); -extern void (*gUnknown_082166D8[])(struct LinkPlayerMapObject *, struct MapObject *); - -extern struct MapData * const gMapAttributes[]; -extern struct MapHeader * const * const gMapGroups[]; -extern const struct WarpData gDummyWarpData; -extern s32 gMaxFlashLevel; -extern u32 gUnknown_08216694[]; - -static void DoWhiteOut(void) -{ - ScriptContext2_RunNewScript(S_WhiteOut); - gSaveBlock1.money /= 2; - HealPlayerParty(); - sub_8053050(); - sub_8053570(); - warp_in(); -} - -void flag_var_implications_of_teleport_(void) -{ - player_avatar_init_params_reset(); - FlagReset(SYS_CYCLING_ROAD); - FlagReset(SYS_CRUISE_MODE); - FlagReset(SYS_SAFARI_MODE); - FlagReset(SYS_USE_STRENGTH); - FlagReset(SYS_USE_FLASH); -} - -void Overworld_ResetStateAfterTeleport(void) -{ - player_avatar_init_params_reset(); - FlagReset(SYS_CYCLING_ROAD); - FlagReset(SYS_CRUISE_MODE); - FlagReset(SYS_SAFARI_MODE); - FlagReset(SYS_USE_STRENGTH); - FlagReset(SYS_USE_FLASH); - ScriptContext2_RunNewScript(gUnknown_0819FC9F); -} - -void sub_8053014(void) -{ - player_avatar_init_params_reset(); - FlagReset(SYS_CYCLING_ROAD); - FlagReset(SYS_CRUISE_MODE); - FlagReset(SYS_SAFARI_MODE); - FlagReset(SYS_USE_STRENGTH); - FlagReset(SYS_USE_FLASH); -} - -void sub_8053050(void) -{ - player_avatar_init_params_reset(); - FlagReset(SYS_CYCLING_ROAD); - FlagReset(SYS_CRUISE_MODE); - FlagReset(SYS_SAFARI_MODE); - FlagReset(SYS_USE_STRENGTH); - FlagReset(SYS_USE_FLASH); -} - -void sub_805308C(void) -{ - FlagReset(SYS_SAFARI_MODE); - ChooseAmbientCrySpecies(); - ResetCyclingRoadChallengeData(); - UpdateLocationHistoryForRoamer(); - RoamerMoveToOtherLocationSet(); -} - -void ResetGameStats(void) -{ - s32 i; - - for (i = 0; i < NUM_GAME_STATS; i++) - gSaveBlock1.gameStats[i] = 0; -} - -void IncrementGameStat(u8 index) -{ - if (index < NUM_GAME_STATS) - { - if (gSaveBlock1.gameStats[index] < 0xFFFFFF) - gSaveBlock1.gameStats[index]++; - else - gSaveBlock1.gameStats[index] = 0xFFFFFF; - } -} - -u32 GetGameStat(u8 index) -{ - if (index >= NUM_GAME_STATS) - return 0; - - return gSaveBlock1.gameStats[index]; -} - -void SetGameStat(u8 index, u32 value) -{ - if (index < NUM_GAME_STATS) - gSaveBlock1.gameStats[index] = value; -} - -void sub_8053154(void) -{ - CpuFill32(0, gSaveBlock1.mapObjectTemplates, sizeof(gSaveBlock1.mapObjectTemplates)); - CpuCopy32(gMapHeader.events->mapObjects, - gSaveBlock1.mapObjectTemplates, - gMapHeader.events->mapObjectCount * sizeof(struct MapObjectTemplate)); -} - -static void LoadSaveblockMapObjScripts(void) -{ - struct MapObjectTemplate *mapObjectTemplates = gSaveBlock1.mapObjectTemplates; - s32 i; - - for (i = 0; i < 64; i++) - mapObjectTemplates[i].script = gMapHeader.events->mapObjects[i].script; -} - -void Overworld_SaveMapObjCoords(u8 localId, s16 x, s16 y) -{ - s32 i; - for (i = 0; i < 64; i++) - { - struct MapObjectTemplate *mapObjectTemplate = &gSaveBlock1.mapObjectTemplates[i]; - if (mapObjectTemplate->localId == localId) - { - mapObjectTemplate->x = x; - mapObjectTemplate->y = y; - return; - } - } -} - -void Overworld_SaveMapObjMovementType(u8 localId, u8 movementType) -{ - s32 i; - for (i = 0; i < 64; i++) - { - struct MapObjectTemplate *mapObjectTemplate = &gSaveBlock1.mapObjectTemplates[i]; - if (mapObjectTemplate->localId == localId) - { - mapObjectTemplate->movementType = movementType; - return; - } - } -} - -static void mapdata_load_assets_to_gpu_and_full_redraw(void) -{ - move_tilemap_camera_to_upper_left_corner(); - copy_map_tileset1_tileset2_to_vram(gMapHeader.mapData); - apply_map_tileset1_tileset2_palette(gMapHeader.mapData); - DrawWholeMapView(); - cur_mapheader_run_tileset_funcs_after_some_cpuset(); -} - -static struct MapData *get_mapdata_header(void) -{ - u16 mapDataId = gSaveBlock1.mapDataId; - if (mapDataId) - return gMapAttributes[mapDataId - 1]; - return NULL; -} - -static void warp_shift(void) -{ - gUnknown_020297F0 = gSaveBlock1.location; - gSaveBlock1.location = gUnknown_020297F8; - gUnknown_02029800 = gDummyWarpData; - gUnknown_02029808 = gDummyWarpData; -} - -static void warp_set(struct WarpData *warp, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y) -{ - warp->mapGroup = mapGroup; - warp->mapNum = mapNum; - warp->warpId = warpId; - warp->x = x; - warp->y = y; -} - -static bool32 warp_data_is_not_neg_1(struct WarpData *warp) -{ - if (warp->mapGroup != -1) - return FALSE; - if (warp->mapNum != -1) - return FALSE; - if (warp->warpId != -1) - return FALSE; - if (warp->x != -1) - return FALSE; - if (warp->y != -1) - return FALSE; - return TRUE; -} - -struct MapHeader *const Overworld_GetMapHeaderByGroupAndId(u16 mapGroup, u16 mapNum) -{ - return gMapGroups[mapGroup][mapNum]; -} - -struct MapHeader *const warp1_get_mapheader(void) -{ - return Overworld_GetMapHeaderByGroupAndId(gUnknown_020297F8.mapGroup, gUnknown_020297F8.mapNum); -} - -static void set_current_map_header_from_sav1_save_old_name(void) -{ - gMapHeader = *Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum); - gSaveBlock1.mapDataId = gMapHeader.mapDataId; - gMapHeader.mapData = get_mapdata_header(); -} - -static void LoadSaveblockMapHeader(void) -{ - gMapHeader = *Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum); - gMapHeader.mapData = get_mapdata_header(); -} - -void sub_80533CC(void) -{ - if (gSaveBlock1.location.warpId >= 0 && gSaveBlock1.location.warpId < gMapHeader.events->warpCount) - { - gSaveBlock1.pos.x = gMapHeader.events->warps[gSaveBlock1.location.warpId].x; - gSaveBlock1.pos.y = gMapHeader.events->warps[gSaveBlock1.location.warpId].y; - } - else if (gSaveBlock1.location.x >= 0 && gSaveBlock1.location.y >= 0) - { - gSaveBlock1.pos.x = gSaveBlock1.location.x; - gSaveBlock1.pos.y = gSaveBlock1.location.y; - } - else - { - gSaveBlock1.pos.x = gMapHeader.mapData->width / 2; - gSaveBlock1.pos.y = gMapHeader.mapData->height / 2; - } -} - -void warp_in(void) -{ - warp_shift(); - set_current_map_header_from_sav1_save_old_name(); - sub_80533CC(); -} - -void warp1_set(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y) -{ - warp_set(&gUnknown_020297F8, mapGroup, mapNum, warpId, x, y); -} - -void warp1_set_2(s8 mapGroup, s8 mapNum, s8 warpId) -{ - warp1_set(mapGroup, mapNum, warpId, -1, -1); -} - -void saved_warp2_set(int unused, s8 mapGroup, s8 mapNum, s8 warpId) -{ - warp_set(&gSaveBlock1.warp2, mapGroup, mapNum, warpId, gSaveBlock1.pos.x, gSaveBlock1.pos.y); -} - -void saved_warp2_set_2(int unused, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y) -{ - warp_set(&gSaveBlock1.warp2, mapGroup, mapNum, warpId, x, y); -} - -void copy_saved_warp2_bank_and_enter_x_to_warp1(u8 unused) -{ - gUnknown_020297F8 = gSaveBlock1.warp2; -} - -void sub_8053538(u8 a1) -{ - const struct HealLocation *warp = GetHealLocation(a1); - if (warp) - warp1_set(warp->group, warp->map, -1, warp->x, warp->y); -} - -void sub_8053570(void) -{ - gUnknown_020297F8 = gSaveBlock1.warp3; -} - -void sub_8053588(u8 a1) -{ - const struct HealLocation *warp = GetHealLocation(a1); - if (warp) - warp_set(&gSaveBlock1.warp3, warp->group, warp->map, -1, warp->x, warp->y); -} - -void sub_80535C4(s16 a1, s16 a2) -{ - u8 v4 = Overworld_GetMapTypeOfSaveblockLocation(); - u8 v5 = GetMapTypeByGroupAndId(gUnknown_020297F8.mapGroup, gUnknown_020297F8.mapNum); - if (is_map_type_1_2_3_5_or_6(v4) && is_map_type_1_2_3_5_or_6(v5) != TRUE) - sub_805363C(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, -1, a1 - 7, a2 - 6); -} - -void sub_805363C(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y) -{ - warp_set(&gSaveBlock1.warp4, mapGroup, mapNum, warpId, x, y); -} - -void sub_8053678(void) -{ - gUnknown_020297F8 = gSaveBlock1.warp4; -} - -void sub_8053690(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y) -{ - warp_set(&gUnknown_02029800, mapGroup, mapNum, warpId, x, y); -} - -void warp1_set_to_warp2(void) -{ - gUnknown_020297F8 = gUnknown_02029800; -} - -void sub_80536E4(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y) -{ - warp_set(&gUnknown_02029808, mapGroup, mapNum, warpId, x, y); -} - -void sub_8053720(s16 x, s16 y) -{ - if (warp_data_is_not_neg_1(&gUnknown_02029808) == TRUE) - { - gUnknown_020297F8 = gUnknown_020297F0; - } - else - { - warp1_set(gUnknown_02029808.mapGroup, gUnknown_02029808.mapNum, -1, x, y); - } -} - -void sub_8053778(void) -{ - gUnknown_020297F8 = gSaveBlock1.warp1; -} - -void unref_sub_8053790(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y) -{ - warp_set(&gSaveBlock1.warp1, mapGroup, mapNum, warpId, x, y); -} - -void sub_80537CC(u8 a1) -{ - const struct HealLocation *warp = GetHealLocation(a1); - if (warp) - warp_set(&gSaveBlock1.warp1, warp->group, warp->map, -1, warp->x, warp->y); -} - -void gpu_sync_bg_hide() -{ - gSaveBlock1.warp1 = gSaveBlock1.warp2; -} - -struct MapConnection *sub_8053818(u8 dir) -{ - s32 i; - s32 count = gMapHeader.connections->count; - struct MapConnection *connection = gMapHeader.connections->connections; - - if (connection == NULL) - return NULL; - - for(i = 0; i < count; i++, connection++) - if (connection->direction == dir) - return connection; - - return NULL; -} - -bool8 sub_8053850(u8 dir, u16 x, u16 y) -{ - struct MapConnection *connection = sub_8053818(dir); - if (connection != NULL) - { - warp1_set(connection->mapGroup, connection->mapNum, -1, x, y); - } - else - { - mapheader_run_script_with_tag_x6(); - if (warp_data_is_not_neg_1(&gUnknown_02029800)) - return FALSE; - warp1_set_to_warp2(); - } - return TRUE; -} - -bool8 sub_80538B0(u16 x, u16 y) -{ - return sub_8053850(CONNECTION_EMERGE, x, y); -} - -bool8 sub_80538D0(u16 x, u16 y) -{ - return sub_8053850(CONNECTION_DIVE, x, y); -} - -void sub_80538F0(u8 mapGroup, u8 mapNum) -{ - s32 i; - - warp1_set(mapGroup, mapNum, -1, -1, -1); - sub_8053F0C(); - warp_shift(); - set_current_map_header_from_sav1_save_old_name(); - sub_8053154(); - ClearTempFieldEventData(); - ResetCyclingRoadChallengeData(); - prev_quest_postbuffer_cursor_backup_reset(); - sub_8082BD0(mapGroup, mapNum); - DoTimeBasedEvents(); - sub_80806E4(); - ChooseAmbientCrySpecies(); - SetDefaultFlashLevel(); - sav1_reset_battle_music_maybe(); - mapheader_run_script_with_tag_x3(); - not_trainer_hill_battle_pyramid(); - sub_8056D38(gMapHeader.mapData); - apply_map_tileset2_palette(gMapHeader.mapData); - - for (i = 6; i < 12; i++) - sub_807D874(i); - - sub_8072ED0(); - UpdateLocationHistoryForRoamer(); - RoamerMove(); - DoCurrentWeather(); - ResetFieldTasksArgs(); - mapheader_run_script_with_tag_x5(); - ShowMapNamePopup(); -} - -void sub_8053994(u32 a1) -{ - bool8 v2; - bool8 v3; - - set_current_map_header_from_sav1_save_old_name(); - sub_8053154(); - v2 = is_map_type_1_2_3_5_or_6(gMapHeader.mapType); - v3 = Overworld_MapTypeIsIndoors(gMapHeader.mapType); - ClearTempFieldEventData(); - ResetCyclingRoadChallengeData(); - prev_quest_postbuffer_cursor_backup_reset(); - sub_8082BD0(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum); - if (a1 != 1) - DoTimeBasedEvents(); - sub_80806E4(); - ChooseAmbientCrySpecies(); - if (v2) - FlagReset(SYS_USE_FLASH); - SetDefaultFlashLevel(); - sav1_reset_battle_music_maybe(); - mapheader_run_script_with_tag_x3(); - UpdateLocationHistoryForRoamer(); - RoamerMoveToOtherLocationSet(); - not_trainer_hill_battle_pyramid(); - if (a1 != 1 && v3) - { - UpdateTVScreensOnMap(gUnknown_03004870.width, gUnknown_03004870.height); - sub_80BBCCC(1); - } -} - -void player_avatar_init_params_reset(void) -{ - gUnknown_02029810.player_field_1 = 1; - gUnknown_02029810.player_field_0 = 1; -} - -void walkrun_find_lowest_active_bit_in_bitfield(void) -{ - gUnknown_02029810.player_field_1 = player_get_direction_lower_nybble(); - - if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE)) - gUnknown_02029810.player_field_0 = 2; - else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_ACRO_BIKE)) - gUnknown_02029810.player_field_0 = 4; - else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING)) - gUnknown_02029810.player_field_0 = 8; - else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_4)) - gUnknown_02029810.player_field_0 = 16; - else - gUnknown_02029810.player_field_0 = 1; -} - -struct UnkPlayerStruct *sub_8053AA8(void) -{ - struct UnkPlayerStruct playerStruct; - u8 mapType = Overworld_GetMapTypeOfSaveblockLocation(); - u16 v2 = cur_mapdata_block_role_at_screen_center_acc_to_sav1(); - u8 v4 = sub_8053B00(&gUnknown_02029810, v2, mapType); - playerStruct.player_field_0 = v4; - playerStruct.player_field_1 = sub_8053B60(&gUnknown_02029810, v4, v2, mapType); - gUnknown_02029810 = playerStruct; - return &gUnknown_02029810; -} - -u8 sub_8053B00(struct UnkPlayerStruct *playerStruct, u16 a2, u8 a3) -{ - if (a3 != 8 && FlagGet(SYS_CRUISE_MODE)) - return 1; - if (a3 == 5) - return 16; - if (MetatileBehavior_IsSurfableWaterOrUnderwater(a2) == 1) - return 8; - if (Overworld_IsBikeAllowedOnCurrentMap() != TRUE) - return 1; - if (playerStruct->player_field_0 == 2) - return 2; - if (playerStruct->player_field_0 != 4) - return 1; - return 4; -} - -u8 sub_8053B60(struct UnkPlayerStruct *playerStruct, u8 a2, u16 a3, u8 a4) -{ - if (FlagGet(SYS_CRUISE_MODE) && a4 == 6) - return 4; - if (MetatileBehavior_IsDeepSouthWarp(a3) == TRUE) - return 2; - if (MetatileBehavior_IsNonAnimDoor(a3) == TRUE || MetatileBehavior_IsDoor(a3) == TRUE) - return 1; - if (MetatileBehavior_IsSouthArrowWarp(a3) == TRUE) - return 2; - if (MetatileBehavior_IsNorthArrowWarp(a3) == TRUE) - return 1; - if (MetatileBehavior_IsWestArrowWarp(a3) == TRUE) - return 4; - if (MetatileBehavior_IsEastArrowWarp(a3) == TRUE) - return 3; - if ((playerStruct->player_field_0 == 16 && a2 == 8) - || (playerStruct->player_field_0 == 8 && a2 == 16)) - return playerStruct->player_field_1; - if (MetatileBehavior_IsLadder(a3) == TRUE) - return playerStruct->player_field_1; - return 1; -} - -u16 cur_mapdata_block_role_at_screen_center_acc_to_sav1(void) -{ - return MapGridGetMetatileBehaviorAt(gSaveBlock1.pos.x + 7, gSaveBlock1.pos.y + 7); -} - -bool32 Overworld_IsBikeAllowedOnCurrentMap(void) -{ - // is player in cycling road entrance? - if (gSaveBlock1.location.mapGroup == MAP_GROUP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE - && (gSaveBlock1.location.mapNum == MAP_ID_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE - || gSaveBlock1.location.mapNum == MAP_ID_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE)) - return TRUE; - - // is player indoor, in a secret base, or underwater? - if (gMapHeader.mapType == MAP_TYPE_INDOOR) - return FALSE; - if (gMapHeader.mapType == MAP_TYPE_SECRET_BASE) - return FALSE; - if (gMapHeader.mapType == MAP_TYPE_UNDERWATER) - return FALSE; - - // Thou shalt not bike on the sacred resting grounds of Kyogre/Groudon. - if (gSaveBlock1.location.mapGroup == MAP_GROUP_SEAFLOOR_CAVERN_ROOM9 - && gSaveBlock1.location.mapNum == MAP_ID_SEAFLOOR_CAVERN_ROOM9) - return FALSE; - if (gSaveBlock1.location.mapGroup == MAP_GROUP_CAVE_OF_ORIGIN_B4F - && gSaveBlock1.location.mapNum == MAP_ID_CAVE_OF_ORIGIN_B4F) - return FALSE; - - return TRUE; -} - -void SetDefaultFlashLevel(void) -{ - if (!gMapHeader.cave) - gSaveBlock1.flashLevel = 0; - else if (FlagGet(SYS_USE_FLASH)) - gSaveBlock1.flashLevel = 1; - else - gSaveBlock1.flashLevel = gMaxFlashLevel; -} - -void Overworld_SetFlashLevel(s32 flashLevel) -{ - if (flashLevel < 0 || flashLevel > gMaxFlashLevel) - flashLevel = 0; - gSaveBlock1.flashLevel = flashLevel; -} - -u8 Overworld_GetFlashLevel(void) -{ - return gSaveBlock1.flashLevel; -} - -void sub_8053D14(u16 mapDataId) -{ - gSaveBlock1.mapDataId = mapDataId; - gMapHeader.mapData = get_mapdata_header(); -} - -static bool16 ShouldLegendaryMusicPlayAtLocation(struct WarpData *warp) -{ - if (!FlagGet(SYS_WEATHER_CTRL)) - return FALSE; - if (warp->mapGroup == 0) - { - switch (warp->mapNum) - { - case MAP_ID_LILYCOVE_CITY: - case MAP_ID_MOSSDEEP_CITY: - case MAP_ID_SOOTOPOLIS_CITY: - case MAP_ID_EVER_GRANDE_CITY: - return TRUE; - case MAP_ID_ROUTE124: - case MAP_ID_ROUTE125: - case MAP_ID_ROUTE126: - case MAP_ID_ROUTE127: - case MAP_ID_ROUTE128: - return TRUE; - } - } - return FALSE; -} - -static bool16 IsInfiltratedWeatherInstitute(struct WarpData *warp) -{ - if (VarGet(VAR_WEATHER_INSTITUTE_CLEARED)) - return FALSE; - if (warp->mapGroup != MAP_GROUP_ROUTE119_WEATHER_INSTITUTE_1F) - return FALSE; - if (warp->mapNum == MAP_ID_ROUTE119_WEATHER_INSTITUTE_1F - || warp->mapNum == MAP_ID_ROUTE119_WEATHER_INSTITUTE_2F) - return TRUE; - return FALSE; -} - -static u16 GetLocationMusic(struct WarpData *warp) -{ - if (ShouldLegendaryMusicPlayAtLocation(warp) == TRUE) - return LEGENDARY_MUSIC; - else if (IsInfiltratedWeatherInstitute(warp) == TRUE) - return BGM_TOZAN; - else - return Overworld_GetMapHeaderByGroupAndId(warp->mapGroup, warp->mapNum)->music; -} - -u16 sav1_map_get_music(void) -{ - u16 music; - - if (gSaveBlock1.location.mapGroup == MAP_GROUP_ROUTE111 - && gSaveBlock1.location.mapNum == MAP_ID_ROUTE111 - && GetSav1Weather() == 8) - return BGM_ASHROAD; - - music = GetLocationMusic(&gSaveBlock1.location); - if (music != 0x7FFF) - { - return music; - } - else - { - if (gSaveBlock1.pos.x < 24) - return BGM_DOORO_X1; - else - return BGM_GRANROAD; - } -} - -u16 warp1_target_get_music(void) -{ - u16 music = GetLocationMusic(&gUnknown_020297F8); - if (music != 0x7FFF) - { - return music; - } - else - { - if (gSaveBlock1.location.mapGroup == MAP_GROUP_MAUVILLE_CITY - && gSaveBlock1.location.mapNum == MAP_ID_MAUVILLE_CITY) - return BGM_DOORO_X1; - else - return BGM_GRANROAD; - } -} - -void call_map_music_set_to_zero(void) -{ - ResetMapMusic(); -} - -void sub_8053E90(void) -{ - u16 music = sav1_map_get_music(); - - if (music != LEGENDARY_MUSIC) - { - if (gSaveBlock1.battleMusic) - music = gSaveBlock1.battleMusic; - else if (Overworld_GetMapTypeOfSaveblockLocation() == MAP_TYPE_UNDERWATER) - music = BGM_DEEPDEEP; - else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING)) - music = BGM_NAMINORI; - } - - if (music != GetCurrentMapMusic()) - PlayNewMapMusic(music); -} - -void sav1_set_battle_music_maybe(u16 songNum) -{ - gSaveBlock1.battleMusic = songNum; -} - -void sav1_reset_battle_music_maybe(void) -{ - gSaveBlock1.battleMusic = 0; -} - -void sub_8053F0C(void) -{ - if (FlagGet(SPECIAL_FLAG_1) != TRUE) - { - u16 newMusic = warp1_target_get_music(); - u16 currentMusic = GetCurrentMapMusic(); - if (newMusic != LEGENDARY_MUSIC) - { - if (currentMusic == BGM_DEEPDEEP || currentMusic == BGM_NAMINORI) - return; - if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING)) - newMusic = BGM_NAMINORI; - } - if (newMusic != currentMusic) - { - if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE)) - FadeOutAndFadeInNewMapMusic(newMusic, 4, 4); - else - FadeOutAndPlayNewMapMusic(newMusic, 8); - } - } -} - -void sub_8053F84(void) -{ - u16 currentMusic = GetCurrentMapMusic(); - if (currentMusic != sav1_map_get_music()) - FadeOutAndPlayNewMapMusic(sav1_map_get_music(), 8); -} - -void Overworld_ChangeMusicTo(u16 newMusic) -{ - u16 currentMusic = GetCurrentMapMusic(); - if (currentMusic != newMusic && currentMusic != LEGENDARY_MUSIC) - FadeOutAndPlayNewMapMusic(newMusic, 8); -} - -u8 GetMapMusicFadeoutSpeed(void) -{ - struct MapHeader *mapHeader = warp1_get_mapheader(); - if (Overworld_MapTypeIsIndoors(mapHeader->mapType) == TRUE) - return 2; - else - return 4; -} - -void sub_8053FF8(void) -{ - u16 music = warp1_target_get_music(); - if (FlagGet(SPECIAL_FLAG_1) != TRUE && music != GetCurrentMapMusic()) - { - u8 speed = GetMapMusicFadeoutSpeed(); - FadeOutMapMusic(speed); - } -} - -bool8 sub_8054034(void) -{ - return IsNotWaitingForBGMStop(); -} - -void sub_8054044(void) -{ - FadeOutMapMusic(4); -} - -static void PlayAmbientCry(void) -{ - s16 x, y; - PlayerGetDestCoords(&x, &y); - if (sIsAmbientCryWaterMon != TRUE - || MetatileBehavior_IsSurfableWaterOrUnderwater(MapGridGetMetatileBehaviorAt(x, y))) - { - s8 pan = (Random() % 88) + 212; - s8 volume = (Random() % 30) + 50; - PlayCry2(sAmbientCrySpecies, pan, volume, 1); - } -} - -void UpdateAmbientCry(s16 *state, u16 *delayCounter) -{ - switch (*state) - { - case 0: - if (sAmbientCrySpecies == SPECIES_NONE) - *state = 4; - else - *state = 1; - break; - case 1: - *delayCounter = (Random() % 2400) + 1200; - *state = 3; - break; - case 2: - *delayCounter = (Random() % 1200) + 1200; - *state = 3; - break; - case 3: - (*delayCounter)--; - if (*delayCounter == 0) - { - PlayAmbientCry(); - *state = 2; - } - break; - case 4: - break; - } -} - -void ChooseAmbientCrySpecies(void) -{ - if ((gSaveBlock1.location.mapGroup == MAP_GROUP_ROUTE130 - && gSaveBlock1.location.mapNum == MAP_ID_ROUTE130) - && !IsMirageIslandPresent()) - { - // Only play water pokemon cries on this route - // when Mirage Island is not present - sIsAmbientCryWaterMon = TRUE; - sAmbientCrySpecies = GetLocalWaterMon(); - } - else - { - sAmbientCrySpecies = GetLocalWildMon(&sIsAmbientCryWaterMon); - } -} - -u8 GetMapTypeByGroupAndId(s8 mapGroup, s8 mapNum) -{ - return Overworld_GetMapHeaderByGroupAndId(mapGroup, mapNum)->mapType; -} - -u8 GetMapTypeByWarpData(struct WarpData *warp) -{ - return GetMapTypeByGroupAndId(warp->mapGroup, warp->mapNum); -} - -u8 Overworld_GetMapTypeOfSaveblockLocation(void) -{ - return GetMapTypeByWarpData(&gSaveBlock1.location); -} - -u8 get_map_type_from_warp0(void) -{ - return GetMapTypeByWarpData(&gUnknown_020297F0); -} - -bool8 is_map_type_1_2_3_5_or_6(u8 mapType) -{ - if (mapType == MAP_TYPE_ROUTE - || mapType == MAP_TYPE_TOWN - || mapType == MAP_TYPE_UNDERWATER - || mapType == MAP_TYPE_CITY - || mapType == MAP_TYPE_6) - return TRUE; - else - return FALSE; -} - -bool8 Overworld_MapTypeAllowsTeleportAndFly(u8 mapType) -{ - if (mapType == MAP_TYPE_ROUTE - || mapType == MAP_TYPE_TOWN - || mapType == MAP_TYPE_6 - || mapType == MAP_TYPE_CITY) - return TRUE; - else - return FALSE; -} - -bool8 Overworld_MapTypeIsIndoors(u8 mapType) -{ - if (mapType == MAP_TYPE_INDOOR - || mapType == MAP_TYPE_SECRET_BASE) - return TRUE; - else - return FALSE; -} - -u8 unref_sub_8054260(void) -{ - return Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.warp2.mapGroup, gSaveBlock1.warp2.mapNum)->regionMapSectionId; -} - -u8 sav1_map_get_name(void) -{ - return Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum)->regionMapSectionId; -} - -u8 sav1_map_get_battletype(void) -{ - return Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum)->battleType; -} - -void ResetSafariZoneFlag_(void) -{ - ResetSafariZoneFlag(); -} - -bool32 is_c1_link_related_active(void) -{ - if (gMain.callback1 == sub_8055354) - return TRUE; - else - return FALSE; -} - -void c1_overworld_normal(u16 newKeys, u16 heldKeys) -{ - struct FieldInput inputStruct; - - sub_8059204(); - FieldClearPlayerInput(&inputStruct); - FieldGetPlayerInput(&inputStruct, newKeys, heldKeys); - if (!ScriptContext2_IsEnabled()) - { - if (sub_8068024(&inputStruct) == 1) - { - ScriptContext2_Enable(); - HideMapNamePopup(); - } - else - { - player_step(inputStruct.dpadDirection, newKeys, heldKeys); - } - } -} - -void c1_overworld(void) -{ - if (gMain.callback2 == c2_overworld) - c1_overworld_normal(gMain.newKeys, gMain.heldKeys); -} - -void OverworldBasic(void) -{ - ScriptContext2_RunScript(); - RunTasks(); - AnimateSprites(); - CameraUpdate(); - UpdateCameraPanning(); - BuildOamBuffer(); - UpdatePaletteFade(); - sub_8072EDC(); -} - -void CB2_OverworldBasic(void) -{ - OverworldBasic(); -} - -void c2_overworld(void) -{ - int fading = (gPaletteFade.active != 0); - if (fading) - SetVBlankCallback(NULL); - OverworldBasic(); - if (fading) - SetFieldVBlankCallback(); -} - -void set_callback1(MainCallback cb) -{ - gMain.callback1 = cb; -} - -void sub_80543DC(u16 (*a1)(u32)) -{ - gUnknown_03000584 = a1; -} - -void sub_80543E8(void) -{ - if (gFieldCallback) - gFieldCallback(); - else - mapldr_default(); - gFieldCallback = NULL; -} - -void CB2_NewGame(void) -{ - FieldClearVBlankHBlankCallbacks(); - StopMapMusic(); - ResetSafariZoneFlag_(); - NewGameInitData(); - player_avatar_init_params_reset(); - PlayTimeCounter_Start(); - ScriptContext1_Init(); - ScriptContext2_Disable(); - gFieldCallback = ExecuteTruckSequence; - do_load_map_stuff_loop(&gMain.state); - SetFieldVBlankCallback(); - set_callback1(c1_overworld); - SetMainCallback2(c2_overworld); -} - -void CB2_WhiteOut(void) -{ - u8 val; - gMain.state++; - if (gMain.state >= 120) - { - FieldClearVBlankHBlankCallbacks(); - StopMapMusic(); - ResetSafariZoneFlag_(); - DoWhiteOut(); - player_avatar_init_params_reset(); - ScriptContext1_Init(); - ScriptContext2_Disable(); - gFieldCallback = sub_8080B60; - val = 0; - do_load_map_stuff_loop(&val); - SetFieldVBlankCallback(); - set_callback1(c1_overworld); - SetMainCallback2(c2_overworld); - } -} - -void CB2_LoadMap(void) -{ - FieldClearVBlankHBlankCallbacks(); - ScriptContext1_Init(); - ScriptContext2_Disable(); - set_callback1(NULL); - SetMainCallback2(sub_810CC80); - gMain.savedCallback = CB2_LoadMap2; -} - -void CB2_LoadMap2(void) -{ - do_load_map_stuff_loop(&gMain.state); - SetFieldVBlankCallback(); - set_callback1(c1_overworld); - SetMainCallback2(c2_overworld); -} - -void sub_8054534(void) -{ - if (!gMain.state) - { - FieldClearVBlankHBlankCallbacks(); - ScriptContext1_Init(); - ScriptContext2_Disable(); - set_callback1(NULL); - } - if (sub_805493C(&gMain.state, 1)) - { - SetFieldVBlankCallback(); - set_callback1(c1_overworld); - SetMainCallback2(c2_overworld); - } -} - -void sub_8054588(void) -{ - FieldClearVBlankHBlankCallbacks(); - gFieldCallback = sub_8080AC4; - SetMainCallback2(c2_80567AC); -} - -void c2_80567AC(void) -{ - if (sub_805483C(&gMain.state)) - { - SetFieldVBlankCallback(); - set_callback1(sub_8055354); - sub_80543DC(sub_8055390); - SetMainCallback2(c2_overworld); - } -} - -void c2_exit_to_overworld_2_switch(void) -{ - if (is_c1_link_related_active() == TRUE) - { - SetMainCallback2(c2_exit_to_overworld_2_link); - } - else - { - FieldClearVBlankHBlankCallbacks(); - SetMainCallback2(c2_exit_to_overworld_2_local); - } -} - -void c2_exit_to_overworld_2_local(void) -{ - if (sub_8054A4C(&gMain.state)) - { - SetFieldVBlankCallback(); - SetMainCallback2(c2_overworld); - } -} - -void c2_exit_to_overworld_2_link(void) -{ - if (!sub_8055870() && sub_8054A9C(&gMain.state)) - SetMainCallback2(c2_overworld); -} - -void sub_805465C(void) -{ - FieldClearVBlankHBlankCallbacks(); - StopMapMusic(); - sub_8054F70(); - set_callback1(sub_8055354); - sub_80543DC(sub_8055390); - gFieldCallback = sub_8080A3C; - ScriptContext1_Init(); - ScriptContext2_Disable(); - c2_exit_to_overworld_2_switch(); -} - -void sub_805469C(void) -{ - FieldClearVBlankHBlankCallbacks(); - gFieldCallback = atk17_seteffectuser; - c2_exit_to_overworld_2_switch(); -} - -void sub_80546B8(void) -{ - FieldClearVBlankHBlankCallbacks(); - gFieldCallback = sub_80809B0; - c2_exit_to_overworld_2_switch(); -} - -void c2_exit_to_overworld_1_continue_scripts_restart_music(void) -{ - FieldClearVBlankHBlankCallbacks(); - gFieldCallback = sub_8080990; - c2_exit_to_overworld_2_switch(); -} - -void sub_80546F0(void) -{ - FieldClearVBlankHBlankCallbacks(); - gFieldCallback = sub_8080B60; - c2_exit_to_overworld_2_switch(); -} - -void sub_805470C(void) -{ - if (gMapHeader.flags == 1 && sub_80BBB24() == 1) - ShowMapNamePopup(); - sub_8080B60(); -} - -void CB2_ContinueSavedGame(void) -{ - FieldClearVBlankHBlankCallbacks(); - StopMapMusic(); - ResetSafariZoneFlag_(); - LoadSaveblockMapHeader(); - LoadSaveblockMapObjScripts(); - UnfreezeMapObjects(); - DoTimeBasedEvents(); - sub_805308C(); - sub_8055FC0(); - PlayTimeCounter_Start(); - ScriptContext1_Init(); - ScriptContext2_Disable(); - if (GetSecretBase2Field_9() == 1) - { - ClearSecretBase2Field_9(); - sub_8053778(); - warp_in(); - SetMainCallback2(CB2_LoadMap); - } - else - { - gFieldCallback = sub_805470C; - set_callback1(c1_overworld); - c2_exit_to_overworld_2_switch(); - } -} - -void FieldClearVBlankHBlankCallbacks(void) -{ - u16 savedIme = REG_IME; - REG_IME = 0; - REG_IE &= ~INTR_FLAG_HBLANK; - REG_IE |= INTR_FLAG_VBLANK; - REG_IME = savedIme; - SetVBlankCallback(NULL); - SetHBlankCallback(NULL); -} - -void SetFieldVBlankCallback(void) -{ - SetVBlankCallback(VBlankCB_Field); -} - -void VBlankCB_Field(void) -{ - LoadOam(); - ProcessSpriteCopyRequests(); - sub_8089668(); - sub_8057A58(); - TransferPlttBuffer(); - sub_8072E74(); -} - -void sub_8054814(void) -{ - u8 val = Overworld_GetFlashLevel(); - if (val) - { - sub_80815E0(val); - sub_80895F8(gUnknown_08216694[0], gUnknown_08216694[1], gUnknown_08216694[2]); - } -} - -bool32 sub_805483C(u8 *a1) -{ - switch (*a1) - { - case 0: - FieldClearVBlankHBlankCallbacks(); - ScriptContext1_Init(); - ScriptContext2_Disable(); - sub_8054F70(); - sub_8054BA8(); - (*a1)++; - break; - case 1: - sub_8053994(1); - (*a1)++; - break; - case 2: - sub_8054D4C(1); - (*a1)++; - break; - case 3: - sub_8054E98(); - sub_8054D90(); - sub_8054EC8(); - sub_8054E60(); - (*a1)++; - break; - case 4: - sub_8054814(); - sub_8054C54(); - SetUpWindowConfig(&gWindowConfig_81E6C3C); - InitMenuWindow(&gWindowConfig_81E6CE4); - (*a1)++; - break; - case 5: - move_tilemap_camera_to_upper_left_corner(); - (*a1)++; - break; - case 6: - sub_8056D28(gMapHeader.mapData); - (*a1)++; - break; - case 7: - sub_8056D38(gMapHeader.mapData); - (*a1)++; - break; - case 8: - apply_map_tileset1_tileset2_palette(gMapHeader.mapData); - (*a1)++; - break; - case 9: - DrawWholeMapView(); - (*a1)++; - break; - case 10: - cur_mapheader_run_tileset_funcs_after_some_cpuset(); - (*a1)++; - break; - case 12: - sub_80543E8(); - (*a1)++; - break; - case 11: - (*a1)++; - break; - case 13: - return 1; - } - return 0; -} - -bool32 sub_805493C(u8 *a1, u32 a2) -{ - switch (*a1) - { - case 0: - FieldClearVBlankHBlankCallbacks(); - sub_8053994(a2); - (*a1)++; - break; - case 1: - sub_8054BA8(); - (*a1)++; - break; - case 2: - sub_8054D4C(a2); - (*a1)++; - break; - case 3: - mli4_mapscripts_and_other(); - sub_8054E34(); - (*a1)++; - break; - case 4: - sub_8054814(); - sub_8054C54(); - SetUpWindowConfig(&gWindowConfig_81E6C3C); - InitMenuWindow(&gWindowConfig_81E6CE4); - (*a1)++; - break; - case 5: - move_tilemap_camera_to_upper_left_corner(); - (*a1)++; - break; - case 6: - sub_8056D28(gMapHeader.mapData); - (*a1)++; - break; - case 7: - sub_8056D38(gMapHeader.mapData); - (*a1)++; - break; - case 8: - apply_map_tileset1_tileset2_palette(gMapHeader.mapData); - (*a1)++; - break; - case 9: - DrawWholeMapView(); - (*a1)++; - break; - case 10: - cur_mapheader_run_tileset_funcs_after_some_cpuset(); - (*a1)++; - break; - case 11: - if (gMapHeader.flags == 1 && sub_80BBB24() == 1) - ShowMapNamePopup(); - (*a1)++; - break; - case 12: - sub_80543E8(); - (*a1)++; - break; - case 13: - return 1; - } - return 0; -} - -bool32 sub_8054A4C(u8 *a1) -{ - switch (*a1) - { - case 0: - sub_8054BA8(); - sub_8054D4C(0); - sub_8054E20(); - sub_8054E34(); - (*a1)++; - break; - case 1: - sub_8054C2C(); - (*a1)++; - break; - case 2: - sub_80543E8(); - (*a1)++; - break; - case 3: - return 1; - } - return 0; -} - -bool32 sub_8054A9C(u8 *a1) -{ - switch (*a1) - { - case 0: - FieldClearVBlankHBlankCallbacks(); - sub_8054BA8(); - (*a1)++; - break; - case 1: - sub_8054D4C(1); - (*a1)++; - break; - case 2: - sub_8054F48(); - sub_8054E20(); - sub_8054E7C(); - (*a1)++; - break; - case 3: - sub_8054814(); - sub_8054C54(); - SetUpWindowConfig(&gWindowConfig_81E6C3C); - InitMenuWindow(&gWindowConfig_81E6CE4); - (*a1)++; - break; - case 4: - move_tilemap_camera_to_upper_left_corner(); - (*a1)++; - break; - case 5: - sub_8056D28(gMapHeader.mapData); - (*a1)++; - break; - case 6: - sub_8056D38(gMapHeader.mapData); - (*a1)++; - break; - case 7: - apply_map_tileset1_tileset2_palette(gMapHeader.mapData); - (*a1)++; - break; - case 8: - DrawWholeMapView(); - (*a1)++; - break; - case 9: - cur_mapheader_run_tileset_funcs_after_some_cpuset(); - (*a1)++; - break; - case 12: - sub_80543E8(); - (*a1)++; - break; - case 10: - case 11: - (*a1)++; - break; - case 13: - SetFieldVBlankCallback(); - (*a1)++; - return 1; - } - return 0; -} - -void do_load_map_stuff_loop(u8 *a1) -{ - while (!sub_805493C(a1, 0)) - ; -} - -void sub_8054BA8(void) -{ - u8 *addr; - u32 size; - - REG_DISPCNT = 0; - - remove_some_task(); - - DmaClear16(3, PLTT + 2, PLTT_SIZE - 2); - - addr = (void *)VRAM; - size = 0x18000; - while (1) - { - DmaFill16(3, 0, addr, 0x1000); - addr += 0x1000; - size -= 0x1000; - if (size <= 0x1000) - { - DmaFill16(3, 0, addr, size); - break; - } - } - - ResetOamRange(0, 128); - LoadOam(); -} - -void sub_8054C2C(void) -{ - sub_8054814(); - sub_8054C54(); - SetUpWindowConfig(&gWindowConfig_81E6C3C); - InitMenuWindow(&gWindowConfig_81E6CE4); - mapdata_load_assets_to_gpu_and_full_redraw(); -} - -void sub_8054C54(void) -{ - REG_MOSAIC = 0; - REG_WININ = 7967; - REG_WINOUT = 257; - REG_WIN0H = 255; - REG_WIN0V = 255; - REG_WIN1H = -1; - REG_WIN1V = -1; - REG_BLDCNT = gUnknown_081E29E0[1] | gUnknown_081E29E0[2] | gUnknown_081E29E0[3] | 0x1040; - REG_BLDALPHA = 1805; - *gBGHOffsetRegs[0] = 0; - *gBGVOffsetRegs[0] = 0; - *gBGControlRegs[0] = 0; - *gBGHOffsetRegs[1] = 0; - *gBGVOffsetRegs[1] = 0; - *gBGControlRegs[1] = 7489; - *gBGHOffsetRegs[2] = 0; - *gBGVOffsetRegs[2] = 0; - *gBGControlRegs[2] = 7234; - *gBGHOffsetRegs[3] = 0; - *gBGVOffsetRegs[3] = 0; - *gBGControlRegs[3] = 7747; - REG_DISPCNT = gUnknown_081E29D8[1] | 0x7060 | gUnknown_081E29D8[2] | gUnknown_081E29D8[0] | gUnknown_081E29D8[3]; -} - -void sub_8054D4C(u32 a1) -{ - ResetTasks(); - ResetSpriteData(); - ResetPaletteFade(); - dp12_8087EA4(); - ResetCameraUpdateInfo(); - InstallCameraPanAheadCallback(); - sub_805C7C4(0); - FieldEffectActiveListClear(); - InitFieldMessageBox(); - sub_807C828(); - sub_8080750(); - if (!a1) - SetUpFieldTasks(); - mapheader_run_script_with_tag_x5(); -} - -void sub_8054D90(void) -{ - gUnknown_0300489C = 0; - gUnknown_03004898 = 0; - sub_805AA98(); - sub_805B55C(0, 0); - mapheader_run_first_tag4_script_list_match(); -} - -void mli4_mapscripts_and_other(void) -{ - s16 x, y; - struct UnkPlayerStruct *player; - gUnknown_0300489C = 0; - gUnknown_03004898 = 0; - sub_805AA98(); - sav1_camera_get_focus_coords(&x, &y); - player = sub_8053AA8(); - InitPlayerAvatar(x, y, player->player_field_1, gSaveBlock2.playerGender); - SetPlayerAvatarTransitionFlags(player->player_field_0); - player_avatar_init_params_reset(); - sub_805B55C(0, 0); - ResetBerryTreeSparkleFlags(); - mapheader_run_first_tag4_script_list_match(); -} - -void sub_8054E20(void) -{ - sub_805B710(0, 0); - RotatingGate_InitPuzzleAndGraphics(); -} - -void sub_8054E34(void) -{ - gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_15 = 1; - InitCameraUpdateCallback(gPlayerAvatar.spriteId); -} - -void sub_8054E60(void) -{ - InitCameraUpdateCallback(sub_8055AE8(gUnknown_03004860)); -} - -void sub_8054E7C(void) -{ - InitCameraUpdateCallback(sub_8055AE8(gUnknown_03004860)); -} - -void sub_8054E98(void) -{ - u16 x, y; - sav1_camera_get_focus_coords(&x, &y); - sub_8056C50(x + gUnknown_03004860, y); -} - -void sub_8054EC8(void) -{ - u16 i; - u16 x, y; - - sav1_camera_get_focus_coords(&x, &y); - x -= gUnknown_03004860; - - for (i = 0; i < gFieldLinkPlayerCount; i++) - { - SpawnLinkPlayerMapObject(i, i + x, y, gLinkPlayers[i].gender); - CreateLinkPlayerSprite(i); - } - - sub_8055340(word_3002910); -} - -void sub_8054F48(void) -{ - u16 i; - for (i = 0; i < gFieldLinkPlayerCount; i++) - CreateLinkPlayerSprite(i); -} - -void sub_8054F70(void) -{ - int i; - for (i = 0; i < 4; i++) - gUnknown_03000580[i] = 0x80; -} - -bool32 sub_8054F88(u16 a1) -{ - int i; - int count = gFieldLinkPlayerCount; - - for (i = 0; i < count; i++) - if (gUnknown_03000580[i] != a1) - return FALSE; - return TRUE; -} - -bool32 sub_8054FC0(u16 a1) -{ - int i; - int count = gFieldLinkPlayerCount; - - for (i = 0; i < count; i++) - if (gUnknown_03000580[i] == a1) - return TRUE; - return FALSE; -} - -void sub_8054FF8(u32 a1, u16 a2, struct UnkStruct_8054FF8 *a3, u16 *a4) -{ - u8 *script; - - if (gUnknown_03000580[a1] == 0x80) - { - script = sub_8055648(a3); - if (script) - { - *a4 = sub_8055758(script); - gUnknown_03000580[a1] = 0x81; - if (a3->b) - { - sub_80543DC(sub_80553E4); - sub_8055808(script); - } - return; - } - if (sub_8054FC0(0x83) == 1) - { - gUnknown_03000580[a1] = 0x81; - if (a3->b) - { - sub_80543DC(sub_80553E4); - sub_805585C(); - } - return; - } - switch (a2) - { - case 24: - if (sub_8055630(a3)) - { - gUnknown_03000580[a1] = 0x81; - if (a3->b) - { - sub_80543DC(sub_80553E4); - sub_80557F4(); - } - } - break; - case 18: - if (sub_8055660(a3) == 1) - { - gUnknown_03000580[a1] = 0x81; - if (a3->b) - { - sub_80543DC(sub_80553E4); - sub_8055824(); - } - } - break; - case 25: - script = sub_805568C(a3); - if (script) - { - gUnknown_03000580[a1] = 0x81; - if (a3->b) - { - sub_80543DC(sub_80553E4); - sub_8055840(script); - } - } - break; - case 27: - if (sub_8055618(a3)) - { - gUnknown_03000580[a1] = 0x81; - if (a3->b) - { - sub_80543DC(sub_8055408); - sub_80557E8(); - } - } - break; - case 28: - if (sub_8055618(a3)) - { - gUnknown_03000580[a1] = 0x81; - if (a3->b) - { - sub_80543DC(sub_8055438); - sub_80557E8(); - } - } - break; - } - } - - switch (a2) - { - case 23: - gUnknown_03000580[a1] = 0x83; - break; - case 22: - gUnknown_03000580[a1] = 0x82; - break; - case 26: - gUnknown_03000580[a1] = 0x80; - if (a3->b) - sub_80543DC(sub_8055390); - break; - case 29: - if (gUnknown_03000580[a1] == 0x82) - gUnknown_03000580[a1] = 0x81; - break; - } -} - -void sub_8055218(u16 *a1, int a2) -{ - struct UnkStruct_8054FF8 st; - int i; - for (i = 0; i < 4; i++) - { - u16 v5 = a1[i]; - u16 v8 = 0; - sub_80555B0(i, a2, &st); - sub_8054FF8(i, v5, &st, &v8); - if (gUnknown_03000580[i] == 0x80) - v8 = sub_805530C(v5); - sub_8055BFC(i, v8); - } -} - -void sub_8055280(u16 a1) -{ - if (a1 >= 17 && a1 < 30) - word_3004858 = a1; - else - word_3004858 = 17; -} - -u16 sub_80552B0(u32 a1) -{ - if (gMain.heldKeys & 0x40) - { - return 19; - } - else if (gMain.heldKeys & 0x80) - { - return 18; - } - else if (gMain.heldKeys & 0x20) - { - return 20; - } - else if (gMain.heldKeys & 0x10) - { - return 21; - } - else if (gMain.newKeys & 8) - { - return 24; - } - else if (gMain.newKeys & 1) - { - return 25; - } - else - { - return 17; - } -} - -u16 sub_805530C(u16 a1) -{ - switch (a1) - { - case 21: - return 4; - case 20: - return 3; - case 19: - return 1; - case 18: - return 2; - default: - return 0; - } -} - -void sub_8055340(u16 *a1) -{ - int i; - for (i = 0; i < 4; i++) - a1[i] = 17; -} - -void sub_8055354(void) -{ - u8 val = gUnknown_03004860; - sub_8055218(word_3002910, val); - sub_8055280(gUnknown_03000584(val)); - sub_8055340(word_3002910); -} - -u16 sub_8055390(u32 a1) -{ - if (ScriptContext2_IsEnabled() == 1) - return 17; - if (gLink.recvQueue.count > 4) - return 27; - if (gLink.sendQueue.count <= 4) - return sub_80552B0(a1); - return 28; -} - -u16 sub_80553E0(u32 a1) -{ - return 17; -} - -u16 sub_80553E4(u32 a1) -{ - u16 retVal; - if (ScriptContext2_IsEnabled() == 1) - { - retVal = 17; - } - else - { - retVal = 26; - sub_80543DC(sub_80553E0); - } - return retVal; -} - -u16 sub_8055408(u32 a1) -{ - u16 retVal; - if (gLink.recvQueue.count > 2) - { - retVal = 17; - } - else - { - retVal = 26; - ScriptContext2_Disable(); - sub_80543DC(sub_80553E0); - } - return retVal; -} - -u16 sub_8055438(u32 a1) -{ - u16 retVal; - if (gLink.sendQueue.count > 2) - { - retVal = 17; - } - else - { - retVal = 26; - ScriptContext2_Disable(); - sub_80543DC(sub_80553E0); - } - return retVal; -} - -u16 sub_8055468(u32 a1) -{ - return 17; -} - -u16 sub_805546C(u32 linkPlayerId) -{ - if (gUnknown_03000580[linkPlayerId] == 0x82 && (gMain.newKeys & B_BUTTON)) - { - sub_80543DC(sub_8055468); - return 29; - } - else - { - return 17; - } -} - -u16 sub_80554A4(u32 a1) -{ - sub_80543DC(sub_805546C); - return 22; -} - -u16 sub_80554B8(u32 a1) -{ - return 17; -} - -u16 sub_80554BC(u32 a1) -{ - if (sub_8054F88(0x83) == TRUE) - { - ScriptContext1_SetupScript(gUnknown_081A4508); - sub_80543DC(sub_80554B8); - } - return 17; -} - -u16 sub_80554E4(u32 a1) -{ - sub_80543DC(sub_80554BC); - return 23; -} - -u32 sub_80554F8(void) -{ - if (sub_8054FC0(0x83) == TRUE) - return 2; - if (gUnknown_03000584 == sub_805546C && gUnknown_03000580[gUnknown_03004860] != 0x82) - return 0; - if (gUnknown_03000584 == sub_8055468 && gUnknown_03000580[gUnknown_03004860] == 0x81) - return 2; - return sub_8054F88(0x82); -} - -bool32 unref_sub_8055568(void) -{ - return sub_8054FC0(0x83); -} - -u16 sub_8055574(void) -{ - sub_80543DC(sub_80554A4); - return 0; -} - -u16 sub_8055588(void) -{ - sub_80543DC(sub_80553E4); - return 0; -} - -u16 sub_805559C(void) -{ - sub_80543DC(sub_80554E4); - return 0; -} - -void sub_80555B0(int linkPlayerId, int a2, struct UnkStruct_8054FF8 *a3) -{ - s16 x, y; - - a3->a = linkPlayerId; - a3->b = (linkPlayerId == a2) ? 1 : 0; - a3->c = gLinkPlayerMapObjects[linkPlayerId].mode; - a3->d = sub_8055B30(linkPlayerId); - sub_8055B08(linkPlayerId, &x, &y); - a3->sub.x = x; - a3->sub.y = y; - a3->sub.height = sub_8055B50(linkPlayerId); - a3->field_C = MapGridGetMetatileBehaviorAt(x, y); -} - -bool32 sub_8055618(struct UnkStruct_8054FF8 *a1) -{ - u8 v1 = a1->c; - if (v1 == 2 || v1 == 0) - return TRUE; - else - return FALSE; -} - -bool32 sub_8055630(struct UnkStruct_8054FF8 *a1) -{ - u8 v1 = a1->c; - if (v1 == 2 || v1 == 0) - return TRUE; - else - return FALSE; -} - -u8 *sub_8055648(struct UnkStruct_8054FF8 *a1) -{ - if (a1->c != 2) - return 0; - return sub_8068E24(&a1->sub); -} - -bool32 sub_8055660(struct UnkStruct_8054FF8 *a1) -{ - if (a1->c != 2 && a1->c != 0) - return FALSE; - if (!MetatileBehavior_IsSouthArrowWarp(a1->field_C)) - return FALSE; - if (a1->d != 1) - return FALSE; - return TRUE; -} - -u8 *sub_805568C(struct UnkStruct_8054FF8 *a1) -{ - struct MapPosition unkStruct; - u8 linkPlayerId; - - if (a1->c && a1->c != 2) - return 0; - - unkStruct = a1->sub; - unkStruct.x += gUnknown_0821664C[a1->d].x; - unkStruct.y += gUnknown_0821664C[a1->d].y; - unkStruct.height = 0; - linkPlayerId = GetLinkPlayerIdAt(unkStruct.x, unkStruct.y); - - if (linkPlayerId != 4) - { - if (!a1->b) - return TradeRoom_TooBusyToNotice; - if (gUnknown_03000580[linkPlayerId] != 0x80) - return TradeRoom_TooBusyToNotice; - if (!sub_8083BF4(linkPlayerId)) - return TradeRoom_ReadTrainerCard1; - else - return TradeRoom_ReadTrainerCard2; - } - - return sub_80682A8(&unkStruct, a1->field_C, a1->d); -} - -u16 sub_8055758(u8 *script) -{ - if (script == DoubleBattleColosseum_EventScript_1A4383) - return 10; - if (script == DoubleBattleColosseum_EventScript_1A439E) - return 9; - if (script == DoubleBattleColosseum_EventScript_1A43B9) - return 10; - if (script == DoubleBattleColosseum_EventScript_1A43D4) - return 9; - if (script == RecordCorner_EventScript_1A4418) - return 10; - if (script == RecordCorner_EventScript_1A442D) - return 9; - if (script == RecordCorner_EventScript_1A4442) - return 10; - if (script == RecordCorner_EventScript_1A4457) - return 9; - if (script == SingleBattleColosseum_EventScript_1A436F) - return 10; - if (script == SingleBattleColosseum_EventScript_1A4379) - return 9; - if (script == TradeCenter_EventScript_1A43F0) - return 10; - if (script == TradeCenter_EventScript_1A43FA) - return 9; - return 0; -} - -void sub_80557E8(void) -{ - ScriptContext2_Enable(); -} - -void sub_80557F4(void) -{ - PlaySE(SE_WIN_OPEN); - sub_8071310(); - ScriptContext2_Enable(); -} - -void sub_8055808(u8 *script) -{ - PlaySE(SE_SELECT); - ScriptContext1_SetupScript(script); - ScriptContext2_Enable(); -} - -void sub_8055824(void) -{ - PlaySE(SE_WIN_OPEN); - ScriptContext1_SetupScript(TradeRoom_PromptToCancelLink); - ScriptContext2_Enable(); -} - -void sub_8055840(u8 *script) -{ - PlaySE(SE_SELECT); - ScriptContext1_SetupScript(script); - ScriptContext2_Enable(); -} - -void sub_805585C(void) -{ - ScriptContext1_SetupScript(TradeRoom_TerminateLink); - ScriptContext2_Enable(); -} - -bool32 sub_8055870(void) -{ - if (!is_c1_link_related_active()) - return 0; - if (gLink.recvQueue.count >= 3) - gUnknown_03000588 = 1; - else - gUnknown_03000588 = 0; - return gUnknown_03000588; -} - -bool32 sub_80558AC(void) -{ - u8 temp; - - if (is_c1_link_related_active() != TRUE) - return FALSE; - - if (sub_8007B24() != TRUE) - return FALSE; - - if (gUnknown_03000584 == sub_8055408) - return TRUE; - - if (gUnknown_03000584 != sub_80553E4) - return FALSE; - - temp = gUnknown_03000588; - gUnknown_03000588 = 0; - - if (temp == TRUE) - return TRUE; - - if (gPaletteFade.active && gPaletteFade.softwareFadeFinishing) - return TRUE; - - return FALSE; -} - -bool32 sub_8055910(void) -{ - if (is_c1_link_related_active() != TRUE) - return FALSE; - - if (sub_8007B24() != TRUE) - return FALSE; - - if (gUnknown_03000584 == sub_8055438) - return TRUE; - - return FALSE; -} - -bool32 sub_8055940(void) -{ - if (!sub_8007B24()) - return FALSE; - return TRUE; -} - -void ZeroLinkPlayerMapObject(struct LinkPlayerMapObject *linkPlayerMapObj) -{ - memset(linkPlayerMapObj, 0, sizeof(struct LinkPlayerMapObject)); -} - -void strange_npc_table_clear(void) -{ - memset(gLinkPlayerMapObjects, 0, sizeof(gLinkPlayerMapObjects)); -} - -void ZeroMapObject(struct MapObject *mapObj) -{ - memset(mapObj, 0, sizeof(struct MapObject)); -} - -void SpawnLinkPlayerMapObject(u8 linkPlayerId, s16 x, s16 y, u8 a4) -{ - u8 mapObjId = sub_805AB54(); - struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[linkPlayerId]; - struct MapObject *mapObj = &gMapObjects[mapObjId]; - - ZeroLinkPlayerMapObject(linkPlayerMapObj); - ZeroMapObject(mapObj); - - linkPlayerMapObj->active = 1; - linkPlayerMapObj->linkPlayerId = linkPlayerId; - linkPlayerMapObj->mapObjId = mapObjId; - linkPlayerMapObj->mode = 0; - - mapObj->active = 1; - mapObj->mapobj_bit_1 = a4; - mapObj->mapobj_unk_19 = 2; - mapObj->spriteId = 64; - - InitLinkPlayerMapObjectPos(mapObj, x, y); -} - -void InitLinkPlayerMapObjectPos(struct MapObject *mapObj, s16 x, s16 y) -{ - mapObj->coords2.x = x; - mapObj->coords2.y = y; - mapObj->coords3.x = x; - mapObj->coords3.y = y; - sub_80603CC(x, y, &mapObj->coords1.x, &mapObj->coords1.y); - mapObj->coords1.x += 8; - FieldObjectUpdateZCoord(mapObj); -} - -void unref_sub_8055A6C(u8 linkPlayerId, u8 a2) -{ - if (gLinkPlayerMapObjects[linkPlayerId].active) - { - u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId; - struct MapObject *mapObj = &gMapObjects[mapObjId]; - mapObj->mapobj_unk_19 = a2; - } -} - -void unref_sub_8055A9C(u8 linkPlayerId) -{ - struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[linkPlayerId]; - u8 mapObjId = linkPlayerMapObj->mapObjId; - struct MapObject *mapObj = &gMapObjects[mapObjId]; - if (mapObj->spriteId != 64 ) - DestroySprite(&gSprites[mapObj->spriteId]); - linkPlayerMapObj->active = 0; - mapObj->active = 0; -} - -u8 sub_8055AE8(u8 linkPlayerId) -{ - u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId; - struct MapObject *mapObj = &gMapObjects[mapObjId]; - return mapObj->spriteId; -} - -void sub_8055B08(u8 linkPlayerId, u16 *x, u16 *y) -{ - u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId; - struct MapObject *mapObj = &gMapObjects[mapObjId]; - *x = mapObj->coords2.x; - *y = mapObj->coords2.y; -} - -u8 sub_8055B30(u8 linkPlayerId) -{ - u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId; - struct MapObject *mapObj = &gMapObjects[mapObjId]; - return mapObj->mapobj_unk_19; -} - -u8 sub_8055B50(u8 linkPlayerId) -{ - u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId; - struct MapObject *mapObj = &gMapObjects[mapObjId]; - return mapObj->mapobj_unk_0B_0; -} - -s32 unref_sub_8055B74(u8 linkPlayerId) -{ - u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId; - struct MapObject *mapObj = &gMapObjects[mapObjId]; - return 16 - (s8)mapObj->mapobj_unk_21; -} - -u8 GetLinkPlayerIdAt(s16 x, s16 y) -{ - u8 i; - for (i = 0; i < 4; i++) - { - if (gLinkPlayerMapObjects[i].active - && (gLinkPlayerMapObjects[i].mode == 0 || gLinkPlayerMapObjects[i].mode == 2)) - { - struct MapObject *mapObj = &gMapObjects[gLinkPlayerMapObjects[i].mapObjId]; - if (mapObj->coords2.x == x && mapObj->coords2.y == y) - return i; - } - } - return 4; -} - -void sub_8055BFC(u8 linkPlayerId, u8 a2) -{ - struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[linkPlayerId]; - u8 mapObjId = linkPlayerMapObj->mapObjId; - struct MapObject *mapObj = &gMapObjects[mapObjId]; - - if (linkPlayerMapObj->active) - { - if (a2 > 10) - mapObj->mapobj_bit_2 = 1; - else - gUnknown_082166D8[gUnknown_082166A0[linkPlayerMapObj->mode](linkPlayerMapObj, mapObj, a2)](linkPlayerMapObj, mapObj); - } -} - -u8 sub_8055C68(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) -{ - return gUnknown_082166AC[a3](linkPlayerMapObj, mapObj, a3); -} - -u8 sub_8055C88(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) -{ - return 1; -} - -u8 sub_8055C8C(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) -{ - return gUnknown_082166AC[a3](linkPlayerMapObj, mapObj, a3); -} - -u8 sub_8055CAC(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) -{ - return 0; -} - -u8 sub_8055CB0(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) -{ - s16 x, y; - - mapObj->mapobj_unk_19 = npc_something3(a3, mapObj->mapobj_unk_19); - FieldObjectMoveDestCoords(mapObj, mapObj->mapobj_unk_19, &x, &y); - - if (LinkPlayerDetectCollision(linkPlayerMapObj->mapObjId, mapObj->mapobj_unk_19, x, y)) - { - return 0; - } - else - { - mapObj->mapobj_unk_21 = 16; - npc_coords_shift(mapObj, x, y); - FieldObjectUpdateZCoord(mapObj); - return 1; - } -} - -u8 sub_8055D18(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) -{ - mapObj->mapobj_unk_19 = npc_something3(a3, mapObj->mapobj_unk_19); - return 0; -} - -void sub_8055D30(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj) -{ - linkPlayerMapObj->mode = 0; -} - -void sub_8055D38(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj) -{ - mapObj->mapobj_unk_21--; - linkPlayerMapObj->mode = 1; - MoveCoords(mapObj->mapobj_unk_19, &mapObj->coords1.x, &mapObj->coords1.y); - if (!mapObj->mapobj_unk_21) - { - npc_coords_shift_still(mapObj); - linkPlayerMapObj->mode = 2; - } -} - -u8 npc_something3(u8 a1, u8 a2) -{ - switch (a1 - 1) - { - case 0: - case 6: - return 2; - case 1: - case 7: - return 1; - case 2: - case 8: - return 3; - case 3: - case 9: - return 4; - } - return a2; -} - -u8 LinkPlayerDetectCollision(u8 selfMapObjId, u8 a2, s16 x, s16 y) -{ - u8 i; - for (i = 0; i < 16; i++) - { - if (i != selfMapObjId) - { - if ((gMapObjects[i].coords2.x == x && gMapObjects[i].coords2.y == y) - || (gMapObjects[i].coords3.x == x && gMapObjects[i].coords3.y == y)) - { - return 1; - } - } - } - return MapGridIsImpassableAt(x, y); -} - -void CreateLinkPlayerSprite(u8 linkPlayerId) -{ - struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[linkPlayerId]; - u8 mapObjId = linkPlayerMapObj->mapObjId; - struct MapObject *mapObj = &gMapObjects[mapObjId]; - struct Sprite *sprite; - - if (linkPlayerMapObj->active) - { - u8 val = GetRivalAvatarGraphicsIdByStateIdAndGender(0, mapObj->mapobj_bit_1); - mapObj->spriteId = AddPseudoFieldObject(val, SpriteCB_LinkPlayer, 0, 0, 0); - sprite = &gSprites[mapObj->spriteId]; - sprite->coordOffsetEnabled = TRUE; - sprite->data0 = linkPlayerId; - mapObj->mapobj_bit_2 = 0; - } -} - -void SpriteCB_LinkPlayer(struct Sprite *sprite) -{ - struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[sprite->data0]; - struct MapObject *mapObj = &gMapObjects[linkPlayerMapObj->mapObjId]; - sprite->pos1.x = mapObj->coords1.x; - sprite->pos1.y = mapObj->coords1.y; - SetObjectSubpriorityByZCoord(mapObj->elevation, sprite, 1); - sprite->oam.priority = ZCoordToPriority(mapObj->elevation); - if (!linkPlayerMapObj->mode) - StartSpriteAnim(sprite, FieldObjectDirectionToImageAnimId(mapObj->mapobj_unk_19)); - else - StartSpriteAnimIfDifferent(sprite, get_go_image_anim_num(mapObj->mapobj_unk_19)); - sub_806487C(sprite, 0); - if (mapObj->mapobj_bit_2) - { - sprite->invisible = ((sprite->data7 & 4) >> 2); - sprite->data7++; - } -} diff --git a/src/rom6.c b/src/rom6.c index 9308dfe0c..3dc7c2fa8 100644 --- a/src/rom6.c +++ b/src/rom6.c @@ -6,7 +6,7 @@ #include "field_player_avatar.h" #include "item_use.h" #include "pokemon_menu.h" -#include "rom4.h" +#include "overworld.h" #include "script.h" #include "songs.h" #include "sound.h" diff --git a/src/safari_zone.c b/src/safari_zone.c index a47c8e951..d15ff7567 100644 --- a/src/safari_zone.c +++ b/src/safari_zone.c @@ -4,7 +4,7 @@ #include "field_fadetransition.h" #include "field_player_avatar.h" #include "main.h" -#include "rom4.h" +#include "overworld.h" #include "script.h" #include "string_util.h" #include "text.h" diff --git a/src/save.c b/src/save.c index adf39268e..eae3f4470 100644 --- a/src/save.c +++ b/src/save.c @@ -3,7 +3,7 @@ #include "gba/flash_internal.h" #include "save.h" #include "load_save.h" -#include "rom4.h" +#include "overworld.h" #include "save_failed_screen.h" #define GETVALIDSTATUSBITFIELD ((1 << ARRAY_COUNT(gSaveSectionLocations)) - 1) diff --git a/src/scrcmd.c b/src/scrcmd.c index 6a746b65d..d8b762ed8 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -31,7 +31,7 @@ #include "party_menu.h" #include "pokemon.h" #include "rng.h" -#include "rom4.h" +#include "overworld.h" #include "rtc.h" #include "script.h" #include "script_menu.h" diff --git a/src/script_pokemon_util_80C4BF0.c b/src/script_pokemon_util_80C4BF0.c index 6a60a5402..8133d8ac0 100644 --- a/src/script_pokemon_util_80C4BF0.c +++ b/src/script_pokemon_util_80C4BF0.c @@ -18,7 +18,7 @@ #include "pokedex.h" #include "pokemon.h" #include "rng.h" -#include "rom4.h" +#include "overworld.h" #include "script_pokemon_80C4.h" #include "species.h" #include "task.h" diff --git a/src/script_pokemon_util_80F99CC.c b/src/script_pokemon_util_80F99CC.c index 2b48cc0d8..04418b31b 100644 --- a/src/script_pokemon_util_80F99CC.c +++ b/src/script_pokemon_util_80F99CC.c @@ -9,7 +9,7 @@ #include "party_menu.h" #include "pokemon.h" #include "pokemon_summary_screen.h" -#include "rom4.h" +#include "overworld.h" #include "script.h" #include "script_pokemon_80F9.h" #include "sound.h" diff --git a/src/secret_base.c b/src/secret_base.c index 4e8331f5c..16f7c4e2c 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -14,7 +14,7 @@ #include "metatile_behavior.h" #include "palette.h" #include "pokemon.h" -#include "rom4.h" +#include "overworld.h" #include "script.h" #include "string_util.h" #include "strings.h" diff --git a/src/shop.c b/src/shop.c index 10c530a45..22250b1c4 100644 --- a/src/shop.c +++ b/src/shop.c @@ -23,7 +23,7 @@ #include "decoration.h" #include "items.h" #include "songs.h" -#include "rom4.h" +#include "overworld.h" #include "decoration_inventory.h" #include "field_camera.h" diff --git a/src/start_menu.c b/src/start_menu.c index 411690aff..7e3af9886 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -15,7 +15,7 @@ #include "pokedex.h" #include "pokemon_menu.h" #include "pokenav.h" -#include "rom4.h" +#include "overworld.h" #include "safari_zone.h" #include "save.h" #include "save_menu_util.h" diff --git a/src/time_events.c b/src/time_events.c index ab3d6b9d4..c316f73ce 100644 --- a/src/time_events.c +++ b/src/time_events.c @@ -4,7 +4,7 @@ #include "field_weather.h" #include "pokemon.h" #include "rng.h" -#include "rom4.h" +#include "overworld.h" #include "rtc.h" #include "script.h" #include "task.h" diff --git a/src/trainer_card.c b/src/trainer_card.c index e64ec1c86..bcb62ede6 100644 --- a/src/trainer_card.c +++ b/src/trainer_card.c @@ -10,7 +10,7 @@ #include "money.h" #include "palette.h" #include "pokedex.h" -#include "rom4.h" +#include "overworld.h" #include "script_pokemon_80C4.h" #include "songs.h" #include "sound.h" diff --git a/src/tv.c b/src/tv.c index 996709209..fab465742 100644 --- a/src/tv.c +++ b/src/tv.c @@ -15,7 +15,7 @@ #include "species.h" #include "pokedex.h" #include "naming_screen.h" -#include "rom4.h" +#include "overworld.h" #include "map_constants.h" #include "strings.h" #include "battle.h" @@ -31,7 +31,7 @@ #include "pokedex.h" #include "region_map.h" #include "rng.h" -#include "rom4.h" +#include "overworld.h" #include "rtc.h" #include "script_menu.h" #include "species.h" diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 0c8f59959..be3003680 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -5,7 +5,7 @@ #include "global.h" #include "main.h" -#include "rom4.h" +#include "overworld.h" #include "string_util.h" #include "strings.h" #include "sprite.h" diff --git a/src/wild_encounter.c b/src/wild_encounter.c index f7f005737..519cd7893 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -10,7 +10,7 @@ #include "pokeblock.h" #include "rng.h" #include "roamer.h" -#include "rom4.h" +#include "overworld.h" #include "safari_zone.h" #include "script.h" #include "species.h" diff --git a/sym_bss.txt b/sym_bss.txt index 088c7d7ba..ab1d8c280 100644 --- a/sym_bss.txt +++ b/sym_bss.txt @@ -30,7 +30,7 @@ gUnknown_03000508: @ 3000508 .include "src/berry_blender.o" .include "src/play_time.o" - .include "src/rom4.o" + .include "src/overworld.o" @ unused variable? .align 2 diff --git a/sym_common.txt b/sym_common.txt index 6d65557ce..d9da3ec3b 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -118,7 +118,7 @@ gUnknown_03004828: @ 3004828 .space 0x8 .include "berry_blender.o" - .include "rom4.o" + .include "overworld.o" .include "fieldmap.o" .include "field_camera.o" .include "field_map_obj.o" diff --git a/sym_ewram.txt b/sym_ewram.txt index 8c6999307..040173cfd 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -310,7 +310,7 @@ gUnknown_020297D8: @ 20297D8 .include "src/berry_blender.o" .include "src/new_game.o" - .include "src/rom4.o" + .include "src/overworld.o" .include "src/fieldmap.o" .include "src/field_camera.o" .include "src/field_player_avatar.o" -- cgit v1.2.3 From 6123b076ccbd43a83e4a971ff3c6b2b4c95718cc Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Tue, 12 Sep 2017 17:01:05 -0500 Subject: fix German build --- data-de/event_scripts.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data-de/event_scripts.s b/data-de/event_scripts.s index 82b39c849..5549ca7cc 100644 --- a/data-de/event_scripts.s +++ b/data-de/event_scripts.s @@ -1325,7 +1325,7 @@ EverGrandeCity_HallOfFame_EventScript_19FC70:: @ 819FC70 setflag 2141 return -EventScript_LeagueWhiteOut:: @ 819FC74 +S_WhiteOut:: @ 819FC74 call EverGrandeCity_HallOfFame_EventScript_19FD09 call EventScript_19FC84 jump gUnknown_0819FC9F -- cgit v1.2.3 From 02104e52ddfcbd2a8a00af5d8b169b732e84a7cb Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Tue, 12 Sep 2017 17:26:13 -0500 Subject: move data to overworld.c --- data/rom4.s | 66 ---------------------- include/overworld.h | 2 +- include/unknown_task.h | 16 +++++- ld_script.txt | 2 +- src/overworld.c | 146 +++++++++++++++++++++++++++++++++++++------------ src/unknown_task.c | 15 ++--- 6 files changed, 130 insertions(+), 117 deletions(-) delete mode 100644 data/rom4.s diff --git a/data/rom4.s b/data/rom4.s deleted file mode 100644 index 6f883c64c..000000000 --- a/data/rom4.s +++ /dev/null @@ -1,66 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - - .align 2 -gDummyWarpData:: @ 8216624 - .byte -1 - .byte -1 - .byte -1 - .space 1 - .2byte -1 - .2byte -1 - -@ unused, unknown data - .byte 0xB0, 0x04, 0x00, 0x00 - .byte 0x10, 0x0E, 0x00, 0x00 - .byte 0xB0, 0x04, 0x00, 0x00 - .byte 0x60, 0x09, 0x00, 0x00 - .byte 0x32, 0x00, 0x00, 0x00 - .byte 0x50, 0x00, 0x00, 0x00 - .byte 0xD4, 0xFF, 0xFF, 0xFF - .byte 0x2C, 0x00, 0x00, 0x00 - - .align 2 -gUnknown_0821664C:: @ 821664C - .4byte 0, 0 - .4byte 0, 1 - .4byte 0, -1 - .4byte -1, 0 - .4byte 1, 0 - .4byte -1, 1 - .4byte 1, 1 - .4byte -1, -1 - .4byte 1, -1 - - .align 2 -gUnknown_08216694:: @ 8216694 - .4byte REG_WIN0H - .4byte ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1 - .4byte 1 - - .align 2 -gUnknown_082166A0:: @ 82166A0 - .4byte sub_8055C68 - .4byte sub_8055C88 - .4byte sub_8055C8C - - .align 2 -gUnknown_082166AC:: @ 82166AC - .4byte sub_8055CAC - .4byte sub_8055CB0 - .4byte sub_8055CB0 - .4byte sub_8055CB0 - .4byte sub_8055CB0 - .4byte sub_8055CAC - .4byte sub_8055CAC - .4byte sub_8055D18 - .4byte sub_8055D18 - .4byte sub_8055D18 - .4byte sub_8055D18 - - .align 2 -gUnknown_082166D8:: @ 82166D8 - .4byte sub_8055D30 - .4byte sub_8055D38 diff --git a/include/overworld.h b/include/overworld.h index 81f37ae8b..fcdc8ed97 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -22,7 +22,7 @@ struct UCoords32 u32 x, y; }; -extern struct UCoords32 gUnknown_0821664C[]; +extern const struct UCoords32 gUnknown_0821664C[]; extern void (*gFieldCallback)(void); // sub_8052F5C diff --git a/include/unknown_task.h b/include/unknown_task.h index dc07767d6..d7ac63931 100644 --- a/include/unknown_task.h +++ b/include/unknown_task.h @@ -1,14 +1,24 @@ #ifndef GUARD_UNKNOWN_TASK_H #define GUARD_UNKNOWN_TASK_H +struct UnknownTaskStruct +{ + volatile void *dest; + u32 control; + u8 unk8; + u8 unk9; +}; + void remove_some_task(void); void remove_some_task(void); void dp12_8087EA4(void); void dp12_8087EA4(void); -void sub_80895F8(u32 i, u32 i1, u32 i2); -void sub_80895F8(); +//void sub_80895F8(u32 i, u32 i1, u32 i2); +//void sub_80895F8(); +void sub_80895F8(struct UnknownTaskStruct unk); void sub_8089668(void); void sub_8089668(); -void sub_8089944(int i, int i1, int i2, int i3, int i4, int i5, int i6); +//void sub_8089944(int i, int i1, int i2, int i3, int i4, int i5, int i6); +u8 sub_8089944(u8 a1, u8 a2, u8 a3, u8 a4, u8 a5, u8 a6, u8 a7); #endif // GUARD_UNKNOWN_TASK_H diff --git a/ld_script.txt b/ld_script.txt index dc1f4752f..7648f98c7 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -341,7 +341,7 @@ SECTIONS { data/trade.o(.rodata); src/berry_blender.o(.rodata); src/new_game.o(.rodata); - data/rom4.o(.rodata); + src/overworld.o(.rodata); data/tilesets.o(.rodata); data/maps.o(.rodata); src/fieldmap.o(.rodata); diff --git a/src/overworld.c b/src/overworld.c index 119b25a79..c3b503a2f 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -62,24 +62,6 @@ struct UnkTVStruct u32 tv_field_4; }; -EWRAM_DATA struct WarpData gUnknown_020297F0 = {0}; -EWRAM_DATA struct WarpData gUnknown_020297F8 = {0}; -EWRAM_DATA struct WarpData gUnknown_02029800 = {0}; -EWRAM_DATA struct WarpData gUnknown_02029808 = {0}; -EWRAM_DATA struct UnkPlayerStruct gUnknown_02029810 = {0}; -EWRAM_DATA static u16 sAmbientCrySpecies = 0; -EWRAM_DATA static bool8 sIsAmbientCryWaterMon = FALSE; -EWRAM_DATA struct LinkPlayerMapObject gLinkPlayerMapObjects[4] = {0}; - -static u8 gUnknown_03000580[4]; -static u16 (*gUnknown_03000584)(u32); -static u8 gUnknown_03000588; - -u16 word_3004858; -void (*gFieldCallback)(void); -u8 gUnknown_03004860; -u8 gFieldLinkPlayerCount; - extern u16 gUnknown_03004898; extern u16 gUnknown_0300489C; @@ -104,15 +86,109 @@ extern u8 TradeRoom_PromptToCancelLink[]; extern u8 TradeRoom_TerminateLink[]; extern u8 gUnknown_081A4508[]; -extern u8 (*gUnknown_082166A0[])(struct LinkPlayerMapObject *, struct MapObject *, u8); -extern u8 (*gUnknown_082166AC[])(struct LinkPlayerMapObject *, struct MapObject *, u8); -extern void (*gUnknown_082166D8[])(struct LinkPlayerMapObject *, struct MapObject *); - extern struct MapData * const gMapAttributes[]; extern struct MapHeader * const * const gMapGroups[]; -extern const struct WarpData gDummyWarpData; extern s32 gMaxFlashLevel; -extern u32 gUnknown_08216694[]; + +EWRAM_DATA struct WarpData gUnknown_020297F0 = {0}; +EWRAM_DATA struct WarpData gUnknown_020297F8 = {0}; +EWRAM_DATA struct WarpData gUnknown_02029800 = {0}; +EWRAM_DATA struct WarpData gUnknown_02029808 = {0}; +EWRAM_DATA struct UnkPlayerStruct gUnknown_02029810 = {0}; +EWRAM_DATA static u16 sAmbientCrySpecies = 0; +EWRAM_DATA static bool8 sIsAmbientCryWaterMon = FALSE; +EWRAM_DATA struct LinkPlayerMapObject gLinkPlayerMapObjects[4] = {0}; + +static u8 gUnknown_03000580[4]; +static u16 (*gUnknown_03000584)(u32); +static u8 gUnknown_03000588; + +u16 word_3004858; +void (*gFieldCallback)(void); +u8 gUnknown_03004860; +u8 gFieldLinkPlayerCount; + +static const struct WarpData sDummyWarpData = +{ + .mapGroup = -1, + .mapNum = -1, + .warpId = -1, + .x = -1, + .y = -1, +}; + +static const u8 sUnusedData[] = +{ + 0xB0, 0x04, 0x00, 0x00, + 0x10, 0x0E, 0x00, 0x00, + 0xB0, 0x04, 0x00, 0x00, + 0x60, 0x09, 0x00, 0x00, + 0x32, 0x00, 0x00, 0x00, + 0x50, 0x00, 0x00, 0x00, + 0xD4, 0xFF, 0xFF, 0xFF, + 0x2C, 0x00, 0x00, 0x00, +}; + +const struct UCoords32 gUnknown_0821664C[] = +{ + { 0, 0}, + { 0, 1}, + { 0, -1}, + {-1, 0}, + { 1, 0}, + {-1, 1}, + { 1, 1}, + {-1, -1}, + { 1, -1}, +}; + +const struct UnknownTaskStruct gUnknown_08216694 = +{ + (void *)REG_ADDR_WIN0H, + ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1, + 1, + 0, +}; + +static u8 sub_8055C68(struct LinkPlayerMapObject *, struct MapObject *, u8); +static u8 sub_8055C88(struct LinkPlayerMapObject *, struct MapObject *, u8); +static u8 sub_8055C8C(struct LinkPlayerMapObject *, struct MapObject *, u8); + +static u8 (*const gUnknown_082166A0[])(struct LinkPlayerMapObject *, struct MapObject *, u8) = +{ + sub_8055C68, + sub_8055C88, + sub_8055C8C, +}; + +static u8 sub_8055CAC(struct LinkPlayerMapObject *, struct MapObject *, u8); +static u8 sub_8055CB0(struct LinkPlayerMapObject *, struct MapObject *, u8); +static u8 sub_8055D18(struct LinkPlayerMapObject *, struct MapObject *, u8); + +static u8 (*const gUnknown_082166AC[])(struct LinkPlayerMapObject *, struct MapObject *, u8) = +{ + sub_8055CAC, + sub_8055CB0, + sub_8055CB0, + sub_8055CB0, + sub_8055CB0, + sub_8055CAC, + sub_8055CAC, + sub_8055D18, + sub_8055D18, + sub_8055D18, + sub_8055D18, +}; + +static void sub_8055D30(struct LinkPlayerMapObject *, struct MapObject *); +static void sub_8055D38(struct LinkPlayerMapObject *, struct MapObject *); + +static void (*const gUnknown_082166D8[])(struct LinkPlayerMapObject *, struct MapObject *) = +{ + sub_8055D30, + sub_8055D38, +}; + static void DoWhiteOut(void) { @@ -274,8 +350,8 @@ static void warp_shift(void) { gUnknown_020297F0 = gSaveBlock1.location; gSaveBlock1.location = gUnknown_020297F8; - gUnknown_02029800 = gDummyWarpData; - gUnknown_02029808 = gDummyWarpData; + gUnknown_02029800 = sDummyWarpData; + gUnknown_02029808 = sDummyWarpData; } static void warp_set(struct WarpData *warp, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y) @@ -1335,7 +1411,7 @@ void sub_8054814(void) if (val) { sub_80815E0(val); - sub_80895F8(gUnknown_08216694[0], gUnknown_08216694[1], gUnknown_08216694[2]); + sub_80895F8(gUnknown_08216694); } } @@ -2448,27 +2524,27 @@ void sub_8055BFC(u8 linkPlayerId, u8 a2) } } -u8 sub_8055C68(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) +static u8 sub_8055C68(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) { return gUnknown_082166AC[a3](linkPlayerMapObj, mapObj, a3); } -u8 sub_8055C88(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) +static u8 sub_8055C88(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) { return 1; } -u8 sub_8055C8C(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) +static u8 sub_8055C8C(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) { return gUnknown_082166AC[a3](linkPlayerMapObj, mapObj, a3); } -u8 sub_8055CAC(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) +static u8 sub_8055CAC(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) { return 0; } -u8 sub_8055CB0(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) +static u8 sub_8055CB0(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) { s16 x, y; @@ -2488,18 +2564,18 @@ u8 sub_8055CB0(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *m } } -u8 sub_8055D18(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) +static u8 sub_8055D18(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) { mapObj->mapobj_unk_19 = npc_something3(a3, mapObj->mapobj_unk_19); return 0; } -void sub_8055D30(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj) +static void sub_8055D30(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj) { linkPlayerMapObj->mode = 0; } -void sub_8055D38(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj) +static void sub_8055D38(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj) { mapObj->mapobj_unk_21--; linkPlayerMapObj->mode = 1; diff --git a/src/unknown_task.c b/src/unknown_task.c index 81b89ef92..5ec7fa6bc 100644 --- a/src/unknown_task.c +++ b/src/unknown_task.c @@ -2,11 +2,12 @@ #include "data2.h" #include "task.h" #include "trig.h" +#include "unknown_task.h" struct UnknownStruct1 { void *src[2]; - void *dest; + volatile void *dest; u32 unkC; void (*unk10)(void); u8 srcBank; @@ -17,14 +18,6 @@ struct UnknownStruct1 u8 filler19[0x7]; }; -struct UnknownStruct2 -{ - void *dest; - u32 control; - u8 unk8; - u8 unk9; -}; - static void sub_80896F4(void); static void sub_8089714(void); @@ -68,7 +61,7 @@ void dp12_8087EA4(void) gUnknown_03004DC0.taskId = 0xFF; } -void sub_80895F8(struct UnknownStruct2 unk) +void sub_80895F8(struct UnknownTaskStruct unk) { if (unk.control == (((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1)) { @@ -214,7 +207,7 @@ u8 sub_8089944(u8 a1, u8 a2, u8 a3, u8 a4, u8 a5, u8 a6, u8 a7) { int i; int offset; - struct UnknownStruct2 unk; + struct UnknownTaskStruct unk; u8 taskId; dp12_8087EA4(); -- cgit v1.2.3 From 2c87516ca3efa260b96b92ededb24d75edfe49e8 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Tue, 12 Sep 2017 20:23:23 -0500 Subject: more labels and fix build --- data-de/event_scripts.s | 56 +++---- data/event_scripts.s | 59 +++---- data/field_move_scripts.inc | 2 +- data/scripts/cable_club.inc | 6 +- data/scripts/maps/BattleTower_Lobby.inc | 2 +- data/scripts/maps/LilycoveCity_ContestLobby.inc | 2 +- data/scripts/maps/MossdeepCity_GameCorner_1F.inc | 2 +- data/scripts/pokeblocks.inc | 2 +- data/specials.inc | 4 +- include/data2.h | 9 +- include/menu.h | 2 +- include/start_menu.h | 2 +- include/wild_encounter.h | 4 +- src/battle_2.c | 3 +- src/cable_club.c | 2 +- src/field_player_avatar.c | 203 +++++++++++++---------- src/field_screen_effect.c | 7 +- src/menu.c | 2 +- src/menu_helpers.c | 2 +- src/mystery_event_menu.c | 22 +-- src/naming_screen.c | 2 +- src/overworld.c | 1 + src/secret_base.c | 2 +- src/start_menu.c | 4 +- src/tv.c | 1 - src/wild_encounter.c | 4 +- 26 files changed, 214 insertions(+), 193 deletions(-) diff --git a/data-de/event_scripts.s b/data-de/event_scripts.s index 5549ca7cc..ba7fedac6 100644 --- a/data-de/event_scripts.s +++ b/data-de/event_scripts.s @@ -919,13 +919,13 @@ Std_5: @ 819F805 return -BattleTower_Lobby_EventScript_19F806:: @ 819F806 -FallarborTown_ContestLobby_EventScript_19F806:: @ 819F806 -LilycoveCity_ContestLobby_EventScript_19F806:: @ 819F806 -MossdeepCity_GameCorner_1F_EventScript_19F806:: @ 819F806 -OldaleTown_PokemonCenter_2F_EventScript_19F806:: @ 819F806 -SecretBase_RedCave1_EventScript_19F806:: @ 819F806 - special InitSaveDialog +S_DoSaveDialog:: @ 819F806 +S_DoSaveDialog:: @ 819F806 +S_DoSaveDialog:: @ 819F806 +S_DoSaveDialog:: @ 819F806 +S_DoSaveDialog:: @ 819F806 +S_DoSaveDialog:: @ 819F806 + special ScrSpecial_DoSaveDialog waitstate return @@ -1438,7 +1438,7 @@ SootopolisCity_PokemonCenter_1F_EventScript_19FD5B:: @ 819FD5B VerdanturfTown_PokemonCenter_1F_EventScript_19FD5B:: @ 819FD5B lock faceplayer - msgbox OldaleTown_PokemonCenter_1F_Text_1A0A7D, 5 + msgbox gText_NurseJoy_Welcome, 5 compare RESULT, 1 jumpeq OldaleTown_PokemonCenter_1F_EventScript_19FD7C compare RESULT, 0 @@ -1447,7 +1447,7 @@ VerdanturfTown_PokemonCenter_1F_EventScript_19FD5B:: @ 819FD5B OldaleTown_PokemonCenter_1F_EventScript_19FD7C:: @ 819FD7C inccounter GAME_STAT_USED_POKECENTER - message OldaleTown_PokemonCenter_1F_Text_1A1245 + message gText_NurseJoy_OkayIllTakeYourPokemon waittext move 0x800b, OldaleTown_PokemonCenter_1F_Movement_1A083F waitmove 0 @@ -1462,16 +1462,16 @@ OldaleTown_PokemonCenter_1F_EventScript_19FD7C:: @ 819FD7C end OldaleTown_PokemonCenter_1F_EventScript_19FDB0:: @ 819FDB0 - message OldaleTown_PokemonCenter_1F_Text_1A0B14 + message gText_NurseJoy_ThankYouForWaiting waittext move 0x800b, OldaleTown_PokemonCenter_1F_Movement_19FDF4 waitmove 0 - message OldaleTown_PokemonCenter_1F_Text_1A0AFA + message gText_NurseJoy_WeHopeToSeeYouAgain waittext return OldaleTown_PokemonCenter_1F_EventScript_19FDC7:: @ 819FDC7 - message OldaleTown_PokemonCenter_1F_Text_1A0AFA + message gText_NurseJoy_WeHopeToSeeYouAgain waittext return @@ -1484,7 +1484,7 @@ OldaleTown_PokemonCenter_1F_EventScript_19FDCE:: @ 819FDCE end OldaleTown_PokemonCenter_1F_EventScript_19FDEA:: @ 819FDEA - message OldaleTown_PokemonCenter_1F_Text_1A1275 + message gText_NurseJoy_Pokerus waittext setflag 273 return @@ -2986,16 +2986,16 @@ UnknownString_81A0A54: @ 81A0A54 UnknownString_81A0A66: @ 81A0A66 .string "Verbindung zu LANETTES PC hergestellt.$" -OldaleTown_PokemonCenter_1F_Text_1A0A7D:: @ 81A0A7D +gText_NurseJoy_Welcome:: @ 81A0A7D .string "Willkommen im POKéMON-CENTER!\p" .string "Wir heilen deine POKéMON und\n" .string "machen sie wieder fit.\p" .string "O.K. Wir benötigen deine POKéMON.$" -OldaleTown_PokemonCenter_1F_Text_1A0AFA:: @ 81A0AFA +gText_NurseJoy_WeHopeToSeeYouAgain:: @ 81A0AFA .string "Komm jederzeit wieder vorbei!$" -OldaleTown_PokemonCenter_1F_Text_1A0B14:: @ 81A0B14 +gText_NurseJoy_ThankYouForWaiting:: @ 81A0B14 .string "Danke!\p" .string "Deine POKéMON sind wieder topfit!$" @@ -3214,11 +3214,11 @@ SlateportCity_Text_1A116E:: @ 81A116E .string "nehmen und dir unter der Hand tolle\l" .string "Sachen verkaufen.$" -OldaleTown_PokemonCenter_1F_Text_1A1245:: @ 81A1245 +gText_NurseJoy_OkayIllTakeYourPokemon:: @ 81A1245 .string "Okay, ich nehme deine POKéMON für einen\n" .string "Moment in meine Obhut.$" -OldaleTown_PokemonCenter_1F_Text_1A1275:: @ 81A1275 +gText_NurseJoy_Pokerus:: @ 81A1275 .string "Dein POKéMON scheint von dem\n" .string "POKéRUS befallen zu sein.\p" .string "Über den POKéRUS ist bisher wenig be-\n" @@ -3965,7 +3965,7 @@ SecretBase_RedCave1_EventScript_1A3032:: @ 81A3032 jumpeq SecretBase_RedCave1_EventScript_1A308F setvar RESULT, 1 special sub_80BCE4C - call SecretBase_RedCave1_EventScript_19F806 + call S_DoSaveDialog compare RESULT, 0 jumpeq SecretBase_RedCave1_EventScript_1A308F hidebox 0, 0, 15, 10 @@ -4000,7 +4000,7 @@ SecretBase_RedCave1_EventScript_1A30AE:: @ 81A30AE jumpeq SecretBase_RedCave1_EventScript_1A310B setvar RESULT, 1 special sub_80BCE4C - call SecretBase_RedCave1_EventScript_19F806 + call S_DoSaveDialog compare RESULT, 0 jumpeq SecretBase_RedCave1_EventScript_1A310B hidebox 0, 0, 15, 10 @@ -4035,7 +4035,7 @@ SecretBase_RedCave1_EventScript_1A312A:: @ 81A312A jumpeq SecretBase_RedCave1_EventScript_1A3187 setvar RESULT, 1 special sub_80BCE4C - call SecretBase_RedCave1_EventScript_19F806 + call S_DoSaveDialog compare RESULT, 0 jumpeq SecretBase_RedCave1_EventScript_1A3187 hidebox 0, 0, 15, 10 @@ -4070,7 +4070,7 @@ SecretBase_RedCave1_EventScript_1A31A6:: @ 81A31A6 jumpeq SecretBase_RedCave1_EventScript_1A3203 setvar RESULT, 1 special sub_80BCE4C - call SecretBase_RedCave1_EventScript_19F806 + call S_DoSaveDialog compare RESULT, 0 jumpeq SecretBase_RedCave1_EventScript_1A3203 hidebox 0, 0, 15, 10 @@ -4105,7 +4105,7 @@ SecretBase_RedCave1_EventScript_1A3222:: @ 81A3222 jumpeq SecretBase_RedCave1_EventScript_1A327F setvar RESULT, 1 special sub_80BCE4C - call SecretBase_RedCave1_EventScript_19F806 + call S_DoSaveDialog compare RESULT, 0 jumpeq SecretBase_RedCave1_EventScript_1A327F hidebox 0, 0, 15, 10 @@ -4140,7 +4140,7 @@ SecretBase_RedCave1_EventScript_1A329E:: @ 81A329E jumpeq SecretBase_RedCave1_EventScript_1A32FB setvar RESULT, 1 special sub_80BCE4C - call SecretBase_RedCave1_EventScript_19F806 + call S_DoSaveDialog compare RESULT, 0 jumpeq SecretBase_RedCave1_EventScript_1A32FB hidebox 0, 0, 15, 10 @@ -4175,7 +4175,7 @@ SecretBase_RedCave1_EventScript_1A331A:: @ 81A331A jumpeq SecretBase_RedCave1_EventScript_1A3377 setvar RESULT, 1 special sub_80BCE4C - call SecretBase_RedCave1_EventScript_19F806 + call S_DoSaveDialog compare RESULT, 0 jumpeq SecretBase_RedCave1_EventScript_1A3377 hidebox 0, 0, 15, 10 @@ -4210,7 +4210,7 @@ SecretBase_RedCave1_EventScript_1A3396:: @ 81A3396 jumpeq SecretBase_RedCave1_EventScript_1A33F3 setvar RESULT, 1 special sub_80BCE4C - call SecretBase_RedCave1_EventScript_19F806 + call S_DoSaveDialog compare RESULT, 0 jumpeq SecretBase_RedCave1_EventScript_1A33F3 hidebox 0, 0, 15, 10 @@ -4245,7 +4245,7 @@ SecretBase_RedCave1_EventScript_1A3412:: @ 81A3412 jumpeq SecretBase_RedCave1_EventScript_1A346F setvar RESULT, 1 special sub_80BCE4C - call SecretBase_RedCave1_EventScript_19F806 + call S_DoSaveDialog compare RESULT, 0 jumpeq SecretBase_RedCave1_EventScript_1A346F hidebox 0, 0, 15, 10 @@ -4280,7 +4280,7 @@ SecretBase_RedCave1_EventScript_1A348E:: @ 81A348E jumpeq SecretBase_RedCave1_EventScript_1A34EB setvar RESULT, 1 special sub_80BCE4C - call SecretBase_RedCave1_EventScript_19F806 + call S_DoSaveDialog compare RESULT, 0 jumpeq SecretBase_RedCave1_EventScript_1A34EB hidebox 0, 0, 15, 10 diff --git a/data/event_scripts.s b/data/event_scripts.s index 3ea5cee24..171581dd9 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -918,13 +918,8 @@ Std_5: @ 819F805 return -BattleTower_Lobby_EventScript_19F806:: @ 819F806 -FallarborTown_ContestLobby_EventScript_19F806:: @ 819F806 -LilycoveCity_ContestLobby_EventScript_19F806:: @ 819F806 -MossdeepCity_GameCorner_1F_EventScript_19F806:: @ 819F806 -OldaleTown_PokemonCenter_2F_EventScript_19F806:: @ 819F806 -SecretBase_RedCave1_EventScript_19F806:: @ 819F806 - special InitSaveDialog +S_DoSaveDialog:: @ 819F806 + special ScrSpecial_DoSaveDialog waitstate return @@ -1437,16 +1432,16 @@ SootopolisCity_PokemonCenter_1F_EventScript_19FD5B:: @ 819FD5B VerdanturfTown_PokemonCenter_1F_EventScript_19FD5B:: @ 819FD5B lock faceplayer - msgbox OldaleTown_PokemonCenter_1F_Text_1A0A7D, 5 + msgbox gText_NurseJoy_Welcome, MSGBOX_YESNO compare RESULT, 1 - jumpeq OldaleTown_PokemonCenter_1F_EventScript_19FD7C + jumpeq do_heal_party compare RESULT, 0 - jumpeq OldaleTown_PokemonCenter_1F_EventScript_19FDC7 + jumpeq dont_heal_party end -OldaleTown_PokemonCenter_1F_EventScript_19FD7C:: @ 819FD7C +do_heal_party:: @ 819FD7C inccounter GAME_STAT_USED_POKECENTER - message OldaleTown_PokemonCenter_1F_Text_1A1245 + message gText_NurseJoy_OkayIllTakeYourPokemon waittext move 0x800b, OldaleTown_PokemonCenter_1F_Movement_1A083F waitmove 0 @@ -1461,16 +1456,16 @@ OldaleTown_PokemonCenter_1F_EventScript_19FD7C:: @ 819FD7C end OldaleTown_PokemonCenter_1F_EventScript_19FDB0:: @ 819FDB0 - message OldaleTown_PokemonCenter_1F_Text_1A0B14 + message gText_NurseJoy_ThankYouForWaiting waittext move 0x800b, OldaleTown_PokemonCenter_1F_Movement_19FDF4 waitmove 0 - message OldaleTown_PokemonCenter_1F_Text_1A0AFA + message gText_NurseJoy_WeHopeToSeeYouAgain waittext return -OldaleTown_PokemonCenter_1F_EventScript_19FDC7:: @ 819FDC7 - message OldaleTown_PokemonCenter_1F_Text_1A0AFA +dont_heal_party:: @ 819FDC7 + message gText_NurseJoy_WeHopeToSeeYouAgain waittext return @@ -1483,7 +1478,7 @@ OldaleTown_PokemonCenter_1F_EventScript_19FDCE:: @ 819FDCE end OldaleTown_PokemonCenter_1F_EventScript_19FDEA:: @ 819FDEA - message OldaleTown_PokemonCenter_1F_Text_1A1275 + message gText_NurseJoy_Pokerus waittext setflag 273 return @@ -2985,17 +2980,17 @@ UnknownString_81A0A54: @ 81A0A54 UnknownString_81A0A66: @ 81A0A66 .string "Accessed LANETTE’s PC.$" -OldaleTown_PokemonCenter_1F_Text_1A0A7D:: @ 81A0A7D +gText_NurseJoy_Welcome:: @ 81A0A7D .string "Hello, and welcome to the POKéMON\n" .string "CENTER.\p" .string "We restore your tired POKéMON to\n" .string "full health.\p" .string "Would you like to rest your POKéMON?$" -OldaleTown_PokemonCenter_1F_Text_1A0AFA:: @ 81A0AFA +gText_NurseJoy_WeHopeToSeeYouAgain:: @ 81A0AFA .string "We hope to see you again!$" -OldaleTown_PokemonCenter_1F_Text_1A0B14:: @ 81A0B14 +gText_NurseJoy_ThankYouForWaiting:: @ 81A0B14 .string "Thank you for waiting.\p" .string "We’ve restored your POKéMON to\n" .string "full health.$" @@ -3209,11 +3204,11 @@ SlateportCity_Text_1A116E:: @ 81A116E .string "We’ll accept you as a member and sell\n" .string "you good stuff in secrecy.$" -OldaleTown_PokemonCenter_1F_Text_1A1245:: @ 81A1245 +gText_NurseJoy_OkayIllTakeYourPokemon:: @ 81A1245 .string "Okay, I’ll take your POKéMON for a\n" .string "few seconds.$" -OldaleTown_PokemonCenter_1F_Text_1A1275:: @ 81A1275 +gText_NurseJoy_Pokerus:: @ 81A1275 .string "Your POKéMON may be infected with\n" .string "POKéRUS.\p" .string "Little is known about the POKéRUS\n" @@ -3949,7 +3944,7 @@ SecretBase_RedCave1_EventScript_1A3032:: @ 81A3032 jumpeq SecretBase_RedCave1_EventScript_1A308F setvar RESULT, 1 special sub_80BCE4C - call SecretBase_RedCave1_EventScript_19F806 + call S_DoSaveDialog compare RESULT, 0 jumpeq SecretBase_RedCave1_EventScript_1A308F hidebox 0, 0, 15, 10 @@ -3984,7 +3979,7 @@ SecretBase_RedCave1_EventScript_1A30AE:: @ 81A30AE jumpeq SecretBase_RedCave1_EventScript_1A310B setvar RESULT, 1 special sub_80BCE4C - call SecretBase_RedCave1_EventScript_19F806 + call S_DoSaveDialog compare RESULT, 0 jumpeq SecretBase_RedCave1_EventScript_1A310B hidebox 0, 0, 15, 10 @@ -4019,7 +4014,7 @@ SecretBase_RedCave1_EventScript_1A312A:: @ 81A312A jumpeq SecretBase_RedCave1_EventScript_1A3187 setvar RESULT, 1 special sub_80BCE4C - call SecretBase_RedCave1_EventScript_19F806 + call S_DoSaveDialog compare RESULT, 0 jumpeq SecretBase_RedCave1_EventScript_1A3187 hidebox 0, 0, 15, 10 @@ -4054,7 +4049,7 @@ SecretBase_RedCave1_EventScript_1A31A6:: @ 81A31A6 jumpeq SecretBase_RedCave1_EventScript_1A3203 setvar RESULT, 1 special sub_80BCE4C - call SecretBase_RedCave1_EventScript_19F806 + call S_DoSaveDialog compare RESULT, 0 jumpeq SecretBase_RedCave1_EventScript_1A3203 hidebox 0, 0, 15, 10 @@ -4089,7 +4084,7 @@ SecretBase_RedCave1_EventScript_1A3222:: @ 81A3222 jumpeq SecretBase_RedCave1_EventScript_1A327F setvar RESULT, 1 special sub_80BCE4C - call SecretBase_RedCave1_EventScript_19F806 + call S_DoSaveDialog compare RESULT, 0 jumpeq SecretBase_RedCave1_EventScript_1A327F hidebox 0, 0, 15, 10 @@ -4124,7 +4119,7 @@ SecretBase_RedCave1_EventScript_1A329E:: @ 81A329E jumpeq SecretBase_RedCave1_EventScript_1A32FB setvar RESULT, 1 special sub_80BCE4C - call SecretBase_RedCave1_EventScript_19F806 + call S_DoSaveDialog compare RESULT, 0 jumpeq SecretBase_RedCave1_EventScript_1A32FB hidebox 0, 0, 15, 10 @@ -4159,7 +4154,7 @@ SecretBase_RedCave1_EventScript_1A331A:: @ 81A331A jumpeq SecretBase_RedCave1_EventScript_1A3377 setvar RESULT, 1 special sub_80BCE4C - call SecretBase_RedCave1_EventScript_19F806 + call S_DoSaveDialog compare RESULT, 0 jumpeq SecretBase_RedCave1_EventScript_1A3377 hidebox 0, 0, 15, 10 @@ -4194,7 +4189,7 @@ SecretBase_RedCave1_EventScript_1A3396:: @ 81A3396 jumpeq SecretBase_RedCave1_EventScript_1A33F3 setvar RESULT, 1 special sub_80BCE4C - call SecretBase_RedCave1_EventScript_19F806 + call S_DoSaveDialog compare RESULT, 0 jumpeq SecretBase_RedCave1_EventScript_1A33F3 hidebox 0, 0, 15, 10 @@ -4229,7 +4224,7 @@ SecretBase_RedCave1_EventScript_1A3412:: @ 81A3412 jumpeq SecretBase_RedCave1_EventScript_1A346F setvar RESULT, 1 special sub_80BCE4C - call SecretBase_RedCave1_EventScript_19F806 + call S_DoSaveDialog compare RESULT, 0 jumpeq SecretBase_RedCave1_EventScript_1A346F hidebox 0, 0, 15, 10 @@ -4264,7 +4259,7 @@ SecretBase_RedCave1_EventScript_1A348E:: @ 81A348E jumpeq SecretBase_RedCave1_EventScript_1A34EB setvar RESULT, 1 special sub_80BCE4C - call SecretBase_RedCave1_EventScript_19F806 + call S_DoSaveDialog compare RESULT, 0 jumpeq SecretBase_RedCave1_EventScript_1A34EB hidebox 0, 0, 15, 10 diff --git a/data/field_move_scripts.inc b/data/field_move_scripts.inc index 315217055..acf5e9e17 100644 --- a/data/field_move_scripts.inc +++ b/data/field_move_scripts.inc @@ -90,7 +90,7 @@ DoRockSmashMovement: @ 81B0F0C specialval RESULT, sub_810F5BC compare RESULT, 1 jumpeq DoRockSmashMovement_Done - special RockSmashWildEncounter + special ScrSpecial_RockSmashWildEncounter compare RESULT, 0 jumpeq DoRockSmashMovement_Done waitstate diff --git a/data/scripts/cable_club.inc b/data/scripts/cable_club.inc index 4a919c597..5728b52d8 100644 --- a/data/scripts/cable_club.inc +++ b/data/scripts/cable_club.inc @@ -191,7 +191,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A3EBC:: @ 81A3EBC case 127, OldaleTown_PokemonCenter_2F_EventScript_1A4319 OldaleTown_PokemonCenter_2F_EventScript_1A3EF2:: @ 81A3EF2 - call OldaleTown_PokemonCenter_2F_EventScript_19F806 + call S_DoSaveDialog compare RESULT, 0 jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A4319 call OldaleTown_PokemonCenter_2F_EventScript_1A3FEF @@ -361,7 +361,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A40FA:: @ 81A40FA call OldaleTown_PokemonCenter_2F_EventScript_1A41BB compare RESULT, 0 jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A4319 - call OldaleTown_PokemonCenter_2F_EventScript_19F806 + call S_DoSaveDialog compare RESULT, 0 jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A4319 message OldaleTown_PokemonCenter_2F_Text_1A490C @@ -455,7 +455,7 @@ VerdanturfTown_PokemonCenter_2F_EventScript_1A41FB:: @ 81A41FB jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A4229 OldaleTown_PokemonCenter_2F_EventScript_1A4229:: @ 81A4229 - call OldaleTown_PokemonCenter_2F_EventScript_19F806 + call S_DoSaveDialog compare RESULT, 0 jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A4319 message OldaleTown_PokemonCenter_2F_Text_1A490C diff --git a/data/scripts/maps/BattleTower_Lobby.inc b/data/scripts/maps/BattleTower_Lobby.inc index 8cd3639a5..a1570ac13 100644 --- a/data/scripts/maps/BattleTower_Lobby.inc +++ b/data/scripts/maps/BattleTower_Lobby.inc @@ -242,7 +242,7 @@ BattleTower_Lobby_EventScript_160587:: @ 8160587 special LoadPlayerParty closebutton pause 2 - call BattleTower_Lobby_EventScript_19F806 + call S_DoSaveDialog setvar 0x4000, 5 hidebox 0, 0, 15, 10 compare RESULT, 0 diff --git a/data/scripts/maps/LilycoveCity_ContestLobby.inc b/data/scripts/maps/LilycoveCity_ContestLobby.inc index 3c8cc5bdf..6bdcf55e2 100644 --- a/data/scripts/maps/LilycoveCity_ContestLobby.inc +++ b/data/scripts/maps/LilycoveCity_ContestLobby.inc @@ -330,7 +330,7 @@ LilycoveCity_ContestLobby_EventScript_158BC4:: @ 8158BC4 msgbox LilycoveCity_ContestLobby_Text_188521, 5 compare RESULT, 0 jumpeq LilycoveCity_ContestLobby_EventScript_158C35 - call LilycoveCity_ContestLobby_EventScript_19F806 + call S_DoSaveDialog hidebox 0, 0, 15, 9 compare RESULT, 0 jumpeq LilycoveCity_ContestLobby_EventScript_158C35 diff --git a/data/scripts/maps/MossdeepCity_GameCorner_1F.inc b/data/scripts/maps/MossdeepCity_GameCorner_1F.inc index 14836f3e0..59669596a 100644 --- a/data/scripts/maps/MossdeepCity_GameCorner_1F.inc +++ b/data/scripts/maps/MossdeepCity_GameCorner_1F.inc @@ -103,7 +103,7 @@ MossdeepCity_GameCorner_1F_EventScript_15AD59:: @ 815AD59 compare RESULT, 0 callif 1, MossdeepCity_GameCorner_1F_EventScript_15ADE8 special LoadPlayerParty - call MossdeepCity_GameCorner_1F_EventScript_19F806 + call S_DoSaveDialog compare RESULT, 0 jumpeq MossdeepCity_GameCorner_1F_EventScript_15ADE8 hidebox 0, 0, 15, 10 diff --git a/data/scripts/pokeblocks.inc b/data/scripts/pokeblocks.inc index e1add8734..852acd292 100644 --- a/data/scripts/pokeblocks.inc +++ b/data/scripts/pokeblocks.inc @@ -235,7 +235,7 @@ FallarborTown_ContestLobby_EventScript_1B7897:: @ 81B7897 end FallarborTown_ContestLobby_EventScript_1B78A1:: @ 81B78A1 - call FallarborTown_ContestLobby_EventScript_19F806 + call S_DoSaveDialog compare RESULT, 0 jumpeq FallarborTown_ContestLobby_EventScript_1B7936 message FallarborTown_ContestLobby_Text_1B7304 diff --git a/data/specials.inc b/data/specials.inc index 99a4a218c..1baa55442 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -100,7 +100,7 @@ gSpecials:: def_special sub_80C5044 def_special GiveMonArtistRibbon def_special sub_808363C - def_special InitSaveDialog + def_special ScrSpecial_DoSaveDialog def_special DoWateringBerryTreeAnim def_special sub_80E60D8 def_special sub_80EB7C4 @@ -178,7 +178,7 @@ gSpecials:: def_special sub_810FF48 def_special sub_810FAA0 def_special sub_810FF60 - def_special RockSmashWildEncounter + def_special ScrSpecial_RockSmashWildEncounter def_special GabbyAndTyGetBattleNum def_special sub_80BDC14 def_special GabbyAndTyBeforeInterview diff --git a/include/data2.h b/include/data2.h index 7a58e3a8e..53a90944d 100644 --- a/include/data2.h +++ b/include/data2.h @@ -3,12 +3,7 @@ #include "sprite.h" -struct UnknownStructD2 -{ - u32 unk0; - u32 unk4; - u32 unk8; -}; +struct UnknownTaskStruct; struct MonCoords { @@ -47,7 +42,7 @@ extern u8 gSpeciesNames[][11]; extern const u8 gMoveNames[][13]; extern const u8 gAbilityNames[][13]; extern const u8 gTypeNames[][7]; -extern const struct UnknownStructD2 gUnknown_081F9674; +extern const struct UnknownTaskStruct gUnknown_081F9674; extern const u8 gUnknown_081F96C8[]; extern struct CompressedSpriteSheet gUnknown_081FAEA4; extern struct CompressedSpritePalette gUnknown_081FAEAC; diff --git a/include/menu.h b/include/menu.h index bdf59b8f0..3cf47b9b8 100644 --- a/include/menu.h +++ b/include/menu.h @@ -43,7 +43,7 @@ u16 unref_sub_8071F98(u8, u8); void unref_sub_8071FBC(u16, u8, u8, u8, u8); void MenuDisplayMessageBox(void); void MenuPrintMessage(const u8 *, u8, u8); -void sub_8072044(const u8 *); +void MenuPrintMessageDefaultCoords(const u8 *); void MenuSetText(const u8 *); u8 MenuUpdateWindowText(void); u8 unref_sub_8072098(void); diff --git a/include/start_menu.h b/include/start_menu.h index 5169b3bf0..d3f77dc99 100644 --- a/include/start_menu.h +++ b/include/start_menu.h @@ -5,7 +5,7 @@ void CreateStartMenuTask(void (*func)(u8)); void sub_80712B4(u8 taskId); void sub_8071310(void); -void InitSaveDialog(void); +void ScrSpecial_DoSaveDialog(void); void sub_8071B28(void); #endif // GUARD_STARTER_CHOOSE_H diff --git a/include/wild_encounter.h b/include/wild_encounter.h index 1a0b6982d..d4b343126 100644 --- a/include/wild_encounter.h +++ b/include/wild_encounter.h @@ -28,9 +28,9 @@ extern struct WildPokemonHeader gWildMonHeaders[]; void DisableWildEncounters(bool8 disabled); bool8 StandardWildEncounter(u16 a, u16 b); -void RockSmashWildEncounter(void); +void ScrSpecial_RockSmashWildEncounter(void); bool8 SweetScentWildEncounter(void); -bool8 GetFishingWildMonListHeader(void); +bool8 DoesCurrentMapHaveFishingMons(void); void FishingWildEncounter(u8 rod); u16 GetLocalWildMon(bool8 *isWaterMon); u16 GetLocalWaterMon(void); diff --git a/src/battle_2.c b/src/battle_2.c index 7092a857b..3cdea07be 100644 --- a/src/battle_2.c +++ b/src/battle_2.c @@ -239,7 +239,8 @@ void InitBattle(void) gUnknown_03004DE0.unk0[i] = 0xFF10; gUnknown_03004DE0.unk780[i] = 0xFF10; } - sub_80895F8(gUnknown_081F9674.unk0, gUnknown_081F9674.unk4, gUnknown_081F9674.unk8); + //sub_80895F8(gUnknown_081F9674.unk0, gUnknown_081F9674.unk4, gUnknown_081F9674.unk8); + sub_80895F8(gUnknown_081F9674); SetUpWindowConfig(&gWindowConfig_81E6C58); ResetPaletteFade(); gUnknown_030042A4 = 0; diff --git a/src/cable_club.c b/src/cable_club.c index 271bf1e3b..7a85f2b6c 100644 --- a/src/cable_club.c +++ b/src/cable_club.c @@ -647,7 +647,7 @@ static void sub_80837EC(u8 taskId) void sub_8083820(void) { - InitSaveDialog(); + ScrSpecial_DoSaveDialog(); } static void sub_808382C(u8 taskId) diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index 5d06e5fb1..fc194d513 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -1406,7 +1406,7 @@ static void sub_805A2D0(u8 taskId) /* Fishing */ -static u8 (*const gUnknown_0830FCB4[])(struct Task *) = +static u8 (*const sFishingStateFuncs[])(struct Task *) = { Fishing1, Fishing2, @@ -1429,17 +1429,33 @@ static u8 (*const gUnknown_0830FCB4[])(struct Task *) = static void Task_Fishing(u8 taskId); static void sub_805A954(void); -void StartFishing(u8 a) +#define tStep data[0] +#define tFrameCounter data[1] +#define tNumDots data[2] +#define tDotsRequired data[3] +#define tRoundsPlayed data[12] +#define tMinRoundsRequired data[13] +#define tPlayerGfxId data[14] +#define tFishingRod data[15] + +#define FISHING_START_ROUND 3 +#define FISHING_GOT_BITE 6 +#define FISHING_ON_HOOK 9 +#define FISHING_NO_BITE 11 +#define FISHING_GOT_AWAY 12 +#define FISHING_SHOW_RESULT 13 + +void StartFishing(u8 rod) { u8 taskId = CreateTask(Task_Fishing, 0xFF); - gTasks[taskId].data[15] = a; + gTasks[taskId].tFishingRod = rod; Task_Fishing(taskId); } static void Task_Fishing(u8 taskId) { - while (gUnknown_0830FCB4[gTasks[taskId].data[0]](&gTasks[taskId])) + while (sFishingStateFuncs[gTasks[taskId].tStep](&gTasks[taskId])) ; } @@ -1447,7 +1463,7 @@ u8 Fishing1(struct Task *task) { ScriptContext2_Enable(); gPlayerAvatar.unk6 = 1; - task->data[0]++; + task->tStep++; return 0; } @@ -1457,23 +1473,25 @@ u8 Fishing2(struct Task *task) const s16 arr1[] = {1, 1, 1}; const s16 arr2[] = {1, 3, 6}; - task->data[12] = 0; - task->data[13] = arr1[task->data[15]] + (Random() % arr2[task->data[15]]); - task->data[14] = gMapObjects[gPlayerAvatar.mapObjectId].graphicsId; + task->tRoundsPlayed = 0; + task->tMinRoundsRequired = arr1[task->tFishingRod] + (Random() % arr2[task->tFishingRod]); + task->tPlayerGfxId = gMapObjects[gPlayerAvatar.mapObjectId].graphicsId; playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; FieldObjectClearAnimIfSpecialAnimActive(playerMapObj); playerMapObj->mapobj_bit_11 = 1; sub_8059C3C(playerMapObj->mapobj_unk_18); - task->data[0]++; + task->tStep++; return 0; } u8 Fishing3(struct Task *task) { sub_805A954(); - task->data[1]++; - if (task->data[1] > 0x3B) - task->data[0]++; + + // Wait one second before starting dot game + task->tFrameCounter++; + if (task->tFrameCounter >= 60) + task->tStep++; return 0; } @@ -1482,87 +1500,92 @@ u8 Fishing4(struct Task *task) u32 randVal; MenuDisplayMessageBox(); - task->data[0]++; - task->data[1] = 0; - task->data[2] = 0; + task->tStep++; + task->tFrameCounter = 0; + task->tNumDots = 0; randVal = Random(); randVal %= 10; - task->data[3] = randVal + 1; - if (task->data[12] == 0) - task->data[3] = randVal + 4; - if (task->data[3] > 9) - task->data[3] = 10; + task->tDotsRequired = randVal + 1; + if (task->tRoundsPlayed == 0) + task->tDotsRequired = randVal + 4; + if (task->tDotsRequired >= 10) + task->tDotsRequired = 10; return 1; } +// Play a round of the dot game u8 Fishing5(struct Task *task) { const u8 dot[] = _("·"); sub_805A954(); - task->data[1]++; + task->tFrameCounter++; if (gMain.newKeys & A_BUTTON) { - task->data[0] = 11; - if (task->data[12] != 0) - task->data[0] = 12; + task->tStep = FISHING_NO_BITE; + if (task->tRoundsPlayed != 0) + task->tStep = FISHING_GOT_AWAY; return 1; } else { - if (task->data[1] > 0x13) + if (task->tFrameCounter >= 20) { - task->data[1] = 0; - if (task->data[2] >= task->data[3]) + task->tFrameCounter = 0; + if (task->tNumDots >= task->tDotsRequired) { - task->data[0]++; - if (task->data[12] != 0) - task->data[0]++; - task->data[12]++; + task->tStep++; + if (task->tRoundsPlayed != 0) + task->tStep++; + task->tRoundsPlayed++; } else { - MenuPrint(dot, task->data[2] + 4, 15); - task->data[2]++; + MenuPrint(dot, task->tNumDots + 4, 15); + task->tNumDots++; } } return 0; } } +// Determine if fish bites u8 Fishing6(struct Task *task) { sub_805A954(); - task->data[0]++; - if (!GetFishingWildMonListHeader() || (Random() & 1)) - task->data[0] = 11; + task->tStep++; + if (!DoesCurrentMapHaveFishingMons() || (Random() & 1)) + task->tStep = FISHING_NO_BITE; else StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], sub_805FE08(player_get_direction_lower_nybble())); return 1; } +// Oh! A Bite! u8 Fishing7(struct Task *task) { sub_805A954(); MenuPrint(gOtherText_OhABite, 4, 17); - task->data[0]++; - task->data[1] = 0; + task->tStep++; + task->tFrameCounter = 0; return 0; } +// We have a bite. Now, wait for the player to press A, or the timer to expire. u8 Fishing8(struct Task *task) { - const s16 arr[3] = {36, 33, 30}; + const s16 reelTimeouts[3] = {36, 33, 30}; sub_805A954(); - task->data[1]++; - if (task->data[1] >= arr[task->data[15]]) - task->data[0] = 12; + task->tFrameCounter++; + if (task->tFrameCounter >= reelTimeouts[task->tFishingRod]) + task->tStep = FISHING_GOT_AWAY; else if (gMain.newKeys & A_BUTTON) - task->data[0]++; + task->tStep++; return 0; } +// Determine if we're going to play the dot game again u8 Fishing9(struct Task *task) { const s16 arr[][2] = @@ -1573,17 +1596,18 @@ u8 Fishing9(struct Task *task) }; sub_805A954(); - task->data[0]++; - if (task->data[12] < task->data[13]) + task->tStep++; + if (task->tRoundsPlayed < task->tMinRoundsRequired) { - task->data[0] = 3; + task->tStep = FISHING_START_ROUND; } - else if (task->data[12] < 2) + else if (task->tRoundsPlayed < 2) { - s16 randVal = Random() % 100; + // probability of having to play another round + s16 probability = Random() % 100; - if (arr[task->data[15]][task->data[12]] > randVal) - task->data[0] = 3; + if (arr[task->tFishingRod][task->tRoundsPlayed] > probability) + task->tStep = FISHING_START_ROUND; } return 0; } @@ -1591,72 +1615,73 @@ u8 Fishing9(struct Task *task) u8 Fishing10(struct Task *task) { sub_805A954(); - sub_8072044(gOtherText_PokeOnHook); + MenuPrintMessageDefaultCoords(gOtherText_PokeOnHook); MenuDisplayMessageBox(); - task->data[0]++; - task->data[1] = 0; + task->tStep++; + task->tFrameCounter = 0; return 0; } u8 Fishing11(struct Task *task) { - if (task->data[1] == 0) - { + if (task->tFrameCounter == 0) sub_805A954(); - if (task->data[1] == 0) + + if (task->tFrameCounter == 0) + { + if (MenuUpdateWindowText()) { - if (MenuUpdateWindowText()) - { - struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; - - sub_805B980(playerMapObj, task->data[14]); - FieldObjectTurn(playerMapObj, playerMapObj->placeholder18); - if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING) - sub_8127F28(gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1A, 0, 0); - gSprites[gPlayerAvatar.spriteId].pos2.x = 0; - gSprites[gPlayerAvatar.spriteId].pos2.y = 0; - MenuZeroFillScreen(); - task->data[1]++; - return 0; - } - else - { - if (task->data[1] == 0) - return 0; - } + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + sub_805B980(playerMapObj, task->tPlayerGfxId); + FieldObjectTurn(playerMapObj, playerMapObj->placeholder18); + if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING) + sub_8127F28(gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1A, 0, 0); + gSprites[gPlayerAvatar.spriteId].pos2.x = 0; + gSprites[gPlayerAvatar.spriteId].pos2.y = 0; + MenuZeroFillScreen(); + task->tFrameCounter++; + return 0; } } - gPlayerAvatar.unk6 = 0; - ScriptContext2_Disable(); - FishingWildEncounter(task->data[15]); - sub_80BE97C(1); - DestroyTask(FindTaskIdByFunc(Task_Fishing)); + + if (task->tFrameCounter != 0) + { + gPlayerAvatar.unk6 = 0; + ScriptContext2_Disable(); + FishingWildEncounter(task->tFishingRod); + sub_80BE97C(1); + DestroyTask(FindTaskIdByFunc(Task_Fishing)); + } return 0; } +// Not even a nibble u8 Fishing12(struct Task *task) { sub_805A954(); StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], sub_805FDF8(player_get_direction_lower_nybble())); - sub_8072044(gOtherText_NotEvenANibble); - task->data[0] = 13; + MenuPrintMessageDefaultCoords(gOtherText_NotEvenANibble); + task->tStep = FISHING_SHOW_RESULT; return 1; } +// It got away u8 Fishing13(struct Task *task) { sub_805A954(); StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], sub_805FDF8(player_get_direction_lower_nybble())); - sub_8072044(gOtherText_ItGotAway); - task->data[0]++; + MenuPrintMessageDefaultCoords(gOtherText_ItGotAway); + task->tStep++; return 1; } +// Display the message u8 Fishing14(struct Task *task) { sub_805A954(); MenuDisplayMessageBox(); - task->data[0]++; + task->tStep++; return 0; } @@ -1667,13 +1692,13 @@ u8 Fishing15(struct Task *task) { struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; - sub_805B980(playerMapObj, task->data[14]); + sub_805B980(playerMapObj, task->tPlayerGfxId); FieldObjectTurn(playerMapObj, playerMapObj->placeholder18); if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING) sub_8127F28(gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1A, 0, 0); gSprites[gPlayerAvatar.spriteId].pos2.x = 0; gSprites[gPlayerAvatar.spriteId].pos2.y = 0; - task->data[0]++; + task->tStep++; } return 0; } @@ -1692,6 +1717,10 @@ u8 Fishing16(struct Task *task) return 0; } +#undef tStep +#undef tFrameCounter +#undef tFishingRod + static void sub_805A954(void) { struct Sprite *playerSprite = &gSprites[gPlayerAvatar.spriteId]; diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index dedd80237..1464a99b1 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -23,9 +23,9 @@ const static u16 gUnknown_0839ACDC[] = { 0xC8, 0x48, 0x38, 0x28, 0x18, 0x0 }; const s32 gMaxFlashLevel = 4; -const static u32 gUnknown_0839ACEC[3] = +const static struct UnknownTaskStruct gUnknown_0839ACEC = { - REG_ADDR_WIN0H, + (void *)REG_ADDR_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1, 1 }; @@ -220,7 +220,8 @@ static void sub_80816A8(u8 taskId) REG_WINOUT = 30; sub_8081398(&gUnknown_03004DE0[0][0], data[2], data[3], 1); CpuFastSet(&gUnknown_03004DE0[0], &gUnknown_03004DE0[1], 480); - sub_80895F8(gUnknown_0839ACEC[0], gUnknown_0839ACEC[1], gUnknown_0839ACEC[2]); + //sub_80895F8(gUnknown_0839ACEC[0], gUnknown_0839ACEC[1], gUnknown_0839ACEC[2]); + sub_80895F8(gUnknown_0839ACEC); data[0] = 1; break; case 1: diff --git a/src/menu.c b/src/menu.c index 31bafa509..a9c4aaa43 100644 --- a/src/menu.c +++ b/src/menu.c @@ -205,7 +205,7 @@ void MenuPrintMessage(const u8 *str, u8 left, u8 top) sub_8002EB0(gMenuWindowPtr, str, gMenuTextTileOffset, left, top); } -void sub_8072044(const u8 *str) +void MenuPrintMessageDefaultCoords(const u8 *str) { sub_8002EB0(gMenuWindowPtr, str, gMenuTextTileOffset, 2, 15); } diff --git a/src/menu_helpers.c b/src/menu_helpers.c index eb00e72da..14e823355 100644 --- a/src/menu_helpers.c +++ b/src/menu_helpers.c @@ -140,7 +140,7 @@ static void PrintMessage(const u8 *str, u16 tile) { sub_80A3FA0(&gBGTilemapBuffers[1][0], 2, 15, 26, 4, tile); } - sub_8072044(str); + MenuPrintMessageDefaultCoords(str); } static void sub_80F9090(u8 taskId) diff --git a/src/mystery_event_menu.c b/src/mystery_event_menu.c index 46b76fd88..0e48dc177 100644 --- a/src/mystery_event_menu.c +++ b/src/mystery_event_menu.c @@ -94,7 +94,7 @@ static void CB2_MysteryEventMenu(void) case 1: if (gPaletteFade.active) break; - sub_8072044(gSystemText_LinkStandby); + MenuPrintMessageDefaultCoords(gSystemText_LinkStandby); gMain.state++; break; case 2: @@ -109,7 +109,7 @@ static void CB2_MysteryEventMenu(void) if ((gLinkStatus & 0x20) && (gLinkStatus & 0x1C) > 4) { PlaySE(SE_PIN); - sub_8072044(gSystemText_LoadEventPressA); + MenuPrintMessageDefaultCoords(gSystemText_LoadEventPressA); gMain.state++; } if (gMain.newKeys & B_BUTTON) @@ -128,7 +128,7 @@ static void CB2_MysteryEventMenu(void) if (GetLinkPlayerCount_2() != 2) { GetEventLoadMessage(gStringVar4, 1); - sub_8072044(gStringVar4); + MenuPrintMessageDefaultCoords(gStringVar4); gMain.state = 13; break; } @@ -158,13 +158,13 @@ static void CB2_MysteryEventMenu(void) sub_800832C(); MenuZeroFillWindowRect(6, 5, 23, 8); GetEventLoadMessage(gStringVar4, 1); - sub_8072044(gStringVar4); + MenuPrintMessageDefaultCoords(gStringVar4); gMain.state = 13; break; } else if (CheckLanguageMatch()) { - sub_8072044(gSystemText_DontCutLink); + MenuPrintMessageDefaultCoords(gSystemText_DontCutLink); gMain.state++; break; } @@ -173,7 +173,7 @@ static void CB2_MysteryEventMenu(void) CloseLink(); MenuZeroFillWindowRect(6, 5, 23, 8); GetEventLoadMessage(gStringVar4, 1); - sub_8072044(gStringVar4); + MenuPrintMessageDefaultCoords(gStringVar4); gMain.state = 13; break; } @@ -222,7 +222,7 @@ static void CB2_MysteryEventMenu(void) sub_800832C(); MenuZeroFillWindowRect(6, 5, 23, 8); GetEventLoadMessage(gStringVar4, 1); - sub_8072044(gStringVar4); + MenuPrintMessageDefaultCoords(gStringVar4); ptr = (u8 *)&gMain; offset1 = offsetof(struct Main, state); asm("" ::: "r1"); @@ -234,7 +234,7 @@ static void CB2_MysteryEventMenu(void) register u8 *ptr2 asm("r1"); register int offset3 asm("r0"); register int dummy asm("r2"); - sub_8072044(gSystemText_DontCutLink); + MenuPrintMessageDefaultCoords(gSystemText_DontCutLink); ptr2 = (u8 *)&gMain; offset3 = offsetof(struct Main, state); if (dummy) @@ -249,7 +249,7 @@ static void CB2_MysteryEventMenu(void) MenuZeroFillWindowRect(6, 5, 23, 8); label: GetEventLoadMessage(gStringVar4, 1); - sub_8072044(gStringVar4); + MenuPrintMessageDefaultCoords(gStringVar4); ptr = (u8 *)&gMain; offset2 = offsetof(struct Main, state); ptr += offset2; @@ -294,7 +294,7 @@ static void CB2_MysteryEventMenu(void) gMain.state++; break; case 12: - sub_8072044(gStringVar4); + MenuPrintMessageDefaultCoords(gStringVar4); gMain.state++; break; case 13: @@ -329,7 +329,7 @@ static void CB2_MysteryEventMenu(void) CloseLink(); MenuZeroFillWindowRect(6, 5, 23, 8); GetEventLoadMessage(gStringVar4, 1); - sub_8072044(gStringVar4); + MenuPrintMessageDefaultCoords(gStringVar4); gMain.state = 13; } } diff --git a/src/naming_screen.c b/src/naming_screen.c index 6c107f022..3f8417e6d 100644 --- a/src/naming_screen.c +++ b/src/naming_screen.c @@ -1618,7 +1618,7 @@ static void DisplaySentToPCMessage(void) StringExpandPlaceholders(gStringVar4, gOtherText_SentToPC); BasicInitMenuWindow(&gWindowConfig_81E6E88); MenuDisplayMessageBox(); - sub_8072044(gStringVar4); + MenuPrintMessageDefaultCoords(gStringVar4); } static void sub_80B753C(void) diff --git a/src/overworld.c b/src/overworld.c index c3b503a2f..a108f14de 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -455,6 +455,7 @@ void copy_saved_warp2_bank_and_enter_x_to_warp1(u8 unused) void sub_8053538(u8 a1) { const struct HealLocation *warp = GetHealLocation(a1); + if (warp) warp1_set(warp->group, warp->map, -1, warp->x, warp->y); } diff --git a/src/secret_base.c b/src/secret_base.c index 16f7c4e2c..6f9a2d0b0 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -270,7 +270,7 @@ void sub_80BBAF0(void) bool8 sub_80BBB24(void) { - if (gMapHeader.mapType == 9 && VarGet(VAR_0x4097) == 0) + if (gMapHeader.mapType == MAP_TYPE_SECRET_BASE && VarGet(VAR_0x4097) == 0) return FALSE; return TRUE; } diff --git a/src/start_menu.c b/src/start_menu.c index 7e3af9886..6e44090df 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -505,7 +505,7 @@ static u8 RunSaveDialogCallback(void) return saveDialogCallback(); } -void InitSaveDialog(void) +void ScrSpecial_DoSaveDialog(void) { sub_807160C(); CreateTask(Task_SaveDialog, 0x50); @@ -515,7 +515,7 @@ static void DisplaySaveMessageWithCallback(const u8 *ptr, u8 (*func)(void)) { StringExpandPlaceholders(gStringVar4, ptr); MenuDisplayMessageBox(); - sub_8072044(gStringVar4); + MenuPrintMessageDefaultCoords(gStringVar4); savingComplete = TRUE; saveDialogCallback = func; } diff --git a/src/tv.c b/src/tv.c index fab465742..519a6bbe1 100644 --- a/src/tv.c +++ b/src/tv.c @@ -942,7 +942,6 @@ void sub_80BE97C(bool8 flag) void sub_80BE9D4(void) { - //TVShow *show; gUnknown_03005D38.var0 = sub_80BF74C(gSaveBlock1.tvShows); if (gUnknown_03005D38.var0 != -1 && sub_80BF1B4(TVSHOW_FISHING_ADVICE) != 1) { diff --git a/src/wild_encounter.c b/src/wild_encounter.c index 519cd7893..5c06ebb14 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -3363,7 +3363,7 @@ bool8 StandardWildEncounter(u16 a, u16 b) return 0; } -void RockSmashWildEncounter(void) +void ScrSpecial_RockSmashWildEncounter(void) { u16 headerNum = GetCurrentMapWildMonHeader(); @@ -3433,7 +3433,7 @@ bool8 SweetScentWildEncounter(void) return FALSE; } -bool8 GetFishingWildMonListHeader(void) +bool8 DoesCurrentMapHaveFishingMons(void) { u16 headerNum = GetCurrentMapWildMonHeader(); -- cgit v1.2.3 From 270bd98d41a19c516a4be95f522deb26cc4300a9 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Wed, 13 Sep 2017 00:03:22 -0500 Subject: more labeling --- data-de/event_scripts.s | 14 +-- data-de/field_move_scripts.inc | 18 ++-- data/event_scripts.s | 14 +-- data/field_move_scripts.inc | 18 ++-- data/maps/events/FieryPath.inc | 12 +-- data/maps/events/GraniteCave_B2F.inc | 14 +-- data/maps/events/PetalburgWoods.inc | 4 +- data/maps/events/Route102.inc | 4 +- data/maps/events/Route103.inc | 10 +- data/maps/events/Route104.inc | 22 ++-- data/maps/events/Route110.inc | 6 +- data/maps/events/Route110_TrickHousePuzzle1.inc | 30 +++--- data/maps/events/Route110_TrickHousePuzzle3.inc | 12 +-- data/maps/events/Route110_TrickHousePuzzle4.inc | 22 ++-- data/maps/events/Route111.inc | 14 +-- data/maps/events/Route112.inc | 8 +- data/maps/events/Route114.inc | 16 +-- data/maps/events/Route115.inc | 12 +-- data/maps/events/Route116.inc | 16 +-- data/maps/events/Route117.inc | 8 +- data/maps/events/Route118.inc | 8 +- data/maps/events/Route119.inc | 14 +-- data/maps/events/Route120.inc | 26 ++--- data/maps/events/Route121.inc | 22 ++-- data/maps/events/Route123.inc | 42 ++++---- data/maps/events/Route130.inc | 2 +- data/maps/events/RusturfTunnel.inc | 4 +- data/maps/events/SafariZone_Northeast.inc | 12 +-- data/maps/events/SeafloorCavern_Room1.inc | 6 +- data/maps/events/SeafloorCavern_Room2.inc | 18 ++-- data/maps/events/SeafloorCavern_Room3.inc | 18 ++-- data/maps/events/SeafloorCavern_Room5.inc | 12 +-- data/maps/events/SeafloorCavern_Room8.inc | 24 ++--- data/maps/events/ShoalCave_LowTideLowerRoom.inc | 2 +- data/maps/events/VictoryRoad_B1F.inc | 28 ++--- data/scripts/berry_tree.inc | 2 +- data/scripts/cable_club.inc | 2 +- data/scripts/day_care.inc | 2 +- data/scripts/maps/BattleTower_BattleRoom.inc | 4 +- data/scripts/maps/IslandCave.inc | 2 +- .../scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc | 2 +- data/scripts/maps/LilycoveCity_Harbor.inc | 2 +- .../maps/LilycoveCity_MoveDeletersHouse.inc | 6 +- data/scripts/maps/MossdeepCity_GameCorner_B1F.inc | 2 +- data/scripts/maps/Route101.inc | 2 +- data/scripts/maps/Route110.inc | 2 +- data/scripts/maps/SlateportCity.inc | 2 +- data/scripts/players_house.inc | 2 +- data/specials.inc | 14 +-- include/diploma.h | 2 +- include/event_data.h | 2 +- include/field_poison.h | 2 +- include/item_use.h | 2 +- include/script_pokemon_80C4.h | 4 +- include/species.h | 3 +- src/battle_setup.c | 2 +- src/berry.c | 6 +- src/braille_puzzles.c | 34 +++--- src/decoration.c | 2 +- src/diploma.c | 2 +- src/event_data.c | 16 +-- src/field_control_avatar.c | 44 ++++---- src/field_map_obj.c | 14 +-- src/field_map_obj_helpers.c | 2 +- src/field_player_avatar.c | 4 +- src/field_poison.c | 2 +- src/field_special_scene.c | 4 +- src/field_specials.c | 42 ++++---- src/fldeff_cut.c | 21 ++-- src/fldeff_strength.c | 6 +- src/fldeff_sweetscent.c | 4 +- src/fldeff_teleport.c | 4 +- src/item_use.c | 116 ++++++++++----------- src/overworld.c | 46 ++++---- src/pokemon_1.c | 1 + src/post_battle_event_funcs.c | 2 +- src/rom6.c | 18 ++-- src/safari_zone.c | 2 +- src/scrcmd.c | 4 +- src/script_pokemon_util_80C4BF0.c | 12 +-- src/script_pokemon_util_80F99CC.c | 63 ++++++----- src/secret_base.c | 4 +- src/time_events.c | 2 +- src/trainer_see.c | 6 +- src/tv.c | 2 +- src/wild_encounter.c | 25 +++-- 86 files changed, 545 insertions(+), 540 deletions(-) diff --git a/data-de/event_scripts.s b/data-de/event_scripts.s index ba7fedac6..114bc4d97 100644 --- a/data-de/event_scripts.s +++ b/data-de/event_scripts.s @@ -1455,7 +1455,7 @@ OldaleTown_PokemonCenter_1F_EventScript_19FD7C:: @ 819FD7C checkanimation 25 move 0x800b, OldaleTown_PokemonCenter_1F_Movement_1A0845 waitmove 0 - special HealPlayerParty + special ScrSpecial_HealPlayerParty checkflag 273 jumpif 0, OldaleTown_PokemonCenter_1F_EventScript_19FDCE jump OldaleTown_PokemonCenter_1F_EventScript_19FDB0 @@ -2112,7 +2112,7 @@ SSTidalRooms_EventScript_1A02CA:: @ 81A02CA fadescreen 1 fanfare 368 waitfanfare - special HealPlayerParty + special ScrSpecial_HealPlayerParty fadescreen 0 return @@ -4309,7 +4309,7 @@ SecretBase_RedCave1_EventScript_1A350A:: @ 81A350A setvar 0x8005, 0 special sub_813556C waitstate - special HealPlayerParty + special ScrSpecial_HealPlayerParty release end @@ -4801,7 +4801,7 @@ gUnknown_081B694A:: @ 81B694A .include "data/scripts/players_house.inc" -Event_RunningShoesManual:: @ 81B6E5A +S_RunningShoesManual:: @ 81B6E5A msgbox UnknownString_81728E3, 3 end @@ -4810,7 +4810,7 @@ Event_RunningShoesManual:: @ 81B6E5A .include "data/text/trainers.inc" -Event_RepelWoreOff:: @ 81C33E6 +S_RepelWoreOff:: @ 81C33E6 msgbox Text_RepelWoreOff, 3 end @@ -4890,7 +4890,7 @@ GraniteCave_B1F_MapScript2_1C6BB5:: @ 81C6BB5 MtPyre_2F_MapScript2_1C6BB5:: @ 81C6BB5 SkyPillar_2F_MapScript2_1C6BB5:: @ 81C6BB5 SkyPillar_4F_MapScript2_1C6BB5:: @ 81C6BB5 - map_script_2 0x4022, 0, GraniteCave_B1F_EventScript_1C6BC5 + map_script_2 0x4022, 0, S_FallDownHole .2byte 0 GraniteCave_B1F_MapScript1_1C6BBF:: @ 81C6BBF @@ -4900,7 +4900,7 @@ SkyPillar_4F_MapScript1_1C6BBF:: @ 81C6BBF copyvar 0x4022, 0x1 end -GraniteCave_B1F_EventScript_1C6BC5:: @ 81C6BC5 +S_FallDownHole:: @ 81C6BC5 lockall pause 20 move 255, GraniteCave_B1F_Movement_1C6BF7 diff --git a/data-de/field_move_scripts.inc b/data-de/field_move_scripts.inc index 91c3dcca8..2af646264 100644 --- a/data-de/field_move_scripts.inc +++ b/data-de/field_move_scripts.inc @@ -1,4 +1,4 @@ -CuttableTreeScript:: @ 81B0DCC +S_CuttableTree:: @ 81B0DCC lockall checkflag 2055 jumpif 0, CannotUseCut @@ -18,7 +18,7 @@ CuttableTreeScript:: @ 81B0DCC jump DoTreeCutMovement end -UseCutScript:: @ 81B0E16 +S_UseCut:: @ 81B0E16 lockall doanimation 2 waitstate @@ -59,7 +59,7 @@ CannotUseCutText: @ 81B0E8E .string "Der ZERSCHNEIDER kann hier eingesetzt\n" .string "werden.$" -BreakableRockScript:: @ 81B0EB7 +S_BreakableRock:: @ 81B0EB7 lockall checkflag 2057 jumpif 0, CannotUseRockSmash @@ -79,7 +79,7 @@ BreakableRockScript:: @ 81B0EB7 jump DoRockSmashMovement end -UseRockSmashScript:: @ 81B0F01 +S_UseRockSmash:: @ 81B0F01 lockall doanimation 37 waitstate @@ -126,7 +126,7 @@ CannotUseRockSmashText: @ 81B0F90 .string "Ein großer Felsen. Ein POKéMON könnte\n" .string "ihn vielleicht zertrümmern.$" -PushableBoulderScript:: @ 81B0FCB +S_PushableBoulder:: @ 81B0FCB lockall checkflag 2058 jumpif 0, CannotUseStrength @@ -145,7 +145,7 @@ PushableBoulderScript:: @ 81B0FCB jump UsedStrength end -UseStrengthScript:: @ 81B100E +S_UseStrength:: @ 81B100E lockall doanimation 40 waitstate @@ -191,7 +191,7 @@ AlreadyUsedStrengthText: @ 81B1127 .string "STÄRKE ermöglicht es, Felsen zu\n" .string "bewegen.$" -UseWaterfallScript:: @ 81B115A +S_UseWaterfall:: @ 81B115A lockall checkattack MOVE_WATERFALL compare RESULT, 6 @@ -205,7 +205,7 @@ UseWaterfallScript:: @ 81B115A doanimation 43 jump Waterfall_Done -CannotUseWaterfallScript:: @ 81B1194 +S_CannotUseWaterfall:: @ 81B1194 lockall Waterfall_NoMonKnows: @ 81B1195 msgbox CannotUseWaterfallText, 4 @@ -247,7 +247,7 @@ Dive_Done: @ 81B1267 releaseall end -UnderwaterUseDiveScript:: @ 81B1269 +S_UseDiveUnderwater:: @ 81B1269 lockall checkattack MOVE_DIVE compare RESULT, 6 diff --git a/data/event_scripts.s b/data/event_scripts.s index 171581dd9..0a8390a8f 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -1449,7 +1449,7 @@ do_heal_party:: @ 819FD7C checkanimation 25 move 0x800b, OldaleTown_PokemonCenter_1F_Movement_1A0845 waitmove 0 - special HealPlayerParty + special ScrSpecial_HealPlayerParty checkflag 273 jumpif 0, OldaleTown_PokemonCenter_1F_EventScript_19FDCE jump OldaleTown_PokemonCenter_1F_EventScript_19FDB0 @@ -2106,7 +2106,7 @@ SSTidalRooms_EventScript_1A02CA:: @ 81A02CA fadescreen 1 fanfare 368 waitfanfare - special HealPlayerParty + special ScrSpecial_HealPlayerParty fadescreen 0 return @@ -4288,7 +4288,7 @@ SecretBase_RedCave1_EventScript_1A350A:: @ 81A350A setvar 0x8005, 0 special sub_813556C waitstate - special HealPlayerParty + special ScrSpecial_HealPlayerParty release end @@ -4769,7 +4769,7 @@ gUnknown_081B694A:: @ 81B694A .include "data/scripts/players_house.inc" -Event_RunningShoesManual:: @ 81B6E5A +S_RunningShoesManual:: @ 81B6E5A msgbox UnknownString_81728E3, 3 end @@ -4778,7 +4778,7 @@ Event_RunningShoesManual:: @ 81B6E5A .include "data/text/trainers.inc" -Event_RepelWoreOff:: @ 81C33E6 +S_RepelWoreOff:: @ 81C33E6 msgbox Text_RepelWoreOff, 3 end @@ -4858,7 +4858,7 @@ GraniteCave_B1F_MapScript2_1C6BB5:: @ 81C6BB5 MtPyre_2F_MapScript2_1C6BB5:: @ 81C6BB5 SkyPillar_2F_MapScript2_1C6BB5:: @ 81C6BB5 SkyPillar_4F_MapScript2_1C6BB5:: @ 81C6BB5 - map_script_2 0x4022, 0, GraniteCave_B1F_EventScript_1C6BC5 + map_script_2 0x4022, 0, S_FallDownHole .2byte 0 GraniteCave_B1F_MapScript1_1C6BBF:: @ 81C6BBF @@ -4868,7 +4868,7 @@ SkyPillar_4F_MapScript1_1C6BBF:: @ 81C6BBF copyvar 0x4022, 0x1 end -GraniteCave_B1F_EventScript_1C6BC5:: @ 81C6BC5 +S_FallDownHole:: @ 81C6BC5 lockall pause 20 move 255, GraniteCave_B1F_Movement_1C6BF7 diff --git a/data/field_move_scripts.inc b/data/field_move_scripts.inc index acf5e9e17..9911dca3a 100644 --- a/data/field_move_scripts.inc +++ b/data/field_move_scripts.inc @@ -1,4 +1,4 @@ -CuttableTreeScript:: @ 81B0DCC +S_CuttableTree:: @ 81B0DCC lockall checkflag 2055 jumpif 0, CannotUseCut @@ -18,7 +18,7 @@ CuttableTreeScript:: @ 81B0DCC jump DoTreeCutMovement end -UseCutScript:: @ 81B0E16 +S_UseCut:: @ 81B0E16 lockall doanimation 2 waitstate @@ -56,7 +56,7 @@ UsedCutRockSmashText: @ 81B0E82 CannotUseCutText: @ 81B0E8E .string "This tree looks like it can be CUT down.$" -BreakableRockScript:: @ 81B0EB7 +S_BreakableRock:: @ 81B0EB7 lockall checkflag 2057 jumpif 0, CannotUseRockSmash @@ -76,7 +76,7 @@ BreakableRockScript:: @ 81B0EB7 jump DoRockSmashMovement end -UseRockSmashScript:: @ 81B0F01 +S_UseRockSmash:: @ 81B0F01 lockall doanimation 37 waitstate @@ -123,7 +123,7 @@ CannotUseRockSmashText: @ 81B0F90 .string "It’s a rugged rock, but a POKéMON\n" .string "may be able to smash it.$" -PushableBoulderScript:: @ 81B0FCB +S_PushableBoulder:: @ 81B0FCB lockall checkflag 2058 jumpif 0, CannotUseStrength @@ -142,7 +142,7 @@ PushableBoulderScript:: @ 81B0FCB jump UsedStrength end -UseStrengthScript:: @ 81B100E +S_UseStrength:: @ 81B100E lockall doanimation 40 waitstate @@ -188,7 +188,7 @@ AlreadyUsedStrengthText: @ 81B1127 .string "STRENGTH made it possible to move\n" .string "boulders around.$" -UseWaterfallScript:: @ 81B115A +S_UseWaterfall:: @ 81B115A lockall checkattack MOVE_WATERFALL compare RESULT, 6 @@ -202,7 +202,7 @@ UseWaterfallScript:: @ 81B115A doanimation 43 jump Waterfall_Done -CannotUseWaterfallScript:: @ 81B1194 +S_CannotUseWaterfall:: @ 81B1194 lockall Waterfall_NoMonKnows: @ 81B1195 msgbox CannotUseWaterfallText, 4 @@ -244,7 +244,7 @@ Dive_Done: @ 81B1267 releaseall end -UnderwaterUseDiveScript:: @ 81B1269 +S_UseDiveUnderwater:: @ 81B1269 lockall checkattack MOVE_DIVE compare RESULT, 6 diff --git a/data/maps/events/FieryPath.inc b/data/maps/events/FieryPath.inc index 01b7b3efe..a4ac688d8 100644 --- a/data/maps/events/FieryPath.inc +++ b/data/maps/events/FieryPath.inc @@ -1,11 +1,11 @@ FieryPath_MapObjects:: @ 838C718 object_event 1, MAP_OBJ_GFX_ITEM_BALL, 0, 8, 0, 3, 0, 3, 1, 17, 0, 0, 0, 0, 0, FieryPath_EventScript_1B17EE, 1091, 0, 0 - object_event 2, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 10, 0, 15, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 17, 0, 0 - object_event 3, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 17, 0, 15, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 18, 0, 0 - object_event 4, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 8, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 19, 0, 0 - object_event 5, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 3, 0, 12, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 20, 0, 0 - object_event 6, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 23, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 21, 0, 0 - object_event 7, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 5, 0, 24, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 22, 0, 0 + object_event 2, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 10, 0, 15, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 17, 0, 0 + object_event 3, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 17, 0, 15, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 18, 0, 0 + object_event 4, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 8, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 19, 0, 0 + object_event 5, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 3, 0, 12, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 20, 0, 0 + object_event 6, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 23, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 21, 0, 0 + object_event 7, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 5, 0, 24, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 22, 0, 0 object_event 8, MAP_OBJ_GFX_ITEM_BALL, 0, 7, 0, 32, 0, 3, 1, 17, 0, 0, 0, 0, 0, FieryPath_EventScript_1B17E1, 1111, 0, 0 FieryPath_MapWarps:: @ 838C7D8 diff --git a/data/maps/events/GraniteCave_B2F.inc b/data/maps/events/GraniteCave_B2F.inc index 49c0bace0..158577482 100644 --- a/data/maps/events/GraniteCave_B2F.inc +++ b/data/maps/events/GraniteCave_B2F.inc @@ -1,13 +1,13 @@ GraniteCave_B2F_MapObjects:: @ 838BFEC object_event 1, MAP_OBJ_GFX_ITEM_BALL, 0, 4, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, GraniteCave_B2F_EventScript_1B17BA, 1053, 0, 0 object_event 2, MAP_OBJ_GFX_ITEM_BALL, 0, 29, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, GraniteCave_B2F_EventScript_1B17C7, 1054, 0, 0 - object_event 3, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 5, 0, 14, 0, 3, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 17, 0, 0 - object_event 4, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 3, 0, 14, 0, 3, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 18, 0, 0 - object_event 5, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 2, 0, 16, 0, 3, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 19, 0, 0 - object_event 6, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 7, 0, 12, 0, 3, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 20, 0, 0 - object_event 7, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 4, 0, 22, 0, 3, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 21, 0, 0 - object_event 8, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 6, 0, 22, 0, 3, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 22, 0, 0 - object_event 9, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 3, 0, 21, 0, 3, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 23, 0, 0 + object_event 3, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 5, 0, 14, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 17, 0, 0 + object_event 4, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 3, 0, 14, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 18, 0, 0 + object_event 5, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 2, 0, 16, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 19, 0, 0 + object_event 6, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 7, 0, 12, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 20, 0, 0 + object_event 7, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 4, 0, 22, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 21, 0, 0 + object_event 8, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 6, 0, 22, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 22, 0, 0 + object_event 9, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 3, 0, 21, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 23, 0, 0 GraniteCave_B2F_MapWarps:: @ 838C0C4 warp_def 29, 13, 3, 2, GraniteCave_B1F diff --git a/data/maps/events/PetalburgWoods.inc b/data/maps/events/PetalburgWoods.inc index 0ec69c1a2..cb0ff7ca1 100644 --- a/data/maps/events/PetalburgWoods.inc +++ b/data/maps/events/PetalburgWoods.inc @@ -1,6 +1,6 @@ PetalburgWoods_MapObjects:: @ 838C14C - object_event 1, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 19, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 17, 0, 0 - object_event 2, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 19, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 18, 0, 0 + object_event 1, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 19, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 17, 0, 0 + object_event 2, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 19, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 18, 0, 0 object_event 3, 241, 0, 26, 0, 17, 0, 3, 10, 0, 0, 0, 0, 0, 0, 0x0, 725, 0, 0 object_event 4, MAP_OBJ_GFX_MAN_2, 0, 26, 0, 20, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0x0, 724, 0, 0 object_event 5, MAP_OBJ_GFX_ITEM_BALL, 0, 45, 0, 7, 0, 3, 8, 0, 0, 0, 0, 0, 0, PetalburgWoods_EventScript_1B175F, 1056, 0, 0 diff --git a/data/maps/events/Route102.inc b/data/maps/events/Route102.inc index 9cf97de4b..7ffa0e191 100644 --- a/data/maps/events/Route102.inc +++ b/data/maps/events/Route102.inc @@ -5,8 +5,8 @@ Route102_MapObjects:: @ 83811FC object_event 4, MAP_OBJ_GFX_LASS, 0, 8, 0, 7, 0, 3, 18, 0, 0, 1, 0, 3, 0, Route102_EventScript_14EB53, 0, 0, 0 object_event 5, MAP_OBJ_GFX_BOY_1, 0, 37, 0, 4, 0, 3, 2, 17, 0, 0, 0, 0, 0, Route102_EventScript_14EAF5, 0, 0, 0 object_event 6, MAP_OBJ_GFX_ITEM_BALL, 0, 11, 0, 15, 0, 3, 8, 0, 0, 0, 0, 0, 0, Route102_EventScript_1B1439, 1000, 0, 0 - object_event 7, MAP_OBJ_GFX_BERRY_TREE, 0, 24, 0, 2, 0, 3, 12, 0, 0, 0, 0, 2, 0, BerryTreeScript, 0, 0, 0 - object_event 8, MAP_OBJ_GFX_BERRY_TREE, 0, 25, 0, 2, 0, 3, 12, 0, 0, 0, 0, 1, 0, BerryTreeScript, 0, 0, 0 + object_event 7, MAP_OBJ_GFX_BERRY_TREE, 0, 24, 0, 2, 0, 3, 12, 0, 0, 0, 0, 2, 0, S_BerryTree, 0, 0, 0 + object_event 8, MAP_OBJ_GFX_BERRY_TREE, 0, 25, 0, 2, 0, 3, 12, 0, 0, 0, 0, 1, 0, S_BerryTree, 0, 0, 0 object_event 9, MAP_OBJ_GFX_YOUNGSTER, 0, 19, 0, 4, 0, 3, 8, 17, 0, 1, 0, 3, 0, Route102_EventScript_14EB6A, 0, 0, 0 Route102_MapBGEvents:: @ 83812D4 diff --git a/data/maps/events/Route103.inc b/data/maps/events/Route103.inc index 01640eb65..462fe1a3b 100644 --- a/data/maps/events/Route103.inc +++ b/data/maps/events/Route103.inc @@ -5,15 +5,15 @@ Route103_MapObjects:: @ 8381300 object_event 4, MAP_OBJ_GFX_LITTLE_GIRL_1, 0, 65, 0, 11, 0, 3, 8, 0, 0, 1, 0, 0, 0, Route103_EventScript_14EDF1, 0, 0, 0 object_event 5, MAP_OBJ_GFX_LITTLE_GIRL_1, 0, 64, 0, 11, 0, 3, 8, 0, 0, 1, 0, 0, 0, Route103_EventScript_14EDAB, 0, 0, 0 object_event 6, MAP_OBJ_GFX_FISHERMAN, 0, 50, 0, 8, 0, 3, 26, 16, 0, 1, 0, 3, 0, Route103_EventScript_14EE37, 0, 0, 0 - object_event 7, MAP_OBJ_GFX_BERRY_TREE, 0, 58, 0, 5, 0, 3, 12, 0, 0, 0, 0, 5, 0, BerryTreeScript, 0, 0, 0 - object_event 8, MAP_OBJ_GFX_BERRY_TREE, 0, 59, 0, 5, 0, 3, 12, 0, 0, 0, 0, 6, 0, BerryTreeScript, 0, 0, 0 - object_event 9, MAP_OBJ_GFX_BERRY_TREE, 0, 60, 0, 5, 0, 3, 12, 0, 0, 0, 0, 7, 0, BerryTreeScript, 0, 0, 0 + object_event 7, MAP_OBJ_GFX_BERRY_TREE, 0, 58, 0, 5, 0, 3, 12, 0, 0, 0, 0, 5, 0, S_BerryTree, 0, 0, 0 + object_event 8, MAP_OBJ_GFX_BERRY_TREE, 0, 59, 0, 5, 0, 3, 12, 0, 0, 0, 0, 6, 0, S_BerryTree, 0, 0, 0 + object_event 9, MAP_OBJ_GFX_BERRY_TREE, 0, 60, 0, 5, 0, 3, 12, 0, 0, 0, 0, 7, 0, S_BerryTree, 0, 0, 0 object_event 10, MAP_OBJ_GFX_BOY_1, 0, 20, 0, 10, 0, 3, 2, 33, 0, 0, 0, 0, 0, Route103_EventScript_14ED79, 0, 0, 0 object_event 11, MAP_OBJ_GFX_PROF_BIRCH, 0, 7, 0, 3, 0, 3, 2, 17, 0, 0, 0, 0, 0, Route103_EventScript_1A037F, 898, 0, 0 object_event 12, MAP_OBJ_GFX_MAN_3, 0, 56, 0, 12, 0, 3, 10, 0, 0, 1, 0, 5, 0, Route103_EventScript_14EE4E, 0, 0, 0 object_event 13, MAP_OBJ_GFX_ITEM_BALL, 0, 63, 0, 8, 0, 3, 1, 17, 0, 0, 0, 0, 0, Route103_EventScript_1B1446, 1114, 0, 0 - object_event 14, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 67, 0, 7, 0, 3, 1, 17, 0, 0, 0, 0, 0, CuttableTreeScript, 18, 0, 0 - object_event 15, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 69, 0, 7, 0, 3, 1, 17, 0, 0, 0, 0, 0, CuttableTreeScript, 19, 0, 0 + object_event 14, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 67, 0, 7, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_CuttableTree, 18, 0, 0 + object_event 15, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 69, 0, 7, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_CuttableTree, 19, 0, 0 Route103_MapBGEvents:: @ 8381468 bg_event 11, 9, 0, 0, 0, Route103_EventScript_14ED8B diff --git a/data/maps/events/Route104.inc b/data/maps/events/Route104.inc index da4b5ffc1..b4c8a2834 100644 --- a/data/maps/events/Route104.inc +++ b/data/maps/events/Route104.inc @@ -8,17 +8,17 @@ Route104_MapObjects:: @ 8381488 object_event 7, MAP_OBJ_GFX_MR_BRINEYS_BOAT, 0, 12, 0, 54, 0, 1, 7, 0, 0, 0, 0, 0, 0, 0x0, 742, 0, 0 object_event 8, MAP_OBJ_GFX_OLD_MAN_1, 0, 12, 0, 51, 0, 4, 10, 0, 0, 0, 0, 0, 0, 0x0, 738, 0, 0 object_event 9, MAP_OBJ_GFX_FISHERMAN, 0, 29, 0, 8, 0, 3, 8, 0, 0, 1, 0, 0, 0, Route104_EventScript_14F172, 0, 0, 0 - object_event 10, MAP_OBJ_GFX_BERRY_TREE, 0, 34, 0, 6, 0, 3, 12, 0, 0, 0, 0, 8, 0, BerryTreeScript, 0, 0, 0 - object_event 11, MAP_OBJ_GFX_BERRY_TREE, 0, 35, 0, 6, 0, 3, 12, 0, 0, 0, 0, 9, 0, BerryTreeScript, 0, 0, 0 - object_event 12, MAP_OBJ_GFX_BERRY_TREE, 0, 36, 0, 6, 0, 3, 12, 0, 0, 0, 0, 10, 0, BerryTreeScript, 0, 0, 0 - object_event 13, MAP_OBJ_GFX_BERRY_TREE, 0, 22, 0, 41, 0, 3, 12, 0, 0, 0, 0, 11, 0, BerryTreeScript, 0, 0, 0 - object_event 14, MAP_OBJ_GFX_BERRY_TREE, 0, 23, 0, 41, 0, 3, 12, 0, 0, 0, 0, 12, 0, BerryTreeScript, 0, 0, 0 - object_event 15, MAP_OBJ_GFX_BERRY_TREE, 0, 24, 0, 41, 0, 3, 12, 0, 0, 0, 0, 13, 0, BerryTreeScript, 0, 0, 0 + object_event 10, MAP_OBJ_GFX_BERRY_TREE, 0, 34, 0, 6, 0, 3, 12, 0, 0, 0, 0, 8, 0, S_BerryTree, 0, 0, 0 + object_event 11, MAP_OBJ_GFX_BERRY_TREE, 0, 35, 0, 6, 0, 3, 12, 0, 0, 0, 0, 9, 0, S_BerryTree, 0, 0, 0 + object_event 12, MAP_OBJ_GFX_BERRY_TREE, 0, 36, 0, 6, 0, 3, 12, 0, 0, 0, 0, 10, 0, S_BerryTree, 0, 0, 0 + object_event 13, MAP_OBJ_GFX_BERRY_TREE, 0, 22, 0, 41, 0, 3, 12, 0, 0, 0, 0, 11, 0, S_BerryTree, 0, 0, 0 + object_event 14, MAP_OBJ_GFX_BERRY_TREE, 0, 23, 0, 41, 0, 3, 12, 0, 0, 0, 0, 12, 0, S_BerryTree, 0, 0, 0 + object_event 15, MAP_OBJ_GFX_BERRY_TREE, 0, 24, 0, 41, 0, 3, 12, 0, 0, 0, 0, 13, 0, S_BerryTree, 0, 0, 0 object_event 16, MAP_OBJ_GFX_OLD_WOMAN_1, 0, 37, 0, 8, 0, 3, 9, 17, 0, 0, 0, 0, 0, Route104_EventScript_14EEC8, 0, 0, 0 - object_event 17, MAP_OBJ_GFX_BERRY_TREE, 0, 3, 0, 22, 0, 3, 12, 0, 0, 0, 0, 3, 0, BerryTreeScript, 0, 0, 0 - object_event 18, MAP_OBJ_GFX_BERRY_TREE, 0, 3, 0, 23, 0, 3, 12, 0, 0, 0, 0, 4, 0, BerryTreeScript, 0, 0, 0 - object_event 19, MAP_OBJ_GFX_BERRY_TREE, 0, 3, 0, 24, 0, 3, 12, 0, 0, 0, 0, 75, 0, BerryTreeScript, 0, 0, 0 - object_event 20, MAP_OBJ_GFX_BERRY_TREE, 0, 3, 0, 25, 0, 3, 12, 0, 0, 0, 0, 76, 0, BerryTreeScript, 0, 0, 0 + object_event 17, MAP_OBJ_GFX_BERRY_TREE, 0, 3, 0, 22, 0, 3, 12, 0, 0, 0, 0, 3, 0, S_BerryTree, 0, 0, 0 + object_event 18, MAP_OBJ_GFX_BERRY_TREE, 0, 3, 0, 23, 0, 3, 12, 0, 0, 0, 0, 4, 0, S_BerryTree, 0, 0, 0 + object_event 19, MAP_OBJ_GFX_BERRY_TREE, 0, 3, 0, 24, 0, 3, 12, 0, 0, 0, 0, 75, 0, S_BerryTree, 0, 0, 0 + object_event 20, MAP_OBJ_GFX_BERRY_TREE, 0, 3, 0, 25, 0, 3, 12, 0, 0, 0, 0, 76, 0, S_BerryTree, 0, 0, 0 object_event 21, MAP_OBJ_GFX_ITEM_BALL, 0, 39, 0, 15, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route104_EventScript_1B1453, 1002, 0, 0 object_event 22, MAP_OBJ_GFX_WOMAN_7, 0, 8, 0, 19, 0, 3, 5, 1, 0, 0, 0, 0, 0, Route104_EventScript_14EF09, 906, 0, 0 object_event 23, MAP_OBJ_GFX_LITTLE_GIRL_1, 0, 27, 0, 15, 0, 3, 8, 0, 0, 1, 0, 0, 0, Route104_EventScript_14F25A, 0, 0, 0 @@ -28,7 +28,7 @@ Route104_MapObjects:: @ 8381488 object_event 27, MAP_OBJ_GFX_ITEM_BALL, 0, 29, 0, 53, 0, 3, 1, 17, 0, 0, 0, 0, 0, Route104_EventScript_1B1460, 1057, 0, 0 object_event 28, MAP_OBJ_GFX_YOUNGSTER, 0, 18, 0, 67, 0, 3, 46, 101, 0, 1, 0, 2, 0, Route104_EventScript_14F189, 0, 0, 0 object_event 29, MAP_OBJ_GFX_ITEM_BALL, 0, 37, 0, 22, 0, 3, 1, 17, 0, 0, 0, 0, 0, Route104_EventScript_1B146D, 1115, 0, 0 - object_event 30, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 35, 0, 22, 0, 3, 1, 17, 0, 0, 0, 0, 0, CuttableTreeScript, 17, 0, 0 + object_event 30, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 35, 0, 22, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_CuttableTree, 17, 0, 0 object_event 31, MAP_OBJ_GFX_ITEM_BALL, 0, 5, 0, 8, 0, 3, 1, 17, 0, 0, 0, 0, 0, Route104_EventScript_1B147A, 1135, 0, 0 object_event 32, MAP_OBJ_GFX_BOY_2, 0, 5, 0, 26, 0, 3, 1, 17, 0, 0, 0, 0, 0, Route104_EventScript_14EF93, 0, 0, 0 diff --git a/data/maps/events/Route110.inc b/data/maps/events/Route110.inc index 4ece25549..3db4ce8e8 100644 --- a/data/maps/events/Route110.inc +++ b/data/maps/events/Route110.inc @@ -14,9 +14,9 @@ Route110_MapObjects:: @ 8381D58 object_event 13, MAP_OBJ_GFX_LASS, 0, 33, 0, 15, 0, 3, 9, 0, 0, 1, 0, 1, 0, Route110_EventScript_14FAA5, 0, 0, 0 object_event 14, MAP_OBJ_GFX_MANIAC, 0, 23, 0, 40, 0, 3, 20, 0, 0, 1, 0, 3, 0, Route110_EventScript_14FABC, 0, 0, 0 object_event 15, MAP_OBJ_GFX_FISHERMAN, 0, 10, 0, 19, 0, 3, 8, 0, 0, 1, 0, 1, 0, Route110_EventScript_14FAFA, 0, 0, 0 - object_event 16, MAP_OBJ_GFX_BERRY_TREE, 0, 5, 0, 11, 0, 3, 12, 0, 0, 0, 0, 16, 0, BerryTreeScript, 0, 0, 0 - object_event 17, MAP_OBJ_GFX_BERRY_TREE, 0, 6, 0, 11, 0, 3, 12, 0, 0, 0, 0, 17, 0, BerryTreeScript, 0, 0, 0 - object_event 18, MAP_OBJ_GFX_BERRY_TREE, 0, 7, 0, 11, 0, 3, 12, 0, 0, 0, 0, 18, 0, BerryTreeScript, 0, 0, 0 + object_event 16, MAP_OBJ_GFX_BERRY_TREE, 0, 5, 0, 11, 0, 3, 12, 0, 0, 0, 0, 16, 0, S_BerryTree, 0, 0, 0 + object_event 17, MAP_OBJ_GFX_BERRY_TREE, 0, 6, 0, 11, 0, 3, 12, 0, 0, 0, 0, 17, 0, S_BerryTree, 0, 0, 0 + object_event 18, MAP_OBJ_GFX_BERRY_TREE, 0, 7, 0, 11, 0, 3, 12, 0, 0, 0, 0, 18, 0, S_BerryTree, 0, 0, 0 object_event 19, MAP_OBJ_GFX_ITEM_BALL, 0, 30, 0, 69, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route110_EventScript_1B14BB, 1007, 0, 0 object_event 20, MAP_OBJ_GFX_ITEM_BALL, 0, 26, 0, 47, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route110_EventScript_1B14AE, 1006, 0, 0 object_event 21, MAP_OBJ_GFX_CYCLING_TRIATHLETE_M, 0, 27, 0, 92, 0, 3, 8, 0, 0, 0, 0, 0, 0, Route110_EventScript_14FA53, 0, 0, 0 diff --git a/data/maps/events/Route110_TrickHousePuzzle1.inc b/data/maps/events/Route110_TrickHousePuzzle1.inc index 7e282f0e8..3660e3c3f 100644 --- a/data/maps/events/Route110_TrickHousePuzzle1.inc +++ b/data/maps/events/Route110_TrickHousePuzzle1.inc @@ -2,22 +2,22 @@ Route110_TrickHousePuzzle1_MapObjects:: @ 839225C object_event 1, MAP_OBJ_GFX_LASS, 0, 13, 0, 21, 0, 3, 9, 0, 0, 1, 0, 5, 0, Route110_TrickHousePuzzle1_EventScript_161D31, 0, 0, 0 object_event 2, MAP_OBJ_GFX_YOUNGSTER, 0, 13, 0, 7, 0, 3, 8, 0, 0, 1, 0, 2, 0, Route110_TrickHousePuzzle1_EventScript_161D48, 0, 0, 0 object_event 3, MAP_OBJ_GFX_LASS, 0, 3, 0, 8, 0, 3, 9, 0, 0, 1, 0, 3, 0, Route110_TrickHousePuzzle1_EventScript_161D5F, 0, 0, 0 - object_event 4, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 3, 0, 18, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 19, 0, 0 - object_event 5, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 7, 0, 21, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 17, 0, 0 - object_event 6, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 12, 0, 18, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 18, 0, 0 - object_event 7, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 10, 0, 16, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 20, 0, 0 - object_event 8, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 12, 0, 12, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 23, 0, 0 - object_event 9, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 3, 0, 12, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 22, 0, 0 - object_event 10, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 0, 0, 14, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 21, 0, 0 - object_event 11, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 6, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 25, 0, 0 - object_event 12, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 2, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 24, 0, 0 - object_event 13, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 9, 0, 8, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 26, 0, 0 - object_event 14, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 2, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 28, 0, 0 - object_event 15, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 0, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 27, 0, 0 - object_event 16, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 6, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 29, 0, 0 - object_event 17, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 11, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 30, 0, 0 + object_event 4, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 3, 0, 18, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 19, 0, 0 + object_event 5, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 7, 0, 21, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 17, 0, 0 + object_event 6, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 12, 0, 18, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 18, 0, 0 + object_event 7, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 10, 0, 16, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 20, 0, 0 + object_event 8, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 12, 0, 12, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 23, 0, 0 + object_event 9, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 3, 0, 12, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 22, 0, 0 + object_event 10, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 0, 0, 14, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 21, 0, 0 + object_event 11, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 6, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 25, 0, 0 + object_event 12, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 2, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 24, 0, 0 + object_event 13, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 9, 0, 8, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 26, 0, 0 + object_event 14, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 2, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 28, 0, 0 + object_event 15, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 0, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 27, 0, 0 + object_event 16, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 6, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 29, 0, 0 + object_event 17, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 11, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 30, 0, 0 object_event 18, MAP_OBJ_GFX_ITEM_BALL, 0, 9, 0, 12, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route110_TrickHousePuzzle1_EventScript_1B1A51, 1060, 0, 0 - object_event 19, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 14, 0, 14, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 31, 0, 0 + object_event 19, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 14, 0, 14, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 31, 0, 0 Route110_TrickHousePuzzle1_MapWarps:: @ 8392424 warp_def 0, 21, 3, 2, Route110_TrickHouseEntrance diff --git a/data/maps/events/Route110_TrickHousePuzzle3.inc b/data/maps/events/Route110_TrickHousePuzzle3.inc index b7a902a54..abccae1d4 100644 --- a/data/maps/events/Route110_TrickHousePuzzle3.inc +++ b/data/maps/events/Route110_TrickHousePuzzle3.inc @@ -2,14 +2,14 @@ Route110_TrickHousePuzzle3_MapObjects:: @ 839254C object_event 1, MAP_OBJ_GFX_CAMPER, 0, 10, 0, 16, 0, 3, 8, 0, 0, 1, 0, 1, 0, Route110_TrickHousePuzzle3_EventScript_162708, 0, 0, 0 object_event 2, MAP_OBJ_GFX_PICNICKER, 0, 1, 0, 13, 0, 3, 10, 0, 0, 1, 0, 1, 0, Route110_TrickHousePuzzle3_EventScript_16271F, 0, 0, 0 object_event 3, MAP_OBJ_GFX_HIKER, 0, 11, 0, 4, 0, 3, 8, 0, 0, 1, 0, 1, 0, Route110_TrickHousePuzzle3_EventScript_162736, 0, 0, 0 - object_event 4, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 4, 0, 12, 0, 3, 1, 0, 0, 0, 0, 0, 0, BreakableRockScript, 17, 0, 0 - object_event 5, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 1, 0, 3, 0, 3, 1, 0, 0, 0, 0, 0, 0, BreakableRockScript, 18, 0, 0 - object_event 6, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 11, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, BreakableRockScript, 19, 0, 0 - object_event 7, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 13, 0, 7, 0, 3, 1, 0, 0, 0, 0, 0, 0, BreakableRockScript, 20, 0, 0 + object_event 4, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 4, 0, 12, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_BreakableRock, 17, 0, 0 + object_event 5, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 1, 0, 3, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_BreakableRock, 18, 0, 0 + object_event 6, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 11, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_BreakableRock, 19, 0, 0 + object_event 7, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 13, 0, 7, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_BreakableRock, 20, 0, 0 object_event 8, MAP_OBJ_GFX_ITEM_BALL, 0, 0, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route110_TrickHousePuzzle3_EventScript_1B1A85, 1064, 0, 0 object_event 9, MAP_OBJ_GFX_ITEM_BALL, 0, 7, 0, 2, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route110_TrickHousePuzzle3_EventScript_1B1A78, 1063, 0, 0 - object_event 10, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 1, 0, 20, 0, 3, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 21, 0, 0 - object_event 11, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 2, 0, 21, 0, 3, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 22, 0, 0 + object_event 10, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 1, 0, 20, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 21, 0, 0 + object_event 11, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 2, 0, 21, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 22, 0, 0 Route110_TrickHousePuzzle3_MapWarps:: @ 8392654 warp_def 0, 21, 3, 2, Route110_TrickHouseEntrance diff --git a/data/maps/events/Route110_TrickHousePuzzle4.inc b/data/maps/events/Route110_TrickHousePuzzle4.inc index ac3e152a2..ef450800d 100644 --- a/data/maps/events/Route110_TrickHousePuzzle4.inc +++ b/data/maps/events/Route110_TrickHousePuzzle4.inc @@ -3,17 +3,17 @@ Route110_TrickHousePuzzle4_MapObjects:: @ 83926FC object_event 2, MAP_OBJ_GFX_GIRL_3, 0, 10, 0, 4, 0, 3, 10, 0, 0, 1, 0, 1, 0, Route110_TrickHousePuzzle4_EventScript_162799, 0, 0, 0 object_event 3, MAP_OBJ_GFX_BLACK_BELT, 0, 7, 0, 4, 0, 3, 9, 0, 0, 1, 0, 2, 0, Route110_TrickHousePuzzle4_EventScript_162782, 0, 0, 0 object_event 4, MAP_OBJ_GFX_ITEM_BALL, 0, 4, 0, 4, 0, 0, 1, 0, 0, 0, 0, 0, 0, Route110_TrickHousePuzzle4_EventScript_1B1A92, 1065, 0, 0 - object_event 5, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 13, 0, 3, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 17, 0, 0 - object_event 6, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 14, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 18, 0, 0 - object_event 7, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 2, 0, 12, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 19, 0, 0 - object_event 8, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 3, 0, 9, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 20, 0, 0 - object_event 9, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 12, 0, 2, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 21, 0, 0 - object_event 10, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 8, 0, 8, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 22, 0, 0 - object_event 11, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 9, 0, 7, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 23, 0, 0 - object_event 12, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 11, 0, 13, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 24, 0, 0 - object_event 13, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 14, 0, 2, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 25, 0, 0 - object_event 14, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 4, 0, 14, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 26, 0, 0 - object_event 15, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 14, 0, 9, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 27, 0, 0 + object_event 5, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 13, 0, 3, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 17, 0, 0 + object_event 6, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 14, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 18, 0, 0 + object_event 7, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 2, 0, 12, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 19, 0, 0 + object_event 8, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 3, 0, 9, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 20, 0, 0 + object_event 9, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 12, 0, 2, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 21, 0, 0 + object_event 10, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 8, 0, 8, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 22, 0, 0 + object_event 11, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 9, 0, 7, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 23, 0, 0 + object_event 12, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 11, 0, 13, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 24, 0, 0 + object_event 13, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 14, 0, 2, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 25, 0, 0 + object_event 14, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 4, 0, 14, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 26, 0, 0 + object_event 15, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 14, 0, 9, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 27, 0, 0 Route110_TrickHousePuzzle4_MapWarps:: @ 8392864 warp_def 0, 21, 3, 2, Route110_TrickHouseEntrance diff --git a/data/maps/events/Route111.inc b/data/maps/events/Route111.inc index 9eeed5ede..e36cd7e74 100644 --- a/data/maps/events/Route111.inc +++ b/data/maps/events/Route111.inc @@ -4,8 +4,8 @@ Route111_MapObjects:: @ 83821A0 object_event 3, MAP_OBJ_GFX_LASS, 0, 13, 0, 113, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0x0, 770, 0, 0 object_event 4, MAP_OBJ_GFX_OLD_WOMAN_1, 0, 13, 0, 113, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0x0, 771, 0, 0 object_event 5, MAP_OBJ_GFX_PICNICKER, 0, 28, 0, 51, 0, 3, 17, 0, 0, 1, 0, 3, 0, Route111_EventScript_1503BE, 0, 0, 0 - object_event 6, MAP_OBJ_GFX_BERRY_TREE, 0, 22, 0, 5, 0, 3, 12, 0, 0, 0, 0, 19, 0, BerryTreeScript, 0, 0, 0 - object_event 7, MAP_OBJ_GFX_BERRY_TREE, 0, 23, 0, 5, 0, 3, 12, 0, 0, 0, 0, 20, 0, BerryTreeScript, 0, 0, 0 + object_event 6, MAP_OBJ_GFX_BERRY_TREE, 0, 22, 0, 5, 0, 3, 12, 0, 0, 0, 0, 19, 0, S_BerryTree, 0, 0, 0 + object_event 7, MAP_OBJ_GFX_BERRY_TREE, 0, 23, 0, 5, 0, 3, 12, 0, 0, 0, 0, 20, 0, S_BerryTree, 0, 0, 0 object_event 8, MAP_OBJ_GFX_MAN_4, 0, 8, 0, 91, 0, 3, 2, 17, 0, 0, 0, 0, 0, Route111_EventScript_150395, 0, 0, 0 object_event 9, MAP_OBJ_GFX_CAMPER, 0, 24, 0, 60, 0, 3, 21, 0, 0, 1, 0, 3, 0, Route111_EventScript_1503A7, 0, 0, 0 object_event 10, MAP_OBJ_GFX_HIKER, 0, 27, 0, 69, 0, 3, 50, 34, 0, 1, 0, 2, 0, Route111_EventScript_150403, 0, 0, 0 @@ -13,19 +13,19 @@ Route111_MapObjects:: @ 83821A0 object_event 12, MAP_OBJ_GFX_PICNICKER, 0, 32, 0, 72, 0, 3, 24, 0, 0, 1, 0, 3, 0, Route111_EventScript_1503EC, 0, 0, 0 object_event 13, MAP_OBJ_GFX_CAMERAMAN, 0, 14, 0, 86, 0, 3, 8, 0, 0, 0, 0, 0, 0, Route111_EventScript_1AE442, 796, 0, 0 object_event 14, MAP_OBJ_GFX_REPORTER_F, 0, 13, 0, 86, 0, 3, 8, 0, 0, 0, 0, 0, 0, Route111_EventScript_1AE422, 796, 0, 0 - object_event 15, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 18, 0, 101, 0, 3, 1, 0, 0, 0, 0, 0, 0, BreakableRockScript, 17, 0, 0 - object_event 16, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 19, 0, 100, 0, 3, 1, 0, 0, 0, 0, 0, 0, BreakableRockScript, 18, 0, 0 + object_event 15, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 18, 0, 101, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_BreakableRock, 17, 0, 0 + object_event 16, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 19, 0, 100, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_BreakableRock, 18, 0, 0 object_event 17, MAP_OBJ_GFX_GIRL_1, 0, 23, 0, 8, 0, 3, 5, 1, 0, 0, 0, 0, 0, Route111_EventScript_1500C5, 0, 0, 0 object_event 18, MAP_OBJ_GFX_ITEM_BALL, 0, 32, 0, 105, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route111_EventScript_1B14C8, 1008, 0, 0 - object_event 19, MAP_OBJ_GFX_BERRY_TREE, 0, 18, 0, 5, 0, 3, 12, 0, 0, 0, 0, 80, 0, BerryTreeScript, 0, 0, 0 - object_event 20, MAP_OBJ_GFX_BERRY_TREE, 0, 19, 0, 5, 0, 3, 12, 0, 0, 0, 0, 81, 0, BerryTreeScript, 0, 0, 0 + object_event 19, MAP_OBJ_GFX_BERRY_TREE, 0, 18, 0, 5, 0, 3, 12, 0, 0, 0, 0, 80, 0, S_BerryTree, 0, 0, 0 + object_event 20, MAP_OBJ_GFX_BERRY_TREE, 0, 19, 0, 5, 0, 3, 12, 0, 0, 0, 0, 81, 0, S_BerryTree, 0, 0, 0 object_event 21, MAP_OBJ_GFX_REPORTER_F, 0, 13, 0, 86, 0, 3, 8, 0, 0, 0, 0, 0, 0, Route111_EventScript_1AE4E2, 799, 0, 0 object_event 22, MAP_OBJ_GFX_CAMERAMAN, 0, 14, 0, 86, 0, 3, 8, 0, 0, 0, 0, 0, 0, Route111_EventScript_1AE502, 799, 0, 0 object_event 23, MAP_OBJ_GFX_REPORTER_F, 0, 13, 0, 86, 0, 3, 8, 0, 0, 0, 0, 0, 0, Route111_EventScript_1AE562, 903, 0, 0 object_event 24, MAP_OBJ_GFX_CAMERAMAN, 0, 14, 0, 86, 0, 3, 8, 0, 0, 0, 0, 0, 0, Route111_EventScript_1AE582, 903, 0, 0 object_event 25, MAP_OBJ_GFX_ITEM_BALL, 0, 12, 0, 54, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route111_EventScript_1B14D5, 1009, 0, 0 object_event 26, MAP_OBJ_GFX_ITEM_BALL, 0, 3, 0, 114, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route111_EventScript_1B14E2, 1010, 0, 0 - object_event 27, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 22, 0, 21, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 19, 0, 0 + object_event 27, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 22, 0, 21, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 19, 0, 0 object_event 28, MAP_OBJ_GFX_PICNICKER, 0, 10, 0, 82, 0, 3, 14, 0, 0, 1, 0, 2, 0, Route111_EventScript_150458, 0, 0, 0 object_event 29, MAP_OBJ_GFX_CAMPER, 0, 11, 0, 71, 0, 3, 22, 0, 0, 1, 0, 3, 0, Route111_EventScript_150441, 0, 0, 0 object_event 30, MAP_OBJ_GFX_BLACK_BELT, 0, 32, 0, 29, 0, 3, 28, 1, 0, 1, 0, 2, 0, Route111_EventScript_15046F, 0, 0, 0 diff --git a/data/maps/events/Route112.inc b/data/maps/events/Route112.inc index f6dfcfbe5..a4991a907 100644 --- a/data/maps/events/Route112.inc +++ b/data/maps/events/Route112.inc @@ -5,10 +5,10 @@ Route112_MapObjects:: @ 8382818 object_event 4, MAP_OBJ_GFX_PICNICKER, 0, 22, 0, 46, 0, 3, 23, 0, 0, 1, 0, 3, 0, Route112_EventScript_1505B5, 0, 0, 0 object_event 5, MAP_OBJ_GFX_HIKER, 0, 17, 0, 40, 0, 3, 16, 0, 0, 1, 0, 4, 0, Route112_EventScript_150560, 0, 0, 0 object_event 6, 241, 0, 27, 0, 30, 0, 3, 8, 0, 0, 0, 0, 0, 0, Route112_EventScript_15051C, 819, 0, 0 - object_event 7, MAP_OBJ_GFX_BERRY_TREE, 0, 27, 0, 6, 0, 0, 12, 0, 0, 0, 0, 24, 0, BerryTreeScript, 0, 0, 0 - object_event 8, MAP_OBJ_GFX_BERRY_TREE, 0, 28, 0, 6, 0, 0, 12, 0, 0, 0, 0, 23, 0, BerryTreeScript, 0, 0, 0 - object_event 9, MAP_OBJ_GFX_BERRY_TREE, 0, 29, 0, 6, 0, 0, 12, 0, 0, 0, 0, 22, 0, BerryTreeScript, 0, 0, 0 - object_event 10, MAP_OBJ_GFX_BERRY_TREE, 0, 30, 0, 6, 0, 3, 12, 0, 0, 0, 0, 21, 0, BerryTreeScript, 0, 0, 0 + object_event 7, MAP_OBJ_GFX_BERRY_TREE, 0, 27, 0, 6, 0, 0, 12, 0, 0, 0, 0, 24, 0, S_BerryTree, 0, 0, 0 + object_event 8, MAP_OBJ_GFX_BERRY_TREE, 0, 28, 0, 6, 0, 0, 12, 0, 0, 0, 0, 23, 0, S_BerryTree, 0, 0, 0 + object_event 9, MAP_OBJ_GFX_BERRY_TREE, 0, 29, 0, 6, 0, 0, 12, 0, 0, 0, 0, 22, 0, S_BerryTree, 0, 0, 0 + object_event 10, MAP_OBJ_GFX_BERRY_TREE, 0, 30, 0, 6, 0, 3, 12, 0, 0, 0, 0, 21, 0, S_BerryTree, 0, 0, 0 object_event 11, MAP_OBJ_GFX_HIKER, 0, 8, 0, 50, 0, 3, 26, 48, 0, 0, 0, 0, 0, Route112_EventScript_150540, 0, 0, 0 object_event 12, MAP_OBJ_GFX_ITEM_BALL, 0, 14, 0, 43, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route112_EventScript_1B14EF, 1011, 0, 0 diff --git a/data/maps/events/Route114.inc b/data/maps/events/Route114.inc index a2d948d33..1f4d761e3 100644 --- a/data/maps/events/Route114.inc +++ b/data/maps/events/Route114.inc @@ -1,25 +1,25 @@ Route114_MapObjects:: @ 8382C48 - object_event 1, MAP_OBJ_GFX_BERRY_TREE, 0, 31, 0, 43, 0, 3, 12, 0, 0, 0, 0, 77, 0, BerryTreeScript, 0, 0, 0 - object_event 2, MAP_OBJ_GFX_BERRY_TREE, 0, 31, 0, 44, 0, 3, 12, 0, 0, 0, 0, 78, 0, BerryTreeScript, 0, 0, 0 + object_event 1, MAP_OBJ_GFX_BERRY_TREE, 0, 31, 0, 43, 0, 3, 12, 0, 0, 0, 0, 77, 0, S_BerryTree, 0, 0, 0 + object_event 2, MAP_OBJ_GFX_BERRY_TREE, 0, 31, 0, 44, 0, 3, 12, 0, 0, 0, 0, 78, 0, S_BerryTree, 0, 0, 0 object_event 3, MAP_OBJ_GFX_HIKER, 0, 15, 0, 65, 0, 7, 10, 0, 0, 1, 0, 6, 0, Route114_EventScript_1507F1, 0, 0, 0 object_event 4, MAP_OBJ_GFX_HIKER, 0, 30, 0, 72, 0, 5, 15, 0, 0, 1, 0, 4, 0, Route114_EventScript_150808, 0, 0, 0 object_event 5, MAP_OBJ_GFX_CAMPER, 0, 22, 0, 50, 0, 3, 10, 0, 0, 1, 0, 3, 0, Route114_EventScript_15081F, 0, 0, 0 object_event 6, MAP_OBJ_GFX_PICNICKER, 0, 19, 0, 35, 0, 3, 1, 0, 0, 1, 0, 3, 0, Route114_EventScript_150836, 0, 0, 0 object_event 7, MAP_OBJ_GFX_MANIAC, 0, 20, 0, 56, 0, 3, 7, 0, 0, 1, 0, 3, 0, Route114_EventScript_15084D, 0, 0, 0 - object_event 8, MAP_OBJ_GFX_BERRY_TREE, 0, 31, 0, 45, 0, 3, 12, 0, 0, 0, 0, 68, 0, BerryTreeScript, 0, 0, 0 + object_event 8, MAP_OBJ_GFX_BERRY_TREE, 0, 31, 0, 45, 0, 3, 12, 0, 0, 0, 0, 68, 0, S_BerryTree, 0, 0, 0 object_event 9, MAP_OBJ_GFX_ITEM_BALL, 0, 7, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route114_EventScript_1B1516, 1014, 0, 0 object_event 10, MAP_OBJ_GFX_ITEM_BALL, 0, 11, 0, 37, 0, 4, 1, 0, 0, 0, 0, 0, 0, Route114_EventScript_1B1523, 1015, 0, 0 - object_event 11, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 12, 0, 43, 0, 4, 1, 0, 0, 0, 0, 0, 0, BreakableRockScript, 17, 0, 0 + object_event 11, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 12, 0, 43, 0, 4, 1, 0, 0, 0, 0, 0, 0, S_BreakableRock, 17, 0, 0 object_event 12, MAP_OBJ_GFX_GENTLEMAN, 0, 19, 0, 11, 0, 3, 10, 0, 0, 0, 0, 0, 0, Route114_EventScript_150782, 0, 0, 0 object_event 13, MAP_OBJ_GFX_POOCHYENA, 0, 19, 0, 12, 0, 3, 10, 0, 0, 0, 0, 0, 0, Route114_EventScript_1507C3, 0, 0, 0 object_event 14, MAP_OBJ_GFX_MAN_5, 0, 27, 0, 42, 0, 3, 3, 16, 0, 0, 0, 0, 0, Route114_EventScript_150733, 0, 0, 0 object_event 15, MAP_OBJ_GFX_FISHERMAN, 0, 23, 0, 20, 0, 3, 8, 0, 0, 1, 0, 0, 0, Route114_EventScript_1508E0, 0, 0, 0 object_event 16, MAP_OBJ_GFX_FISHERMAN, 0, 19, 0, 26, 0, 3, 9, 0, 0, 1, 0, 0, 0, Route114_EventScript_1508C9, 0, 0, 0 object_event 17, MAP_OBJ_GFX_MAN_6, 0, 30, 0, 58, 0, 5, 23, 0, 0, 1, 0, 3, 0, Route114_EventScript_15088B, 0, 0, 0 - object_event 18, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 29, 0, 53, 0, 5, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 18, 0, 0 - object_event 19, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 30, 0, 54, 0, 5, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 19, 0, 0 - object_event 20, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 22, 0, 69, 0, 7, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 20, 0, 0 - object_event 21, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 11, 0, 64, 0, 5, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 21, 0, 0 + object_event 18, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 29, 0, 53, 0, 5, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 18, 0, 0 + object_event 19, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 30, 0, 54, 0, 5, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 19, 0, 0 + object_event 20, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 22, 0, 69, 0, 7, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 20, 0, 0 + object_event 21, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 11, 0, 64, 0, 5, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 21, 0, 0 object_event 22, MAP_OBJ_GFX_LASS, 0, 24, 0, 44, 0, 3, 8, 17, 0, 1, 0, 0, 0, Route114_EventScript_150912, 0, 0, 0 object_event 23, MAP_OBJ_GFX_LASS, 0, 23, 0, 44, 0, 3, 8, 17, 0, 1, 0, 0, 0, Route114_EventScript_1508F7, 0, 0, 0 diff --git a/data/maps/events/Route115.inc b/data/maps/events/Route115.inc index cba3c3e7d..ddca08fad 100644 --- a/data/maps/events/Route115.inc +++ b/data/maps/events/Route115.inc @@ -2,18 +2,18 @@ Route115_MapObjects:: @ 8382F2C object_event 1, MAP_OBJ_GFX_WOMAN_3, 0, 18, 0, 68, 0, 3, 2, 17, 0, 0, 0, 0, 0, Route115_EventScript_15092E, 0, 0, 0 object_event 2, MAP_OBJ_GFX_OLD_MAN_1, 0, 5, 0, 15, 0, 3, 10, 0, 0, 1, 0, 6, 0, Route115_EventScript_150949, 0, 0, 0 object_event 3, MAP_OBJ_GFX_BLACK_BELT, 0, 27, 0, 53, 0, 3, 15, 17, 0, 1, 0, 4, 0, Route115_EventScript_15099E, 0, 0, 0 - object_event 4, MAP_OBJ_GFX_BERRY_TREE, 0, 11, 0, 5, 0, 3, 12, 0, 0, 0, 0, 69, 0, BerryTreeScript, 0, 0, 0 - object_event 5, MAP_OBJ_GFX_BERRY_TREE, 0, 12, 0, 5, 0, 3, 12, 0, 0, 0, 0, 70, 0, BerryTreeScript, 0, 0, 0 - object_event 6, MAP_OBJ_GFX_BERRY_TREE, 0, 13, 0, 5, 0, 3, 12, 0, 0, 0, 0, 71, 0, BerryTreeScript, 0, 0, 0 + object_event 4, MAP_OBJ_GFX_BERRY_TREE, 0, 11, 0, 5, 0, 3, 12, 0, 0, 0, 0, 69, 0, S_BerryTree, 0, 0, 0 + object_event 5, MAP_OBJ_GFX_BERRY_TREE, 0, 12, 0, 5, 0, 3, 12, 0, 0, 0, 0, 70, 0, S_BerryTree, 0, 0, 0 + object_event 6, MAP_OBJ_GFX_BERRY_TREE, 0, 13, 0, 5, 0, 3, 12, 0, 0, 0, 0, 71, 0, S_BerryTree, 0, 0, 0 object_event 7, MAP_OBJ_GFX_GIRL_3, 0, 15, 0, 50, 0, 3, 64, 0, 0, 1, 0, 3, 0, Route115_EventScript_1509DC, 0, 0, 0 object_event 8, MAP_OBJ_GFX_BLACK_BELT, 0, 17, 0, 17, 0, 3, 50, 51, 0, 1, 0, 2, 0, Route115_EventScript_150987, 0, 0, 0 object_event 9, MAP_OBJ_GFX_MANIAC, 0, 25, 0, 61, 0, 3, 14, 0, 0, 1, 0, 3, 0, Route115_EventScript_150A1A, 0, 0, 0 object_event 10, MAP_OBJ_GFX_ITEM_BALL, 0, 20, 0, 60, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route115_EventScript_1B1530, 1016, 0, 0 object_event 11, MAP_OBJ_GFX_ITEM_BALL, 0, 19, 0, 5, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route115_EventScript_1B153D, 1017, 0, 0 object_event 12, MAP_OBJ_GFX_ITEM_BALL, 0, 23, 0, 29, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route115_EventScript_1B154A, 1018, 0, 0 - object_event 13, MAP_OBJ_GFX_BERRY_TREE, 0, 31, 0, 64, 0, 3, 12, 0, 0, 0, 0, 55, 0, BerryTreeScript, 0, 0, 0 - object_event 14, MAP_OBJ_GFX_BERRY_TREE, 0, 31, 0, 65, 0, 3, 12, 0, 0, 0, 0, 56, 0, BerryTreeScript, 0, 0, 0 - object_event 15, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 29, 0, 50, 0, 3, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 17, 0, 0 + object_event 13, MAP_OBJ_GFX_BERRY_TREE, 0, 31, 0, 64, 0, 3, 12, 0, 0, 0, 0, 55, 0, S_BerryTree, 0, 0, 0 + object_event 14, MAP_OBJ_GFX_BERRY_TREE, 0, 31, 0, 65, 0, 3, 12, 0, 0, 0, 0, 56, 0, S_BerryTree, 0, 0, 0 + object_event 15, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 29, 0, 50, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 17, 0, 0 object_event 16, MAP_OBJ_GFX_ITEM_BALL, 0, 31, 0, 56, 0, 3, 1, 17, 0, 0, 0, 0, 0, Route115_EventScript_1B1557, 1118, 0, 0 Route115_MapWarps:: @ 83830AC diff --git a/data/maps/events/Route116.inc b/data/maps/events/Route116.inc index 18717be4e..b5f922524 100644 --- a/data/maps/events/Route116.inc +++ b/data/maps/events/Route116.inc @@ -1,18 +1,18 @@ Route116_MapObjects:: @ 8383170 - object_event 1, MAP_OBJ_GFX_BERRY_TREE, 0, 18, 0, 2, 0, 3, 12, 0, 0, 0, 0, 25, 0, BerryTreeScript, 0, 0, 0 - object_event 2, MAP_OBJ_GFX_BERRY_TREE, 0, 19, 0, 2, 0, 3, 12, 0, 0, 0, 0, 26, 0, BerryTreeScript, 0, 0, 0 + object_event 1, MAP_OBJ_GFX_BERRY_TREE, 0, 18, 0, 2, 0, 3, 12, 0, 0, 0, 0, 25, 0, S_BerryTree, 0, 0, 0 + object_event 2, MAP_OBJ_GFX_BERRY_TREE, 0, 19, 0, 2, 0, 3, 12, 0, 0, 0, 0, 26, 0, S_BerryTree, 0, 0, 0 object_event 3, MAP_OBJ_GFX_YOUNGSTER, 0, 12, 0, 7, 0, 3, 16, 0, 0, 1, 0, 3, 0, Route116_EventScript_150C62, 0, 0, 0 - object_event 4, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 21, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 17, 0, 0 - object_event 5, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 33, 0, 8, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 18, 0, 0 + object_event 4, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 21, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 17, 0, 0 + object_event 5, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 33, 0, 8, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 18, 0, 0 object_event 6, MAP_OBJ_GFX_BUG_CATCHER, 0, 13, 0, 17, 0, 3, 24, 0, 0, 1, 0, 2, 0, Route116_EventScript_150C79, 0, 0, 0 object_event 7, MAP_OBJ_GFX_ITEM_BALL, 0, 19, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route116_EventScript_1B1571, 1019, 0, 0 object_event 8, MAP_OBJ_GFX_ITEM_BALL, 0, 10, 0, 17, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route116_EventScript_1B157E, 1020, 0, 0 - object_event 9, MAP_OBJ_GFX_BERRY_TREE, 0, 20, 0, 2, 0, 3, 12, 0, 0, 0, 0, 66, 0, BerryTreeScript, 0, 0, 0 - object_event 10, MAP_OBJ_GFX_BERRY_TREE, 0, 21, 0, 2, 0, 3, 12, 0, 0, 0, 0, 67, 0, BerryTreeScript, 0, 0, 0 + object_event 9, MAP_OBJ_GFX_BERRY_TREE, 0, 20, 0, 2, 0, 3, 12, 0, 0, 0, 0, 66, 0, S_BerryTree, 0, 0, 0 + object_event 10, MAP_OBJ_GFX_BERRY_TREE, 0, 21, 0, 2, 0, 3, 12, 0, 0, 0, 0, 67, 0, S_BerryTree, 0, 0, 0 object_event 11, MAP_OBJ_GFX_OLD_MAN_1, 0, 46, 0, 9, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route116_EventScript_150B5D, 891, 0, 0 - object_event 12, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 30, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 19, 0, 0 + object_event 12, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 30, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 19, 0, 0 object_event 13, MAP_OBJ_GFX_HIKER, 0, 36, 0, 15, 0, 3, 13, 0, 0, 1, 0, 2, 0, Route116_EventScript_150CCE, 0, 0, 0 - object_event 14, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 24, 0, 9, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 20, 0, 0 + object_event 14, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 24, 0, 9, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 20, 0, 0 object_event 15, MAP_OBJ_GFX_ITEM_BALL, 0, 80, 0, 8, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route116_EventScript_1B158B, 1021, 0, 0 object_event 16, MAP_OBJ_GFX_LASS, 0, 22, 0, 16, 0, 3, 13, 0, 0, 1, 0, 3, 0, Route116_EventScript_150CE5, 0, 0, 0 object_event 17, MAP_OBJ_GFX_GIRL_3, 0, 25, 0, 4, 0, 3, 8, 0, 0, 1, 0, 2, 0, Route116_EventScript_150CFC, 0, 0, 0 diff --git a/data/maps/events/Route117.inc b/data/maps/events/Route117.inc index b53e3de57..bf6aeb5d0 100644 --- a/data/maps/events/Route117.inc +++ b/data/maps/events/Route117.inc @@ -9,11 +9,11 @@ Route117_MapObjects:: @ 8383440 object_event 8, MAP_OBJ_GFX_RUNNING_TRIATHLETE_M, 0, 35, 0, 7, 0, 3, 28, 7, 0, 1, 0, 4, 0, Route117_EventScript_150E09, 0, 0, 0 object_event 9, MAP_OBJ_GFX_WOMAN_3, 0, 31, 0, 11, 0, 3, 23, 0, 0, 1, 0, 3, 0, Route117_EventScript_150DCB, 0, 0, 0 object_event 10, MAP_OBJ_GFX_MAN_5, 0, 10, 0, 9, 0, 3, 18, 0, 0, 1, 0, 3, 0, Route117_EventScript_150D8D, 0, 0, 0 - object_event 11, MAP_OBJ_GFX_BERRY_TREE, 0, 41, 0, 13, 0, 3, 12, 0, 0, 0, 0, 29, 0, BerryTreeScript, 0, 0, 0 - object_event 12, MAP_OBJ_GFX_BERRY_TREE, 0, 42, 0, 13, 0, 3, 12, 0, 0, 0, 0, 28, 0, BerryTreeScript, 0, 0, 0 - object_event 13, MAP_OBJ_GFX_BERRY_TREE, 0, 43, 0, 13, 0, 3, 12, 0, 0, 0, 0, 27, 0, BerryTreeScript, 0, 0, 0 + object_event 11, MAP_OBJ_GFX_BERRY_TREE, 0, 41, 0, 13, 0, 3, 12, 0, 0, 0, 0, 29, 0, S_BerryTree, 0, 0, 0 + object_event 12, MAP_OBJ_GFX_BERRY_TREE, 0, 42, 0, 13, 0, 3, 12, 0, 0, 0, 0, 28, 0, S_BerryTree, 0, 0, 0 + object_event 13, MAP_OBJ_GFX_BERRY_TREE, 0, 43, 0, 13, 0, 3, 12, 0, 0, 0, 0, 27, 0, S_BerryTree, 0, 0, 0 object_event 14, MAP_OBJ_GFX_ITEM_BALL, 0, 16, 0, 18, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route117_EventScript_1B1598, 1022, 0, 0 - object_event 15, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 15, 0, 2, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 17, 0, 0 + object_event 15, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 15, 0, 2, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 17, 0, 0 object_event 16, MAP_OBJ_GFX_ITEM_BALL, 0, 9, 0, 1, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route117_EventScript_1B15A5, 1023, 0, 0 object_event 17, MAP_OBJ_GFX_RUNNING_TRIATHLETE_F, 0, 21, 0, 1, 0, 3, 40, 68, 0, 1, 0, 3, 0, Route117_EventScript_150E47, 0, 0, 0 object_event 18, MAP_OBJ_GFX_MANIAC, 0, 17, 0, 12, 0, 3, 7, 17, 0, 1, 0, 4, 0, Route117_EventScript_150E85, 0, 0, 0 diff --git a/data/maps/events/Route118.inc b/data/maps/events/Route118.inc index f912b6fbd..df887ba1e 100644 --- a/data/maps/events/Route118.inc +++ b/data/maps/events/Route118.inc @@ -1,7 +1,7 @@ Route118_MapObjects:: @ 8383684 - object_event 1, MAP_OBJ_GFX_BERRY_TREE, 0, 35, 0, 5, 0, 3, 12, 0, 0, 0, 0, 31, 0, BerryTreeScript, 0, 0, 0 - object_event 2, MAP_OBJ_GFX_BERRY_TREE, 0, 36, 0, 5, 0, 3, 12, 0, 0, 0, 0, 32, 0, BerryTreeScript, 0, 0, 0 - object_event 3, MAP_OBJ_GFX_BERRY_TREE, 0, 37, 0, 5, 0, 3, 12, 0, 0, 0, 0, 33, 0, BerryTreeScript, 0, 0, 0 + object_event 1, MAP_OBJ_GFX_BERRY_TREE, 0, 35, 0, 5, 0, 3, 12, 0, 0, 0, 0, 31, 0, S_BerryTree, 0, 0, 0 + object_event 2, MAP_OBJ_GFX_BERRY_TREE, 0, 36, 0, 5, 0, 3, 12, 0, 0, 0, 0, 32, 0, S_BerryTree, 0, 0, 0 + object_event 3, MAP_OBJ_GFX_BERRY_TREE, 0, 37, 0, 5, 0, 3, 12, 0, 0, 0, 0, 33, 0, S_BerryTree, 0, 0, 0 object_event 4, MAP_OBJ_GFX_MAN_6, 0, 64, 0, 10, 0, 3, 8, 0, 0, 1, 0, 3, 0, Route118_EventScript_151139, 0, 0, 0 object_event 5, MAP_OBJ_GFX_REPORTER_F, 0, 33, 0, 8, 0, 3, 8, 0, 0, 0, 0, 0, 0, Route118_EventScript_1AE462, 797, 0, 0 object_event 6, MAP_OBJ_GFX_CAMERAMAN, 0, 34, 0, 8, 0, 3, 8, 0, 0, 0, 0, 0, 0, Route118_EventScript_1AE482, 797, 0, 0 @@ -10,7 +10,7 @@ Route118_MapObjects:: @ 8383684 object_event 9, MAP_OBJ_GFX_CAMERAMAN, 0, 34, 0, 8, 0, 3, 8, 0, 0, 0, 0, 0, 0, Route118_EventScript_1AE542, 901, 0, 0 object_event 10, MAP_OBJ_GFX_REPORTER_F, 0, 33, 0, 8, 0, 3, 8, 0, 0, 0, 0, 0, 0, Route118_EventScript_1AE562, 904, 0, 0 object_event 11, MAP_OBJ_GFX_CAMERAMAN, 0, 34, 0, 8, 0, 3, 8, 0, 0, 0, 0, 0, 0, Route118_EventScript_1AE582, 904, 0, 0 - object_event 12, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 38, 0, 8, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 17, 0, 0 + object_event 12, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 38, 0, 8, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 17, 0, 0 object_event 13, MAP_OBJ_GFX_FISHERMAN, 0, 28, 0, 8, 0, 3, 9, 0, 0, 0, 0, 0, 0, Route118_EventScript_150F34, 0, 0, 0 object_event 14, MAP_OBJ_GFX_WOMAN_3, 0, 7, 0, 10, 0, 3, 24, 0, 0, 1, 0, 4, 0, Route118_EventScript_15108F, 0, 0, 0 object_event 15, MAP_OBJ_GFX_FISHERMAN, 0, 14, 0, 14, 0, 3, 8, 0, 0, 1, 0, 0, 0, Route118_EventScript_1510E4, 0, 0, 0 diff --git a/data/maps/events/Route119.inc b/data/maps/events/Route119.inc index 966ae6058..08e6e3649 100644 --- a/data/maps/events/Route119.inc +++ b/data/maps/events/Route119.inc @@ -1,7 +1,7 @@ Route119_MapObjects:: @ 8383914 - object_event 1, MAP_OBJ_GFX_BERRY_TREE, 0, 24, 0, 5, 0, 3, 12, 0, 0, 0, 0, 34, 0, BerryTreeScript, 0, 0, 0 - object_event 2, MAP_OBJ_GFX_BERRY_TREE, 0, 25, 0, 5, 0, 3, 12, 0, 0, 0, 0, 35, 0, BerryTreeScript, 0, 0, 0 - object_event 3, MAP_OBJ_GFX_BERRY_TREE, 0, 26, 0, 5, 0, 3, 12, 0, 0, 0, 0, 36, 0, BerryTreeScript, 0, 0, 0 + object_event 1, MAP_OBJ_GFX_BERRY_TREE, 0, 24, 0, 5, 0, 3, 12, 0, 0, 0, 0, 34, 0, S_BerryTree, 0, 0, 0 + object_event 2, MAP_OBJ_GFX_BERRY_TREE, 0, 25, 0, 5, 0, 3, 12, 0, 0, 0, 0, 35, 0, S_BerryTree, 0, 0, 0 + object_event 3, MAP_OBJ_GFX_BERRY_TREE, 0, 26, 0, 5, 0, 3, 12, 0, 0, 0, 0, 36, 0, S_BerryTree, 0, 0, 0 object_event 4, MAP_OBJ_GFX_BUG_CATCHER, 0, 12, 0, 123, 0, 3, 59, 0, 0, 1, 0, 1, 0, Route119_EventScript_151491, 0, 0, 0 object_event 5, MAP_OBJ_GFX_MANIAC, 0, 26, 0, 123, 0, 3, 60, 0, 0, 1, 0, 1, 0, Route119_EventScript_151463, 0, 0, 0 object_event 6, MAP_OBJ_GFX_MANIAC, 0, 5, 0, 125, 0, 3, 62, 0, 0, 1, 0, 1, 0, Route119_EventScript_15144C, 0, 0, 0 @@ -25,10 +25,10 @@ Route119_MapObjects:: @ 8383914 object_event 24, 241, 0, 13, 0, 34, 0, 4, 10, 0, 0, 0, 0, 0, 0, Route119_EventScript_1515DC, 890, 0, 0 object_event 25, 243, 0, 17, 0, 33, 0, 4, 7, 0, 0, 0, 0, 0, 0, 0x0, 923, 0, 0 object_event 26, MAP_OBJ_GFX_BOY_3, 0, 31, 0, 109, 0, 3, 8, 17, 0, 0, 0, 0, 0, Route119_EventScript_1515F3, 0, 0, 0 - object_event 27, MAP_OBJ_GFX_BERRY_TREE, 0, 8, 0, 23, 0, 3, 12, 0, 0, 0, 0, 83, 0, BerryTreeScript, 0, 0, 0 - object_event 28, MAP_OBJ_GFX_BERRY_TREE, 0, 9, 0, 23, 0, 3, 12, 0, 0, 0, 0, 84, 0, BerryTreeScript, 0, 0, 0 - object_event 29, MAP_OBJ_GFX_BERRY_TREE, 0, 29, 0, 90, 0, 3, 12, 0, 0, 0, 0, 85, 0, BerryTreeScript, 0, 0, 0 - object_event 30, MAP_OBJ_GFX_BERRY_TREE, 0, 30, 0, 90, 0, 3, 12, 0, 0, 0, 0, 86, 0, BerryTreeScript, 0, 0, 0 + object_event 27, MAP_OBJ_GFX_BERRY_TREE, 0, 8, 0, 23, 0, 3, 12, 0, 0, 0, 0, 83, 0, S_BerryTree, 0, 0, 0 + object_event 28, MAP_OBJ_GFX_BERRY_TREE, 0, 9, 0, 23, 0, 3, 12, 0, 0, 0, 0, 84, 0, S_BerryTree, 0, 0, 0 + object_event 29, MAP_OBJ_GFX_BERRY_TREE, 0, 29, 0, 90, 0, 3, 12, 0, 0, 0, 0, 85, 0, S_BerryTree, 0, 0, 0 + object_event 30, MAP_OBJ_GFX_BERRY_TREE, 0, 30, 0, 90, 0, 3, 12, 0, 0, 0, 0, 86, 0, S_BerryTree, 0, 0, 0 object_event 31, MAP_OBJ_GFX_CYCLING_TRIATHLETE_M, 0, 19, 0, 133, 0, 3, 5, 18, 0, 0, 0, 0, 0, Route119_EventScript_15141A, 0, 0, 0 object_event 32, MAP_OBJ_GFX_ITEM_BALL, 0, 3, 0, 56, 0, 3, 1, 17, 0, 0, 0, 0, 0, Route119_EventScript_1B160D, 1106, 0, 0 object_event 33, MAP_OBJ_GFX_BOY_2, 0, 35, 0, 93, 0, 4, 2, 17, 0, 0, 0, 0, 0, Route119_EventScript_1515FC, 0, 0, 0 diff --git a/data/maps/events/Route120.inc b/data/maps/events/Route120.inc index 43a67ee99..81fa21c7f 100644 --- a/data/maps/events/Route120.inc +++ b/data/maps/events/Route120.inc @@ -1,14 +1,14 @@ Route120_MapObjects:: @ 8383F30 - object_event 1, MAP_OBJ_GFX_BERRY_TREE, 0, 4, 0, 79, 0, 3, 12, 0, 0, 0, 0, 46, 0, BerryTreeScript, 0, 0, 0 - object_event 2, MAP_OBJ_GFX_BERRY_TREE, 0, 5, 0, 79, 0, 3, 12, 0, 0, 0, 0, 45, 0, BerryTreeScript, 0, 0, 0 - object_event 3, MAP_OBJ_GFX_BERRY_TREE, 0, 6, 0, 79, 0, 3, 12, 0, 0, 0, 0, 44, 0, BerryTreeScript, 0, 0, 0 - object_event 4, MAP_OBJ_GFX_BERRY_TREE, 0, 7, 0, 79, 0, 3, 12, 0, 0, 0, 0, 43, 0, BerryTreeScript, 0, 0, 0 - object_event 5, MAP_OBJ_GFX_BERRY_TREE, 0, 34, 0, 24, 0, 3, 12, 0, 0, 0, 0, 37, 0, BerryTreeScript, 0, 0, 0 - object_event 6, MAP_OBJ_GFX_BERRY_TREE, 0, 35, 0, 24, 0, 3, 12, 0, 0, 0, 0, 38, 0, BerryTreeScript, 0, 0, 0 - object_event 7, MAP_OBJ_GFX_BERRY_TREE, 0, 36, 0, 24, 0, 3, 12, 0, 0, 0, 0, 39, 0, BerryTreeScript, 0, 0, 0 - object_event 8, MAP_OBJ_GFX_BERRY_TREE, 0, 9, 0, 92, 0, 5, 12, 0, 0, 0, 0, 40, 0, BerryTreeScript, 0, 0, 0 - object_event 9, MAP_OBJ_GFX_BERRY_TREE, 0, 10, 0, 92, 0, 5, 12, 0, 0, 0, 0, 41, 0, BerryTreeScript, 0, 0, 0 - object_event 10, MAP_OBJ_GFX_BERRY_TREE, 0, 11, 0, 92, 0, 5, 12, 0, 0, 0, 0, 42, 0, BerryTreeScript, 0, 0, 0 + object_event 1, MAP_OBJ_GFX_BERRY_TREE, 0, 4, 0, 79, 0, 3, 12, 0, 0, 0, 0, 46, 0, S_BerryTree, 0, 0, 0 + object_event 2, MAP_OBJ_GFX_BERRY_TREE, 0, 5, 0, 79, 0, 3, 12, 0, 0, 0, 0, 45, 0, S_BerryTree, 0, 0, 0 + object_event 3, MAP_OBJ_GFX_BERRY_TREE, 0, 6, 0, 79, 0, 3, 12, 0, 0, 0, 0, 44, 0, S_BerryTree, 0, 0, 0 + object_event 4, MAP_OBJ_GFX_BERRY_TREE, 0, 7, 0, 79, 0, 3, 12, 0, 0, 0, 0, 43, 0, S_BerryTree, 0, 0, 0 + object_event 5, MAP_OBJ_GFX_BERRY_TREE, 0, 34, 0, 24, 0, 3, 12, 0, 0, 0, 0, 37, 0, S_BerryTree, 0, 0, 0 + object_event 6, MAP_OBJ_GFX_BERRY_TREE, 0, 35, 0, 24, 0, 3, 12, 0, 0, 0, 0, 38, 0, S_BerryTree, 0, 0, 0 + object_event 7, MAP_OBJ_GFX_BERRY_TREE, 0, 36, 0, 24, 0, 3, 12, 0, 0, 0, 0, 39, 0, S_BerryTree, 0, 0, 0 + object_event 8, MAP_OBJ_GFX_BERRY_TREE, 0, 9, 0, 92, 0, 5, 12, 0, 0, 0, 0, 40, 0, S_BerryTree, 0, 0, 0 + object_event 9, MAP_OBJ_GFX_BERRY_TREE, 0, 10, 0, 92, 0, 5, 12, 0, 0, 0, 0, 41, 0, S_BerryTree, 0, 0, 0 + object_event 10, MAP_OBJ_GFX_BERRY_TREE, 0, 11, 0, 92, 0, 5, 12, 0, 0, 0, 0, 42, 0, S_BerryTree, 0, 0, 0 object_event 11, MAP_OBJ_GFX_MAN_6, 0, 5, 0, 22, 0, 3, 14, 0, 0, 1, 0, 3, 0, Route120_EventScript_1519B3, 0, 0, 0 object_event 12, MAP_OBJ_GFX_MAN_6, 0, 32, 0, 14, 0, 3, 10, 0, 0, 1, 0, 3, 0, Route120_EventScript_1519CA, 0, 0, 0 object_event 13, MAP_OBJ_GFX_CAMPER, 0, 27, 0, 51, 0, 3, 9, 0, 0, 1, 0, 7, 0, Route120_EventScript_151A08, 0, 0, 0 @@ -19,7 +19,7 @@ Route120_MapObjects:: @ 8383F30 object_event 18, MAP_OBJ_GFX_REPORTER_F, 0, 36, 0, 5, 0, 3, 8, 0, 0, 0, 0, 0, 0, Route120_EventScript_1AE4A2, 798, 0, 0 object_event 19, MAP_OBJ_GFX_REPORTER_F, 0, 36, 0, 5, 0, 3, 8, 0, 0, 0, 0, 0, 0, Route120_EventScript_1AE562, 902, 0, 0 object_event 20, MAP_OBJ_GFX_CAMERAMAN, 0, 37, 0, 5, 0, 3, 8, 0, 0, 0, 0, 0, 0, Route120_EventScript_1AE582, 902, 0, 0 - object_event 21, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 35, 0, 32, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 17, 0, 0 + object_event 21, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 35, 0, 32, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 17, 0, 0 object_event 22, MAP_OBJ_GFX_ITEM_BALL, 0, 7, 0, 89, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route120_EventScript_1B1627, 1031, 0, 0 object_event 23, MAP_OBJ_GFX_BEAUTY, 0, 14, 0, 92, 0, 5, 5, 1, 0, 0, 0, 0, 0, Route120_EventScript_151739, 0, 0, 0 object_event 24, MAP_OBJ_GFX_WOMAN_7, 0, 28, 0, 35, 0, 3, 15, 0, 0, 1, 0, 4, 0, Route120_EventScript_151A74, 0, 0, 0 @@ -30,8 +30,8 @@ Route120_MapObjects:: @ 8383F30 object_event 29, MAP_OBJ_GFX_ITEM_BALL, 0, 23, 0, 82, 0, 5, 1, 17, 0, 0, 0, 0, 0, Route120_EventScript_1B1634, 1107, 0, 0 object_event 30, MAP_OBJ_GFX_KECLEON_1, 0, 12, 0, 16, 0, 4, 76, 17, 0, 0, 0, 0, 0, Route120_EventScript_151998, 970, 0, 0 object_event 31, MAP_OBJ_GFX_STEVEN, 0, 13, 0, 15, 0, 4, 8, 17, 0, 0, 0, 0, 0, Route120_EventScript_151853, 972, 0, 0 - object_event 32, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 20, 0, 1, 0, 3, 1, 17, 0, 0, 0, 0, 0, CuttableTreeScript, 20, 0, 0 - object_event 33, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 15, 0, 1, 0, 3, 1, 17, 0, 0, 0, 0, 0, CuttableTreeScript, 18, 0, 0 + object_event 32, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 20, 0, 1, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_CuttableTree, 20, 0, 0 + object_event 33, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 15, 0, 1, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_CuttableTree, 18, 0, 0 object_event 34, MAP_OBJ_GFX_LITTLE_BOY_1, 0, 10, 0, 72, 0, 3, 58, 17, 0, 1, 0, 3, 0, Route120_EventScript_151AD0, 0, 0, 0 object_event 35, MAP_OBJ_GFX_LITTLE_BOY_1, 0, 19, 0, 28, 0, 3, 57, 17, 0, 1, 0, 3, 0, Route120_EventScript_151AE7, 0, 0, 0 object_event 36, MAP_OBJ_GFX_KECLEON_2, 0, 12, 0, 16, 0, 3, 8, 17, 0, 0, 0, 0, 0, 0x0, 981, 0, 0 diff --git a/data/maps/events/Route121.inc b/data/maps/events/Route121.inc index 514f51349..9961344a8 100644 --- a/data/maps/events/Route121.inc +++ b/data/maps/events/Route121.inc @@ -1,26 +1,26 @@ Route121_MapObjects:: @ 8384504 object_event 1, MAP_OBJ_GFX_WOMAN_4, 0, 29, 0, 14, 0, 3, 10, 17, 0, 0, 0, 0, 0, Route121_EventScript_151B0A, 0, 0, 0 - object_event 2, MAP_OBJ_GFX_BERRY_TREE, 0, 14, 0, 2, 0, 3, 12, 0, 0, 0, 0, 47, 0, BerryTreeScript, 0, 0, 0 - object_event 3, MAP_OBJ_GFX_BERRY_TREE, 0, 15, 0, 2, 0, 3, 12, 0, 0, 0, 0, 48, 0, BerryTreeScript, 0, 0, 0 - object_event 4, MAP_OBJ_GFX_BERRY_TREE, 0, 16, 0, 2, 0, 3, 12, 0, 0, 0, 0, 49, 0, BerryTreeScript, 0, 0, 0 - object_event 5, MAP_OBJ_GFX_BERRY_TREE, 0, 17, 0, 2, 0, 3, 12, 0, 0, 0, 0, 50, 0, BerryTreeScript, 0, 0, 0 - object_event 6, MAP_OBJ_GFX_BERRY_TREE, 0, 64, 0, 14, 0, 3, 12, 0, 0, 0, 0, 51, 0, BerryTreeScript, 0, 0, 0 - object_event 7, MAP_OBJ_GFX_BERRY_TREE, 0, 65, 0, 14, 0, 3, 12, 0, 0, 0, 0, 52, 0, BerryTreeScript, 0, 0, 0 - object_event 8, MAP_OBJ_GFX_BERRY_TREE, 0, 66, 0, 14, 0, 3, 12, 0, 0, 0, 0, 53, 0, BerryTreeScript, 0, 0, 0 - object_event 9, MAP_OBJ_GFX_BERRY_TREE, 0, 67, 0, 14, 0, 3, 12, 0, 0, 0, 0, 54, 0, BerryTreeScript, 0, 0, 0 + object_event 2, MAP_OBJ_GFX_BERRY_TREE, 0, 14, 0, 2, 0, 3, 12, 0, 0, 0, 0, 47, 0, S_BerryTree, 0, 0, 0 + object_event 3, MAP_OBJ_GFX_BERRY_TREE, 0, 15, 0, 2, 0, 3, 12, 0, 0, 0, 0, 48, 0, S_BerryTree, 0, 0, 0 + object_event 4, MAP_OBJ_GFX_BERRY_TREE, 0, 16, 0, 2, 0, 3, 12, 0, 0, 0, 0, 49, 0, S_BerryTree, 0, 0, 0 + object_event 5, MAP_OBJ_GFX_BERRY_TREE, 0, 17, 0, 2, 0, 3, 12, 0, 0, 0, 0, 50, 0, S_BerryTree, 0, 0, 0 + object_event 6, MAP_OBJ_GFX_BERRY_TREE, 0, 64, 0, 14, 0, 3, 12, 0, 0, 0, 0, 51, 0, S_BerryTree, 0, 0, 0 + object_event 7, MAP_OBJ_GFX_BERRY_TREE, 0, 65, 0, 14, 0, 3, 12, 0, 0, 0, 0, 52, 0, S_BerryTree, 0, 0, 0 + object_event 8, MAP_OBJ_GFX_BERRY_TREE, 0, 66, 0, 14, 0, 3, 12, 0, 0, 0, 0, 53, 0, S_BerryTree, 0, 0, 0 + object_event 9, MAP_OBJ_GFX_BERRY_TREE, 0, 67, 0, 14, 0, 3, 12, 0, 0, 0, 0, 54, 0, S_BerryTree, 0, 0, 0 object_event 10, MAP_OBJ_GFX_LASS, 0, 39, 0, 9, 0, 3, 8, 0, 0, 1, 0, 0, 0, Route121_EventScript_151BDE, 0, 0, 0 object_event 11, MAP_OBJ_GFX_LASS, 0, 40, 0, 9, 0, 3, 8, 0, 0, 1, 0, 0, 0, Route121_EventScript_151BF9, 0, 0, 0 object_event 12, 241, 0, 30, 0, 8, 0, 3, 7, 0, 0, 0, 0, 0, 0, 0x0, 914, 0, 0 object_event 13, 241, 0, 30, 0, 7, 0, 3, 10, 0, 0, 0, 0, 0, 0, 0x0, 914, 0, 0 object_event 14, 241, 0, 31, 0, 7, 0, 3, 9, 0, 0, 0, 0, 0, 0, 0x0, 914, 0, 0 - object_event 15, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 32, 0, 5, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 17, 0, 0 - object_event 16, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 65, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 18, 0, 0 + object_event 15, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 32, 0, 5, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 17, 0, 0 + object_event 16, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 65, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 18, 0, 0 object_event 17, MAP_OBJ_GFX_WOMAN_2, 0, 63, 0, 5, 0, 3, 9, 0, 0, 1, 0, 4, 0, Route121_EventScript_151B72, 0, 0, 0 object_event 18, MAP_OBJ_GFX_GENTLEMAN, 0, 55, 0, 8, 0, 3, 17, 0, 0, 1, 0, 3, 0, Route121_EventScript_151B89, 0, 0, 0 object_event 19, MAP_OBJ_GFX_HEX_MANIAC, 0, 11, 0, 10, 0, 3, 15, 0, 0, 1, 0, 4, 0, Route121_EventScript_151BC7, 0, 0, 0 object_event 20, MAP_OBJ_GFX_BEAUTY, 0, 22, 0, 5, 0, 3, 17, 0, 0, 1, 0, 4, 0, Route121_EventScript_151C14, 0, 0, 0 object_event 21, MAP_OBJ_GFX_ITEM_BALL, 0, 55, 0, 10, 0, 3, 1, 17, 0, 0, 0, 0, 0, Route121_EventScript_1B164E, 1103, 0, 0 - object_event 22, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 26, 0, 12, 0, 3, 1, 17, 0, 0, 0, 0, 0, CuttableTreeScript, 19, 0, 0 + object_event 22, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 26, 0, 12, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_CuttableTree, 19, 0, 0 Route121_MapWarps:: @ 8384714 warp_def 37, 5, 0, 2, Route121_SafariZoneEntrance diff --git a/data/maps/events/Route123.inc b/data/maps/events/Route123.inc index 6b97bafe5..dc5ac0fb4 100644 --- a/data/maps/events/Route123.inc +++ b/data/maps/events/Route123.inc @@ -1,30 +1,30 @@ Route123_MapObjects:: @ 83847F8 - object_event 1, MAP_OBJ_GFX_BERRY_TREE, 0, 11, 0, 3, 0, 3, 12, 0, 0, 0, 0, 58, 0, BerryTreeScript, 0, 0, 0 - object_event 2, MAP_OBJ_GFX_BERRY_TREE, 0, 12, 0, 3, 0, 3, 12, 0, 0, 0, 0, 59, 0, BerryTreeScript, 0, 0, 0 - object_event 3, MAP_OBJ_GFX_BERRY_TREE, 0, 14, 0, 3, 0, 3, 12, 0, 0, 0, 0, 60, 0, BerryTreeScript, 0, 0, 0 - object_event 4, MAP_OBJ_GFX_BERRY_TREE, 0, 15, 0, 3, 0, 3, 12, 0, 0, 0, 0, 61, 0, BerryTreeScript, 0, 0, 0 - object_event 5, MAP_OBJ_GFX_BERRY_TREE, 0, 81, 0, 1, 0, 3, 12, 0, 0, 0, 0, 62, 0, BerryTreeScript, 0, 0, 0 - object_event 6, MAP_OBJ_GFX_BERRY_TREE, 0, 82, 0, 1, 0, 3, 12, 0, 0, 0, 0, 63, 0, BerryTreeScript, 0, 0, 0 - object_event 7, MAP_OBJ_GFX_BERRY_TREE, 0, 83, 0, 1, 0, 3, 12, 0, 0, 0, 0, 64, 0, BerryTreeScript, 0, 0, 0 + object_event 1, MAP_OBJ_GFX_BERRY_TREE, 0, 11, 0, 3, 0, 3, 12, 0, 0, 0, 0, 58, 0, S_BerryTree, 0, 0, 0 + object_event 2, MAP_OBJ_GFX_BERRY_TREE, 0, 12, 0, 3, 0, 3, 12, 0, 0, 0, 0, 59, 0, S_BerryTree, 0, 0, 0 + object_event 3, MAP_OBJ_GFX_BERRY_TREE, 0, 14, 0, 3, 0, 3, 12, 0, 0, 0, 0, 60, 0, S_BerryTree, 0, 0, 0 + object_event 4, MAP_OBJ_GFX_BERRY_TREE, 0, 15, 0, 3, 0, 3, 12, 0, 0, 0, 0, 61, 0, S_BerryTree, 0, 0, 0 + object_event 5, MAP_OBJ_GFX_BERRY_TREE, 0, 81, 0, 1, 0, 3, 12, 0, 0, 0, 0, 62, 0, S_BerryTree, 0, 0, 0 + object_event 6, MAP_OBJ_GFX_BERRY_TREE, 0, 82, 0, 1, 0, 3, 12, 0, 0, 0, 0, 63, 0, S_BerryTree, 0, 0, 0 + object_event 7, MAP_OBJ_GFX_BERRY_TREE, 0, 83, 0, 1, 0, 3, 12, 0, 0, 0, 0, 64, 0, S_BerryTree, 0, 0, 0 object_event 8, MAP_OBJ_GFX_WOMAN_7, 0, 70, 0, 12, 0, 3, 24, 0, 0, 1, 0, 1, 0, Route123_EventScript_151CD1, 0, 0, 0 object_event 9, MAP_OBJ_GFX_MAN_4, 0, 58, 0, 7, 0, 3, 17, 0, 0, 1, 0, 2, 0, Route123_EventScript_151CE8, 0, 0, 0 - object_event 10, MAP_OBJ_GFX_BERRY_TREE, 0, 14, 0, 5, 0, 3, 12, 0, 0, 0, 0, 65, 0, BerryTreeScript, 0, 0, 0 - object_event 11, MAP_OBJ_GFX_BERRY_TREE, 0, 15, 0, 5, 0, 3, 12, 0, 0, 0, 0, 72, 0, BerryTreeScript, 0, 0, 0 - object_event 12, MAP_OBJ_GFX_BERRY_TREE, 0, 17, 0, 5, 0, 3, 12, 0, 0, 0, 0, 73, 0, BerryTreeScript, 0, 0, 0 - object_event 13, MAP_OBJ_GFX_BERRY_TREE, 0, 18, 0, 5, 0, 3, 12, 0, 0, 0, 0, 74, 0, BerryTreeScript, 0, 0, 0 - object_event 14, MAP_OBJ_GFX_BERRY_TREE, 0, 17, 0, 3, 0, 3, 12, 0, 0, 0, 0, 79, 0, BerryTreeScript, 0, 0, 0 - object_event 15, MAP_OBJ_GFX_BERRY_TREE, 0, 18, 0, 3, 0, 3, 12, 0, 0, 0, 0, 14, 0, BerryTreeScript, 0, 0, 0 - object_event 16, MAP_OBJ_GFX_BERRY_TREE, 0, 11, 0, 5, 0, 3, 12, 0, 0, 0, 0, 15, 0, BerryTreeScript, 0, 0, 0 - object_event 17, MAP_OBJ_GFX_BERRY_TREE, 0, 12, 0, 5, 0, 3, 12, 0, 0, 0, 0, 30, 0, BerryTreeScript, 0, 0, 0 - object_event 18, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 101, 0, 13, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 17, 0, 0 - object_event 19, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 129, 0, 14, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 18, 0, 0 - object_event 20, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 92, 0, 9, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 19, 0, 0 + object_event 10, MAP_OBJ_GFX_BERRY_TREE, 0, 14, 0, 5, 0, 3, 12, 0, 0, 0, 0, 65, 0, S_BerryTree, 0, 0, 0 + object_event 11, MAP_OBJ_GFX_BERRY_TREE, 0, 15, 0, 5, 0, 3, 12, 0, 0, 0, 0, 72, 0, S_BerryTree, 0, 0, 0 + object_event 12, MAP_OBJ_GFX_BERRY_TREE, 0, 17, 0, 5, 0, 3, 12, 0, 0, 0, 0, 73, 0, S_BerryTree, 0, 0, 0 + object_event 13, MAP_OBJ_GFX_BERRY_TREE, 0, 18, 0, 5, 0, 3, 12, 0, 0, 0, 0, 74, 0, S_BerryTree, 0, 0, 0 + object_event 14, MAP_OBJ_GFX_BERRY_TREE, 0, 17, 0, 3, 0, 3, 12, 0, 0, 0, 0, 79, 0, S_BerryTree, 0, 0, 0 + object_event 15, MAP_OBJ_GFX_BERRY_TREE, 0, 18, 0, 3, 0, 3, 12, 0, 0, 0, 0, 14, 0, S_BerryTree, 0, 0, 0 + object_event 16, MAP_OBJ_GFX_BERRY_TREE, 0, 11, 0, 5, 0, 3, 12, 0, 0, 0, 0, 15, 0, S_BerryTree, 0, 0, 0 + object_event 17, MAP_OBJ_GFX_BERRY_TREE, 0, 12, 0, 5, 0, 3, 12, 0, 0, 0, 0, 30, 0, S_BerryTree, 0, 0, 0 + object_event 18, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 101, 0, 13, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 17, 0, 0 + object_event 19, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 129, 0, 14, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 18, 0, 0 + object_event 20, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 92, 0, 9, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 19, 0, 0 object_event 21, MAP_OBJ_GFX_ITEM_BALL, 0, 31, 0, 8, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route123_EventScript_1B165B, 1032, 0, 0 object_event 22, MAP_OBJ_GFX_ITEM_BALL, 0, 139, 0, 18, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route123_EventScript_1B1668, 1033, 0, 0 object_event 23, MAP_OBJ_GFX_GIRL_3, 0, 108, 0, 13, 0, 3, 15, 0, 0, 0, 0, 0, 0, Route123_EventScript_151C5D, 0, 0, 0 - object_event 24, MAP_OBJ_GFX_BERRY_TREE, 0, 109, 0, 13, 0, 3, 12, 0, 0, 0, 0, 87, 0, BerryTreeScript, 0, 0, 0 - object_event 25, MAP_OBJ_GFX_BERRY_TREE, 0, 110, 0, 13, 0, 3, 12, 0, 0, 0, 0, 88, 0, BerryTreeScript, 0, 0, 0 - object_event 26, MAP_OBJ_GFX_BERRY_TREE, 0, 111, 0, 13, 0, 3, 12, 0, 0, 0, 0, 89, 0, BerryTreeScript, 0, 0, 0 + object_event 24, MAP_OBJ_GFX_BERRY_TREE, 0, 109, 0, 13, 0, 3, 12, 0, 0, 0, 0, 87, 0, S_BerryTree, 0, 0, 0 + object_event 25, MAP_OBJ_GFX_BERRY_TREE, 0, 110, 0, 13, 0, 3, 12, 0, 0, 0, 0, 88, 0, S_BerryTree, 0, 0, 0 + object_event 26, MAP_OBJ_GFX_BERRY_TREE, 0, 111, 0, 13, 0, 3, 12, 0, 0, 0, 0, 89, 0, S_BerryTree, 0, 0, 0 object_event 27, MAP_OBJ_GFX_WOMAN_3, 0, 16, 0, 9, 0, 3, 23, 0, 0, 1, 0, 2, 0, Route123_EventScript_151CFF, 0, 0, 0 object_event 28, MAP_OBJ_GFX_LITTLE_GIRL_1, 0, 38, 0, 13, 0, 3, 8, 0, 0, 1, 0, 0, 0, Route123_EventScript_151DAD, 0, 0, 0 object_event 29, MAP_OBJ_GFX_LITTLE_GIRL_1, 0, 37, 0, 13, 0, 3, 8, 0, 0, 1, 0, 0, 0, Route123_EventScript_151D92, 0, 0, 0 diff --git a/data/maps/events/Route130.inc b/data/maps/events/Route130.inc index f2c72ef2d..009604d4b 100644 --- a/data/maps/events/Route130.inc +++ b/data/maps/events/Route130.inc @@ -1,7 +1,7 @@ Route130_MapObjects:: @ 838523C object_event 1, MAP_OBJ_GFX_SWIMMER_M, 0, 7, 0, 26, 0, 1, 29, 99, 0, 1, 0, 3, 0, Route130_EventScript_152410, 0, 0, 0 object_event 2, MAP_OBJ_GFX_SWIMMER_F, 0, 68, 0, 22, 0, 1, 13, 17, 0, 1, 0, 3, 0, Route130_EventScript_152427, 0, 0, 0 - object_event 3, MAP_OBJ_GFX_BERRY_TREE, 0, 52, 0, 9, 0, 3, 12, 0, 0, 0, 0, 82, 0, BerryTreeScript, 17, 0, 0 + object_event 3, MAP_OBJ_GFX_BERRY_TREE, 0, 52, 0, 9, 0, 3, 12, 0, 0, 0, 0, 82, 0, S_BerryTree, 17, 0, 0 Route130_MapEvents:: @ 8385284 map_events Route130_MapObjects, 0x0, 0x0, 0x0 diff --git a/data/maps/events/RusturfTunnel.inc b/data/maps/events/RusturfTunnel.inc index 490afda7b..ef1559687 100644 --- a/data/maps/events/RusturfTunnel.inc +++ b/data/maps/events/RusturfTunnel.inc @@ -1,12 +1,12 @@ RusturfTunnel_MapObjects:: @ 838BD2C object_event 1, MAP_OBJ_GFX_BLACK_BELT, 0, 23, 0, 5, 0, 3, 10, 0, 0, 0, 0, 0, 0, RusturfTunnel_EventScript_15C799, 807, 0, 0 - object_event 2, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 24, 0, 5, 0, 3, 1, 0, 0, 0, 0, 0, 0, BreakableRockScript, 931, 0, 0 + object_event 2, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 24, 0, 5, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_BreakableRock, 931, 0, 0 object_event 3, MAP_OBJ_GFX_ITEM_BALL, 0, 3, 0, 1, 0, 3, 1, 0, 0, 0, 0, 0, 0, RusturfTunnel_EventScript_1B1786, 1048, 0, 0 object_event 4, MAP_OBJ_GFX_ITEM_BALL, 0, 30, 0, 2, 0, 3, 1, 0, 0, 0, 0, 0, 0, RusturfTunnel_EventScript_1B1793, 1049, 0, 0 object_event 5, MAP_OBJ_GFX_OLD_MAN_1, 0, 5, 0, 4, 0, 3, 10, 0, 0, 0, 0, 0, 0, 0x0, 879, 0, 0 object_event 6, 241, 0, 14, 0, 5, 0, 3, 9, 0, 0, 0, 0, 0, 0, RusturfTunnel_EventScript_15C9EA, 878, 0, 0 object_event 7, MAP_OBJ_GFX_WINGULL, 0, 14, 0, 4, 0, 3, 9, 0, 0, 0, 0, 0, 0, RusturfTunnel_EventScript_15C9D7, 880, 0, 0 - object_event 8, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 24, 0, 4, 0, 3, 8, 0, 0, 0, 0, 0, 0, BreakableRockScript, 932, 0, 0 + object_event 8, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 24, 0, 4, 0, 3, 8, 0, 0, 0, 0, 0, 0, S_BreakableRock, 932, 0, 0 object_event 9, MAP_OBJ_GFX_HIKER, 0, 32, 0, 13, 0, 3, 9, 17, 0, 1, 0, 3, 0, RusturfTunnel_EventScript_15CACD, 0, 0, 0 object_event 10, MAP_OBJ_GFX_WOMAN_3, 0, 25, 0, 4, 0, 3, 9, 17, 0, 0, 0, 0, 0, RusturfTunnel_EventScript_15C782, 983, 0, 0 diff --git a/data/maps/events/SafariZone_Northeast.inc b/data/maps/events/SafariZone_Northeast.inc index 30921f095..cea87fb14 100644 --- a/data/maps/events/SafariZone_Northeast.inc +++ b/data/maps/events/SafariZone_Northeast.inc @@ -1,12 +1,12 @@ SafariZone_Northeast_MapObjects:: @ 8391A2C object_event 1, MAP_OBJ_GFX_FISHERMAN, 0, 22, 0, 9, 0, 3, 2, 17, 0, 0, 0, 0, 0, SafariZone_Northeast_EventScript_160011, 0, 0, 0 object_event 2, MAP_OBJ_GFX_MAN_5, 0, 6, 0, 29, 0, 3, 2, 17, 0, 0, 0, 0, 0, SafariZone_Northeast_EventScript_16001A, 0, 0, 0 - object_event 3, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 25, 0, 10, 0, 3, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 17, 0, 0 - object_event 4, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 25, 0, 13, 0, 3, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 18, 0, 0 - object_event 5, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 28, 0, 14, 0, 3, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 19, 0, 0 - object_event 6, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 23, 0, 6, 0, 3, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 20, 0, 0 - object_event 7, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 20, 0, 7, 0, 3, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 21, 0, 0 - object_event 8, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 27, 0, 7, 0, 3, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 22, 0, 0 + object_event 3, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 25, 0, 10, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 17, 0, 0 + object_event 4, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 25, 0, 13, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 18, 0, 0 + object_event 5, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 28, 0, 14, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 19, 0, 0 + object_event 6, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 23, 0, 6, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 20, 0, 0 + object_event 7, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 20, 0, 7, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 21, 0, 0 + object_event 8, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 27, 0, 7, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 22, 0, 0 object_event 9, MAP_OBJ_GFX_ITEM_BALL, 0, 7, 0, 6, 0, 3, 1, 17, 0, 0, 0, 0, 0, SafariZone_Northeast_EventScript_1B1919, 1119, 0, 0 SafariZone_Northeast_MapEvents:: @ 8391B04 diff --git a/data/maps/events/SeafloorCavern_Room1.inc b/data/maps/events/SeafloorCavern_Room1.inc index 1e791f884..093934481 100644 --- a/data/maps/events/SeafloorCavern_Room1.inc +++ b/data/maps/events/SeafloorCavern_Room1.inc @@ -1,7 +1,7 @@ SeafloorCavern_Room1_MapObjects:: @ 838D0B8 - object_event 1, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 5, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 17, 0, 0 - object_event 2, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 12, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 18, 0, 0 - object_event 3, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 5, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, BreakableRockScript, 19, 0, 0 + object_event 1, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 5, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 17, 0, 0 + object_event 2, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 12, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 18, 0, 0 + object_event 3, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 5, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_BreakableRock, 19, 0, 0 object_event 4, 241, 0, 8, 0, 6, 0, 3, 1, 17, 0, 1, 0, 2, 0, SeafloorCavern_Room1_EventScript_15DA6D, 946, 0, 0 object_event 5, 241, 0, 15, 0, 10, 0, 3, 16, 17, 0, 1, 0, 3, 0, SeafloorCavern_Room1_EventScript_15DA84, 946, 0, 0 diff --git a/data/maps/events/SeafloorCavern_Room2.inc b/data/maps/events/SeafloorCavern_Room2.inc index 3dbe5e8a7..86a0354e4 100644 --- a/data/maps/events/SeafloorCavern_Room2.inc +++ b/data/maps/events/SeafloorCavern_Room2.inc @@ -1,13 +1,13 @@ SeafloorCavern_Room2_MapObjects:: @ 838D15C - object_event 1, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 14, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 17, 0, 0 - object_event 2, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 18, 0, 0 - object_event 3, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 19, 0, 0 - object_event 4, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 11, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 20, 0, 0 - object_event 5, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 11, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 21, 0, 0 - object_event 6, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 11, 0, 14, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 22, 0, 0 - object_event 7, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 11, 0, 9, 0, 3, 1, 0, 0, 0, 0, 0, 0, BreakableRockScript, 24, 0, 0 - object_event 8, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 7, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, BreakableRockScript, 25, 0, 0 - object_event 9, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 15, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 23, 0, 0 + object_event 1, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 14, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 17, 0, 0 + object_event 2, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 18, 0, 0 + object_event 3, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 19, 0, 0 + object_event 4, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 11, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 20, 0, 0 + object_event 5, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 11, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 21, 0, 0 + object_event 6, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 11, 0, 14, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 22, 0, 0 + object_event 7, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 11, 0, 9, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_BreakableRock, 24, 0, 0 + object_event 8, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 7, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_BreakableRock, 25, 0, 0 + object_event 9, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 15, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 23, 0, 0 SeafloorCavern_Room2_MapWarps:: @ 838D234 warp_def 12, 19, 3, 2, SeafloorCavern_Room1 diff --git a/data/maps/events/SeafloorCavern_Room3.inc b/data/maps/events/SeafloorCavern_Room3.inc index 98e6066f2..5c5c9c219 100644 --- a/data/maps/events/SeafloorCavern_Room3.inc +++ b/data/maps/events/SeafloorCavern_Room3.inc @@ -1,13 +1,13 @@ SeafloorCavern_Room3_MapObjects:: @ 838D268 - object_event 1, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 13, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 17, 0, 0 - object_event 2, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 8, 0, 12, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 18, 0, 0 - object_event 3, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 7, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 19, 0, 0 - object_event 4, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 9, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 20, 0, 0 - object_event 5, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 21, 0, 0 - object_event 6, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 8, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 22, 0, 0 - object_event 7, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 5, 0, 9, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 23, 0, 0 - object_event 8, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 7, 0, 9, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 24, 0, 0 - object_event 9, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 9, 0, 9, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 25, 0, 0 + object_event 1, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 13, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 17, 0, 0 + object_event 2, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 8, 0, 12, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 18, 0, 0 + object_event 3, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 7, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 19, 0, 0 + object_event 4, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 9, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 20, 0, 0 + object_event 5, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 21, 0, 0 + object_event 6, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 8, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 22, 0, 0 + object_event 7, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 5, 0, 9, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 23, 0, 0 + object_event 8, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 7, 0, 9, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 24, 0, 0 + object_event 9, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 9, 0, 9, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 25, 0, 0 object_event 10, 242, 0, 10, 0, 5, 0, 3, 8, 17, 0, 1, 0, 3, 0, SeafloorCavern_Room3_EventScript_15DAA8, 946, 0, 0 SeafloorCavern_Room3_MapWarps:: @ 838D358 diff --git a/data/maps/events/SeafloorCavern_Room5.inc b/data/maps/events/SeafloorCavern_Room5.inc index 0ebd46a56..37a501512 100644 --- a/data/maps/events/SeafloorCavern_Room5.inc +++ b/data/maps/events/SeafloorCavern_Room5.inc @@ -1,10 +1,10 @@ SeafloorCavern_Room5_MapObjects:: @ 838D3D0 - object_event 1, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 3, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 17, 0, 0 - object_event 2, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 4, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 18, 0, 0 - object_event 3, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 11, 0, 7, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 19, 0, 0 - object_event 4, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 3, 0, 13, 0, 3, 1, 0, 0, 0, 0, 0, 0, BreakableRockScript, 21, 0, 0 - object_event 5, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 13, 0, 8, 0, 3, 1, 0, 0, 0, 0, 0, 0, BreakableRockScript, 22, 0, 0 - object_event 6, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 12, 0, 8, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 20, 0, 0 + object_event 1, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 3, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 17, 0, 0 + object_event 2, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 4, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 18, 0, 0 + object_event 3, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 11, 0, 7, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 19, 0, 0 + object_event 4, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 3, 0, 13, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_BreakableRock, 21, 0, 0 + object_event 5, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 13, 0, 8, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_BreakableRock, 22, 0, 0 + object_event 6, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 12, 0, 8, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 20, 0, 0 SeafloorCavern_Room5_MapWarps:: @ 838D460 warp_def 4, 1, 3, 1, SeafloorCavern_Room1 diff --git a/data/maps/events/SeafloorCavern_Room8.inc b/data/maps/events/SeafloorCavern_Room8.inc index 610937753..2d7329aec 100644 --- a/data/maps/events/SeafloorCavern_Room8.inc +++ b/data/maps/events/SeafloorCavern_Room8.inc @@ -1,16 +1,16 @@ SeafloorCavern_Room8_MapObjects:: @ 838D4DC - object_event 1, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 4, 0, 7, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 17, 0, 0 - object_event 2, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 5, 0, 7, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 18, 0, 0 - object_event 3, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 7, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 19, 0, 0 - object_event 4, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 3, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 20, 0, 0 - object_event 5, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 7, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 21, 0, 0 - object_event 6, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 4, 0, 5, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 22, 0, 0 - object_event 7, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 5, 0, 5, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 23, 0, 0 - object_event 8, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 5, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 24, 0, 0 - object_event 9, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 3, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 25, 0, 0 - object_event 10, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 4, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 26, 0, 0 - object_event 11, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 27, 0, 0 - object_event 12, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 7, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 28, 0, 0 + object_event 1, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 4, 0, 7, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 17, 0, 0 + object_event 2, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 5, 0, 7, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 18, 0, 0 + object_event 3, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 7, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 19, 0, 0 + object_event 4, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 3, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 20, 0, 0 + object_event 5, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 7, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 21, 0, 0 + object_event 6, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 4, 0, 5, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 22, 0, 0 + object_event 7, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 5, 0, 5, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 23, 0, 0 + object_event 8, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 5, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 24, 0, 0 + object_event 9, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 3, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 25, 0, 0 + object_event 10, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 4, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 26, 0, 0 + object_event 11, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 27, 0, 0 + object_event 12, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 7, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 28, 0, 0 SeafloorCavern_Room8_MapWarps:: @ 838D5FC warp_def 5, 2, 3, 0, SeafloorCavern_Room9 diff --git a/data/maps/events/ShoalCave_LowTideLowerRoom.inc b/data/maps/events/ShoalCave_LowTideLowerRoom.inc index a1770b5bb..858f919e0 100644 --- a/data/maps/events/ShoalCave_LowTideLowerRoom.inc +++ b/data/maps/events/ShoalCave_LowTideLowerRoom.inc @@ -1,5 +1,5 @@ ShoalCave_LowTideLowerRoom_MapObjects:: @ 838DE3C - object_event 1, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 25, 0, 3, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 17, 0, 0 + object_event 1, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 25, 0, 3, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 17, 0, 0 object_event 2, MAP_OBJ_GFX_BLACK_BELT, 0, 11, 0, 4, 0, 3, 2, 17, 0, 0, 0, 0, 0, ShoalCave_LowTideLowerRoom_EventScript_15E44F, 0, 0, 0 ShoalCave_LowTideLowerRoom_MapWarps:: @ 838DE6C diff --git a/data/maps/events/VictoryRoad_B1F.inc b/data/maps/events/VictoryRoad_B1F.inc index a4f778c4d..b00074990 100644 --- a/data/maps/events/VictoryRoad_B1F.inc +++ b/data/maps/events/VictoryRoad_B1F.inc @@ -1,21 +1,21 @@ VictoryRoad_B1F_MapObjects:: @ 838DA04 - object_event 1, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 20, 0, 5, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 19, 0, 0 - object_event 2, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 21, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 20, 0, 0 - object_event 3, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 4, 0, 7, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 17, 0, 0 - object_event 4, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 9, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 18, 0, 0 - object_event 5, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 20, 0, 26, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 23, 0, 0 - object_event 6, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 21, 0, 25, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 22, 0, 0 - object_event 7, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 35, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 30, 0, 0 - object_event 8, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 19, 0, 5, 0, 3, 1, 0, 0, 0, 0, 0, 0, BreakableRockScript, 25, 0, 0 - object_event 9, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 20, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, BreakableRockScript, 26, 0, 0 - object_event 10, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 18, 0, 12, 0, 3, 1, 0, 0, 0, 0, 0, 0, BreakableRockScript, 27, 0, 0 - object_event 11, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 20, 0, 25, 0, 3, 1, 0, 0, 0, 0, 0, 0, BreakableRockScript, 28, 0, 0 - object_event 12, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 21, 0, 26, 0, 3, 1, 0, 0, 0, 0, 0, 0, BreakableRockScript, 29, 0, 0 - object_event 13, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 34, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 31, 0, 0 + object_event 1, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 20, 0, 5, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 19, 0, 0 + object_event 2, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 21, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 20, 0, 0 + object_event 3, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 4, 0, 7, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 17, 0, 0 + object_event 4, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 9, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 18, 0, 0 + object_event 5, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 20, 0, 26, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 23, 0, 0 + object_event 6, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 21, 0, 25, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 22, 0, 0 + object_event 7, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 35, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 30, 0, 0 + object_event 8, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 19, 0, 5, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_BreakableRock, 25, 0, 0 + object_event 9, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 20, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_BreakableRock, 26, 0, 0 + object_event 10, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 18, 0, 12, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_BreakableRock, 27, 0, 0 + object_event 11, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 20, 0, 25, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_BreakableRock, 28, 0, 0 + object_event 12, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 21, 0, 26, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_BreakableRock, 29, 0, 0 + object_event 13, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 34, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 31, 0, 0 object_event 14, MAP_OBJ_GFX_MAN_4, 0, 37, 0, 12, 0, 3, 9, 0, 0, 1, 0, 3, 0, VictoryRoad_B1F_EventScript_15DFB5, 0, 0, 0 object_event 15, MAP_OBJ_GFX_WOMAN_7, 0, 26, 0, 16, 0, 3, 7, 0, 0, 1, 0, 4, 0, VictoryRoad_B1F_EventScript_15DFCC, 0, 0, 0 object_event 16, MAP_OBJ_GFX_WOMAN_7, 0, 5, 0, 21, 0, 3, 9, 0, 0, 1, 0, 2, 0, VictoryRoad_B1F_EventScript_15DFE3, 0, 0, 0 - object_event 17, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 34, 0, 3, 0, 3, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 32, 0, 0 + object_event 17, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 34, 0, 3, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 32, 0, 0 object_event 18, MAP_OBJ_GFX_ITEM_BALL, 0, 42, 0, 8, 0, 4, 1, 17, 0, 0, 0, 0, 0, VictoryRoad_B1F_EventScript_1B1AE0, 1086, 0, 0 object_event 19, MAP_OBJ_GFX_ITEM_BALL, 0, 32, 0, 3, 0, 3, 1, 17, 0, 0, 0, 0, 0, VictoryRoad_B1F_EventScript_1B1AED, 1087, 0, 0 diff --git a/data/scripts/berry_tree.inc b/data/scripts/berry_tree.inc index 1bbe7d355..f4707d8cb 100644 --- a/data/scripts/berry_tree.inc +++ b/data/scripts/berry_tree.inc @@ -1,4 +1,4 @@ -BerryTreeScript:: @ 81A14DD +S_BerryTree:: @ 81A14DD special FieldObjectInteractionGetBerryTreeData switch 0x8004 case 255, Route102_EventScript_1A1533 diff --git a/data/scripts/cable_club.inc b/data/scripts/cable_club.inc index 5728b52d8..6507677e0 100644 --- a/data/scripts/cable_club.inc +++ b/data/scripts/cable_club.inc @@ -215,7 +215,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A3EF2:: @ 81A3EF2 jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A42F5 OldaleTown_PokemonCenter_2F_EventScript_1A3F5E:: @ 81A3F5E - special HealPlayerParty + special ScrSpecial_HealPlayerParty special SavePlayerParty special LoadPlayerBag copyvar 0x4087, 0x8004 diff --git a/data/scripts/day_care.inc b/data/scripts/day_care.inc index b5b3d4670..dcc4b44e7 100644 --- a/data/scripts/day_care.inc +++ b/data/scripts/day_care.inc @@ -282,7 +282,7 @@ Route117_PokemonDayCare_EventScript_1B2558:: @ 81B2558 release end -Event_EggHatch:: @ 81B25BC +S_EggHatch:: @ 81B25BC lockall msgbox UnknownString_81B2C68, 4 special EggHatch diff --git a/data/scripts/maps/BattleTower_BattleRoom.inc b/data/scripts/maps/BattleTower_BattleRoom.inc index 176d8e8e8..2f0fb97b9 100644 --- a/data/scripts/maps/BattleTower_BattleRoom.inc +++ b/data/scripts/maps/BattleTower_BattleRoom.inc @@ -20,7 +20,7 @@ BattleTower_BattleRoom_EventScript_1608FA:: @ 81608FA msgbox 0x20234cc, 4 waittext closebutton - special HealPlayerParty + special ScrSpecial_HealPlayerParty setvar 0x8004, 0 setvar 0x8005, 0 special sub_813556C @@ -56,7 +56,7 @@ BattleTower_BattleRoom_EventScript_160961:: @ 8160961 special sub_8135A14 fanfare 368 waitfanfare - special HealPlayerParty + special ScrSpecial_HealPlayerParty BattleTower_BattleRoom_EventScript_1609B2:: @ 81609B2 msgbox BattleTower_BattleRoom_Text_19AD09, 5 diff --git a/data/scripts/maps/IslandCave.inc b/data/scripts/maps/IslandCave.inc index 8f2ce6dc1..2f8ba2121 100644 --- a/data/scripts/maps/IslandCave.inc +++ b/data/scripts/maps/IslandCave.inc @@ -31,7 +31,7 @@ IslandCave_MapScript1_15EF15:: @ 815EF15 setflag 2133 end -gIslandCave_EventScript_OpenRegiiceChamber:: @ 815EF19 +S_OpenRegiceChamber:: @ 815EF19 setmaptile 7, 19, 554, 1 setmaptile 8, 19, 555, 1 setmaptile 9, 19, 556, 1 diff --git a/data/scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc b/data/scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc index dcf74b77c..09d19c1c5 100644 --- a/data/scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc +++ b/data/scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc @@ -29,7 +29,7 @@ LilycoveCity_CoveLilyMotel_2F_EventScript_1583DD:: @ 81583DD message LilycoveCity_CoveLilyMotel_2F_Text_18708F waittext call LilycoveCity_CoveLilyMotel_2F_EventScript_1A02C5 - special sub_810D6A4 + special ScrSpecial_ShowDiploma waitstate release end diff --git a/data/scripts/maps/LilycoveCity_Harbor.inc b/data/scripts/maps/LilycoveCity_Harbor.inc index f8ff8f9f3..aca6b16d4 100644 --- a/data/scripts/maps/LilycoveCity_Harbor.inc +++ b/data/scripts/maps/LilycoveCity_Harbor.inc @@ -135,7 +135,7 @@ LilycoveCity_Harbor_EventScript_1599EE:: @ 81599EE callif 1, LilycoveCity_Harbor_EventScript_1599CE pause 30 spriteinvisible 255, 0, 0 - special HealPlayerParty + special ScrSpecial_HealPlayerParty setvar 0x8004, 2 call LilycoveCity_Harbor_EventScript_1A040E warp SouthernIsland_Exterior, 255, 13, 22 diff --git a/data/scripts/maps/LilycoveCity_MoveDeletersHouse.inc b/data/scripts/maps/LilycoveCity_MoveDeletersHouse.inc index 6adea2eb2..2786c930c 100644 --- a/data/scripts/maps/LilycoveCity_MoveDeletersHouse.inc +++ b/data/scripts/maps/LilycoveCity_MoveDeletersHouse.inc @@ -21,7 +21,7 @@ LilycoveCity_MoveDeletersHouse_EventScript_159ADE:: @ 8159ADE special sub_80FA148 compare RESULT, 1 jumpeq LilycoveCity_MoveDeletersHouse_EventScript_159B71 - special sub_80F9F3C + special ScrSpecial_CountPokemonMoves compare RESULT, 1 jumpeq LilycoveCity_MoveDeletersHouse_EventScript_159B64 msgbox LilycoveCity_MoveDeletersHouse_Text_18B6B0, 4 @@ -30,7 +30,7 @@ LilycoveCity_MoveDeletersHouse_EventScript_159ADE:: @ 8159ADE fadescreen 0 compare 0x8005, 4 jumpeq LilycoveCity_MoveDeletersHouse_EventScript_159ADE - special sub_80F9F84 + special ScrSpecial_GetPokemonNicknameAndMoveName msgbox LilycoveCity_MoveDeletersHouse_Text_18B6F2, 5 switch RESULT case 1, LilycoveCity_MoveDeletersHouse_EventScript_159B53 @@ -47,7 +47,7 @@ LilycoveCity_MoveDeletersHouse_EventScript_159B53:: @ 8159B53 end LilycoveCity_MoveDeletersHouse_EventScript_159B64:: @ 8159B64 - special sub_80F9F84 + special ScrSpecial_GetPokemonNicknameAndMoveName msgbox LilycoveCity_MoveDeletersHouse_Text_18B6D0, 4 releaseall end diff --git a/data/scripts/maps/MossdeepCity_GameCorner_B1F.inc b/data/scripts/maps/MossdeepCity_GameCorner_B1F.inc index a5a013d5f..c7d1201fd 100644 --- a/data/scripts/maps/MossdeepCity_GameCorner_B1F.inc +++ b/data/scripts/maps/MossdeepCity_GameCorner_B1F.inc @@ -29,7 +29,7 @@ MossdeepCity_GameCorner_B1F_EventScript_15AE6E:: @ 815AE6E compare RESULT, 2 callif 1, MossdeepCity_GameCorner_B1F_EventScript_15AEEE closebutton - special HealPlayerParty + special ScrSpecial_HealPlayerParty move 255, MossdeepCity_GameCorner_B1F_Movement_15AEFF waitmove 0 special LoadPlayerParty diff --git a/data/scripts/maps/Route101.inc b/data/scripts/maps/Route101.inc index 1acd4b598..d945aadfc 100644 --- a/data/scripts/maps/Route101.inc +++ b/data/scripts/maps/Route101.inc @@ -229,7 +229,7 @@ Route101_EventScript_14EA7F:: @ 814EA7F move 2, Route101_Movement_14EAD7 waitmove 0 msgbox Route101_Text_16D191, 4 - special HealPlayerParty + special ScrSpecial_HealPlayerParty setflag 720 clearflag 721 setflag 700 diff --git a/data/scripts/maps/Route110.inc b/data/scripts/maps/Route110.inc index d8c19d92c..a77feaa0f 100644 --- a/data/scripts/maps/Route110.inc +++ b/data/scripts/maps/Route110.inc @@ -25,7 +25,7 @@ Route110_MapScript2_14F933:: @ 814F933 .2byte 0 Route110_EventScript_14F93D:: @ 814F93D - special BeginCyclingRoadChallenge + special ScrSpecial_BeginCyclingRoadChallenge setvar 0x40a9, 2 return diff --git a/data/scripts/maps/SlateportCity.inc b/data/scripts/maps/SlateportCity.inc index 48eb5c1df..e156f8948 100644 --- a/data/scripts/maps/SlateportCity.inc +++ b/data/scripts/maps/SlateportCity.inc @@ -69,7 +69,7 @@ SlateportCity_EventScript_14BAE0:: @ 814BAE0 specialval RESULT, LeadMonHasEffortRibbon compare RESULT, 1 callif 1, SlateportCity_EventScript_14BB35 - specialval RESULT, GetLeadMonEVCount + specialval RESULT, ScrSpecial_AreLeadMonEVsMaxedOut compare RESULT, 0 callif 1, SlateportCity_EventScript_14BB2B msgbox SlateportCity_Text_164691, 4 diff --git a/data/scripts/players_house.inc b/data/scripts/players_house.inc index ca4b2bdb9..e9f379b24 100644 --- a/data/scripts/players_house.inc +++ b/data/scripts/players_house.inc @@ -107,7 +107,7 @@ LittlerootTown_BrendansHouse_2F_EventScript_1B6A61:: @ 81B6A61 LittlerootTown_BrendansHouse_2F_EventScript_1B6A91:: @ 81B6A91 inccounter GAME_STAT_CHECKED_CLOCK fadescreen 1 - special sub_810D6B8 + special ScrSpecial_ViewWallClock waitstate releaseall end diff --git a/data/specials.inc b/data/specials.inc index 1baa55442..3545d1dff 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -7,7 +7,7 @@ .set __special__, 0 .align 2 gSpecials:: - def_special HealPlayerParty + def_special ScrSpecial_HealPlayerParty def_special SetCableClubWarp def_special DoCableClubWarp def_special sub_80810DC @@ -162,7 +162,7 @@ gSpecials:: def_special sub_8123218 def_special sub_8053E90 def_special StartWallClock - def_special sub_810D6B8 + def_special ScrSpecial_ViewWallClock def_special ScrSpecial_ChooseStarter def_special ScrSpecial_StartWallyTutorialBattle def_special sub_80BF9F8 @@ -229,11 +229,11 @@ gSpecials:: def_special sub_80F9A4C def_special sub_80F9EEC def_special sub_80FA0DC - def_special sub_80F9F84 - def_special sub_80F9F3C + def_special ScrSpecial_GetPokemonNicknameAndMoveName + def_special ScrSpecial_CountPokemonMoves def_special sub_8132670 def_special GetRecordedCyclingRoadResults - def_special BeginCyclingRoadChallenge + def_special ScrSpecial_BeginCyclingRoadChallenge def_special GetPlayerAvatarBike def_special FinishCyclingRoadChallenge def_special UpdateCyclingRoadState @@ -271,7 +271,7 @@ gSpecials:: def_special SetTrickHouseEndRoomFlag def_special ScrSpecial_CreatePCMenu def_special AccessHallOfFamePC - def_special sub_810D6A4 + def_special ScrSpecial_ShowDiploma def_special CheckLeadMonCool def_special CheckLeadMonBeauty def_special CheckLeadMonCute @@ -301,7 +301,7 @@ gSpecials:: def_special sub_810F4FC def_special LeadMonHasEffortRibbon def_special GivLeadMonEffortRibbon - def_special GetLeadMonEVCount + def_special ScrSpecial_AreLeadMonEVsMaxedOut def_special sub_8064EAC def_special sub_8064ED4 def_special InitRoamer diff --git a/include/diploma.h b/include/diploma.h index 81e9e3bb2..8d730fa05 100644 --- a/include/diploma.h +++ b/include/diploma.h @@ -1,6 +1,6 @@ #ifndef GUARD_DIPLOMA_H #define GUARD_DIPLOMA_H -void sub_8145D88(void); +void CB2_ShowDiploma(void); #endif // GUARD_DIPLOMA_H diff --git a/include/event_data.h b/include/event_data.h index 98e4a6da3..ae048af4c 100644 --- a/include/event_data.h +++ b/include/event_data.h @@ -22,7 +22,7 @@ bool8 VarSet(u16 id, u16 value); u8 VarGetFieldObjectGraphicsId(u8 id); u8 *GetFlagPointer(u16 id); u8 FlagSet(u16 id); -u8 FlagReset(u16 id); +u8 FlagClear(u16 id); bool8 FlagGet(u16 id); extern u16 gSpecialVar_0x8000; diff --git a/include/field_poison.h b/include/field_poison.h index 8e8e2746f..df0b31434 100644 --- a/include/field_poison.h +++ b/include/field_poison.h @@ -1,6 +1,6 @@ #ifndef GUARD_FIELD_POISON_H #define GUARD_FIELD_POISON_H -s32 overworld_poison(void); +s32 DoPoisonFieldEffect(void); #endif // GUARD_FIELD_POISON_H diff --git a/include/item_use.h b/include/item_use.h index aae2b017a..227c0c9ee 100644 --- a/include/item_use.h +++ b/include/item_use.h @@ -38,7 +38,7 @@ void sub_80C9FC0(u8); void ItemUseOutOfBattle_Repel(u8); void ItemUseOutOfBattle_BlackWhiteFlute(u8); void task08_080A1C44(u8); -u8 sub_80CA1C8(void); +u8 CanUseEscapeRopeOnCurrMap(void); void ItemUseOutOfBattle_EscapeRope(u8); void ItemUseOutOfBattle_EvolutionStone(u8); void ItemUseInBattle_PokeBall(u8); diff --git a/include/script_pokemon_80C4.h b/include/script_pokemon_80C4.h index 629980a2d..fab07994e 100644 --- a/include/script_pokemon_80C4.h +++ b/include/script_pokemon_80C4.h @@ -8,10 +8,10 @@ void ReducePlayerPartyToThree(void); u8 sub_80C4D50(void); void ShowContestWinner(void); -void HealPlayerParty(); +void ScrSpecial_HealPlayerParty(); u8 ScriptGiveMon(u16, u8, u16, u32, u32, u8); u8 ScriptGiveEgg(u16); -void ScriptWildBattle(u16, u8, u16); +void CreateScriptedWildMon(u16, u8, u16); void ScriptSetMonMoveSlot(u8, u16, u8); #endif diff --git a/include/species.h b/include/species.h index e33481afd..9ab0565cb 100644 --- a/include/species.h +++ b/include/species.h @@ -1,7 +1,8 @@ #ifndef GUARD_SPECIES_H #define GUARD_SPECIES_H -enum { +enum +{ SPECIES_NONE, // 0x000 SPECIES_BULBASAUR, // 0x001 SPECIES_IVYSAUR, // 0x002 diff --git a/src/battle_setup.c b/src/battle_setup.c index fcc76a389..59e17e9eb 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -1069,7 +1069,7 @@ void trainer_flag_set(u16 flag) void trainer_flag_clear(u16 flag) { - FlagReset(TRAINER_FLAG_START + flag); + FlagClear(TRAINER_FLAG_START + flag); } void BattleSetup_StartTrainerBattle(void) diff --git a/src/berry.c b/src/berry.c index fa15672e7..d82eab2a6 100644 --- a/src/berry.c +++ b/src/berry.c @@ -974,7 +974,7 @@ const struct Berry gBerries[] = const struct BerryTree gBlankBerryTree = {0}; -extern u8 BerryTreeScript; +extern u8 S_BerryTree[]; extern u16 gScriptLastTalked; extern u16 gSpecialVar_0x8004; extern u16 gSpecialVar_0x8005; @@ -1078,7 +1078,7 @@ bool32 FieldObjectInteractionWaterBerryTree(void) bool8 IsPlayerFacingPlantedBerryTree(void) { - if (GetFieldObjectScriptPointerForComparison() == &BerryTreeScript + if (GetFieldObjectScriptPointerForComparison() == S_BerryTree && GetStageByBerryTreeId(FieldObjectGetBerryTreeId(gSelectedMapObject)) == 0) return TRUE; else @@ -1087,7 +1087,7 @@ bool8 IsPlayerFacingPlantedBerryTree(void) bool8 TryToWaterBerryTree(void) { - if (GetFieldObjectScriptPointerForComparison() != &BerryTreeScript) + if (GetFieldObjectScriptPointerForComparison() != S_BerryTree) return FALSE; else return FieldObjectInteractionWaterBerryTree(); diff --git a/src/braille_puzzles.c b/src/braille_puzzles.c index 63c601acf..b11b1ff3a 100644 --- a/src/braille_puzzles.c +++ b/src/braille_puzzles.c @@ -6,6 +6,7 @@ #include "fieldmap.h" #include "flags.h" #include "main.h" +#include "map_constants.h" #include "map_obj_lock.h" #include "menu.h" #include "rom6.h" @@ -19,11 +20,13 @@ extern u8 gPlayerPartyCount; extern u8 gLastFieldPokeMenuOpened; -extern u8 gIslandCave_EventScript_OpenRegiiceChamber[]; // regiice event script +extern u8 S_OpenRegiceChamber[]; // regiice event script bool8 ShouldDoBrailleDigEffect(void) { - if (!FlagGet(SYS_BRAILLE_DIG) && (gSaveBlock1.location.mapGroup == 0x18 && gSaveBlock1.location.mapNum == 0x47)) + if (!FlagGet(SYS_BRAILLE_DIG) + && (gSaveBlock1.location.mapGroup == MAP_GROUP_SEALED_CHAMBER_OUTER_ROOM + && gSaveBlock1.location.mapNum == MAP_ID_SEALED_CHAMBER_OUTER_ROOM)) { if (gSaveBlock1.pos.x == 10 && gSaveBlock1.pos.y == 3) return TRUE; @@ -52,10 +55,11 @@ void DoBrailleDigEffect(void) bool8 CheckRelicanthWailord(void) { + // First comes Relicanth. if (GetMonData(&gPlayerParty, MON_DATA_SPECIES2, 0) == SPECIES_RELICANTH) { CalculatePlayerPartyCount(); - + // Last comes Wailord if (GetMonData(&gPlayerParty[gPlayerPartyCount - 1], MON_DATA_SPECIES2, 0) == SPECIES_WAILORD) return TRUE; } @@ -64,7 +68,7 @@ bool8 CheckRelicanthWailord(void) bool8 ShouldDoBrailleStrengthEffect(void) { - if (!FlagGet(SYS_BRAILLE_STRENGTH) && (gSaveBlock1.location.mapGroup == 0x18 && gSaveBlock1.location.mapNum == 0x6)) + if (!FlagGet(SYS_BRAILLE_STRENGTH) && (gSaveBlock1.location.mapGroup == MAP_GROUP_DESERT_RUINS && gSaveBlock1.location.mapNum == MAP_ID_DESERT_RUINS)) { if (gSaveBlock1.pos.x == 10 && gSaveBlock1.pos.y == 23) return TRUE; @@ -94,7 +98,7 @@ void DoBrailleStrengthEffect(void) bool8 ShouldDoBrailleFlyEffect(void) { - if (!FlagGet(SYS_BRAILLE_FLY) && (gSaveBlock1.location.mapGroup == 0x18 && gSaveBlock1.location.mapNum == 0x44)) + if (!FlagGet(SYS_BRAILLE_FLY) && (gSaveBlock1.location.mapGroup == MAP_GROUP_ANCIENT_TOMB && gSaveBlock1.location.mapNum == MAP_ID_ANCIENT_TOMB)) { if (gSaveBlock1.pos.x == 8 && gSaveBlock1.pos.y == 25) return TRUE; @@ -106,7 +110,7 @@ bool8 ShouldDoBrailleFlyEffect(void) void DoBrailleFlyEffect(void) { gFieldEffectArguments[0] = gLastFieldPokeMenuOpened; - FieldEffectStart(0x3C); + FieldEffectStart(FLDEFF_USE_FLY_ANCIENT_TOMB); } bool8 FldEff_UseFlyAncientTomb(void) @@ -120,7 +124,7 @@ bool8 FldEff_UseFlyAncientTomb(void) void UseFlyAncientTomb_Callback(void) { - FieldEffectActiveListRemove(0x3C); + FieldEffectActiveListRemove(FLDEFF_USE_FLY_ANCIENT_TOMB); UseFlyAncientTomb_Finish(); } @@ -158,7 +162,7 @@ void Task_BrailleWait(u8 taskId) if (BrailleWait_CheckButtonPress() != FALSE) { MenuZeroFillScreen(); - PlaySE(5); + PlaySE(SE_SELECT); data[0] = 2; } else @@ -191,7 +195,7 @@ void Task_BrailleWait(u8 taskId) break; case 4: sub_8064E2C(); - ScriptContext1_SetupScript(gIslandCave_EventScript_OpenRegiiceChamber); + ScriptContext1_SetupScript(S_OpenRegiceChamber); DestroyTask(taskId); break; } @@ -199,14 +203,14 @@ void Task_BrailleWait(u8 taskId) bool32 BrailleWait_CheckButtonPress(void) { - u16 var = 0xFF; + u16 keyMask = A_BUTTON | B_BUTTON | START_BUTTON | SELECT_BUTTON | DPAD_ANY; - if (gSaveBlock2.optionsButtonMode == 1) - var |= 0x300; - if (gSaveBlock2.optionsButtonMode == 2) - var |= 0x200; + if (gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR) + keyMask |= L_BUTTON | R_BUTTON; + if (gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A) + keyMask |= L_BUTTON; - if ((var & gMain.newKeys) != FALSE) + if (gMain.newKeys & keyMask) return TRUE; else return FALSE; diff --git a/src/decoration.c b/src/decoration.c index 1b23bb306..1d48692c1 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -2322,7 +2322,7 @@ void sub_80FF474(void) { if (FlagGet(i + 0xae) == 1) { - FlagReset(i + 0xae); + FlagClear(i + 0xae); for (j=0; jmapObjectCount; j++) { if (gMapHeader.events->mapObjects[j].flagId == i + 0xae) diff --git a/src/diploma.c b/src/diploma.c index beb3d3be4..27601404c 100644 --- a/src/diploma.c +++ b/src/diploma.c @@ -35,7 +35,7 @@ static void VBlankCB(void) TransferPlttBuffer(); } -void sub_8145D88(void) +void CB2_ShowDiploma(void) { u32 savedIme; diff --git a/src/event_data.c b/src/event_data.c index 0484bae02..ee475343f 100644 --- a/src/event_data.c +++ b/src/event_data.c @@ -36,10 +36,10 @@ void ClearTempFieldEventData(void) { memset(gSaveBlock1.flags, 0, TEMP_FLAGS_SIZE); memset(gSaveBlock1.vars, 0, TEMP_VARS_SIZE); - FlagReset(SYS_ENC_UP_ITEM); - FlagReset(SYS_ENC_DOWN_ITEM); - FlagReset(SYS_USE_STRENGTH); - FlagReset(SYS_CTRL_OBJ_DELETE); + FlagClear(SYS_ENC_UP_ITEM); + FlagClear(SYS_ENC_DOWN_ITEM); + FlagClear(SYS_USE_STRENGTH); + FlagClear(SYS_CTRL_OBJ_DELETE); } // probably had different flag splits at one point. @@ -53,7 +53,7 @@ void DisableNationalPokedex(void) u16 *nationalDexVar = GetVarPointer(VAR_NATIONAL_DEX); gSaveBlock2.pokedex.nationalMagic = 0; *nationalDexVar = 0; - FlagReset(SYS_NATIONAL_DEX); + FlagClear(SYS_NATIONAL_DEX); } void EnableNationalPokedex(void) @@ -77,7 +77,7 @@ bool32 IsNationalPokedexEnabled(void) void DisableMysteryGift(void) { - FlagReset(SYS_EXDATA_ENABLE); + FlagClear(SYS_EXDATA_ENABLE); } void EnableMysteryGift(void) @@ -93,7 +93,7 @@ bool32 IsMysteryGiftEnabled(void) void DisableResetRTC(void) { VarSet(VAR_RESET_RTC_ENABLE, 0); - FlagReset(SYS_RESET_RTC_ENABLE); + FlagClear(SYS_RESET_RTC_ENABLE); } void EnableResetRTC(void) @@ -162,7 +162,7 @@ u8 FlagSet(u16 id) return 0; } -u8 FlagReset(u16 id) +u8 FlagClear(u16 id) { u8 *ptr = GetFlagPointer(id); if (ptr) diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index befa546ad..ff8e8504c 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -57,7 +57,7 @@ extern u8 gUnknown_081A4363[]; extern u8 gUnknown_081C346A[]; extern u8 gUnknown_081616E1[]; extern u8 Event_WorldMap[]; -extern u8 Event_RunningShoesManual[]; +extern u8 S_RunningShoesManual[]; extern u8 PictureBookShelfScript[]; extern u8 BookshelfScript[]; extern u8 PokemonCenterBookshelfScript[]; @@ -70,13 +70,13 @@ extern u8 gUnknown_0815F43A[]; extern u8 gUnknown_0815F523[]; extern u8 gUnknown_0815F528[]; extern u8 UseSurfScript[]; -extern u8 UseWaterfallScript[]; -extern u8 CannotUseWaterfallScript[]; +extern u8 S_UseWaterfall[]; +extern u8 S_CannotUseWaterfall[]; extern u8 UseDiveScript[]; -extern u8 UnderwaterUseDiveScript[]; -extern u8 GraniteCave_B1F_EventScript_1C6BC5[]; +extern u8 S_UseDiveUnderwater[]; +extern u8 S_FallDownHole[]; extern u8 gUnknown_081A14B8[]; -extern u8 Event_EggHatch[]; +extern u8 S_EggHatch[]; extern u8 gUnknown_0815FD0D[]; extern u8 gUnknown_081C6BDE[]; @@ -391,7 +391,7 @@ static u8 *sub_8068500(struct MapPosition *position, u8 b, u8 c) if (MetatileBehavior_IsRegionMap(b) == TRUE) return Event_WorldMap; if (sub_805791C(b) == TRUE) - return Event_RunningShoesManual; + return S_RunningShoesManual; if (MetatileBehavior_IsPictureBookShelf(b) == TRUE) return PictureBookShelfScript; if (MetatileBehavior_IsBookShelf(b) == TRUE) @@ -428,9 +428,9 @@ static u8 *TryGetFieldMoveScript(struct MapPosition *unused1, u8 b, u8 unused2) if (MetatileBehavior_IsWaterfall(b) == TRUE) { if (FlagGet(BADGE08_GET) == TRUE && IsPlayerSurfingNorth() == TRUE) - return UseWaterfallScript; + return S_UseWaterfall; else - return CannotUseWaterfallScript; + return S_CannotUseWaterfall; } return NULL; } @@ -447,9 +447,9 @@ static bool32 sub_8068770(void) static bool32 sub_80687A4(void) { - if (FlagGet(BADGE07_GET) && gMapHeader.mapType == 5 && sub_8068F18() == 1) + if (FlagGet(BADGE07_GET) && gMapHeader.mapType == MAP_TYPE_UNDERWATER && sub_8068F18() == 1) { - ScriptContext1_SetupScript(UnderwaterUseDiveScript); + ScriptContext1_SetupScript(S_UseDiveUnderwater); return TRUE; } return FALSE; @@ -485,7 +485,7 @@ bool8 sub_8068870(u16 a) { if (MetatileBehavior_IsCrackedFloorHole(a)) { - ScriptContext1_SetupScript(GraniteCave_B1F_EventScript_1C6BC5); + ScriptContext1_SetupScript(S_FallDownHole); return TRUE; } return FALSE; @@ -503,7 +503,7 @@ bool8 sub_8068894(void) if (sub_80422A0()) { IncrementGameStat(13); - ScriptContext1_SetupScript(Event_EggHatch); + ScriptContext1_SetupScript(S_EggHatch); return TRUE; } if (SafariZoneTakeStep() == TRUE) @@ -549,14 +549,14 @@ static bool8 overworld_poison_step(void) { u16 *ptr; - if (gMapHeader.mapType != 9) + if (gMapHeader.mapType != MAP_TYPE_SECRET_BASE) { ptr = GetVarPointer(VAR_POISON_STEP_COUNTER); (*ptr)++; (*ptr) %= 4; if (*ptr == 0) { - switch (overworld_poison()) + switch (DoPoisonFieldEffect()) { case 0: return FALSE; @@ -730,7 +730,7 @@ static bool8 map_warp_consider_2_to_inside(struct MapPosition *position, u16 b, return FALSE; } -static s8 map_warp_check(struct MapHeader *mapHeader, u16 b, u16 c, u8 d) +static s8 map_warp_check(struct MapHeader *mapHeader, u16 x, u16 y, u8 warpId) { s32 i; struct WarpEvent *warpEvent = mapHeader->events->warps; @@ -738,9 +738,9 @@ static s8 map_warp_check(struct MapHeader *mapHeader, u16 b, u16 c, u8 d) for (i = 0; i < warpCount; i++, warpEvent++) { - if ((u16)warpEvent->x == b && (u16)warpEvent->y == c) + if ((u16)warpEvent->x == x && (u16)warpEvent->y == y) { - if ((u8)warpEvent->warpId == d || (u8)warpEvent->warpId == 0) + if ((u8)warpEvent->warpId == warpId || (u8)warpEvent->warpId == 0) return i; } } @@ -767,7 +767,7 @@ static u8 *trigger_activate(struct CoordEvent *coordEvent) return NULL; } -static u8 *mapheader_trigger_activate_at(struct MapHeader *mapHeader, u16 b, u16 c, u8 d) +static u8 *mapheader_trigger_activate_at(struct MapHeader *mapHeader, u16 x, u16 y, u8 d) { s32 i; struct CoordEvent *coordEvents = mapHeader->events->coordEvents; @@ -776,7 +776,7 @@ static u8 *mapheader_trigger_activate_at(struct MapHeader *mapHeader, u16 b, u16 for (i = 0; i < coordEventCount; i++) { - if ((u16)coordEvents[i].x == b && (u16)coordEvents[i].y == c) + if ((u16)coordEvents[i].x == x && (u16)coordEvents[i].y == y) { if (coordEvents[i].unk4 == d || coordEvents[i].unk4 == 0) { @@ -813,7 +813,7 @@ static struct BgEvent *FindInvisibleMapObjectByPosition(struct MapHeader *mapHea int dive_warp(struct MapPosition *position, u16 b) { - if (gMapHeader.mapType == 5 && sub_805750C(b) == 0) + if (gMapHeader.mapType == MAP_TYPE_UNDERWATER && sub_805750C(b) == 0) { if (sub_80538B0(position->x - 7, position->y - 7)) { @@ -843,7 +843,7 @@ u8 sub_8068F18(void) PlayerGetDestCoords(&x, &y); r5 = MapGridGetMetatileBehaviorAt(x, y); - if (gMapHeader.mapType == 5 && sub_805750C(r5) == 0) + if (gMapHeader.mapType == MAP_TYPE_UNDERWATER && sub_805750C(r5) == 0) { if (sub_80538B0(x - 7, y - 7) == TRUE) return 1; diff --git a/src/field_map_obj.c b/src/field_map_obj.c index a453fd2c1..0e7cd7896 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -3899,7 +3899,7 @@ u8 do_berry_tree_growth_sparkle_1(struct MapObject *mapObject, struct Sprite *sp gFieldEffectArguments[1] = mapObject->coords2.y; gFieldEffectArguments[2] = sprite->subpriority - 1; gFieldEffectArguments[3] = sprite->oam.priority; - FieldEffectStart(0x17); + FieldEffectStart(FLDEFF_BERRY_TREE_GROWTH_SPARKLE); sprite->animNum = 0; } return 0; @@ -3938,7 +3938,7 @@ u8 do_berry_tree_growth_sparkle_2(struct MapObject *mapObject, struct Sprite *sp gFieldEffectArguments[1] = mapObject->coords2.y; gFieldEffectArguments[2] = sprite->subpriority - 1; gFieldEffectArguments[3] = sprite->oam.priority; - FieldEffectStart(0x17); + FieldEffectStart(FLDEFF_BERRY_TREE_GROWTH_SPARKLE); return 1; } @@ -5087,7 +5087,7 @@ void FieldObjectCB_TreeDisguise(struct Sprite *sprite) if (mapObject->mapobj_unk_21 == 0 || (mapObject->mapobj_unk_21 == 1 && sprite->data7 == 0)) { FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]); - mapObject->mapobj_unk_1A = FieldEffectStart(0x1c); + mapObject->mapobj_unk_1A = FieldEffectStart(FLDEFF_TREE_DISGUISE); mapObject->mapobj_unk_21 = 1; sprite->data7 ++; } @@ -5107,7 +5107,7 @@ void FieldObjectCB_MountainDisguise(struct Sprite *sprite) if (mapObject->mapobj_unk_21 == 0 || (mapObject->mapobj_unk_21 == 1 && sprite->data7 == 0)) { FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]); - mapObject->mapobj_unk_1A = FieldEffectStart(0x1d); + mapObject->mapobj_unk_1A = FieldEffectStart(FLDEFF_MOUNTAIN_DISGUISE); mapObject->mapobj_unk_21 = 1; sprite->data7 ++; } @@ -7467,7 +7467,7 @@ bool8 sub_8062644(struct MapObject *mapObject, struct Sprite *sprite) bool8 do_exclamation_mark_bubble_1(struct MapObject *mapObject, struct Sprite *sprite) { FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]); - FieldEffectStart(0x0); + FieldEffectStart(FLDEFF_EXCLAMATION_MARK_ICON_1); sprite->data2 = 1; return TRUE; } @@ -7475,7 +7475,7 @@ bool8 do_exclamation_mark_bubble_1(struct MapObject *mapObject, struct Sprite *s bool8 do_exclamation_mark_bubble_2(struct MapObject *mapObject, struct Sprite *sprite) { FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]); - FieldEffectStart(0x21); + FieldEffectStart(FLDEFF_EXCLAMATION_MARK_ICON_2); sprite->data2 = 1; return TRUE; } @@ -7483,7 +7483,7 @@ bool8 do_exclamation_mark_bubble_2(struct MapObject *mapObject, struct Sprite *s bool8 do_heart_bubble(struct MapObject *mapObject, struct Sprite *sprite) { FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]); - FieldEffectStart(0x2e); + FieldEffectStart(FLDEFF_HEART_ICON); sprite->data2 = 1; return TRUE; } diff --git a/src/field_map_obj_helpers.c b/src/field_map_obj_helpers.c index b3edd9591..93cd57557 100644 --- a/src/field_map_obj_helpers.c +++ b/src/field_map_obj_helpers.c @@ -314,5 +314,5 @@ void DoRippleFieldEffect(struct MapObject *mapObject, struct Sprite *sprite) gFieldEffectArguments[1] = sprite->pos1.y + (gfxInfo->height >> 1) - 2; gFieldEffectArguments[2] = 151; gFieldEffectArguments[3] = 3; - FieldEffectStart(5); + FieldEffectStart(FLDEFF_RIPPLE); } diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index fc194d513..c8099a73d 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -669,7 +669,7 @@ void PlayerAvatarTransition_Surfing(struct MapObject *a) gFieldEffectArguments[0] = a->coords2.x; gFieldEffectArguments[1] = a->coords2.y; gFieldEffectArguments[2] = gPlayerAvatar.mapObjectId; - unk = FieldEffectStart(8); + unk = FieldEffectStart(FLDEFF_SURF_BLOB); a->mapobj_unk_1A = unk; sub_8127ED0(unk, 1); } @@ -1230,7 +1230,7 @@ u8 sub_8059EA4(struct Task *task, struct MapObject *b, struct MapObject *c) gFieldEffectArguments[1] = c->coords2.y; gFieldEffectArguments[2] = c->elevation; gFieldEffectArguments[3] = gSprites[c->spriteId].oam.priority; - FieldEffectStart(10); + FieldEffectStart(FLDEFF_DUST); PlaySE(SE_W070); task->data[0]++; } diff --git a/src/field_poison.c b/src/field_poison.c index 8c9e029e1..1244b9c62 100644 --- a/src/field_poison.c +++ b/src/field_poison.c @@ -108,7 +108,7 @@ void ExecuteWhiteOut(void) ScriptContext1_Stop(); } -s32 overworld_poison(void) +s32 DoPoisonFieldEffect(void) { struct Pokemon *pkmn = &gPlayerParty[0]; u32 numPoisoned = 0; diff --git a/src/field_special_scene.c b/src/field_special_scene.c index d118fe2ec..38c076c51 100644 --- a/src/field_special_scene.c +++ b/src/field_special_scene.c @@ -304,8 +304,8 @@ void Task_HandlePorthole(u8 taskId) } break; case EXIT_PORTHOLE: // exit porthole. - FlagReset(0x4001); - FlagReset(0x4000); + FlagClear(0x4001); + FlagClear(0x4000); copy_saved_warp2_bank_and_enter_x_to_warp1(0); sp13E_warp_to_last_warp(); DestroyTask(taskId); diff --git a/src/field_specials.c b/src/field_specials.c index 66f945cf8..c23ea2ddc 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -61,44 +61,44 @@ static void RecordCyclingRoadResults(u32, u8); static struct ElevatorMenu gUnknown_03000760[20]; -void sub_810D6A4(void) { - SetMainCallback2(sub_8145D88); +void ScrSpecial_ShowDiploma(void) +{ + SetMainCallback2(CB2_ShowDiploma); ScriptContext2_Enable(); } -void sub_810D6B8(void) { +void ScrSpecial_ViewWallClock(void) +{ gMain.savedCallback = c2_exit_to_overworld_2_switch; SetMainCallback2(CB2_ViewWallClock); ScriptContext2_Enable(); } -void ResetCyclingRoadChallengeData(void) { +void ResetCyclingRoadChallengeData(void) +{ gUnknown_02039250 = 0; gUnknown_02039251 = 0; gUnknown_02039254 = 0; } -void BeginCyclingRoadChallenge(void) { +void ScrSpecial_BeginCyclingRoadChallenge(void) +{ gUnknown_02039250 = 1; gUnknown_02039251 = 0; gUnknown_02039254 = gMain.vblankCounter1; } -u16 GetPlayerAvatarBike(void) { +u16 GetPlayerAvatarBike(void) +{ if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_ACRO_BIKE)) - { return 1; - } - if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE)) - { return 2; - } - return 0; } -void DetermineCyclingRoadResults(u32 arg0, u8 arg1) { +static void DetermineCyclingRoadResults(u32 arg0, u8 arg1) +{ u8 result; if (arg1 <= 99) @@ -225,7 +225,7 @@ void SetSSTidalFlag(void) void ResetSSTidalFlag(void) { - FlagReset(SYS_CRUISE_MODE); + FlagClear(SYS_CRUISE_MODE); } bool32 CountSSTidalStep(u16 delta) @@ -1453,7 +1453,7 @@ void ResetTrickHouseEndRoomFlag(void) u16 *specVar = &gSpecialVar_0x8004; u16 flag = 0x259; *specVar = flag; - FlagReset(flag); + FlagClear(flag); } bool8 CheckLeadMonCool(void) @@ -1868,7 +1868,7 @@ void GivLeadMonEffortRibbon(void) SetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_EFFORT_RIBBON, &ribbonSet); } -bool8 GetLeadMonEVCount(void) +bool8 ScrSpecial_AreLeadMonEVsMaxedOut(void) { if (GetMonEVCount(&gPlayerParty[GetLeadMonIndex()]) >= 510) { @@ -1919,7 +1919,7 @@ bool8 IsStarterInParty(void) u8 i; u16 starter = GetStarterPokemon(VarGet(VAR_FIRST_POKE)); u8 partyCount = CalculatePlayerPartyCount(); - for (i=0; i